@bizdoc/core 2.3.31 → 2.3.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/esm2022/lib/admin/admin-dismiss.service.mjs +3 -3
  2. package/esm2022/lib/admin/admin-menu.component.mjs +3 -3
  3. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +3 -3
  4. package/esm2022/lib/admin/architecture/designer-element.component.mjs +35 -27
  5. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +3 -3
  6. package/esm2022/lib/admin/architecture/designer.base.mjs +9 -9
  7. package/esm2022/lib/admin/architecture/designer.component.mjs +3 -3
  8. package/esm2022/lib/admin/architecture/elements/action.component.mjs +3 -3
  9. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +3 -3
  10. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +3 -3
  11. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +3 -3
  12. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +3 -3
  13. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +3 -3
  14. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +3 -3
  15. package/esm2022/lib/admin/architecture/elements/control.component.mjs +3 -3
  16. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +3 -3
  17. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +3 -3
  18. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +3 -3
  19. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +3 -3
  20. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +3 -3
  21. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +3 -3
  22. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +3 -3
  23. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +3 -3
  24. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +3 -3
  25. package/esm2022/lib/admin/architecture/elements/form.component.mjs +3 -3
  26. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +3 -3
  27. package/esm2022/lib/admin/architecture/elements/job.component.mjs +3 -3
  28. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +8 -8
  29. package/esm2022/lib/admin/architecture/elements/node.component.mjs +3 -3
  30. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +3 -3
  31. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +3 -3
  32. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +3 -3
  33. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +3 -3
  34. package/esm2022/lib/admin/architecture/elements/policy.component.mjs +3 -3
  35. package/esm2022/lib/admin/architecture/elements/report.component.mjs +3 -3
  36. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +3 -3
  37. package/esm2022/lib/admin/architecture/elements/role.component.mjs +3 -3
  38. package/esm2022/lib/admin/architecture/elements/rule.component.mjs +3 -3
  39. package/esm2022/lib/admin/architecture/elements/source.component.mjs +3 -3
  40. package/esm2022/lib/admin/architecture/elements/state.component.mjs +3 -3
  41. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +3 -3
  42. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +3 -3
  43. package/esm2022/lib/admin/architecture/elements/type.component.mjs +3 -3
  44. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +3 -3
  45. package/esm2022/lib/admin/architecture/elements/utility.component.mjs +3 -3
  46. package/esm2022/lib/admin/architecture/elements/view.component.mjs +3 -3
  47. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +3 -3
  48. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +3 -3
  49. package/esm2022/lib/admin/core/ace.input.mjs +3 -3
  50. package/esm2022/lib/admin/core/color-picker.input.mjs +3 -3
  51. package/esm2022/lib/admin/core/localized-string.component.mjs +3 -3
  52. package/esm2022/lib/admin/core/search.input.mjs +3 -3
  53. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +3 -3
  54. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +3 -3
  55. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  56. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +3 -3
  57. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +3 -3
  58. package/esm2022/lib/admin/form/designer/design-control.component.mjs +3 -3
  59. package/esm2022/lib/admin/form/designer/properties.component.mjs +3 -3
  60. package/esm2022/lib/admin/form/designer/section.component.mjs +3 -3
  61. package/esm2022/lib/admin/form/designer/settings.component.mjs +3 -3
  62. package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -3
  63. package/esm2022/lib/admin/form/workflow/node.component.mjs +3 -3
  64. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +3 -3
  65. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
  66. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  67. package/esm2022/lib/admin/patterns/patterns.component.mjs +3 -3
  68. package/esm2022/lib/admin/permissions/permissions.component.mjs +3 -3
  69. package/esm2022/lib/admin/positions/positions-popup.component.mjs +3 -3
  70. package/esm2022/lib/admin/positions/positions.component.mjs +3 -3
  71. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +3 -3
  72. package/esm2022/lib/admin/profiler/profiler.component.mjs +3 -3
  73. package/esm2022/lib/admin/system.service.mjs +3 -3
  74. package/esm2022/lib/admin/utility-wrapper.component.mjs +3 -3
  75. package/esm2022/lib/admin/utility.pane.component.mjs +3 -3
  76. package/esm2022/lib/app.component.mjs +6 -6
  77. package/esm2022/lib/bizdoc.module.mjs +4 -4
  78. package/esm2022/lib/browse/browse-items.component.mjs +3 -3
  79. package/esm2022/lib/browse/browse.mobile.component.mjs +3 -3
  80. package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
  81. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
  82. package/esm2022/lib/browse/filter/filter.component.mjs +3 -3
  83. package/esm2022/lib/browse/folders-menu.component.mjs +3 -3
  84. package/esm2022/lib/chat/chat-info.mjs +3 -3
  85. package/esm2022/lib/chat/chat.mobile.component.mjs +3 -3
  86. package/esm2022/lib/chat/chat.service.mjs +3 -3
  87. package/esm2022/lib/chat/contacts.component.mjs +6 -6
  88. package/esm2022/lib/chat/contacts.pane.component.mjs +3 -3
  89. package/esm2022/lib/chat/conversation.component.mjs +3 -3
  90. package/esm2022/lib/chat/conversation.pane.component.mjs +3 -3
  91. package/esm2022/lib/compose/action/action-picker.component.mjs +3 -3
  92. package/esm2022/lib/compose/action/action.dialog.mjs +3 -3
  93. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  94. package/esm2022/lib/compose/action/assign-action.component.mjs +3 -3
  95. package/esm2022/lib/compose/action/moveto-action.component.mjs +3 -3
  96. package/esm2022/lib/compose/action/return-action.component.mjs +3 -3
  97. package/esm2022/lib/compose/attachments/attachments.component.mjs +3 -3
  98. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  99. package/esm2022/lib/compose/attachments/progress-button.directive.mjs +3 -3
  100. package/esm2022/lib/compose/box/box.component.mjs +3 -3
  101. package/esm2022/lib/compose/box/control.component.mjs +3 -3
  102. package/esm2022/lib/compose/box/row.component.mjs +3 -3
  103. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +3 -3
  104. package/esm2022/lib/compose/comments/comment.component.mjs +3 -3
  105. package/esm2022/lib/compose/comments/comments.component.mjs +3 -3
  106. package/esm2022/lib/compose/comments/comments.pane.component.mjs +3 -3
  107. package/esm2022/lib/compose/comments/edit-comment.component.mjs +3 -3
  108. package/esm2022/lib/compose/comments/edits.component.mjs +3 -3
  109. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  110. package/esm2022/lib/compose/comments/votes.component.mjs +3 -3
  111. package/esm2022/lib/compose/compose-resolve.service.mjs +6 -6
  112. package/esm2022/lib/compose/compose.mobile.component.mjs +3 -3
  113. package/esm2022/lib/compose/compose.pane.component.mjs +3 -3
  114. package/esm2022/lib/compose/copy/copy.dialog.mjs +3 -3
  115. package/esm2022/lib/compose/dismiss.service.mjs +3 -3
  116. package/esm2022/lib/compose/document-resolver.service.mjs +3 -3
  117. package/esm2022/lib/compose/document.component.mjs +3 -3
  118. package/esm2022/lib/compose/document.mobile.component.mjs +3 -3
  119. package/esm2022/lib/compose/document.pane.component.mjs +3 -3
  120. package/esm2022/lib/compose/events/events.component.mjs +3 -3
  121. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  122. package/esm2022/lib/compose/form.component.mjs +3 -3
  123. package/esm2022/lib/compose/new-menu.component.mjs +3 -3
  124. package/esm2022/lib/compose/privilage.directive.mjs +6 -6
  125. package/esm2022/lib/compose/recipient-resolver.service.mjs +3 -3
  126. package/esm2022/lib/compose/state.component.mjs +3 -3
  127. package/esm2022/lib/compose/tag/tags.component.mjs +3 -3
  128. package/esm2022/lib/compose/trace/flow.component.mjs +3 -3
  129. package/esm2022/lib/compose/trace/people.component.mjs +3 -3
  130. package/esm2022/lib/compose/trace/trace.base.mjs +3 -3
  131. package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
  132. package/esm2022/lib/compose/trace/trace.pane.component.mjs +3 -3
  133. package/esm2022/lib/compose/version-compare/version-compare.component.mjs +3 -3
  134. package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  135. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +3 -3
  136. package/esm2022/lib/core/StickyToolbar.mjs +3 -3
  137. package/esm2022/lib/core/account.service.mjs +3 -3
  138. package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  139. package/esm2022/lib/core/avatar/avatar.component.mjs +3 -3
  140. package/esm2022/lib/core/checkbox.mjs +3 -3
  141. package/esm2022/lib/core/component-factory-resolver.mjs +3 -3
  142. package/esm2022/lib/core/datasource.service.mjs +3 -3
  143. package/esm2022/lib/core/fields/address.designer.mjs +3 -3
  144. package/esm2022/lib/core/fields/address.field.mjs +3 -3
  145. package/esm2022/lib/core/fields/autocomplete.field.mjs +6 -6
  146. package/esm2022/lib/core/fields/checkbox.designer.mjs +3 -3
  147. package/esm2022/lib/core/fields/checkbox.field.mjs +3 -3
  148. package/esm2022/lib/core/fields/checklist.designer.mjs +3 -3
  149. package/esm2022/lib/core/fields/checklist.field.mjs +3 -3
  150. package/esm2022/lib/core/fields/date-range.designer.mjs +3 -3
  151. package/esm2022/lib/core/fields/date-range.field.mjs +3 -3
  152. package/esm2022/lib/core/fields/date.designer.mjs +3 -3
  153. package/esm2022/lib/core/fields/date.field.mjs +3 -3
  154. package/esm2022/lib/core/fields/expression.field.mjs +6 -6
  155. package/esm2022/lib/core/fields/file.designer.mjs +3 -3
  156. package/esm2022/lib/core/fields/file.field.mjs +3 -3
  157. package/esm2022/lib/core/fields/html.designer.mjs +3 -3
  158. package/esm2022/lib/core/fields/html.field.mjs +3 -3
  159. package/esm2022/lib/core/fields/input.designer.mjs +3 -3
  160. package/esm2022/lib/core/fields/input.field.mjs +3 -3
  161. package/esm2022/lib/core/fields/localized-string.field.mjs +6 -6
  162. package/esm2022/lib/core/fields/numeric.designer.mjs +3 -3
  163. package/esm2022/lib/core/fields/numeric.field.mjs +3 -3
  164. package/esm2022/lib/core/fields/options.base.mjs +6 -6
  165. package/esm2022/lib/core/fields/options.component.mjs +3 -3
  166. package/esm2022/lib/core/fields/radio-button.designer.mjs +3 -3
  167. package/esm2022/lib/core/fields/radio-button.field.mjs +3 -3
  168. package/esm2022/lib/core/fields/select.designer.mjs +3 -3
  169. package/esm2022/lib/core/fields/select.field.mjs +3 -3
  170. package/esm2022/lib/core/fields/signature.designer.mjs +3 -3
  171. package/esm2022/lib/core/fields/signature.field.mjs +3 -3
  172. package/esm2022/lib/core/fields/switch.field.mjs +3 -3
  173. package/esm2022/lib/core/fields/tags.designer.mjs +3 -3
  174. package/esm2022/lib/core/fields/tags.field.mjs +3 -3
  175. package/esm2022/lib/core/fields/textarea.designer.mjs +3 -3
  176. package/esm2022/lib/core/fields/textarea.field.mjs +3 -3
  177. package/esm2022/lib/core/fields/time.designer.mjs +3 -3
  178. package/esm2022/lib/core/fields/time.field.mjs +3 -3
  179. package/esm2022/lib/core/fields/timespan.field.mjs +6 -6
  180. package/esm2022/lib/core/fields/yesno.designer.mjs +3 -3
  181. package/esm2022/lib/core/fields/yesno.field.mjs +3 -3
  182. package/esm2022/lib/core/guide/guide.component.mjs +3 -3
  183. package/esm2022/lib/core/guide/guide.service.mjs +3 -3
  184. package/esm2022/lib/core/guide/help-tip.component.mjs +3 -3
  185. package/esm2022/lib/core/http.interceptor.mjs +3 -3
  186. package/esm2022/lib/core/hub.service.mjs +3 -3
  187. package/esm2022/lib/core/identity/identity.component.mjs +3 -3
  188. package/esm2022/lib/core/info/attachment-info.service.mjs +3 -3
  189. package/esm2022/lib/core/info/document-info.service.mjs +3 -3
  190. package/esm2022/lib/core/info/location-info.component.mjs +3 -3
  191. package/esm2022/lib/core/info/map-info.mjs +3 -3
  192. package/esm2022/lib/core/inputs/address.input.mjs +3 -3
  193. package/esm2022/lib/core/inputs/auto-complete.input.mjs +3 -3
  194. package/esm2022/lib/core/inputs/combination-picker-body.mjs +4 -4
  195. package/esm2022/lib/core/inputs/combination-picker.mjs +3 -3
  196. package/esm2022/lib/core/inputs/combination-pool.mjs +3 -3
  197. package/esm2022/lib/core/inputs/file.input.mjs +3 -3
  198. package/esm2022/lib/core/inputs/select.input.mjs +3 -3
  199. package/esm2022/lib/core/inputs/signature.input.mjs +3 -3
  200. package/esm2022/lib/core/inputs/time-picker.mjs +3 -3
  201. package/esm2022/lib/core/inputs/timespan.input.mjs +3 -3
  202. package/esm2022/lib/core/layout.component.mjs +3 -3
  203. package/esm2022/lib/core/lottie-animation.mjs +3 -3
  204. package/esm2022/lib/core/mailbox.service.mjs +3 -3
  205. package/esm2022/lib/core/none.component.mjs +3 -3
  206. package/esm2022/lib/core/pipes/action.pipe.mjs +3 -3
  207. package/esm2022/lib/core/pipes/calendar.pipe.mjs +3 -3
  208. package/esm2022/lib/core/pipes/date-format.pipe.mjs +3 -3
  209. package/esm2022/lib/core/pipes/daterange.pipe.mjs +6 -6
  210. package/esm2022/lib/core/pipes/difference.pipe.mjs +3 -3
  211. package/esm2022/lib/core/pipes/duration-format.pipe.mjs +3 -3
  212. package/esm2022/lib/core/pipes/duration.pipe.mjs +3 -3
  213. package/esm2022/lib/core/pipes/form.pipe.mjs +3 -3
  214. package/esm2022/lib/core/pipes/join.pipe.mjs +3 -3
  215. package/esm2022/lib/core/pipes/localized-string.pipe.mjs +3 -3
  216. package/esm2022/lib/core/pipes/role.pipe.mjs +3 -3
  217. package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  218. package/esm2022/lib/core/pipes/sort.pipe.mjs +9 -9
  219. package/esm2022/lib/core/pipes/state.pipe.mjs +3 -3
  220. package/esm2022/lib/core/pipes/time-ago.pipe.mjs +6 -6
  221. package/esm2022/lib/core/pipes/translate.pipe.mjs +9 -9
  222. package/esm2022/lib/core/pipes/type-value.pipe.mjs +3 -3
  223. package/esm2022/lib/core/pipes/user-name.pipe.mjs +3 -3
  224. package/esm2022/lib/core/popup/popup.component.mjs +3 -3
  225. package/esm2022/lib/core/popup/popup.service.mjs +3 -3
  226. package/esm2022/lib/core/popup/tooltip.directive.mjs +6 -6
  227. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  228. package/esm2022/lib/core/prompt/mask/mask.component.mjs +3 -3
  229. package/esm2022/lib/core/prompt.service.mjs +3 -3
  230. package/esm2022/lib/core/router.mjs +6 -6
  231. package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
  232. package/esm2022/lib/core/session.service.mjs +3 -3
  233. package/esm2022/lib/core/slots/router.directive.mjs +3 -3
  234. package/esm2022/lib/core/slots/router.service.mjs +3 -3
  235. package/esm2022/lib/core/slots/slots.component.mjs +3 -3
  236. package/esm2022/lib/core/tagging/documents.component.mjs +3 -3
  237. package/esm2022/lib/core/tagging/edit-input.component.mjs +3 -3
  238. package/esm2022/lib/core/tagging/emoji.component.mjs +3 -3
  239. package/esm2022/lib/core/tagging/tagging-item.directive.mjs +3 -3
  240. package/esm2022/lib/core/tagging/tagging.component-base.mjs +3 -3
  241. package/esm2022/lib/core/tagging/tagging.directive.mjs +3 -3
  242. package/esm2022/lib/core/tagging/tagging.pipe.mjs +3 -3
  243. package/esm2022/lib/core/tagging/users.component.mjs +3 -3
  244. package/esm2022/lib/core/translate.service.mjs +3 -3
  245. package/esm2022/lib/core/window-title.service.mjs +3 -3
  246. package/esm2022/lib/cube/accum/accum.component.mjs +3 -3
  247. package/esm2022/lib/cube/chart/chart.component.mjs +3 -3
  248. package/esm2022/lib/cube/cube-info.service.mjs +3 -3
  249. package/esm2022/lib/cube/cube-menu.component.mjs +3 -3
  250. package/esm2022/lib/cube/cube-view.component.mjs +3 -3
  251. package/esm2022/lib/cube/cube.service.mjs +3 -3
  252. package/esm2022/lib/cube/explore/document-item.component.mjs +3 -3
  253. package/esm2022/lib/cube/explore/explore-item.component.mjs +3 -3
  254. package/esm2022/lib/cube/explore/explore-items.component.mjs +3 -3
  255. package/esm2022/lib/cube/explore/explore.pane.component.mjs +3 -3
  256. package/esm2022/lib/cube/explore/item-resolver.service.mjs +6 -6
  257. package/esm2022/lib/cube/explore/item.pane.component.mjs +3 -3
  258. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  259. package/esm2022/lib/cube/filter/filter.component.mjs +3 -3
  260. package/esm2022/lib/cube/grid/grid.component.mjs +3 -3
  261. package/esm2022/lib/cube/matrix/matrix.base.mjs +3 -3
  262. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  263. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  264. package/esm2022/lib/cube/matrix/popup.component.mjs +3 -3
  265. package/esm2022/lib/cube/matrix/table.component.mjs +66 -74
  266. package/esm2022/lib/cube/parallel/parallel.component.mjs +3 -3
  267. package/esm2022/lib/cube/pivot/pivot.component.mjs +3 -3
  268. package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +3 -3
  269. package/esm2022/lib/cube/spreadsheet/spreadsheet.container.mjs +3 -3
  270. package/esm2022/lib/cube/sum/sum.component.mjs +3 -3
  271. package/esm2022/lib/cube/view-base.mjs +3 -3
  272. package/esm2022/lib/cube/view.mobile.component.mjs +3 -3
  273. package/esm2022/lib/cube/view.pane.component.mjs +3 -3
  274. package/esm2022/lib/dashboard/actions/actions.widget.mjs +3 -3
  275. package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  276. package/esm2022/lib/dashboard/cube/compare.widget.mjs +3 -3
  277. package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  278. package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  279. package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  280. package/esm2022/lib/dashboard/cube/document-state.widget.mjs +3 -3
  281. package/esm2022/lib/dashboard/cube/documents.widget.mjs +3 -3
  282. package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  283. package/esm2022/lib/dashboard/dashboard.component.mjs +3 -3
  284. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +3 -3
  285. package/esm2022/lib/dashboard/recents/recents.widget.mjs +3 -3
  286. package/esm2022/lib/dashboard/score/activity.widget.mjs +3 -3
  287. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -3
  288. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  289. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +3 -3
  290. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -3
  291. package/esm2022/lib/dashboard/widget-item.component.mjs +3 -3
  292. package/esm2022/lib/designer.module.mjs +4 -4
  293. package/esm2022/lib/desktop.module.mjs +4 -4
  294. package/esm2022/lib/home/about/about.dialog.mjs +3 -3
  295. package/esm2022/lib/home/home-base.component.mjs +3 -3
  296. package/esm2022/lib/home/home.desktop.component.mjs +3 -3
  297. package/esm2022/lib/home/home.mobile.component.mjs +3 -3
  298. package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
  299. package/esm2022/lib/home/options/options.component.mjs +3 -3
  300. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  301. package/esm2022/lib/home/sign/sign.component.mjs +3 -3
  302. package/esm2022/lib/home/tools.component.mjs +3 -3
  303. package/esm2022/lib/impersonate/impersonate.component.mjs +3 -3
  304. package/esm2022/lib/mobile.module.mjs +4 -4
  305. package/esm2022/lib/modules/chart.module.mjs +4 -4
  306. package/esm2022/lib/modules/circular-gauge.module.mjs +4 -4
  307. package/esm2022/lib/modules/datepicker.intl.mjs +3 -3
  308. package/esm2022/lib/modules/dayjs.module.mjs +4 -4
  309. package/esm2022/lib/modules/diagram.module.mjs +4 -4
  310. package/esm2022/lib/modules/gantt.module.mjs +4 -4
  311. package/esm2022/lib/modules/grid.module.mjs +4 -4
  312. package/esm2022/lib/modules/linear-gauge.module.mjs +4 -4
  313. package/esm2022/lib/modules/material.module.mjs +4 -4
  314. package/esm2022/lib/modules/paginator.intl.mjs +3 -3
  315. package/esm2022/lib/modules/pivot.module.mjs +4 -4
  316. package/esm2022/lib/modules/schedule.module.mjs +4 -4
  317. package/esm2022/lib/modules/spreadsheet.module.mjs +4 -4
  318. package/esm2022/lib/modules/stepper.intl.mjs +3 -3
  319. package/esm2022/lib/modules/texteditor.module.mjs +4 -4
  320. package/esm2022/lib/notifications/filter.component.mjs +3 -3
  321. package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
  322. package/esm2022/lib/notifications/notifications.mobile.component.mjs +3 -3
  323. package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -3
  324. package/esm2022/lib/notifications/notifications.service.mjs +3 -3
  325. package/esm2022/lib/notifications/types/commented.notification.mjs +3 -3
  326. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  327. package/esm2022/lib/notifications/types/escalated.notification.mjs +3 -3
  328. package/esm2022/lib/notifications/types/invite.notification.mjs +3 -3
  329. package/esm2022/lib/notifications/types/liked.notification.mjs +3 -3
  330. package/esm2022/lib/notifications/types/long-running-task.notification.mjs +3 -3
  331. package/esm2022/lib/notifications/types/notification-base.mjs +3 -3
  332. package/esm2022/lib/notifications/types/nudge.notification.mjs +3 -3
  333. package/esm2022/lib/notifications/types/state-changed.notification.mjs +3 -3
  334. package/esm2022/lib/notifications/types/tagged.notification.mjs +3 -3
  335. package/esm2022/lib/notifications/types/text.notification.mjs +3 -3
  336. package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  337. package/esm2022/lib/options/options.component.mjs +3 -3
  338. package/esm2022/lib/options/options.service.mjs +3 -3
  339. package/esm2022/lib/reports/arguments-component.mjs +3 -3
  340. package/esm2022/lib/reports/cube/documents.component.mjs +3 -3
  341. package/esm2022/lib/reports/cube/grid-documents.component.mjs +3 -3
  342. package/esm2022/lib/reports/cube/role-performance.component.mjs +3 -3
  343. package/esm2022/lib/reports/cube/table-documents.component.mjs +3 -3
  344. package/esm2022/lib/reports/cube/usage-args.component.mjs +3 -3
  345. package/esm2022/lib/reports/cube/usage-base.mjs +3 -3
  346. package/esm2022/lib/reports/cube/usage-chart.component.mjs +3 -3
  347. package/esm2022/lib/reports/cube/usage-pivot.component.mjs +3 -3
  348. package/esm2022/lib/reports/cube/usage.component.mjs +3 -3
  349. package/esm2022/lib/reports/report-viewer.component.mjs +3 -3
  350. package/esm2022/lib/reports/report.mobile.component.mjs +3 -3
  351. package/esm2022/lib/reports/report.pane.component.mjs +3 -3
  352. package/esm2022/lib/reports/reports-menu.component.mjs +3 -3
  353. package/esm2022/lib/reports/substitution/substitution.component.mjs +3 -3
  354. package/esm2022/lib/reports/table/table-view.component.mjs +3 -3
  355. package/esm2022/lib/reports/tasks/tasks.component.mjs +3 -3
  356. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  357. package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  358. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +3 -3
  359. package/esm2022/lib/search/cube.component.mjs +3 -3
  360. package/esm2022/lib/search/document.component.mjs +3 -3
  361. package/esm2022/lib/search/guide.component.mjs +3 -3
  362. package/esm2022/lib/search/path.component.mjs +3 -3
  363. package/esm2022/lib/search/search.service.mjs +3 -3
  364. package/esm2022/lib/shared.module.mjs +4 -4
  365. package/esm2022/lib/system.module.mjs +7 -5
  366. package/esm2022/lib/views/cube/chart.component.mjs +3 -3
  367. package/esm2022/lib/views/cube/cube-base.mjs +3 -3
  368. package/esm2022/lib/views/cube/explore.component.mjs +3 -3
  369. package/esm2022/lib/views/cube/matrix.component.mjs +3 -3
  370. package/esm2022/lib/views/cube/parallel.component.mjs +3 -3
  371. package/esm2022/lib/views/cube/pivot.component.mjs +3 -3
  372. package/esm2022/lib/views/cube/sum.component.mjs +3 -3
  373. package/esm2022/lib/views/cube/view.component.mjs +3 -3
  374. package/esm2022/lib/views/timeline/timeline.component.mjs +3 -3
  375. package/esm2022/lib/views/view-item.component.mjs +3 -3
  376. package/esm2022/lib/views/views.component.mjs +3 -3
  377. package/esm2022/lib/views/views.mobile.component.mjs +3 -3
  378. package/esm2022/lib/views/views.pane.component.mjs +3 -3
  379. package/fesm2022/bizdoc-core.mjs +1319 -1317
  380. package/fesm2022/bizdoc-core.mjs.map +1 -1
  381. package/lib/admin/architecture/designer-element.component.d.ts +12 -2
  382. package/lib/admin/architecture/elements/matrix-view.component.d.ts +1 -1
  383. package/lib/cube/matrix/table.component.d.ts +3 -4
  384. package/package.json +1 -1
