@bizdoc/core 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/assets/bizdoc-schema.json +15 -0
  2. package/assets/themes/brown.min.css +1 -1
  3. package/assets/themes/dark.min.css +1 -1
  4. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  5. package/assets/themes/deep-purple-teal.min.css +1 -1
  6. package/assets/themes/default.min.css +1 -1
  7. package/assets/themes/green.min.css +1 -1
  8. package/assets/themes/indigo.min.css +1 -1
  9. package/esm2022/lib/admin/admin-dismiss.service.mjs +3 -3
  10. package/esm2022/lib/admin/admin-menu.component.mjs +3 -3
  11. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +3 -3
  12. package/esm2022/lib/admin/architecture/designer-element.component.mjs +15 -15
  13. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +3 -3
  14. package/esm2022/lib/admin/architecture/designer.base.mjs +9 -9
  15. package/esm2022/lib/admin/architecture/designer.component.mjs +4 -4
  16. package/esm2022/lib/admin/architecture/elements/action.component.mjs +3 -3
  17. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +3 -3
  18. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +3 -3
  19. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +3 -3
  20. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +3 -3
  21. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +3 -3
  22. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +3 -3
  23. package/esm2022/lib/admin/architecture/elements/control.component.mjs +3 -3
  24. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +3 -3
  25. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +3 -3
  26. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +3 -3
  27. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +3 -3
  28. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +3 -3
  29. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +3 -3
  30. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +3 -3
  31. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +3 -3
  32. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +3 -3
  33. package/esm2022/lib/admin/architecture/elements/form.component.mjs +3 -3
  34. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +3 -3
  35. package/esm2022/lib/admin/architecture/elements/job.component.mjs +3 -3
  36. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +3 -3
  37. package/esm2022/lib/admin/architecture/elements/node.component.mjs +3 -3
  38. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +3 -3
  39. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +3 -3
  40. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +3 -3
  41. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +3 -3
  42. package/esm2022/lib/admin/architecture/elements/policy.component.mjs +3 -3
  43. package/esm2022/lib/admin/architecture/elements/report.component.mjs +3 -3
  44. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +3 -3
  45. package/esm2022/lib/admin/architecture/elements/role.component.mjs +3 -3
  46. package/esm2022/lib/admin/architecture/elements/rule.component.mjs +3 -3
  47. package/esm2022/lib/admin/architecture/elements/source.component.mjs +3 -3
  48. package/esm2022/lib/admin/architecture/elements/state.component.mjs +3 -3
  49. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +3 -3
  50. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +3 -3
  51. package/esm2022/lib/admin/architecture/elements/type.component.mjs +3 -3
  52. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +3 -3
  53. package/esm2022/lib/admin/architecture/elements/utility.component.mjs +3 -3
  54. package/esm2022/lib/admin/architecture/elements/view.component.mjs +3 -3
  55. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +3 -3
  56. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +3 -3
  57. package/esm2022/lib/admin/core/ace.input.mjs +3 -3
  58. package/esm2022/lib/admin/core/color-picker.input.mjs +3 -3
  59. package/esm2022/lib/admin/core/localized-string.component.mjs +3 -3
  60. package/esm2022/lib/admin/core/search.input.mjs +3 -3
  61. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +3 -3
  62. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +3 -3
  63. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  64. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +3 -3
  65. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +3 -3
  66. package/esm2022/lib/admin/form/designer/design-control.component.mjs +3 -3
  67. package/esm2022/lib/admin/form/designer/properties.component.mjs +3 -3
  68. package/esm2022/lib/admin/form/designer/section.component.mjs +3 -3
  69. package/esm2022/lib/admin/form/designer/settings.component.mjs +3 -3
  70. package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -3
  71. package/esm2022/lib/admin/form/workflow/node.component.mjs +3 -3
  72. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +3 -3
  73. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
  74. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  75. package/esm2022/lib/admin/patterns/patterns.component.mjs +3 -3
  76. package/esm2022/lib/admin/permissions/permissions.component.mjs +3 -3
  77. package/esm2022/lib/admin/positions/positions-popup.component.mjs +3 -3
  78. package/esm2022/lib/admin/positions/positions.component.mjs +3 -3
  79. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +3 -3
  80. package/esm2022/lib/admin/profiler/profiler.component.mjs +3 -3
  81. package/esm2022/lib/admin/system.service.mjs +3 -3
  82. package/esm2022/lib/admin/utility-wrapper.component.mjs +3 -3
  83. package/esm2022/lib/admin/utility.pane.component.mjs +3 -3
  84. package/esm2022/lib/app.component.mjs +6 -6
  85. package/esm2022/lib/bizdoc.module.mjs +4 -4
  86. package/esm2022/lib/browse/browse-items.component.mjs +4 -4
  87. package/esm2022/lib/browse/browse.mobile.component.mjs +3 -3
  88. package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
  89. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
  90. package/esm2022/lib/browse/filter/filter.component.mjs +3 -3
  91. package/esm2022/lib/browse/folders-menu.component.mjs +4 -4
  92. package/esm2022/lib/chat/chat-info.mjs +3 -3
  93. package/esm2022/lib/chat/chat.mobile.component.mjs +3 -3
  94. package/esm2022/lib/chat/chat.service.mjs +3 -3
  95. package/esm2022/lib/chat/contacts.component.mjs +6 -6
  96. package/esm2022/lib/chat/contacts.pane.component.mjs +3 -3
  97. package/esm2022/lib/chat/conversation.component.mjs +3 -3
  98. package/esm2022/lib/chat/conversation.pane.component.mjs +3 -3
  99. package/esm2022/lib/compose/action/action-picker.component.mjs +3 -3
  100. package/esm2022/lib/compose/action/action.dialog.mjs +3 -3
  101. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  102. package/esm2022/lib/compose/action/assign-action.component.mjs +3 -3
  103. package/esm2022/lib/compose/action/moveto-action.component.mjs +3 -3
  104. package/esm2022/lib/compose/action/return-action.component.mjs +3 -3
  105. package/esm2022/lib/compose/attachments/attachments.component.mjs +3 -3
  106. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  107. package/esm2022/lib/compose/attachments/progress-button.directive.mjs +3 -3
  108. package/esm2022/lib/compose/box/box.component.mjs +3 -3
  109. package/esm2022/lib/compose/box/control.component.mjs +3 -3
  110. package/esm2022/lib/compose/box/row.component.mjs +3 -3
  111. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +3 -3
  112. package/esm2022/lib/compose/comments/comment.component.mjs +3 -3
  113. package/esm2022/lib/compose/comments/comments.component.mjs +3 -3
  114. package/esm2022/lib/compose/comments/comments.pane.component.mjs +3 -3
  115. package/esm2022/lib/compose/comments/edit-comment.component.mjs +3 -3
  116. package/esm2022/lib/compose/comments/edits.component.mjs +3 -3
  117. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  118. package/esm2022/lib/compose/comments/votes.component.mjs +3 -3
  119. package/esm2022/lib/compose/compose-resolve.service.mjs +3 -3
  120. package/esm2022/lib/compose/compose.mobile.component.mjs +3 -3
  121. package/esm2022/lib/compose/compose.pane.component.mjs +3 -3
  122. package/esm2022/lib/compose/copy/copy.dialog.mjs +3 -3
  123. package/esm2022/lib/compose/dismiss.service.mjs +3 -3
  124. package/esm2022/lib/compose/document-resolve.service.mjs +3 -3
  125. package/esm2022/lib/compose/document-resolver.service.mjs +3 -3
  126. package/esm2022/lib/compose/document.component.mjs +3 -3
  127. package/esm2022/lib/compose/document.mobile.component.mjs +3 -3
  128. package/esm2022/lib/compose/document.pane.component.mjs +3 -3
  129. package/esm2022/lib/compose/events/events.component.mjs +3 -3
  130. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  131. package/esm2022/lib/compose/form.component.mjs +5 -5
  132. package/esm2022/lib/compose/new-menu.component.mjs +3 -3
  133. package/esm2022/lib/compose/overlay.component.exp.mjs +3 -3
  134. package/esm2022/lib/compose/privilage.directive.mjs +6 -6
  135. package/esm2022/lib/compose/recipient-resolver.service.mjs +3 -3
  136. package/esm2022/lib/compose/state.component.mjs +3 -3
  137. package/esm2022/lib/compose/tag/tags.component.mjs +3 -3
  138. package/esm2022/lib/compose/trace/flow.component.mjs +3 -3
  139. package/esm2022/lib/compose/trace/people.component.mjs +3 -3
  140. package/esm2022/lib/compose/trace/trace.base.mjs +3 -3
  141. package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
  142. package/esm2022/lib/compose/trace/trace.pane.component.mjs +3 -3
  143. package/esm2022/lib/compose/version-compare/version-compare.component.mjs +3 -3
  144. package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  145. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +3 -3
  146. package/esm2022/lib/core/account.service.mjs +3 -3
  147. package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  148. package/esm2022/lib/core/avatar/avatar.component.mjs +3 -3
  149. package/esm2022/lib/core/base.mjs +1 -1
  150. package/esm2022/lib/core/checkbox.mjs +3 -3
  151. package/esm2022/lib/core/component-factory-resolver.mjs +3 -3
  152. package/esm2022/lib/core/datasource.service.mjs +3 -3
  153. package/esm2022/lib/core/document-factory.service.mjs +3 -3
  154. package/esm2022/lib/core/fields/address.designer.mjs +3 -3
  155. package/esm2022/lib/core/fields/address.field.mjs +3 -3
  156. package/esm2022/lib/core/fields/autocomplete.field.mjs +6 -6
  157. package/esm2022/lib/core/fields/axes-picker.designer.mjs +3 -3
  158. package/esm2022/lib/core/fields/axes-picker.field.mjs +3 -3
  159. package/esm2022/lib/core/fields/checkbox.designer.mjs +3 -3
  160. package/esm2022/lib/core/fields/checkbox.field.mjs +3 -3
  161. package/esm2022/lib/core/fields/checklist.designer.mjs +3 -3
  162. package/esm2022/lib/core/fields/checklist.field.mjs +3 -3
  163. package/esm2022/lib/core/fields/date-range.designer.mjs +3 -3
  164. package/esm2022/lib/core/fields/date-range.field.mjs +3 -3
  165. package/esm2022/lib/core/fields/date.designer.mjs +3 -3
  166. package/esm2022/lib/core/fields/date.field.mjs +3 -3
  167. package/esm2022/lib/core/fields/expression.field.mjs +6 -6
  168. package/esm2022/lib/core/fields/file.designer.mjs +3 -3
  169. package/esm2022/lib/core/fields/file.field.mjs +3 -3
  170. package/esm2022/lib/core/fields/html.designer.mjs +3 -3
  171. package/esm2022/lib/core/fields/html.field.mjs +3 -3
  172. package/esm2022/lib/core/fields/input.designer.mjs +3 -3
  173. package/esm2022/lib/core/fields/input.field.mjs +3 -3
  174. package/esm2022/lib/core/fields/localized-string.field.mjs +6 -6
  175. package/esm2022/lib/core/fields/numeric.designer.mjs +3 -3
  176. package/esm2022/lib/core/fields/numeric.field.mjs +3 -3
  177. package/esm2022/lib/core/fields/options.base.mjs +6 -6
  178. package/esm2022/lib/core/fields/options.component.mjs +3 -3
  179. package/esm2022/lib/core/fields/radio-button.designer.mjs +3 -3
  180. package/esm2022/lib/core/fields/radio-button.field.mjs +3 -3
  181. package/esm2022/lib/core/fields/select.designer.mjs +3 -3
  182. package/esm2022/lib/core/fields/select.field.mjs +3 -3
  183. package/esm2022/lib/core/fields/signature.designer.mjs +3 -3
  184. package/esm2022/lib/core/fields/signature.field.mjs +3 -3
  185. package/esm2022/lib/core/fields/switch.field.mjs +3 -3
  186. package/esm2022/lib/core/fields/tags.designer.mjs +3 -3
  187. package/esm2022/lib/core/fields/tags.field.mjs +3 -3
  188. package/esm2022/lib/core/fields/textarea.designer.mjs +3 -3
  189. package/esm2022/lib/core/fields/textarea.field.mjs +3 -3
  190. package/esm2022/lib/core/fields/time.designer.mjs +3 -3
  191. package/esm2022/lib/core/fields/time.field.mjs +3 -3
  192. package/esm2022/lib/core/fields/timespan.field.mjs +6 -6
  193. package/esm2022/lib/core/fields/yesno.designer.mjs +3 -3
  194. package/esm2022/lib/core/fields/yesno.field.mjs +3 -3
  195. package/esm2022/lib/core/guide/guide.component.mjs +3 -3
  196. package/esm2022/lib/core/guide/guide.service.mjs +3 -3
  197. package/esm2022/lib/core/guide/help-tip.component.mjs +3 -3
  198. package/esm2022/lib/core/http.interceptor.mjs +3 -3
  199. package/esm2022/lib/core/hub.service.mjs +3 -3
  200. package/esm2022/lib/core/identity/identity.component.mjs +3 -3
  201. package/esm2022/lib/core/info/attachment-info.service.mjs +3 -3
  202. package/esm2022/lib/core/info/document-info.service.mjs +3 -3
  203. package/esm2022/lib/core/info/location-info.component.mjs +3 -3
  204. package/esm2022/lib/core/info/map-info.mjs +3 -3
  205. package/esm2022/lib/core/inputs/address.input.mjs +3 -3
  206. package/esm2022/lib/core/inputs/auto-complete.input.mjs +3 -3
  207. package/esm2022/lib/core/inputs/combination-picker-body.mjs +3 -3
  208. package/esm2022/lib/core/inputs/combination-picker.mjs +3 -3
  209. package/esm2022/lib/core/inputs/combination-pool.mjs +3 -3
  210. package/esm2022/lib/core/inputs/file.input.mjs +3 -3
  211. package/esm2022/lib/core/inputs/select.input.mjs +3 -3
  212. package/esm2022/lib/core/inputs/signature.input.mjs +3 -3
  213. package/esm2022/lib/core/inputs/time-picker.mjs +3 -3
  214. package/esm2022/lib/core/inputs/timespan.input.mjs +3 -3
  215. package/esm2022/lib/core/layout.component.mjs +3 -3
  216. package/esm2022/lib/core/lottie-animation.mjs +3 -3
  217. package/esm2022/lib/core/mailbox.service.mjs +4 -4
  218. package/esm2022/lib/core/models.mjs +1 -1
  219. package/esm2022/lib/core/none.component.mjs +3 -3
  220. package/esm2022/lib/core/pipes/action.pipe.mjs +3 -3
  221. package/esm2022/lib/core/pipes/calendar.pipe.mjs +3 -3
  222. package/esm2022/lib/core/pipes/date-format.pipe.mjs +3 -3
  223. package/esm2022/lib/core/pipes/daterange.pipe.mjs +6 -6
  224. package/esm2022/lib/core/pipes/difference.pipe.mjs +3 -3
  225. package/esm2022/lib/core/pipes/duration-format.pipe.mjs +3 -3
  226. package/esm2022/lib/core/pipes/duration.pipe.mjs +3 -3
  227. package/esm2022/lib/core/pipes/form.pipe.mjs +3 -3
  228. package/esm2022/lib/core/pipes/join.pipe.mjs +3 -3
  229. package/esm2022/lib/core/pipes/localized-string.pipe.mjs +3 -3
  230. package/esm2022/lib/core/pipes/role.pipe.mjs +3 -3
  231. package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  232. package/esm2022/lib/core/pipes/sort.pipe.mjs +9 -9
  233. package/esm2022/lib/core/pipes/state.pipe.mjs +3 -3
  234. package/esm2022/lib/core/pipes/time-ago.pipe.mjs +3 -3
  235. package/esm2022/lib/core/pipes/to-now.pipe.mjs +3 -3
  236. package/esm2022/lib/core/pipes/translate.pipe.mjs +9 -9
  237. package/esm2022/lib/core/pipes/type-value.pipe.mjs +3 -3
  238. package/esm2022/lib/core/pipes/user-name.pipe.mjs +3 -3
  239. package/esm2022/lib/core/popup/popup.component.mjs +3 -3
  240. package/esm2022/lib/core/popup/popup.service.mjs +3 -3
  241. package/esm2022/lib/core/popup/tooltip.directive.mjs +6 -6
  242. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  243. package/esm2022/lib/core/prompt/mask/mask.component.mjs +3 -3
  244. package/esm2022/lib/core/prompt.service.mjs +3 -3
  245. package/esm2022/lib/core/router.mjs +6 -6
  246. package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
  247. package/esm2022/lib/core/session.service.mjs +3 -3
  248. package/esm2022/lib/core/slots/router.directive.mjs +3 -3
  249. package/esm2022/lib/core/slots/router.service.mjs +3 -3
  250. package/esm2022/lib/core/slots/slots.component.mjs +3 -3
  251. package/esm2022/lib/core/sticky-toolbar.exp.mjs +3 -3
  252. package/esm2022/lib/core/tagging/documents.component.mjs +3 -3
  253. package/esm2022/lib/core/tagging/edit-input.component.mjs +3 -3
  254. package/esm2022/lib/core/tagging/emoji.component.mjs +3 -3
  255. package/esm2022/lib/core/tagging/tagging-item.directive.mjs +3 -3
  256. package/esm2022/lib/core/tagging/tagging.component-base.mjs +3 -3
  257. package/esm2022/lib/core/tagging/tagging.directive.mjs +3 -3
  258. package/esm2022/lib/core/tagging/tagging.pipe.mjs +3 -3
  259. package/esm2022/lib/core/tagging/users.component.mjs +3 -3
  260. package/esm2022/lib/core/translate.service.mjs +3 -3
  261. package/esm2022/lib/core/virtual-tabs.component.exp.mjs +6 -6
  262. package/esm2022/lib/core/window-title.service.mjs +3 -3
  263. package/esm2022/lib/cube/accum/accum.component.mjs +3 -3
  264. package/esm2022/lib/cube/chart/chart.component.mjs +3 -3
  265. package/esm2022/lib/cube/cube-info.service.mjs +3 -3
  266. package/esm2022/lib/cube/cube-menu.component.mjs +3 -3
  267. package/esm2022/lib/cube/cube-view.component.mjs +3 -3
  268. package/esm2022/lib/cube/cube.service.mjs +3 -3
  269. package/esm2022/lib/cube/explore/document-item.component.mjs +3 -3
  270. package/esm2022/lib/cube/explore/explore-item.component.mjs +3 -3
  271. package/esm2022/lib/cube/explore/explore-items.component.mjs +3 -3
  272. package/esm2022/lib/cube/explore/explore.pane.component.mjs +3 -3
  273. package/esm2022/lib/cube/explore/item-resolver.service.mjs +6 -6
  274. package/esm2022/lib/cube/explore/item.pane.component.mjs +3 -3
  275. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  276. package/esm2022/lib/cube/filter/filter.component.mjs +3 -3
  277. package/esm2022/lib/cube/grid/grid.component.mjs +3 -3
  278. package/esm2022/lib/cube/matrix/matrix.base.mjs +3 -3
  279. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  280. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  281. package/esm2022/lib/cube/matrix/popup.component.mjs +3 -3
  282. package/esm2022/lib/cube/matrix/table.component.mjs +3 -3
  283. package/esm2022/lib/cube/parallel/parallel.component.mjs +3 -3
  284. package/esm2022/lib/cube/pivot/pivot.component.mjs +3 -3
  285. package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +3 -3
  286. package/esm2022/lib/cube/spreadsheet/spreadsheet.container.exp.mjs +3 -3
  287. package/esm2022/lib/cube/sum/sum.component.mjs +3 -3
  288. package/esm2022/lib/cube/view-base.mjs +3 -3
  289. package/esm2022/lib/cube/view.mobile.component.mjs +3 -3
  290. package/esm2022/lib/cube/view.pane.component.mjs +3 -3
  291. package/esm2022/lib/dashboard/actions/actions.widget.mjs +3 -3
  292. package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  293. package/esm2022/lib/dashboard/cube/compare.widget.mjs +3 -3
  294. package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  295. package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  296. package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  297. package/esm2022/lib/dashboard/cube/document-state.widget.mjs +3 -3
  298. package/esm2022/lib/dashboard/cube/documents.widget.mjs +3 -3
  299. package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  300. package/esm2022/lib/dashboard/dashboard.component.mjs +3 -3
  301. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +3 -3
  302. package/esm2022/lib/dashboard/recents/recents.widget.mjs +3 -3
  303. package/esm2022/lib/dashboard/score/activity.widget.mjs +3 -3
  304. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -3
  305. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  306. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +3 -3
  307. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -3
  308. package/esm2022/lib/dashboard/widget-item.component.mjs +3 -3
  309. package/esm2022/lib/designer.module.mjs +4 -4
  310. package/esm2022/lib/desktop.module.mjs +4 -4
  311. package/esm2022/lib/home/about/about.dialog.mjs +3 -3
  312. package/esm2022/lib/home/home-base.component.mjs +3 -3
  313. package/esm2022/lib/home/home.desktop.component.mjs +3 -3
  314. package/esm2022/lib/home/home.mobile.component.mjs +3 -3
  315. package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
  316. package/esm2022/lib/home/options/options.component.mjs +3 -3
  317. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  318. package/esm2022/lib/home/sign/sign.component.mjs +3 -3
  319. package/esm2022/lib/impersonate/impersonate.component.mjs +3 -3
  320. package/esm2022/lib/mobile.module.mjs +4 -4
  321. package/esm2022/lib/modules/chart.module.mjs +4 -4
  322. package/esm2022/lib/modules/circular-gauge.module.mjs +4 -4
  323. package/esm2022/lib/modules/datepicker.intl.mjs +3 -3
  324. package/esm2022/lib/modules/dayjs.module.mjs +4 -4
  325. package/esm2022/lib/modules/diagram.module.mjs +4 -4
  326. package/esm2022/lib/modules/gantt.module.mjs +4 -4
  327. package/esm2022/lib/modules/grid.module.mjs +4 -4
  328. package/esm2022/lib/modules/linear-gauge.module.mjs +4 -4
  329. package/esm2022/lib/modules/material.module.mjs +4 -4
  330. package/esm2022/lib/modules/paginator.intl.mjs +3 -3
  331. package/esm2022/lib/modules/pivot.module.mjs +4 -4
  332. package/esm2022/lib/modules/schedule.module.mjs +4 -4
  333. package/esm2022/lib/modules/spreadsheet.module.mjs +4 -4
  334. package/esm2022/lib/modules/stepper.intl.mjs +3 -3
  335. package/esm2022/lib/modules/texteditor.module.mjs +4 -4
  336. package/esm2022/lib/notifications/filter.component.mjs +3 -3
  337. package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
  338. package/esm2022/lib/notifications/notifications.mobile.component.mjs +3 -3
  339. package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -3
  340. package/esm2022/lib/notifications/notifications.service.mjs +3 -3
  341. package/esm2022/lib/notifications/types/commented.notification.mjs +3 -3
  342. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  343. package/esm2022/lib/notifications/types/escalated.notification.mjs +3 -3
  344. package/esm2022/lib/notifications/types/invite.notification.mjs +3 -3
  345. package/esm2022/lib/notifications/types/liked.notification.mjs +3 -3
  346. package/esm2022/lib/notifications/types/long-running-task.notification.mjs +3 -3
  347. package/esm2022/lib/notifications/types/notification-base.mjs +3 -3
  348. package/esm2022/lib/notifications/types/nudge.notification.mjs +3 -3
  349. package/esm2022/lib/notifications/types/state-changed.notification.mjs +3 -3
  350. package/esm2022/lib/notifications/types/tagged.notification.mjs +3 -3
  351. package/esm2022/lib/notifications/types/text.notification.mjs +3 -3
  352. package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  353. package/esm2022/lib/options/options.component.mjs +3 -3
  354. package/esm2022/lib/options/options.service.mjs +3 -3
  355. package/esm2022/lib/reports/arguments-component.mjs +3 -3
  356. package/esm2022/lib/reports/cube/documents.component.mjs +3 -3
  357. package/esm2022/lib/reports/cube/grid-documents.component.mjs +3 -3
  358. package/esm2022/lib/reports/cube/performance-hilo.component.mjs +3 -3
  359. package/esm2022/lib/reports/cube/performance-wind.component.mjs +3 -3
  360. package/esm2022/lib/reports/cube/table-documents.component.mjs +3 -3
  361. package/esm2022/lib/reports/cube/usage-args.component.mjs +3 -3
  362. package/esm2022/lib/reports/cube/usage-base.mjs +3 -3
  363. package/esm2022/lib/reports/cube/usage-chart.component.mjs +3 -3
  364. package/esm2022/lib/reports/cube/usage-pivot.component.mjs +3 -3
  365. package/esm2022/lib/reports/cube/usage.component.mjs +3 -3
  366. package/esm2022/lib/reports/report-viewer.component.mjs +3 -3
  367. package/esm2022/lib/reports/report.mobile.component.mjs +3 -3
  368. package/esm2022/lib/reports/report.pane.component.mjs +3 -3
  369. package/esm2022/lib/reports/reports-menu.component.mjs +3 -3
  370. package/esm2022/lib/reports/substitution/substitution.component.mjs +3 -3
  371. package/esm2022/lib/reports/table/table-view.component.mjs +3 -3
  372. package/esm2022/lib/reports/tasks/tasks.component.mjs +3 -3
  373. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  374. package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  375. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +3 -3
  376. package/esm2022/lib/search/cube.component.mjs +3 -3
  377. package/esm2022/lib/search/document.component.mjs +3 -3
  378. package/esm2022/lib/search/guide.component.mjs +3 -3
  379. package/esm2022/lib/search/path.component.mjs +3 -3
  380. package/esm2022/lib/search/search.service.mjs +3 -3
  381. package/esm2022/lib/shared.module.mjs +4 -4
  382. package/esm2022/lib/system.module.mjs +4 -4
  383. package/esm2022/lib/views/cube/chart.component.mjs +3 -3
  384. package/esm2022/lib/views/cube/cube-base.mjs +3 -3
  385. package/esm2022/lib/views/cube/explore.component.mjs +3 -3
  386. package/esm2022/lib/views/cube/matrix.component.mjs +3 -3
  387. package/esm2022/lib/views/cube/parallel.component.mjs +3 -3
  388. package/esm2022/lib/views/cube/pivot.component.mjs +3 -3
  389. package/esm2022/lib/views/cube/sum.component.mjs +3 -3
  390. package/esm2022/lib/views/cube/view.component.mjs +3 -3
  391. package/esm2022/lib/views/timeline/timeline.component.mjs +3 -3
  392. package/esm2022/lib/views/view-item.component.mjs +3 -3
  393. package/esm2022/lib/views/views.component.mjs +3 -3
  394. package/esm2022/lib/views/views.mobile.component.mjs +3 -3
  395. package/esm2022/lib/views/views.pane.component.mjs +3 -3
  396. package/fesm2022/bizdoc-core.mjs +1249 -1249
  397. package/fesm2022/bizdoc-core.mjs.map +1 -1
  398. package/lib/admin/core/ace.input.d.ts +0 -1
  399. package/lib/core/base.d.ts +5 -0
  400. package/lib/core/inputs/address.input.d.ts +0 -1
  401. package/lib/core/mailbox.service.d.ts +1 -0
  402. package/lib/core/models.d.ts +6 -0
  403. package/lib/core/session.service.d.ts +0 -1
  404. package/lib/core/slots/pane-ref.d.ts +2 -2
  405. package/package.json +18 -18
