@coolon/angular-ui-powerups 16.1.0-alpha.238 → 16.1.0-aplpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/assets/activities/activities.scss +6 -8
  2. package/assets/activities/input-activities.scss +6 -14
  3. package/assets/form.scss +23 -77
  4. package/assets/icons.scss +1 -2
  5. package/assets/interaction/editor/inline-string-editor.scss +0 -4
  6. package/assets/interaction.scss +1 -1
  7. package/assets/styles.scss +0 -4
  8. package/assets/table.scss +31 -84
  9. package/assets/tabs.scss +2 -15
  10. package/esm2022/lib/angular-ui-powerups.module.mjs +9 -9
  11. package/esm2022/lib/animations/slide-animations.mjs +10 -15
  12. package/esm2022/lib/components/alignment.mjs +1 -1
  13. package/esm2022/lib/components/busy-overlay/busy-overlay.component.mjs +12 -7
  14. package/esm2022/lib/components/cards/abstract-card-container.component.mjs +7 -31
  15. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +6 -6
  16. package/esm2022/lib/components/cards/card-stack/card-stack.component.mjs +81 -0
  17. package/esm2022/lib/components/commands/command/command.component.mjs +33 -35
  18. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +5 -13
  19. package/esm2022/lib/components/commands/command-face.mjs +11 -12
  20. package/esm2022/lib/components/commands/flex.component.mjs +4 -4
  21. package/esm2022/lib/components/commands/group/command-container.mjs +1 -1
  22. package/esm2022/lib/components/commands/group/popup-aware.component.mjs +8 -31
  23. package/esm2022/lib/components/commands/group/popup-container.mjs +1 -1
  24. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +25 -27
  25. package/esm2022/lib/components/commands/group/popup-menu/more-menu.component.mjs +24 -15
  26. package/esm2022/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +12 -18
  27. package/esm2022/lib/components/commands/group/popup-menu/popup-menu.component.mjs +23 -14
  28. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +19 -12
  29. package/esm2022/lib/components/commands/separator.component.mjs +14 -8
  30. package/esm2022/lib/components/components.module.mjs +58 -73
  31. package/esm2022/lib/components/disposable-component.mjs +40 -74
  32. package/esm2022/lib/components/empty-state/empty-state.component.mjs +9 -5
  33. package/esm2022/lib/components/exports.mjs +12 -16
  34. package/esm2022/lib/components/focus-container/focus-container.component.mjs +4 -4
  35. package/esm2022/lib/components/focusable.component.mjs +5 -5
  36. package/esm2022/lib/components/forms/abstract-input.component.mjs +18 -67
  37. package/esm2022/lib/components/forms/abstract-list-input.component.mjs +4 -4
  38. package/esm2022/lib/components/forms/abstract-value-input.component.mjs +4 -4
  39. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +15 -18
  40. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +8 -10
  41. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +11 -12
  42. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +13 -94
  43. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +7 -44
  44. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +19 -21
  45. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +16 -35
  46. package/esm2022/lib/components/forms/text-input/text-input.component.mjs +8 -12
  47. package/esm2022/lib/components/icon/icon.component.mjs +7 -10
  48. package/esm2022/lib/components/labelled-value/labelled-value.component.mjs +4 -4
  49. package/esm2022/lib/components/loading-container/loading-container.component.mjs +12 -7
  50. package/esm2022/lib/components/noop/noop.component.mjs +7 -5
  51. package/esm2022/lib/components/resize-aware.component.mjs +27 -64
  52. package/esm2022/lib/components/scroll-container/scroll-container.component.mjs +5 -5
  53. package/esm2022/lib/components/section-header/section-header.component.mjs +4 -4
  54. package/esm2022/lib/components/switch-case/switch-case.component.mjs +17 -15
  55. package/esm2022/lib/components/tables/abstract-table-model.mjs +113 -116
  56. package/esm2022/lib/components/tables/abstract-table.component.mjs +8 -23
  57. package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
  58. package/esm2022/lib/components/tables/column/column-model.mjs +23 -20
  59. package/esm2022/lib/components/tables/column/column-template/column-template.directive.mjs +4 -5
  60. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -4
  61. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +5 -5
  62. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +21 -0
  63. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +21 -8
  64. package/esm2022/lib/components/tables/column/property-column-model.mjs +20 -7
  65. package/esm2022/lib/components/tables/column/selection-column-model.mjs +13 -35
  66. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +60 -0
  67. package/esm2022/lib/components/tables/editor/edit-session.mjs +26 -0
  68. package/esm2022/lib/components/tables/editor/editable-cell-renderer.mjs +2 -0
  69. package/esm2022/lib/components/tables/filter/column-text-search-formatter.mjs +1 -1
  70. package/esm2022/lib/components/tables/filter/enable-cell-text-search.decorator.mjs +2 -3
  71. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +12 -16
  72. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -17
  73. package/esm2022/lib/components/tables/paginator/paginator.component.mjs +5 -5
  74. package/esm2022/lib/components/tables/renderer/cell-editors.mjs +2 -0
  75. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +26 -22
  76. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +8 -6
  77. package/esm2022/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.mjs +7 -5
  78. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +8 -19
  79. package/esm2022/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +9 -18
  80. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +53 -266
  81. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +50 -9
  82. package/esm2022/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +7 -5
  83. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.mjs +33 -0
  84. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +60 -0
  85. package/esm2022/lib/components/tables/table/table-model.mjs +35 -18
  86. package/esm2022/lib/components/tables/table/table.component.mjs +64 -42
  87. package/esm2022/lib/components/tables/table-row-menu/table-row-menu.component.mjs +84 -0
  88. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +4 -5
  89. package/esm2022/lib/components/tables/tree-table/flattened-tree-list-model.mjs +1 -1
  90. package/esm2022/lib/components/tables/tree-table/tree-expansion-model.mjs +1 -1
  91. package/esm2022/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +7 -5
  92. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +6 -6
  93. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +4 -4
  94. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +8 -15
  95. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +7 -4
  96. package/esm2022/lib/components/text/markdown/markdown.component.mjs +6 -6
  97. package/esm2022/lib/components/track.mjs +1 -1
  98. package/esm2022/lib/components/types/bounds.class.mjs +1 -1
  99. package/esm2022/lib/components/types/loadable.mjs +2 -0
  100. package/esm2022/lib/components/vertical-focus-container/vertical-focus-container.component.mjs +4 -4
  101. package/esm2022/lib/directives/command.directive.mjs +14 -26
  102. package/esm2022/lib/directives/directives.module.mjs +10 -10
  103. package/esm2022/lib/directives/exports.mjs +1 -2
  104. package/esm2022/lib/directives/focus-binding-factory.mjs +4 -5
  105. package/esm2022/lib/directives/focus-binding.directive.mjs +5 -5
  106. package/esm2022/lib/directives/focus-binding.mjs +2 -22
  107. package/esm2022/lib/directives/garbage-collector.directive.mjs +4 -5
  108. package/esm2022/lib/directives/highlight-text-model.directive.mjs +4 -4
  109. package/esm2022/lib/directives/highlight.pipe.mjs +13 -22
  110. package/esm2022/lib/interaction/abstract-interaction-context.mjs +8 -6
  111. package/esm2022/lib/interaction/activity-ref.mjs +2 -2
  112. package/esm2022/lib/interaction/activity.mjs +23 -24
  113. package/esm2022/lib/interaction/alert.mjs +2 -2
  114. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +10 -14
  115. package/esm2022/lib/interaction/components/abstract-dialog.component.mjs +45 -5
  116. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +17 -30
  117. package/esm2022/lib/interaction/components/activity-body/activity-body.component.mjs +4 -10
  118. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +25 -119
  119. package/esm2022/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +19 -55
  120. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +6 -6
  121. package/esm2022/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.mjs +4 -5
  122. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +4 -5
  123. package/esm2022/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +4 -5
  124. package/esm2022/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +4 -5
  125. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +4 -4
  126. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +4 -5
  127. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +12 -12
  128. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +10 -6
  129. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +10 -6
  130. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +11 -9
  131. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  132. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs +2 -2
  133. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +13 -13
  134. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +9 -25
  135. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +5 -6
  136. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +38 -44
  137. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +12 -14
  138. package/esm2022/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs +5 -6
  139. package/esm2022/lib/interaction/confirm.mjs +2 -26
  140. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +6 -6
  141. package/esm2022/lib/interaction/exports.mjs +1 -6
  142. package/esm2022/lib/interaction/in-place-interaction-context.mjs +1 -1
  143. package/esm2022/lib/interaction/interaction-context.mjs +2 -3
  144. package/esm2022/lib/interaction/interaction.module.mjs +36 -44
  145. package/esm2022/lib/interaction/route-synchronisation-adapter.mjs +1 -1
  146. package/esm2022/lib/interaction/services/interaction-service-routing-adapter.mjs +4 -4
  147. package/esm2022/lib/interaction/services/interaction.service.mjs +10 -23
  148. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +10 -16
  149. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +5 -29
  150. package/esm2022/lib/interaction/services/modal-interaction-context.factory.mjs +1 -1
  151. package/esm2022/lib/place/components/abstract-place-navigation.component.mjs +5 -15
  152. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +9 -8
  153. package/esm2022/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +7 -5
  154. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +21 -23
  155. package/esm2022/lib/place/components/place-outlet/route-animations.mjs +1 -1
  156. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +11 -19
  157. package/esm2022/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +7 -7
  158. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  159. package/esm2022/lib/place/guards/noop-auth-guard.service.mjs +7 -5
  160. package/esm2022/lib/place/guards/place.guard.mjs +14 -30
  161. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  162. package/esm2022/lib/place/navigation/session/abstract-pop-state-navigation.mjs +1 -1
  163. package/esm2022/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs +1 -1
  164. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +1 -1
  165. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +1 -1
  166. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +1 -1
  167. package/esm2022/lib/place/navigation/session/interactions/navigating-during-interaction.mjs +2 -2
  168. package/esm2022/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs +1 -1
  169. package/esm2022/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs +4 -39
  170. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +9 -9
  171. package/esm2022/lib/place/navigation/session/navigating.mjs +2 -2
  172. package/esm2022/lib/place/navigation/session/navigation-context.mjs +1 -1
  173. package/esm2022/lib/place/navigation/session/navigation-session.mjs +2 -11
  174. package/esm2022/lib/place/navigation/session/pop-state-navigation.mjs +1 -1
  175. package/esm2022/lib/place/place-access-guard.mjs +1 -1
  176. package/esm2022/lib/place/place-auth-service.mjs +7 -8
  177. package/esm2022/lib/place/place-component.mjs +79 -82
  178. package/esm2022/lib/place/place-config.mjs +1 -1
  179. package/esm2022/lib/place/place-definition.mjs +5 -18
  180. package/esm2022/lib/place/place-history.mjs +8 -17
  181. package/esm2022/lib/place/place-router.mjs +70 -191
  182. package/esm2022/lib/place/place.decorator.mjs +3 -4
  183. package/esm2022/lib/place/place.module.mjs +17 -17
  184. package/esm2022/lib/place/route/formatter.mjs +2 -2
  185. package/esm2022/lib/place/route/json-types.mjs +1 -1
  186. package/esm2022/lib/place/route/parameter-decorators.mjs +51 -55
  187. package/esm2022/lib/place/route/parameter-definition.mjs +2 -6
  188. package/esm2022/lib/place/route/parameter-sanitiser.mjs +2 -7
  189. package/esm2022/lib/place/route/parameter-snapshot.mjs +1 -1
  190. package/esm2022/lib/place/route/visit-segment-sanitiser.mjs +1 -1
  191. package/esm2022/lib/place/url-service.mjs +4 -4
  192. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  193. package/esm2022/lib/place/visit-segment.mjs +2 -3
  194. package/esm2022/lib/place/visit.mjs +5 -5
  195. package/esm2022/lib/services/markdown/markdown.service.mjs +7 -5
  196. package/esm2022/lib/services/markdown/pill-plugin.mjs +3 -1
  197. package/esm2022/lib/services/visibility-service.mjs +7 -7
  198. package/fesm2022/coolon-angular-ui-powerups.mjs +3634 -5281
  199. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  200. package/lib/angular-ui-powerups.module.d.ts +5 -5
  201. package/lib/animations/slide-animations.d.ts +0 -1
  202. package/lib/components/busy-overlay/busy-overlay.component.d.ts +4 -1
  203. package/lib/components/cards/abstract-card-container.component.d.ts +3 -6
  204. package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
  205. package/lib/components/cards/card-stack/card-stack.component.d.ts +68 -0
  206. package/lib/components/commands/command/command.component.d.ts +10 -9
  207. package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
  208. package/lib/components/commands/command-face.d.ts +9 -8
  209. package/lib/components/commands/group/popup-aware.component.d.ts +5 -10
  210. package/lib/components/commands/group/popup-container.d.ts +1 -1
  211. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +6 -6
  212. package/lib/components/commands/group/popup-menu/more-menu.component.d.ts +4 -2
  213. package/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.d.ts +2 -4
  214. package/lib/components/commands/group/popup-menu/popup-menu.component.d.ts +4 -2
  215. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +7 -3
  216. package/lib/components/commands/separator.component.d.ts +4 -2
  217. package/lib/components/components.module.d.ts +30 -33
  218. package/lib/components/disposable-component.d.ts +9 -26
  219. package/lib/components/empty-state/empty-state.component.d.ts +4 -1
  220. package/lib/components/exports.d.ts +11 -15
  221. package/lib/components/forms/abstract-input.component.d.ts +7 -16
  222. package/lib/components/forms/abstract-list-input.component.d.ts +1 -1
  223. package/lib/components/forms/abstract-value-input.component.d.ts +1 -1
  224. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +2 -2
  225. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  226. package/lib/components/forms/number-input/number-input.component.d.ts +4 -16
  227. package/lib/components/forms/password-input/password-input.component.d.ts +1 -7
  228. package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
  229. package/lib/components/forms/string-input/string-input.component.d.ts +1 -7
  230. package/lib/components/forms/text-input/text-input.component.d.ts +0 -3
  231. package/lib/components/loading-container/loading-container.component.d.ts +4 -1
  232. package/lib/components/noop/noop.component.d.ts +1 -0
  233. package/lib/components/resize-aware.component.d.ts +7 -26
  234. package/lib/components/switch-case/switch-case.component.d.ts +7 -6
  235. package/lib/components/tables/abstract-table-model.d.ts +37 -51
  236. package/lib/components/tables/abstract-table.component.d.ts +7 -8
  237. package/lib/components/tables/column/column-list-model.d.ts +13 -0
  238. package/lib/components/tables/column/column-model.d.ts +17 -14
  239. package/lib/components/tables/column/custom-template-column-model.d.ts +2 -3
  240. package/lib/components/tables/column/custom-value-column-model.d.ts +3 -4
  241. package/lib/components/tables/column/editor-controls-column-model.d.ts +13 -0
  242. package/lib/components/tables/column/list-propery-column-model.d.ts +7 -5
  243. package/lib/components/tables/column/property-column-model.d.ts +9 -7
  244. package/lib/components/tables/column/selection-column-model.d.ts +4 -10
  245. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +17 -0
  246. package/lib/components/tables/editor/edit-session.d.ts +9 -0
  247. package/lib/components/tables/{renderer → editor}/editable-cell-renderer.d.ts +1 -1
  248. package/lib/components/tables/filter/enable-cell-text-search.decorator.d.ts +1 -1
  249. package/lib/components/tables/filter/table-filter-model.d.ts +1 -1
  250. package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
  251. package/lib/components/tables/renderer/cell-editors.d.ts +9 -0
  252. package/lib/components/tables/renderer/cell-portal-ref.d.ts +25 -22
  253. package/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.d.ts +2 -1
  254. package/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +1 -0
  255. package/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.d.ts +2 -3
  256. package/lib/components/tables/renderer/selection-cell/selection-cell.component.d.ts +0 -1
  257. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +21 -55
  258. package/lib/components/tables/renderer/table-cell/table-cell.component.d.ts +14 -5
  259. package/lib/components/tables/renderer/table-header-cell/table-header-cell.component.d.ts +1 -0
  260. package/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.d.ts +15 -0
  261. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +23 -0
  262. package/lib/components/tables/table/table-model.d.ts +36 -10
  263. package/lib/components/tables/table/table.component.d.ts +13 -17
  264. package/lib/components/tables/table-row-menu/table-row-menu.component.d.ts +28 -0
  265. package/lib/components/tables/tree-table/flattened-tree-list-model.d.ts +1 -1
  266. package/lib/components/tables/tree-table/tree-expansion-model.d.ts +2 -2
  267. package/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +1 -0
  268. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +3 -3
  269. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +3 -4
  270. package/lib/components/tables/tree-table/tree-table-component.d.ts +3 -6
  271. package/lib/components/tables/tree-table/tree-table-model.d.ts +6 -5
  272. package/lib/components/text/markdown/markdown.component.d.ts +1 -1
  273. package/lib/components/types/loadable.d.ts +5 -0
  274. package/lib/directives/command.directive.d.ts +5 -7
  275. package/lib/directives/directives.module.d.ts +5 -5
  276. package/lib/directives/exports.d.ts +0 -1
  277. package/lib/directives/focus-binding.d.ts +0 -1
  278. package/lib/directives/highlight.pipe.d.ts +2 -8
  279. package/lib/interaction/abstract-interaction-context.d.ts +5 -5
  280. package/lib/interaction/activity-ref.d.ts +4 -4
  281. package/lib/interaction/activity.d.ts +8 -8
  282. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +2 -3
  283. package/lib/interaction/components/abstract-dialog.component.d.ts +15 -6
  284. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +9 -12
  285. package/lib/interaction/components/activity-body/activity-body.component.d.ts +1 -2
  286. package/lib/interaction/components/activity-container/activity-container.component.d.ts +13 -32
  287. package/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.d.ts +7 -6
  288. package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
  289. package/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.d.ts +2 -2
  290. package/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.d.ts +1 -1
  291. package/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.d.ts +1 -1
  292. package/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.d.ts +1 -1
  293. package/lib/interaction/components/add-card-activity/add-card-activity.component.d.ts +2 -2
  294. package/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.d.ts +3 -3
  295. package/lib/interaction/components/alert-dialog/alert-dialog.component.d.ts +1 -6
  296. package/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.d.ts +2 -2
  297. package/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.d.ts +2 -2
  298. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  299. package/lib/interaction/components/editors/inline-string-editor/inline-editor-model.d.ts +1 -1
  300. package/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.d.ts +2 -2
  301. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +10 -12
  302. package/lib/interaction/components/input-activities/input-activity.d.ts +1 -1
  303. package/lib/interaction/components/input-activities/select-input-activity.d.ts +2 -2
  304. package/lib/interaction/components/input-activities/string-input-activity.d.ts +1 -1
  305. package/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.d.ts +2 -2
  306. package/lib/interaction/confirm.d.ts +0 -4
  307. package/lib/interaction/directives/interaction-context-trigger-for.directive.d.ts +5 -5
  308. package/lib/interaction/exports.d.ts +0 -5
  309. package/lib/interaction/in-place-interaction-context.d.ts +2 -2
  310. package/lib/interaction/interaction-context.d.ts +4 -10
  311. package/lib/interaction/interaction.module.d.ts +33 -35
  312. package/lib/interaction/route-synchronisation-adapter.d.ts +3 -3
  313. package/lib/interaction/services/interaction-service-routing-adapter.d.ts +4 -4
  314. package/lib/interaction/services/interaction.service.d.ts +4 -5
  315. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +5 -4
  316. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.d.ts +5 -6
  317. package/lib/interaction/services/modal-interaction-context.factory.d.ts +2 -2
  318. package/lib/place/components/abstract-place-navigation.component.d.ts +2 -3
  319. package/lib/place/components/not-authorised-notice/not-authorised-notice.component.d.ts +1 -0
  320. package/lib/place/components/place-outlet/place-outlet.component.d.ts +7 -6
  321. package/lib/place/components/side-place-navigation/side-place-navigation.component.d.ts +1 -2
  322. package/lib/place/guards/noop-auth-guard.service.d.ts +1 -0
  323. package/lib/place/guards/place.guard.d.ts +1 -8
  324. package/lib/place/navigation/place-component-deactivation-handler.d.ts +4 -4
  325. package/lib/place/navigation/session/abstract-pop-state-navigation.d.ts +1 -1
  326. package/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.d.ts +3 -3
  327. package/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.d.ts +3 -3
  328. package/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.d.ts +3 -3
  329. package/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.d.ts +1 -1
  330. package/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.d.ts +3 -16
  331. package/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.d.ts +1 -1
  332. package/lib/place/navigation/session/navigation-context.d.ts +5 -5
  333. package/lib/place/navigation/session/navigation-session.d.ts +8 -15
  334. package/lib/place/place-access-guard.d.ts +1 -1
  335. package/lib/place/place-auth-service.d.ts +8 -8
  336. package/lib/place/place-component.d.ts +23 -15
  337. package/lib/place/place-definition.d.ts +3 -6
  338. package/lib/place/place-history.d.ts +4 -5
  339. package/lib/place/place-router.d.ts +10 -41
  340. package/lib/place/place.decorator.d.ts +1 -9
  341. package/lib/place/place.module.d.ts +8 -8
  342. package/lib/place/route/json-types.d.ts +3 -1
  343. package/lib/place/route/parameter-decorators.d.ts +6 -5
  344. package/lib/place/route/parameter-definition.d.ts +5 -5
  345. package/lib/place/route/parameter-sanitiser.d.ts +1 -8
  346. package/lib/place/route/parameter-snapshot.d.ts +2 -2
  347. package/lib/place/route/visit-segment-sanitiser.d.ts +3 -3
  348. package/lib/place/url-service.d.ts +1 -1
  349. package/lib/place/url-snapshot.d.ts +1 -1
  350. package/lib/place/visit-segment.d.ts +6 -6
  351. package/lib/place/visit.d.ts +4 -4
  352. package/lib/services/markdown/markdown.service.d.ts +1 -0
  353. package/lib/services/visibility-service.d.ts +1 -1
  354. package/package.json +20 -19
  355. package/assets/draw.scss +0 -20
  356. package/assets/layout.scss +0 -3
  357. package/assets/place.scss +0 -31
  358. package/esm2022/lib/components/commands/button-renderer/button-renderer.component.mjs +0 -115
  359. package/esm2022/lib/components/file/file-download/file-download.component.mjs +0 -89
  360. package/esm2022/lib/components/forms/form-field.mjs +0 -2
  361. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
  362. package/esm2022/lib/components/loadable-component.mjs +0 -69
  363. package/esm2022/lib/components/tables/column/column-manager.mjs +0 -82
  364. package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
  365. package/esm2022/lib/components/tables/footer/footer-row-model.mjs +0 -135
  366. package/esm2022/lib/components/tables/renderer/abstract-cell-renderer.mjs +0 -7
  367. package/esm2022/lib/components/tables/renderer/editable-cell-renderer.mjs +0 -2
  368. package/esm2022/lib/components/tables/renderer/table-action-column/menu-builder.mjs +0 -2
  369. package/esm2022/lib/components/tables/renderer/table-action-column/table-action-column.component.mjs +0 -153
  370. package/esm2022/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu-popup.component.mjs +0 -45
  371. package/esm2022/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu.component.mjs +0 -71
  372. package/esm2022/lib/components/tables/renderer/table-footer-row/table-footer-row.component.mjs +0 -32
  373. package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
  374. package/esm2022/lib/interaction/activity-context.mjs +0 -4
  375. package/esm2022/lib/interaction/components/alert-renderer/alert-renderer.component.mjs +0 -55
  376. package/esm2022/lib/interaction/components/confirm-renderer/confirm-renderer.component.mjs +0 -54
  377. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +0 -134
  378. package/esm2022/lib/interaction/interaction-context-provider.mjs +0 -17
  379. package/esm2022/lib/place/place-metadata.mjs +0 -16
  380. package/lib/components/commands/button-renderer/button-renderer.component.d.ts +0 -30
  381. package/lib/components/file/file-download/file-download.component.d.ts +0 -45
  382. package/lib/components/forms/form-field.d.ts +0 -5
  383. package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
  384. package/lib/components/loadable-component.d.ts +0 -20
  385. package/lib/components/tables/column/column-manager.d.ts +0 -19
  386. package/lib/components/tables/column/column-order-manager.d.ts +0 -20
  387. package/lib/components/tables/footer/footer-row-model.d.ts +0 -72
  388. package/lib/components/tables/renderer/abstract-cell-renderer.d.ts +0 -6
  389. package/lib/components/tables/renderer/table-action-column/menu-builder.d.ts +0 -7
  390. package/lib/components/tables/renderer/table-action-column/table-action-column.component.d.ts +0 -42
  391. package/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu-popup.component.d.ts +0 -19
  392. package/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu.component.d.ts +0 -24
  393. package/lib/components/tables/renderer/table-footer-row/table-footer-row.component.d.ts +0 -10
  394. package/lib/directives/resize-observer.directive.d.ts +0 -16
  395. package/lib/interaction/activity-context.d.ts +0 -9
  396. package/lib/interaction/components/alert-renderer/alert-renderer.component.d.ts +0 -17
  397. package/lib/interaction/components/confirm-renderer/confirm-renderer.component.d.ts +0 -15
  398. package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +0 -53
  399. package/lib/interaction/interaction-context-provider.d.ts +0 -11
  400. package/lib/place/place-metadata.d.ts +0 -8