@@ -13,7 +13,7 @@ import * as i2 from "../cube.service";
13
13
  import * as i3 from "../../core/session.service";
14
14
  import * as i4 from "../../core/translate.service";
15
15
  import * as i5 from "../../core/datasource.service";
16
- const LOADING_DELAY = 200, SUM_PREFIX = '_sum';
16
+ const LOADING_GRACE = 200;
17
17
  /** cube matrix component*/
18
18
  export class CubeMatrixComponent {
19
19
  set sum(val) {
@@ -84,36 +84,35 @@ export class CubeMatrixComponent {
84
84
  this.xAxis = this.cube.axes.find(a => a.name === this._xAxis);
85
85
  this.series = this.cube.axes.find(a => a.name === this._series);
86
86
  this.data = null;
87
- this._prepare = firstValueFrom(forkJoin([this._ds.all(this.series.dataType).pipe(tap(r => this.rows = r)),
88
- this._ds.all(this.xAxis.dataType).pipe(tap(c => this.columns = c)).pipe(tap(() => {
89
- this._indices && this._addindices();
90
- this._sum && this._addsumheaders();
91
- }))]));
87
+ this._prepare = firstValueFrom(forkJoin([
88
+ this._ds.all(this.series.dataType).pipe(tap(r => this.rows = r)),
89
+ this._ds.all(this.xAxis.dataType).pipe(tap(c => this.columns = c))
90
+ ]).pipe(tap(this._addAccumHeaders.bind(this))));
92
91
  this.refresh();
93
92
  }
94
93
  else if (changes['filters'])
95
94
  this.refresh();
96
95
  }
97
- _addindices() {
98
- const collection = this.indexAt === 'XAxis' ? this.columns : this.rows;
99
- this.indices.forEach((x, i) => {
100
- const header = {
101
- key: x.name,
102
- value: x.title,
103
- index: x,
104
- accumulate: x.accumulate
105
- };
106
- if (this.placeAt === 'Trailing')
107
- collection.push(header);
108
- else
109
- collection.splice(i, 0, header);
110
- });
111
- }
112
- _addsumheaders() {
113
- this._sum.forEach((s, i) => {
96
+ _addAccumHeaders() {
97
+ if (this._indices) {
98
+ const collection = this.indexAt === 'XAxis' ? this.columns : this.rows;
99
+ this.indices.forEach((x, i) => {
100
+ const header = {
101
+ key: x.name,
102
+ value: x.title,
103
+ index: x,
104
+ accumulate: x.accumulate
105
+ };
106
+ if (this.placeAt === 'Trailing')
107
+ collection.push(header);
108
+ else
109
+ collection.splice(i, 0, header);
110
+ });
111
+ }
112
+ this._sum && this._sum.forEach((s, i) => {
114
113
  const { value, axis } = s;
115
114
  const header = {
116
- key: SUM_PREFIX + i,
115
+ key: '_sum' + i,
117
116
  value: s.title,
118
117
  accumulate: !isFunction(s.calculate) && s.calculate !== 'Sum',
119
118
  explorable: !isFunction(s.calculate) && s.explorable !== false,
@@ -146,7 +145,7 @@ export class CubeMatrixComponent {
146
145
  });
147
146
  }
148
147
  refresh() {
149
- const progressTask = setTimeout(() => this.loadingChange.next(this.loading = true), LOADING_DELAY);
148
+ const progressTask = setTimeout(() => this.loadingChange.next(this.loading = true), LOADING_GRACE);
150
149
  this._prepare.then(() => this._service.series(this.cube.name, this._xAxis, {
151
150
  series: this._series,
152
151
  indices: this._indices,
@@ -155,53 +154,52 @@ export class CubeMatrixComponent {
155
154
  scope: this.scope
156
155
  }).subscribe({
157
156
  next: r => {
158
- const data = this._serialize(r);
159
- this._clone(data);
160
- this._sum && this._calculatesum(data);
161
- this._totals(data);
162
- this._stringify(data);
163
- this.data = data;
164
- clearTimeout(progressTask);
165
- this.loadingChange.next(this.loading = false);
157
+ const map = this._map(r);
158
+ this._clone(map);
159
+ this._sum && this._calculatesum(map);
160
+ this._totals(map);
161
+ this._stringify(map);
162
+ this.data = map;
166
163
  },
167
164
  error: (e) => {
168
165
  this._sb.error(errResource(e));
166
+ this.loadingChange.error(e);
167
+ }, complete: () => {
169
168
  clearTimeout(progressTask);
170
169
  this.loadingChange.next(this.loading = false);
171
- this.loadingChange.error(e);
172
170
  }
173
171
  }));
174
172
  }
175
- _serialize(series) {
176
- const d = {};
173
+ _map(series) {
174
+ const map = {};
177
175
  series.forEach(s => {
178
176
  if (s.index) {
179
177
  if (this.indexAt === 'XAxis')
180
178
  s.points.forEach(p => {
181
- let row = d[p.x];
179
+ let row = map[p.x];
182
180
  if (!row)
183
- row = d[p.x] = {};
181
+ row = map[p.x] = {};
184
182
  row[s.index] = p.y;
185
183
  });
186
184
  else {
187
- const row = d[s.index] = {};
185
+ const row = map[s.index] = {};
188
186
  s.points.forEach(p => row[p.x] = p.y);
189
187
  }
190
188
  }
191
189
  else {
192
- const row = d[s.name] = {};
190
+ const row = map[s.name] = {};
193
191
  s.points.forEach(p => row[p.x] = p.y);
194
192
  }
195
193
  });
196
- return d;
194
+ return map;
197
195
  }
198
196
  _clone(data) {
199
- this._data = {};
197
+ this._rawdata = {};
200
198
  this.rows.forEach(r => {
201
199
  const key = r.key;
202
200
  if (!data[key])
203
201
  data[key] = {};
204
- Object.assign(this._data[key] = {}, data[key]);
202
+ Object.assign(this._rawdata[key] = {}, data[key]);
205
203
  });
206
204
  }
207
205
  _totals(data) {
@@ -230,7 +228,6 @@ export class CubeMatrixComponent {
230
228
  };
231
229
  });
232
230
  const totals = data['_total'] = this.totals = {};
233
- totals['_grand'] = this._format(grand);
234
231
  this.columns.forEach(c => {
235
232
  let rowTotal = 0;
236
233
  this.rows.forEach(row => {
@@ -243,11 +240,12 @@ export class CubeMatrixComponent {
243
240
  });
244
241
  totals[c.key] = this._format(rowTotal, c);
245
242
  });
243
+ totals['_grand'] = this._format(grand);
246
244
  }
247
245
  _calculatesum(data) {
248
246
  this._sum.forEach((s, i) => {
249
- const { axis, value, calculate } = s;
250
- const name = SUM_PREFIX + i;
247
+ const { axis, value: key, calculate } = s;
248
+ const name = '_sum' + i;
251
249
  if (axis === 'XAxis') {
252
250
  this.rows.forEach(r => {
253
251
  if (r.accumulate === false)
@@ -257,21 +255,18 @@ export class CubeMatrixComponent {
257
255
  return;
258
256
  let sum = 0;
259
257
  for (const column of this.columns) {
260
- if (column.index)
261
- continue;
262
- const key = column.key;
263
- if (column.sum)
258
+ if (column.index || column.sum)
264
259
  continue;
265
260
  if (isFunction(calculate)) {
266
- const val = calculate(r.key, this._data);
261
+ const val = calculate(r.key, this._rawdata);
267
262
  if (val !== undefined && val !== null)
268
263
  sum += val;
269
264
  }
270
265
  else {
271
- const val = datarow[key];
266
+ const val = datarow[column.key];
272
267
  if (val !== undefined)
273
268
  sum += val;
274
- if (key === value)
269
+ if (column.key === key)
275
270
  break;
276
271
  }
277
272
  }
@@ -279,20 +274,19 @@ export class CubeMatrixComponent {
279
274
  });
280
275
  }
281
276
  else {
282
- const datarow = data[name] = {};
277
+ const datacolumn = data[name] = {};
283
278
  this.columns.forEach(column => {
284
279
  let sum = 0;
285
280
  for (const row of this.rows) {
286
- if (row.index)
281
+ if (row.index || row.sum)
287
282
  continue;
288
- const key = row.key;
289
283
  if (isFunction(calculate)) {
290
- const val = calculate(row.key, this._data);
284
+ const val = calculate(row.key, this._rawdata);
291
285
  if (val !== undefined && val !== null)
292
286
  sum += val;
293
287
  }
294
288
  else {
295
- const datarow = data[key];
289
+ const datarow = data[row.key];
296
290
  if (!datarow)
297
291
  continue;
298
292
  if (column.sum) {
@@ -305,31 +299,29 @@ export class CubeMatrixComponent {
305
299
  if (val !== undefined)
306
300
  sum += val;
307
301
  }
308
- if (key === value)
302
+ if (row.key === key)
309
303
  break;
310
304
  }
311
305
  }
312
- datarow[column.key] = sum;
306
+ datacolumn[name] = sum;
313
307
  });
314
308
  }
315
309
  });
316
310
  }
317
311
  _stringify(data) {
318
312
  this.columns.forEach(c => {
313
+ const series = c.key;
319
314
  this.rows.forEach(r => {
320
- const xAxis = r.key, series = c.key;
321
- if (c.sum)
322
- data[xAxis][series] = this._format(data[xAxis][series], c.sum);
323
- else if (r.sum)
324
- data[xAxis][series] = this._format(data[xAxis][series], r.sum);
325
- else
326
- data[xAxis][series] =
327
- formatNumber(data[xAxis][series] || 0, this.LANGUAGE, this.PRECISION);
315
+ const xAxis = r.key, value = data[xAxis][series];
316
+ data[xAxis][series] =
317
+ (c.sum ? this._format(value, c.sum) :
318
+ r.sum ? this._format(value, r.sum) :
319
+ this._format(value));
328
320
  });
329
321
  });
330
322
  }
331
323
  _format(val, options) {
332
- if (val === 0)
324
+ if (val === 0 || val === undefined)
333
325
  return '0';
334
326
  if (options) {
335
327
  if (options.format === 'Percent')
@@ -395,7 +387,7 @@ export class CubeMatrixComponent {
395
387
  value: c.value, style: { bold: true }
396
388
  }));
397
389
  this.rows.filter(r => !r.sum).forEach((r, i) => {
398
- const data = this._data[r.key], cells = [{ index: 1, value: r.value, style: { bold: true } }];
390
+ const data = this._rawdata[r.key], cells = [{ index: 1, value: r.value, style: { bold: true } }];
399
391
  columns.forEach((c, j) => cells.push({
400
392
  type: 'number',
401
393
  index: j + 2,
@@ -451,10 +443,10 @@ export class CubeMatrixComponent {
451
443
  }
452
444
  }
453
445
  }
454
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.DatasourceService }], target: i0.ɵɵFactoryTarget.Component }); }
455
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { seriesTotalLabel: "seriesTotalLabel", xAxisTotalLabel: "xAxisTotalLabel", _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], indexAt: "indexAt", placeAt: "placeAt", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (data) {\n <table #table class=\"mat-mdc-table cube-table\" (mouseleave)=\"_move(-1, -1)\">\n <thead>\n <!-- headers -->\n <tr class=\"mat-mdc-header-row\">\n <th></th>\n @for (column of columns; track column; let x = $index) {\n <th\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-mdc-header-cell\">\n {{ column.value }}\n </th>\n }\n <th class=\"mat-mdc-header-cell\">{{xAxisTotalLabel}}</th>\n </tr>\n </thead>\n <tbody>\n <!-- rows -->\n @for (row of rows; track row; let y = $index) {\n <tr class=\"mat-mdc-row\"\n [class.cube-index]=\"row.index\">\n <th class=\"mat-mdc-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-cell figure\"\n (mouseenter)=\"_move(x + 1, y )\">\n @if (data[row.key][column.key] !== '0') {\n <span\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\n (click)=\"explore(column, row)\">\n {{ data[row.key][column.key] }}\n </span>\n } @else {\n 0\n }\n </td>\n }\n <th class=\"mat-mdc-cell figure\" (mouseenter)=\"_move(-1, y )\">\n {{ data[row.key]['_total'] }}\n </th>\n </tr>\n }\n </tbody>\n <tfoot>\n <!-- footer -->\n <tr class=\"mat-mdc-footer-row\">\n <td class=\"mat-mdc-footer-cell\">{{seriesTotalLabel}}</td>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-footer-cell figure\"\n (mouseenter)=\"_move(x + 1, -2)\"\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\n @if (totals[column.key] !== undefined) {\n {{ totals[column.key] }}\n }\n </td>\n }\n <th class=\"mat-mdc-footer-cell figure\">{{ totals['_grand'] }}</th>\n </tr>\n </tfoot>\n </table>\n}\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}.cube-table tfoot tr td{border-bottom:none}\n"], animations: [matrixAnimation] }); }
446
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.DatasourceService }], target: i0.ɵɵFactoryTarget.Component }); }
447
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.0", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { seriesTotalLabel: "seriesTotalLabel", xAxisTotalLabel: "xAxisTotalLabel", _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], indexAt: "indexAt", placeAt: "placeAt", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (data) {\n <table #table class=\"mat-mdc-table cube-table\" (mouseleave)=\"_move(-1, -1)\">\n <thead>\n <!-- headers -->\n <tr class=\"mat-mdc-header-row\">\n <th></th>\n @for (column of columns; track column; let x = $index) {\n <th\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-mdc-header-cell\">\n {{ column.value }}\n </th>\n }\n <th class=\"mat-mdc-header-cell\">{{xAxisTotalLabel}}</th>\n </tr>\n </thead>\n <tbody>\n <!-- rows -->\n @for (row of rows; track row; let y = $index) {\n <tr class=\"mat-mdc-row\"\n [class.cube-index]=\"row.index\">\n <th class=\"mat-mdc-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-cell figure\"\n (mouseenter)=\"_move(x + 1, y )\">\n @if (data[row.key][column.key] !== '0') {\n <span\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\n (click)=\"explore(column, row)\">\n {{ data[row.key][column.key] }}\n </span>\n } @else {\n 0\n }\n </td>\n }\n <th class=\"mat-mdc-cell figure\" (mouseenter)=\"_move(-1, y )\">\n {{ data[row.key]['_total'] }}\n </th>\n </tr>\n }\n </tbody>\n <tfoot>\n <!-- footer -->\n <tr class=\"mat-mdc-footer-row\">\n <td class=\"mat-mdc-footer-cell\">{{seriesTotalLabel}}</td>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-footer-cell figure\"\n (mouseenter)=\"_move(x + 1, -2)\"\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\n @if (totals[column.key] !== undefined) {\n {{ totals[column.key] }}\n }\n </td>\n }\n <th class=\"mat-mdc-footer-cell figure\">{{ totals['_grand'] }}</th>\n </tr>\n </tfoot>\n </table>\n}\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}.cube-table tfoot tr td{border-bottom:none}\n"], animations: [matrixAnimation] }); }
456
448
  }