@@ -25,30 +25,30 @@ export class WidgetContentDirective {
25
25
  constructor(templateRef) {
26
26
  this.templateRef = templateRef;
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WidgetContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WidgetContentDirective, selector: "[bizdocContent]", ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: WidgetContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: WidgetContentDirective, selector: "[bizdocContent]", ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WidgetContentDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: WidgetContentDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  selector: '[bizdocContent]'
35
35
  }]
36
36
  }], ctorParameters: () => [{ type: i0.TemplateRef }] });
37
37
  export class EditContentDirective extends WidgetContentDirective {
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: EditContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
39
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: EditContentDirective, selector: "[bizdocEditContent]", usesInheritance: true, ngImport: i0 }); }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EditContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
39
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: EditContentDirective, selector: "[bizdocEditContent]", usesInheritance: true, ngImport: i0 }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: EditContentDirective, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EditContentDirective, decorators: [{
42
42
  type: Directive,
43
43
  args: [{
44
44
  selector: '[bizdocEditContent]'
45
45
  }]
46
46
  }] });
47
47
  export class CustomContentDirective extends WidgetContentDirective {
48
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: CustomContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
49
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: CustomContentDirective, selector: "[bizdocCustomContent]", inputs: { name: ["bizdocCustomContent", "name"] }, usesInheritance: true, ngImport: i0 }); }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CustomContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: CustomContentDirective, selector: "[bizdocCustomContent]", inputs: { name: ["bizdocCustomContent", "name"] }, usesInheritance: true, ngImport: i0 }); }
50
50
  }
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: CustomContentDirective, decorators: [{
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CustomContentDirective, decorators: [{
52
52
  type: Directive,
53
53
  args: [{
54
54
  selector: '[bizdocCustomContent]'
@@ -58,10 +58,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
58
58
  args: ['bizdocCustomContent']
59
59
  }] } });
60
60
  export class AddContentDirective extends WidgetContentDirective {
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AddContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
62
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: AddContentDirective, selector: "[bizdocAddContent]", usesInheritance: true, ngImport: i0 }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AddContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
62
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: AddContentDirective, selector: "[bizdocAddContent]", usesInheritance: true, ngImport: i0 }); }
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AddContentDirective, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AddContentDirective, decorators: [{
65
65
  type: Directive,
66
66
  args: [{
67
67
  selector: '[bizdocAddContent]'
@@ -228,10 +228,10 @@ export class DesignerItemComponent {
228
228
  this._destroy?.next();
229
229
  this._destroy?.complete();
230
230
  }
231
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormBuilder }, { token: i2.DomSanitizer }, { token: DesignerRef }, { token: i3.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
232
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { privileges: "privileges", icon: "icon", form: "form", context: "context" }, outputs: { onSave: "save", onContinue: "continue" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "addContent", first: true, predicate: AddContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }, { propertyName: "customContents", predicate: CustomContentDirective }], usesOnChanges: true, ngImport: i0, template: "@switch (mode) {\n<!--widget mode -->\n@case ('widget') {\n<!--icon -->\n @if (model.familyKey) {\n @if (SVG[model.familyKey]) {\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\n }\n @else {\n<div>{{model.family}}</div>\n }\n }\n<!--options-->\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n<!--designer widget-->\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\n}\n@case ('edit') {\n<!--edit / custom mode -->\n@if (context?.active) {\n<mat-toolbar class=\"row\">\n @if(context.mode === 'add') {\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">close</mat-icon></button>\n }\n @else {\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">keyboard_backspace</mat-icon></button>\n }\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\n</form>\n}\n@else {\n<!--edit mode -->\n<mat-toolbar bizdoc-sticky>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n @if (model.resourceType) {\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\n <br />\n }\n <ng-container [formGroup]=\"form\">\n <div class=\"row gap\">\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\n <mat-form-field class=\"flex\">\n <mat-label>{{'Name'|translate}}</mat-label>\n <input matInput formControlName=\"name\" required />\n @if (form.controls.name.hasError('required')) {\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\n }\n @if (form.controls.name.hasError('duplicate')) {\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\n }\n </mat-form-field>\n </div>\n @if (icon) {\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\n }\n </ng-container>\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--edit template-->\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\n <!--options-->\n @if (options) {\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!--privileges-->\n @if (form.controls.privileges) {\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\n }\n</form>\n}\n}\n<!--add-->\n@case ('add') {\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--add template-->\n <ng-container [ngTemplateOutlet]=\"addContent?.templateRef\"></ng-container>\n @if (options) {\n <!--options-->\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!-- continue-->\n <div class=\"row actions\">\n <span class=\"divider\"></span>\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\n </div>\n</form>\n }\n}\n", styles: ["img.logo{display:block;height:26px}:host{flex:1}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"], dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i9.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: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i12.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "component", type: i13.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "component", type: i14.IconPickerComponent, selector: "bizdoc-icon-picker", inputs: ["value", "required", "disabled"], outputs: ["valueChanges"] }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormBuilder }, { token: i2.DomSanitizer }, { token: DesignerRef }, { token: i3.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
232
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { privileges: "privileges", icon: "icon", form: "form", context: "context" }, outputs: { onSave: "save", onContinue: "continue" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "addContent", first: true, predicate: AddContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }, { propertyName: "customContents", predicate: CustomContentDirective }], usesOnChanges: true, ngImport: i0, template: "@switch (mode) {\n<!--widget mode -->\n@case ('widget') {\n<!--icon -->\n @if (model.familyKey) {\n @if (SVG[model.familyKey]) {\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\n }\n @else {\n<div>{{model.family}}</div>\n }\n }\n<!--options-->\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n<!--designer widget-->\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\n}\n@case ('edit') {\n<!--edit / custom mode -->\n@if (context?.active) {\n<mat-toolbar class=\"row\">\n @if(context.mode === 'add') {\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">close</mat-icon></button>\n }\n @else {\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">keyboard_backspace</mat-icon></button>\n }\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\n</form>\n}\n@else {\n<!--edit mode -->\n<mat-toolbar bizdoc-sticky>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n @if (model.resourceType) {\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\n <br />\n }\n <ng-container [formGroup]=\"form\">\n <div class=\"row gap\">\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\n <mat-form-field class=\"flex\">\n <mat-label>{{'Name'|translate}}</mat-label>\n <input matInput formControlName=\"name\" required />\n @if (form.controls.name.hasError('required')) {\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\n }\n @if (form.controls.name.hasError('duplicate')) {\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\n }\n </mat-form-field>\n </div>\n @if (icon) {\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\n }\n </ng-container>\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--edit template-->\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\n <!--options-->\n @if (options) {\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!--privileges-->\n @if (form.controls.privileges) {\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\n }\n</form>\n}\n}\n<!--add-->\n@case ('add') {\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--add template-->\n <ng-container [ngTemplateOutlet]=\"addContent?.templateRef\"></ng-container>\n @if (options) {\n <!--options-->\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!-- continue-->\n <div class=\"row actions\">\n <span class=\"divider\"></span>\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\n </div>\n</form>\n }\n}\n", styles: ["img.logo{display:block;height:26px}:host{flex:1}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"], dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i6.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i9.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: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i12.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "component", type: i13.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "component", type: i14.IconPickerComponent, selector: "bizdoc-icon-picker", inputs: ["value", "required", "disabled"], outputs: ["valueChanges"] }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
233
233
  }