@@ -1,15 +1,17 @@
1
- import { Injector } from '@angular/core';
2
- import { DelegatingListModel, DependsOnOptions, Dsl, EventListenerList, GarbageCollector, ProxyRegistry, } from '@coolon/pectin';
3
- import { ColumnManager } from './column/column-manager';
4
- import { CustomTemplateColumnModel } from './column/custom-template-column-model';
5
- import { CustomValueColumnModel } from './column/custom-value-column-model';
6
- import { ListPropertyColumnModel } from './column/list-propery-column-model';
7
- import { PropertyColumnModel } from './column/property-column-model';
8
- import { SelectionColumnModel } from './column/selection-column-model';
9
- import { ColumnTextSearchFormatter } from './filter/column-text-search-formatter';
10
- import { FooterRowModel } from './footer/footer-row-model';
11
- import { TableActionColumnComponent } from './renderer/table-action-column/table-action-column.component';
12
- import { TableCustomMoreMenuComponent } from './renderer/table-custom-more-menu/table-custom-more-menu.component';
1
+ import { Injector } from "@angular/core";
2
+ import { assert, DelegatingListModel, DirtyTrackingForm, Dsl, EventListenerList, GarbageCollector, MutableListModel, SelectionModel, ValueModel, proxify, ProxyRegistry } from "@coolon/pectin";
3
+ import { lang } from "@coolon/typescript-utilities";
4
+ import { isFunction, isNil } from "lodash-es";
5
+ import { ColumnListModel } from "./column/column-list-model";
6
+ import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
7
+ import { CustomValueColumnModel } from "./column/custom-value-column-model";
8
+ import { EditorControlColumnModel } from "./column/editor-controls-column-model";
9
+ import { ListPropertyColumnModel } from "./column/list-propery-column-model";
10
+ import { PropertyColumnModel } from "./column/property-column-model";
11
+ import { SelectionColumnModel } from "./column/selection-column-model";
12
+ import { EditSession } from "./editor/edit-session";
13
+ import { ColumnTextSearchFormatter } from "./filter/column-text-search-formatter";
14
+ import { TableMoreMenuComponent } from "./renderer/table-more-menu/table-more-menu.component";
13
15
  var DefaultArrayFormatter = ColumnTextSearchFormatter.DefaultArrayFormatter;
