@bizdoc/core 3.2.9 → 3.3.2

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 (455) hide show
  1. package/assets/themes/brown.min.css +1 -1
  2. package/assets/themes/dark.min.css +3 -3
  3. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  4. package/assets/themes/deep-purple-teal.min.css +1 -1
  5. package/assets/themes/default.min.css +8 -8
  6. package/assets/themes/green.min.css +1 -1
  7. package/assets/themes/indigo-amber.min.css +1 -1
  8. package/assets/themes/indigo.min.css +1 -1
  9. package/fesm2022/bizdoc-core.mjs +2152 -1924
  10. package/fesm2022/bizdoc-core.mjs.map +1 -1
  11. package/lib/admin/admin-menu.component.d.ts +1 -3
  12. package/lib/admin/architecture/designer.base.d.ts +3 -3
  13. package/lib/admin/architecture/elements/form.component.d.ts +1 -1
  14. package/lib/bizdoc.module.d.ts +6 -7
  15. package/lib/compose/trace/trace.base.d.ts +1 -1
  16. package/lib/core/base.d.ts +5 -0
  17. package/lib/core/configuration.d.ts +3 -0
  18. package/lib/core/fields/options.base.d.ts +2 -2
  19. package/lib/core/functions.d.ts +1 -1
  20. package/lib/core/inputs/combination-picker-body.d.ts +0 -2
  21. package/lib/core/inputs/combination-picker.d.ts +1 -1
  22. package/lib/core/session.service.d.ts +2 -2
  23. package/lib/core/slots/slots.component.d.ts +1 -0
  24. package/lib/core/tagging/edit-input.component.d.ts +7 -3
  25. package/lib/core/tagging/tagging.component-base.d.ts +2 -2
  26. package/lib/core/translate.service.d.ts +2 -2
  27. package/lib/core/window-title.service.d.ts +1 -0
  28. package/lib/cube/matrix/matrix.base.d.ts +1 -1
  29. package/lib/cube/view-base.d.ts +1 -1
  30. package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -1
  31. package/lib/home/home-base.component.d.ts +1 -1
  32. package/lib/home/home.desktop.component.d.ts +5 -3
  33. package/lib/notifications/types/notification-base.d.ts +1 -1
  34. package/lib/reports/cube/usage-base.d.ts +1 -1
  35. package/lib/routes.mobile.d.ts +1 -1
  36. package/lib/views/cube/cube-base.d.ts +1 -1
  37. package/package.json +31 -33
  38. package/esm2022/bizdoc-core.mjs +0 -5
  39. package/esm2022/lib/admin/admin-dismiss.service.mjs +0 -28
  40. package/esm2022/lib/admin/admin-menu.component.mjs +0 -24
  41. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +0 -93
  42. package/esm2022/lib/admin/architecture/declarations.mjs +0 -79
  43. package/esm2022/lib/admin/architecture/designer-element.component.mjs +0 -270
  44. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +0 -96
  45. package/esm2022/lib/admin/architecture/designer.base.mjs +0 -136
  46. package/esm2022/lib/admin/architecture/designer.component.mjs +0 -396
  47. package/esm2022/lib/admin/architecture/elements/action.component.mjs +0 -43
  48. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +0 -50
  49. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +0 -49
  50. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +0 -29
  51. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +0 -35
  52. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +0 -49
  53. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +0 -66
  54. package/esm2022/lib/admin/architecture/elements/control.component.mjs +0 -21
  55. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +0 -32
  56. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +0 -34
  57. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +0 -254
  58. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +0 -40
  59. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +0 -34
  60. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +0 -40
  61. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +0 -35
  62. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +0 -56
  63. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +0 -126
  64. package/esm2022/lib/admin/architecture/elements/form.component.mjs +0 -156
  65. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +0 -53
  66. package/esm2022/lib/admin/architecture/elements/job.component.mjs +0 -57
  67. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +0 -98
  68. package/esm2022/lib/admin/architecture/elements/node.component.mjs +0 -18
  69. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +0 -38
  70. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +0 -32
  71. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +0 -34
  72. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +0 -40
  73. package/esm2022/lib/admin/architecture/elements/policy.component.mjs +0 -18
  74. package/esm2022/lib/admin/architecture/elements/report.component.mjs +0 -29
  75. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +0 -33
  76. package/esm2022/lib/admin/architecture/elements/role.component.mjs +0 -43
  77. package/esm2022/lib/admin/architecture/elements/rule.component.mjs +0 -18
  78. package/esm2022/lib/admin/architecture/elements/source.component.mjs +0 -25
  79. package/esm2022/lib/admin/architecture/elements/state.component.mjs +0 -44
  80. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +0 -38
  81. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +0 -39
  82. package/esm2022/lib/admin/architecture/elements/type.component.mjs +0 -83
  83. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +0 -64
  84. package/esm2022/lib/admin/architecture/elements/utility.component.mjs +0 -18
  85. package/esm2022/lib/admin/architecture/elements/view.component.mjs +0 -18
  86. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +0 -29
  87. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +0 -173
  88. package/esm2022/lib/admin/core/ace.input.mjs +0 -144
  89. package/esm2022/lib/admin/core/color-picker.input.mjs +0 -183
  90. package/esm2022/lib/admin/core/localized-string.component.mjs +0 -129
  91. package/esm2022/lib/admin/core/search.input.mjs +0 -52
  92. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +0 -573
  93. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +0 -537
  94. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +0 -39
  95. package/esm2022/lib/admin/document-trace/timeline.mjs +0 -2
  96. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +0 -125
  97. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +0 -270
  98. package/esm2022/lib/admin/form/designer/declarations.mjs +0 -2
  99. package/esm2022/lib/admin/form/designer/design-control.component.mjs +0 -41
  100. package/esm2022/lib/admin/form/designer/properties.component.mjs +0 -71
  101. package/esm2022/lib/admin/form/designer/section.component.mjs +0 -53
  102. package/esm2022/lib/admin/form/designer/settings.component.mjs +0 -51
  103. package/esm2022/lib/admin/form/form.resolve.service.mjs +0 -18
  104. package/esm2022/lib/admin/form/workflow/node-ref.mjs +0 -8
  105. package/esm2022/lib/admin/form/workflow/node.component.mjs +0 -156
  106. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +0 -88
  107. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +0 -586
  108. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +0 -160
  109. package/esm2022/lib/admin/patterns/patterns.component.mjs +0 -180
  110. package/esm2022/lib/admin/permissions/permissions.component.mjs +0 -98
  111. package/esm2022/lib/admin/positions/positions-popup.component.mjs +0 -75
  112. package/esm2022/lib/admin/positions/positions.component.mjs +0 -463
  113. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +0 -156
  114. package/esm2022/lib/admin/profiler/profiler.component.mjs +0 -284
  115. package/esm2022/lib/admin/system.service.mjs +0 -127
  116. package/esm2022/lib/admin/utility-ref.mjs +0 -39
  117. package/esm2022/lib/admin/utility-wrapper.component.mjs +0 -53
  118. package/esm2022/lib/admin/utility.pane.component.mjs +0 -48
  119. package/esm2022/lib/app.component.mjs +0 -73
  120. package/esm2022/lib/bizdoc.module.mjs +0 -100
  121. package/esm2022/lib/browse/browse-items.component.mjs +0 -496
  122. package/esm2022/lib/browse/browse.mobile.component.mjs +0 -102
  123. package/esm2022/lib/browse/browse.pane.component.mjs +0 -169
  124. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +0 -316
  125. package/esm2022/lib/browse/filter/filter.component.mjs +0 -140
  126. package/esm2022/lib/browse/folders-menu.component.mjs +0 -49
  127. package/esm2022/lib/chat/chat-info.mjs +0 -77
  128. package/esm2022/lib/chat/chat.mobile.component.mjs +0 -24
  129. package/esm2022/lib/chat/chat.service.mjs +0 -122
  130. package/esm2022/lib/chat/contacts.component.mjs +0 -107
  131. package/esm2022/lib/chat/contacts.pane.component.mjs +0 -26
  132. package/esm2022/lib/chat/conversation.component.mjs +0 -196
  133. package/esm2022/lib/chat/conversation.pane.component.mjs +0 -46
  134. package/esm2022/lib/compose/action/action-picker.component.mjs +0 -82
  135. package/esm2022/lib/compose/action/action-ref.mjs +0 -19
  136. package/esm2022/lib/compose/action/action.base.mjs +0 -50
  137. package/esm2022/lib/compose/action/action.dialog.mjs +0 -62
  138. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +0 -68
  139. package/esm2022/lib/compose/action/assign-action.component.mjs +0 -77
  140. package/esm2022/lib/compose/action/moveto-action.component.mjs +0 -90
  141. package/esm2022/lib/compose/action/return-action.component.mjs +0 -51
  142. package/esm2022/lib/compose/attachments/attachments.component.mjs +0 -130
  143. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +0 -157
  144. package/esm2022/lib/compose/attachments/progress-button.directive.mjs +0 -25
  145. package/esm2022/lib/compose/box/box.component.mjs +0 -44
  146. package/esm2022/lib/compose/box/control.component.mjs +0 -50
  147. package/esm2022/lib/compose/box/row.component.mjs +0 -41
  148. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +0 -27
  149. package/esm2022/lib/compose/comments/comment.component.mjs +0 -188
  150. package/esm2022/lib/compose/comments/comments.component.mjs +0 -226
  151. package/esm2022/lib/compose/comments/comments.pane.component.mjs +0 -40
  152. package/esm2022/lib/compose/comments/edit-comment.component.mjs +0 -32
  153. package/esm2022/lib/compose/comments/edits.component.mjs +0 -30
  154. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +0 -64
  155. package/esm2022/lib/compose/comments/votes.component.mjs +0 -42
  156. package/esm2022/lib/compose/compose-resolve.service.mjs +0 -34
  157. package/esm2022/lib/compose/compose.mobile.component.mjs +0 -114
  158. package/esm2022/lib/compose/compose.pane.component.mjs +0 -202
  159. package/esm2022/lib/compose/copy/copy.dialog.mjs +0 -45
  160. package/esm2022/lib/compose/dismiss.service.mjs +0 -25
  161. package/esm2022/lib/compose/document-resolve.service.mjs +0 -33
  162. package/esm2022/lib/compose/document-resolver.service.mjs +0 -17
  163. package/esm2022/lib/compose/document.component.mjs +0 -48
  164. package/esm2022/lib/compose/document.mobile.component.mjs +0 -23
  165. package/esm2022/lib/compose/document.pane.component.mjs +0 -27
  166. package/esm2022/lib/compose/events/events.component.mjs +0 -29
  167. package/esm2022/lib/compose/form-ref.mjs +0 -43
  168. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +0 -57
  169. package/esm2022/lib/compose/form.component.mjs +0 -512
  170. package/esm2022/lib/compose/new-menu.component.mjs +0 -94
  171. package/esm2022/lib/compose/overlay.component.exp.mjs +0 -71
  172. package/esm2022/lib/compose/privilage.directive.mjs +0 -64
  173. package/esm2022/lib/compose/recipient-resolver.service.mjs +0 -18
  174. package/esm2022/lib/compose/state.component.mjs +0 -37
  175. package/esm2022/lib/compose/tag/tags.component.mjs +0 -89
  176. package/esm2022/lib/compose/trace/flow.component.mjs +0 -687
  177. package/esm2022/lib/compose/trace/people.component.mjs +0 -39
  178. package/esm2022/lib/compose/trace/trace.base.mjs +0 -79
  179. package/esm2022/lib/compose/trace/trace.component.mjs +0 -353
  180. package/esm2022/lib/compose/trace/trace.pane.component.mjs +0 -48
  181. package/esm2022/lib/compose/version-compare/version-compare.component.mjs +0 -58
  182. package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +0 -345
  183. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +0 -53
  184. package/esm2022/lib/core/account.service.mjs +0 -38
  185. package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +0 -17
  186. package/esm2022/lib/core/animations.mjs +0 -168
  187. package/esm2022/lib/core/authentication.mjs +0 -4
  188. package/esm2022/lib/core/avatar/avatar.component.mjs +0 -111
  189. package/esm2022/lib/core/base.mjs +0 -2
  190. package/esm2022/lib/core/checkbox.mjs +0 -38
  191. package/esm2022/lib/core/colors.mjs +0 -322
  192. package/esm2022/lib/core/component-factory-resolver.mjs +0 -48
  193. package/esm2022/lib/core/configuration.mjs +0 -17
  194. package/esm2022/lib/core/datasource.service.mjs +0 -75
  195. package/esm2022/lib/core/decorators.mjs +0 -46
  196. package/esm2022/lib/core/document-factory.service.mjs +0 -156
  197. package/esm2022/lib/core/fields/address.designer.mjs +0 -39
  198. package/esm2022/lib/core/fields/address.field.mjs +0 -65
  199. package/esm2022/lib/core/fields/autocomplete.field.mjs +0 -136
  200. package/esm2022/lib/core/fields/axes-picker.designer.mjs +0 -59
  201. package/esm2022/lib/core/fields/axes-picker.field.mjs +0 -46
  202. package/esm2022/lib/core/fields/checkbox.designer.mjs +0 -38
  203. package/esm2022/lib/core/fields/checkbox.field.mjs +0 -35
  204. package/esm2022/lib/core/fields/checklist.designer.mjs +0 -98
  205. package/esm2022/lib/core/fields/checklist.field.mjs +0 -36
  206. package/esm2022/lib/core/fields/date-range.designer.mjs +0 -43
  207. package/esm2022/lib/core/fields/date-range.field.mjs +0 -46
  208. package/esm2022/lib/core/fields/date.designer.mjs +0 -40
  209. package/esm2022/lib/core/fields/date.field.mjs +0 -40
  210. package/esm2022/lib/core/fields/expression.field.mjs +0 -87
  211. package/esm2022/lib/core/fields/file.designer.mjs +0 -39
  212. package/esm2022/lib/core/fields/file.field.mjs +0 -35
  213. package/esm2022/lib/core/fields/html.designer.mjs +0 -61
  214. package/esm2022/lib/core/fields/html.field.mjs +0 -44
  215. package/esm2022/lib/core/fields/input.designer.mjs +0 -38
  216. package/esm2022/lib/core/fields/input.field.mjs +0 -54
  217. package/esm2022/lib/core/fields/localized-string.field.mjs +0 -49
  218. package/esm2022/lib/core/fields/numeric.designer.mjs +0 -72
  219. package/esm2022/lib/core/fields/numeric.field.mjs +0 -37
  220. package/esm2022/lib/core/fields/options.base.mjs +0 -41
  221. package/esm2022/lib/core/fields/options.component.mjs +0 -58
  222. package/esm2022/lib/core/fields/radio-button.designer.mjs +0 -39
  223. package/esm2022/lib/core/fields/radio-button.field.mjs +0 -33
  224. package/esm2022/lib/core/fields/select.designer.mjs +0 -104
  225. package/esm2022/lib/core/fields/select.field.mjs +0 -36
  226. package/esm2022/lib/core/fields/signature.designer.mjs +0 -37
  227. package/esm2022/lib/core/fields/signature.field.mjs +0 -52
  228. package/esm2022/lib/core/fields/switch.field.mjs +0 -35
  229. package/esm2022/lib/core/fields/tags.designer.mjs +0 -28
  230. package/esm2022/lib/core/fields/tags.field.mjs +0 -51
  231. package/esm2022/lib/core/fields/textarea.designer.mjs +0 -33
  232. package/esm2022/lib/core/fields/textarea.field.mjs +0 -37
  233. package/esm2022/lib/core/fields/time.designer.mjs +0 -41
  234. package/esm2022/lib/core/fields/time.field.mjs +0 -39
  235. package/esm2022/lib/core/fields/timespan.field.mjs +0 -82
  236. package/esm2022/lib/core/fields/yesno.designer.mjs +0 -52
  237. package/esm2022/lib/core/fields/yesno.field.mjs +0 -34
  238. package/esm2022/lib/core/firebase.service.mjs +0 -51
  239. package/esm2022/lib/core/functions.mjs +0 -225
  240. package/esm2022/lib/core/guide/guide.component.mjs +0 -220
  241. package/esm2022/lib/core/guide/guide.service.mjs +0 -124
  242. package/esm2022/lib/core/guide/help-tip.component.mjs +0 -52
  243. package/esm2022/lib/core/http.interceptor.mjs +0 -63
  244. package/esm2022/lib/core/hub.service.mjs +0 -117
  245. package/esm2022/lib/core/identity/identity.component.mjs +0 -66
  246. package/esm2022/lib/core/info/attachment-info.service.mjs +0 -53
  247. package/esm2022/lib/core/info/document-info.service.mjs +0 -21
  248. package/esm2022/lib/core/info/location-info.component.mjs +0 -60
  249. package/esm2022/lib/core/info/map-info.mjs +0 -42
  250. package/esm2022/lib/core/inputs/address.input.mjs +0 -203
  251. package/esm2022/lib/core/inputs/auto-complete.input.mjs +0 -273
  252. package/esm2022/lib/core/inputs/combination-picker-body.mjs +0 -171
  253. package/esm2022/lib/core/inputs/combination-picker.mjs +0 -285
  254. package/esm2022/lib/core/inputs/combination-pool.mjs +0 -105
  255. package/esm2022/lib/core/inputs/file.input.mjs +0 -432
  256. package/esm2022/lib/core/inputs/select.input.mjs +0 -254
  257. package/esm2022/lib/core/inputs/signature.input.mjs +0 -150
  258. package/esm2022/lib/core/inputs/time-picker.mjs +0 -195
  259. package/esm2022/lib/core/inputs/timespan.input.mjs +0 -180
  260. package/esm2022/lib/core/layout.component.mjs +0 -93
  261. package/esm2022/lib/core/lottie-animation.exp.mjs +0 -49
  262. package/esm2022/lib/core/mailbox.service.mjs +0 -445
  263. package/esm2022/lib/core/models.mjs +0 -25
  264. package/esm2022/lib/core/none.component.mjs +0 -37
  265. package/esm2022/lib/core/pipes/action.pipe.mjs +0 -25
  266. package/esm2022/lib/core/pipes/calendar.pipe.mjs +0 -72
  267. package/esm2022/lib/core/pipes/date-format.pipe.mjs +0 -19
  268. package/esm2022/lib/core/pipes/daterange.pipe.mjs +0 -62
  269. package/esm2022/lib/core/pipes/difference.pipe.mjs +0 -15
  270. package/esm2022/lib/core/pipes/duration-format.pipe.mjs +0 -48
  271. package/esm2022/lib/core/pipes/duration.pipe.mjs +0 -19
  272. package/esm2022/lib/core/pipes/filter.pipe.mjs +0 -25
  273. package/esm2022/lib/core/pipes/form.pipe.mjs +0 -25
  274. package/esm2022/lib/core/pipes/join.pipe.mjs +0 -18
  275. package/esm2022/lib/core/pipes/localized-string.pipe.mjs +0 -26
  276. package/esm2022/lib/core/pipes/role.pipe.mjs +0 -25
  277. package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +0 -18
  278. package/esm2022/lib/core/pipes/sort.pipe.mjs +0 -42
  279. package/esm2022/lib/core/pipes/state.pipe.mjs +0 -25
  280. package/esm2022/lib/core/pipes/time-ago.pipe.mjs +0 -51
  281. package/esm2022/lib/core/pipes/to-now.pipe.mjs +0 -66
  282. package/esm2022/lib/core/pipes/translate.pipe.mjs +0 -58
  283. package/esm2022/lib/core/pipes/type-value.pipe.mjs +0 -42
  284. package/esm2022/lib/core/pipes/user-name.pipe.mjs +0 -21
  285. package/esm2022/lib/core/popup/popup-ref.mjs +0 -20
  286. package/esm2022/lib/core/popup/popup.component.mjs +0 -36
  287. package/esm2022/lib/core/popup/popup.service.mjs +0 -158
  288. package/esm2022/lib/core/popup/tooltip.directive.mjs +0 -81
  289. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +0 -29
  290. package/esm2022/lib/core/prompt/mask/mask.component.mjs +0 -21
  291. package/esm2022/lib/core/prompt.service.mjs +0 -88
  292. package/esm2022/lib/core/router.mjs +0 -37
  293. package/esm2022/lib/core/save-changes.dialog.mjs +0 -18
  294. package/esm2022/lib/core/session.service.mjs +0 -291
  295. package/esm2022/lib/core/slots/pane-ref.mjs +0 -152
  296. package/esm2022/lib/core/slots/router.directive.mjs +0 -68
  297. package/esm2022/lib/core/slots/router.service.mjs +0 -40
  298. package/esm2022/lib/core/slots/slots.component.mjs +0 -1191
  299. package/esm2022/lib/core/sticky-toolbar.exp.mjs +0 -33
  300. package/esm2022/lib/core/tagging/documents.component.mjs +0 -25
  301. package/esm2022/lib/core/tagging/edit-input.component.mjs +0 -231
  302. package/esm2022/lib/core/tagging/emoji.component.mjs +0 -35
  303. package/esm2022/lib/core/tagging/tagging-item.directive.mjs +0 -39
  304. package/esm2022/lib/core/tagging/tagging.component-base.mjs +0 -29
  305. package/esm2022/lib/core/tagging/tagging.directive.mjs +0 -137
  306. package/esm2022/lib/core/tagging/tagging.pipe.mjs +0 -72
  307. package/esm2022/lib/core/tagging/users.component.mjs +0 -32
  308. package/esm2022/lib/core/translate.service.mjs +0 -125
  309. package/esm2022/lib/core/translations.mjs +0 -1068
  310. package/esm2022/lib/core/virtual-tabs.component.exp.mjs +0 -84
  311. package/esm2022/lib/core/window-title.service.mjs +0 -61
  312. package/esm2022/lib/cube/accum/accum.component.mjs +0 -262
  313. package/esm2022/lib/cube/chart/chart.component.mjs +0 -345
  314. package/esm2022/lib/cube/cube-info.service.mjs +0 -103
  315. package/esm2022/lib/cube/cube-menu.component.mjs +0 -25
  316. package/esm2022/lib/cube/cube-view.component.mjs +0 -186
  317. package/esm2022/lib/cube/cube.service.mjs +0 -446
  318. package/esm2022/lib/cube/declarations.mjs +0 -2
  319. package/esm2022/lib/cube/explore/document-item.component.mjs +0 -38
  320. package/esm2022/lib/cube/explore/explore-item.component.mjs +0 -27
  321. package/esm2022/lib/cube/explore/explore-items.component.mjs +0 -193
  322. package/esm2022/lib/cube/explore/explore.pane.component.mjs +0 -78
  323. package/esm2022/lib/cube/explore/item-resolver.service.mjs +0 -30
  324. package/esm2022/lib/cube/explore/item.pane.component.mjs +0 -21
  325. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +0 -75
  326. package/esm2022/lib/cube/filter/filter.component.mjs +0 -137
  327. package/esm2022/lib/cube/grid/grid.component.mjs +0 -210
  328. package/esm2022/lib/cube/matrix/matrix.base.mjs +0 -124
  329. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +0 -67
  330. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +0 -78
  331. package/esm2022/lib/cube/matrix/popup.component.mjs +0 -70
  332. package/esm2022/lib/cube/matrix/table.component.mjs +0 -512
  333. package/esm2022/lib/cube/parallel/item.mjs +0 -40
  334. package/esm2022/lib/cube/parallel/parallel.component.mjs +0 -162
  335. package/esm2022/lib/cube/pivot/pivot.component.mjs +0 -564
  336. package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +0 -382
  337. package/esm2022/lib/cube/spreadsheet/spreadsheet.container.exp.mjs +0 -19
  338. package/esm2022/lib/cube/sum/sum.component.mjs +0 -403
  339. package/esm2022/lib/cube/view-base.mjs +0 -74
  340. package/esm2022/lib/cube/view.mobile.component.mjs +0 -121
  341. package/esm2022/lib/cube/view.pane.component.mjs +0 -99
  342. package/esm2022/lib/dashboard/actions/actions.widget.mjs +0 -127
  343. package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +0 -151
  344. package/esm2022/lib/dashboard/cube/compare.widget.mjs +0 -216
  345. package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +0 -117
  346. package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +0 -50
  347. package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +0 -146
  348. package/esm2022/lib/dashboard/cube/document-state.widget.mjs +0 -85
  349. package/esm2022/lib/dashboard/cube/documents.widget.mjs +0 -66
  350. package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +0 -61
  351. package/esm2022/lib/dashboard/dashboard.component.mjs +0 -67
  352. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +0 -18
  353. package/esm2022/lib/dashboard/recents/recents.widget.mjs +0 -98
  354. package/esm2022/lib/dashboard/score/activity.widget.mjs +0 -177
  355. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +0 -215
  356. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +0 -251
  357. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +0 -59
  358. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +0 -222
  359. package/esm2022/lib/dashboard/widget-item.component.mjs +0 -91
  360. package/esm2022/lib/dashboard/widget-ref.mjs +0 -18
  361. package/esm2022/lib/designer.module.mjs +0 -106
  362. package/esm2022/lib/desktop.module.mjs +0 -140
  363. package/esm2022/lib/home/about/about.dialog.mjs +0 -25
  364. package/esm2022/lib/home/home-base.component.mjs +0 -92
  365. package/esm2022/lib/home/home.desktop.component.mjs +0 -286
  366. package/esm2022/lib/home/home.mobile.component.mjs +0 -131
  367. package/esm2022/lib/home/notifications/notifications.component.mjs +0 -64
  368. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +0 -37
  369. package/esm2022/lib/home/sign/sign.component.mjs +0 -56
  370. package/esm2022/lib/impersonate/impersonate.component.mjs +0 -77
  371. package/esm2022/lib/mobile.module.mjs +0 -61
  372. package/esm2022/lib/modules/chart.module.mjs +0 -44
  373. package/esm2022/lib/modules/circular-gauge.module.mjs +0 -20
  374. package/esm2022/lib/modules/date.adapter.mjs +0 -23
  375. package/esm2022/lib/modules/datepicker.intl.mjs +0 -41
  376. package/esm2022/lib/modules/dayjs.module.mjs +0 -43
  377. package/esm2022/lib/modules/diagram.module.mjs +0 -39
  378. package/esm2022/lib/modules/gantt.module.mjs +0 -22
  379. package/esm2022/lib/modules/grid.module.mjs +0 -26
  380. package/esm2022/lib/modules/linear-gauge.module.mjs +0 -17
  381. package/esm2022/lib/modules/material.module.mjs +0 -182
  382. package/esm2022/lib/modules/paginator.intl.mjs +0 -21
  383. package/esm2022/lib/modules/pivot.module.mjs +0 -24
  384. package/esm2022/lib/modules/schedule.module.mjs +0 -24
  385. package/esm2022/lib/modules/spreadsheet.module.mjs +0 -28
  386. package/esm2022/lib/modules/stepper.intl.mjs +0 -17
  387. package/esm2022/lib/modules/texteditor.module.mjs +0 -26
  388. package/esm2022/lib/notifications/filter.component.mjs +0 -24
  389. package/esm2022/lib/notifications/notifications-table.component.mjs +0 -105
  390. package/esm2022/lib/notifications/notifications.component-base.mjs +0 -50
  391. package/esm2022/lib/notifications/notifications.mobile.component.mjs +0 -20
  392. package/esm2022/lib/notifications/notifications.pane.component.mjs +0 -21
  393. package/esm2022/lib/notifications/notifications.service.mjs +0 -78
  394. package/esm2022/lib/notifications/types/commented.notification.mjs +0 -60
  395. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +0 -58
  396. package/esm2022/lib/notifications/types/escalated.notification.mjs +0 -33
  397. package/esm2022/lib/notifications/types/invite.notification.mjs +0 -45
  398. package/esm2022/lib/notifications/types/liked.notification.mjs +0 -58
  399. package/esm2022/lib/notifications/types/long-running-task.notification.mjs +0 -31
  400. package/esm2022/lib/notifications/types/notification-base.mjs +0 -40
  401. package/esm2022/lib/notifications/types/nudge.notification.mjs +0 -31
  402. package/esm2022/lib/notifications/types/state-changed.notification.mjs +0 -30
  403. package/esm2022/lib/notifications/types/tagged.notification.mjs +0 -43
  404. package/esm2022/lib/notifications/types/text.notification.mjs +0 -23
  405. package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +0 -36
  406. package/esm2022/lib/options/options.component.mjs +0 -308
  407. package/esm2022/lib/options/options.desktop.component.mjs +0 -26
  408. package/esm2022/lib/options/options.mobile.component.mjs +0 -23
  409. package/esm2022/lib/reports/arguments-component.mjs +0 -81
  410. package/esm2022/lib/reports/cube/documents.component.mjs +0 -38
  411. package/esm2022/lib/reports/cube/grid-documents.component.mjs +0 -72
  412. package/esm2022/lib/reports/cube/performance-hilo.component.mjs +0 -260
  413. package/esm2022/lib/reports/cube/performance-wind.component.mjs +0 -269
  414. package/esm2022/lib/reports/cube/table-documents.component.mjs +0 -57
  415. package/esm2022/lib/reports/cube/usage-args.component.mjs +0 -62
  416. package/esm2022/lib/reports/cube/usage-base.mjs +0 -79
  417. package/esm2022/lib/reports/cube/usage-chart.component.mjs +0 -354
  418. package/esm2022/lib/reports/cube/usage-pivot.component.mjs +0 -257
  419. package/esm2022/lib/reports/cube/usage.component.mjs +0 -40
  420. package/esm2022/lib/reports/report-ref.mjs +0 -38
  421. package/esm2022/lib/reports/report-viewer.component.mjs +0 -156
  422. package/esm2022/lib/reports/report.mobile.component.mjs +0 -127
  423. package/esm2022/lib/reports/report.pane.component.mjs +0 -109
  424. package/esm2022/lib/reports/reports-menu.component.mjs +0 -24
  425. package/esm2022/lib/reports/substitution/substitution.component.mjs +0 -39
  426. package/esm2022/lib/reports/table/table-view.component.mjs +0 -40
  427. package/esm2022/lib/reports/tasks/tasks.component.mjs +0 -95
  428. package/esm2022/lib/routes.desktop.mjs +0 -209
  429. package/esm2022/lib/routes.mobile.mjs +0 -85
  430. package/esm2022/lib/scheduler/schedule.component.mjs +0 -164
  431. package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +0 -37
  432. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +0 -50
  433. package/esm2022/lib/search/cube.component.mjs +0 -47
  434. package/esm2022/lib/search/declarations.mjs +0 -7
  435. package/esm2022/lib/search/document.component.mjs +0 -41
  436. package/esm2022/lib/search/guide.component.mjs +0 -28
  437. package/esm2022/lib/search/path.component.mjs +0 -44
  438. package/esm2022/lib/search/search.service.mjs +0 -155
  439. package/esm2022/lib/shared.module.mjs +0 -622
  440. package/esm2022/lib/system.module.mjs +0 -562
  441. package/esm2022/lib/views/cube/chart.component.mjs +0 -74
  442. package/esm2022/lib/views/cube/cube-base.mjs +0 -101
  443. package/esm2022/lib/views/cube/explore.component.mjs +0 -85
  444. package/esm2022/lib/views/cube/matrix.component.mjs +0 -101
  445. package/esm2022/lib/views/cube/parallel.component.mjs +0 -53
  446. package/esm2022/lib/views/cube/pivot.component.mjs +0 -50
  447. package/esm2022/lib/views/cube/sum.component.mjs +0 -66
  448. package/esm2022/lib/views/cube/view.component.mjs +0 -101
  449. package/esm2022/lib/views/document-view-ref.mjs +0 -27
  450. package/esm2022/lib/views/timeline/timeline.component.mjs +0 -329
  451. package/esm2022/lib/views/view-item.component.mjs +0 -68
  452. package/esm2022/lib/views/views.component.mjs +0 -32
  453. package/esm2022/lib/views/views.mobile.component.mjs +0 -21
  454. package/esm2022/lib/views/views.pane.component.mjs +0 -29
  455. package/esm2022/public-api.mjs +0 -182