234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerItemComponent, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerItemComponent, decorators: [{
235
235
  type: Component,
236
236
  args: [{ selector: 'bizdoc-designer-element', template: "@switch (mode) {\n<!--widget mode -->\n@case ('widget') {\n<!--icon -->\n @if (model.familyKey) {\n @if (SVG[model.familyKey]) {\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\n }\n @else {\n<div>{{model.family}}</div>\n }\n }\n<!--options-->\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n<!--designer widget-->\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\n}\n@case ('edit') {\n<!--edit / custom mode -->\n@if (context?.active) {\n<mat-toolbar class=\"row\">\n @if(context.mode === 'add') {\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">close</mat-icon></button>\n }\n @else {\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">keyboard_backspace</mat-icon></button>\n }\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\n</form>\n}\n@else {\n<!--edit mode -->\n<mat-toolbar bizdoc-sticky>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\n</mat-toolbar>\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n @if (model.resourceType) {\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\n <br />\n }\n <ng-container [formGroup]=\"form\">\n <div class=\"row gap\">\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\n <mat-form-field class=\"flex\">\n <mat-label>{{'Name'|translate}}</mat-label>\n <input matInput formControlName=\"name\" required />\n @if (form.controls.name.hasError('required')) {\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\n }\n @if (form.controls.name.hasError('duplicate')) {\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\n }\n </mat-form-field>\n </div>\n @if (icon) {\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\n }\n </ng-container>\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--edit template-->\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\n <!--options-->\n @if (options) {\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!--privileges-->\n @if (form.controls.privileges) {\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\n }\n</form>\n}\n}\n<!--add-->\n@case ('add') {\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\n <!--arguments-->\n @if (arguments) {\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\n }\n <!--add template-->\n <ng-container [ngTemplateOutlet]=\"addContent?.templateRef\"></ng-container>\n @if (options) {\n <!--options-->\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\n }\n <!-- continue-->\n <div class=\"row actions\">\n <span class=\"divider\"></span>\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\n </div>\n</form>\n }\n}\n", styles: ["img.logo{display:block;height:26px}:host{flex:1}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"] }]
237
237
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FormBuilder }, { type: i2.DomSanitizer }, { type: i16.DesignerRef, decorators: [{
@@ -81,10 +81,10 @@ export class DesignerPrivilegesComponent {
81
81
  inp.value = '';
82
82
  this.search.setValue(null);
83
83
  }
84
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerPrivilegesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: { form: "form" }, ngImport: i0, template: "<h2 class=\"mat-h2\">{{'Privileges'|translate}}</h2>\n<div [formGroup]=\"form\" class=\"column\">\n <mat-form-field class=\"flex\">\n <mat-chip-grid #chips [attr.aria-label]=\"''\">\n @for (r of form.controls.roles.value; track r) {\n <mat-chip-row\n [removable]=\"true\"\n (removed)=\"remove(r)\">\n {{titleOf(r)}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Roles'|translate\"\n [formControl]=search\n #inputrole\n [matAutocomplete]=\"nametype\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #nametype=\"matAutocomplete\" (optionSelected)=\"add(inputrole, $event)\">\n @for (r of roles; track r) {\n @if (!form.controls.roles.value || form.controls.roles.value.indexOf(r.name) < 0) {\n <mat-option [value]=\"r.name\">\n {{r.title || r.name}}\n </mat-option>\n }\n }\n </mat-autocomplete>\n </mat-form-field>\n <mat-form-field>\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\n </mat-form-field>\n </div>\n", dependencies: [{ kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i3.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerPrivilegesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component }); }
85
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: { form: "form" }, ngImport: i0, template: "<h2 class=\"mat-h2\">{{'Privileges'|translate}}</h2>\n<div [formGroup]=\"form\" class=\"column\">\n <mat-form-field class=\"flex\">\n <mat-chip-grid #chips [attr.aria-label]=\"''\">\n @for (r of form.controls.roles.value; track r) {\n <mat-chip-row\n [removable]=\"true\"\n (removed)=\"remove(r)\">\n {{titleOf(r)}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Roles'|translate\"\n [formControl]=search\n #inputrole\n [matAutocomplete]=\"nametype\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #nametype=\"matAutocomplete\" (optionSelected)=\"add(inputrole, $event)\">\n @for (r of roles; track r) {\n @if (!form.controls.roles.value || form.controls.roles.value.indexOf(r.name) < 0) {\n <mat-option [value]=\"r.name\">\n {{r.title || r.name}}\n </mat-option>\n }\n }\n </mat-autocomplete>\n </mat-form-field>\n <mat-form-field>\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\n </mat-form-field>\n </div>\n", dependencies: [{ kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i3.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
86
86
  }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerPrivilegesComponent, decorators: [{
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerPrivilegesComponent, decorators: [{
88
88
  type: Component,
89
89
  args: [{ selector: 'bizdoc-designer-privileges', template: "<h2 class=\"mat-h2\">{{'Privileges'|translate}}</h2>\n<div [formGroup]=\"form\" class=\"column\">\n <mat-form-field class=\"flex\">\n <mat-chip-grid #chips [attr.aria-label]=\"''\">\n @for (r of form.controls.roles.value; track r) {\n <mat-chip-row\n [removable]=\"true\"\n (removed)=\"remove(r)\">\n {{titleOf(r)}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Roles'|translate\"\n [formControl]=search\n #inputrole\n [matAutocomplete]=\"nametype\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #nametype=\"matAutocomplete\" (optionSelected)=\"add(inputrole, $event)\">\n @for (r of roles; track r) {\n @if (!form.controls.roles.value || form.controls.roles.value.indexOf(r.name) < 0) {\n <mat-option [value]=\"r.name\">\n {{r.title || r.name}}\n </mat-option>\n }\n }\n </mat-autocomplete>\n </mat-form-field>\n <mat-form-field>\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\n </mat-form-field>\n </div>\n" }]
90
90
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.SystemService }, { type: i10.DesignerRef, decorators: [{
@@ -27,10 +27,10 @@ export class DesignerElementComponentBase {
27
27
  focus() {
28
28
  setTimeout(() => this._element.nativeElement.querySelector('input')?.focus());
29
29
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerElementComponentBase, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
31
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: DesignerElementComponentBase, ngImport: i0 }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerElementComponentBase, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
31
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: DesignerElementComponentBase, ngImport: i0 }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerElementComponentBase, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerElementComponentBase, decorators: [{
34
34
  type: Directive
35
35
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i2.DesignerRef, decorators: [{
36
36
  type: Inject,
@@ -82,10 +82,10 @@ export class DesignerTypeElementComponent extends DesignerElementComponentBase {
82
82
  return this._ref.designer.
83
83
  types.find(t => t.name == name)?.title;
84
84
  }
85
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerTypeElementComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
86
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: DesignerTypeElementComponent, viewQueries: [{ propertyName: "designer", first: true, predicate: DesignerItemComponent, descendants: true }], usesInheritance: true, ngImport: i0 }); }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerTypeElementComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
86
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: DesignerTypeElementComponent, viewQueries: [{ propertyName: "designer", first: true, predicate: DesignerItemComponent, descendants: true }], usesInheritance: true, ngImport: i0 }); }
87
87
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerTypeElementComponent, decorators: [{
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerTypeElementComponent, decorators: [{
89
89
  type: Directive
90
90
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i2.DesignerRef, decorators: [{
91
91
  type: Inject,
@@ -118,10 +118,10 @@ export class DesignerCubeElementComponent extends DesignerElementComponentBase {
118
118
  else if (this.cubes.length === 1)
119
119
  this.cube = this.cubes[0];
120
120
  }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerCubeElementComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
122
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: DesignerCubeElementComponent, usesInheritance: true, ngImport: i0 }); }
121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerCubeElementComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
122
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: DesignerCubeElementComponent, usesInheritance: true, ngImport: i0 }); }
123
123
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DesignerCubeElementComponent, decorators: [{
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DesignerCubeElementComponent, decorators: [{
125
125
  type: Directive
126
126
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i2.DesignerRef, decorators: [{
127
127
  type: Inject,
@@ -372,14 +372,14 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
372
372
  collection.forEach(s => s.forEach(e => delete e.draft));
373
373
  }
374
374
  }
375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ConfigurationDesignerComponent, deps: [{ token: i1.PanesRouter }, { token: i2.FormBuilder }, { token: i3.TranslateService }, { token: i4.PromptService }, { token: i5.SessionService }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i6.Popup }, { token: i7.UtilityRef }], target: i0.ɵɵFactoryTarget.Component }); }
376
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ConfigurationDesignerComponent, selector: "ng-component", host: { attributes: { "tabindex": "0" }, listeners: { "keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "filters", first: true, predicate: ["filters"], descendants: true, read: TemplateRef }, { propertyName: "filterEl", first: true, predicate: ["filterEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"openFilter($event)\" [bizdocTooltip]=\"'Filter'|translate\" #filterEl><mat-icon>filter_list</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n &nbsp;-&nbsp;\n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n<!-- search filters -->\n<ng-template #filters>\n <form autocomplete=\"off\" class=\"column gap\" [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input matInput formControlName=\"contains\" autocomplete=\"off\" placeholder=\"{{'Contains' | translate}}\" #contains>\n @if (form.value.contains) {\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Categories'|translate}}</mat-label>\n <mat-select formControlName=\"sections\" multiple>\n @for (c of sections | sort : 'title'; track c) {\n <mat-option [value]=\"c.type\">{{c.title}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if(families.length) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Families'|translate}}</mat-label>\n <mat-select formControlName=\"family\">\n <mat-option>{{'All'|translate}}</mat-option>\n @for (f of families; track f) {\n <mat-option [value]=\"f\">{{f}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </form>\n</ng-template>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i11.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i11.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i11.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i11.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i15.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i15.MatLabel, selector: "mat-label" }, { kind: "directive", type: i15.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i18.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: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i20.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i20.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i20.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i21.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i22.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i23.FilterPipe, name: "filterBy" }, { kind: "pipe", type: i23.ArraySortPipe, name: "sort" }, { kind: "pipe", type: i24.TranslatePipe, name: "translate" }], animations: [itemAnimation] }); }
375
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ConfigurationDesignerComponent, deps: [{ token: i1.PanesRouter }, { token: i2.FormBuilder }, { token: i3.TranslateService }, { token: i4.PromptService }, { token: i5.SessionService }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i6.Popup }, { token: i7.UtilityRef }], target: i0.ɵɵFactoryTarget.Component }); }
376
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ConfigurationDesignerComponent, selector: "ng-component", host: { attributes: { "tabindex": "0" }, listeners: { "keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "filters", first: true, predicate: ["filters"], descendants: true, read: TemplateRef }, { propertyName: "filterEl", first: true, predicate: ["filterEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"openFilter($event)\" [bizdocTooltip]=\"'Filter'|translate\" #filterEl><mat-icon>filter_list</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n &nbsp;-&nbsp;\n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n<!-- search filters -->\n<ng-template #filters>\n <form autocomplete=\"off\" class=\"column gap\" [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input matInput formControlName=\"contains\" autocomplete=\"off\" placeholder=\"{{'Contains' | translate}}\" #contains>\n @if (form.value.contains) {\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Categories'|translate}}</mat-label>\n <mat-select formControlName=\"sections\" multiple>\n @for (c of sections | sort : 'title'; track c) {\n <mat-option [value]=\"c.type\">{{c.title}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if(families.length) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Families'|translate}}</mat-label>\n <mat-select formControlName=\"family\">\n <mat-option>{{'All'|translate}}</mat-option>\n @for (f of families; track f) {\n <mat-option [value]=\"f\">{{f}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </form>\n</ng-template>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i11.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i11.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i11.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i11.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i15.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i15.MatLabel, selector: "mat-label" }, { kind: "directive", type: i15.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i18.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: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i20.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i20.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i20.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i21.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i22.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i23.FilterPipe, name: "filterBy" }, { kind: "pipe", type: i23.ArraySortPipe, name: "sort" }, { kind: "pipe", type: i24.TranslatePipe, name: "translate" }], animations: [itemAnimation] }); }
377
377
  };
378
378
  ConfigurationDesignerComponent = __decorate([
379
379
  BizDoc({ selector: 'bizdoc-configuration-designer' })
380
380
  ], ConfigurationDesignerComponent);
381
381
  export { ConfigurationDesignerComponent };
382
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ConfigurationDesignerComponent, decorators: [{
382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ConfigurationDesignerComponent, decorators: [{
383
383
  type: Component,
384
384
  args: [{ animations: [itemAnimation], host: { tabindex: '0' }, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"openFilter($event)\" [bizdocTooltip]=\"'Filter'|translate\" #filterEl><mat-icon>filter_list</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n &nbsp;-&nbsp;\n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n<!-- search filters -->\n<ng-template #filters>\n <form autocomplete=\"off\" class=\"column gap\" [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input matInput formControlName=\"contains\" autocomplete=\"off\" placeholder=\"{{'Contains' | translate}}\" #contains>\n @if (form.value.contains) {\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Categories'|translate}}</mat-label>\n <mat-select formControlName=\"sections\" multiple>\n @for (c of sections | sort : 'title'; track c) {\n <mat-option [value]=\"c.type\">{{c.title}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if(families.length) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Families'|translate}}</mat-label>\n <mat-select formControlName=\"family\">\n <mat-option>{{'All'|translate}}</mat-option>\n @for (f of families; track f) {\n <mat-option [value]=\"f\">{{f}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </form>\n</ng-template>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"] }]
385
385
  }], ctorParameters: () => [{ type: i1.PanesRouter }, { type: i2.FormBuilder }, { type: i3.TranslateService }, { type: i4.PromptService }, { type: i5.SessionService }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i6.Popup }, { type: i7.UtilityRef }], propDecorators: { filters: [{
@@ -392,4 +392,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
392
392
  type: HostListener,
393
393
  args: ['keydown', ['$event']]
394
394
  }] } });
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5RyxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPL0MsT0FBTyxFQUE2QyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBYyxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2SSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2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QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzVGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzlGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7b0JBQy9GLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7b0JBQ3JFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzlGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FB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Q0FBQztRQUNuQixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEssTUFBTSxLQUFLLEdBQUc7WUFDVixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUNoQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ2IsS0FBWSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtZQUN2QixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ1AsU0FBUyxLQUFLLENBQUMsUUFBd0I7WUFDbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwQixNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxTQUFTLEtBQUssQ0FBQyxHQUFHLFVBQTRCO1lBQzFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0wsQ0FBQzs4R0FqVlEsOEJBQThCO2tHQUE5Qiw4QkFBOEIsdU9BQ1QsV0FBVywrRkFDVixVQUFVLDZCQ2pEN0MsNHpKQXVHQSxvL05ENURnQixDQUFDLGFBQWEsQ0FBQzs7QUFJbEIsOEJBQThCO0lBRDFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO0dBQ3pDLDhCQUE4QixDQWtWMUM7OzJGQWxWWSw4QkFBOEI7a0JBUDFDLFNBQVM7aUNBR00sQ0FBQyxhQUFhLENBQUMsUUFDckIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFOytSQUlzQixPQUFPO3NCQUFuRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ0UsUUFBUTtzQkFBcEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGM0MsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGl0ZW1BbmltYXRpb24gfSBmcm9tIFwiLi4vLi4vY29yZS9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9iYXNlXCI7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgY2xlYW51cCB9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9yb3V0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi8uLi9jb3JlL3BvcHVwL3BvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5UmVmIH0gZnJvbSBcIi4uL3V0aWxpdHktcmVmXCI7XHJcbmltcG9ydCB7IEVsZW1lbnRNb2RlbCwgRGVzaWduZXJNb2RlbCwgVGVtcGxhdGVJbmZvLCBwcm9ncmFtTmFtZSwgRGVzaWduZXJSZWYsIGNsb25lLCBEZXNpZ25Nb2RlLCBleHRyYWN0U3RyaW5nIH0gZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi9kZXNpZ25lci5iYXNlXCI7XHJcbmltcG9ydCB7IEFjdGlvbkRlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvYWN0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9hdHRyaWJ1dGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbnRyb2xEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9jb250cm9sLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDdWJlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvY3ViZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRm9sZGVyRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZm9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBGb3JtRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZm9ybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3VpZGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ndWlkZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTm9kZURlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvbm9kZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUG9saWN5RGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcG9saWN5LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBSZXBvcnREZXNpZ25lckNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3JlcG9ydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUm9sZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3JvbGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJ1bGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ydWxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdGF0ZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3N0YXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUeXBlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvdHlwZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVXRpbGl0eURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3V0aWxpdHkuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFZpZXdEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy92aWV3LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBXaWRnZXREZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy93aWRnZXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEpvYkRlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2pvYi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU291cmNlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvc291cmNlLmNvbXBvbmVudFwiO1xyXG5jb25zdCBTRUFSQ0hfREVCT1VOQ0UgPSAyMDA7XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBhbmltYXRpb25zOiBbaXRlbUFuaW1hdGlvbl0sXHJcbiAgICBob3N0OiB7IHRhYmluZGV4OiAnMCcgfVxyXG59KVxyXG5AQml6RG9jKHsgc2VsZWN0b3I6ICdiaXpkb2MtY29uZmlndXJhdGlvbi1kZXNpZ25lcicgfSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25EZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIFV0aWxpdHlDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJzJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBmaWx0ZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyRWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZmlsdGVyRWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgc2VhcmNoQnkgPSAwO1xyXG4gICAgbG9hZGluZyA9IHRydWU7XHJcbiAgICBzYXZpbmcgPSBmYWxzZTtcclxuICAgIGRpcnR5ID0gZmFsc2U7XHJcbiAgICBtb2RlbDogRGVzaWduZXJNb2RlbDtcclxuICAgIHNlY3Rpb25zOiBTZWN0aW9uW107XHJcbiAgICBmYW1pbGllczogc3RyaW5nW107XHJcbiAgICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgIGNvbnRhaW5zOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZz4obnVsbCksXHJcbiAgICAgICAgc2VjdGlvbnM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KG51bGwpLFxyXG4gICAgICAgIGZhbWlseTogdGhpcy5fZmIuY29udHJvbDxzdHJpbmc+KG51bGwpXHJcbiAgICB9KTtcclxuICAgIHByaXZhdGUgX3R5cGluZ1RpbWVyOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9wYW5lczogUGFuZXNSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfcG9wdXA6IFBvcHVwLFxyXG4gICAgICAgIHByaXZhdGUgX3JlZjogVXRpbGl0eVJlZjxib29sZWFuLCBEZXNpZ25lck1vZGVsLCBEZXNpZ25lck1vZGVsPikgeyB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZWYucG9wdWxhdGUoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5mb3JtcywgdHlwZTogJ0Zvcm1zJywgY29tcDogRm9ybURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRGb3JtcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIudmlld3MsIHR5cGU6ICdWaWV3cycsIGNvbXA6IFZpZXdEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50Vmlld3MgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLndpZGdldHMsIHR5cGU6ICdXaWRnZXRzJywgY29tcDogV2lkZ2V0RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFdpZGdldHMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLnJlcG9ydHMsIHR5cGU6ICdSZXBvcnRzJywgY29tcDogUmVwb3J0RGVzaWduZXJDb21wb25lbnQsIHRlbXBsYXRlczogci50UmVwb3J0cyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIudXRpbGl0aWVzLCB0eXBlOiAnVG9vbHMnLCBjb21wOiBVdGlsaXR5RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFV0aWxpdGllcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuY3ViZXMsIHR5cGU6ICdDdWJlcycsIGNvbXA6IEN1YmVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50Q3ViZXMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLnR5cGVzLCB0eXBlOiAnVHlwZXMnLCBjb21wOiBUeXBlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFR5cGVzIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5zb3VyY2VzLCB0eXBlOiAnU291cmNlcycsIGNvbXA6IFNvdXJjZURlc2lnbkNvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuYWN0aW9ucywgdHlwZTogJ0FjdGlvbnMnLCBjb21wOiBBY3Rpb25EZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRBY3Rpb25zIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5ndWlkZXMsIHR5cGU6ICdHdWlkZXMnLCBjb21wOiBHdWlkZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnR3VpZGUnKSB9XSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8veyBlbGVtZW50czogci5qb2JzLCB0eXBlOiAnSm9icycsIGNvbXA6IEpvYkRlc2lnbkNvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuZm9sZGVycywgdHlwZTogJ0ZvbGRlcnMnLCBjb21wOiBGb2xkZXJEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogW3sgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0ZvbGRlcicpIH1dIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5yb2xlcywgdHlwZTogJ1JvbGVzJywgY29tcDogUm9sZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnUm9sZScpIH1dIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5zdGF0ZXMsIHR5cGU6ICdTdGF0ZXMnLCBjb21wOiBTdGF0ZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnU3RhdGUnKSB9XSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIubm9kZXMsIHR5cGU6ICdOb2RlcycsIGNvbXA6IE5vZGVEZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnROb2RlcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuYXR0cmlidXRlcywgdHlwZTogJ0F0dHJpYnV0ZXMnLCBjb21wOiBBdHRyaWJ1dGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50QXR0cmlidXRlcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIucnVsZXMsIHR5cGU6ICdSdWxlcycsIGNvbXA6IFJ1bGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50UnVsZXMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLmNvbnRyb2xzLCB0eXBlOiAnQ29udHJvbHMnLCBjb21wOiBDb250cm9sRGVzaWduQ29tcG9uZW50IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5wb2xpY2llcywgdHlwZTogJ1BvbGljaWVzJywgY29tcDogUG9saWN5RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFBvbGljaWVzIH0sXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFtaWxpZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnNlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcy5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcy50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQocy50eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2Ygcy5lbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUub3B0aW9ucykgZS5vcHRpb25zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmZhbWlseSAmJiBmYW1pbGllcy5pbmRleE9mKGUuZmFtaWx5KSA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbGllcy5wdXNoKGUuZmFtaWx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5qZWN0b3IgPSB0aGlzLl9jcmVhdGVJbmplY3RvcihlLCBzLmVsZW1lbnRzLCAnd2lkZ2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mYW1pbGllcyA9IGZhbWlsaWVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHR5cGluZyBrZXlkb3duIGxpc3RlbmVyXHJcbiAgICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxFbGVtZW50TW9kZWxbXT4pIHtcclxuICAgICAgICBjb25zdCByYW5nZSA9IGV2ZW50LmNvbnRhaW5lci5kYXRhLnNsaWNlKFxyXG4gICAgICAgICAgICBNYXRoLm1pbihldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpLFxyXG4gICAgICAgICAgICBNYXRoLm1heChldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpXHJcbiAgICAgICAgKSwgZmlsZSA9IHJhbmdlWzBdLmNvbmZpZ3VyYXRpb25GaWxlO1xyXG4gICAgICAgIGlmXHJcbiAgICAgICAgICAgIC8vIGFjcm9zcyBmaWxlc1xyXG4gICAgICAgICAgICAocmFuZ2Uuc2xpY2UoMSkuc29tZShlID0+IGUuY29uZmlndXJhdGlvbkZpbGUgIT09IGZpbGUpKSB7XHJcbiAgICAgICAgICAgIC8vIHN0YXJ0IG9yZGluYWxcclxuICAgICAgICAgICAgbGV0IGkgPSBldmVudC5jb250YWluZXIuZGF0YVtldmVudC5jdXJyZW50SW5kZXhdLm9yZGluYWwgfHwgLTE7XHJcbiAgICAgICAgICAgIC8vIHNldCBvcmRpbmFsIHRvIGl0ZW1zIGluIHJhbmdlXHJcbiAgICAgICAgICAgIHJhbmdlLmZvckVhY2goZSA9PiBlLm9yZGluYWwgPSBpKyspO1xyXG4gICAgICAgICAgICAvLyBpbmNyZWFzZSBvdGhlciBoaWdoZXIgdGhhbiBsYXN0IGluIHJhbmdlXHJcbiAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLmZpbHRlcihlID0+IGUub3JkaW5hbCAmJiBlLm9yZGluYWwgPiBpKS5mb3JFYWNoKGUgPT4gZS5vcmRpbmFsICs9IDEpO1xyXG4gICAgICAgIH0gZWxzZSAvLyBuYXRpdmUgb3JkZXIgaW4gY29sbGVjdGlvblxyXG4gICAgICAgICAgICByYW5nZS5mb3JFYWNoKGUgPT4gZS5vcmRpbmFsID0gbnVsbCk7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5ICYmIChldmVudC5rZXkgPT09ICdTJyB8fCBldmVudC5rZXkgPT09ICdzJykpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkgPT09ICdxJyB8fCBldmVudC5rZXkgPT09ICdRJykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5GaWx0ZXIoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VhcmNoQnkgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3R5cGluZ1RpbWVyKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMuZWxlbWVudHMuZm9yRWFjaChlID0+IGUuaGlkZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgcy5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KHt9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCeSA9IDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV2dFxyXG4gICAgICovXHJcbiAgICBvcGVuRmlsdGVyKGV2dD86IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID1cclxuICAgICAgICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZShTRUFSQ0hfREVCT1VOQ0UpKS5cclxuICAgICAgICAgICAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvbnRhaW5zLCBzZWN0aW9ucywgZmFtaWx5IH0gPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9ucy5pbmRleE9mKHMudHlwZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWlucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy50aXRsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY29udGFpbnMpID4gMCAmJiAhZmFtaWx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChlID0+IGUuaGlkZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYW55ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbnRhaW5zIHx8IChleHRyYWN0U3RyaW5nKGUudGl0bGUpIHx8IGUubmFtZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNvbnRhaW5zKSA+IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWZhbWlseSB8fCBlLmZhbWlseSA9PT0gZmFtaWx5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcy50ZW1wbGF0ZXMgfHwgKCFmYW1pbHkgJiYgIWNvbnRhaW5zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5oaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSAhcy50ZW1wbGF0ZXMuZmluZCh0ID0+ICghY29udGFpbnMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGl0bGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNvbnRhaW5zKSA+IC0xKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFmYW1pbHkgfHwgdC5mYW1pbHkgPT09IGZhbWlseSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoQnkgKz0gMTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHBvcCA9IHRoaXMuX3BvcHVwLm9wZW4odGhpcy5maWx0ZXJzLCB0aGlzLmZpbHRlckVsLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5mb3JtXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcG9wLm9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvcHVwLXBhbmVsIGlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudCk/LmZvY3VzKCkpO1xyXG4gICAgICAgIHBvcC5cclxuICAgICAgICAgICAgY2xvc2VkKCkuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZShzdWJzY3JpYmUudW5zdWJzY3JpYmUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luc2VydChzZWN0aW9uOiBTZWN0aW9uLCBlbGVtZW50OiBFbGVtZW50TW9kZWwsIHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgICAgICAvLyByZXNvbHZlIG5hbWUgJiB0aXRsZVxyXG4gICAgICAgIGxldCBpID0gZWxlbWVudC5uYW1lLmxhc3RJbmRleE9mKCdfJyksXHJcbiAgICAgICAgICAgIGogPSAoZXh0cmFjdFN0cmluZyhlbGVtZW50LnRpdGxlKSkubGFzdEluZGV4T2YoJyAnKSxcclxuICAgICAgICAgICAgbiA9IDAsIG5hbWUsIHRpdGxlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbisrO1xyXG4gICAgICAgICAgICBuYW1lID0gKGkgPCAwIHx8IGlzTmFOKHBhcnNlSW50KGVsZW1lbnQubmFtZS5zdWJzdHJpbmcoaSArIDEpKSkgPyBlbGVtZW50Lm5hbWUgOiBlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKDAsIGkpKSArICdfJyArIG47XHJcbiAgICAgICAgICAgIHRpdGxlID0gKGogPCAwIHx8IGlzTmFOKHBhcnNlSW50KGV4dHJhY3RTdHJpbmcoZWxlbWVudC50aXRsZSkuc3Vic3RyaW5nKGogKyAxKSkpID8gZWxlbWVudC50aXRsZSA6IGV4dHJhY3RTdHJpbmcoZWxlbWVudC50aXRsZSkuc3Vic3RyaW5nKDAsIGopKSArICcgJyArIG47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChzZWN0aW9uLmVsZW1lbnRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IG5hbWUgfHwgZS50aXRsZSA9PT0gdGl0bGUpKTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5uYW1lID0gbmFtZSwgZWxlbWVudC50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIC8vIGluamVjdG9yXHJcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLl9jcmVhdGVJbmplY3RvcihlbGVtZW50LCBzZWN0aW9uLmVsZW1lbnRzLCAnd2lkZ2V0Jyk7XHJcbiAgICAgICAgZWxlbWVudC5pbmplY3RvciA9IGluamVjdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl9vcGVuKGVsZW1lbnQsIHNlY3Rpb24sICdhZGQnKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgLy8gYWRkIHRvIGFycmF5XHJcbiAgICAgICAgICAgIHNlY3Rpb24uZWxlbWVudHMuc3BsaWNlKHBvc2l0aW9uICsgMSwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIGZvcmNlIHJlbmRlclxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5ICs9IDE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gbW9kZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb3BlbihlbGVtZW50OiBFbGVtZW50TW9kZWwsXHJcbiAgICAgICAgc2VjdGlvbjogU2VjdGlvbixcclxuICAgICAgICBtb2RlOiBEZXNpZ25Nb2RlKSB7XHJcbiAgICAgICAgbGV0IGVjbG9uZSA9IHsgLi4uZWxlbWVudCB9O1xyXG4gICAgICAgIGRlbGV0ZSBlY2xvbmUuaW5qZWN0b3I7XHJcbiAgICAgICAgZWNsb25lID0gY2xvbmUoZWNsb25lKTsgLy8gZGVlcFxyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5fY3JlYXRlSW5qZWN0b3IoZWNsb25lLCBzZWN0aW9uLmVsZW1lbnRzLCBtb2RlKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5fcGFuZXMubmF2aWdhdGU8RGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudD4oc2VjdGlvbi5jb21wLCB7XHJcbiAgICAgICAgICAgICAgICBwb2xpY3k6IG1vZGUgPT09ICdhZGQnID8gT3BlblBvbGljeS5EaWFsb2cgfCBPcGVuUG9saWN5LlN0cmV0Y2ggOlxyXG4gICAgICAgICAgICAgICAgICAgIE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5Ub2dnbGUgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXA6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoc2VjdGlvbi50aXRsZSksXHJcbiAgICAgICAgICAgICAgICAvL3RpdGxlLFxyXG4gICAgICAgICAgICAgICAgaW5qZWN0b3I6IGluamVjdG9yXHJcbiAgICAgICAgICAgIH0pLnRoZW4ocGFuZSA9PlxyXG4gICAgICAgICAgICAgICAgcGFuZS5pbnN0YW5jZS5kZXNpZ25lci5vblNhdmUuc3Vic2NyaWJlKGVsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LCBlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cclxuICAgICAqIEBwYXJhbSBtb2RlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jcmVhdGVJbmplY3RvcihlbGVtZW50OiBFbGVtZW50TW9kZWw8YW55PiwgY29sbGVjdGlvbjogRWxlbWVudE1vZGVsW10sIG1vZGU6IERlc2lnbk1vZGUpIHtcclxuICAgICAgICBjb25zdCByZWYgPSBuZXcgRGVzaWduZXJSZWYodGhpcy5tb2RlbCwgZWxlbWVudCwgY29sbGVjdGlvbiwgbW9kZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgICAgICAgICAgcHJvdmlkZTogRGVzaWduZXJSZWYsIHVzZVZhbHVlOiByZWZcclxuICAgICAgICAgICAgfV0sIHBhcmVudDogdGhpcy5faW5qZWN0b3JcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaW5qZWN0b3I7XHJcbiAgICB9XHJcbiAgICBhZGQoc2VjdGlvbjogU2VjdGlvbiwgbWVudTogTWF0TWVudVRyaWdnZXIsIGV2dDogRXZlbnQpIHtcclxuICAgICAgICBpZiAoc2VjdGlvbi50ZW1wbGF0ZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgbWVudS5vcGVuTWVudSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGUoc2VjdGlvbiwgc2VjdGlvbi50ZW1wbGF0ZXNbMF0pO1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlKHNlY3Rpb246IFNlY3Rpb24sIHRlbXBsYXRlOiBUZW1wbGF0ZUluZm8pIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICAgICAgICAuLi50ZW1wbGF0ZSxcclxuICAgICAgICAgICAgbmFtZTogcHJvZ3JhbU5hbWUodGVtcGxhdGUua2V5IHx8IHRlbXBsYXRlLnRpdGxlKSxcclxuICAgICAgICAgICAgZHJhZnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGhpZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7fVxyXG4gICAgICAgIH0gYXMgRWxlbWVudE1vZGVsO1xyXG4gICAgICAgIHRoaXMuX2luc2VydChzZWN0aW9uLCBlbGVtZW50LCBzZWN0aW9uLmVsZW1lbnRzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmUoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgc2VjdGlvbi5lbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBjb3B5KHNlY3Rpb246IFNlY3Rpb24sIGVsZW1lbnQ6IEVsZW1lbnRNb2RlbCkge1xyXG4gICAgICAgIGxldCBlY2xvbmUgPSB7XHJcbiAgICAgICAgICAgIC4uLmVsZW1lbnQsXHJcbiAgICAgICAgICAgIGNvcHlPZjogZWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICBkcmFmdDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGVsZXRlIGVjbG9uZS5pbmplY3RvcjtcclxuICAgICAgICBkZWxldGUgZWNsb25lLnJlc291cmNlVHlwZTtcclxuICAgICAgICBlY2xvbmUgPSBjbG9uZShlY2xvbmUpOyAvLyBkZWVwXHJcbiAgICAgICAgdGhpcy5faW5zZXJ0KHNlY3Rpb24sIGVjbG9uZSwgc2VjdGlvbi5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpKTtcclxuICAgIH1cclxuICAgIGVkaXQoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5fb3BlbihlbGVtZW50LCBzZWN0aW9uLCAnZWRpdCcpO1xyXG4gICAgfVxyXG4gICAgdG9nZ2xlRGlzYWJsZWQoZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9ICFlbGVtZW50LmRpc2FibGVkO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgeyBjb250cm9scywgYXR0cmlidXRlcywgcG9saWNpZXMsIGFjdGlvbnMsIGN1YmVzLCBmb2xkZXJzLCBmb3JtcywgZ3VpZGVzLCByZXBvcnRzLCByb2xlcywgcnVsZXMsIHN0YXRlcywgdHlwZXMsIHV0aWxpdGllcywgdmlld3MsIHdpZGdldHMsIG5vZGVzIH0gPSB0aGlzLm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICAgICAgICBhY3Rpb25zOiBzdHJpcChhY3Rpb25zKSxcclxuICAgICAgICAgICAgY3ViZXM6IHN0cmlwKGN1YmVzKSxcclxuICAgICAgICAgICAgZm9sZGVyczogc3RyaXAoZm9sZGVycyksXHJcbiAgICAgICAgICAgIGZvcm1zOiBzdHJpcChmb3JtcyksXHJcbiAgICAgICAgICAgIGd1aWRlczogc3RyaXAoZ3VpZGVzKSxcclxuICAgICAgICAgICAgcmVwb3J0czogc3RyaXAocmVwb3J0cyksXHJcbiAgICAgICAgICAgIHJvbGVzOiBzdHJpcChyb2xlcyksXHJcbiAgICAgICAgICAgIHJ1bGVzOiBzdHJpcChydWxlcyksXHJcbiAgICAgICAgICAgIHBvbGljaWVzOiBzdHJpcChwb2xpY2llcyksXHJcbiAgICAgICAgICAgIHN0YXRlczogc3RyaXAoc3RhdGVzKSxcclxuICAgICAgICAgICAgdHlwZXM6IHN0cmlwKHR5cGVzKSxcclxuICAgICAgICAgICAgdXRpbGl0aWVzOiBzdHJpcCh1dGlsaXRpZXMpLFxyXG4gICAgICAgICAgICB2aWV3czogc3RyaXAodmlld3MpLFxyXG4gICAgICAgICAgICBub2Rlczogc3RyaXAobm9kZXMpLFxyXG4gICAgICAgICAgICB3aWRnZXRzOiBzdHJpcCh3aWRnZXRzKSxcclxuICAgICAgICAgICAgY29udHJvbHM6IHN0cmlwKGNvbnRyb2xzKSxcclxuICAgICAgICAgICAgYXR0cmlidXRlczogc3RyaXAoYXR0cmlidXRlcylcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3JlZi5leGVjdXRlKFxyXG4gICAgICAgICAgICBtb2RlbCBhcyBhbnkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHMudG9hc3QoJ0NoYW5nZXNTYXZlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5KHBvbGljaWVzLCBhY3Rpb25zLCBjdWJlcywgZm9sZGVycywgZm9ybXMsIGd1aWRlcywgcmVwb3J0cywgcm9sZXMsIHJ1bGVzLCBzdGF0ZXMsIHR5cGVzLCB1dGlsaXRpZXMsIHZpZXdzLCB3aWRnZXRzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucmVmcmVzaCgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZnVuY3Rpb24gc3RyaXAoZWxlbWVudHM6IEVsZW1lbnRNb2RlbFtdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0geyAuLi5lIH07XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudC5pbmplY3RvcjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LmFyZ3VtZW50cztcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhbnVwKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gYXBwbHkoLi4uY29sbGVjdGlvbjogRWxlbWVudE1vZGVsW11bXSkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uLmZvckVhY2gocyA9PiBzLmZvckVhY2goZSA9PiBkZWxldGUgZS5kcmFmdCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5pbnRlcmZhY2UgU2VjdGlvbiB7XHJcbiAgICBjb21wOiBDb21wb25lbnRUeXBlPGFueT47XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGVsZW1lbnRzOiBFbGVtZW50TW9kZWxbXTtcclxuICAgIHRlbXBsYXRlcz86IFRlbXBsYXRlSW5mb1tdO1xyXG4gICAgaGlkZT86IGJvb2xlYW47XHJcbn1cclxuIiwiPG1hdC10b29sYmFyPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFkaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5GaWx0ZXIoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidGaWx0ZXInfHRyYW5zbGF0ZVwiICNmaWx0ZXJFbD48bWF0LWljb24+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPjwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxtYXQtcHJvZ3Jlc3MtYmFyIFttb2RlXT1cImxvYWRpbmcgPyAnYnVmZmVyJyA6ICdpbmRldGVybWluYXRlJ1wiIFtzdHlsZS52aXNpYmlsaXR5XT1cImxvYWRpbmcgPyAndmlzaWJsZSc6J2hpZGRlbidcIj48L21hdC1wcm9ncmVzcy1iYXI+XG5AaWYgKGxvYWRpbmcpIHtcbiAgPGJpemRvYy1ub25lIHRpdGxlPVwiU2V0dGluZ1RoaW5nc1VwXCIgc3VidGl0bGU9XCJQbGVhc2VXYWl0XCIgaWNvbj1cImFyY2hpdGVjdHVyZVwiPjwvYml6ZG9jLW5vbmU+XG59XG48ZGl2PlxuICBAZm9yIChzIG9mIHNlY3Rpb25zIHwgZmlsdGVyQnk6J2hpZGUnOiBmYWxzZTogc2VhcmNoQnk7IHRyYWNrIHMpIHtcbiAgICA8c2VjdGlvbj5cbiAgICAgIDxoMiBjbGFzcz1cIm1hdC1oMVwiPnt7cy50aXRsZX19PC9oMj5cbiAgICAgIDwhLS08aHIgLz4tLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50c1wiIGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgW2Nka0Ryb3BMaXN0RGF0YV09XCJzLmVsZW1lbnRzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoZSBvZiBzLmVsZW1lbnRzIHwgZmlsdGVyQnk6J2hpZGUnOiBmYWxzZTogc2VhcmNoQnk7IHRyYWNrIGUpIHtcbiAgICAgICAgICA8bWF0LWNhcmQgW2NsYXNzLmRpc2FibGVkXT1cImUuZGlzYWJsZWRcIiBjZGtEcmFnIGNka0RyYWdSb290RWxlbWVudD1cIi5tYXQtbWRjLWNhcmQtdGl0bGVcIj5cbiAgICAgICAgICAgIDwhLS0gQGl0ZW0tLT5cbiAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICB7e2UudGl0bGV8bG9jYWxpemVkU3RyaW5nfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmIChlLmhlbHApIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbYml6ZG9jVG9vbHRpcF09XCJlLmhlbHBcIiBbYml6ZG9jVG9vbHRpcER1cmF0aW9uXT1cIjYwMDBcIj5oZWxwX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIHt7ZS5uYW1lfX1cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwicy5jb21wOyBpbmplY3RvcjogZS5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgQGlmICghZS5jb3B5T2YpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29weShzLCBlKVwiIFtiaXpkb2NUb29sdGlwXT1cIidDb3B5J3x0cmFuc2xhdGVcIj48bWF0LWljb24+ZmlsZV9jb3B5PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGUuZHJhZnQgfHwgZS5lbXB0eSkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZW1vdmUocywgZSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZURpc2FibGVkKGUpXCIgW2JpemRvY1Rvb2x0aXBdPVwiKGUuZGlzYWJsZWQgPyAnRW5hYmxlJyA6ICdEaXNhYmxlJyl8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnt7ZS5kaXNhYmxlZCA/ICd2aXNpYmlsaXR5JyA6ICd2aXNpYmlsaXR5X29mZid9fTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQocywgZSlcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHMudGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWVsZW1lbnRcIiBtYXRSaXBwbGUgKGNsaWNrKT1cImFkZChzLCBtZW51VHJpZ2dlciwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRlbXBsYXRlTWVudVwiICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24+PG1hdC1pY29uIFtiaXpkb2NUb29sdGlwXT1cIidOZXcnfHRyYW5zbGF0ZVwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtbWVudSAjdGVtcGxhdGVNZW51PlxuICAgICAgICAgICAgICBAZm9yICh0IG9mIHMudGVtcGxhdGVzOyB0cmFjayB0KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjcmVhdGUocywgdClcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAodC5mYW1pbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3t0LmZhbWlseX19XG4gICAgICAgICAgICAgICAgICAgICAgJm5ic3A7LSZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3t0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICB9XG48L2Rpdj5cbjwhLS0gc2VhcmNoIGZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlcnM+XG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiY29sdW1uIGdhcFwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY29udGFpbnNcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cInt7J0NvbnRhaW5zJyB8IHRyYW5zbGF0ZX19XCIgI2NvbnRhaW5zPlxuICAgICAgQGlmIChmb3JtLnZhbHVlLmNvbnRhaW5zKSB7XG4gICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlwiIChjbGljayk9XCJmb3JtLmNvbnRyb2xzLmNvbnRhaW5zLnNldFZhbHVlKG51bGwpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7J0NhdGVnb3JpZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWN0aW9uc1wiIG11bHRpcGxlPlxuICAgICAgICBAZm9yIChjIG9mIHNlY3Rpb25zIHwgc29ydCA6ICd0aXRsZSc7IHRyYWNrIGMpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImMudHlwZVwiPnt7Yy50aXRsZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICBAaWYoZmFtaWxpZXMubGVuZ3RoKSB7XG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3snRmFtaWxpZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmYW1pbHlcIj5cbiAgICAgICAgPG1hdC1vcHRpb24+e3snQWxsJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgQGZvciAoZiBvZiBmYW1pbGllczsgdHJhY2sgZikge1xuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZlwiPnt7Zn19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5RyxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPL0MsT0FBTyxFQUE2QyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBYyxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2SSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2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QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzVGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzlGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7b0JBQy9GLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7b0JBQ3JFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQzlGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FB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Q0FBQztRQUNuQixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEssTUFBTSxLQUFLLEdBQUc7WUFDVixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUNoQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ2IsS0FBWSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtZQUN2QixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ1AsU0FBUyxLQUFLLENBQUMsUUFBd0I7WUFDbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwQixNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxTQUFTLEtBQUssQ0FBQyxHQUFHLFVBQTRCO1lBQzFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0wsQ0FBQzs4R0FqVlEsOEJBQThCO2tHQUE5Qiw4QkFBOEIsdU9BQ1QsV0FBVywrRkFDVixVQUFVLDZCQ2pEN0MsNHpKQXVHQSxtaE9ENURnQixDQUFDLGFBQWEsQ0FBQzs7QUFJbEIsOEJBQThCO0lBRDFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO0dBQ3pDLDhCQUE4QixDQWtWMUM7OzJGQWxWWSw4QkFBOEI7a0JBUDFDLFNBQVM7aUNBR00sQ0FBQyxhQUFhLENBQUMsUUFDckIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFOytSQUlzQixPQUFPO3NCQUFuRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ0UsUUFBUTtzQkFBcEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGM0MsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGl0ZW1BbmltYXRpb24gfSBmcm9tIFwiLi4vLi4vY29yZS9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9iYXNlXCI7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgY2xlYW51cCB9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9yb3V0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi8uLi9jb3JlL3BvcHVwL3BvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5UmVmIH0gZnJvbSBcIi4uL3V0aWxpdHktcmVmXCI7XHJcbmltcG9ydCB7IEVsZW1lbnRNb2RlbCwgRGVzaWduZXJNb2RlbCwgVGVtcGxhdGVJbmZvLCBwcm9ncmFtTmFtZSwgRGVzaWduZXJSZWYsIGNsb25lLCBEZXNpZ25Nb2RlLCBleHRyYWN0U3RyaW5nIH0gZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi9kZXNpZ25lci5iYXNlXCI7XHJcbmltcG9ydCB7IEFjdGlvbkRlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvYWN0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9hdHRyaWJ1dGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbnRyb2xEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9jb250cm9sLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDdWJlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvY3ViZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRm9sZGVyRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZm9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBGb3JtRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZm9ybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3VpZGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ndWlkZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTm9kZURlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvbm9kZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUG9saWN5RGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcG9saWN5LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBSZXBvcnREZXNpZ25lckNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3JlcG9ydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUm9sZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3JvbGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJ1bGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ydWxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdGF0ZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3N0YXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUeXBlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvdHlwZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVXRpbGl0eURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3V0aWxpdHkuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFZpZXdEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy92aWV3LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBXaWRnZXREZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy93aWRnZXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEpvYkRlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2pvYi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU291cmNlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvc291cmNlLmNvbXBvbmVudFwiO1xyXG5jb25zdCBTRUFSQ0hfREVCT1VOQ0UgPSAyMDA7XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBhbmltYXRpb25zOiBbaXRlbUFuaW1hdGlvbl0sXHJcbiAgICBob3N0OiB7IHRhYmluZGV4OiAnMCcgfVxyXG59KVxyXG5AQml6RG9jKHsgc2VsZWN0b3I6ICdiaXpkb2MtY29uZmlndXJhdGlvbi1kZXNpZ25lcicgfSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25EZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIFV0aWxpdHlDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJzJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBmaWx0ZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyRWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZmlsdGVyRWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgc2VhcmNoQnkgPSAwO1xyXG4gICAgbG9hZGluZyA9IHRydWU7XHJcbiAgICBzYXZpbmcgPSBmYWxzZTtcclxuICAgIGRpcnR5ID0gZmFsc2U7XHJcbiAgICBtb2RlbDogRGVzaWduZXJNb2RlbDtcclxuICAgIHNlY3Rpb25zOiBTZWN0aW9uW107XHJcbiAgICBmYW1pbGllczogc3RyaW5nW107XHJcbiAgICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgIGNvbnRhaW5zOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZz4obnVsbCksXHJcbiAgICAgICAgc2VjdGlvbnM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KG51bGwpLFxyXG4gICAgICAgIGZhbWlseTogdGhpcy5fZmIuY29udHJvbDxzdHJpbmc+KG51bGwpXHJcbiAgICB9KTtcclxuICAgIHByaXZhdGUgX3R5cGluZ1RpbWVyOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9wYW5lczogUGFuZXNSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfcG9wdXA6IFBvcHVwLFxyXG4gICAgICAgIHByaXZhdGUgX3JlZjogVXRpbGl0eVJlZjxib29sZWFuLCBEZXNpZ25lck1vZGVsLCBEZXNpZ25lck1vZGVsPikgeyB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZWYucG9wdWxhdGUoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5mb3JtcywgdHlwZTogJ0Zvcm1zJywgY29tcDogRm9ybURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRGb3JtcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIudmlld3MsIHR5cGU6ICdWaWV3cycsIGNvbXA6IFZpZXdEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50Vmlld3MgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLndpZGdldHMsIHR5cGU6ICdXaWRnZXRzJywgY29tcDogV2lkZ2V0RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFdpZGdldHMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLnJlcG9ydHMsIHR5cGU6ICdSZXBvcnRzJywgY29tcDogUmVwb3J0RGVzaWduZXJDb21wb25lbnQsIHRlbXBsYXRlczogci50UmVwb3J0cyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIudXRpbGl0aWVzLCB0eXBlOiAnVG9vbHMnLCBjb21wOiBVdGlsaXR5RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFV0aWxpdGllcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuY3ViZXMsIHR5cGU6ICdDdWJlcycsIGNvbXA6IEN1YmVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50Q3ViZXMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLnR5cGVzLCB0eXBlOiAnVHlwZXMnLCBjb21wOiBUeXBlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFR5cGVzIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5zb3VyY2VzLCB0eXBlOiAnU291cmNlcycsIGNvbXA6IFNvdXJjZURlc2lnbkNvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuYWN0aW9ucywgdHlwZTogJ0FjdGlvbnMnLCBjb21wOiBBY3Rpb25EZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRBY3Rpb25zIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5ndWlkZXMsIHR5cGU6ICdHdWlkZXMnLCBjb21wOiBHdWlkZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnR3VpZGUnKSB9XSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8veyBlbGVtZW50czogci5qb2JzLCB0eXBlOiAnSm9icycsIGNvbXA6IEpvYkRlc2lnbkNvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuZm9sZGVycywgdHlwZTogJ0ZvbGRlcnMnLCBjb21wOiBGb2xkZXJEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogW3sgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0ZvbGRlcicpIH1dIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5yb2xlcywgdHlwZTogJ1JvbGVzJywgY29tcDogUm9sZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnUm9sZScpIH1dIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5zdGF0ZXMsIHR5cGU6ICdTdGF0ZXMnLCBjb21wOiBTdGF0ZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnU3RhdGUnKSB9XSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIubm9kZXMsIHR5cGU6ICdOb2RlcycsIGNvbXA6IE5vZGVEZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnROb2RlcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIuYXR0cmlidXRlcywgdHlwZTogJ0F0dHJpYnV0ZXMnLCBjb21wOiBBdHRyaWJ1dGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50QXR0cmlidXRlcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgZWxlbWVudHM6IHIucnVsZXMsIHR5cGU6ICdSdWxlcycsIGNvbXA6IFJ1bGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50UnVsZXMgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IGVsZW1lbnRzOiByLmNvbnRyb2xzLCB0eXBlOiAnQ29udHJvbHMnLCBjb21wOiBDb250cm9sRGVzaWduQ29tcG9uZW50IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlbGVtZW50czogci5wb2xpY2llcywgdHlwZTogJ1BvbGljaWVzJywgY29tcDogUG9saWN5RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFBvbGljaWVzIH0sXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFtaWxpZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnNlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcy5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcy50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQocy50eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2Ygcy5lbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUub3B0aW9ucykgZS5vcHRpb25zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmZhbWlseSAmJiBmYW1pbGllcy5pbmRleE9mKGUuZmFtaWx5KSA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbGllcy5wdXNoKGUuZmFtaWx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5qZWN0b3IgPSB0aGlzLl9jcmVhdGVJbmplY3RvcihlLCBzLmVsZW1lbnRzLCAnd2lkZ2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mYW1pbGllcyA9IGZhbWlsaWVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHR5cGluZyBrZXlkb3duIGxpc3RlbmVyXHJcbiAgICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxFbGVtZW50TW9kZWxbXT4pIHtcclxuICAgICAgICBjb25zdCByYW5nZSA9IGV2ZW50LmNvbnRhaW5lci5kYXRhLnNsaWNlKFxyXG4gICAgICAgICAgICBNYXRoLm1pbihldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpLFxyXG4gICAgICAgICAgICBNYXRoLm1heChldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpXHJcbiAgICAgICAgKSwgZmlsZSA9IHJhbmdlWzBdLmNvbmZpZ3VyYXRpb25GaWxlO1xyXG4gICAgICAgIGlmXHJcbiAgICAgICAgICAgIC8vIGFjcm9zcyBmaWxlc1xyXG4gICAgICAgICAgICAocmFuZ2Uuc2xpY2UoMSkuc29tZShlID0+IGUuY29uZmlndXJhdGlvbkZpbGUgIT09IGZpbGUpKSB7XHJcbiAgICAgICAgICAgIC8vIHN0YXJ0IG9yZGluYWxcclxuICAgICAgICAgICAgbGV0IGkgPSBldmVudC5jb250YWluZXIuZGF0YVtldmVudC5jdXJyZW50SW5kZXhdLm9yZGluYWwgfHwgLTE7XHJcbiAgICAgICAgICAgIC8vIHNldCBvcmRpbmFsIHRvIGl0ZW1zIGluIHJhbmdlXHJcbiAgICAgICAgICAgIHJhbmdlLmZvckVhY2goZSA9PiBlLm9yZGluYWwgPSBpKyspO1xyXG4gICAgICAgICAgICAvLyBpbmNyZWFzZSBvdGhlciBoaWdoZXIgdGhhbiBsYXN0IGluIHJhbmdlXHJcbiAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLmZpbHRlcihlID0+IGUub3JkaW5hbCAmJiBlLm9yZGluYWwgPiBpKS5mb3JFYWNoKGUgPT4gZS5vcmRpbmFsICs9IDEpO1xyXG4gICAgICAgIH0gZWxzZSAvLyBuYXRpdmUgb3JkZXIgaW4gY29sbGVjdGlvblxyXG4gICAgICAgICAgICByYW5nZS5mb3JFYWNoKGUgPT4gZS5vcmRpbmFsID0gbnVsbCk7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5ICYmIChldmVudC5rZXkgPT09ICdTJyB8fCBldmVudC5rZXkgPT09ICdzJykpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkgPT09ICdxJyB8fCBldmVudC5rZXkgPT09ICdRJykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5GaWx0ZXIoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VhcmNoQnkgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3R5cGluZ1RpbWVyKTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMuZWxlbWVudHMuZm9yRWFjaChlID0+IGUuaGlkZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgcy5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KHt9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCeSA9IDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV2dFxyXG4gICAgICovXHJcbiAgICBvcGVuRmlsdGVyKGV2dD86IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID1cclxuICAgICAgICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZShTRUFSQ0hfREVCT1VOQ0UpKS5cclxuICAgICAgICAgICAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvbnRhaW5zLCBzZWN0aW9ucywgZmFtaWx5IH0gPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9ucy5pbmRleE9mKHMudHlwZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWlucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy50aXRsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY29udGFpbnMpID4gMCAmJiAhZmFtaWx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChlID0+IGUuaGlkZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYW55ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbnRhaW5zIHx8IChleHRyYWN0U3RyaW5nKGUudGl0bGUpIHx8IGUubmFtZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNvbnRhaW5zKSA+IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWZhbWlseSB8fCBlLmZhbWlseSA9PT0gZmFtaWx5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcy50ZW1wbGF0ZXMgfHwgKCFmYW1pbHkgJiYgIWNvbnRhaW5zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5oaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzLmhpZGUgPSAhcy50ZW1wbGF0ZXMuZmluZCh0ID0+ICghY29udGFpbnMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGl0bGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNvbnRhaW5zKSA+IC0xKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFmYW1pbHkgfHwgdC5mYW1pbHkgPT09IGZhbWlseSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoQnkgKz0gMTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHBvcCA9IHRoaXMuX3BvcHVwLm9wZW4odGhpcy5maWx0ZXJzLCB0aGlzLmZpbHRlckVsLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5mb3JtXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcG9wLm9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvcHVwLXBhbmVsIGlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudCk/LmZvY3VzKCkpO1xyXG4gICAgICAgIHBvcC5cclxuICAgICAgICAgICAgY2xvc2VkKCkuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZShzdWJzY3JpYmUudW5zdWJzY3JpYmUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luc2VydChzZWN0aW9uOiBTZWN0aW9uLCBlbGVtZW50OiBFbGVtZW50TW9kZWwsIHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgICAgICAvLyByZXNvbHZlIG5hbWUgJiB0aXRsZVxyXG4gICAgICAgIGxldCBpID0gZWxlbWVudC5uYW1lLmxhc3RJbmRleE9mKCdfJyksXHJcbiAgICAgICAgICAgIGogPSAoZXh0cmFjdFN0cmluZyhlbGVtZW50LnRpdGxlKSkubGFzdEluZGV4T2YoJyAnKSxcclxuICAgICAgICAgICAgbiA9IDAsIG5hbWUsIHRpdGxlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbisrO1xyXG4gICAgICAgICAgICBuYW1lID0gKGkgPCAwIHx8IGlzTmFOKHBhcnNlSW50KGVsZW1lbnQubmFtZS5zdWJzdHJpbmcoaSArIDEpKSkgPyBlbGVtZW50Lm5hbWUgOiBlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKDAsIGkpKSArICdfJyArIG47XHJcbiAgICAgICAgICAgIHRpdGxlID0gKGogPCAwIHx8IGlzTmFOKHBhcnNlSW50KGV4dHJhY3RTdHJpbmcoZWxlbWVudC50aXRsZSkuc3Vic3RyaW5nKGogKyAxKSkpID8gZWxlbWVudC50aXRsZSA6IGV4dHJhY3RTdHJpbmcoZWxlbWVudC50aXRsZSkuc3Vic3RyaW5nKDAsIGopKSArICcgJyArIG47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChzZWN0aW9uLmVsZW1lbnRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IG5hbWUgfHwgZS50aXRsZSA9PT0gdGl0bGUpKTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5uYW1lID0gbmFtZSwgZWxlbWVudC50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIC8vIGluamVjdG9yXHJcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLl9jcmVhdGVJbmplY3RvcihlbGVtZW50LCBzZWN0aW9uLmVsZW1lbnRzLCAnd2lkZ2V0Jyk7XHJcbiAgICAgICAgZWxlbWVudC5pbmplY3RvciA9IGluamVjdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl9vcGVuKGVsZW1lbnQsIHNlY3Rpb24sICdhZGQnKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgLy8gYWRkIHRvIGFycmF5XHJcbiAgICAgICAgICAgIHNlY3Rpb24uZWxlbWVudHMuc3BsaWNlKHBvc2l0aW9uICsgMSwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIGZvcmNlIHJlbmRlclxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5ICs9IDE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gbW9kZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb3BlbihlbGVtZW50OiBFbGVtZW50TW9kZWwsXHJcbiAgICAgICAgc2VjdGlvbjogU2VjdGlvbixcclxuICAgICAgICBtb2RlOiBEZXNpZ25Nb2RlKSB7XHJcbiAgICAgICAgbGV0IGVjbG9uZSA9IHsgLi4uZWxlbWVudCB9O1xyXG4gICAgICAgIGRlbGV0ZSBlY2xvbmUuaW5qZWN0b3I7XHJcbiAgICAgICAgZWNsb25lID0gY2xvbmUoZWNsb25lKTsgLy8gZGVlcFxyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5fY3JlYXRlSW5qZWN0b3IoZWNsb25lLCBzZWN0aW9uLmVsZW1lbnRzLCBtb2RlKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5fcGFuZXMubmF2aWdhdGU8RGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudD4oc2VjdGlvbi5jb21wLCB7XHJcbiAgICAgICAgICAgICAgICBwb2xpY3k6IG1vZGUgPT09ICdhZGQnID8gT3BlblBvbGljeS5EaWFsb2cgfCBPcGVuUG9saWN5LlN0cmV0Y2ggOlxyXG4gICAgICAgICAgICAgICAgICAgIE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5Ub2dnbGUgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXA6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoc2VjdGlvbi50aXRsZSksXHJcbiAgICAgICAgICAgICAgICAvL3RpdGxlLFxyXG4gICAgICAgICAgICAgICAgaW5qZWN0b3I6IGluamVjdG9yXHJcbiAgICAgICAgICAgIH0pLnRoZW4ocGFuZSA9PlxyXG4gICAgICAgICAgICAgICAgcGFuZS5pbnN0YW5jZS5kZXNpZ25lci5vblNhdmUuc3Vic2NyaWJlKGVsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LCBlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cclxuICAgICAqIEBwYXJhbSBtb2RlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jcmVhdGVJbmplY3RvcihlbGVtZW50OiBFbGVtZW50TW9kZWw8YW55PiwgY29sbGVjdGlvbjogRWxlbWVudE1vZGVsW10sIG1vZGU6IERlc2lnbk1vZGUpIHtcclxuICAgICAgICBjb25zdCByZWYgPSBuZXcgRGVzaWduZXJSZWYodGhpcy5tb2RlbCwgZWxlbWVudCwgY29sbGVjdGlvbiwgbW9kZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgICAgICAgICAgcHJvdmlkZTogRGVzaWduZXJSZWYsIHVzZVZhbHVlOiByZWZcclxuICAgICAgICAgICAgfV0sIHBhcmVudDogdGhpcy5faW5qZWN0b3JcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaW5qZWN0b3I7XHJcbiAgICB9XHJcbiAgICBhZGQoc2VjdGlvbjogU2VjdGlvbiwgbWVudTogTWF0TWVudVRyaWdnZXIsIGV2dDogRXZlbnQpIHtcclxuICAgICAgICBpZiAoc2VjdGlvbi50ZW1wbGF0ZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgbWVudS5vcGVuTWVudSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGUoc2VjdGlvbiwgc2VjdGlvbi50ZW1wbGF0ZXNbMF0pO1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlKHNlY3Rpb246IFNlY3Rpb24sIHRlbXBsYXRlOiBUZW1wbGF0ZUluZm8pIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICAgICAgICAuLi50ZW1wbGF0ZSxcclxuICAgICAgICAgICAgbmFtZTogcHJvZ3JhbU5hbWUodGVtcGxhdGUua2V5IHx8IHRlbXBsYXRlLnRpdGxlKSxcclxuICAgICAgICAgICAgZHJhZnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGhpZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7fVxyXG4gICAgICAgIH0gYXMgRWxlbWVudE1vZGVsO1xyXG4gICAgICAgIHRoaXMuX2luc2VydChzZWN0aW9uLCBlbGVtZW50LCBzZWN0aW9uLmVsZW1lbnRzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmUoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgc2VjdGlvbi5lbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBjb3B5KHNlY3Rpb246IFNlY3Rpb24sIGVsZW1lbnQ6IEVsZW1lbnRNb2RlbCkge1xyXG4gICAgICAgIGxldCBlY2xvbmUgPSB7XHJcbiAgICAgICAgICAgIC4uLmVsZW1lbnQsXHJcbiAgICAgICAgICAgIGNvcHlPZjogZWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICBkcmFmdDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGVsZXRlIGVjbG9uZS5pbmplY3RvcjtcclxuICAgICAgICBkZWxldGUgZWNsb25lLnJlc291cmNlVHlwZTtcclxuICAgICAgICBlY2xvbmUgPSBjbG9uZShlY2xvbmUpOyAvLyBkZWVwXHJcbiAgICAgICAgdGhpcy5faW5zZXJ0KHNlY3Rpb24sIGVjbG9uZSwgc2VjdGlvbi5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpKTtcclxuICAgIH1cclxuICAgIGVkaXQoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5fb3BlbihlbGVtZW50LCBzZWN0aW9uLCAnZWRpdCcpO1xyXG4gICAgfVxyXG4gICAgdG9nZ2xlRGlzYWJsZWQoZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9ICFlbGVtZW50LmRpc2FibGVkO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgeyBjb250cm9scywgYXR0cmlidXRlcywgcG9saWNpZXMsIGFjdGlvbnMsIGN1YmVzLCBmb2xkZXJzLCBmb3JtcywgZ3VpZGVzLCByZXBvcnRzLCByb2xlcywgcnVsZXMsIHN0YXRlcywgdHlwZXMsIHV0aWxpdGllcywgdmlld3MsIHdpZGdldHMsIG5vZGVzIH0gPSB0aGlzLm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICAgICAgICBhY3Rpb25zOiBzdHJpcChhY3Rpb25zKSxcclxuICAgICAgICAgICAgY3ViZXM6IHN0cmlwKGN1YmVzKSxcclxuICAgICAgICAgICAgZm9sZGVyczogc3RyaXAoZm9sZGVycyksXHJcbiAgICAgICAgICAgIGZvcm1zOiBzdHJpcChmb3JtcyksXHJcbiAgICAgICAgICAgIGd1aWRlczogc3RyaXAoZ3VpZGVzKSxcclxuICAgICAgICAgICAgcmVwb3J0czogc3RyaXAocmVwb3J0cyksXHJcbiAgICAgICAgICAgIHJvbGVzOiBzdHJpcChyb2xlcyksXHJcbiAgICAgICAgICAgIHJ1bGVzOiBzdHJpcChydWxlcyksXHJcbiAgICAgICAgICAgIHBvbGljaWVzOiBzdHJpcChwb2xpY2llcyksXHJcbiAgICAgICAgICAgIHN0YXRlczogc3RyaXAoc3RhdGVzKSxcclxuICAgICAgICAgICAgdHlwZXM6IHN0cmlwKHR5cGVzKSxcclxuICAgICAgICAgICAgdXRpbGl0aWVzOiBzdHJpcCh1dGlsaXRpZXMpLFxyXG4gICAgICAgICAgICB2aWV3czogc3RyaXAodmlld3MpLFxyXG4gICAgICAgICAgICBub2Rlczogc3RyaXAobm9kZXMpLFxyXG4gICAgICAgICAgICB3aWRnZXRzOiBzdHJpcCh3aWRnZXRzKSxcclxuICAgICAgICAgICAgY29udHJvbHM6IHN0cmlwKGNvbnRyb2xzKSxcclxuICAgICAgICAgICAgYXR0cmlidXRlczogc3RyaXAoYXR0cmlidXRlcylcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3JlZi5leGVjdXRlKFxyXG4gICAgICAgICAgICBtb2RlbCBhcyBhbnkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHMudG9hc3QoJ0NoYW5nZXNTYXZlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5KHBvbGljaWVzLCBhY3Rpb25zLCBjdWJlcywgZm9sZGVycywgZm9ybXMsIGd1aWRlcywgcmVwb3J0cywgcm9sZXMsIHJ1bGVzLCBzdGF0ZXMsIHR5cGVzLCB1dGlsaXRpZXMsIHZpZXdzLCB3aWRnZXRzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucmVmcmVzaCgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZnVuY3Rpb24gc3RyaXAoZWxlbWVudHM6IEVsZW1lbnRNb2RlbFtdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0geyAuLi5lIH07XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudC5pbmplY3RvcjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LmFyZ3VtZW50cztcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhbnVwKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gYXBwbHkoLi4uY29sbGVjdGlvbjogRWxlbWVudE1vZGVsW11bXSkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uLmZvckVhY2gocyA9PiBzLmZvckVhY2goZSA9PiBkZWxldGUgZS5kcmFmdCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5pbnRlcmZhY2UgU2VjdGlvbiB7XHJcbiAgICBjb21wOiBDb21wb25lbnRUeXBlPGFueT47XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGVsZW1lbnRzOiBFbGVtZW50TW9kZWxbXTtcclxuICAgIHRlbXBsYXRlcz86IFRlbXBsYXRlSW5mb1tdO1xyXG4gICAgaGlkZT86IGJvb2xlYW47XHJcbn1cclxuIiwiPG1hdC10b29sYmFyPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFkaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5GaWx0ZXIoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidGaWx0ZXInfHRyYW5zbGF0ZVwiICNmaWx0ZXJFbD48bWF0LWljb24+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPjwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxtYXQtcHJvZ3Jlc3MtYmFyIFttb2RlXT1cImxvYWRpbmcgPyAnYnVmZmVyJyA6ICdpbmRldGVybWluYXRlJ1wiIFtzdHlsZS52aXNpYmlsaXR5XT1cImxvYWRpbmcgPyAndmlzaWJsZSc6J2hpZGRlbidcIj48L21hdC1wcm9ncmVzcy1iYXI+XG5AaWYgKGxvYWRpbmcpIHtcbiAgPGJpemRvYy1ub25lIHRpdGxlPVwiU2V0dGluZ1RoaW5nc1VwXCIgc3VidGl0bGU9XCJQbGVhc2VXYWl0XCIgaWNvbj1cImFyY2hpdGVjdHVyZVwiPjwvYml6ZG9jLW5vbmU+XG59XG48ZGl2PlxuICBAZm9yIChzIG9mIHNlY3Rpb25zIHwgZmlsdGVyQnk6J2hpZGUnOiBmYWxzZTogc2VhcmNoQnk7IHRyYWNrIHMpIHtcbiAgICA8c2VjdGlvbj5cbiAgICAgIDxoMiBjbGFzcz1cIm1hdC1oMVwiPnt7cy50aXRsZX19PC9oMj5cbiAgICAgIDwhLS08aHIgLz4tLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50c1wiIGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgW2Nka0Ryb3BMaXN0RGF0YV09XCJzLmVsZW1lbnRzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoZSBvZiBzLmVsZW1lbnRzIHwgZmlsdGVyQnk6J2hpZGUnOiBmYWxzZTogc2VhcmNoQnk7IHRyYWNrIGUpIHtcbiAgICAgICAgICA8bWF0LWNhcmQgW2NsYXNzLmRpc2FibGVkXT1cImUuZGlzYWJsZWRcIiBjZGtEcmFnIGNka0RyYWdSb290RWxlbWVudD1cIi5tYXQtbWRjLWNhcmQtdGl0bGVcIj5cbiAgICAgICAgICAgIDwhLS0gQGl0ZW0tLT5cbiAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICB7e2UudGl0bGV8bG9jYWxpemVkU3RyaW5nfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmIChlLmhlbHApIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbYml6ZG9jVG9vbHRpcF09XCJlLmhlbHBcIiBbYml6ZG9jVG9vbHRpcER1cmF0aW9uXT1cIjYwMDBcIj5oZWxwX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIHt7ZS5uYW1lfX1cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwicy5jb21wOyBpbmplY3RvcjogZS5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgQGlmICghZS5jb3B5T2YpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29weShzLCBlKVwiIFtiaXpkb2NUb29sdGlwXT1cIidDb3B5J3x0cmFuc2xhdGVcIj48bWF0LWljb24+ZmlsZV9jb3B5PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGUuZHJhZnQgfHwgZS5lbXB0eSkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZW1vdmUocywgZSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZURpc2FibGVkKGUpXCIgW2JpemRvY1Rvb2x0aXBdPVwiKGUuZGlzYWJsZWQgPyAnRW5hYmxlJyA6ICdEaXNhYmxlJyl8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnt7ZS5kaXNhYmxlZCA/ICd2aXNpYmlsaXR5JyA6ICd2aXNpYmlsaXR5X29mZid9fTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQocywgZSlcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHMudGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWVsZW1lbnRcIiBtYXRSaXBwbGUgKGNsaWNrKT1cImFkZChzLCBtZW51VHJpZ2dlciwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRlbXBsYXRlTWVudVwiICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24+PG1hdC1pY29uIFtiaXpkb2NUb29sdGlwXT1cIidOZXcnfHRyYW5zbGF0ZVwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtbWVudSAjdGVtcGxhdGVNZW51PlxuICAgICAgICAgICAgICBAZm9yICh0IG9mIHMudGVtcGxhdGVzOyB0cmFjayB0KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjcmVhdGUocywgdClcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAodC5mYW1pbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3t0LmZhbWlseX19XG4gICAgICAgICAgICAgICAgICAgICAgJm5ic3A7LSZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3t0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICB9XG48L2Rpdj5cbjwhLS0gc2VhcmNoIGZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlcnM+XG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiY29sdW1uIGdhcFwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY29udGFpbnNcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cInt7J0NvbnRhaW5zJyB8IHRyYW5zbGF0ZX19XCIgI2NvbnRhaW5zPlxuICAgICAgQGlmIChmb3JtLnZhbHVlLmNvbnRhaW5zKSB7XG4gICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlwiIChjbGljayk9XCJmb3JtLmNvbnRyb2xzLmNvbnRhaW5zLnNldFZhbHVlKG51bGwpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7J0NhdGVnb3JpZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWN0aW9uc1wiIG11bHRpcGxlPlxuICAgICAgICBAZm9yIChjIG9mIHNlY3Rpb25zIHwgc29ydCA6ICd0aXRsZSc7IHRyYWNrIGMpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImMudHlwZVwiPnt7Yy50aXRsZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICBAaWYoZmFtaWxpZXMubGVuZ3RoKSB7XG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3snRmFtaWxpZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmYW1pbHlcIj5cbiAgICAgICAgPG1hdC1vcHRpb24+e3snQWxsJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgQGZvciAoZiBvZiBmYW1pbGllczsgdHJhY2sgZikge1xuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZlwiPnt7Zn19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=