14
16
  var DefaultValueFormatter = ColumnTextSearchFormatter.DefaultValueFormatter;
15
17
  // export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
@@ -22,60 +24,52 @@ class RowClass {
22
24
  this.matches = matches;
23
25
  }
24
26
  }
25
- class RowAttribute {
26
- attributeName;
27
- getValue;
28
- constructor(attributeName, getValue) {
29
- this.attributeName = attributeName;
30
- this.getValue = getValue;
31
- }
32
- }
33
27
  export class AbstractTableModel extends GarbageCollector {
34
28
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
35
29
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
36
30
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
37
- columnManager = this.registerDisposable(new ColumnManager());
31
+ _columnList = this.registerDisposable(new ColumnListModel());
32
+ _editorSessions = new MutableListModel();
33
+ _rowsBeingEdited$;
34
+ saveCommandFactory;
35
+ _editorSessionByRowId;
38
36
  rowClassNamePredicates = [];
39
- rowAttributeGenerators = [];
40
37
  _columnTextPropertiesLookup;
38
+ editing$;
39
+ firstEditableColumn$;
41
40
  selectionColumnModel;
42
41
  rowSelectionDisabledOnAllColumns$;
43
42
  rowClickListeners = new EventListenerList();
44
43
  firstVisibleColumn$;
45
44
  lastVisibleColumn$;
45
+ _createForm = (row) => new DirtyTrackingForm();
46
46
  textSearchPredicate$;
47
47
  identityOf;
48
48
  dataSourceEmpty$;
49
+ selectionModelProxy = proxify((SelectionModel));
49
50
  selectedItems$;
50
51
  leadSelection$;
51
52
  hasSelection$;
52
- footerRowModels = [];
53
- _viewDependencies = new Set();
54
53
  constructor() {
55
54
  super();
56
55
  const { chain } = Dsl.disposeWith(this);
57
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduceAll(columns => {
58
- const cache = new WeakMap();
56
+ this._rowsBeingEdited$ = new MutableListModel([], {
57
+ identifiedWith: row => this.identityOf(row)
58
+ });
59
+ this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
60
+ this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
61
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
59
62
  return (row, regex) => {
60
- if (!regex)
61
- return true;
62
- let text = cache.get(row);
63
- if (text === undefined) {
64
- text = columns.map(c => c.getSearchTextFor(row)).join('\0');
65
- cache.set(row, text);
66
- }
67
- return regex.test(text);
63
+ return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
68
64
  };
69
65
  });
70
- this.selectionColumnModel = new SelectionColumnModel('selection-column', this.columnManager, () => this.getColumnTextProperties('selection-column'));
71
- this.addColumn(this.selectionColumnModel, { before: null }); // first column
72
- this.addRowClass('aup-row-selected', row => this.selectionColumnModel.isSelected(row));
73
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
74
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
75
- this.rowSelectionDisabledOnAllColumns$ = chain(this.columnManager.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
66
+ this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
67
+ this.firstVisibleColumn$ = chain(this._columnList).first();
68
+ this.lastVisibleColumn$ = chain(this._columnList).last();
69
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
76
70
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
77
- this.selectedItems$ = this.selectionColumnModel.selectionModel.selectedItems$;
78
- this.leadSelection$ = this.selectionColumnModel.selectionModel.leadSelection$;
71
+ this.selectedItems$ = this.selectionModelProxy.selectedItems$;
72
+ this.leadSelection$ = this.selectionModelProxy.leadSelection$;
79
73
  this.hasSelection$ = chain(this.selectedItems$).isNotEmpty();
80
74
  }
81
75
  setDataSource(dataSource$) {
@@ -96,23 +90,9 @@ export class AbstractTableModel extends GarbageCollector {
96
90
  ],
97
91
  parent: injector
98
92
  });
99
- this.columns$.value.forEach(c => c.initialise(customInjector));
93
+ this.columns.value.forEach(c => c.initialise(customInjector));
100
94
  this.identityOf = identityOf;
101
95
  }
102
- /**
103
- * Adds additional models that will trigger a table repaint. This is required if the table
104
- * needs to be redrawn outside of changes to the rows of filters. i.e. some eternal state is used
105
- * to assign row classes etc.
106
- *
107
- * Note: This function must be called before the table is bound to the model.
108
- * @param hasValues
109
- */
110
- viewStateDependsOn(...hasValues) {
111
- hasValues.forEach(it => this._viewDependencies.add(it));
112
- }
113
- get viewStateDependencies() {
114
- return Array.from(this._viewDependencies.values());
115
- }
116
96
  get dataSource$() {
117
97
  return this._dataSource$.readonly$;
118
98
  }