@@ -1,537 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, ViewChild, Inject, HostListener } from '@angular/core';
3
- import { trigger } from '@angular/animations';
4
- import { MatTableDataSource } from '@angular/material/table';
5
- import { MatSort } from '@angular/material/sort';
6
- import { Subject } from 'rxjs';
7
- import { takeUntil, debounceTime } from 'rxjs/operators';
8
- import dayjs from 'dayjs';
9
- import { DiagramConstraints, NodeConstraints, SelectorConstraints, ToolBase, Diagram, DiagramTools, ConnectorConstraints, ConnectionPointOrigin } from '@syncfusion/ej2-diagrams';
10
- import { RangeNavigator } from '@syncfusion/ej2-charts';
11
- import { BizDoc } from '../../core/decorators';
12
- import { getWarn } from '../../core/functions';
13
- import { UtilityRef } from '../utility-ref';
14
- import { EnterExitRight } from '../../core/animations';
15
- import { TraceElementComponent } from './trace-element.component';
16
- import { OpenPolicy } from '../../core/configuration';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "../system.service";
19
- import * as i2 from "../../core/session.service";
20
- import * as i3 from "../../core/slots/pane-ref";
21
- import * as i4 from "../../core/slots/router.service";
22
- import * as i5 from "../../core/prompt.service";
23
- import * as i6 from "../../core/translate.service";
24
- import * as i7 from "../../core/popup/popup.service";
25
- import * as i8 from "../../core/guide/guide.service";
26
- import * as i9 from "@angular/forms";
27
- import * as i10 from "@angular/cdk/bidi";
28
- import * as i11 from "@syncfusion/ej2-angular-charts";
29
- import * as i12 from "@angular/material/core";
30
- import * as i13 from "@angular/material/table";
31
- import * as i14 from "@angular/material/sort";
32
- import * as i15 from "@angular/material/progress-bar";
33
- import * as i16 from "@angular/material/toolbar";
34
- import * as i17 from "@angular/material/form-field";
35
- import * as i18 from "@angular/material/button";
36
- import * as i19 from "@angular/material/input";
37
- import * as i20 from "@angular/material/icon";
38
- import * as i21 from "../../compose/state.component";
39
- import * as i22 from "../../core/popup/tooltip.directive";
40
- import * as i23 from "../../core/inputs/select.input";
41
- import * as i24 from "@angular/common";
42
- import * as i25 from "../../core/pipes/date-format.pipe";
43
- import * as i26 from "../../core/pipes/user-name.pipe";
44
- import * as i27 from "../../core/pipes/translate.pipe";
45
- import * as i28 from "../utility-ref";
46
- const WARNNING_PATH = 'M 13.763735,1.8433735 H 6.3037349 l -5.27,5.27 v 7.4599995 l 5.27,5.27 h 7.4600001 l 5.27,-5.27 V 7.1133735 Z m -3.73,14.2999995 c -0.7200001,0 -1.3000001,-0.58 -1.3000001,-1.3 0,-0.72 0.58,-1.3 1.3000001,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3 z m 1,-4.3 H 9.0337349 V 5.8433735 h 2.0000001 z', JUMP_PATH = 'M 6,18 14.5,12 6,6 Z M 16,6 v 12 h 2 V 6 Z';
47
- function getPorts() {
48
- return [
49
- { id: 'port1', shape: 'Circle', offset: { x: 0, y: 0.5 } },
50
- { id: 'port2', shape: 'Circle', offset: { x: 0.5, y: 1 } },
51
- { id: 'port3', shape: 'Circle', offset: { x: 1, y: 0.5 } },
52
- { id: 'port4', shape: 'Circle', offset: { x: 0.5, y: 0 } }
53
- ];
54
- }
55
- class InfoTool extends ToolBase {
56
- mouseDown(args) {
57
- if (this.diagram.selectedItems.nodes.length > 0) {
58
- const node = this.diagram.selectedItems.nodes[0];
59
- super.mouseDown(args);
60
- this.tap.next(node);
61
- this.inAction = true;
62
- }
63
- }
64
- constructor(diagram, tap) {
65
- super(diagram.commandHandler);
66
- this.diagram = diagram;
67
- this.tap = tap;
68
- }
69
- }
70
- /** */
71
- let DocumentTraceComponent = class DocumentTraceComponent {
72
- getTool(action) {
73
- let tool;
74
- if (action === 'info') {
75
- tool = new InfoTool(this.diagram, this._tap);
76
- return tool;
77
- }
78
- return null;
79
- }
80
- /** workflow ctor */
81
- constructor(_utilityRef, _service, _session, _pane, _router, _sb, _translate, _popup, _guide, _cd, _fb) {
82
- this._utilityRef = _utilityRef;
83
- this._service = _service;
84
- this._session = _session;
85
- this._pane = _pane;
86
- this._router = _router;
87
- this._sb = _sb;
88
- this._translate = _translate;
89
- this._popup = _popup;
90
- this._guide = _guide;
91
- this._cd = _cd;
92
- this._fb = _fb;
93
- this.theme = this._session.theme.dark ? 'Material3Dark' : 'Material3';
94
- this.accent = this._session.getAccent();
95
- this.form = this._fb.group({
96
- search: undefined,
97
- formId: undefined
98
- });
99
- this.diagramConstraints = DiagramConstraints.Default | DiagramConstraints.Bridging |
100
- DiagramConstraints.LineRouting |
101
- DiagramConstraints.Pan |
102
- DiagramConstraints.Zoom;
103
- this.diagramTool = DiagramTools.SingleSelect;
104
- this.layout = {
105
- type: 'ComplexHierarchicalTree',
106
- connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
107
- horizontalSpacing: 50,
108
- enableRouting: true,
109
- verticalSpacing: 50,
110
- horizontalAlignment: 'Center',
111
- connectionDirection: 'Orientation',
112
- orientation: 'TopToBottom'
113
- };
114
- this.snapSettings = {};
115
- this.scrollSettings = {
116
- minZoom: .5,
117
- maxZoom: 2.5
118
- };
119
- this._accentColor = this._session.getAccent(800);
120
- this._primeryColor = this._session.getPrimery();
121
- this.selectedItems = {
122
- constraints: SelectorConstraints.UserHandle,
123
- userHandles: [
124
- {
125
- name: 'info',
126
- pathData: 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z',
127
- visible: true,
128
- offset: 0,
129
- side: 'Right',
130
- verticalAlignment: 'Bottom',
131
- backgroundColor: 'transparent',
132
- pathColor: this._primeryColor,
133
- size: 40,
134
- margin: { top: 0, bottom: 0, left: 0, right: 0 }
135
- }
136
- ]
137
- };
138
- this.getCustomTool = this.getTool.bind(this);
139
- this.mode = 'browse';
140
- this.loading = 'query';
141
- this.displayedColumns = ['number', 'subject', 'stateId'];
142
- this._highLightedIds = [];
143
- this._tap = new Subject();
144
- this._destroy = new Subject();
145
- this._dateschange = new Subject();
146
- this.nodeDefaults = (node) => {
147
- const { indicator } = node.addInfo || {};
148
- if (indicator) {
149
- node.constraints = NodeConstraints.PointerEvents | NodeConstraints.Tooltip,
150
- node.style.strokeWidth = 0,
151
- node.width = node.height = 15;
152
- }
153
- else if (node.id !== 'version') {
154
- node.constraints = NodeConstraints.InConnect | NodeConstraints.OutConnect |
155
- NodeConstraints.PointerEvents | NodeConstraints.Select;
156
- this._decorateNode(node);
157
- node.ports = getPorts();
158
- }
159
- return node;
160
- };
161
- this.connDefaults = (connector) => {
162
- connector.constraints = ConnectorConstraints.ReadOnly & ~ConnectorConstraints.Select;
163
- this._decorateConnector(connector);
164
- };
165
- }
166
- ngOnInit() {
167
- const now = dayjs();
168
- this._session.themeChange.pipe(takeUntil(this._destroy)).subscribe(t => {
169
- this.theme = t.dark ? 'Material3Dark' : 'Material3';
170
- this.accent = this._session.getAccent();
171
- //this.rangeNavigator.refresh();
172
- });
173
- this._service.range().subscribe(r => this.rangeData = r);
174
- this._dateschange.pipe(takeUntil(this._destroy), debounceTime(200)).subscribe(r => {
175
- this._start = r.start, this._end = r.end;
176
- this._list();
177
- });
178
- //let r = localStorage.getItem('trace-range');
179
- this.range = [now.add(-2, 'w').toDate(),
180
- now.toDate()];
181
- this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(200)).
182
- subscribe(this._list.bind(this));
183
- this._pane.queryParamsChange().subscribe(p => {
184
- const { documentId } = p;
185
- documentId && this._open(documentId.decodeId());
186
- });
187
- this._pane.resized().pipe(takeUntil(this._destroy)).subscribe(() => this.diagram?.refresh());
188
- }
189
- openFilter(evt) {
190
- this._popup.open(this.filterArgs, evt.target).opened().subscribe(() => this.searchInput.focus());
191
- }
192
- _list() {
193
- this.loading = 'query';
194
- this._service.findAll({ ...this.form.value, start: this._start, end: this._end }).subscribe(l => {
195
- this.dataSource = new MatTableDataSource(l);
196
- this.dataSource.sort = this.sort;
197
- this.loading = null;
198
- });
199
- }
200
- rangeChanged(args) {
201
- //localStorage.setItem('trace-range', args.);
202
- this._dateschange.next(args);
203
- }
204
- guide(evt) {
205
- const steps = [];
206
- if (this.timeline) {
207
- if (this.timeline.items.length > 1)
208
- steps.push({
209
- selector: '[data-help=timeline]',
210
- content: this._translate.get('TraceTimelineHelp')
211
- });
212
- steps.push({
213
- selector: 'g[id^=start]',
214
- content: this._translate.get('TraceElementHelp'),
215
- });
216
- }
217
- else
218
- steps.push({
219
- selector: '[data-help=search]',
220
- position: 'Below',
221
- content: this._translate.get('TraceSearchHelp')
222
- });
223
- this._guide.start({
224
- name: 'trace',
225
- steps
226
- });
227
- evt && evt.preventDefault();
228
- }
229
- browse() {
230
- this._router.navigate([]);
231
- this._router.collapse();
232
- this.mode = 'browse';
233
- this._cd.detectChanges();
234
- this.dataSource.sort = this.sort;
235
- }
236
- _open(id) {
237
- this.diagram?.destroy();
238
- this.loading = 'buffer';
239
- this._utilityRef.populate(id).subscribe({
240
- next: e => {
241
- this._highLightedIds = [];
242
- this.model = e;
243
- this._timeline();
244
- this.mode = 'diagram';
245
- this.loading = null;
246
- this._cd.detectChanges();
247
- this.diagram = new Diagram({
248
- width: '100%', height: '100%',
249
- snapSettings: this.snapSettings,
250
- layout: this.layout,
251
- getConnectorDefaults: this.connDefaults,
252
- selectedItems: this.selectedItems,
253
- tool: this.diagramTool,
254
- constraints: this.diagramConstraints,
255
- getNodeDefaults: this.nodeDefaults,
256
- scrollSettings: this.scrollSettings,
257
- nodes: e.diagram.nodes,
258
- connectors: e.diagram.connectors,
259
- selectionChange: this.selectionChange.bind(this)
260
- }, this.diagramElement.nativeElement);
261
- this._version();
262
- this._indicators();
263
- this.diagram.fitToPage();
264
- }, error: () => {
265
- this.loading = null;
266
- this._sb.error();
267
- }
268
- });
269
- }
270
- open(item) {
271
- this._router.navigate([], { queryParams: { documentId: item.id.encodeId() } });
272
- }
273
- _timeline() {
274
- const items = [], submissions = [];
275
- let minDate, maxDate, estimate;
276
- for (let l of this.model.log) {
277
- const { time, userId } = l;
278
- switch (l.type) {
279
- case 'Submit':
280
- submissions.push(time);
281
- break;
282
- default:
283
- }
284
- if (!items.find(t => t.time === time))
285
- items.push({ time, userId });
286
- if (!minDate || dayjs(time).isBefore(minDate))
287
- minDate = time;
288
- if (!maxDate || dayjs(time).isAfter(maxDate))
289
- maxDate = time;
290
- if (l.estimate)
291
- estimate = true;
292
- }
293
- this.timeline = {
294
- items, minDate, maxDate,
295
- submissions, estimate
296
- };
297
- this._scope(submissions[submissions.length - 1]);
298
- }
299
- /**
300
- *
301
- * @param date
302
- */
303
- _scope(date) {
304
- const startDate = this.timeline.submissions.reverse().
305
- find(s => s <= date), nextDate = this.timeline.submissions.find(s => s > date), endDate = nextDate ? new Date(new Date(nextDate).valueOf() - 1).toJSON() : this.timeline.maxDate;
306
- Object.assign(this.timeline, {
307
- startDate,
308
- endDate,
309
- recipients: this.model.recipients.filter(r => r.received >= startDate && r.received <= endDate),
310
- log: this.model.log.filter(l => l.time >= startDate && l.time <= endDate)
311
- });
312
- }
313
- _indicators() {
314
- const indicators = [];
315
- this.model.log.forEach(l => {
316
- switch (l.type) {
317
- case 'Node':
318
- if (l.error)
319
- indicators.push({
320
- shape: {
321
- type: 'Path',
322
- data: WARNNING_PATH,
323
- align: 'XMinYMax'
324
- },
325
- tooltip: {
326
- content: l.error,
327
- position: 'BottomCenter'
328
- },
329
- style: {
330
- fill: getWarn(800)
331
- },
332
- addInfo: {
333
- indicator: true,
334
- parentId: l.nodeId
335
- }
336
- });
337
- break;
338
- case 'NodeJump':
339
- //indicators.push({
340
- // shape: {
341
- // type: 'Path',
342
- // data: JUMP_PATH,
343
- // align: 'XMinYMax'
344
- // },
345
- // style: {
346
- // fill: 'black'
347
- // },
348
- // addInfo: {
349
- // indicator: true,
350
- // parentId: l.nodeId
351
- // }
352
- //});
353
- break;
354
- }
355
- });
356
- this.diagram.removeLayer('indicators');
357
- indicators.forEach(i => {
358
- const parent = this.diagram.getNodeObject(i.addInfo.parentId);
359
- i.offsetX = parent.offsetX + parent.width / 2 - 15,
360
- i.offsetY = parent.offsetY + parent.height / 2 - 15;
361
- this.diagram.add(i);
362
- });
363
- this.diagram.addLayer({ id: 'indicators' }, indicators);
364
- }
365
- _decorateNode(node) {
366
- const log = this.timeline.log.filter(r => r.nodeId === node.id);
367
- if (log.length) {
368
- const recipients = this.timeline.recipients.filter(r => r.nodeId === node.id);
369
- node.style.strokeColor = this._accentColor;
370
- node.style.strokeDashArray = log.find(l => l.estimate) ? '3 2' : '';
371
- node.style.fill = recipients.find(r => r.pending && !r.estimate) ? this._accentColor : 'white';
372
- }
373
- else
374
- node.style.fill = 'white',
375
- node.style.strokeColor = 'darkgray',
376
- node.style.strokeDashArray = '6 2';
377
- }
378
- _decorateConnector(connector) {
379
- const log = this.timeline.log.filter(l => l.sourceId === connector.sourceID && l.targetId == connector.targetID);
380
- if (log.length) {
381
- connector.style.strokeColor = connector.targetDecorator.style.strokeColor = connector.targetDecorator.style.fill =
382
- this._accentColor;
383
- connector.style.strokeDashArray = log.find(l => l.estimate) ? '3 2' : '';
384
- }
385
- else
386
- connector.style.strokeColor = connector.targetDecorator.style.strokeColor = connector.targetDecorator.style.fill = 'darkgray',
387
- connector.style.strokeDashArray = '6 2';
388
- }
389
- _version() {
390
- this.diagram.removeLayer('version');
391
- const version = {
392
- id: 'version',
393
- shape: {
394
- type: 'Text',
395
- content: this._translate.get('DiagramVersion', this.model.diagram.version)
396
- },
397
- offsetY: 5,
398
- offsetX: 5,
399
- style: {
400
- fontSize: 50,
401
- opacity: .1
402
- },
403
- constraints: NodeConstraints.ReadOnly
404
- };
405
- this.diagram.addLayer({
406
- id: 'version',
407
- objects: [
408
- version
409
- ]
410
- });
411
- this.diagram.add(version);
412
- }
413
- selectionChange(evt) {
414
- if (evt.state !== 'Changed')
415
- return;
416
- this._unhighlight();
417
- if (evt.newValue.length) {
418
- let node = evt.newValue[0];
419
- const { indicator, parentId } = node.addInfo || {};
420
- if (indicator) {
421
- node = this.diagram.getNodeObject(parentId);
422
- this.diagram.select([node]);
423
- }
424
- else {
425
- const ids = (node.inEdges).concat(node.outEdges);
426
- ids.push(node.id);
427
- this._highlight(ids);
428
- }
429
- this.diagram.dataBind();
430
- if (node) {
431
- if (this._infoRef)
432
- this._infoRef.close();
433
- this._router.navigate(TraceElementComponent, {
434
- state: {
435
- node,
436
- timeline: this.timeline,
437
- model: this.model,
438
- utilityRef: this._utilityRef,
439
- },
440
- policy: OpenPolicy.Tab
441
- }).then((e) => {
442
- this._infoRef = e;
443
- e.animation;
444
- });
445
- }
446
- else
447
- this._router.collapse();
448
- }
449
- else
450
- this.node = undefined;
451
- }
452
- highlightTime(time) {
453
- this.timeline.date = time;
454
- this.diagram.clearSelection();
455
- this._unhighlight();
456
- if (time < this.timeline.startDate || time > this.timeline.endDate) {
457
- this._scope(time);
458
- for (let i = 0; i < this.diagram.nodes.length; i++)
459
- this._decorateNode(this.diagram.nodes[i]);
460
- for (let i = 0; i < this.diagram.connectors.length; i++)
461
- this._decorateConnector(this.diagram.connectors[i]);
462
- }
463
- const ids = this.timeline.log.
464
- filter(l => l.nodeId && l.time === time).
465
- map(l => l.nodeId).
466
- filter((v, i, a) => a.indexOf(v) === i);
467
- this._highlight(ids);
468
- this.diagram.dataBind();
469
- }
470
- pan() {
471
- this.diagram.constraints = this.diagram.constraints | DiagramConstraints.Pan;
472
- this.diagram.tool = DiagramTools.ZoomPan;
473
- }
474
- cursor() {
475
- this.diagram.constraints = this.diagram.constraints & ~DiagramConstraints.Pan;
476
- this.diagram.tool = DiagramTools.SingleSelect;
477
- }
478
- _highlight(ids) {
479
- for (let i = 0; i < ids.length; i++) {
480
- const obj = this.diagram.getObject(ids[i]);
481
- if (obj.sourceID)
482
- obj.style.strokeColor =
483
- obj.targetDecorator.style.strokeColor =
484
- obj.targetDecorator.style.fill = this._primeryColor;
485
- else
486
- obj.style.strokeColor = this._primeryColor;
487
- }
488
- this._highLightedIds = ids;
489
- }
490
- _unhighlight() {
491
- for (let i = this._highLightedIds.length - 1; i >= 0; i--) {
492
- const obj = this.diagram.getObject(this._highLightedIds[i]);
493
- if (obj.sourceID)
494
- this._decorateConnector(obj);
495
- else
496
- this._decorateNode(obj);
497
- }
498
- this._highLightedIds = [];
499
- }
500
- ngOnDestroy() {
501
- this._destroy.next();
502
- this._destroy.complete();
503
- }
504
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DocumentTraceComponent, deps: [{ token: UtilityRef }, { token: i1.SystemService }, { token: i2.SessionService }, { token: i3.PaneRef }, { token: i4.PanesRouter }, { token: i5.PromptService }, { token: i6.TranslateService }, { token: i7.Popup }, { token: i8.GuideService }, { token: i0.ChangeDetectorRef }, { token: i9.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
505
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: DocumentTraceComponent, selector: "ng-component", host: { listeners: { "window:keydown.f1": "guide($event)" } }, viewQueries: [{ propertyName: "diagramElement", first: true, predicate: ["diagram"], descendants: true }, { propertyName: "filterArgs", first: true, predicate: ["args"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["search"], descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "rangeNavigator", first: true, predicate: RangeNavigator, descendants: true }], ngImport: i0, template: "@switch (mode) {\r\n<!-- diagram -->\r\n @case ('diagram') {\r\n<div class=\"column flex\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"browse()\" [bizdocTooltip]=\"'Back' | translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n |\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\"><mat-icon>help_outline</mat-icon></button>\r\n </mat-toolbar>\r\n <div class=\"row flex\">\r\n <!-- timeline -->\r\n @if (timeline?.items.length > 1) {\r\n <div class=\"timeline\" data-help=\"timeline\">\r\n @for (date of timeline.items; track date; let last = $last) {\r\n <div class=\"item\"\r\n [class.active]=\"date.time === timeline.date\"\r\n (click)=\"highlightTime(date.time)\" matRipple>\r\n <div class=\"title\">\r\n @if (!last || !timeline.estimate) {\r\n @if (date.userId) {\r\n <span class=\"who\">\r\n {{date.userId | userName | async }}\r\n </span>\r\n }\r\n <br />\r\n <span class=\"time\">\r\n {{date.time | amDateFormat: 'MMM Do H:mm' }}\r\n </span>\r\n } @else {\r\n {{'Estimate' | translate}}\r\n }\r\n </div>\r\n <div class=\"indicator-container\">\r\n <div class=\"indicator\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"flex\" #diagram dir=\"ltr\">\r\n </div>\r\n </div>\r\n</div>\r\n }\r\n<!-- browse -->\r\n @default {\r\n<div class=\"flex column fill\">\r\n <mat-toolbar class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"openFilter($event)\" [bizdocTooltip]=\"'Filter'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n </mat-toolbar>\r\n <mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n <!-- table -->\r\n <mat-table class=\"flex\" [dataSource]=\"dataSource\" matSort>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n <!-- StateId column -->\r\n <ng-container matColumnDef=\"stateId\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row *matRowDef=\"let item; columns: displayedColumns;\"\r\n (click)=\"open(item)\">\r\n </mat-row>\r\n </mat-table>\r\n <!-- range -->\r\n <ejs-rangenavigator valueType='DateTime' [value]=range labelFormat='MMM' background=\"transparent\"\r\n [theme]=\"theme\" labelIntersectAction='Hide' enableGrouping=\"false\"\r\n groupBy=\"Years\" intervalType='Months'\r\n (changed)='rangeChanged($event)'>\r\n <e-rangenavigator-series-collection>\r\n <e-rangenavigator-series [dataSource]='rangeData' [fill]=\"accent\" type='Area' xName='date' yName='count' width=2>\r\n </e-rangenavigator-series>\r\n </e-rangenavigator-series-collection>\r\n </ejs-rangenavigator>\r\n</div>\r\n }\r\n}\r\n<!-- args -->\r\n<ng-template #args>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column gap\">\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput type=\"search\" #search formControlName=\"search\" data-help=\"search\" [placeholder]=\"'Number'|translate\" />\r\n <mat-icon matSuffix class=\"mat-icon-rtl-mirror\">search</mat-icon>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <bizdoc-select type=\"forms\" [placeholder]=\"'Form'|translate\" formControlName=\"formId\"></bizdoc-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<ng-template #estimate>\r\n {{'Estimate' | translate}}\r\n</ng-template>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}:host ::ng-deep .mat-mdc-row{cursor:pointer}form{margin:8px}\n"], dependencies: [{ kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.RangeNavigatorComponent, selector: "ejs-rangenavigator", inputs: ["allowIntervalData", "allowSnapping", "animationDuration", "background", "dataSource", "disableRangeSelector", "enableDeferredUpdate", "enableGrouping", "enablePersistence", "enableRtl", "groupBy", "height", "interval", "intervalType", "labelFormat", "labelIntersectAction", "labelPlacement", "labelPosition", "labelStyle", "locale", "logBase", "majorGridLines", "majorTickLines", "margin", "maximum", "minimum", "navigatorBorder", "navigatorStyleSettings", "periodSelectorSettings", "query", "secondaryLabelAlignment", "series", "skeleton", "skeletonType", "theme", "tickPosition", "tooltip", "useGroupingSeparator", "value", "valueType", "width", "xName", "yName"], outputs: ["beforePrint", "beforeResize", "changed", "labelRender", "load", "loaded", "resized", "selectorRender", "tooltipRender", "dataSourceChange"] }, { kind: "directive", type: i11.RangenavigatorSeriesDirective, selector: "e-rangenavigator-series-collection>e-rangenavigator-series", inputs: ["animation", "border", "dashArray", "dataSource", "fill", "opacity", "query", "type", "width", "xName", "yName"] }, { kind: "directive", type: i11.RangenavigatorSeriesCollectionDirective, selector: "ej-rangenavigator>e-rangenavigator-series-collection" }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i13.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i13.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i13.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i13.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i13.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i13.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i13.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i13.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i13.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i13.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i14.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i14.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i15.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i16.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i17.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i17.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i18.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i19.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i21.StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { kind: "directive", type: i22.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i23.TypeSelect, selector: "bizdoc-select", inputs: ["type", "scope", "multiple", "placeholder", "required", "disabled", "text", "value"], outputs: ["selectionChange", "textChange"] }, { kind: "pipe", type: i24.AsyncPipe, name: "async" }, { kind: "pipe", type: i25.DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: i26.UserNamePipe, name: "userName" }, { kind: "pipe", type: i27.TranslatePipe, name: "translate" }], animations: [trigger('element', EnterExitRight)] }); }
506
- };
507
- DocumentTraceComponent = __decorate([
508
- BizDoc({ selector: 'bizdoc-trace-utility' })
509
- /** workflow component*/
510
- ], DocumentTraceComponent);
511
- export { DocumentTraceComponent };
512
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DocumentTraceComponent, decorators: [{
513
- type: Component,
514
- args: [{ animations: [trigger('element', EnterExitRight)], template: "@switch (mode) {\r\n<!-- diagram -->\r\n @case ('diagram') {\r\n<div class=\"column flex\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"browse()\" [bizdocTooltip]=\"'Back' | translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n |\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\"><mat-icon>help_outline</mat-icon></button>\r\n </mat-toolbar>\r\n <div class=\"row flex\">\r\n <!-- timeline -->\r\n @if (timeline?.items.length > 1) {\r\n <div class=\"timeline\" data-help=\"timeline\">\r\n @for (date of timeline.items; track date; let last = $last) {\r\n <div class=\"item\"\r\n [class.active]=\"date.time === timeline.date\"\r\n (click)=\"highlightTime(date.time)\" matRipple>\r\n <div class=\"title\">\r\n @if (!last || !timeline.estimate) {\r\n @if (date.userId) {\r\n <span class=\"who\">\r\n {{date.userId | userName | async }}\r\n </span>\r\n }\r\n <br />\r\n <span class=\"time\">\r\n {{date.time | amDateFormat: 'MMM Do H:mm' }}\r\n </span>\r\n } @else {\r\n {{'Estimate' | translate}}\r\n }\r\n </div>\r\n <div class=\"indicator-container\">\r\n <div class=\"indicator\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"flex\" #diagram dir=\"ltr\">\r\n </div>\r\n </div>\r\n</div>\r\n }\r\n<!-- browse -->\r\n @default {\r\n<div class=\"flex column fill\">\r\n <mat-toolbar class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"openFilter($event)\" [bizdocTooltip]=\"'Filter'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n </mat-toolbar>\r\n <mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n <!-- table -->\r\n <mat-table class=\"flex\" [dataSource]=\"dataSource\" matSort>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n <!-- StateId column -->\r\n <ng-container matColumnDef=\"stateId\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row *matRowDef=\"let item; columns: displayedColumns;\"\r\n (click)=\"open(item)\">\r\n </mat-row>\r\n </mat-table>\r\n <!-- range -->\r\n <ejs-rangenavigator valueType='DateTime' [value]=range labelFormat='MMM' background=\"transparent\"\r\n [theme]=\"theme\" labelIntersectAction='Hide' enableGrouping=\"false\"\r\n groupBy=\"Years\" intervalType='Months'\r\n (changed)='rangeChanged($event)'>\r\n <e-rangenavigator-series-collection>\r\n <e-rangenavigator-series [dataSource]='rangeData' [fill]=\"accent\" type='Area' xName='date' yName='count' width=2>\r\n </e-rangenavigator-series>\r\n </e-rangenavigator-series-collection>\r\n </ejs-rangenavigator>\r\n</div>\r\n }\r\n}\r\n<!-- args -->\r\n<ng-template #args>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column gap\">\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput type=\"search\" #search formControlName=\"search\" data-help=\"search\" [placeholder]=\"'Number'|translate\" />\r\n <mat-icon matSuffix class=\"mat-icon-rtl-mirror\">search</mat-icon>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <bizdoc-select type=\"forms\" [placeholder]=\"'Form'|translate\" formControlName=\"formId\"></bizdoc-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<ng-template #estimate>\r\n {{'Estimate' | translate}}\r\n</ng-template>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}:host ::ng-deep .mat-mdc-row{cursor:pointer}form{margin:8px}\n"] }]
515
- }], ctorParameters: () => [{ type: i28.UtilityRef, decorators: [{
516
- type: Inject,
517
- args: [UtilityRef]
518
- }] }, { type: i1.SystemService }, { type: i2.SessionService }, { type: i3.PaneRef }, { type: i4.PanesRouter }, { type: i5.PromptService }, { type: i6.TranslateService }, { type: i7.Popup }, { type: i8.GuideService }, { type: i0.ChangeDetectorRef }, { type: i9.FormBuilder }], propDecorators: { diagramElement: [{
519
- type: ViewChild,
520
- args: ['diagram']
521
- }], filterArgs: [{
522
- type: ViewChild,
523
- args: ['args']
524
- }], searchInput: [{
525
- type: ViewChild,
526
- args: ['search']
527
- }], sort: [{
528
- type: ViewChild,
529
- args: [MatSort]
530
- }], rangeNavigator: [{
531
- type: ViewChild,
532
- args: [RangeNavigator]
533
- }], guide: [{
534
- type: HostListener,
535
- args: ['window:keydown.f1', ['$event']]
536
- }] } });
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdHJhY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2FkbWluL2RvY3VtZW50LXRyYWNlL2RvY3VtZW50LXRyYWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9hZG1pbi9kb2N1bWVudC10cmFjZS9kb2N1bWVudC10cmFjZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQThDLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQ0wsa0JBQWtCLEVBQWtCLGVBQWUsRUFBc0MsbUJBQW1CLEVBQzVHLFFBQVEsRUFBRSxPQUFPLEVBQWdFLFlBQVksRUFBYSxvQkFBb0IsRUFBeUMscUJBQXFCLEVBQzdMLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFB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LFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQXJkVSxzQkFBc0Isa0JBZ0Z2QixVQUFVO2tHQWhGVCxzQkFBc0Isa2FBdUV0QixPQUFPLGlGQUNQLGNBQWMsZ0RDNUkzQix1MEpBMkdBLGtyTUQzQ2MsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDOztBQUlyQyxzQkFBc0I7SUFGbEMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDN0Msd0JBQXdCO0dBQ1gsc0JBQXNCLENBc2RsQzs7MkZBdGRZLHNCQUFzQjtrQkFQbEMsU0FBUztpQ0FHSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7OzBCQW9GN0MsTUFBTTsyQkFBQyxVQUFVO3NUQS9FRSxjQUFjO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBbUVELFVBQVU7c0JBQTVCLFNBQVM7dUJBQUMsTUFBTTtnQkFDSSxXQUFXO3NCQUEvQixTQUFTO3VCQUFDLFFBQVE7Z0JBRUMsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNTLGNBQWM7c0JBQXhDLFNBQVM7dUJBQUMsY0FBYztnQkFpRXpCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBPbkluaXQsIE9uRGVzdHJveSwgSW5qZWN0LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFByb2dyZXNzQmFyTW9kZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7XHJcbiAgRGlhZ3JhbUNvbnN0cmFpbnRzLCBQb2ludFBvcnRNb2RlbCwgTm9kZUNvbnN0cmFpbnRzLCBTY3JvbGxTZXR0aW5nc01vZGVsLCBTZWxlY3Rvck1vZGVsLCBTZWxlY3RvckNvbnN0cmFpbnRzLFxyXG4gIFRvb2xCYXNlLCBEaWFncmFtLCBNb3VzZUV2ZW50QXJncywgQ29ubmVjdG9yTW9kZWwsIE5vZGVNb2RlbCwgU25hcFNldHRpbmdzTW9kZWwsIERpYWdyYW1Ub29scywgVGV4dE1vZGVsLCBDb25uZWN0b3JDb25zdHJhaW50cywgSVNlbGVjdGlvbkNoYW5nZUV2ZW50QXJncywgTGF5ZXJNb2RlbCwgQ29ubmVjdGlvblBvaW50T3JpZ2luLCBMYXlvdXRNb2RlbFxyXG59IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1kaWFncmFtcyc7XHJcbmltcG9ydCB7IElDaGFuZ2VkRXZlbnRBcmdzLCBSYW5nZU5hdmlnYXRvciB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1jaGFydHMnO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBHdWlkZVN0ZXAgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gJy4uL3V0aWxpdHktcmVmJztcclxuaW1wb3J0IHsgRG9jdW1lbnRJbmZvLCBTeXN0ZW1TZXJ2aWNlLCBSYW5nZUluZm8gfSBmcm9tICcuLi9zeXN0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3VpZGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9ndWlkZS9ndWlkZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gJy4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWYnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhZ3JhbUluZm8sIE1vdmVNb2RlbCwgTm9kZURhdGEsIFRpbWVsaW5lIH0gZnJvbSAnLi90aW1lbGluZSc7XHJcbmltcG9ydCB7IEVudGVyRXhpdFJpZ2h0IH0gZnJvbSAnLi4vLi4vY29yZS9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi8uLi9jb3JlL3BvcHVwL3BvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50RGF0YSwgVHJhY2VFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi90cmFjZS1lbGVtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeicsXHJcbiAgSlVNUF9QQVRIID0gJ00gNiwxOCAxNC41LDEyIDYsNiBaIE0gMTYsNiB2IDEyIGggMiBWIDYgWic7XHJcblxyXG5mdW5jdGlvbiBnZXRQb3J0cygpOiBQb2ludFBvcnRNb2RlbFtdIHtcclxuICByZXR1cm4gW1xyXG4gICAgeyBpZDogJ3BvcnQxJywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMCwgeTogMC41IH0gfSxcclxuICAgIHsgaWQ6ICdwb3J0MicsIHNoYXBlOiAnQ2lyY2xlJywgb2Zmc2V0OiB7IHg6IDAuNSwgeTogMSB9IH0sXHJcbiAgICB7IGlkOiAncG9ydDMnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAxLCB5OiAwLjUgfSB9LFxyXG4gICAgeyBpZDogJ3BvcnQ0Jywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMC41LCB5OiAwIH0gfVxyXG4gIF07XHJcbn1cclxuXHJcbmNsYXNzIEluZm9Ub29sIGV4dGVuZHMgVG9vbEJhc2Uge1xyXG4gIHB1YmxpYyBvdmVycmlkZSBtb3VzZURvd24oYXJnczogTW91c2VFdmVudEFyZ3MpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2RlcyEubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMubm9kZXMhWzBdO1xyXG4gICAgICBzdXBlci5tb3VzZURvd24oYXJncylcclxuICAgICAgdGhpcy50YXAubmV4dChub2RlKTtcclxuICAgICAgdGhpcy5pbkFjdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFncmFtOiBEaWFncmFtLCBwdWJsaWMgdGFwOiBTdWJqZWN0PE5vZGVNb2RlbD4pIHtcclxuICAgIHN1cGVyKGRpYWdyYW0uY29tbWFuZEhhbmRsZXIpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgU2VhcmNoTW9kZWwge1xyXG4gIHNlYXJjaD86IHN0cmluZywgZm9ybUlkPzogc3RyaW5nXHJcbn1cclxuLyoqICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC10cmFjZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtdHJhY2UuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbdHJpZ2dlcignZWxlbWVudCcsIEVudGVyRXhpdFJpZ2h0KV1cclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLXRyYWNlLXV0aWxpdHknIH0pXHJcbi8qKiB3b3JrZmxvdyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRUcmFjZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdkaWFncmFtJykgZGlhZ3JhbUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIHRoZW1lID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ01hdGVyaWFsM0RhcmsnIDogJ01hdGVyaWFsMyc7XHJcbiAgYWNjZW50ID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICBkaWFncmFtOiBEaWFncmFtO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cDxTZWFyY2hNb2RlbD4oe1xyXG4gICAgc2VhcmNoOiB1bmRlZmluZWQsXHJcbiAgICBmb3JtSWQ6IHVuZGVmaW5lZFxyXG4gIH0pO1xyXG4gIG1vZGVsOiBEaWFncmFtSW5mbztcclxuICB0aW1lbGluZTogVGltZWxpbmU7XHJcbiAgZGlhZ3JhbUNvbnN0cmFpbnRzOiBEaWFncmFtQ29uc3RyYWludHMgPSBEaWFncmFtQ29uc3RyYWludHMuRGVmYXVsdCB8IERpYWdyYW1Db25zdHJhaW50cy5CcmlkZ2luZyB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuTGluZVJvdXRpbmcgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbiB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuWm9vbTtcclxuICBkaWFncmFtVG9vbDogRGlhZ3JhbVRvb2xzID0gRGlhZ3JhbVRvb2xzLlNpbmdsZVNlbGVjdDtcclxuICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0ID0ge1xyXG4gICAgdHlwZTogJ0NvbXBsZXhIaWVyYXJjaGljYWxUcmVlJyxcclxuICAgIGNvbm5lY3Rpb25Qb2ludE9yaWdpbjogQ29ubmVjdGlvblBvaW50T3JpZ2luLkRpZmZlcmVudFBvaW50LFxyXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc6IDUwLFxyXG4gICAgZW5hYmxlUm91dGluZzogdHJ1ZSxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnQ2VudGVyJyxcclxuICAgIGNvbm5lY3Rpb25EaXJlY3Rpb246ICdPcmllbnRhdGlvbicsXHJcbiAgICBvcmllbnRhdGlvbjogJ1RvcFRvQm90dG9tJ1xyXG4gIH0gYXMgTGF5b3V0TW9kZWw7XHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzOiBTbmFwU2V0dGluZ3NNb2RlbCA9IHtcclxuICB9O1xyXG4gIHJlYWRvbmx5IHNjcm9sbFNldHRpbmdzOiBTY3JvbGxTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgbWluWm9vbTogLjUsXHJcbiAgICBtYXhab29tOiAyLjVcclxuICB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoODAwKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wcmltZXJ5Q29sb3IgPSB0aGlzLl9zZXNzaW9uLmdldFByaW1lcnkoKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtczogU2VsZWN0b3JNb2RlbCA9IHtcclxuICAgIGNvbnN0cmFpbnRzOiBTZWxlY3RvckNvbnN0cmFpbnRzLlVzZXJIYW5kbGUsXHJcbiAgICB1c2VySGFuZGxlczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2luZm8nLFxyXG4gICAgICAgIHBhdGhEYXRhOiAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBzaWRlOiAnUmlnaHQnLFxyXG4gICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnQm90dG9tJyxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgcGF0aENvbG9yOiB0aGlzLl9wcmltZXJ5Q29sb3IsXHJcbiAgICAgICAgc2l6ZTogNDAsXHJcbiAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCByaWdodDogMCB9XHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9O1xyXG4gIHB1YmxpYyBnZXRDdXN0b21Ub29sOiBGdW5jdGlvbiA9IHRoaXMuZ2V0VG9vbC5iaW5kKHRoaXMpO1xyXG4gIG5vZGU/OiBOb2RlTW9kZWw7XHJcbiAgcHJpdmF0ZSBfc3RhcnQ6IERhdGU7XHJcbiAgcHJpdmF0ZSBfZW5kOiBEYXRlO1xyXG4gIHByaXZhdGUgX2luZm9SZWY6IFBhbmVSZWY8VHJhY2VFbGVtZW50Q29tcG9uZW50PjtcclxuICBwdWJsaWMgZ2V0VG9vbChhY3Rpb246IHN0cmluZyk6IFRvb2xCYXNlIHwgbnVsbHtcclxuICAgIGxldCB0b29sOiBUb29sQmFzZTtcclxuICAgIGlmIChhY3Rpb24gPT09ICdpbmZvJykge1xyXG4gICAgICB0b29sID0gbmV3IEluZm9Ub29sKHRoaXMuZGlhZ3JhbSwgdGhpcy5fdGFwKTtcclxuICAgICAgcmV0dXJuIHRvb2w7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgbW9kZTogJ2RpYWdyYW0nIHwgJ2Jyb3dzZScgfCBudWxsID0gJ2Jyb3dzZSc7XHJcbiAgcmFuZ2U6IChEYXRlIHwgbnVtYmVyKVtdO1xyXG4gIHJhbmdlRGF0YTogUmFuZ2VJbmZvW107XHJcbiAgbG9hZGluZzogUHJvZ3Jlc3NCYXJNb2RlIHwgbnVsbCA9ICdxdWVyeSc7XHJcbiAgQFZpZXdDaGlsZCgnYXJncycpIGZpbHRlckFyZ3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoJykgc2VhcmNoSW5wdXQ6IE1hdElucHV0O1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxEb2N1bWVudEluZm8+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuICBAVmlld0NoaWxkKFJhbmdlTmF2aWdhdG9yKSByYW5nZU5hdmlnYXRvcjogUmFuZ2VOYXZpZ2F0b3I7XHJcbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyA9IFsnbnVtYmVyJywgJ3N1YmplY3QnLCAnc3RhdGVJZCddO1xyXG4gIHByaXZhdGUgX2hpZ2hMaWdodGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhcCA9IG5ldyBTdWJqZWN0PE5vZGVNb2RlbD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRlc2NoYW5nZSA9IG5ldyBTdWJqZWN0PHsgc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSB9PigpO1xyXG4gIC8qKiB3b3JrZmxvdyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFV0aWxpdHlSZWYpXHJcbiAgICBwcml2YXRlIF91dGlsaXR5UmVmOiBVdGlsaXR5UmVmPERpYWdyYW1JbmZvLCBNb3ZlTW9kZWwsIERpYWdyYW1JbmZvLCBudW1iZXI+LFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZjxEb2N1bWVudFRyYWNlQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BvcHVwOiBQb3B1cCxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3cgPSBkYXlqcygpO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICB0aGlzLnRoZW1lID0gdC5kYXJrID8gJ01hdGVyaWFsM0RhcmsnIDogJ01hdGVyaWFsMyc7XHJcbiAgICAgIHRoaXMuYWNjZW50ID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAgICAgLy90aGlzLnJhbmdlTmF2aWdhdG9yLnJlZnJlc2goKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2VydmljZS5yYW5nZSgpLnN1YnNjcmliZShyID0+IHRoaXMucmFuZ2VEYXRhID0gcik7XHJcbiAgICB0aGlzLl9kYXRlc2NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5fc3RhcnQgPSByLnN0YXJ0LCB0aGlzLl9lbmQgPSByLmVuZDtcclxuICAgICAgdGhpcy5fbGlzdCgpO1xyXG4gICAgfSk7XHJcbiAgICAvL2xldCByID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyYWNlLXJhbmdlJyk7XHJcblxyXG4gICAgdGhpcy5yYW5nZSA9IFtub3cuYWRkKC0yLCAndycpLnRvRGF0ZSgpLFxyXG4gICAgbm93LnRvRGF0ZSgpXTtcclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksIGRlYm91bmNlVGltZSgyMDApKS5cclxuICAgICAgc3Vic2NyaWJlKHRoaXMuX2xpc3QuYmluZCh0aGlzKSk7XHJcbiAgICB0aGlzLl9wYW5lLnF1ZXJ5UGFyYW1zQ2hhbmdlKCkuc3Vic2NyaWJlKHAgPT4ge1xyXG4gICAgICBjb25zdCB7IGRvY3VtZW50SWQgfSA9IHA7XHJcbiAgICAgIGRvY3VtZW50SWQgJiYgdGhpcy5fb3BlbigoZG9jdW1lbnRJZCBhcyBzdHJpbmcpLmRlY29kZUlkKCkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9wYW5lLnJlc2l6ZWQoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMuZGlhZ3JhbT8ucmVmcmVzaCgpXHJcbiAgICApO1xyXG4gIH1cclxuICBvcGVuRmlsdGVyKGV2dDogRXZlbnQpIHtcclxuICAgIHRoaXMuX3BvcHVwLm9wZW4odGhpcy5maWx0ZXJBcmdzLCBldnQudGFyZ2V0IGFzIEhUTUxCdXR0b25FbGVtZW50KS5vcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1cygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9ICdxdWVyeSc7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLmZpbmRBbGwoeyAuLi50aGlzLmZvcm0udmFsdWUsIHN0YXJ0OiB0aGlzLl9zdGFydCwgZW5kOiB0aGlzLl9lbmQgfSkuc3Vic2NyaWJlKGwgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKGwpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gbnVsbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJhbmdlQ2hhbmdlZChhcmdzOiBJQ2hhbmdlZEV2ZW50QXJncyk6IHZvaWQge1xyXG4gICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndHJhY2UtcmFuZ2UnLCBhcmdzLik7XHJcbiAgICB0aGlzLl9kYXRlc2NoYW5nZS5uZXh0KGFyZ3MgYXMgYW55KTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uZjEnLCBbJyRldmVudCddKVxyXG4gIGd1aWRlKGV2dD86IEV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3Qgc3RlcHM6IEd1aWRlU3RlcFtdID0gW107XHJcbiAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICBpZiAodGhpcy50aW1lbGluZS5pdGVtcy5sZW5ndGggPiAxKVxyXG4gICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgc2VsZWN0b3I6ICdbZGF0YS1oZWxwPXRpbWVsaW5lXScsXHJcbiAgICAgICAgICBjb250ZW50OiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdUcmFjZVRpbWVsaW5lSGVscCcpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgIHNlbGVjdG9yOiAnZ1tpZF49c3RhcnRdJyxcclxuICAgICAgICBjb250ZW50OiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdUcmFjZUVsZW1lbnRIZWxwJyksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBzdGVwcy5wdXNoKHtcclxuICAgICAgc2VsZWN0b3I6ICdbZGF0YS1oZWxwPXNlYXJjaF0nLFxyXG4gICAgICBwb3NpdGlvbjogJ0JlbG93JyxcclxuICAgICAgY29udGVudDogdGhpcy5fdHJhbnNsYXRlLmdldCgnVHJhY2VTZWFyY2hIZWxwJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZ3VpZGUuc3RhcnQoe1xyXG4gICAgICBuYW1lOiAndHJhY2UnLFxyXG4gICAgICBzdGVwc1xyXG4gICAgfSk7XHJcbiAgICBldnQgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIGJyb3dzZSgpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKTtcclxuICAgIHRoaXMubW9kZSA9ICdicm93c2UnO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29wZW4oaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5kaWFncmFtPy5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSAnYnVmZmVyJztcclxuICAgIHRoaXMuX3V0aWxpdHlSZWYucG9wdWxhdGUoaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGUgPT4ge1xyXG4gICAgICAgIHRoaXMuX2hpZ2hMaWdodGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IGU7XHJcbiAgICAgICAgdGhpcy5fdGltZWxpbmUoKTtcclxuICAgICAgICB0aGlzLm1vZGUgPSAnZGlhZ3JhbSc7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtID0gbmV3IERpYWdyYW0oe1xyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgICAgICBzbmFwU2V0dGluZ3M6IHRoaXMuc25hcFNldHRpbmdzLFxyXG4gICAgICAgICAgbGF5b3V0OiB0aGlzLmxheW91dCxcclxuICAgICAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cyxcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICAgIHRvb2w6IHRoaXMuZGlhZ3JhbVRvb2wsXHJcbiAgICAgICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMubm9kZURlZmF1bHRzLFxyXG4gICAgICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgICAgICBub2RlczogZS5kaWFncmFtLm5vZGVzLFxyXG4gICAgICAgICAgY29ubmVjdG9yczogZS5kaWFncmFtLmNvbm5lY3RvcnMsXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2U6IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICB9LCB0aGlzLmRpYWdyYW1FbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuX3ZlcnNpb24oKTtcclxuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG5cclxuICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3NiLmVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBub2RlRGVmYXVsdHMgPSAobm9kZTogTm9kZU1vZGVsKTogTm9kZU1vZGVsID0+IHtcclxuICAgIGNvbnN0IHsgaW5kaWNhdG9yIH0gPSBub2RlLmFkZEluZm8gYXMgTm9kZURhdGEgfHwge307XHJcblxyXG4gICAgaWYgKGluZGljYXRvcikge1xyXG4gICAgICBub2RlLmNvbnN0cmFpbnRzID0gTm9kZUNvbnN0cmFpbnRzLlBvaW50ZXJFdmVudHMgfCBOb2RlQ29uc3RyYWludHMuVG9vbHRpcCxcclxuICAgICAgICBub2RlLnN0eWxlIS5zdHJva2VXaWR0aCA9IDAsXHJcbiAgICAgICAgbm9kZS53aWR0aCA9IG5vZGUuaGVpZ2h0ID0gMTU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLmlkICE9PSAndmVyc2lvbicpIHtcclxuICAgICAgbm9kZS5jb25zdHJhaW50cyA9IE5vZGVDb25zdHJhaW50cy5JbkNvbm5lY3QgfCBOb2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdCB8XHJcbiAgICAgICAgTm9kZUNvbnN0cmFpbnRzLlBvaW50ZXJFdmVudHMgfCBOb2RlQ29uc3RyYWludHMuU2VsZWN0O1xyXG4gICAgICB0aGlzLl9kZWNvcmF0ZU5vZGUobm9kZSk7XHJcbiAgICAgIG5vZGUucG9ydHMgPSBnZXRQb3J0cygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBjb25uRGVmYXVsdHMgPSAoY29ubmVjdG9yOiBDb25uZWN0b3JNb2RlbCkgPT4ge1xyXG4gICAgY29ubmVjdG9yLmNvbnN0cmFpbnRzID0gQ29ubmVjdG9yQ29uc3RyYWludHMuUmVhZE9ubHkgJiB+Q29ubmVjdG9yQ29uc3RyYWludHMuU2VsZWN0O1xyXG5cclxuICAgIHRoaXMuX2RlY29yYXRlQ29ubmVjdG9yKGNvbm5lY3Rvcik7XHJcbiAgfVxyXG4gIG9wZW4oaXRlbTogRG9jdW1lbnRJbmZvKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHsgcXVlcnlQYXJhbXM6IHsgZG9jdW1lbnRJZDogaXRlbS5pZC5lbmNvZGVJZCgpIH0gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90aW1lbGluZSgpIHtcclxuICAgIGNvbnN0IGl0ZW1zIDp7XHJcbiAgICAgIHRpbWU/OiBEYXRlO1xyXG4gICAgdXNlcklkID86IHN0cmluZztcclxuICAgIHN0YXRlID86IHN0cmluZztcclxuICB9IFtdID0gW10sIHN1Ym1pc3Npb25zOiBEYXRlW10gPSBbXTtcclxuICAgIGxldCBtaW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkLCBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkLCBlc3RpbWF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIGZvcihsZXQgbCBvZiBcclxuICAgICAgdGhpcy5tb2RlbC5sb2cpIHtcclxuICAgICAgY29uc3QgeyB0aW1lLCB1c2VySWQgfSA9IGw7XHJcbiAgICAgIHN3aXRjaCAobC50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnU3VibWl0JzpcclxuICAgICAgICAgIHN1Ym1pc3Npb25zLnB1c2godGltZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaXRlbXMuZmluZCh0ID0+IHQudGltZSA9PT0gdGltZSkpXHJcbiAgICAgICAgaXRlbXMucHVzaCh7IHRpbWUsIHVzZXJJZCB9KTtcclxuICAgICAgaWYgKCFtaW5EYXRlIHx8IGRheWpzKHRpbWUpLmlzQmVmb3JlKG1pbkRhdGUpKSBtaW5EYXRlID0gdGltZTtcclxuICAgICAgaWYgKCFtYXhEYXRlIHx8IGRheWpzKHRpbWUpLmlzQWZ0ZXIobWF4RGF0ZSkpIG1heERhdGUgPSB0aW1lO1xyXG4gICAgICBpZiAobC5lc3RpbWF0ZSkgZXN0aW1hdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aW1lbGluZSA9IHtcclxuICAgICAgaXRlbXMsIG1pbkRhdGUsIG1heERhdGUsXHJcbiAgICAgIHN1Ym1pc3Npb25zLCBlc3RpbWF0ZVxyXG4gICAgfSBhcyBhbnk7XHJcbiAgICB0aGlzLl9zY29wZShzdWJtaXNzaW9uc1tzdWJtaXNzaW9ucy5sZW5ndGggLSAxXSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBkYXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2NvcGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy50aW1lbGluZS5zdWJtaXNzaW9ucy5yZXZlcnNlKCkuXHJcbiAgICAgIGZpbmQocyA9PiBzIDw9IGRhdGUpISxcclxuICAgICAgbmV4dERhdGUgPSB0aGlzLnRpbWVsaW5lLnN1Ym1pc3Npb25zLmZpbmQocyA9PiBzID4gZGF0ZSksXHJcbiAgICAgIGVuZERhdGUgPSBuZXh0RGF0ZSA/IG5ldyBEYXRlKG5ldyBEYXRlKG5leHREYXRlKS52YWx1ZU9mKCkgLSAxKS50b0pTT04oKSBhcyBhbnkgOiB0aGlzLnRpbWVsaW5lLm1heERhdGU7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMudGltZWxpbmUsIHtcclxuICAgICAgc3RhcnREYXRlLFxyXG4gICAgICBlbmREYXRlLFxyXG4gICAgICByZWNpcGllbnRzOiB0aGlzLm1vZGVsLnJlY2lwaWVudHMuZmlsdGVyKHIgPT4gci5yZWNlaXZlZCA+PSBzdGFydERhdGUgJiYgci5yZWNlaXZlZCA8PSBlbmREYXRlKSxcclxuICAgICAgbG9nOiB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPj0gc3RhcnREYXRlICYmIGwudGltZSA8PSBlbmREYXRlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luZGljYXRvcnMoKSB7XHJcbiAgICBjb25zdCBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSA9IFtdO1xyXG4gICAgdGhpcy5tb2RlbC5sb2cuZm9yRWFjaChsID0+IHtcclxuICAgICAgc3dpdGNoIChsLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdOb2RlJzpcclxuICAgICAgICAgIGlmIChsLmVycm9yKVxyXG4gICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBXQVJOTklOR19QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246ICdYTWluWU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGwuZXJyb3IsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ0JvdHRvbUNlbnRlcidcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBsLm5vZGVJZFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdOb2RlSnVtcCc6XHJcbiAgICAgICAgICAvL2luZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAvLyAgc2hhcGU6IHtcclxuICAgICAgICAgIC8vICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgIC8vICAgIGRhdGE6IEpVTVBfUEFUSCxcclxuICAgICAgICAgIC8vICAgIGFsaWduOiAnWE1pbllNYXgnXHJcbiAgICAgICAgICAvLyAgfSxcclxuICAgICAgICAgIC8vICBzdHlsZToge1xyXG4gICAgICAgICAgLy8gICAgZmlsbDogJ2JsYWNrJ1xyXG4gICAgICAgICAgLy8gIH0sXHJcbiAgICAgICAgICAvLyAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgLy8gICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgLy8gICAgcGFyZW50SWQ6IGwubm9kZUlkXHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgICAgLy99KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhZ3JhbS5yZW1vdmVMYXllcignaW5kaWNhdG9ycycpO1xyXG4gICAgaW5kaWNhdG9ycy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgoaS5hZGRJbmZvIGFzIE5vZGVEYXRhKS5wYXJlbnRJZCEpO1xyXG4gICAgICBpLm9mZnNldFggPSBwYXJlbnQub2Zmc2V0WCEgKyBwYXJlbnQud2lkdGghIC8gMiAtIDE1LFxyXG4gICAgICAgIGkub2Zmc2V0WSA9IHBhcmVudC5vZmZzZXRZISArIHBhcmVudC5oZWlnaHQhIC8gMiAtIDE1O1xyXG4gICAgICB0aGlzLmRpYWdyYW0uYWRkKGkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uYWRkTGF5ZXIoeyBpZDogJ2luZGljYXRvcnMnIH0sIGluZGljYXRvcnMpO1xyXG4gIH1cclxuICBwcml2YXRlIF9kZWNvcmF0ZU5vZGUobm9kZTogTm9kZU1vZGVsKSB7XHJcbiAgICBjb25zdCBsb2cgPSB0aGlzLnRpbWVsaW5lLmxvZy5maWx0ZXIociA9PiByLm5vZGVJZCA9PT0gbm9kZS5pZCk7XHJcblxyXG4gICAgaWYgKGxvZy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMudGltZWxpbmUucmVjaXBpZW50cy5maWx0ZXIociA9PiByLm5vZGVJZCA9PT0gbm9kZS5pZCk7XHJcblxyXG4gICAgICBub2RlLnN0eWxlIS5zdHJva2VDb2xvciA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICBub2RlLnN0eWxlIS5zdHJva2VEYXNoQXJyYXkgPSBsb2cuZmluZChsID0+IGwuZXN0aW1hdGUpID8gJzMgMicgOiAnJztcclxuXHJcbiAgICAgIG5vZGUuc3R5bGUhLmZpbGwgPSByZWNpcGllbnRzLmZpbmQociA9PiByLnBlbmRpbmcgJiYgIXIuZXN0aW1hdGUpID8gdGhpcy5fYWNjZW50Q29sb3IgOiAnd2hpdGUnO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBub2RlLnN0eWxlIS5maWxsID0gJ3doaXRlJyxcclxuICAgICAgICBub2RlLnN0eWxlIS5zdHJva2VDb2xvciA9ICdkYXJrZ3JheScsXHJcbiAgICAgICAgbm9kZS5zdHlsZSEuc3Ryb2tlRGFzaEFycmF5ID0gJzYgMic7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RlY29yYXRlQ29ubmVjdG9yKGNvbm5lY3RvcjogQ29ubmVjdG9yTW9kZWwpIHtcclxuICAgIGNvbnN0IGxvZyA9IHRoaXMudGltZWxpbmUubG9nLmZpbHRlcihsID0+IGwuc291cmNlSWQgPT09IGNvbm5lY3Rvci5zb3VyY2VJRCAmJiBsLnRhcmdldElkID09IGNvbm5lY3Rvci50YXJnZXRJRCk7XHJcblxyXG4gICAgaWYgKGxvZy5sZW5ndGgpIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlIS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3IhLnN0eWxlIS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3IhLnN0eWxlIS5maWxsID1cclxuICAgICAgICB0aGlzLl9hY2NlbnRDb2xvcjtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlIS5zdHJva2VEYXNoQXJyYXkgPSBsb2cuZmluZChsID0+IGwuZXN0aW1hdGUpID8gJzMgMicgOiAnJztcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgY29ubmVjdG9yLnN0eWxlIS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3IhLnN0eWxlIS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3IhLnN0eWxlIS5maWxsID0gJ2RhcmtncmF5JyxcclxuICAgICAgICBjb25uZWN0b3Iuc3R5bGUhLnN0cm9rZURhc2hBcnJheSA9ICc2IDInO1xyXG4gIH1cclxuICBwcml2YXRlIF92ZXJzaW9uKCkge1xyXG4gICAgdGhpcy5kaWFncmFtLnJlbW92ZUxheWVyKFxyXG4gICAgICAndmVyc2lvbicpO1xyXG4gICAgY29uc3QgdmVyc2lvbiA9IHtcclxuICAgICAgaWQ6ICd2ZXJzaW9uJyxcclxuICAgICAgc2hhcGU6IHtcclxuICAgICAgICB0eXBlOiAnVGV4dCcsXHJcbiAgICAgICAgY29udGVudDogdGhpcy5fdHJhbnNsYXRlLmdldCgnRGlhZ3JhbVZlcnNpb24nLCB0aGlzLm1vZGVsLmRpYWdyYW0udmVyc2lvbilcclxuICAgICAgfSxcclxuICAgICAgb2Zmc2V0WTogNSxcclxuICAgICAgb2Zmc2V0WDogNSxcclxuICAgICAgc3R5bGU6IHtcclxuICAgICAgICBmb250U2l6ZTogNTAsXHJcbiAgICAgICAgb3BhY2l0eTogLjFcclxuICAgICAgfSxcclxuICAgICAgY29uc3RyYWludHM6IE5vZGVDb25zdHJhaW50cy5SZWFkT25seVxyXG4gICAgfSBhcyBUZXh0TW9kZWw7XHJcbiAgICB0aGlzLmRpYWdyYW0uYWRkTGF5ZXIoe1xyXG4gICAgICBpZDogJ3ZlcnNpb24nLFxyXG4gICAgICBvYmplY3RzOiBbXHJcbiAgICAgICAgdmVyc2lvbl1cclxuICAgIH0gYXMgTGF5ZXJNb2RlbCk7XHJcbiAgICB0aGlzLmRpYWdyYW0uYWRkKHZlcnNpb24pO1xyXG4gIH1cclxuICBzZWxlY3Rpb25DaGFuZ2UoZXZ0OiBJU2VsZWN0aW9uQ2hhbmdlRXZlbnRBcmdzKSB7XHJcbiAgICBpZiAoZXZ0LnN0YXRlICE9PSAnQ2hhbmdlZCcpIHJldHVybjtcclxuICAgIHRoaXMuX3VuaGlnaGxpZ2h0KCk7XHJcbiAgICBpZiAoZXZ0Lm5ld1ZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBsZXQgbm9kZSA9IGV2dC5uZXdWYWx1ZVswXSBhcyBOb2RlTW9kZWw7XHJcblxyXG4gICAgICBjb25zdCB7IGluZGljYXRvciwgcGFyZW50SWQgfSA9IG5vZGUuYWRkSW5mbyBhcyBOb2RlRGF0YSB8fCB7fTtcclxuXHJcbiAgICAgIGlmIChpbmRpY2F0b3IpIHtcclxuICAgICAgICBub2RlID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QocGFyZW50SWQhKTtcclxuICAgICAgICB0aGlzLmRpYWdyYW0uc2VsZWN0KFtub2RlXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gKChub2RlIGFzIGFueSkuaW5FZGdlcykuY29uY2F0KChub2RlIGFzIGFueSkub3V0RWRnZXMpO1xyXG4gICAgICAgIGlkcy5wdXNoKG5vZGUuaWQpO1xyXG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodChpZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmZvUmVmKSB0aGlzLl9pbmZvUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFRyYWNlRWxlbWVudENvbXBvbmVudCwge1xyXG4gICAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgdGltZWxpbmU6IHRoaXMudGltZWxpbmUsXHJcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxyXG4gICAgICAgICAgICB1dGlsaXR5UmVmOiB0aGlzLl91dGlsaXR5UmVmLFxyXG4gICAgICAgICAgfSBhcyBFbGVtZW50RGF0YSxcclxuICAgICAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWJcclxuICAgICAgICB9KS50aGVuKChlOiBQYW5lUmVmKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9pbmZvUmVmID0gZTtcclxuICAgICAgICAgIGUuYW5pbWF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub2RlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBwdWJsaWMgaGlnaGxpZ2h0VGltZSh0aW1lOiBEYXRlKSB7XHJcbiAgICB0aGlzLnRpbWVsaW5lLmRhdGUgPSB0aW1lO1xyXG4gICAgdGhpcy5kaWFncmFtLmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICB0aGlzLl91bmhpZ2hsaWdodCgpO1xyXG4gICAgaWYgKHRpbWUgPCB0aGlzLnRpbWVsaW5lLnN0YXJ0RGF0ZSB8fCB0aW1lID4gdGhpcy50aW1lbGluZS5lbmREYXRlKSB7XHJcbiAgICAgIHRoaXMuX3Njb3BlKHRpbWUpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGlhZ3JhbS5ub2Rlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9kZWNvcmF0ZU5vZGUodGhpcy5kaWFncmFtLm5vZGVzW2ldKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRpYWdyYW0uY29ubmVjdG9ycy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9kZWNvcmF0ZUNvbm5lY3Rvcih0aGlzLmRpYWdyYW0uY29ubmVjdG9yc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWRzID0gdGhpcy50aW1lbGluZS5sb2cuXHJcbiAgICAgIGZpbHRlcihsID0+IGwubm9kZUlkICYmIGwudGltZSA9PT0gdGltZSkuXHJcbiAgICAgIG1hcChsID0+IGwubm9kZUlkISkuXHJcbiAgICAgIGZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKTtcclxuXHJcbiAgICB0aGlzLl9oaWdobGlnaHQoaWRzKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gIH1cclxuXHJcbiAgcGFuKCkge1xyXG4gICAgdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzID0gdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbjtcclxuICAgIHRoaXMuZGlhZ3JhbS50b29sID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgfVxyXG4gIGN1cnNvcigpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyA9IHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyAmIH5EaWFncmFtQ29uc3RyYWludHMuUGFuO1xyXG4gICAgdGhpcy5kaWFncmFtLnRvb2wgPSBEaWFncmFtVG9vbHMuU2luZ2xlU2VsZWN0O1xyXG4gIH1cclxuICBwcml2YXRlIF9oaWdobGlnaHQoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgb2JqID0gdGhpcy5kaWFncmFtLmdldE9iamVjdChpZHNbaV0pIGFzIGFueTtcclxuICAgICAgaWYgKG9iai5zb3VyY2VJRClcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPVxyXG4gICAgICAgICAgb2JqLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgICBvYmoudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLmZpbGwgPSB0aGlzLl9wcmltZXJ5Q29sb3I7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9wcmltZXJ5Q29sb3I7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9oaWdoTGlnaHRlZElkcyA9IGlkcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VuaGlnaGxpZ2h0KCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gdGhpcy5faGlnaExpZ2h0ZWRJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3Qgb2JqID0gdGhpcy5kaWFncmFtLmdldE9iamVjdCh0aGlzLl9oaWdoTGlnaHRlZElkc1tpXSkgYXMgYW55O1xyXG4gICAgICBpZiAob2JqLnNvdXJjZUlEKVxyXG4gICAgICAgIHRoaXMuX2RlY29yYXRlQ29ubmVjdG9yKG9iaik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9kZWNvcmF0ZU5vZGUob2JqKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2hpZ2hMaWdodGVkSWRzID0gW107XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIkBzd2l0Y2ggKG1vZGUpIHtcclxuPCEtLSBkaWFncmFtIC0tPlxyXG4gIEBjYXNlICgnZGlhZ3JhbScpIHtcclxuPGRpdiBjbGFzcz1cImNvbHVtbiBmbGV4XCI+XHJcbiAgPG1hdC10b29sYmFyPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImJyb3dzZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2JhY2s8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgfFxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBhbigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1BhbicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1wYW5cIj48L3NwYW4+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY3Vyc29yKClcIiBbYml6ZG9jVG9vbHRpcF09XCInQ3Vyc29yJyB8IHRyYW5zbGF0ZVwiPjxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLWN1cnNvclwiPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPC9tYXQtdG9vbGJhcj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGZsZXhcIj5cclxuICAgIDwhLS0gdGltZWxpbmUgLS0+XHJcbiAgICBAaWYgKHRpbWVsaW5lPy5pdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmVcIiBkYXRhLWhlbHA9XCJ0aW1lbGluZVwiPlxyXG4gICAgICBAZm9yIChkYXRlIG9mIHRpbWVsaW5lLml0ZW1zOyB0cmFjayBkYXRlOyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCJcclxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImRhdGUudGltZSA9PT0gdGltZWxpbmUuZGF0ZVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cImhpZ2hsaWdodFRpbWUoZGF0ZS50aW1lKVwiIG1hdFJpcHBsZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgIEBpZiAoIWxhc3QgfHwgIXRpbWVsaW5lLmVzdGltYXRlKSB7XHJcbiAgICAgICAgICBAaWYgKGRhdGUudXNlcklkKSB7XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIndob1wiPlxyXG4gICAgICAgICAgICB7e2RhdGUudXNlcklkIHwgdXNlck5hbWUgfCBhc3luYyB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVcIj5cclxuICAgICAgICAgICAge3tkYXRlLnRpbWUgfCBhbURhdGVGb3JtYXQ6ICdNTU0gRG8gSDptbScgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAge3snRXN0aW1hdGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvclwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICNkaWFncmFtIGRpcj1cImx0clwiPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gIH1cclxuPCEtLSBicm93c2UgLS0+XHJcbiAgQGRlZmF1bHQge1xyXG48ZGl2IGNsYXNzPVwiZmxleCBjb2x1bW4gZmlsbFwiPlxyXG4gIDxtYXQtdG9vbGJhciBjbGFzcz1cInJvd1wiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5GaWx0ZXIoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidGaWx0ZXInfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5maWx0ZXJfbGlzdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPC9tYXQtdG9vbGJhcj5cclxuICA8bWF0LXByb2dyZXNzLWJhciBbbW9kZV09XCJsb2FkaW5nXCIgW3N0eWxlLnZpc2liaWxpdHldPVwibG9hZGluZyA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICA8IS0tIHRhYmxlIC0tPlxyXG4gIDxtYXQtdGFibGUgY2xhc3M9XCJmbGV4XCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG1hdFNvcnQ+XHJcbiAgICA8IS0tIE51bWJlciBjb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm51bWJlclwiPlxyXG4gICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydOdW1iZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5udW1iZXJ9fSA8L21hdC1jZWxsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIFN1YmplY3QgY29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdWJqZWN0XCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1N1YmplY3QnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5zdWJqZWN0fX0gPC9tYXQtY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBTdGF0ZUlkIGNvbHVtbiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdGVJZFwiPlxyXG4gICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cInN0YXRlSWRcIj57eydTdGF0dXMnIHwgdHJhbnNsYXRlIH19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxyXG4gICAgICAgIDxiaXpkb2Mtc3RhdHVzIFtzdGF0ZUlkXT1cIml0ZW0uc3RhdGVJZFwiPjwvYml6ZG9jLXN0YXR1cz5cclxuICAgICAgPC9tYXQtY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L21hdC1oZWFkZXItcm93PlxyXG4gICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBpdGVtOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwib3BlbihpdGVtKVwiPlxyXG4gICAgPC9tYXQtcm93PlxyXG4gIDwvbWF0LXRhYmxlPlxyXG4gIDwhLS0gcmFuZ2UgLS0+XHJcbiAgPGVqcy1yYW5nZW5hdmlnYXRvciB2YWx1ZVR5cGU9J0RhdGVUaW1lJyBbdmFsdWVdPXJhbmdlIGxhYmVsRm9ybWF0PSdNTU0nIGJhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwidGhlbWVcIiBsYWJlbEludGVyc2VjdEFjdGlvbj0nSGlkZScgZW5hYmxlR3JvdXBpbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5PVwiWWVhcnNcIiBpbnRlcnZhbFR5cGU9J01vbnRocydcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT0ncmFuZ2VDaGFuZ2VkKCRldmVudCknPlxyXG4gICAgPGUtcmFuZ2VuYXZpZ2F0b3Itc2VyaWVzLWNvbGxlY3Rpb24+XHJcbiAgICAgIDxlLXJhbmdlbmF2aWdhdG9yLXNlcmllcyBbZGF0YVNvdXJjZV09J3JhbmdlRGF0YScgW2ZpbGxdPVwiYWNjZW50XCIgdHlwZT0nQXJlYScgeE5hbWU9J2RhdGUnIHlOYW1lPSdjb3VudCcgd2lkdGg9Mj5cclxuICAgICAgPC9lLXJhbmdlbmF2aWdhdG9yLXNlcmllcz5cclxuICAgIDwvZS1yYW5nZW5hdmlnYXRvci1zZXJpZXMtY29sbGVjdGlvbj5cclxuICA8L2Vqcy1yYW5nZW5hdmlnYXRvcj5cclxuPC9kaXY+XHJcbiAgfVxyXG59XHJcbjwhLS0gYXJncyAtLT5cclxuPG5nLXRlbXBsYXRlICNhcmdzPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uIGdhcFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJzZWFyY2hcIiAjc2VhcmNoIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIGRhdGEtaGVscD1cInNlYXJjaFwiIFtwbGFjZWhvbGRlcl09XCInTnVtYmVyJ3x0cmFuc2xhdGVcIiAvPlxyXG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4IGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgPGJpemRvYy1zZWxlY3QgdHlwZT1cImZvcm1zXCIgW3BsYWNlaG9sZGVyXT1cIidGb3JtJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJmb3JtSWRcIj48L2JpemRvYy1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNlc3RpbWF0ZT5cclxuICB7eydFc3RpbWF0ZScgfCB0cmFuc2xhdGV9fVxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=