457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubeMatrixComponent, decorators: [{
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubeMatrixComponent, decorators: [{
458
450
  type: Component,
459
451
  args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "@if (data) {\n <table #table class=\"mat-mdc-table cube-table\" (mouseleave)=\"_move(-1, -1)\">\n <thead>\n <!-- headers -->\n <tr class=\"mat-mdc-header-row\">\n <th></th>\n @for (column of columns; track column; let x = $index) {\n <th\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-mdc-header-cell\">\n {{ column.value }}\n </th>\n }\n <th class=\"mat-mdc-header-cell\">{{xAxisTotalLabel}}</th>\n </tr>\n </thead>\n <tbody>\n <!-- rows -->\n @for (row of rows; track row; let y = $index) {\n <tr class=\"mat-mdc-row\"\n [class.cube-index]=\"row.index\">\n <th class=\"mat-mdc-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-cell figure\"\n (mouseenter)=\"_move(x + 1, y )\">\n @if (data[row.key][column.key] !== '0') {\n <span\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\n (click)=\"explore(column, row)\">\n {{ data[row.key][column.key] }}\n </span>\n } @else {\n 0\n }\n </td>\n }\n <th class=\"mat-mdc-cell figure\" (mouseenter)=\"_move(-1, y )\">\n {{ data[row.key]['_total'] }}\n </th>\n </tr>\n }\n </tbody>\n <tfoot>\n <!-- footer -->\n <tr class=\"mat-mdc-footer-row\">\n <td class=\"mat-mdc-footer-cell\">{{seriesTotalLabel}}</td>\n @for (column of columns; track column; let x = $index) {\n <td class=\"mat-mdc-footer-cell figure\"\n (mouseenter)=\"_move(x + 1, -2)\"\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\n @if (totals[column.key] !== undefined) {\n {{ totals[column.key] }}\n }\n </td>\n }\n <th class=\"mat-mdc-footer-cell figure\">{{ totals['_grand'] }}</th>\n </tr>\n </tfoot>\n </table>\n}\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}.cube-table tfoot tr td{border-bottom:none}\n"] }]
460
452
  }], ctorParameters: () => [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }, { type: i4.TranslateService }, { type: i5.DatasourceService }], propDecorators: { tableElement: [{
@@ -496,4 +488,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
496
488
  }], loadingChange: [{
497
489
  type: Output
498
490
  }] } });
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBZSxXQUFXLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQU1uRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFFL0MsMkJBQTJCO0FBTzNCLE1BQU0sT0FBTyxtQkFBbUI7SUFtQjlCLElBQWEsR0FBRyxDQUFDLEdBQWdDO1FBQy9DLElBQUksR0FBRztZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FB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U0FBUztnQkFDRSxhQUFhO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXRQZXJjZW50LCBmb3JtYXROdW1iZXIsIGdldEN1cnJlbmN5U3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFdvcmtib29rLCBXb3Jrc2hlZXQsIFJvdywgQ29sdW1uIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlLCBlcnJSZXNvdXJjZSwgU2VyaWVzIH0gZnJvbSAnLi4vY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRhc291cmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQXhpc1ZhbHVlLCBDdWJlLCBDdWJlQXhpcywgQ3ViZUluZGV4IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBtYXRyaXhBbmltYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBBeGlzQ2xpY2tFdmVudCB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucyc7XHJcbmltcG9ydCB7IEF4aXNQbGFjZSwgQXhpc1R5cGUgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMnO1xyXG5cclxuY29uc3QgTE9BRElOR19ERUxBWSA9IDIwMCwgU1VNX1BSRUZJWCA9ICdfc3VtJztcclxuXHJcbi8qKiBjdWJlIG1hdHJpeCBjb21wb25lbnQqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLW1hdHJpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFttYXRyaXhBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlTWF0cml4Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICByZWFkb25seSBQUkVDSVNJT04gPSB0aGlzLl9zZXJ2aWNlLmRpZ2l0c0luZm87XHJcbiAgcmVhZG9ubHkgTEFOR1VBR0UgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlO1xyXG4gIENVUlJFTkNZOiBzdHJpbmc7XHJcbiAgU1lNQk9MOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFRhYmxlRWxlbWVudD47XHJcbiAgQElucHV0KCkgc2VyaWVzVG90YWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHhBeGlzVG90YWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgnY3ViZScpIF9jdWJlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgneEF4aXMnKSBfeEF4aXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdzZXJpZXMnKSBfc2VyaWVzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnaW5kaWNlcycpXHJcbiAgX2luZGljZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGluZGV4QXQ6IEF4aXNUeXBlID0gJ1Nlcmllcyc7XHJcbiAgQElucHV0KClcclxuICBwbGFjZUF0OiBBeGlzUGxhY2UgPSAnTGVhZGluZyc7XHJcbiAgQElucHV0KCkgc2NvcGU6IFNjb3BlVHlwZTtcclxuICBwcml2YXRlIF9zdW06IFN1bVNldHRpbmdzW107XHJcbiAgQElucHV0KCkgc2V0IHN1bSh2YWw6IFN1bVNldHRpbmdzIHwgU3VtU2V0dGluZ3NbXSkge1xyXG4gICAgaWYgKHZhbCkgdGhpcy5fc3VtID0gKGlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdKS5cclxuICAgICAgbWFwKHN1bSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgIGlmIChzdW0udmFsdWUpXHJcbiAgICAgICAgICB2YWx1ZSA9IHN1bS52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGVsc2UgaWYgKHN1bS5jYWxjdWxhdGUpXHJcbiAgICAgICAgICBzd2l0Y2ggKHN1bS5jYWxjdWxhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gJ00nICsgKCcwJyArIChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKS5zbGljZSgtMik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1llYXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1F1YXJ0ZXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gTWF0aC5jZWlsKChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKSAvIDMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1N1bSc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnfic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN1bSxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4aXNDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBsb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHJvd3M6IEhlYWRlckluZm9bXTtcclxuICBjb2x1bW5zOiBIZWFkZXJJbmZvW107XHJcbiAgaW5kaWNlczogQ3ViZUluZGV4W10gPSBbXTtcclxuICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9OyB9O1xyXG4gIHRvdGFsczogeyBbeEF4aXM6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGN1YmU6IEN1YmU7XHJcbiAgeEF4aXM6IEN1YmVBeGlzO1xyXG4gIHNlcmllczogQ3ViZUF4aXM7XHJcbiAgcHJpdmF0ZSBfZGF0YTogRGF0YU1hcDtcclxuICBwcml2YXRlIF9wcmVwYXJlOiBQcm9taXNlPGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydfY3ViZSddKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlcy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLl9jdWJlKTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jdWJlKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydfaW5kaWNlcyddICYmIHRoaXMuX2luZGljZXMpIHtcclxuICAgICAgaWYgKCF0aGlzLmN1YmUuaW5kaWNlcykgdGhyb3cgYGN1YmUgJHt0aGlzLmN1YmUubmFtZX0gZXhwZWN0cyBvbmUgb3IgbW9yZSBpbmRpY2VzLmA7XHJcbiAgICAgIHRoaXMuaW5kaWNlcyA9IHRoaXMuY3ViZS5pbmRpY2VzLmZpbHRlcihpID0+IGlzQXJyYXkodGhpcy5faW5kaWNlcykgPyB0aGlzLl9pbmRpY2VzLmluZGV4T2YoaS5uYW1lKSA+IC0xIDogdGhpcy5faW5kaWNlcyA9PT0gaS5uYW1lKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydfeEF4aXMnXSB8fCBjaGFuZ2VzWydfc2VyaWVzJ10pIHtcclxuICAgICAgdGhpcy54QXhpcyA9IHRoaXMuY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHRoaXMuX3hBeGlzKTtcclxuICAgICAgdGhpcy5zZXJpZXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl9zZXJpZXMpO1xyXG4gICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlID0gZmlyc3RWYWx1ZUZyb20oIGZvcmtKb2luKFt0aGlzLl9kcy5hbGwodGhpcy5zZXJpZXMuZGF0YVR5cGUpLnBpcGUodGFwKHIgPT5cclxuICAgICAgICB0aGlzLnJvd3MgPSByXHJcbiAgICAgICkpLFxyXG4gICAgICAgIHRoaXMuX2RzLmFsbCh0aGlzLnhBeGlzLmRhdGFUeXBlKS5waXBlKHRhcChjID0+XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjXHJcbiAgICAgICAgKSkucGlwZSh0YXAoXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luZGljZXMgJiYgdGhpcy5fYWRkaW5kaWNlcygpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdW0gJiYgdGhpcy5fYWRkc3VtaGVhZGVycygpO1xyXG4gICAgICAgICAgfSkpXSkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSlcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZGluZGljZXMoKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5pbmRleEF0ID09PSAnWEF4aXMnID8gdGhpcy5jb2x1bW5zIDogdGhpcy5yb3dzO1xyXG4gICAgdGhpcy5pbmRpY2VzLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgY29uc3QgaGVhZGVyID0ge1xyXG4gICAgICAgIGtleTogeC5uYW1lLFxyXG4gICAgICAgIHZhbHVlOiB4LnRpdGxlLFxyXG4gICAgICAgIGluZGV4OiB4LFxyXG4gICAgICAgIGFjY3VtdWxhdGU6IHguYWNjdW11bGF0ZVxyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlQXQgPT09ICdUcmFpbGluZycpXHJcbiAgICAgICAgY29sbGVjdGlvbi5wdXNoKGhlYWRlcik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShpLCAwLCBoZWFkZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZHN1bWhlYWRlcnMoKSB7XHJcbiAgICB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBjb25zdCB7IHZhbHVlLCBheGlzIH0gPSBzO1xyXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XHJcbiAgICAgICAga2V5OiBTVU1fUFJFRklYICsgaSxcclxuICAgICAgICB2YWx1ZTogcy50aXRsZSxcclxuICAgICAgICBhY2N1bXVsYXRlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSkgJiYgcy5jYWxjdWxhdGUgIT09ICdTdW0nLFxyXG4gICAgICAgIGV4cGxvcmFibGU6ICFpc0Z1bmN0aW9uKHMuY2FsY3VsYXRlKSAmJiBzLmV4cGxvcmFibGUgIT09IGZhbHNlLFxyXG4gICAgICAgIHByZWNpc2lvbjogcy5wcmVjaXNpb24sXHJcbiAgICAgICAgc3VtOiBzXHJcbiAgICAgIH0gYXMgSGVhZGVySW5mbztcclxuICAgICAgbGV0IGogPSAwO1xyXG4gICAgICBpZiAoYXhpcyA9PT0gJ1hBeGlzJykge1xyXG4gICAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tqXS5rZXkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoaiArIDEsIDAsIGhlYWRlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaisrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaiA9PT0gdGhpcy5jb2x1bW5zLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2hpbGUgKGogPCB0aGlzLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yb3dzW2pdLmtleSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dzLnNwbGljZShqICsgMSwgMCwgaGVhZGVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBqKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChqID09PSB0aGlzLnJvd3MubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5yb3dzLnB1c2goaGVhZGVyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgcHJvZ3Jlc3NUYXNrID0gc2V0VGltZW91dCgoKSA9PlxyXG4gICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSB0cnVlKVxyXG4gICAgICAsIExPQURJTkdfREVMQVkpO1xyXG4gICAgdGhpcy5fcHJlcGFyZS50aGVuKCgpID0+XHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uuc2VyaWVzKHRoaXMuY3ViZS5uYW1lLCB0aGlzLl94QXhpcywge1xyXG4gICAgICAgIHNlcmllczogdGhpcy5fc2VyaWVzLFxyXG4gICAgICAgIGluZGljZXM6IHRoaXMuX2luZGljZXMsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgICAgIGludmVyc2VJbmRpY2VzOiB0aGlzLmluZGV4QXQgPT09ICdYQXhpcycsXHJcbiAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGVcclxuICAgICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zZXJpYWxpemUocik7XHJcbiAgICAgICAgICB0aGlzLl9jbG9uZShkYXRhKTtcclxuICAgICAgICAgIHRoaXMuX3N1bSAmJiB0aGlzLl9jYWxjdWxhdGVzdW0oZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLl90b3RhbHMoZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLl9zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIGFueTtcclxuICAgICAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6KGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoZXJyUmVzb3VyY2UoZSkpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5lcnJvcihlKTtcclxuICAgICAgfX0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXJpYWxpemUoc2VyaWVzOiBTZXJpZXNbXSkge1xyXG4gICAgY29uc3QgZCA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXI7IH07IH07XHJcbiAgICBzZXJpZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgaWYgKHMuaW5kZXgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbmRleEF0ID09PSAnWEF4aXMnKVxyXG4gICAgICAgICAgcy5wb2ludHMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvdyA9IGRbcC54XTtcclxuICAgICAgICAgICAgaWYgKCFyb3cpXHJcbiAgICAgICAgICAgICAgcm93ID0gZFtwLnhdID0ge307XHJcbiAgICAgICAgICAgIHJvd1tzLmluZGV4XSA9IHAueTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gZFtzLmluZGV4XSA9IHt9O1xyXG4gICAgICAgICAgcy5wb2ludHMuZm9yRWFjaChwID0+IHJvd1twLnhdID0gcC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IGRbcy5uYW1lXSA9IHt9O1xyXG4gICAgICAgIHMucG9pbnRzLmZvckVhY2gocCA9PiByb3dbcC54XSA9IHAueSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9uZShkYXRhKSB7XHJcbiAgICB0aGlzLl9kYXRhID0ge307XHJcbiAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gci5rZXk7XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSBkYXRhW2tleV0gPSB7fTtcclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9kYXRhW2tleV0gPSB7fSwgZGF0YVtrZXldKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF90b3RhbHMoZGF0YTogRGF0YU1hcCkge1xyXG4gICAgbGV0IGdyYW5kID0gMDtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgIGlmIChkYXRhcm93KSB7XHJcbiAgICAgICAgbGV0IGNvbHVtblRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmIChjLmFjY3VtdWxhdGUgPT09IGZhbHNlIHx8IGMuc3VtICE9PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IHZhbCA9IGRhdGFyb3dbYy5rZXldO1xyXG4gICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjb2x1bW5Ub3RhbCArPSB0aGlzLmluZGljZXMubGVuZ3RoID09PSAwIHx8IHRoaXMuaW5kZXhBdCAhPT0gJ1hBeGlzJyB8fFxyXG4gICAgICAgICAgICAgIGMuaW5kZXggIT09IHVuZGVmaW5lZCA/IHZhbCA6IC12YWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGF0YXJvd1snX3RvdGFsJ10gPSB0aGlzLl9mb3JtYXQoY29sdW1uVG90YWwsIHIpIGFzIGFueTtcclxuICAgICAgICBpZiAoIXIuc3VtKVxyXG4gICAgICAgICAgZ3JhbmQgKz0gdGhpcy5pbmRpY2VzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICB0aGlzLmluZGV4QXQgPT09ICdYQXhpcycgfHxcclxuICAgICAgICAgICAgci5pbmRleCAhPT0gdW5kZWZpbmVkID8gY29sdW1uVG90YWwgOiAtY29sdW1uVG90YWw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGRhdGFbci5rZXldID0ge1xyXG4gICAgICAgICAgJ190b3RhbCc6ICcwJyBhcyBhbnlcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0b3RhbHMgPSBkYXRhWydfdG90YWwnXSA9IHRoaXMudG90YWxzID0ge307XHJcbiAgICB0b3RhbHNbJ19ncmFuZCddID0gdGhpcy5fZm9ybWF0KGdyYW5kKTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBsZXQgcm93VG90YWwgPSAwO1xyXG4gICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgIGlmIChyb3cuYWNjdW11bGF0ZSA9PT0gZmFsc2UgfHwgcm93LnN1bSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgdmFsID0gZGF0YVtyb3cua2V5XVtjLmtleV07XHJcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgcm93VG90YWwgKz0gdGhpcy5pbmRpY2VzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmluZGV4QXQgPT09ICdYQXhpcycgfHxcclxuICAgICAgICAgICAgcm93LmluZGV4ICE9PSB1bmRlZmluZWQgPyB2YWwgOiAtdmFsO1xyXG4gICAgICB9KTtcclxuICAgICAgdG90YWxzW2Mua2V5XSA9IHRoaXMuX2Zvcm1hdChyb3dUb3RhbCwgYyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlc3VtKGRhdGE6IERhdGFNYXApIHtcclxuICAgIHRoaXMuX3N1bS5mb3JFYWNoKChzLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgYXhpcywgdmFsdWUsIGNhbGN1bGF0ZSB9ID0gcztcclxuICAgICAgY29uc3QgbmFtZSA9IFNVTV9QUkVGSVggKyBpO1xyXG4gICAgICBpZiAoYXhpcyA9PT0gJ1hBeGlzJykge1xyXG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuYWNjdW11bGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IGRhdGFyb3cgPSBkYXRhW3Iua2V5XTtcclxuICAgICAgICAgIGlmICghZGF0YXJvdylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pbmRleCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uc3VtKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChjYWxjdWxhdGUgYXMgQ2FsY3VsYXRlRm4pKHIua2V5LCB0aGlzLl9kYXRhKTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkYXRhcm93W2tleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhcm93W25hbWVdID0gc3VtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGRhdGFyb3cgPSBkYXRhW25hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgICAgICAgIGlmIChyb3cuaW5kZXgpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSByb3cua2V5O1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gKGNhbGN1bGF0ZSBhcyBDYWxjdWxhdGVGbikocm93LmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0YXJvdyA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICBpZiAoIWRhdGFyb3cpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uc3VtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkYXRhcm93W2NvbHVtbi5rZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPSB1bmRlZmluZWQpIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gZGF0YXJvd1tjb2x1bW4ua2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YXJvd1tjb2x1bW4ua2V5XSA9IHN1bTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0cmluZ2lmeShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3QgeEF4aXMgPSByLmtleSwgc2VyaWVzID0gYy5rZXk7XHJcbiAgICAgICAgaWYgKGMuc3VtKSBkYXRhW3hBeGlzXVtzZXJpZXNdID0gdGhpcy5fZm9ybWF0KGRhdGFbeEF4aXNdW3Nlcmllc10sIGMuc3VtKTtcclxuICAgICAgICBlbHNlIGlmIChyLnN1bSkgZGF0YVt4QXhpc11bc2VyaWVzXSA9IHRoaXMuX2Zvcm1hdChkYXRhW3hBeGlzXVtzZXJpZXNdLCByLnN1bSk7XHJcbiAgICAgICAgZWxzZSBkYXRhW3hBeGlzXVtzZXJpZXNdID1cclxuICAgICAgICAgIGZvcm1hdE51bWJlcihkYXRhW3hBeGlzXVtzZXJpZXNdIHx8IDAsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKSBhcyBhbnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvcm1hdCh2YWwsIG9wdGlvbnM/OiB7IGZvcm1hdD86IEZvcm1hdFR5cGUsIHByZWNpc2lvbj86IHN0cmluZyB9KTogYW55IHtcclxuICAgIGlmICh2YWwgPT09IDApIHJldHVybiAnMCc7XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdQZXJjZW50JylcclxuICAgICAgICByZXR1cm4gZm9ybWF0UGVyY2VudCh2YWwsIHRoaXMuTEFOR1VBR0UsIG9wdGlvbnMucHJlY2lzaW9uIHx8IHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgICAgZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdDdXJyZW5jeScpXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5TWU1CT0wsIHRoaXMuQ1VSUkVOQ1ksIG9wdGlvbnMucHJlY2lzaW9uIHx8IHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLkNVUlJFTkNZKVxyXG4gICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsLCB0aGlzLkxBTkdVQUdFLCB0aGlzLlNZTUJPTCwgdGhpcy5DVVJSRU5DWSwgdGhpcy5QUkVDSVNJT04pO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5QUkVDSVNJT04pO1xyXG4gIH1cclxuICBleHBsb3JlKGNvbHVtbjogSGVhZGVySW5mbywgcm93OiBIZWFkZXJJbmZvKSB7XHJcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUgfHwgY29sdW1uLmV4cGxvcmFibGUgPT09IGZhbHNlIHx8IHJvdy5leHBsb3JhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgbGV0IHg6IEF4aXNWYWx1ZSwgc2VyaWVzOiBBeGlzVmFsdWUsIGluZGV4O1xyXG4gICAgY29uc3QgYXhlcyA9IHsgLi4udGhpcy5maWx0ZXJzIH0gYXMgQXhlc01hcDtcclxuICAgIGlmICghY29sdW1uLnN1bSlcclxuICAgICAgeCA9IGNvbHVtbi5rZXk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSBjb2x1bW4uc3VtO1xyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSByZXR1cm47XHJcbiAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5zdW0pXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBrZXkgPSBjb2x1bW4ua2V5O1xyXG4gICAgICAgIHgucHVzaChrZXkpO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGF4ZXNbdGhpcy54QXhpcy5uYW1lXSA9IHg7XHJcbiAgICBpZiAocm93LmluZGV4KVxyXG4gICAgICBpbmRleCA9IHJvdy5pbmRleC5uYW1lO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChyb3cuc3VtKSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSByb3cuc3VtO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgICBzZXJpZXMgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcclxuICAgICAgICAgIGlmIChyb3cuc3VtKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgICBzZXJpZXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgc2VyaWVzID0gcm93LmtleTtcclxuICAgICAgYXhlc1t0aGlzLnNlcmllcy5uYW1lXSA9IHNlcmllcztcclxuICAgICAgaW5kZXggPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkV4cGxvcmUuZW1pdCh7IGF4ZXMsIGluZGV4IH0pO1xyXG4gIH1cclxuICBleHBvcnQoKSB7XHJcbiAgICBjb25zdCBudW1iZXJGb3JtYXQgPSB0aGlzLl9zZXJ2aWNlLm51bWJlckZvcm1hdCxcclxuICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5zdW0pLFxyXG4gICAgICBjZWxscyA9IFtdIGFzIENlbGxbXSxcclxuICAgICAgcm93cyA9IFt7IGluZGV4OiAxLCBjZWxscyB9XTtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoYywgaikgPT4gY2VsbHMucHVzaCh7XHJcbiAgICAgIGluZGV4OiBqICsgMixcclxuICAgICAgdmFsdWU6IGMudmFsdWUsIHN0eWxlOiB7IGJvbGQ6IHRydWUgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMucm93cy5maWx0ZXIociA9PiAhci5zdW0pLmZvckVhY2goKHIsIGkpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGFbci5rZXldLFxyXG4gICAgICAgIGNlbGxzID0gW3sgaW5kZXg6IDEsIHZhbHVlOiByLnZhbHVlLCBzdHlsZTogeyBib2xkOiB0cnVlIH0gfV0gYXMgQ2VsbFtdO1xyXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGMsIGopID0+IGNlbGxzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGluZGV4OiBqICsgMixcclxuICAgICAgICB2YWx1ZTogZGF0YSAmJiBkYXRhW2Mua2V5XSAhPT0gdW5kZWZpbmVkID8gZGF0YVtjLmtleV0gOiAwLFxyXG4gICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICBudW1iZXJGb3JtYXQsXHJcbiAgICAgICAgICBoQWxpZ246ICdyaWdodCcsXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGFzIENlbGwpKTtcclxuICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaSArIDIsXHJcbiAgICAgICAgY2VsbHNcclxuICAgICAgfSBhcyBSb3cpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBib29rID0gbmV3IFdvcmtib29rKFxyXG4gICAgICB7XHJcbiAgICAgICAgd29ya3NoZWV0czogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBlbmFibGVSdGw6IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnU2hlZXROJywgMSksXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMubWFwKChfLCBpKSA9PiAoeyBpbmRleDogaSArIDEsIHdpZHRoOiAxNTAgfSBhcyBDb2x1bW4pKSxcclxuICAgICAgICAgICAgcm93cyxcclxuICAgICAgICAgIH0gYXMgV29ya3NoZWV0LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2UubmFtZU9mKHRoaXMuZmlsdGVycywgdGhpcy5jdWJlLm5hbWUpLnN1YnNjcmliZShuID0+XHJcbiAgICAgIGJvb2suc2F2ZShgJHtuIHx8IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ01hdHJpeCcpfS54bHN4YCkpO1xyXG4gIH1cclxuICBfbW92ZSh4LCB5KSB7XHJcbiAgICBsZXQgcm93SW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMubGVuZ3RoOyBiKyspIHtcclxuICAgICAgY29uc3QgdEJvZHkgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbShiKTtcclxuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0Qm9keS5yb3dzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdEJvZHkucm93cy5pdGVtKHIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmNlbGxzLml0ZW0oYyk7XHJcbiAgICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0geSlcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXknKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm93SW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0Rm9vdCA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEZvb3QsIHJvdyA9IHRGb290LnJvd3NbMF07XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbnR5cGUgRGF0YU1hcCA9IHsgW3Nlcmllczogc3RyaW5nXTogeyBbeEF4aXM6IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFN1bVNldHRpbmdzID0ge1xyXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGF4aXM6IEF4aXNUeXBlO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZm9ybWF0PzogRm9ybWF0VHlwZTtcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgZXhwbG9yYWJsZT86IGJvb2xlYW47XHJcbiAgcGxhY2U/OiBBeGlzUGxhY2U7XHJcbiAgY2FsY3VsYXRlPzogQ2FsY3VsYXRlVHlwZTtcclxufVxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1hdFR5cGUgPSAnUGVyY2VudCcgfCAnQ3VycmVuY3knIHwgJ051bWJlcic7XHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgQ2FsY3VsYXRlVHlwZSA9ICdRdWFydGVyJyB8ICdZZWFyJyB8ICdNb250aCcgfCAnU3VtJyB8IENhbGN1bGF0ZUZuO1xyXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2FsY3VsYXRlRm4ge1xyXG4gICh2YWx1ZTogc3RyaW5nLCBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH0pOiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgSGVhZGVySW5mbyA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIHByZWNpc2lvbj86IHN0cmluZztcclxuICBleHBsb3JhYmxlPzogYm9vbGVhbjtcclxuICBhY2N1bXVsYXRlPzogYm9vbGVhbjtcclxuICBzdW0/OiBTdW1TZXR0aW5ncztcclxuICBpbmRleD86IEN1YmVJbmRleDtcclxufTtcclxuaW50ZXJmYWNlIENlbGwgeyB9XHJcbiIsIkBpZiAoZGF0YSkge1xuICA8dGFibGUgI3RhYmxlIGNsYXNzPVwibWF0LW1kYy10YWJsZSBjdWJlLXRhYmxlXCIgKG1vdXNlbGVhdmUpPVwiX21vdmUoLTEsIC0xKVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDwhLS0gaGVhZGVycyAtLT5cbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtaGVhZGVyLXJvd1wiPlxuICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IHggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIl9tb3ZlKHggKyAxLCAtMilcIiBjbGFzcz1cIm1hdC1tZGMtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi52YWx1ZSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgPHRoIGNsYXNzPVwibWF0LW1kYy1oZWFkZXItY2VsbFwiPnt7eEF4aXNUb3RhbExhYmVsfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDwhLS0gcm93cyAtLT5cbiAgICAgIEBmb3IgKHJvdyBvZiByb3dzOyB0cmFjayByb3c7IGxldCB5ID0gJGluZGV4KSB7XG4gICAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtcm93XCJcbiAgICAgICAgICBbY2xhc3MuY3ViZS1pbmRleF09XCJyb3cuaW5kZXhcIj5cbiAgICAgICAgICA8dGggY2xhc3M9XCJtYXQtbWRjLWhlYWRlci1jZWxsXCIgKG1vdXNlZW50ZXIpPVwiX21vdmUoLTIsIHkgKVwiPnt7IHJvdy52YWx1ZSB9fTwvdGg+XG4gICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtY2VsbCBmaWd1cmVcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJfbW92ZSh4ICsgMSwgeSApXCI+XG4gICAgICAgICAgICAgIEBpZiAoZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5leHBsb3JhYmxlXT1cImludGVyYWN0aXZlICYmIGNvbHVtbi5leHBsb3JhYmxlICE9PSBmYWxzZSAmJiByb3cuZXhwbG9yYWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGxvcmUoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldW2NvbHVtbi5rZXldIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIDx0aCBjbGFzcz1cIm1hdC1tZGMtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJfbW92ZSgtMSwgeSApXCI+XG4gICAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldWydfdG90YWwnXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgICA8dGZvb3Q+XG4gICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtbWRjLWZvb3Rlci1jZWxsXCI+e3tzZXJpZXNUb3RhbExhYmVsfX08L3RkPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgeCA9ICRpbmRleCkge1xuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtZm9vdGVyLWNlbGwgZmlndXJlXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIl9tb3ZlKHggKyAxLCAtMilcIlxuICAgICAgICAgICAgW2NsYXNzLm5lZ2F0aXZlLWZpZ3VyZV09XCJ0b3RhbHNbY29sdW1uLmtleV0uc3RhcnRzV2l0aCgnLScpXCI+XG4gICAgICAgICAgICBAaWYgKHRvdGFsc1tjb2x1bW4ua2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHt7IHRvdGFsc1tjb2x1bW4ua2V5XSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgPHRoIGNsYXNzPVwibWF0LW1kYy1mb290ZXItY2VsbCBmaWd1cmVcIj57eyB0b3RhbHNbJ19ncmFuZCddIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgPC90YWJsZT5cbn1cbiJdfQ==
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBZSxXQUFXLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQU1uRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBRTFCLDJCQUEyQjtBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBbUI5QixJQUFhLEdBQUcsQ0FBQyxHQUFnQztRQUMvQyxJQUFJLEdBQUc7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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QUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7b0JBRTdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0E3Y1UsbUJBQW1CO2tHQUFuQixtQkFBbUIsaWxCQzVCaEMsaW9FQTJEQSxrUURqQ2MsQ0FBQyxlQUFlLENBQUM7OzJGQUVsQixtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0Usb0JBQW9CLGNBR2xCLENBQUMsZUFBZSxDQUFDO3dNQU9ULFlBQVk7c0JBQS9CLFNBQVM7dUJBQUMsT0FBTztnQkFDVCxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDUyxLQUFLO3NCQUFuQixLQUFLO3VCQUFDLE1BQU07Z0JBQ0csTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQUNHLE9BQU87c0JBQXZCLEtBQUs7dUJBQUMsUUFBUTtnQkFFZixRQUFRO3NCQURQLEtBQUs7dUJBQUMsU0FBUztnQkFHaEIsT0FBTztzQkFETixLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRU8sR0FBRztzQkFBZixLQUFLO2dCQTBCRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUtLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBSXNCLFNBQVM7c0JBQXBDLE1BQU07dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXRQZXJjZW50LCBmb3JtYXROdW1iZXIsIGdldEN1cnJlbmN5U3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFdvcmtib29rLCBXb3Jrc2hlZXQsIFJvdywgQ29sdW1uIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlLCBlcnJSZXNvdXJjZSwgU2VyaWVzIH0gZnJvbSAnLi4vY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRhc291cmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQXhpc1ZhbHVlLCBDdWJlLCBDdWJlQXhpcywgQ3ViZUluZGV4IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBtYXRyaXhBbmltYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBBeGlzQ2xpY2tFdmVudCB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucyc7XHJcbmltcG9ydCB7IEF4aXNQbGFjZSwgQXhpc1R5cGUgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMnO1xyXG5cclxuY29uc3QgTE9BRElOR19HUkFDRSA9IDIwMDtcclxuXHJcbi8qKiBjdWJlIG1hdHJpeCBjb21wb25lbnQqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLW1hdHJpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFttYXRyaXhBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlTWF0cml4Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICByZWFkb25seSBQUkVDSVNJT04gPSB0aGlzLl9zZXJ2aWNlLmRpZ2l0c0luZm87XHJcbiAgcmVhZG9ubHkgTEFOR1VBR0UgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlO1xyXG4gIENVUlJFTkNZOiBzdHJpbmc7XHJcbiAgU1lNQk9MOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFRhYmxlRWxlbWVudD47XHJcbiAgQElucHV0KCkgc2VyaWVzVG90YWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHhBeGlzVG90YWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgnY3ViZScpIF9jdWJlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgneEF4aXMnKSBfeEF4aXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdzZXJpZXMnKSBfc2VyaWVzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnaW5kaWNlcycpXHJcbiAgX2luZGljZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGluZGV4QXQ6IEF4aXNUeXBlID0gJ1Nlcmllcyc7XHJcbiAgQElucHV0KClcclxuICBwbGFjZUF0OiBBeGlzUGxhY2UgPSAnTGVhZGluZyc7XHJcbiAgQElucHV0KCkgc2NvcGU6IFNjb3BlVHlwZTtcclxuICBwcml2YXRlIF9zdW06IFN1bVNldHRpbmdzW107XHJcbiAgQElucHV0KCkgc2V0IHN1bSh2YWw6IFN1bVNldHRpbmdzIHwgU3VtU2V0dGluZ3NbXSkge1xyXG4gICAgaWYgKHZhbCkgdGhpcy5fc3VtID0gKGlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdKS5cclxuICAgICAgbWFwKHN1bSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgIGlmIChzdW0udmFsdWUpXHJcbiAgICAgICAgICB2YWx1ZSA9IHN1bS52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGVsc2UgaWYgKHN1bS5jYWxjdWxhdGUpXHJcbiAgICAgICAgICBzd2l0Y2ggKHN1bS5jYWxjdWxhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gJ00nICsgKCcwJyArIChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKS5zbGljZSgtMik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1llYXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1F1YXJ0ZXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gTWF0aC5jZWlsKChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKSAvIDMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1N1bSc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnfic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN1bSxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4aXNDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBsb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHJvd3M6IEhlYWRlckluZm9bXTtcclxuICBjb2x1bW5zOiBIZWFkZXJJbmZvW107XHJcbiAgaW5kaWNlczogQ3ViZUluZGV4W10gPSBbXTtcclxuICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9OyB9O1xyXG4gIHRvdGFsczogeyBbeEF4aXM6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGN1YmU6IEN1YmU7XHJcbiAgeEF4aXM6IEN1YmVBeGlzO1xyXG4gIHNlcmllczogQ3ViZUF4aXM7XHJcbiAgcHJpdmF0ZSBfcmF3ZGF0YTogRGF0YU1hcDtcclxuICBwcml2YXRlIF9wcmVwYXJlOiBQcm9taXNlPGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydfY3ViZSddKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlcy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLl9jdWJlKTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jdWJlKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydfaW5kaWNlcyddICYmIHRoaXMuX2luZGljZXMpIHtcclxuICAgICAgaWYgKCF0aGlzLmN1YmUuaW5kaWNlcykgdGhyb3cgYGN1YmUgJHt0aGlzLmN1YmUubmFtZX0gZXhwZWN0cyBvbmUgb3IgbW9yZSBpbmRpY2VzLmA7XHJcbiAgICAgIHRoaXMuaW5kaWNlcyA9IHRoaXMuY3ViZS5pbmRpY2VzLmZpbHRlcihpID0+IGlzQXJyYXkodGhpcy5faW5kaWNlcykgPyB0aGlzLl9pbmRpY2VzLmluZGV4T2YoaS5uYW1lKSA+IC0xIDogdGhpcy5faW5kaWNlcyA9PT0gaS5uYW1lKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydfeEF4aXMnXSB8fCBjaGFuZ2VzWydfc2VyaWVzJ10pIHtcclxuICAgICAgdGhpcy54QXhpcyA9IHRoaXMuY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHRoaXMuX3hBeGlzKTtcclxuICAgICAgdGhpcy5zZXJpZXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl9zZXJpZXMpO1xyXG4gICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlID0gZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgZm9ya0pvaW4oW1xyXG4gICAgICAgICAgdGhpcy5fZHMuYWxsKHRoaXMuc2VyaWVzLmRhdGFUeXBlKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAociA9PlxyXG4gICAgICAgICAgICAgIHRoaXMucm93cyA9IHJcclxuICAgICAgICAgICAgKSksXHJcbiAgICAgICAgICB0aGlzLl9kcy5hbGwodGhpcy54QXhpcy5kYXRhVHlwZSkucGlwZShcclxuICAgICAgICAgICAgdGFwKGMgPT5cclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjXHJcbiAgICAgICAgICAgICkpXSkucGlwZSh0YXAodGhpcy5fYWRkQWNjdW1IZWFkZXJzLmJpbmQodGhpcylcclxuICAgICAgICAgICAgKSkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSlcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZEFjY3VtSGVhZGVycygpIHtcclxuICAgIGlmICh0aGlzLl9pbmRpY2VzKSB7XHJcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmluZGV4QXQgPT09ICdYQXhpcycgPyB0aGlzLmNvbHVtbnMgOiB0aGlzLnJvd3M7XHJcbiAgICAgIHRoaXMuaW5kaWNlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyID0ge1xyXG4gICAgICAgICAga2V5OiB4Lm5hbWUsXHJcbiAgICAgICAgICB2YWx1ZTogeC50aXRsZSxcclxuICAgICAgICAgIGluZGV4OiB4LFxyXG4gICAgICAgICAgYWNjdW11bGF0ZTogeC5hY2N1bXVsYXRlXHJcbiAgICAgICAgfSBhcyBIZWFkZXJJbmZvO1xyXG4gICAgICAgIGlmICh0aGlzLnBsYWNlQXQgPT09ICdUcmFpbGluZycpXHJcbiAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goaGVhZGVyKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShpLCAwLCBoZWFkZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3N1bSAmJiB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBjb25zdCB7IHZhbHVlLCBheGlzIH0gPSBzO1xyXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XHJcbiAgICAgICAga2V5OiAnX3N1bScgKyBpLFxyXG4gICAgICAgIHZhbHVlOiBzLnRpdGxlLFxyXG4gICAgICAgIGFjY3VtdWxhdGU6ICFpc0Z1bmN0aW9uKHMuY2FsY3VsYXRlKSAmJiBzLmNhbGN1bGF0ZSAhPT0gJ1N1bScsXHJcbiAgICAgICAgZXhwbG9yYWJsZTogIWlzRnVuY3Rpb24ocy5jYWxjdWxhdGUpICYmIHMuZXhwbG9yYWJsZSAhPT0gZmFsc2UsXHJcbiAgICAgICAgcHJlY2lzaW9uOiBzLnByZWNpc2lvbixcclxuICAgICAgICBzdW06IHNcclxuICAgICAgfSBhcyBIZWFkZXJJbmZvO1xyXG4gICAgICBsZXQgaiA9IDA7XHJcbiAgICAgIGlmIChheGlzID09PSAnWEF4aXMnKSB7XHJcbiAgICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zW2pdLmtleSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShqICsgMSwgMCwgaGVhZGVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBqKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChqID09PSB0aGlzLmNvbHVtbnMubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goaGVhZGVyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aGlsZSAoaiA8IHRoaXMucm93cy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJvd3Nbal0ua2V5ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3Muc3BsaWNlKGogKyAxLCAwLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGorKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGogPT09IHRoaXMucm93cy5sZW5ndGgpXHJcbiAgICAgICAgICB0aGlzLnJvd3MucHVzaChoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCBwcm9ncmVzc1Rhc2sgPSBzZXRUaW1lb3V0KCgpID0+XHJcbiAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5uZXh0KHRoaXMubG9hZGluZyA9IHRydWUpXHJcbiAgICAgICwgTE9BRElOR19HUkFDRSk7XHJcbiAgICB0aGlzLl9wcmVwYXJlLnRoZW4oKCkgPT5cclxuICAgICAgdGhpcy5fc2VydmljZS5zZXJpZXModGhpcy5jdWJlLm5hbWUsIHRoaXMuX3hBeGlzLCB7XHJcbiAgICAgICAgc2VyaWVzOiB0aGlzLl9zZXJpZXMsXHJcbiAgICAgICAgaW5kaWNlczogdGhpcy5faW5kaWNlcyxcclxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgaW52ZXJzZUluZGljZXM6IHRoaXMuaW5kZXhBdCA9PT0gJ1hBeGlzJyxcclxuICAgICAgICBzY29wZTogdGhpcy5zY29wZVxyXG4gICAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwKHIpO1xyXG4gICAgICAgICAgdGhpcy5fY2xvbmUobWFwKTtcclxuICAgICAgICAgIHRoaXMuX3N1bSAmJiB0aGlzLl9jYWxjdWxhdGVzdW0obWFwKTtcclxuICAgICAgICAgIHRoaXMuX3RvdGFscyhtYXApO1xyXG4gICAgICAgICAgdGhpcy5fc3RyaW5naWZ5KG1hcCk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSBtYXAgYXMgYW55O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoZXJyUmVzb3VyY2UoZSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLmVycm9yKGUpO1xyXG4gICAgICAgIH0sIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQocHJvZ3Jlc3NUYXNrKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5uZXh0KHRoaXMubG9hZGluZyA9IGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXAoc2VyaWVzOiBTZXJpZXNbXSkge1xyXG4gICAgY29uc3QgbWFwID0ge30gYXMgRGF0YU1hcDtcclxuICAgIHNlcmllcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5pbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluZGV4QXQgPT09ICdYQXhpcycpXHJcbiAgICAgICAgICBzLnBvaW50cy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gbWFwW3AueF07XHJcbiAgICAgICAgICAgIGlmICghcm93KVxyXG4gICAgICAgICAgICAgIHJvdyA9IG1hcFtwLnhdID0ge307XHJcbiAgICAgICAgICAgIHJvd1tzLmluZGV4XSA9IHAueTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gbWFwW3MuaW5kZXhdID0ge307XHJcbiAgICAgICAgICBzLnBvaW50cy5mb3JFYWNoKHAgPT4gcm93W3AueF0gPSBwLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gbWFwW3MubmFtZV0gPSB7fTtcclxuICAgICAgICBzLnBvaW50cy5mb3JFYWNoKHAgPT4gcm93W3AueF0gPSBwLnkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXA7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Nsb25lKGRhdGE6IERhdGFNYXApIHtcclxuICAgIHRoaXMuX3Jhd2RhdGEgPSB7fTtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBjb25zdCBrZXkgPSByLmtleTtcclxuICAgICAgaWYgKCFkYXRhW2tleV0pIGRhdGFba2V5XSA9IHt9O1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Jhd2RhdGFba2V5XSA9IHt9LCBkYXRhW2tleV0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvdGFscyhkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICBsZXQgZ3JhbmQgPSAwO1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGFyb3cgPSBkYXRhW3Iua2V5XTtcclxuICAgICAgaWYgKGRhdGFyb3cpIHtcclxuICAgICAgICBsZXQgY29sdW1uVG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgaWYgKGMuYWNjdW11bGF0ZSA9PT0gZmFsc2UgfHwgYy5zdW0gIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgICAgY29uc3QgdmFsID0gZGF0YXJvd1tjLmtleV07XHJcbiAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbHVtblRvdGFsICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5pbmRleEF0ICE9PSAnWEF4aXMnIHx8XHJcbiAgICAgICAgICAgICAgYy5pbmRleCAhPT0gdW5kZWZpbmVkID8gdmFsIDogLXZhbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkYXRhcm93WydfdG90YWwnXSA9IHRoaXMuX2Zvcm1hdChjb2x1bW5Ub3RhbCwgcikgYXMgYW55O1xyXG4gICAgICAgIGlmICghci5zdW0pXHJcbiAgICAgICAgICBncmFuZCArPSB0aGlzLmluZGljZXMubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuaW5kZXhBdCA9PT0gJ1hBeGlzJyB8fFxyXG4gICAgICAgICAgICByLmluZGV4ICE9PSB1bmRlZmluZWQgPyBjb2x1bW5Ub3RhbCA6IC1jb2x1bW5Ub3RhbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZGF0YVtyLmtleV0gPSB7XHJcbiAgICAgICAgICAnX3RvdGFsJzogJzAnIGFzIGFueVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRvdGFscyA9IGRhdGFbJ190b3RhbCddID0gdGhpcy50b3RhbHMgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBsZXQgcm93VG90YWwgPSAwO1xyXG4gICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgIGlmIChyb3cuYWNjdW11bGF0ZSA9PT0gZmFsc2UgfHwgcm93LnN1bSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgdmFsID0gZGF0YVtyb3cua2V5XVtjLmtleV07XHJcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgcm93VG90YWwgKz0gdGhpcy5pbmRpY2VzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmluZGV4QXQgPT09ICdYQXhpcycgfHxcclxuICAgICAgICAgICAgcm93LmluZGV4ICE9PSB1bmRlZmluZWQgPyB2YWwgOiAtdmFsO1xyXG4gICAgICB9KTtcclxuICAgICAgdG90YWxzW2Mua2V5XSA9IHRoaXMuX2Zvcm1hdChyb3dUb3RhbCwgYyk7XHJcbiAgICB9KTtcclxuICAgIHRvdGFsc1snX2dyYW5kJ10gPSB0aGlzLl9mb3JtYXQoZ3JhbmQpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jYWxjdWxhdGVzdW0oZGF0YTogRGF0YU1hcCkge1xyXG4gICAgdGhpcy5fc3VtLmZvckVhY2goKHMsIGkpID0+IHtcclxuICAgICAgY29uc3QgeyBheGlzLCB2YWx1ZToga2V5LCBjYWxjdWxhdGUgfSA9IHM7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSAnX3N1bScgKyBpO1xyXG4gICAgICBpZiAoYXhpcyA9PT0gJ1hBeGlzJykge1xyXG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuYWNjdW11bGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IGRhdGFyb3cgPSBkYXRhW3Iua2V5XTtcclxuICAgICAgICAgIGlmICghZGF0YXJvdykgcmV0dXJuO1xyXG4gICAgICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pbmRleCB8fCBjb2x1bW4uc3VtKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChjYWxjdWxhdGUgYXMgQ2FsY3VsYXRlRm4pKHIua2V5LCB0aGlzLl9yYXdkYXRhKTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkYXRhcm93W2NvbHVtbi5rZXldO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5rZXkgPT09IGtleSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhcm93W25hbWVdID0gc3VtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGRhdGFjb2x1bW4gPSBkYXRhW25hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgICAgICAgIGlmIChyb3cuaW5kZXggfHwgcm93LnN1bSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShyb3cua2V5LCB0aGlzLl9yYXdkYXRhKTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBkYXRhcm93ID0gZGF0YVtyb3cua2V5XTtcclxuICAgICAgICAgICAgICBpZiAoIWRhdGFyb3cpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uc3VtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkYXRhcm93W2NvbHVtbi5rZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPSB1bmRlZmluZWQpIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gZGF0YXJvd1tjb2x1bW4ua2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IGtleSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhY29sdW1uW25hbWVdID0gc3VtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc3RyaW5naWZ5KGRhdGE6IERhdGFNYXApIHtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBjb25zdCBzZXJpZXMgPSBjLmtleTtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3QgeEF4aXMgPSByLmtleSwgdmFsdWUgPSBkYXRhW3hBeGlzXVtzZXJpZXNdO1xyXG4gICAgICAgIGRhdGFbeEF4aXNdW3Nlcmllc10gPVxyXG4gICAgICAgICAgKGMuc3VtID8gdGhpcy5fZm9ybWF0KHZhbHVlLCBjLnN1bSkgOlxyXG4gICAgICAgICAgci5zdW0gPyB0aGlzLl9mb3JtYXQodmFsdWUsIHIuc3VtKSA6XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdCh2YWx1ZSkpIGFzIGFueTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZm9ybWF0KHZhbCwgb3B0aW9ucz86IHsgZm9ybWF0PzogRm9ybWF0VHlwZSwgcHJlY2lzaW9uPzogc3RyaW5nIH0pOiBzdHJpbmcgIHtcclxuICAgIGlmICh2YWwgPT09IDAgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnMCc7XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdQZXJjZW50JylcclxuICAgICAgICByZXR1cm4gZm9ybWF0UGVyY2VudCh2YWwsIHRoaXMuTEFOR1VBR0UsIG9wdGlvbnMucHJlY2lzaW9uIHx8IHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgICAgZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdDdXJyZW5jeScpXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5TWU1CT0wsIHRoaXMuQ1VSUkVOQ1ksIG9wdGlvbnMucHJlY2lzaW9uIHx8IHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLkNVUlJFTkNZKVxyXG4gICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsLCB0aGlzLkxBTkdVQUdFLCB0aGlzLlNZTUJPTCwgdGhpcy5DVVJSRU5DWSwgdGhpcy5QUkVDSVNJT04pO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5QUkVDSVNJT04pO1xyXG4gIH1cclxuICBleHBsb3JlKGNvbHVtbjogSGVhZGVySW5mbywgcm93OiBIZWFkZXJJbmZvKSB7XHJcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUgfHwgY29sdW1uLmV4cGxvcmFibGUgPT09IGZhbHNlIHx8IHJvdy5leHBsb3JhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgbGV0IHg6IEF4aXNWYWx1ZSwgc2VyaWVzOiBBeGlzVmFsdWUsIGluZGV4O1xyXG4gICAgY29uc3QgYXhlcyA9IHsgLi4udGhpcy5maWx0ZXJzIH0gYXMgQXhlc01hcDtcclxuICAgIGlmICghY29sdW1uLnN1bSlcclxuICAgICAgeCA9IGNvbHVtbi5rZXk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSBjb2x1bW4uc3VtO1xyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSByZXR1cm47XHJcbiAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5zdW0pXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBrZXkgPSBjb2x1bW4ua2V5O1xyXG4gICAgICAgIHgucHVzaChrZXkpO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGF4ZXNbdGhpcy54QXhpcy5uYW1lXSA9IHg7XHJcbiAgICBpZiAocm93LmluZGV4KVxyXG4gICAgICBpbmRleCA9IHJvdy5pbmRleC5uYW1lO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChyb3cuc3VtKSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSByb3cuc3VtO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgICBzZXJpZXMgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcclxuICAgICAgICAgIGlmIChyb3cuc3VtKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgICBzZXJpZXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgc2VyaWVzID0gcm93LmtleTtcclxuICAgICAgYXhlc1t0aGlzLnNlcmllcy5uYW1lXSA9IHNlcmllcztcclxuICAgICAgaW5kZXggPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkV4cGxvcmUuZW1pdCh7IGF4ZXMsIGluZGV4IH0pO1xyXG4gIH1cclxuICBleHBvcnQoKSB7XHJcbiAgICBjb25zdCBudW1iZXJGb3JtYXQgPSB0aGlzLl9zZXJ2aWNlLm51bWJlckZvcm1hdCxcclxuICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5zdW0pLFxyXG4gICAgICBjZWxscyA9IFtdIGFzIENlbGxbXSxcclxuICAgICAgcm93cyA9IFt7IGluZGV4OiAxLCBjZWxscyB9XTtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoYywgaikgPT4gY2VsbHMucHVzaCh7XHJcbiAgICAgIGluZGV4OiBqICsgMixcclxuICAgICAgdmFsdWU6IGMudmFsdWUsIHN0eWxlOiB7IGJvbGQ6IHRydWUgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMucm93cy5maWx0ZXIociA9PiAhci5zdW0pLmZvckVhY2goKHIsIGkpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3Jhd2RhdGFbci5rZXldLFxyXG4gICAgICAgIGNlbGxzID0gW3sgaW5kZXg6IDEsIHZhbHVlOiByLnZhbHVlLCBzdHlsZTogeyBib2xkOiB0cnVlIH0gfV0gYXMgQ2VsbFtdO1xyXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGMsIGopID0+IGNlbGxzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGluZGV4OiBqICsgMixcclxuICAgICAgICB2YWx1ZTogZGF0YSAmJiBkYXRhW2Mua2V5XSAhPT0gdW5kZWZpbmVkID8gZGF0YVtjLmtleV0gOiAwLFxyXG4gICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICBudW1iZXJGb3JtYXQsXHJcbiAgICAgICAgICBoQWxpZ246ICdyaWdodCcsXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGFzIENlbGwpKTtcclxuICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaSArIDIsXHJcbiAgICAgICAgY2VsbHNcclxuICAgICAgfSBhcyBSb3cpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBib29rID0gbmV3IFdvcmtib29rKFxyXG4gICAgICB7XHJcbiAgICAgICAgd29ya3NoZWV0czogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBlbmFibGVSdGw6IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnU2hlZXROJywgMSksXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMubWFwKChfLCBpKSA9PiAoeyBpbmRleDogaSArIDEsIHdpZHRoOiAxNTAgfSBhcyBDb2x1bW4pKSxcclxuICAgICAgICAgICAgcm93cyxcclxuICAgICAgICAgIH0gYXMgV29ya3NoZWV0LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2UubmFtZU9mKHRoaXMuZmlsdGVycywgdGhpcy5jdWJlLm5hbWUpLnN1YnNjcmliZShuID0+XHJcbiAgICAgIGJvb2suc2F2ZShgJHtuIHx8IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ01hdHJpeCcpfS54bHN4YCkpO1xyXG4gIH1cclxuICBfbW92ZSh4LCB5KSB7XHJcbiAgICBsZXQgcm93SW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMubGVuZ3RoOyBiKyspIHtcclxuICAgICAgY29uc3QgdEJvZHkgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbShiKTtcclxuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0Qm9keS5yb3dzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdEJvZHkucm93cy5pdGVtKHIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmNlbGxzLml0ZW0oYyk7XHJcbiAgICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0geSlcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXknKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm93SW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0Rm9vdCA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEZvb3QsIHJvdyA9IHRGb290LnJvd3NbMF07XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbnR5cGUgRGF0YU1hcCA9IHsgW3Nlcmllczogc3RyaW5nXTogeyBbeEF4aXM6IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFN1bVNldHRpbmdzID0ge1xyXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGF4aXM6IEF4aXNUeXBlO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZm9ybWF0PzogRm9ybWF0VHlwZTtcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgZXhwbG9yYWJsZT86IGJvb2xlYW47XHJcbiAgcGxhY2U/OiBBeGlzUGxhY2U7XHJcbiAgY2FsY3VsYXRlPzogQ2FsY3VsYXRlVHlwZTtcclxufVxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1hdFR5cGUgPSAnUGVyY2VudCcgfCAnQ3VycmVuY3knIHwgJ051bWJlcic7XHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgQ2FsY3VsYXRlVHlwZSA9ICdRdWFydGVyJyB8ICdZZWFyJyB8ICdNb250aCcgfCAnU3VtJyB8IENhbGN1bGF0ZUZuO1xyXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2FsY3VsYXRlRm4ge1xyXG4gICh2YWx1ZTogc3RyaW5nLCBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH0pOiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgSGVhZGVySW5mbyA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIHByZWNpc2lvbj86IHN0cmluZztcclxuICBleHBsb3JhYmxlPzogYm9vbGVhbjtcclxuICBhY2N1bXVsYXRlPzogYm9vbGVhbjtcclxuICBzdW0/OiBTdW1TZXR0aW5ncztcclxuICBpbmRleD86IEN1YmVJbmRleDtcclxufTtcclxuaW50ZXJmYWNlIENlbGwgeyB9XHJcbiIsIkBpZiAoZGF0YSkge1xuICA8dGFibGUgI3RhYmxlIGNsYXNzPVwibWF0LW1kYy10YWJsZSBjdWJlLXRhYmxlXCIgKG1vdXNlbGVhdmUpPVwiX21vdmUoLTEsIC0xKVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDwhLS0gaGVhZGVycyAtLT5cbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtaGVhZGVyLXJvd1wiPlxuICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IHggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIl9tb3ZlKHggKyAxLCAtMilcIiBjbGFzcz1cIm1hdC1tZGMtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi52YWx1ZSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgPHRoIGNsYXNzPVwibWF0LW1kYy1oZWFkZXItY2VsbFwiPnt7eEF4aXNUb3RhbExhYmVsfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDwhLS0gcm93cyAtLT5cbiAgICAgIEBmb3IgKHJvdyBvZiByb3dzOyB0cmFjayByb3c7IGxldCB5ID0gJGluZGV4KSB7XG4gICAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtcm93XCJcbiAgICAgICAgICBbY2xhc3MuY3ViZS1pbmRleF09XCJyb3cuaW5kZXhcIj5cbiAgICAgICAgICA8dGggY2xhc3M9XCJtYXQtbWRjLWhlYWRlci1jZWxsXCIgKG1vdXNlZW50ZXIpPVwiX21vdmUoLTIsIHkgKVwiPnt7IHJvdy52YWx1ZSB9fTwvdGg+XG4gICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtY2VsbCBmaWd1cmVcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJfbW92ZSh4ICsgMSwgeSApXCI+XG4gICAgICAgICAgICAgIEBpZiAoZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5leHBsb3JhYmxlXT1cImludGVyYWN0aXZlICYmIGNvbHVtbi5leHBsb3JhYmxlICE9PSBmYWxzZSAmJiByb3cuZXhwbG9yYWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGxvcmUoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldW2NvbHVtbi5rZXldIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIDx0aCBjbGFzcz1cIm1hdC1tZGMtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJfbW92ZSgtMSwgeSApXCI+XG4gICAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldWydfdG90YWwnXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgICA8dGZvb3Q+XG4gICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtbWRjLWZvb3Rlci1jZWxsXCI+e3tzZXJpZXNUb3RhbExhYmVsfX08L3RkPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgeCA9ICRpbmRleCkge1xuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtZm9vdGVyLWNlbGwgZmlndXJlXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIl9tb3ZlKHggKyAxLCAtMilcIlxuICAgICAgICAgICAgW2NsYXNzLm5lZ2F0aXZlLWZpZ3VyZV09XCJ0b3RhbHNbY29sdW1uLmtleV0uc3RhcnRzV2l0aCgnLScpXCI+XG4gICAgICAgICAgICBAaWYgKHRvdGFsc1tjb2x1bW4ua2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHt7IHRvdGFsc1tjb2x1bW4ua2V5XSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgPHRoIGNsYXNzPVwibWF0LW1kYy1mb290ZXItY2VsbCBmaWd1cmVcIj57eyB0b3RhbHNbJ19ncmFuZCddIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgPC90YWJsZT5cbn1cbiJdfQ==
@@ -131,10 +131,10 @@ export class CubeParallelComponent {
131
131
  this._destroy.complete();
132
132
  this._loading.complete();
133
133
  }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { filters: "filters", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope", palettes: "palettes" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "@if (items.length) {\n <div class=\"row\">\n @for (s of items; track s) {\n <div class=\"element\">\n <ejs-sparkline [width]='width' height='100px'\n [type]='s.chartType'\n [id]=\"s.data.name\"\n [dataSource]=\"s.data.points\"\n xName=\"name\"\n yName=\"y\" [palette]=\"s.palette\"\n [format]=\"format\"\n valueType=\"Category\"\n [enableRtl]=\"enableRtl\"\n [border]=\"s.border\"\n [fill]=\"s.fill\"\n [theme]=\"theme\"\n [axisSettings]=\"axisSettings\"\n [markerSettings]=\"s.markerSettings\"\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\n [tooltipSettings]=\"s.tooltipSettings\">\n </ejs-sparkline>\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\n </div>\n }\n </div>\n}\n", styles: [":host{padding:8px}.element{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }] }); }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.0", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { filters: "filters", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope", palettes: "palettes" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "@if (items.length) {\n <div class=\"row\">\n @for (s of items; track s) {\n <div class=\"element\">\n <ejs-sparkline [width]='width' height='100px'\n [type]='s.chartType'\n [id]=\"s.data.name\"\n [dataSource]=\"s.data.points\"\n xName=\"name\"\n yName=\"y\" [palette]=\"s.palette\"\n [format]=\"format\"\n valueType=\"Category\"\n [enableRtl]=\"enableRtl\"\n [border]=\"s.border\"\n [fill]=\"s.fill\"\n [theme]=\"theme\"\n [axisSettings]=\"axisSettings\"\n [markerSettings]=\"s.markerSettings\"\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\n [tooltipSettings]=\"s.tooltipSettings\">\n </ejs-sparkline>\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\n </div>\n }\n </div>\n}\n", styles: [":host{padding:8px}.element{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }] }); }
136
136
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubeParallelComponent, decorators: [{
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubeParallelComponent, decorators: [{
138
138
  type: Component,
139
139
  args: [{ selector: 'bizdoc-cube-parallel', template: "@if (items.length) {\n <div class=\"row\">\n @for (s of items; track s) {\n <div class=\"element\">\n <ejs-sparkline [width]='width' height='100px'\n [type]='s.chartType'\n [id]=\"s.data.name\"\n [dataSource]=\"s.data.points\"\n xName=\"name\"\n yName=\"y\" [palette]=\"s.palette\"\n [format]=\"format\"\n valueType=\"Category\"\n [enableRtl]=\"enableRtl\"\n [border]=\"s.border\"\n [fill]=\"s.fill\"\n [theme]=\"theme\"\n [axisSettings]=\"axisSettings\"\n [markerSettings]=\"s.markerSettings\"\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\n [tooltipSettings]=\"s.tooltipSettings\">\n </ejs-sparkline>\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\n </div>\n }\n </div>\n}\n", styles: [":host{padding:8px}.element{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;flex:1 1 auto}\n"] }]
140
140
  }], ctorParameters: () => [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }], propDecorators: { filters: [{
@@ -480,10 +480,10 @@ export class CubePivotComponent {
480
480
  this._destroy.next();
481
481
  this._destroy.complete();
482
482
  }
483
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubePivotComponent, deps: [{ token: i1.CubeService }, { token: i2.SessionService }, { token: i3.TranslateService }, { token: i4.PromptService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
484
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: CubePivotComponent, selector: "bizdoc-cube-pivot", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", chartType: "chartType", indicesChartType: "indicesChartType", palettes: "palettes", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "style.direction": "dir", "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host ::ng-deep .e-cellvalue{cursor:pointer}\n"] }); }
483
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubePivotComponent, deps: [{ token: i1.CubeService }, { token: i2.SessionService }, { token: i3.TranslateService }, { token: i4.PromptService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
484
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: CubePivotComponent, selector: "bizdoc-cube-pivot", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", chartType: "chartType", indicesChartType: "indicesChartType", palettes: "palettes", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "style.direction": "dir", "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host ::ng-deep .e-cellvalue{cursor:pointer}\n"] }); }
485
485
  }
486
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CubePivotComponent, decorators: [{
486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: CubePivotComponent, decorators: [{
487
487
  type: Component,
488
488
  args: [{ selector: 'bizdoc-cube-pivot', template: '', host: {
489
489
  class: 'cube-view',