@@ -130,76 +110,97 @@ export class AbstractTableModel extends GarbageCollector {
130
110
  get visibleRows$() {
131
111
  return this._visibleRows$.readonly$;
132
112
  }
133
- get columns$() {
134
- return this.columnManager.allColumns$;
113
+ get rowsBeingEdited$() {
114
+ return this._rowsBeingEdited$.readonly$;
115
+ }
116
+ startEditSession(row) {
117
+ const rowId = this.identityOf(row);
118
+ if (this._rowsBeingEdited$.query().indexOf(row) > -1) {
119
+ return lang.illegalState(`Row with id=${rowId} already being edited`);
120
+ }
121
+ // todo: pass the factories to the edit session so we can make the whole lot pluggable?
122
+ const form = this._createForm(row);
123
+ const saveCommand = this.saveCommandFactory.create(form, { disposedWith: this });
124
+ const editSession = new EditSession(rowId, row, form, saveCommand);
125
+ const { when } = Dsl.disposeWith(editSession);
126
+ when(editSession.liveRowValue$).changes((editedValue) => {
127
+ this._rowsBeingEdited$.replaceOrPush(editedValue);
128
+ }, { initialValue: "triggerChangeUnlessNil" });
129
+ this._editorSessions.push(editSession);
130
+ editSession.onDispose(() => {
131
+ this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
132
+ this._editorSessions.remove(editSession);
133
+ });
134
+ return editSession;
135
+ }
136
+ getEditSessionFor(row) {
137
+ return this._editorSessionByRowId.get(this.identityOf(row));
138
+ }
139
+ cancelAllEditorSessions() {
140
+ this._editorSessions.runInTransaction((draft) => {
141
+ this._rowsBeingEdited$.runInTransaction(() => {
142
+ draft.value.forEach(session => session.dispose());
143
+ });
144
+ });
145
+ }
146
+ get columns() {
147
+ return this._columnList.allColumns$;
135
148
  }
136
- get visibleColumns$() {
137
- return this.columnManager.visibleColumns$;
149
+ get visibleColumns() {
150
+ return this._columnList.readonly$;
138
151
  }
139
152
  pluck(property, options) {
140
153
  const columnId = options?.columnId || property.toString();
141
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
154
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
142
155
  }
143
156
  pluckList(property, options) {
144
157
  const columnId = options?.columnId || property.toString();
145
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
146
- }
147
- useSelectionModel(selectionModel) {
158
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
159
+ }
160
+ // TODO: clean this up and assign the selection model on teh table directly.
161
+ // tableModel.useSelectionModel(model) and have the seleciton column automatically
162
+ // added. Need to look at how we're using the visibility controls as well.
163
+ // Should also lazy create the selection column model if someone accesses it.
164
+ _addSelectionColumn(selectionModel, visible) {
165
+ assert.isNil(this.selectionColumnModel);
166
+ const columnId = "selection-column";
167
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
148
168
  this.selectionColumnModel.useSelectionModel(selectionModel);
169
+ this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
170
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
171
+ if (!isNil(visible)) {
172
+ selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
173
+ }
174
+ return selectionColumnModel;
175
+ }
176
+ addEditControls(saveCommandFactory, formFactory) {
177
+ this.saveCommandFactory = saveCommandFactory;
178
+ if (isFunction(formFactory)) {
179
+ this._createForm = formFactory;
180
+ }
181
+ const columnId = "editControls";
182
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
149
183
  }
150
184
  addCustomColumn(columnId, dataAccessor) {
151
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
185
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
152
186
  }
153
187
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
154
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
188
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
155
189
  }
156
- addMoreMenu(builder) {
157
- // re-using the action column as it much simpler in teh case of just commands
158
- return this.addActionColumn((component) => {
159
- component.addMoreMenu(builder);
190
+ addMoreMenu(componentClass) {
191
+ return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
192
+ component.configurePopupComponentType(componentClass);
160
193
  }).columnTextProperties({
161
194
  headerText() {
162
- return '';
195
+ return "";
163
196
  }
164
197
  });
165
198
  }
166
- /**
167
- * Use this method if the more menu popup needs custom components
168
- */
169
- addCustomMoreMenu(componentClass, initialiseCallback) {
170
- return this.addComponentColumn('custom-more-menu', TableCustomMoreMenuComponent, (component) => {
171
- component.configurePopupComponentType(componentClass, initialiseCallback);
172
- }).columnTextProperties({
173
- headerText() {
174
- return '';
175
- }
176
- });
177
- }
178
- addActionColumn(builder) {
179
- return this.addComponentColumn("actions", TableActionColumnComponent, (c) => {
180
- builder(c);
181
- });
182
- }
183
- addFooterRow(componentOrBuilder, initialiseCallback) {
184
- // A component type is a class (has a prototype); a builder is an arrow function (prototype is undefined).
185
- const isBuilder = !componentOrBuilder.prototype;
186
- const row = isBuilder
187
- ? FooterRowModel.Impl.fromBuilder(componentOrBuilder)
188
- : FooterRowModel.Impl.fullWidth(componentOrBuilder, initialiseCallback);
189
- this.footerRowModels.push(row);
190
- return row;
191
- }
192
199
  addTemplateColumn(columnId) {
193
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
200
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
194
201
  }
195
- addRowClass(className, predicate, options) {
202
+ addRowClass(className, predicate) {
196
203
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
197
- if (options) {
198
- this.viewStateDependsOn(...DependsOnOptions.extract(options));
199
- }
200
- }
201
- addRowAttribute(attributeName, getValue) {
202
- this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
203
204
  }
204
205
  getRowClasses(row) {
205
206
  const classNames = [];
@@ -210,13 +211,8 @@ export class AbstractTableModel extends GarbageCollector {
210
211
  });
211
212
  return classNames;
212
213
  }
213
- getRowAttributes(row) {
214
- return this.rowAttributeGenerators.reduce((result, generator) => {
215
- return { ...result, [generator.attributeName]: generator.getValue(row) };
216
- }, {});
217
- }
218
- addColumn(column, position) {
219
- return this.columnManager.addColumn(column, position);
214
+ addColumn(column, index) {
215
+ return this._columnList.addColumn(column, index);
220
216
  }
221
217
  columnTextProperties(columnTextProperties) {
222
218
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -231,10 +227,11 @@ export class AbstractTableModel extends GarbageCollector {
231
227
  return this.hasUserSelectionModelThatIsEnabled() && !this.rowSelectionDisabledOnAllColumns$.value;
232
228
  }
233
229
  hasUserSelectionModelThatIsEnabled() {
234
- return this.selectionColumnModel.selectionModel.enabled$.value;
230
+ const userSelectionModel = this.selectionColumnModel?.selectionModel.getProxyTarget();
231
+ return !!userSelectionModel && userSelectionModel.enabled$.value;
235
232
  }
236
233
  getSelectionModel() {
237
- return this.selectionColumnModel.selectionModel;
234
+ return this.selectionColumnModel?.selectionModel;
238
235
  }
239
236
  isHoverEnabled() {
240
237
  return this.isRowSelectionEnabled() || this.rowClickListeners.listenerCount > 0;
@@ -264,4 +261,4 @@ export class AbstractTableModel extends GarbageCollector {
264
261
  }
265
262
  }
266
263
  ProxyRegistry.registerOneTimeBinding(AbstractTableModel);
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFHTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBRWhCLEdBQUcsRUFDSCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBR2hCLGFBQWEsR0FJZCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUl0RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVoRixPQUFPLEVBQXdCLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBR2hGLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBRXhHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9FQUFvRSxDQUFDO0FBQ2hILElBQU8scUJBQXFCLEdBQUcseUJBQXlCLENBQUMscUJBQXFCLENBQUM7QUFDL0UsSUFBTyxxQkFBcUIsR0FBRyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztBQUUvRSxvR0FBb0c7QUFDcEcs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QUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIHRhYmxlIG1vZGVsIGJhc2Ug4oCUIGdlbmVyaWMgb3ZlciBhcmJpdHJhcnkgcm93IHR5cGVzICovXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERlcGVuZHNPbk9wdGlvbnMsXG4gIERpc3Bvc2FibGUsXG4gIERzbCxcbiAgRXZlbnRMaXN0ZW5lckxpc3QsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIEhhc1ZhbHVlLFxuICBMaXN0TW9kZWwsXG4gIFByb3h5UmVnaXN0cnksXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5pbXBvcnQge0NvbHVtbk1hbmFnZXJ9IGZyb20gJy4vY29sdW1uL2NvbHVtbi1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHtDZWxsUmVuZGVyZXJPcHRpb25zLCBDb2x1bW5Nb2RlbCwgT25Db21wb25lbnRJbml0fSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHR5cGUge0NvbHVtbk9yZGVyTWFuYWdlcn0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLW9yZGVyLW1hbmFnZXInO1xuaW1wb3J0IHR5cGUge0NvbHVtblRleHRQcm9wZXJ0aWVzfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tdGV4dC1wcm9wZXJ0aWVzJztcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSAnLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQge0N1c3RvbVZhbHVlQ29sdW1uTW9kZWx9IGZyb20gJy4vY29sdW1uL2N1c3RvbS12YWx1ZS1jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSAnLi9jb2x1bW4vbGlzdC1wcm9wZXJ5LWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQge1Byb3BlcnR5Q29sdW1uTW9kZWx9IGZyb20gJy4vY29sdW1uL3Byb3BlcnR5LWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQge1NlbGVjdGlvbkNvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9zZWxlY3Rpb24tY29sdW1uLW1vZGVsJztcblxuaW1wb3J0IHtDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyfSBmcm9tICcuL2ZpbHRlci9jb2x1bW4tdGV4dC1zZWFyY2gtZm9ybWF0dGVyJztcbmltcG9ydCB0eXBlIHtUZXh0U2VhcmNoUHJlZGljYXRlfSBmcm9tICcuL2ZpbHRlci90ZXh0LXNlYXJjaC1wcmVkaWNhdGUnO1xuaW1wb3J0IHtGb290ZXJSb3dDZWxsc0J1aWxkZXIsIEZvb3RlclJvd01vZGVsfSBmcm9tICcuL2Zvb3Rlci9mb290ZXItcm93LW1vZGVsJztcbmltcG9ydCB0eXBlIHtDZWxsUmVuZGVyZXJ9IGZyb20gJy4vcmVuZGVyZXIvY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgdHlwZSB7TWVudUJ1aWxkZXJ9IGZyb20gJy4vcmVuZGVyZXIvdGFibGUtYWN0aW9uLWNvbHVtbi9tZW51LWJ1aWxkZXInO1xuaW1wb3J0IHtUYWJsZUFjdGlvbkNvbHVtbkNvbXBvbmVudH0gZnJvbSAnLi9yZW5kZXJlci90YWJsZS1hY3Rpb24tY29sdW1uL3RhYmxlLWFjdGlvbi1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHtUYWJsZUN1c3RvbU1vcmVNZW51UG9wdXBDb21wb25lbnR9IGZyb20gJy4vcmVuZGVyZXIvdGFibGUtY3VzdG9tLW1vcmUtbWVudS90YWJsZS1jdXN0b20tbW9yZS1tZW51LXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlQ3VzdG9tTW9yZU1lbnVDb21wb25lbnR9IGZyb20gJy4vcmVuZGVyZXIvdGFibGUtY3VzdG9tLW1vcmUtbWVudS90YWJsZS1jdXN0b20tbW9yZS1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgRGVmYXVsdEFycmF5Rm9ybWF0dGVyID0gQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlci5EZWZhdWx0QXJyYXlGb3JtYXR0ZXI7XG5pbXBvcnQgRGVmYXVsdFZhbHVlRm9ybWF0dGVyID0gQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlci5EZWZhdWx0VmFsdWVGb3JtYXR0ZXI7XG5cbi8vIGV4cG9ydCB0eXBlIFN0cmluZ1Byb3BlcnRpZXNPZjxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBzdHJpbmcgPyBLIDogbmV2ZXIgfVtrZXlvZiBUXTtcbi8vIGV4cG9ydCB0eXBlIE51bWJlclByb3BlcnRpZXNPZjxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBudW1iZXIgPyBLIDogbmV2ZXIgfVtrZXlvZiBUXTtcblxuY2xhc3MgUm93Q2xhc3M8Um93PiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNsYXNzTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICByZWFkb25seSBtYXRjaGVzOiAocm93OiBSb3cpID0+IGJvb2xlYW4pIHtcbiAgfVxufVxuXG5jbGFzcyBSb3dBdHRyaWJ1dGU8Um93PiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgZ2V0VmFsdWU6IChyb3c6IFJvdykgPT4gc3RyaW5nKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFTb3VyY2UkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb2x1bW5NYW5hZ2VyID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IENvbHVtbk1hbmFnZXI8Um93PigpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsYXNzTmFtZVByZWRpY2F0ZXM6IFJvd0NsYXNzPFJvdz5bXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0F0dHJpYnV0ZUdlbmVyYXRvcnM6IFJvd0F0dHJpYnV0ZTxSb3c+W10gPSBbXTtcblxuICBwcml2YXRlIF9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cDogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogQ29sdW1uVGV4dFByb3BlcnRpZXMgfTtcblxuICByZWFkb25seSBzZWxlY3Rpb25Db2x1bW5Nb2RlbDogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PjtcbiAgcHJpdmF0ZSByb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xpY2tMaXN0ZW5lcnMgPSBuZXcgRXZlbnRMaXN0ZW5lckxpc3Q8KHJvdzogUm93KSA9PiB2b2lkPigpO1xuICByZWFkb25seSBmaXJzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuICByZWFkb25seSBsYXN0VmlzaWJsZUNvbHVtbiQ6IFZhbHVlTW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFByZWRpY2F0ZSQ6IFZhbHVlTW9kZWw8VGV4dFNlYXJjaFByZWRpY2F0ZTxSb3c+PjtcbiAgcHJvdGVjdGVkIGlkZW50aXR5T2Y6IChpdGVtOiBSb3cpID0+IGFueTtcbiAgcmVhZG9ubHkgZGF0YVNvdXJjZUVtcHR5JDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgcmVhZG9ubHkgZm9vdGVyUm93TW9kZWxzOiBGb290ZXJSb3dNb2RlbC5JbXBsW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0RlcGVuZGVuY2llcyA9IG5ldyBTZXQ8SGFzVmFsdWU8YW55Pj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5yZWR1Y2VBbGwoY29sdW1ucyA9PiB7XG4gICAgICBjb25zdCBjYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgc3RyaW5nPigpO1xuICAgICAgcmV0dXJuIChyb3c6IFJvdywgcmVnZXg6IFJlZ0V4cCkgPT4ge1xuICAgICAgICBpZiAoIXJlZ2V4KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IHRleHQgPSBjYWNoZS5nZXQocm93IGFzIG9iamVjdCk7XG4gICAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0ZXh0ID0gY29sdW1ucy5tYXAoYyA9PiBjLmdldFNlYXJjaFRleHRGb3Iocm93KSkuam9pbignXFwwJyk7XG4gICAgICAgICAgY2FjaGUuc2V0KHJvdyBhcyBvYmplY3QsIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHRleHQpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSBuZXcgU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93Pignc2VsZWN0aW9uLWNvbHVtbicsIHRoaXMuY29sdW1uTWFuYWdlciwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcygnc2VsZWN0aW9uLWNvbHVtbicpKTtcbiAgICB0aGlzLmFkZENvbHVtbih0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLCB7IGJlZm9yZTogbnVsbCB9KTsgLy8gZmlyc3QgY29sdW1uXG4gICAgdGhpcy5hZGRSb3dDbGFzcygnYXVwLXJvdy1zZWxlY3RlZCcsIHJvdyA9PiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLmlzU2VsZWN0ZWQocm93KSk7XG5cbiAgICB0aGlzLmZpcnN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLnZpc2libGVDb2x1bW5zJCkuZmlyc3QoKTtcbiAgICB0aGlzLmxhc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuY29sdW1uTWFuYWdlci52aXNpYmxlQ29sdW1ucyQpLnNlbGVjdChjb2x1bW4gPT4gY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpKS5jb3VudCgpLmVxdWFscygwKTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUVtcHR5JCA9IGNoYWluKHRoaXMuZGF0YVNvdXJjZSQpLmlzRW1wdHkoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyQgPSB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkSXRlbXMkO1xuICAgIHRoaXMubGVhZFNlbGVjdGlvbiQgPSB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnNlbGVjdGlvbk1vZGVsLmxlYWRTZWxlY3Rpb24kO1xuICAgIHRoaXMuaGFzU2VsZWN0aW9uJCA9IGNoYWluKHRoaXMuc2VsZWN0ZWRJdGVtcyQpLmlzTm90RW1wdHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREYXRhU291cmNlKGRhdGFTb3VyY2UkKSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSQuc2V0RGVsZWdhdGUoZGF0YVNvdXJjZSQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZG86IG1ha2UgdGhpcyBmb3JjZSBvbmUgdGFibGUgYXQgYSB0aW1lXG4gICAqIEBwYXJhbSBpbmplY3RvclxuICAgKiBAcGFyYW0gaWRlbnRpdHlPZlxuICAgKiBAcGFyYW0gcmVzdFxuICAgKi9cbiAgaW5pdGlhbGlzZShpbmplY3RvcjogSW5qZWN0b3IsIGlkZW50aXR5T2Y6IChpdGVtOiBSb3cpID0+IGFueSkge1xuICAgIC8vIG5vdCBzdXJlIGlmIEkgc2hvdWxkIGRlZmluZSB0aGVzZSBhdCB0aGUgbW9kdWxlIGxldmVsIG9yIG5vdC4uLlxuICAgIGNvbnN0IGN1c3RvbUluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IERlZmF1bHRWYWx1ZUZvcm1hdHRlciB9LFxuICAgICAgICB7IHByb3ZpZGU6IERlZmF1bHRBcnJheUZvcm1hdHRlciB9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiBpbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuY29sdW1ucyQudmFsdWUuZm9yRWFjaChjID0+IGMuaW5pdGlhbGlzZShjdXN0b21JbmplY3RvcikpO1xuICAgIHRoaXMuaWRlbnRpdHlPZiA9IGlkZW50aXR5T2Y7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhZGRpdGlvbmFsIG1vZGVscyB0aGF0IHdpbGwgdHJpZ2dlciBhIHRhYmxlIHJlcGFpbnQuICBUaGlzIGlzIHJlcXVpcmVkIGlmIHRoZSB0YWJsZVxuICAgKiBuZWVkcyB0byBiZSByZWRyYXduIG91dHNpZGUgb2YgY2hhbmdlcyB0byB0aGUgcm93cyBvZiBmaWx0ZXJzLiAgaS5lLiBzb21lIGV0ZXJuYWwgc3RhdGUgaXMgdXNlZFxuICAgKiB0byBhc3NpZ24gcm93IGNsYXNzZXMgZXRjLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgdGFibGUgaXMgYm91bmQgdG8gdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0gaGFzVmFsdWVzXG4gICAqL1xuICB2aWV3U3RhdGVEZXBlbmRzT24oLi4uaGFzVmFsdWVzOiBSZWFkb25seUFycmF5PEhhc1ZhbHVlPGFueT4+KSB7XG4gICAgaGFzVmFsdWVzLmZvckVhY2goaXQgPT4gdGhpcy5fdmlld0RlcGVuZGVuY2llcy5hZGQoaXQpKTtcbiAgfVxuXG4gIGdldCB2aWV3U3RhdGVEZXBlbmRlbmNpZXMoKTogUmVhZG9ubHlBcnJheTxIYXNWYWx1ZTxhbnk+PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdmlld0RlcGVuZGVuY2llcy52YWx1ZXMoKSk7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIHRoYXQgYXJlIHZpc2libGUgYWZ0ZXIgYW55IGZpbHRlcnMgYXJlIGFwcGxpZWQuICBJZiB0aGVyZSBhcmVcbiAgICogbm8gZmlsdGVycyB0aGVuIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgcm9vdCBkYXRhc2V0LlxuICAgKi9cbiAgZ2V0IGZpbHRlcmVkUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZFJvd3MkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIGFyZSBjdXJyZW50bHkgdmlzaWJsZSB0byB0aGUgdXNlci4gIEkuZS4gdGhlIGN1cnJlbnQgcGFnZSBpbiBhIHBhZ2VkIHRhYmxlIG9yIHRoZVxuICAgKiBleHBhbmRlZCByb3dzIGluIGEgdHJlZSB0YWJsZS5cbiAgICovXG4gIGdldCB2aXNpYmxlUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMkKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlci5hbGxDb2x1bW5zJDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYW5hZ2VyLnZpc2libGVDb2x1bW5zJDtcbiAgfVxuXG4gIHBsdWNrPFAgZXh0ZW5kcyBUeXBlcy5WYWx1ZVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHtcbiAgICBjb2x1bW5JZDogc3RyaW5nXG4gIH0pOiBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHBsdWNrTGlzdDxQIGV4dGVuZHMgVHlwZXMuQXJyYXlQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7XG4gICAgY29sdW1uSWQ6IHN0cmluZ1xuICB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHVzZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93Pikge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uTW9kZWwpO1xuICB9XG5cbiAgYWRkQ3VzdG9tQ29sdW1uPFY+KGNvbHVtbklkOiBzdHJpbmcsIGRhdGFBY2Nlc3NvcjogKHJvdzogUm93KSA9PiBWKTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBWPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgZGF0YUFjY2Vzc29yKSk7XG4gIH1cblxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uSW5pdD86IE9uQ29tcG9uZW50SW5pdDxDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb3B0aW9ucz86IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Db21wb25lbnRJbml0T3JPcHRpb25zPzogT25Db21wb25lbnRJbml0PEM+IHwgQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4oY29sdW1uSWQsIHRoaXMuY29sdW1uTWFuYWdlciwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIHJvdyA9PiByb3cpKS5jZWxsUmVuZGVyZXIoY29tcG9uZW50LCBvbkNvbXBvbmVudEluaXRPck9wdGlvbnMpO1xuICB9XG5cbiAgYWRkTW9yZU1lbnU8QyBleHRlbmRzIFRhYmxlQ3VzdG9tTW9yZU1lbnVQb3B1cENvbXBvbmVudDxSb3c+PihidWlsZGVyOiAobWVudTogTWVudUJ1aWxkZXI8Um93PikgPT4gdm9pZCkge1xuICAgIC8vIHJlLXVzaW5nIHRoZSBhY3Rpb24gY29sdW1uIGFzIGl0IG11Y2ggc2ltcGxlciBpbiB0ZWggY2FzZSBvZiBqdXN0IGNvbW1hbmRzXG4gICAgcmV0dXJuIHRoaXMuYWRkQWN0aW9uQ29sdW1uKChjb21wb25lbnQpID0+IHtcbiAgICAgIGNvbXBvbmVudC5hZGRNb3JlTWVudShidWlsZGVyKTtcbiAgICB9KS5jb2x1bW5UZXh0UHJvcGVydGllcyh7XG4gICAgICBoZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgaWYgdGhlIG1vcmUgbWVudSBwb3B1cCBuZWVkcyBjdXN0b20gY29tcG9uZW50c1xuICAgKi9cbiAgYWRkQ3VzdG9tTW9yZU1lbnU8QyBleHRlbmRzIFRhYmxlQ3VzdG9tTW9yZU1lbnVQb3B1cENvbXBvbmVudDxSb3c+Pihjb21wb25lbnRDbGFzczogQ29uc3RydWN0YWJsZTxDPiwgaW5pdGlhbGlzZUNhbGxiYWNrPzogKGNvbXBvbmVudDogQykgPT4gdm9pZCkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbignY3VzdG9tLW1vcmUtbWVudScsIFRhYmxlQ3VzdG9tTW9yZU1lbnVDb21wb25lbnQsIChjb21wb25lbnQ6IFRhYmxlQ3VzdG9tTW9yZU1lbnVDb21wb25lbnQ8Um93PikgPT4ge1xuICAgICAgY29tcG9uZW50LmNvbmZpZ3VyZVBvcHVwQ29tcG9uZW50VHlwZShjb21wb25lbnRDbGFzcywgaW5pdGlhbGlzZUNhbGxiYWNrKTtcbiAgICB9KS5jb2x1bW5UZXh0UHJvcGVydGllcyh7XG4gICAgICBoZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFjdGlvbkNvbHVtbihidWlsZGVyOiAobWVudTogVGFibGVBY3Rpb25Db2x1bW5Db21wb25lbnQ8Um93PikgPT4gdm9pZCkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbihcImFjdGlvbnNcIiwgVGFibGVBY3Rpb25Db2x1bW5Db21wb25lbnQsIChjOiBUYWJsZUFjdGlvbkNvbHVtbkNvbXBvbmVudDxSb3c+KSA9PiB7XG4gICAgICBidWlsZGVyKGMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGJ1aWxkZXIgb3ZlcmxvYWQgaXMgZGVjbGFyZWQgZmlyc3Qgc28gYW4gYXJyb3cgYXJndW1lbnQgcmVzb2x2ZXMgdG8gaXQgdW5kZXJcbiAgLy8gbm9JbXBsaWNpdEFueSDigJQgYSBjb21wb25lbnQgY2xhc3MgKGNvbnN0cnVjdCBzaWduYXR1cmUgb25seSkgY2FuJ3QgbWF0Y2ggKHJvdykgPT4gdm9pZCxcbiAgLy8gc28gaXQgZmFsbHMgdGhyb3VnaCB0byB0aGUgZnVsbC13aWR0aCBvdmVybG9hZCBiZWxvdy5cbiAgLyoqIEEgY29sdW1uLWFsaWduZWQgZm9vdGVyIHJvdyB3aG9zZSBjZWxscyBhbmNob3IgdG8gc3BlY2lmaWMgY29sdW1ucy4gKi9cbiAgYWRkRm9vdGVyUm93KGJ1aWxkZXI6IChyb3c6IEZvb3RlclJvd0NlbGxzQnVpbGRlcikgPT4gdm9pZCk6IEZvb3RlclJvd01vZGVsLkltcGw7XG4gIC8qKiBBIGZvb3RlciByb3cgc3Bhbm5pbmcgdGhlIGZ1bGwgdGFibGUgd2lkdGggKHRoZSByb3cgY29tcG9uZW50IGxheXMgb3V0IGl0cyBvd24gY29udGVudCkuICovXG4gIGFkZEZvb3RlclJvdzxDPihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIGluaXRpYWxpc2VDYWxsYmFjaz86IChjb21wb25lbnQ6IEMpID0+IHZvaWQpOiBGb290ZXJSb3dNb2RlbC5JbXBsO1xuICBhZGRGb290ZXJSb3c8Qz4oY29tcG9uZW50T3JCdWlsZGVyOiBDb21wb25lbnRUeXBlPEM+IHwgKChyb3c6IEZvb3RlclJvd0NlbGxzQnVpbGRlcikgPT4gdm9pZCksXG4gICAgICAgICAgICAgICAgICBpbml0aWFsaXNlQ2FsbGJhY2s/OiAoY29tcG9uZW50OiBDKSA9PiB2b2lkKTogRm9vdGVyUm93TW9kZWwuSW1wbCB7XG4gICAgLy8gQSBjb21wb25lbnQgdHlwZSBpcyBhIGNsYXNzIChoYXMgYSBwcm90b3R5cGUpOyBhIGJ1aWxkZXIgaXMgYW4gYXJyb3cgZnVuY3Rpb24gKHByb3RvdHlwZSBpcyB1bmRlZmluZWQpLlxuICAgIGNvbnN0IGlzQnVpbGRlciA9ICEoY29tcG9uZW50T3JCdWlsZGVyIGFzIHsgcHJvdG90eXBlPzogdW5rbm93biB9KS5wcm90b3R5cGU7XG4gICAgY29uc3Qgcm93ID0gaXNCdWlsZGVyXG4gICAgICA/IEZvb3RlclJvd01vZGVsLkltcGwuZnJvbUJ1aWxkZXIoY29tcG9uZW50T3JCdWlsZGVyIGFzIChyb3c6IEZvb3RlclJvd0NlbGxzQnVpbGRlcikgPT4gdm9pZClcbiAgICAgIDogRm9vdGVyUm93TW9kZWwuSW1wbC5mdWxsV2lkdGgoY29tcG9uZW50T3JCdWlsZGVyIGFzIENvbXBvbmVudFR5cGU8Qz4sIGluaXRpYWxpc2VDYWxsYmFjayk7XG4gICAgdGhpcy5mb290ZXJSb3dNb2RlbHMucHVzaChyb3cpO1xuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBhZGRUZW1wbGF0ZUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nKTogQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgYWRkUm93Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHByZWRpY2F0ZTogKHJvdzogUm93KSA9PiBib29sZWFuLCBvcHRpb25zPzogRGVwZW5kc09uT3B0aW9ucykge1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5wdXNoKG5ldyBSb3dDbGFzczxSb3c+KGNsYXNzTmFtZSwgcHJlZGljYXRlKSk7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlld1N0YXRlRGVwZW5kc09uKC4uLkRlcGVuZHNPbk9wdGlvbnMuZXh0cmFjdChvcHRpb25zKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkUm93QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZ2V0VmFsdWU6IChyb3c6IFJvdykgPT4gc3RyaW5nKSB7XG4gICAgdGhpcy5yb3dBdHRyaWJ1dGVHZW5lcmF0b3JzLnB1c2gobmV3IFJvd0F0dHJpYnV0ZTxSb3c+KGF0dHJpYnV0ZU5hbWUsIGdldFZhbHVlKSk7XG4gIH1cblxuICBnZXRSb3dDbGFzc2VzKHJvdzogUm93KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5yb3dDbGFzc05hbWVQcmVkaWNhdGVzLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS5tYXRjaGVzKHJvdykpIHtcbiAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGkuY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3NOYW1lcztcbiAgfVxuXG4gIGdldFJvd0F0dHJpYnV0ZXMocm93OiBSb3cpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5yb3dBdHRyaWJ1dGVHZW5lcmF0b3JzLnJlZHVjZSgocmVzdWx0LCBnZW5lcmF0b3IpID0+IHtcbiAgICAgIHJldHVybiB7IC4uLnJlc3VsdCwgW2dlbmVyYXRvci5hdHRyaWJ1dGVOYW1lXTogZ2VuZXJhdG9yLmdldFZhbHVlKHJvdykgfTtcbiAgICB9LCB7fSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhZGRDb2x1bW48QyBleHRlbmRzIENvbHVtbk1vZGVsPFJvdz4+KGNvbHVtbjogQywgcG9zaXRpb24/OiBDb2x1bW5PcmRlck1hbmFnZXIuUG9zaXRpb24pOiBDIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYW5hZ2VyLmFkZENvbHVtbihjb2x1bW4sIHBvc2l0aW9uKTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9KSB7XG4gICAgdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPSBjb2x1bW5UZXh0UHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkOiBzdHJpbmcpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID8gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXBbY29sdW1uSWRdIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgJiYgY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnNlbGVjdGlvbk1vZGVsLmVuYWJsZWQkLnZhbHVlO1xuICB9XG5cbiAgZ2V0U2VsZWN0aW9uTW9kZWwoKTogU2VsZWN0aW9uTW9kZWw8Um93PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwuc2VsZWN0aW9uTW9kZWw7XG4gIH1cblxuICBpc0hvdmVyRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSB8fCB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmxpc3RlbmVyQ291bnQgPiAwO1xuICB9XG5cbiAgaXNDdXJzb3JFbmFibGVkKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW4pIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3RSb3cocm93KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2tlZChjYWxsYmFjazogKHJvdzogUm93KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuYWRkKGNhbGxiYWNrKTtcbiAgfVxuXG4gIF9ub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Piwgcm93OiBSb3cpIHtcbiAgICBpZiAodGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uTW9kZWwpKSB7XG4gICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyh7XG4gICAgICAvLyAgIGhhc0VuYWJsZWRVc2VyU2VsZWN0aW9uTW9kZWw6IHRoaXMuaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpLFxuICAgICAgLy8gICBhbGxTZWxlY3Rpb25EaXNhYmxlZDogdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWUsXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWQ6IHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCksXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWRGb3JDb2x1bW46IGNvbHVtbk1vZGVsLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpXG4gICAgICAvLyB9KVxuICAgIH1cblxuICAgIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuZmlyZShsID0+IGwocm93KSk7XG4gIH1cblxufVxuXG5Qcm94eVJlZ2lzdHJ5LnJlZ2lzdGVyT25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKTtcbiJdfQ==
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUdkLFVBQVUsRUFDTyxPQUFPLEVBQWEsYUFBYSxFQUNuRCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBS2hGLE9BQU8s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QztDQUVGO0FBQ0QsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHtJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgQm9vbGVhblZhbHVlTW9kZWxDaGFpbixcbiAgQ2FuSWRlbnRpZnksXG4gIENvbW1hbmQsIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBQcm94aWZ5LFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluLCBwcm94aWZ5LCBQcm94aWZpZWQsIFByb3h5UmVnaXN0cnlcbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgeyBsYW5nIH0gZnJvbSBcIkBjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHtpc0Z1bmN0aW9uLCBpc05pbH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi9hYnN0cmFjdC10YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7Q29sdW1uTGlzdE1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWxcIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyT3B0aW9ucywgQ29sdW1uTW9kZWwsIE9uQ29tcG9uZW50SW5pdH0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5UZXh0UHJvcGVydGllc30gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi10ZXh0LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS10ZW1wbGF0ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q3VzdG9tVmFsdWVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS12YWx1ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdG9yQ29udHJvbENvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vZWRpdG9yLWNvbnRyb2xzLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2xpc3QtcHJvcGVyeS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3Byb3BlcnR5LWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25Db2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3NlbGVjdGlvbi1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdFNlc3Npb259IGZyb20gXCIuL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyfSBmcm9tIFwiLi9yZW5kZXJlci9jZWxsLXJlbmRlcmVyXCI7XG5cbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4vZmlsdGVyL2NvbHVtbi10ZXh0LXNlYXJjaC1mb3JtYXR0ZXJcIjtcbmltcG9ydCB7VGV4dFNlYXJjaFByZWRpY2F0ZX0gZnJvbSBcIi4vZmlsdGVyL3RleHQtc2VhcmNoLXByZWRpY2F0ZVwiO1xuaW1wb3J0IHtcbiAgVGFibGVNb3JlTWVudVBvcHVwQ29tcG9uZW50XG59IGZyb20gXCIuL3JlbmRlcmVyL3RhYmxlLW1vcmUtbWVudS90YWJsZS1tb3JlLW1lbnUtcG9wdXAvdGFibGUtbW9yZS1tZW51LXBvcHVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vcmVNZW51Q29tcG9uZW50fSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vZGVsfSBmcm9tIFwiLi90YWJsZS90YWJsZS1tb2RlbFwiO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFTb3VyY2UkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkxpc3QgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQ29sdW1uTGlzdE1vZGVsPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcmVhZG9ubHkgZWRpdGluZyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHJlYWRvbmx5IGZpcnN0RWRpdGFibGVDb2x1bW4kOiBWYWx1ZU1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIHByaXZhdGUgc2VsZWN0aW9uQ29sdW1uTW9kZWw6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz47XG4gIHByaXZhdGUgcm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgcmVhZG9ubHkgbGFzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHByaXZhdGUgX2NyZWF0ZUZvcm06IChyb3c6IFJvdykgPT4gRGlydHlUcmFja2luZ0Zvcm08Um93PiA9IChyb3cpID0+IG5ldyBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KCk7XG4gIHJlYWRvbmx5IHRleHRTZWFyY2hQcmVkaWNhdGUkOiBWYWx1ZU1vZGVsPFRleHRTZWFyY2hQcmVkaWNhdGU8Um93Pj47XG4gIHByb3RlY3RlZCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnk7XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VFbXB0eSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWxQcm94eSA9IHByb3hpZnkoU2VsZWN0aW9uTW9kZWw8Um93PikgYXMgUHJveGlmaWVkPFNlbGVjdGlvbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMpLnJlZHVjZShjb2x1bW5zID0+IHtcbiAgICAgIHJldHVybiAocm93OiBSb3csIHJlZ2V4OiBSZWdFeHApID0+IHtcbiAgICAgICAgcmV0dXJuICghcmVnZXggfHwgISFjb2x1bW5zLmZpbmQoYyA9PiByZWdleC50ZXN0KGMuZ2V0U2VhcmNoVGV4dEZvcihyb3cpKSkpO1xuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmZpcnN0RWRpdGFibGVDb2x1bW4kID0gY2hhaW4odGhpcy5jb2x1bW5zKS5zZWxlY3QoYyA9PiBjLmhhc0VkaXRvclBvcnRhbCgpKS5maXJzdCgpO1xuICAgIHRoaXMuZmlyc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmZpcnN0KCk7XG4gICAgdGhpcy5sYXN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLnNlbGVjdChjb2x1bW4gPT4gY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpKS5jb3VudCgpLmVxdWFscygwKTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUVtcHR5JCA9IGNoYWluKHRoaXMuZGF0YVNvdXJjZSQpLmlzRW1wdHkoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkuc2VsZWN0ZWRJdGVtcyQ7XG4gICAgdGhpcy5sZWFkU2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eS5sZWFkU2VsZWN0aW9uJDtcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiQgPSBjaGFpbih0aGlzLnNlbGVjdGVkSXRlbXMkKS5pc05vdEVtcHR5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlJCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKGRhdGFTb3VyY2UkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2RvOiBtYWtlIHRoaXMgZm9yY2Ugb25lIHRhYmxlIGF0IGEgdGltZVxuICAgKiBAcGFyYW0gaW5qZWN0b3JcbiAgICogQHBhcmFtIGlkZW50aXR5T2ZcbiAgICogQHBhcmFtIHJlc3RcbiAgICovXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yLCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnkpIHtcbiAgICAvLyBub3Qgc3VyZSBpZiBJIHNob3VsZCBkZWZpbmUgdGhlc2UgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBub3QuLi5cbiAgICBjb25zdCBjdXN0b21JbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IERlZmF1bHRWYWx1ZUZvcm1hdHRlcn0sXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0QXJyYXlGb3JtYXR0ZXJ9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiBpbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuY29sdW1ucy52YWx1ZS5mb3JFYWNoKGMgPT4gYy5pbml0aWFsaXNlKGN1c3RvbUluamVjdG9yKSk7XG4gICAgdGhpcy5pZGVudGl0eU9mID0gaWRlbnRpdHlPZjtcbiAgfVxuXG4gIGdldCBkYXRhU291cmNlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgdGhhdCBhcmUgdmlzaWJsZSBhZnRlciBhbnkgZmlsdGVycyBhcmUgYXBwbGllZC4gIElmIHRoZXJlIGFyZVxuICAgKiBubyBmaWx0ZXJzIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSByb290IGRhdGFzZXQuXG4gICAqL1xuICBnZXQgZmlsdGVyZWRSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgSS5lLiB0aGUgY3VycmVudCBwYWdlIGluIGEgcGFnZWQgdGFibGUgb3IgdGhlXG4gICAqIGV4cGFuZGVkIHJvd3MgaW4gYSB0cmVlIHRhYmxlLlxuICAgKi9cbiAgZ2V0IHZpc2libGVSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBnZXQgcm93c0JlaW5nRWRpdGVkJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVhZG9ubHkkO1xuICB9XG5cbiAgc3RhcnRFZGl0U2Vzc2lvbihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIGNvbnN0IHJvd0lkID0gdGhpcy5pZGVudGl0eU9mKHJvdyk7XG4gICAgaWYgKHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucXVlcnkoKS5pbmRleE9mKHJvdykgPiAtMSkge1xuICAgICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGBSb3cgd2l0aCBpZD0ke3Jvd0lkfSBhbHJlYWR5IGJlaW5nIGVkaXRlZGApO1xuICAgIH1cblxuICAgIC8vIHRvZG86IHBhc3MgdGhlIGZhY3RvcmllcyB0byB0aGUgZWRpdCBzZXNzaW9uIHNvIHdlIGNhbiBtYWtlIHRoZSB3aG9sZSBsb3QgcGx1Z2dhYmxlP1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9jcmVhdGVGb3JtKHJvdyk7XG4gICAgY29uc3Qgc2F2ZUNvbW1hbmQgPSB0aGlzLnNhdmVDb21tYW5kRmFjdG9yeS5jcmVhdGUoZm9ybSwge2Rpc3Bvc2VkV2l0aDogdGhpc30pO1xuICAgIGNvbnN0IGVkaXRTZXNzaW9uID0gbmV3IEVkaXRTZXNzaW9uPFJvdz4ocm93SWQsIHJvdywgZm9ybSwgc2F2ZUNvbW1hbmQpO1xuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aChlZGl0U2Vzc2lvbik7XG4gICAgd2hlbihlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZXBsYWNlT3JQdXNoKGVkaXRlZFZhbHVlKTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcInRyaWdnZXJDaGFuZ2VVbmxlc3NOaWxcIn0pO1xuXG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucHVzaChlZGl0U2Vzc2lvbik7XG4gICAgZWRpdFNlc3Npb24ub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVtb3ZlKGVkaXRTZXNzaW9uLmxpdmVSb3dWYWx1ZSQudmFsdWUpO1xuICAgICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucmVtb3ZlKGVkaXRTZXNzaW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWRpdFNlc3Npb247XG4gIH1cblxuICBnZXRFZGl0U2Vzc2lvbkZvcihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZC5nZXQodGhpcy5pZGVudGl0eU9mKHJvdykpO1xuICB9XG5cbiAgY2FuY2VsQWxsRWRpdG9yU2Vzc2lvbnMoKSB7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucnVuSW5UcmFuc2FjdGlvbigoZHJhZnQpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucnVuSW5UcmFuc2FjdGlvbigoKSA9PiB7XG4gICAgICAgIGRyYWZ0LnZhbHVlLmZvckVhY2goc2Vzc2lvbiA9PiBzZXNzaW9uLmRpc3Bvc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0IGNvbHVtbnMoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hbGxDb2x1bW5zJDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LnJlYWRvbmx5JDtcbiAgfVxuXG4gIHBsdWNrPFAgZXh0ZW5kcyBUeXBlcy5WYWx1ZVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+IHtcbiAgICBjb25zdCBjb2x1bW5JZCA9IG9wdGlvbnM/LmNvbHVtbklkIHx8IHByb3BlcnR5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4oY29sdW1uSWQsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgcGx1Y2tMaXN0PFAgZXh0ZW5kcyBUeXBlcy5BcnJheVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgcHJvcGVydHksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICAvLyBUT0RPOiBjbGVhbiB0aGlzIHVwIGFuZCBhc3NpZ24gdGhlIHNlbGVjdGlvbiBtb2RlbCBvbiB0ZWggdGFibGUgZGlyZWN0bHkuXG4gIC8vICAgICAgIHRhYmxlTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwobW9kZWwpIGFuZCBoYXZlIHRoZSBzZWxlY2l0b24gY29sdW1uIGF1dG9tYXRpY2FsbHlcbiAgLy8gICAgICAgYWRkZWQuICBOZWVkIHRvIGxvb2sgYXQgaG93IHdlJ3JlIHVzaW5nIHRoZSB2aXNpYmlsaXR5IGNvbnRyb2xzIGFzIHdlbGwuXG4gIC8vICAgICAgIFNob3VsZCBhbHNvIGxhenkgY3JlYXRlIHRoZSBzZWxlY3Rpb24gY29sdW1uIG1vZGVsIGlmIHNvbWVvbmUgYWNjZXNzZXMgaXQuXG4gIHByb3RlY3RlZCBfYWRkU2VsZWN0aW9uQ29sdW1uKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93PiwgdmlzaWJsZT86IFZhbHVlTW9kZWw8Ym9vbGVhbj4gfCBib29sZWFuKTogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwpO1xuICAgIGNvbnN0IGNvbHVtbklkID0gXCJzZWxlY3Rpb24tY29sdW1uXCI7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgdGhpcy5zZWxlY3Rpb25Nb2RlbFByb3h5KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnVzZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsKVxuICAgIHRoaXMuYWRkUm93Q2xhc3MoXCJhdXAtcm93LXNlbGVjdGVkXCIsIHJvdyA9PiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLmlzU2VsZWN0ZWQocm93KSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSB0aGlzLmFkZENvbHVtbih0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLCAwKTtcbiAgICBpZiAoIWlzTmlsKHZpc2libGUpKSB7XG4gICAgICBzZWxlY3Rpb25Db2x1bW5Nb2RlbC52aXNpYmxlV2hpbGUodmlzaWJsZSBpbnN0YW5jZW9mIFZhbHVlTW9kZWwgPyB2aXNpYmxlIDogVmFsdWVNb2RlbC5jb25zdGFudCh2aXNpYmxlKSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Db2x1bW5Nb2RlbDtcbiAgfVxuXG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gXCJlZGl0Q29udHJvbHNcIjtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCBzYXZlQ29tbWFuZEZhY3RvcnksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRDdXN0b21Db2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZywgZGF0YUFjY2Vzc29yOiAocm93OiBSb3cpID0+IFYpOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgZGF0YUFjY2Vzc29yKSk7XG4gIH1cblxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uSW5pdD86IE9uQ29tcG9uZW50SW5pdDxDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb3B0aW9ucz86IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Db21wb25lbnRJbml0T3JPcHRpb25zPzogT25Db21wb25lbnRJbml0PEM+IHwgQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCByb3cgPT4gcm93KSkuY2VsbFJlbmRlcmVyKGNvbXBvbmVudCwgb25Db21wb25lbnRJbml0T3JPcHRpb25zKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51KGNvbXBvbmVudENsYXNzOiBDb25zdHJ1Y3RhYmxlPFRhYmxlTW9yZU1lbnVQb3B1cENvbXBvbmVudDxSb3c+Pikge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbihcIm1vcmUtbWVudVwiLCBUYWJsZU1vcmVNZW51Q29tcG9uZW50LCAoY29tcG9uZW50OlRhYmxlTW9yZU1lbnVDb21wb25lbnQ8Um93PikgPT4ge1xuICAgICAgY29tcG9uZW50LmNvbmZpZ3VyZVBvcHVwQ29tcG9uZW50VHlwZShjb21wb25lbnRDbGFzcyk7XG4gICAgfSkuY29sdW1uVGV4dFByb3BlcnRpZXMoe1xuICAgICAgaGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhZGRUZW1wbGF0ZUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nKTogQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZFJvd0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwcmVkaWNhdGU6IChyb3c6IFJvdykgPT4gYm9vbGVhbikge1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5wdXNoKG5ldyBSb3dDbGFzczxSb3c+KGNsYXNzTmFtZSwgcHJlZGljYXRlKSk7XG4gIH1cblxuICBnZXRSb3dDbGFzc2VzKHJvdzogUm93KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5yb3dDbGFzc05hbWVQcmVkaWNhdGVzLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS5tYXRjaGVzKHJvdykpIHtcbiAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGkuY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3NOYW1lcztcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBpbmRleD86IG51bWJlcik6IEMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LmFkZENvbHVtbihjb2x1bW4sIGluZGV4KTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9KSB7XG4gICAgdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPSBjb2x1bW5UZXh0UHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkOiBzdHJpbmcpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID8gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXBbY29sdW1uSWRdIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgJiYgY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkge1xuICAgIGNvbnN0IHVzZXJTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdGlvbk1vZGVsLmdldFByb3h5VGFyZ2V0KCk7XG4gICAgcmV0dXJuICEhdXNlclNlbGVjdGlvbk1vZGVsICYmIHVzZXJTZWxlY3Rpb25Nb2RlbC5lbmFibGVkJC52YWx1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIGlzSG92ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBpc0N1cnNvckVuYWJsZWQoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbikgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdykge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25Sb3dDbGlja2VkKGNhbGxiYWNrOiAocm93OiBSb3cpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDbGlja0xpc3RlbmVycy5hZGQoY2FsbGJhY2spO1xuICB9XG5cbiAgX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW5Nb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHtcbiAgICAgIC8vICAgaGFzRW5hYmxlZFVzZXJTZWxlY3Rpb25Nb2RlbDogdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCksXG4gICAgICAvLyAgIGFsbFNlbGVjdGlvbkRpc2FibGVkOiB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJC52YWx1ZSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZDogdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZEZvckNvbHVtbjogY29sdW1uTW9kZWwuaXNSb3dTZWxlY3Rpb25FbmFibGVkKClcbiAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5maXJlKGwgPT4gbChyb3cpKTtcbiAgfVxuXG59XG5Qcm94eVJlZ2lzdHJ5LnJlZ2lzdGVyT25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKVxuIl19
@@ -1,7 +1,6 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- /* eslint-disable @typescript-eslint/no-explicit-any -- abstract table operates on arbitrary row types */
3
2
  import { Component, HostBinding, Injector, Input } from "@angular/core";
4
- import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel, Proxify, proxify, StoreInValueModel, ValueModel } from "@coolon/pectin";
3
+ import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel, StoreInValueModel, Proxify, ValueModel, proxify } from "@coolon/pectin";
5
4
  import { lang } from '@coolon/typescript-utilities';
6
5
  import { DisposableComponent } from "../disposable-component";
7
6
  import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
@@ -73,17 +72,12 @@ export class AbstractTableComponent extends DisposableComponent {
73
72
  #showHeader_accessor_storage = true;
74
73
  get showHeader() { return this.#showHeader_accessor_storage; }
75
74
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
76
- #enableScrolling$_accessor_storage = proxify((ValueModel));
77
75
  /**
78
76
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
79
77
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
80
78
  * containment area.
81
79
  */
82
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
83
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
84
- #enableScrolling_accessor_storage = false;
85
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
86
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
80
+ enableScrolling = false;
87
81
  columns;
88
82
  columnIds;
89
83
  columnsById;
@@ -102,6 +96,7 @@ export class AbstractTableComponent extends DisposableComponent {
102
96
  super();
103
97
  this.injector = injector;
104
98
  const { chain, when } = Dsl.disposeWith(this);
99
+ this._visibleRows$.setDelegate(this._dataSource$);
105
100
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
106
101
  if (it === this.identityOf(it)) {
107
102
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -120,7 +115,7 @@ export class AbstractTableComponent extends DisposableComponent {
120
115
  if (!model) {
121
116
  lang.illegalState("aup-table tableModel is nil");
122
117
  }
123
- this.columnsById = chain(model.columns$).indexBy('columnId');
118
+ this.columnsById = chain(model.columns).indexBy('columnId');
124
119
  this._dataSource$.setDelegate(model.dataSource$);
125
120
  model.initialise(this.injector, (row) => this.identityOf(row));
126
121
  }
@@ -136,8 +131,8 @@ export class AbstractTableComponent extends DisposableComponent {
136
131
  column.setTemplate(templateRef, viewContainer, fillCell, padChild);
137
132
  }
138
133
  }
139
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
140
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling$: "enableScrolling$", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
141
136
  }
142
137
  __decorate([
143
138
  Proxify(),
@@ -147,15 +142,7 @@ __decorate([
147
142
  StoreInValueModel(),
148
143
  __metadata("design:type", Object)
149
144
  ], AbstractTableComponent.prototype, "showHeader", null);
150
- __decorate([
151
- Proxify(),
152
- __metadata("design:type", ValueModel)
153
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
154
- __decorate([
155
- StoreInValueModel(),
156
- __metadata("design:type", Boolean)
157
- ], AbstractTableComponent.prototype, "enableScrolling", null);
158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: AbstractTableComponent, decorators: [{
159
146
  type: Component,
160
147
  args: [{
161
148
  selector: 'aup-abstract-table',
@@ -165,12 +152,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
165
152
  type: Input
166
153
  }], showHeader: [{
167
154
  type: Input
168
- }], enableScrolling$: [{
169
- type: Input
170
155
  }], enableScrolling: [{
171
156
  type: Input
172
157
  }], baseCssClass: [{
173
158
  type: HostBinding,
174
159
  args: ['class']
175
160
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5R0FBeUc7QUFDekcsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsR0FBRyxFQUdILGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7O0FBRWhGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERHO0FBS0gsTUFBTSxPQUFPLHNCQUEyQyxTQUFRLG1CQUFtQjtJQTBDNUQ7SUF2Q1osZ0NBQWMsT0FBTyxDQUFDLENBQUEsVUFBbUIsQ0FBQSxDQUFDLENBQUM7SUFBM0MsSUFBQSxXQUFXLGlEQUFnQztJQUEzQyxJQUFBLFdBQVcsdURBQWdDO0lBRzNDLCtCQUFhLElBQUksQ0FBQztJQUFsQixJQUFBLFVBQVUsZ0RBQVE7SUFBbEIsSUFBQSxVQUFVLHNEQUFRO0lBUWxCLHFDQUF1QyxPQUFPLENBQUMsQ0FBQSxVQUFtQixDQUFBLENBQUMsQ0FBQztJQU43RTs7OztPQUlHO0lBRU0sSUFBQSxnQkFBZ0Isc0RB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QUM7SUFDL0MsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsV0FBNkIsRUFBRSxhQUErQixFQUFFLFFBQWlCLEVBQUUsUUFBaUI7UUFDM0ksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxNQUFNLFlBQVkseUJBQXlCLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7dUdBcEZVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLHFSQUZ2QixFQUFFOztBQUtIO0lBREMsT0FBTyxFQUFFOzt5REFDaUM7QUFHM0M7SUFEQyxpQkFBaUIsRUFBRTs7d0RBQ0Y7QUFRbEI7SUFEQyxPQUFPLEVBQUU7OEJBQ08sVUFBVTs4REFBeUM7QUFHcEU7SUFEQyxpQkFBaUIsRUFBRTs7NkRBQ2E7MkZBakIvQixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7K0ZBSVUsV0FBVztzQkFEbkIsS0FBSztnQkFJRyxVQUFVO3NCQURsQixLQUFLO2dCQVNHLGdCQUFnQjtzQkFEeEIsS0FBSztnQkFJRyxlQUFlO3NCQUR2QixLQUFLO2dCQW9CTixZQUFZO3NCQURYLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYWJzdHJhY3QgdGFibGUgb3BlcmF0ZXMgb24gYXJiaXRyYXJ5IHJvdyB0eXBlcyAqL1xuaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLFxuICBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRHNsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFByb3hpZnksXG4gIHByb3hpZnksXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7QWJzdHJhY3RUYWJsZU1vZGVsfSBmcm9tICcuL2Fic3RyYWN0LXRhYmxlLW1vZGVsJztcbmltcG9ydCB0eXBlIHtDb2x1bW5Nb2RlbH0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLW1vZGVsJztcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS10ZW1wbGF0ZS1jb2x1bW4tbW9kZWxcIjtcblxuLyoqXG4gKiBDcmVhdGUgeW91ciBtb2RlbDpcbiAqIEBleGFtcGxlXG4gKiB0aGlzLmhlcm9UYWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoaGVyb0xpc3QsIHRhYmxlID0+IHtcbiAqICAgdGFibGUucGx1Y2soXCJmaXJzdE5hbWVcIik7XG4gKiAgIHRhYmxlLnBsdWNrKFwibGFzdE5hbWVcIik7XG4gKiAgIHRhYmxlLmFkZEN1c3RvbUNvbHVtbihcImZ1bGxOYW1lXCIsIGhlcm8gPT4gYCR7aGVyby5maXJzdE5hbWV9ICR7aGVyby5sYXN0TmFtZX1gKTtcbiAqIH0pO1xuICpcbiAqIENyZWF0ZSB5b3VyIHRhYmxlXG4gKiBAZXhhbXBsZVxuICogPGF1cC10YWJsZSBbdGFibGVNb2RlbF09XCJoZXJvVGFibGVNb2RlbFwiPjwvYXVwLXRhYmxlPlxuICpcbiAqIENvbHVtbiB0ZW1wbGF0ZXNcbiAqIEBleGFtcGxlXG4gKiB0aGlzLmhlcm9UYWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoaGVyb0xpc3QsIHRhYmxlID0+IHtcbiAqICAgdGFibGUucGx1Y2soXCJmaXJzdE5hbWVcIik7XG4gKiAgIHRhYmxlLnBsdWNrKFwibGFzdE5hbWVcIik7XG4gKiAgIHRhYmxlLmFkZFRlbXBsYXRlQ29sdW1uKFwic3BlY2lhbENvbHVtblwiKTtcbiAqIH0pO1xuICogPGF1cC10YWJsZSBbdGFibGVNb2RlbF09XCJoZXJvVGFibGVNb2RlbFwiPlxuICogICA8ZGl2ICphdXBDb2x1bW5UZW1wbGF0ZT1cImxldCBoZXJvOyBjb2x1bW5JZDogJ3NwZWNpYWxDb2x1bW4nOyBmaWxsQ2VsbDogdHJ1ZTsgcGFkQ2hpbGQ6ZmFsc2VcIj5cbiAqICAgICB7e2hlcm8ubmFtZX19XG4gKiAgIDwvZGl2PlxuICogPC9hdXAtdGFibGU+XG4gKlxuICogU3R5bGluZ1xuICogQGV4YW1wbGVcbiAqICAvLyBnbG9iYWwgc2V0dGluZ3NcbiAqIDpyb290IHtcbiAqICAgLS1hdXAtdGFibGUtY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLWF1cC10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA1KVxuICogICAtLWF1cC10YWJsZS1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjogcmViZWNjYXB1cnBsZTsgLy8gZGVmYXVsdHMgdG8gdHJhbnNwYXJlbnRcbiAqICAgLS1hdXAtdGFibGUtZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1hdXAtdGFibGUtbGFzdC1jb2x1bW4tcGFkZGluZy1yaWdodDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqIH1cbiAqXG4gKiAvLyBwZXIgdGFibGUgc2V0dGluZ3MuXG4gKiBhdXAtdGFibGUge1xuICogICAtLWNvbHVtbi1nYXA6IDEwcHg7IC8vIGRlZmF1bHRzIHRvIDI0cHhcbiAqICAgLS1yb3ctaG92ZXItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA1KVxuICogICAtLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWZpcnN0LWNvbHVtbi1wYWRkaW5nLWxlZnQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIC0tbGFzdC1jb2x1bW4tcGFkZGluZy1yaWdodDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqXG4gKiAgIGF1cC10YWJsZS1oZWFkZXItY2VsbC1yZW5kZXJlcixcbiAqICAgYXVwLXRhYmxlLWNlbGwtcmVuZGVyZXIge1xuICogICAgICYuYXVwLWNvbC1teS1kYXNoZXJpc2VkLWNvbHVtbi1pZCB7XG4gKiAgICAgICAvLyBkbyBzdHVmZlxuICogICAgIH1cbiAqICAgICAmLmZpcnN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICAgICYubGFzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAvLyBkbyBzdHVmZlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXAtYWJzdHJhY3QtdGFibGUnLFxuICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RUYWJsZUNvbXBvbmVudDxSb3cgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBzaG93SGVhZGVyJCA9IHByb3hpZnkoVmFsdWVNb2RlbDxib29sZWFuPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGVuYWJsZSBzY3JvbGxpbmcuICBPbmNlIGVuYWJsZWQgdGhlIHRhYmxlIHdpbGwgaGF2ZSAwIGltcGxpY2l0IGhlaWdodC4gIFlvdSB3aWxsIGVpdGhlclxuICAgKiBuZWVkIHRvIHNldCBpdCBleHBsaWNpdGx5IGUuZy4gaGVpZ2h0OiA0MDBweDsgb3IgYnkgdXNpbmcgZmxleCBvciBncmlkIGxheW91dCB0byBtYWtlIGl0IGZpbGwgaXQnc1xuICAgKiBjb250YWlubWVudCBhcmVhLlxuICAgKi9cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBlbmFibGVTY3JvbGxpbmckOlZhbHVlTW9kZWw8Ym9vbGVhbj4gPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIGVuYWJsZVNjcm9sbGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgY29sdW1uczogTGlzdE1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIGNvbHVtbklkczogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb2x1bW5zQnlJZDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHZpc2libGVSb3dDb3VudDogVmFsdWVNb2RlbDxudW1iZXI+O1xuXG4gIC8vIFRPRE86IHN1cHBvcnQgdXNlciBkZWZpbmVkIGhlYWRlciBhbmQgcm93IGhlaWdodHMgdmlhIGNzcyB2YXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDU2KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig0OCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuICByZWFkb25seSBoaWdobGlnaHRUZXh0JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxzdHJpbmc+KCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGF0YVNvdXJjZSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGJhc2VDc3NDbGFzcyA9ICdhdXAtdGFibGUtY29tcG9uZW50JztcblxuICByZWFkb25seSB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5T2YgPyB0aGlzLmlkZW50aXR5T2YoaXRlbSkgOiBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB3aGVuKGNoYWluKHRoaXMuX2RhdGFTb3VyY2UkKS5maXJzdCgpKS5iZWNvbWVzVHJ1dGh5KGl0ID0+IHtcbiAgICAgIGlmIChpdCA9PT0gdGhpcy5pZGVudGl0eU9mKGl0KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJUYWJsZSBtb2RlbCBpZGVudGl0eSBmdW5jdGlvbiBpcyB1c2luZyByZWZlcmVuY2UgZXF1YWxpdHkuICBUaGlzIGNhbiBjYXVzZSBsb3RzIG9mIHRhYmxlIHJlLXJlbmRlcmluZ1wiLCB7XG4gICAgICAgICAgcm93VHlwZTogaXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge29uY2U6IHRydWV9KTtcbiAgfVxuXG4gIGlkZW50aXR5T2Yocm93OiBSb3cpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlJC5pZGVudGl0eU9mKHJvdyk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGNvbnN0IHtjaGFpbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoXCJhdXAtdGFibGUgdGFibGVNb2RlbCBpcyBuaWxcIilcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zQnlJZCA9IGNoYWluKG1vZGVsLmNvbHVtbnMkKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKG1vZGVsLmRhdGFTb3VyY2UkKTtcbiAgICBtb2RlbC5pbml0aWFsaXNlKHRoaXMuaW5qZWN0b3IsIChyb3cpID0+ICB0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZVJvd3MkKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gbGFuZy5hYnN0cmFjdE1ldGhvZCh0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc0J5SWQuZ2V0KGNvbHVtbklkKTtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbCkge1xuICAgICAgY29sdW1uLnNldFRlbXBsYXRlKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyLCBmaWxsQ2VsbCwgcGFkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixHQUFHLEVBSUgsaUJBQWlCLEVBRWpCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUFFLE9BQU8sRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7O0FBR2hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERHO0FBS0gsTUFBTSxPQUFPLHNCQUE0QixTQUFRLG1CQUFtQjtJQXVDN0M7SUFwQ1osZ0NBQWMsT0FBTyxDQUFDLENBQUEsVUFBbUIsQ0FBQSxDQUFDLENBQUM7SUFBM0MsSUFBQSxXQUFXLGlEQUFnQztJQUEzQyxJQUFBLFdBQVcsdURBQWdDO0lBRzNDLCtCQUFhLElBQUksQ0FBQztJQUFsQixJQUFBLFVBQVUsZ0RBQVE7SUFBbEIsSUFBQSxVQUFVLHNEQUFRO0lBRTNCOzs7O09BSUc7SUFFSCxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBR3hCLE9BQU8sQ0FBbUM7SUFDMUMsU0FBUyxDQUF5QjtJQUMxQixXQUFXLENBQTBDO0lBRXBE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QUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxNQUFNLFlBQVkseUJBQXlCLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7dUdBbkZVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLCtPQUZ2QixFQUFFOztBQUtIO0lBREMsT0FBTyxFQUFFOzt5REFDaUM7QUFHM0M7SUFEQyxpQkFBaUIsRUFBRTs7d0RBQ0Y7MkZBTmhCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDYjsrRkFJVSxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBU04sZUFBZTtzQkFEZCxLQUFLO2dCQW9CTixZQUFZO3NCQURYLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRGVsZWdhdGluZ0xpc3RNb2RlbCxcbiAgRGVsZWdhdGluZ1ZhbHVlTW9kZWwsXG4gIERzbCxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFN0b3JlSW5MaXN0TW9kZWwsXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBQcm94aWZ5LFxuICBWYWx1ZU1vZGVsLCBwcm94aWZ5XG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVNb2RlbH0gZnJvbSAnLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtUYWJsZUZpbHRlck1vZGVsfSBmcm9tIFwiLi9maWx0ZXIvdGFibGUtZmlsdGVyLW1vZGVsXCI7XG5cbi8qKlxuICogQ3JlYXRlIHlvdXIgbW9kZWw6XG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRDdXN0b21Db2x1bW4oXCJmdWxsTmFtZVwiLCBoZXJvID0+IGAke2hlcm8uZmlyc3ROYW1lfSAke2hlcm8ubGFzdE5hbWV9YCk7XG4gKiB9KTtcbiAqXG4gKiBDcmVhdGUgeW91ciB0YWJsZVxuICogQGV4YW1wbGVcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj48L2F1cC10YWJsZT5cbiAqXG4gKiBDb2x1bW4gdGVtcGxhdGVzXG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRUZW1wbGF0ZUNvbHVtbihcInNwZWNpYWxDb2x1bW5cIik7XG4gKiB9KTtcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj5cbiAqICAgPGRpdiAqYXVwQ29sdW1uVGVtcGxhdGU9XCJsZXQgaGVybzsgY29sdW1uSWQ6ICdzcGVjaWFsQ29sdW1uJzsgZmlsbENlbGw6IHRydWU7IHBhZENoaWxkOmZhbHNlXCI+XG4gKiAgICAge3toZXJvLm5hbWV9fVxuICogICA8L2Rpdj5cbiAqIDwvYXVwLXRhYmxlPlxuICpcbiAqIFN0eWxpbmdcbiAqIEBleGFtcGxlXG4gKiAgLy8gZ2xvYmFsIHNldHRpbmdzXG4gKiA6cm9vdCB7XG4gKiAgIC0tYXVwLXRhYmxlLWNvbHVtbi1nYXA6IDEwcHg7IC8vIGRlZmF1bHRzIHRvIDI0cHhcbiAqICAgLS1hdXAtdGFibGUtcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1hdXAtdGFibGUtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tYXVwLXRhYmxlLWZpcnN0LWNvbHVtbi1wYWRkaW5nLWxlZnQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIC0tYXVwLXRhYmxlLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiB9XG4gKlxuICogLy8gcGVyIHRhYmxlIHNldHRpbmdzLlxuICogYXVwLXRhYmxlIHtcbiAqICAgLS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjogcmViZWNjYXB1cnBsZTsgLy8gZGVmYXVsdHMgdG8gdHJhbnNwYXJlbnRcbiAqICAgLS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKlxuICogICBhdXAtdGFibGUtaGVhZGVyLWNlbGwtcmVuZGVyZXIsXG4gKiAgIGF1cC10YWJsZS1jZWxsLXJlbmRlcmVyIHtcbiAqICAgICAmLmF1cC1jb2wtbXktZGFzaGVyaXNlZC1jb2x1bW4taWQge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5maXJzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAvLyBkbyBzdHVmZlxuICogICAgIH1cbiAqICAgICAmLmxhc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLWFic3RyYWN0LXRhYmxlJyxcbiAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0VGFibGVDb21wb25lbnQ8Um93PiBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciQgPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgc2Nyb2xsaW5nLiAgT25jZSBlbmFibGVkIHRoZSB0YWJsZSB3aWxsIGhhdmUgMCBpbXBsaWNpdCBoZWlnaHQuICBZb3Ugd2lsbCBlaXRoZXJcbiAgICogbmVlZCB0byBzZXQgaXQgZXhwbGljaXRseSBlLmcuIGhlaWdodDogNDAwcHg7IG9yIGJ5IHVzaW5nIGZsZXggb3IgZ3JpZCBsYXlvdXQgdG8gbWFrZSBpdCBmaWxsIGl0J3NcbiAgICogY29udGFpbm1lbnQgYXJlYS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGVuYWJsZVNjcm9sbGluZyA9IGZhbHNlO1xuXG5cbiAgY29sdW1uczogTGlzdE1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIGNvbHVtbklkczogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb2x1bW5zQnlJZDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHZpc2libGVSb3dDb3VudDogVmFsdWVNb2RlbDxudW1iZXI+O1xuXG4gIC8vIFRPRE86IHN1cHBvcnQgdXNlciBkZWZpbmVkIGhlYWRlciBhbmQgcm93IGhlaWdodHMgdmlhIGNzcyB2YXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDU2KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig0OCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuICByZWFkb25seSBoaWdobGlnaHRUZXh0JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxzdHJpbmc+KCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGF0YVNvdXJjZSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGJhc2VDc3NDbGFzcyA9ICdhdXAtdGFibGUtY29tcG9uZW50JztcblxuICByZWFkb25seSB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5T2YgPyB0aGlzLmlkZW50aXR5T2YoaXRlbSkgOiBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB0aGlzLl92aXNpYmxlUm93cyQuc2V0RGVsZWdhdGUodGhpcy5fZGF0YVNvdXJjZSQpO1xuXG4gICAgd2hlbihjaGFpbih0aGlzLl9kYXRhU291cmNlJCkuZmlyc3QoKSkuYmVjb21lc1RydXRoeShpdCA9PiB7XG4gICAgICBpZiAoaXQgPT09IHRoaXMuaWRlbnRpdHlPZihpdCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGFibGUgbW9kZWwgaWRlbnRpdHkgZnVuY3Rpb24gaXMgdXNpbmcgcmVmZXJlbmNlIGVxdWFsaXR5LiAgVGhpcyBjYW4gY2F1c2UgbG90cyBvZiB0YWJsZSByZS1yZW5kZXJpbmdcIiwge1xuICAgICAgICAgIHJvd1R5cGU6IGl0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtvbmNlOiB0cnVlfSk7XG4gIH1cblxuICBpZGVudGl0eU9mKHJvdzogUm93KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQuaWRlbnRpdHlPZihyb3cpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKFwiYXVwLXRhYmxlIHRhYmxlTW9kZWwgaXMgbmlsXCIpXG4gICAgfVxuICAgIHRoaXMuY29sdW1uc0J5SWQgPSBjaGFpbihtb2RlbC5jb2x1bW5zKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKG1vZGVsLmRhdGFTb3VyY2UkKTtcbiAgICBtb2RlbC5pbml0aWFsaXNlKHRoaXMuaW5qZWN0b3IsIChyb3cpID0+ICB0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZVJvd3MkKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gbGFuZy5hYnN0cmFjdE1ldGhvZCh0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc0J5SWQuZ2V0KGNvbHVtbklkKTtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbCkge1xuICAgICAgY29sdW1uLnNldFRlbXBsYXRlKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyLCBmaWxsQ2VsbCwgcGFkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=