@pega/angular-sdk-components 0.24.9 → 0.25.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 (290) hide show
  1. package/fesm2022/pega-angular-sdk-components.mjs +2832 -1807
  2. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  3. package/lib/_bridge/helpers/sdk-pega-component-map.d.ts +4 -0
  4. package/lib/_components/designSystemExtension/banner/banner.component.d.ts +0 -1
  5. package/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.d.ts +0 -1
  6. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +1 -1
  7. package/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.d.ts +2 -1
  8. package/lib/_components/designSystemExtension/operator/operator.component.d.ts +2 -3
  9. package/lib/_components/designSystemExtension/pulse/pulse.component.d.ts +2 -3
  10. package/lib/_components/field/auto-complete/auto-complete.component.d.ts +8 -3
  11. package/lib/_components/field/cancel-alert/cancel-alert.component.d.ts +0 -1
  12. package/lib/_components/field/check-box/check-box.component.d.ts +5 -3
  13. package/lib/_components/field/currency/currency.component.d.ts +6 -4
  14. package/lib/_components/field/date/date.component.d.ts +17 -7
  15. package/lib/_components/field/date-time/date-time.component.d.ts +10 -3
  16. package/lib/_components/field/decimal/decimal.component.d.ts +4 -4
  17. package/lib/_components/field/dropdown/dropdown.component.d.ts +14 -3
  18. package/lib/_components/field/email/email.component.d.ts +2 -1
  19. package/lib/_components/field/group/group.component.d.ts +0 -1
  20. package/lib/_components/field/integer/integer.component.d.ts +2 -1
  21. package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +1 -2
  22. package/lib/_components/field/location/location.component.d.ts +71 -0
  23. package/lib/_components/field/multiselect/multiselect.component.d.ts +3 -3
  24. package/lib/_components/field/percentage/percentage.component.d.ts +6 -3
  25. package/lib/_components/field/phone/phone.component.d.ts +6 -8
  26. package/lib/_components/field/radio-buttons/radio-buttons.component.d.ts +4 -2
  27. package/lib/_components/field/rich-text/rich-text.component.d.ts +3 -2
  28. package/lib/_components/field/scalar-list/scalar-list.component.d.ts +0 -1
  29. package/lib/_components/field/selectable-card/selectable-card.component.d.ts +75 -0
  30. package/lib/_components/field/semantic-link/semantic-link.component.d.ts +0 -1
  31. package/lib/_components/field/text/text.component.d.ts +3 -2
  32. package/lib/_components/field/text-area/text-area.component.d.ts +2 -1
  33. package/lib/_components/field/text-content/text-content.component.d.ts +0 -1
  34. package/lib/_components/field/text-input/text-input.component.d.ts +2 -1
  35. package/lib/_components/field/time/time.component.d.ts +3 -1
  36. package/lib/_components/field/url/url.component.d.ts +2 -1
  37. package/lib/_components/field/user-reference/user-reference.component.d.ts +7 -1
  38. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +0 -2
  39. package/lib/_components/infra/Containers/flow-container/helpers.d.ts +1 -0
  40. package/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.d.ts +0 -1
  41. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +1 -4
  42. package/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.d.ts +0 -1
  43. package/lib/_components/infra/Containers/view-container/helper.d.ts +2 -0
  44. package/lib/_components/infra/Containers/view-container/view-container.component.d.ts +0 -1
  45. package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +1 -1
  46. package/lib/_components/infra/assignment/assignment.component.d.ts +6 -4
  47. package/lib/_components/infra/assignment-card/assignment-card.component.d.ts +0 -1
  48. package/lib/_components/infra/dashboard-filter/dashboard-filter.component.d.ts +0 -1
  49. package/lib/_components/infra/defer-load/defer-load.component.d.ts +3 -3
  50. package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +1 -1
  51. package/lib/_components/infra/multi-step/multi-step.component.d.ts +0 -1
  52. package/lib/_components/infra/navbar/navbar.component.d.ts +2 -3
  53. package/lib/_components/infra/reference/reference.component.d.ts +23 -3
  54. package/lib/_components/infra/region/region.component.d.ts +0 -1
  55. package/lib/_components/infra/root-container/root-container.component.d.ts +3 -2
  56. package/lib/_components/infra/stages/stages.component.d.ts +0 -1
  57. package/lib/_components/infra/view/view.component.d.ts +1 -1
  58. package/lib/_components/template/app-shell/app-shell.component.d.ts +0 -1
  59. package/lib/_components/template/banner-page/banner-page.component.d.ts +0 -1
  60. package/lib/_components/template/base/details-template-base.d.ts +21 -0
  61. package/lib/_components/template/base/form-template-base.d.ts +10 -0
  62. package/lib/_components/template/case-summary/case-summary.component.d.ts +3 -3
  63. package/lib/_components/template/case-view/case-view.component.d.ts +1 -3
  64. package/lib/_components/template/confirmation/confirmation.component.d.ts +0 -1
  65. package/lib/_components/template/data-reference/data-reference.component.d.ts +0 -1
  66. package/lib/_components/template/default-form/default-form.component.d.ts +8 -7
  67. package/lib/_components/template/details/details.component.d.ts +3 -12
  68. package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +3 -12
  69. package/lib/_components/template/details-one-column/details-one-column.component.d.ts +3 -14
  70. package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +3 -14
  71. package/lib/_components/template/details-three-column/details-three-column.component.d.ts +3 -14
  72. package/lib/_components/template/details-two-column/details-two-column.component.d.ts +3 -14
  73. package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +3 -14
  74. package/lib/_components/template/dynamic-tabs/dynamic-tabs.component.d.ts +1 -1
  75. package/lib/_components/template/field-group-template/field-group-template.component.d.ts +12 -9
  76. package/lib/_components/template/inline-dashboard/inline-dashboard.component.d.ts +0 -1
  77. package/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.d.ts +0 -1
  78. package/lib/_components/template/list-page/list-page.component.d.ts +0 -1
  79. package/lib/_components/template/list-view/list-view.component.d.ts +6 -4
  80. package/lib/_components/template/list-view/listViewHelpers.d.ts +1 -1
  81. package/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.d.ts +0 -1
  82. package/lib/_components/template/narrow-wide-form/narrow-wide-form.component.d.ts +0 -1
  83. package/lib/_components/template/one-column/one-column.component.d.ts +2 -2
  84. package/lib/_components/template/one-column-page/one-column-page.component.d.ts +0 -1
  85. package/lib/_components/template/one-column-tab/one-column-tab.component.d.ts +0 -1
  86. package/lib/_components/template/page/page.component.d.ts +0 -1
  87. package/lib/_components/template/promoted-filters/promoted-filters.component.d.ts +0 -1
  88. package/lib/_components/template/repeating-structures/repeating-structures.component.d.ts +0 -1
  89. package/lib/_components/template/simple-table/simple-table.component.d.ts +0 -1
  90. package/lib/_components/template/simple-table-manual/helpers.d.ts +19 -4
  91. package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +10 -3
  92. package/lib/_components/template/simple-table-select/simple-table-select.component.d.ts +0 -1
  93. package/lib/_components/template/single-reference-readonly/single-reference-readonly.component.d.ts +0 -1
  94. package/lib/_components/template/sub-tabs/sub-tabs.component.d.ts +0 -1
  95. package/lib/_components/template/three-column/three-column.component.d.ts +2 -2
  96. package/lib/_components/template/three-column-page/three-column-page.component.d.ts +0 -1
  97. package/lib/_components/template/two-column/two-column.component.d.ts +2 -2
  98. package/lib/_components/template/two-column-page/two-column-page.component.d.ts +0 -1
  99. package/lib/_components/template/two-column-tab/two-column-tab.component.d.ts +0 -1
  100. package/lib/_components/template/utils.d.ts +7 -0
  101. package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +2 -2
  102. package/lib/_components/template/wide-narrow-page/wide-narrow-page.component.d.ts +1 -2
  103. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +3 -4
  104. package/lib/_components/widget/app-announcement/app-announcement.component.d.ts +0 -1
  105. package/lib/_components/widget/attachment/attachment.component.d.ts +3 -4
  106. package/lib/_components/widget/case-history/case-history.component.d.ts +0 -1
  107. package/lib/_components/widget/feed-container/feed-container.component.d.ts +2 -3
  108. package/lib/_components/widget/file-utility/file-utility.component.d.ts +1 -2
  109. package/lib/_components/widget/quick-create/quick-create.component.d.ts +0 -1
  110. package/lib/_components/widget/todo/todo.component.d.ts +10 -14
  111. package/lib/_components/widget/utility/utility.component.d.ts +0 -1
  112. package/lib/_helpers/common.d.ts +1 -1
  113. package/lib/_helpers/createstage-utils.d.ts +1 -0
  114. package/lib/_helpers/formatters/boolean.d.ts +1 -2
  115. package/lib/_helpers/formatters/common.d.ts +2 -2
  116. package/lib/_helpers/formatters/currency.d.ts +1 -2
  117. package/lib/_helpers/formatters/date.d.ts +1 -2
  118. package/lib/_helpers/formatters/index.d.ts +1 -2
  119. package/lib/_helpers/utils.d.ts +12 -0
  120. package/lib/_messages/error-messages.service.d.ts +1 -1
  121. package/lib/_services/banner.service.d.ts +8 -0
  122. package/lib/_services/case.service.d.ts +1 -1
  123. package/lib/_services/datapage.service.d.ts +1 -1
  124. package/lib/_services/endpoints.d.ts +0 -1
  125. package/lib/_services/google-maps-loader.service.d.ts +7 -0
  126. package/lib/doc/KeyReleaseUpdates.md +35 -1
  127. package/package.json +20 -6
  128. package/public-api.d.ts +15 -11
  129. package/esm2022/lib/_bridge/angular-pconnect.mjs +0 -428
  130. package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +0 -114
  131. package/esm2022/lib/_bridge/helpers/sdk-pega-component-map.mjs +0 -239
  132. package/esm2022/lib/_bridge/helpers/sdk_component_map.mjs +0 -142
  133. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +0 -50
  134. package/esm2022/lib/_components/designSystemExtension/alert-banner/alert-banner.component.mjs +0 -29
  135. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +0 -31
  136. package/esm2022/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.mjs +0 -51
  137. package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +0 -31
  138. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +0 -83
  139. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +0 -37
  140. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +0 -31
  141. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +0 -36
  142. package/esm2022/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.mjs +0 -25
  143. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +0 -28
  144. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +0 -42
  145. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +0 -143
  146. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +0 -33
  147. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +0 -93
  148. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +0 -18
  149. package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +0 -286
  150. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +0 -96
  151. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +0 -223
  152. package/esm2022/lib/_components/field/currency/currency.component.mjs +0 -177
  153. package/esm2022/lib/_components/field/date/date.component.mjs +0 -225
  154. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +0 -181
  155. package/esm2022/lib/_components/field/decimal/decimal.component.mjs +0 -185
  156. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +0 -192
  157. package/esm2022/lib/_components/field/email/email.component.mjs +0 -150
  158. package/esm2022/lib/_components/field/group/group.component.mjs +0 -64
  159. package/esm2022/lib/_components/field/integer/integer.component.mjs +0 -155
  160. package/esm2022/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.mjs +0 -44
  161. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +0 -307
  162. package/esm2022/lib/_components/field/multiselect/utils.mjs +0 -187
  163. package/esm2022/lib/_components/field/percentage/percentage.component.mjs +0 -174
  164. package/esm2022/lib/_components/field/phone/phone.component.mjs +0 -167
  165. package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +0 -184
  166. package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +0 -103
  167. package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +0 -96
  168. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +0 -57
  169. package/esm2022/lib/_components/field/text/text.component.mjs +0 -138
  170. package/esm2022/lib/_components/field/text-area/text-area.component.mjs +0 -153
  171. package/esm2022/lib/_components/field/text-content/text-content.component.mjs +0 -69
  172. package/esm2022/lib/_components/field/text-input/text-input.component.mjs +0 -152
  173. package/esm2022/lib/_components/field/time/time.component.mjs +0 -153
  174. package/esm2022/lib/_components/field/url/url.component.mjs +0 -152
  175. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +0 -187
  176. package/esm2022/lib/_components/infra/Containers/base-components/flow-container-base.component.mjs +0 -18
  177. package/esm2022/lib/_components/infra/Containers/base-components/helper.mjs +0 -71
  178. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +0 -487
  179. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +0 -68
  180. package/esm2022/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.mjs +0 -24
  181. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +0 -342
  182. package/esm2022/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.mjs +0 -32
  183. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +0 -218
  184. package/esm2022/lib/_components/infra/action-buttons/action-buttons.component.mjs +0 -31
  185. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +0 -383
  186. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +0 -47
  187. package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +0 -87
  188. package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +0 -141
  189. package/esm2022/lib/_components/infra/error-boundary/error-boundary.component.mjs +0 -18
  190. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +0 -80
  191. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +0 -136
  192. package/esm2022/lib/_components/infra/reference/reference.component.mjs +0 -133
  193. package/esm2022/lib/_components/infra/region/region.component.mjs +0 -33
  194. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +0 -228
  195. package/esm2022/lib/_components/infra/stages/stages.component.mjs +0 -62
  196. package/esm2022/lib/_components/infra/view/view.component.mjs +0 -173
  197. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +0 -140
  198. package/esm2022/lib/_components/template/banner-page/banner-page.component.mjs +0 -43
  199. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +0 -101
  200. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +0 -190
  201. package/esm2022/lib/_components/template/confirmation/confirmation.component.mjs +0 -68
  202. package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +0 -237
  203. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +0 -61
  204. package/esm2022/lib/_components/template/details/details.component.mjs +0 -103
  205. package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +0 -72
  206. package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +0 -71
  207. package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +0 -66
  208. package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +0 -80
  209. package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +0 -77
  210. package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +0 -77
  211. package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +0 -64
  212. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +0 -23
  213. package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +0 -124
  214. package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +0 -24
  215. package/esm2022/lib/_components/template/inline-dashboard/inline-dashboard.component.mjs +0 -22
  216. package/esm2022/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.mjs +0 -40
  217. package/esm2022/lib/_components/template/list-page/list-page.component.mjs +0 -14
  218. package/esm2022/lib/_components/template/list-view/DefaultViewMeta.mjs +0 -208
  219. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +0 -1202
  220. package/esm2022/lib/_components/template/list-view/listViewHelpers.mjs +0 -60
  221. package/esm2022/lib/_components/template/list-view/utils.mjs +0 -662
  222. package/esm2022/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.mjs +0 -44
  223. package/esm2022/lib/_components/template/narrow-wide-form/narrow-wide-form.component.mjs +0 -30
  224. package/esm2022/lib/_components/template/one-column/one-column.component.mjs +0 -30
  225. package/esm2022/lib/_components/template/one-column-page/one-column-page.component.mjs +0 -16
  226. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +0 -30
  227. package/esm2022/lib/_components/template/page/page.component.mjs +0 -52
  228. package/esm2022/lib/_components/template/promoted-filters/promoted-filters.component.mjs +0 -149
  229. package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +0 -138
  230. package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +0 -104
  231. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +0 -270
  232. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +0 -781
  233. package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +0 -129
  234. package/esm2022/lib/_components/template/single-reference-readonly/single-reference-readonly.component.mjs +0 -16
  235. package/esm2022/lib/_components/template/sub-tabs/sub-tabs.component.mjs +0 -67
  236. package/esm2022/lib/_components/template/three-column/three-column.component.mjs +0 -30
  237. package/esm2022/lib/_components/template/three-column-page/three-column-page.component.mjs +0 -16
  238. package/esm2022/lib/_components/template/two-column/two-column.component.mjs +0 -30
  239. package/esm2022/lib/_components/template/two-column-page/two-column-page.component.mjs +0 -40
  240. package/esm2022/lib/_components/template/two-column-tab/two-column-tab.component.mjs +0 -30
  241. package/esm2022/lib/_components/template/utils.mjs +0 -22
  242. package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +0 -30
  243. package/esm2022/lib/_components/template/wide-narrow-page/wide-narrow-page.component.mjs +0 -53
  244. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +0 -137
  245. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +0 -24
  246. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +0 -395
  247. package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +0 -80
  248. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +0 -521
  249. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +0 -638
  250. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +0 -57
  251. package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +0 -75
  252. package/esm2022/lib/_components/widget/todo/todo.component.mjs +0 -214
  253. package/esm2022/lib/_components/widget/utility/utility.component.mjs +0 -34
  254. package/esm2022/lib/_directives/thousand-seperator.directive.mjs +0 -28
  255. package/esm2022/lib/_helpers/case-utils.mjs +0 -71
  256. package/esm2022/lib/_helpers/common.mjs +0 -20
  257. package/esm2022/lib/_helpers/currency-utils.mjs +0 -57
  258. package/esm2022/lib/_helpers/date-format-utils.mjs +0 -68
  259. package/esm2022/lib/_helpers/event-util.mjs +0 -18
  260. package/esm2022/lib/_helpers/field-group-utils.mjs +0 -47
  261. package/esm2022/lib/_helpers/filter-utils.mjs +0 -106
  262. package/esm2022/lib/_helpers/formatters/boolean.mjs +0 -20
  263. package/esm2022/lib/_helpers/formatters/common.mjs +0 -16
  264. package/esm2022/lib/_helpers/formatters/currency-map.mjs +0 -903
  265. package/esm2022/lib/_helpers/formatters/currency.mjs +0 -68
  266. package/esm2022/lib/_helpers/formatters/date.mjs +0 -69
  267. package/esm2022/lib/_helpers/formatters/format-utils.mjs +0 -68
  268. package/esm2022/lib/_helpers/formatters/index.mjs +0 -110
  269. package/esm2022/lib/_helpers/instructions-utils.mjs +0 -36
  270. package/esm2022/lib/_helpers/tab-utils.mjs +0 -59
  271. package/esm2022/lib/_helpers/template-utils.mjs +0 -56
  272. package/esm2022/lib/_helpers/utils.mjs +0 -386
  273. package/esm2022/lib/_helpers/versionHelpers.mjs +0 -12
  274. package/esm2022/lib/_messages/error-messages.service.mjs +0 -31
  275. package/esm2022/lib/_messages/get-login-status.service.mjs +0 -26
  276. package/esm2022/lib/_messages/oauth-response.service.mjs +0 -30
  277. package/esm2022/lib/_messages/progress-spinner.service.mjs +0 -30
  278. package/esm2022/lib/_messages/reset-pconnect.service.mjs +0 -31
  279. package/esm2022/lib/_messages/update-worklist.service.mjs +0 -30
  280. package/esm2022/lib/_services/case.service.mjs +0 -32
  281. package/esm2022/lib/_services/datapage.service.mjs +0 -52
  282. package/esm2022/lib/_services/endpoints.mjs +0 -61
  283. package/esm2022/lib/_services/server-config.service.mjs +0 -52
  284. package/esm2022/lib/_types/PConnProps.interface.mjs +0 -2
  285. package/esm2022/pega-angular-sdk-components.mjs +0 -5
  286. package/esm2022/public-api.mjs +0 -141
  287. package/esm2022/sdk-local-component-map.mjs +0 -9
  288. package/lib/_messages/get-login-status.service.d.ts +0 -10
  289. package/lib/_messages/oauth-response.service.d.ts +0 -14
  290. package/lib/_messages/reset-pconnect.service.d.ts +0 -15
@@ -1,487 +0,0 @@
1
- import { Component, Input, forwardRef } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MatCardModule } from '@angular/material/card';
4
- import { ReferenceComponent } from '../../reference/reference.component';
5
- import { Utils } from '../../../../_helpers/utils';
6
- import { getToDoAssignments, showBanner } from './helpers';
7
- import { ComponentMapperComponent } from '../../../../_bridge/component-mapper/component-mapper.component';
8
- import { FlowContainerBaseComponent } from '../base-components/flow-container-base.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../../../_messages/progress-spinner.service";
11
- import * as i2 from "@angular/forms";
12
- import * as i3 from "../../../../_helpers/utils";
13
- import * as i4 from "@angular/common";
14
- import * as i5 from "@angular/material/card";
15
- export class FlowContainerComponent extends FlowContainerBaseComponent {
16
- constructor(injector, cdRef, psService, fb, ngZone, utils) {
17
- super(injector);
18
- this.cdRef = cdRef;
19
- this.psService = psService;
20
- this.fb = fb;
21
- this.ngZone = ngZone;
22
- this.utils = utils;
23
- this.itemKey$ = '';
24
- // todo
25
- this.todo_showTodo$ = false;
26
- this.todo_showTodoList$ = false;
27
- this.todo_headerText$ = 'To do';
28
- this.bHasCancel = false;
29
- this.bHasCaseMessages$ = false;
30
- this.bShowConfirm = false;
31
- this.localeCategory = 'Messages';
32
- // create the formGroup
33
- this.formGroup$ = this.fb.group({ hideRequired: false });
34
- }
35
- ngOnInit() {
36
- // First thing in initialization is registering and subscribing to the AngularPConnect service
37
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
38
- this.localizedVal = PCore.getLocaleUtils().getLocaleValue;
39
- const caseInfo = this.pConn$.getCaseInfo();
40
- this.localeReference = `${caseInfo?.getClassName()}!CASE!${caseInfo.getName()}`.toUpperCase();
41
- // Then, continue on with other initialization
42
- // get the PCore constants
43
- this.pCoreConstants = PCore.getConstants();
44
- const { TODO } = this.pCoreConstants;
45
- this.TODO = TODO;
46
- // with init, force children to be loaded of global pConn
47
- this.initComponent(true);
48
- this.initContainer();
49
- PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.EVENT_CANCEL, () => {
50
- this.handleCancel();
51
- }, 'cancelAssignment');
52
- PCore.getPubSubUtils().subscribe('cancelPressed', () => {
53
- this.handleCancelPressed();
54
- }, 'cancelPressed');
55
- }
56
- ngOnDestroy() {
57
- if (this.angularPConnectData.unsubscribeFn) {
58
- this.angularPConnectData.unsubscribeFn();
59
- }
60
- PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.EVENT_CANCEL, 'cancelAssignment');
61
- PCore.getPubSubUtils().unsubscribe('cancelPressed', 'cancelPressed');
62
- }
63
- handleCancel() {
64
- // cancel happened, so ok to initialize the flow container
65
- sessionStorage.setItem('okToInitFlowContainer', 'true');
66
- }
67
- handleCancelPressed() {
68
- this.bHasCancel = true;
69
- }
70
- // Callback passed when subscribing to store change
71
- onStateChange() {
72
- this.checkAndUpdate();
73
- }
74
- checkAndUpdate() {
75
- // Should always check the bridge to see if the component should update itself (re-render)
76
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
77
- const pConn = this.pConnectOfActiveContainerItem || this.pConn$;
78
- const caseViewModeFromProps = this.angularPConnect.getComponentProp(this, 'caseViewMode');
79
- const caseViewModeFromRedux = pConn.getValue('context_data.caseViewMode', '');
80
- // ONLY call updateSelf when the component should update
81
- // AND removing the "gate" that was put there since shouldComponentUpdate
82
- // should be the real "gate"
83
- if (bUpdateSelf || caseViewModeFromProps !== caseViewModeFromRedux) {
84
- // don't want to redraw the flow container when there are page messages, because
85
- // the redraw causes us to loose the errors on the elements
86
- const completeProps = this.angularPConnect.getCurrentCompleteProps(this);
87
- if (!completeProps.pageMessages || completeProps.pageMessages.length == 0) {
88
- // with a cancel, need to timeout so todo will update correctly
89
- if (this.bHasCancel) {
90
- this.bHasCancel = false;
91
- setTimeout(() => {
92
- this.updateSelf();
93
- }, 500);
94
- }
95
- else {
96
- this.updateSelf();
97
- }
98
- }
99
- else {
100
- this.showPageMessages(completeProps);
101
- }
102
- }
103
- }
104
- showPageMessages(completeProps) {
105
- this.ngZone.run(() => {
106
- const pageMessages = completeProps.pageMessages;
107
- this.banners = [{ messages: pageMessages?.map(msg => this.localizedVal(msg.message, 'Messages')), variant: 'urgent' }];
108
- });
109
- }
110
- getTodoVisibilty() {
111
- const caseViewMode = this.pConn$.getValue('context_data.caseViewMode');
112
- if (caseViewMode && caseViewMode === 'review') {
113
- const kid = this.pConn$.getChildren()[0];
114
- const todoKid = kid.getPConnect().getChildren()[0];
115
- this.todo_pConn$ = todoKid.getPConnect();
116
- return true;
117
- }
118
- return !(caseViewMode && caseViewMode === 'perform');
119
- }
120
- initContainer() {
121
- const containerMgr = this.pConn$.getContainerManager();
122
- const baseContext = this.pConn$.getContextName();
123
- const containerName = this.pConn$.getContainerName();
124
- const containerType = 'single';
125
- const flowContainerTarget = `${baseContext}/${containerName}`;
126
- const isContainerItemAvailable = PCore.getContainerUtils().getActiveContainerItemName(flowContainerTarget);
127
- // clear out since we are initializing
128
- sessionStorage.setItem('okToInitFlowContainer', 'false');
129
- if (!isContainerItemAvailable) {
130
- containerMgr.initializeContainers({
131
- type: containerType
132
- });
133
- /* remove commented out code when update React/WC
134
- *** instead of getting values here to pass to addContainerItem, we call the function below "addContainerItem"
135
- *** which comes from flow container helpers in Nebula
136
- */
137
- // containerMgr.addContainerItem({
138
- // semanticURL: "",
139
- // key: this.pConn$.getValue("key"),
140
- // flowName: this.pConn$.getValue("flowName"),
141
- // caseViewMode: "perform",
142
- // data: this.pConn$.getDataObject(baseContext),
143
- // containerType
144
- // });
145
- this.addContainerItem(this.pConn$);
146
- }
147
- }
148
- initComponent(bLoadChildren) {
149
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
150
- this.showPageMessages(this.configProps$);
151
- // when true, update arChildren from pConn, otherwise, arChilren will be updated in updateSelf()
152
- if (bLoadChildren) {
153
- this.arChildren$ = this.pConn$.getChildren();
154
- }
155
- // const oData = this.pConn$.getDataObject();
156
- // const activeActionLabel: string = '';
157
- // const { getPConnect } = this.arChildren$[0].getPConnect();
158
- this.todo_showTodo$ = this.getTodoVisibilty();
159
- // create pointers to functions
160
- // const containerMgr = this.pConn$.getContainerManager();
161
- // const actionsAPI = this.pConn$.getActionsApi();
162
- const baseContext = this.pConn$.getContextName();
163
- const acName = this.pConn$.getContainerName();
164
- if (this.itemKey$ === '') {
165
- this.itemKey$ = baseContext.concat('/').concat(acName);
166
- }
167
- this.pConn$.isBoundToState();
168
- // inside
169
- // get fist kid, get the name and display
170
- // pass first kid to a view container, which will disperse it to a view which will use one column, two column, etc.
171
- const oWorkItem = this.arChildren$[0].getPConnect();
172
- // const oWorkMeta = oWorkItem.getRawMetadata();
173
- const oWorkData = oWorkItem.getDataObject();
174
- // this.containerName$ = oWorkMeta["name"];
175
- if (bLoadChildren && oWorkData) {
176
- this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments[0].name, undefined, this.localeReference);
177
- }
178
- // turn off spinner
179
- this.psService.sendMessage(false);
180
- }
181
- hasAssignments() {
182
- let hasAssignments = false;
183
- const assignmentsList = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
184
- // const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
185
- // 8.7 includes assignments in Assignments List that may be assigned to
186
- // a different operator. So, see if there are any assignments for
187
- // the current operator
188
- const isEmbedded = window.location.href.includes('embedded');
189
- let bAssignmentsForThisOperator = false;
190
- if (isEmbedded) {
191
- const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
192
- for (const assignment of assignmentsList) {
193
- if (assignment.assigneeInfo.ID === thisOperator) {
194
- bAssignmentsForThisOperator = true;
195
- }
196
- }
197
- }
198
- else {
199
- bAssignmentsForThisOperator = true;
200
- }
201
- // Bail if there is no assignmentsList
202
- if (!assignmentsList) {
203
- return hasAssignments;
204
- }
205
- const hasChildCaseAssignments = this.hasChildCaseAssignments();
206
- if (bAssignmentsForThisOperator || hasChildCaseAssignments || this.isCaseWideLocalAction()) {
207
- hasAssignments = true;
208
- }
209
- return hasAssignments;
210
- }
211
- isCaseWideLocalAction() {
212
- const actionID = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.ACTIVE_ACTION_ID);
213
- const caseActions = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.AVAILABLEACTIONS);
214
- let bCaseWideAction = false;
215
- if (caseActions && actionID) {
216
- const actionObj = caseActions.find(caseAction => caseAction.ID === actionID);
217
- if (actionObj) {
218
- bCaseWideAction = actionObj.type === 'Case';
219
- }
220
- }
221
- return bCaseWideAction;
222
- }
223
- hasChildCaseAssignments() {
224
- const childCases = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.CHILD_ASSIGNMENTS);
225
- return childCases && childCases.length > 0;
226
- }
227
- getActiveViewLabel() {
228
- let activeActionLabel = '';
229
- const { CASE_INFO: CASE_CONSTS } = PCore.getConstants();
230
- const caseActions = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ACTIONS);
231
- const activeActionID = this.pConn$.getValue(CASE_CONSTS.ACTIVE_ACTION_ID);
232
- const activeAction = caseActions?.find(action => action.ID === activeActionID);
233
- if (activeAction) {
234
- activeActionLabel = activeAction.name;
235
- }
236
- return activeActionLabel;
237
- }
238
- findCurrentIndicies(arStepperSteps, arIndicies, depth) {
239
- let count = 0;
240
- arStepperSteps.forEach(step => {
241
- if (step.visited_status == 'current') {
242
- arIndicies[depth] = count;
243
- // add in
244
- step.step_status = '';
245
- }
246
- else if (step.visited_status == 'success') {
247
- count++;
248
- step.step_status = 'completed';
249
- }
250
- else {
251
- count++;
252
- step.step_status = '';
253
- }
254
- if (step.steps) {
255
- arIndicies = this.findCurrentIndicies(step.steps, arIndicies, depth + 1);
256
- }
257
- });
258
- return arIndicies;
259
- }
260
- // Called when bridge shouldComponentUpdate indicates that this component
261
- // should update itself (re-render)
262
- updateSelf() {
263
- // for now
264
- // const { getPConnect } = this.arChildren$[0].getPConnect();
265
- const localPConn = this.arChildren$[0].getPConnect();
266
- this.pConnectOfActiveContainerItem = this.getPConnectOfActiveContainerItem(this.pConn$) || this.pConn$;
267
- const caseViewMode = this.pConnectOfActiveContainerItem.getValue('context_data.caseViewMode');
268
- this.bShowBanner = showBanner(this.pConn$);
269
- if (caseViewMode && caseViewMode == 'review') {
270
- this.loadReviewPage(localPConn);
271
- // in Nebula/Constellation, when cancel is called, somehow the constructor for flowContainer is called which
272
- // does init/add of containers. This mimics that
273
- if (sessionStorage.getItem('okToInitFlowContainer') == 'true') {
274
- this.initContainer();
275
- }
276
- }
277
- else if (caseViewMode && caseViewMode === 'perform') {
278
- // perform
279
- this.todo_showTodo$ = false;
280
- // this is different than Angular SDK, as we need to initContainer if root container reloaded
281
- if (sessionStorage.getItem('okToInitFlowContainer') == 'true') {
282
- this.initContainer();
283
- }
284
- }
285
- // if have caseMessage show message and end
286
- this.showCaseMessages();
287
- this.updateFlowContainerChildren();
288
- }
289
- loadReviewPage(localPConn) {
290
- const { CASE_INFO: CASE_CONSTS } = PCore.getConstants();
291
- setTimeout(() => {
292
- this.ngZone.run(() => {
293
- /*
294
- *** renove this commmented out code when React/WC is updated
295
- *** this code is replace with the call to "getToDoAssigments" function below
296
-
297
- const assignmentsList = localPConn.getValue(
298
- CASE_CONSTS.D_CASE_ASSIGNMENTS_RESULTS
299
- );
300
- // add status
301
- const status = localPConn.getValue("caseInfo.status");
302
-
303
- let localAssignment = JSON.parse(JSON.stringify(assignmentsList[0]));
304
- localAssignment.status = status;
305
- let locaAssignmentsList: Array<any> = [];
306
- locaAssignmentsList.push(localAssignment);
307
-
308
- const caseActions = localPConn.getValue(CASE_CONSTS.CASE_INFO_ACTIONS);
309
- */
310
- const todoAssignments = getToDoAssignments(this.pConn$);
311
- if (todoAssignments && todoAssignments.length > 0) {
312
- this.todo_caseInfoID$ = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ID);
313
- this.todo_datasource$ = { source: todoAssignments };
314
- }
315
- /* remove this commented out code when update React/WC */
316
- // let kid = this.pConn$.getChildren()[0];
317
- // kid.getPConnect() can be a Reference component. So normalize it just in case
318
- // let todoKid = ReferenceComponent.normalizePConn(kid.getPConnect()).getChildren()[0];
319
- // this.todo_pConn$ = todoKid.getPConnect();
320
- /* code change here to note for React/WC */
321
- // todo now needs pConn to open the work item on click "go"
322
- this.todo_pConn$ = this.pConn$;
323
- // still needs the context of the original work item
324
- this.todo_context$ = localPConn.getContextName();
325
- this.todo_showTodo$ = true;
326
- this.psService.sendMessage(false);
327
- });
328
- });
329
- }
330
- showCaseMessages() {
331
- this.caseMessages$ = this.localizedVal(this.pConn$.getValue('caseMessages'), this.localeCategory);
332
- if (this.caseMessages$ || !this.hasAssignments()) {
333
- this.bHasCaseMessages$ = true;
334
- this.bShowConfirm = true;
335
- this.checkSvg$ = this.utils.getImageSrc('check', this.utils.getSDKStaticContentUrl());
336
- // Temp fix for 8.7 change: confirmationNote no longer coming through in caseMessages$.
337
- // So, if we get here and caseMessages$ is empty, use default value in DX API response
338
- if (!this.caseMessages$) {
339
- this.caseMessages$ = this.localizedVal('Thank you! The next step in this case has been routed appropriately.', this.localeCategory);
340
- }
341
- // publish this "assignmentFinished" for mashup, need to get approved as a standard
342
- PCore.getPubSubUtils().publish('assignmentFinished');
343
- this.psService.sendMessage(false);
344
- }
345
- else {
346
- this.bHasCaseMessages$ = false;
347
- this.bShowConfirm = false;
348
- }
349
- }
350
- updateFlowContainerChildren() {
351
- // routingInfo was added as component prop in populateAdditionalProps
352
- const routingInfo = this.angularPConnect.getComponentProp(this, 'routingInfo');
353
- let loadingInfo;
354
- try {
355
- // @ts-ignore - Property 'getLoadingStatus' is private and only accessible within class 'C11nEnv'
356
- loadingInfo = this.pConn$.getLoadingStatus();
357
- }
358
- catch (ex) {
359
- /* empty */
360
- }
361
- // this check in routingInfo, mimic Nebula/Constellation (React) to check and get the internals of the
362
- // flowContainer and force updates to pConnect/redux
363
- if (routingInfo && loadingInfo !== undefined) {
364
- const currentOrder = routingInfo.accessedOrder;
365
- const currentItems = routingInfo.items;
366
- const type = routingInfo.type;
367
- if (currentOrder && currentItems) {
368
- // JA - making more similar to Nebula/Constellation
369
- const key = currentOrder[currentOrder.length - 1];
370
- // save off itemKey to be used for finishAssignment, etc.
371
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
372
- setTimeout(() => {
373
- if (key && key != '') {
374
- this.itemKey$ = key;
375
- this.cdRef.detectChanges();
376
- }
377
- });
378
- // eslint-disable-next-line sonarjs/no-collapsible-if
379
- if (currentOrder.length > 0) {
380
- if (currentItems[key] && currentItems[key].view && type === 'single' && Object.keys(currentItems[key].view).length > 0) {
381
- // when we get here, it it because the flow action data has changed
382
- // from the server, and need to add to pConnect and update children
383
- this.addPConnectAndUpdateChildren(currentItems[key], key);
384
- }
385
- }
386
- }
387
- }
388
- }
389
- addPConnectAndUpdateChildren(currentItem, key) {
390
- const localPConn = this.arChildren$[0].getPConnect();
391
- const rootView = currentItem.view;
392
- const { context, name: ViewName } = rootView.config;
393
- const config = { meta: rootView };
394
- // Don't go ahead if View doesn't exist
395
- if (!ViewName) {
396
- return;
397
- }
398
- this.todo_context$ = currentItem.context;
399
- config.options = {
400
- context: currentItem.context,
401
- pageReference: context || localPConn.getPageReference(),
402
- hasForm: true,
403
- isFlowContainer: true,
404
- containerName: localPConn.getContainerName(),
405
- containerItemName: key,
406
- parentPageReference: localPConn.getPageReference()
407
- };
408
- const configObject = PCore.createPConnect(config);
409
- this.confirm_pconn = configObject.getPConnect();
410
- // 8.7 - config might be a Reference component so, need to normalize it to get
411
- // the View if it is a Reference component. And need to pass in the getPConnect
412
- // to have normalize do a c11Env createComponent (that makes sure options.hasForm
413
- // is passed along to all the component's children)
414
- const normalizedConfigObject = ReferenceComponent.normalizePConn(configObject.getPConnect());
415
- // We want the children to be the PConnect itself, not the result of calling getPConnect(),
416
- // So need to get the PConnect of the normalized component we just created...
417
- const normalizedConfigObjectAsPConnect = normalizedConfigObject.getComponent();
418
- // makes sure Angular tracks these changes
419
- this.ngZone.run(() => {
420
- this.buildName$ = this.getBuildName();
421
- // what comes back now in configObject is the children of the flowContainer
422
- this.arChildren$ = [];
423
- this.arChildren$.push(normalizedConfigObjectAsPConnect);
424
- this.psService.sendMessage(false);
425
- const oWorkItem = configObject.getPConnect();
426
- const oWorkData = oWorkItem.getDataObject();
427
- this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0].name, undefined, this.localeReference);
428
- });
429
- }
430
- getBuildName() {
431
- // let { getPConnect, name } = this.pConn$.props;
432
- const context = this.pConn$.getContextName();
433
- let viewContainerName = this.pConn$.getContainerName();
434
- if (!viewContainerName)
435
- viewContainerName = '';
436
- return `${context.toUpperCase()}/${viewContainerName.toUpperCase()}`;
437
- }
438
- formValid() {
439
- this.touchAll();
440
- return this.formGroup$.valid;
441
- }
442
- touchAll() {
443
- Object.values(this.formGroup$.controls).forEach(control => {
444
- control.markAsTouched();
445
- });
446
- }
447
- // eslint-disable-next-line sonarjs/no-identical-functions
448
- topViewRefresh() {
449
- Object.values(this.formGroup$.controls).forEach(control => {
450
- control.markAsTouched();
451
- });
452
- }
453
- // helpers - copyied from flow container helpers.js
454
- addContainerItem(pConnect) {
455
- // copied from flow container helper.js
456
- const containerManager = pConnect.getContainerManager();
457
- const contextName = pConnect.getContextName(); // here we will get parent context name, as flow container is child of view container
458
- const caseViewMode = pConnect.getValue('context_data.caseViewMode');
459
- let key;
460
- let flowName;
461
- if (caseViewMode !== 'review') {
462
- const target = contextName.substring(0, contextName.lastIndexOf('_'));
463
- const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(target);
464
- const containerItemData = PCore.getContainerUtils().getContainerItemData(target, activeContainerItemID);
465
- if (containerItemData) {
466
- ({ key, flowName } = containerItemData);
467
- }
468
- }
469
- containerManager.addContainerItem({
470
- semanticURL: '',
471
- key,
472
- flowName,
473
- caseViewMode: 'perform',
474
- resourceType: 'ASSIGNMENT',
475
- data: pConnect.getDataObject(contextName)
476
- });
477
- }
478
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FlowContainerComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.ProgressSpinnerService }, { token: i2.FormBuilder }, { token: i0.NgZone }, { token: i3.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
479
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FlowContainerComponent, isStandalone: true, selector: "app-flow-container", inputs: { pConn$: "pConn$" }, providers: [Utils], usesInheritance: true, ngImport: i0, template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Todo\"\n [props]=\"{\n pConn$: pConnectOfActiveContainerItem,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n isConfirm: true\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Assignment\"\n [props]=\"{ pConn$: pConnectOfActiveContainerItem, formGroup$, arChildren$, itemKey$ }\"\n ></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i4.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatCardModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatCard), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
480
- }
481
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FlowContainerComponent, decorators: [{
482
- type: Component,
483
- args: [{ selector: 'app-flow-container', providers: [Utils], standalone: true, imports: [CommonModule, MatCardModule, forwardRef(() => ComponentMapperComponent)], template: "<div style=\"text-align: left\" class=\"psdk-flow-container-top\">\n <div *ngIf=\"!bShowConfirm\">\n <div *ngIf=\"!todo_showTodo$\">\n <h2>{{ containerName$ }}</h2>\n <div *ngIf=\"banners?.length\">\n <component-mapper name=\"AlertBanner\" [props]=\"{ banners }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Todo\"\n [props]=\"{\n pConn$: pConnectOfActiveContainerItem,\n caseInfoID$: todo_caseInfoID$,\n datasource$: todo_datasource$,\n showTodoList$: todo_showTodoList$,\n headerText$: todo_headerText$,\n type$: 'TODO',\n context$: todo_context$,\n isConfirm: true\n }\"\n ></component-mapper>\n </div>\n <div *ngIf=\"!todo_showTodo$\">\n <component-mapper\n *ngIf=\"pConnectOfActiveContainerItem\"\n name=\"Assignment\"\n [props]=\"{ pConn$: pConnectOfActiveContainerItem, formGroup$, arChildren$, itemKey$ }\"\n ></component-mapper>\n </div>\n </div>\n <div *ngIf=\"bHasCaseMessages$\">\n <mat-card class=\"psdk-message-card\">\n <div style=\"display: flex; flex-direction: row\">\n <div><img class=\"psdk-icon\" src=\"{{ checkSvg$ }}\" /></div>\n <div>{{ caseMessages$ }}</div>\n </div>\n </mat-card>\n </div>\n <div *ngIf=\"bShowBanner && bShowConfirm\">\n <component-mapper name=\"View\" [props]=\"{ formGroup$, pConn$: confirm_pconn }\"></component-mapper>\n </div>\n</div>\n" }]
484
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.ProgressSpinnerService }, { type: i2.FormBuilder }, { type: i0.NgZone }, { type: i3.Utils }], propDecorators: { pConn$: [{
485
- type: Input
486
- }] } });
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQTZCLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7OztBQXdCOUYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDBCQUEwQjtJQXdDcEUsWUFDRSxRQUFrQixFQUNWLEtBQXdCLEVBQ3hCLFNBQWlDLEVBQ2pDLEVBQWUsRUFDZixNQUFjLEVBQ2QsS0FBWTtRQUVwQixLQUFLLENBQUMsUUFBUSxDQUFDLENB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QixFQUFFLENBQUM7Z0JBQ3RCLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1lBQ2hDLFdBQVcsRUFBRSxFQUFFO1lBQ2YsR0FBRztZQUNILFFBQVE7WUFDUixZQUFZLEVBQUUsU0FBUztZQUN2QixZQUFZLEVBQUUsWUFBWTtZQUMxQixJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FybEJVLHNCQUFzQjttR0FBdEIsc0JBQXNCLCtGQUp0QixDQUFDLEtBQUssQ0FBQyxpREM5QnBCLG9rREE0Q0EsNkVEWlksWUFBWSw0S0FBRSxhQUFhLHVMQUFtQix3QkFBd0I7OzRGQUVyRSxzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsS0FBSyxDQUFDLGNBQ04sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztxTkFHekUsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgTmdab25lLCBmb3J3YXJkUmVmLCBPbkRlc3Ryb3ksIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IHB1YmxpY0NvbnN0YW50cyB9IGZyb20gJ0BwZWdhL3Bjb3JlLXBjb25uZWN0LXR5cGVkZWZzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vX21lc3NhZ2VzL3Byb2dyZXNzLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2UvcmVmZXJlbmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL19oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7IGdldFRvRG9Bc3NpZ25tZW50cywgc2hvd0Jhbm5lciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBDb21wb25lbnRNYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9fYnJpZGdlL2NvbXBvbmVudC1tYXBwZXIvY29tcG9uZW50LW1hcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd0NvbnRhaW5lckJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWNvbXBvbmVudHMvZmxvdy1jb250YWluZXItYmFzZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIFdBUk5JTkc6ICBJdCBpcyBub3QgZXhwZWN0ZWQgdGhhdCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1vZGlmaWVkLiAgSXQgaXMgcGFydCBvZiBpbmZyYXN0cnVjdHVyZSBjb2RlIHRoYXQgd29ya3Mgd2l0aFxuICogUmVkdXggYW5kIGNyZWF0aW9uL3VwZGF0ZSBvZiBSZWR1eCBjb250YWluZXJzIGFuZCBQQ29ubmVjdC4gIE1vZGlmeWluZyB0aGlzIGNvZGUgY291bGQgaGF2ZSB1bmRlc2lyZWFibGUgcmVzdWx0cyBhbmRcbiAqIGlzIHRvdGFsbHkgYXQgeW91ciBvd24gcmlzay5cbiAqL1xuXG5pbnRlcmZhY2UgRmxvd0NvbnRhaW5lclByb3BzIHtcbiAgLy8gSWYgYW55LCBlbnRlciBhZGRpdGlvbmFsIHByb3BzIHRoYXQgb25seSBleGlzdCBvbiB0aGlzIGNvbXBvbmVudFxuICBjaGlsZHJlbj86IGFueVtdO1xuICBuYW1lPzogc3RyaW5nO1xuICByb3V0aW5nSW5mbz86IGFueTtcbiAgcGFnZU1lc3NhZ2VzOiBhbnlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZsb3ctY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb3ctY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbVXRpbHNdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBmb3J3YXJkUmVmKCgpID0+IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCldXG59KVxuZXhwb3J0IGNsYXNzIEZsb3dDb250YWluZXJDb21wb25lbnQgZXh0ZW5kcyBGbG93Q29udGFpbmVyQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgcENvcmVDb25zdGFudHM6IHR5cGVvZiBwdWJsaWNDb25zdGFudHM7XG4gIGNvbmZpZ1Byb3BzJDogRmxvd0NvbnRhaW5lclByb3BzO1xuXG4gIGZvcm1Hcm91cCQ6IEZvcm1Hcm91cDtcbiAgYXJDaGlsZHJlbiQ6IGFueVtdO1xuICBpdGVtS2V5JCA9ICcnO1xuICBjb250YWluZXJOYW1lJDogc3RyaW5nO1xuICBidWlsZE5hbWUkOiBzdHJpbmc7XG5cbiAgLy8gdG9kb1xuICB0b2RvX3Nob3dUb2RvJCA9IGZhbHNlO1xuICB0b2RvX2Nhc2VJbmZvSUQkOiBzdHJpbmc7XG4gIHRvZG9fc2hvd1RvZG9MaXN0JCA9IGZhbHNlO1xuICB0b2RvX2RhdGFzb3VyY2UkOiBhbnk7XG4gIHRvZG9faGVhZGVyVGV4dCQgPSAnVG8gZG8nO1xuICB0b2RvX3R5cGUkOiBzdHJpbmc7XG4gIHRvZG9fY29udGV4dCQ6IHN0cmluZztcbiAgdG9kb19wQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBiSGFzQ2FuY2VsID0gZmFsc2U7XG5cbiAgLy8gbWVzc2FnZXNcbiAgY2FzZU1lc3NhZ2VzJDogc3RyaW5nO1xuICBiSGFzQ2FzZU1lc3NhZ2VzJCA9IGZhbHNlO1xuICBjaGVja1N2ZyQ6IHN0cmluZztcbiAgVE9ETzogYW55O1xuICBiU2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgYlNob3dCYW5uZXI6IGJvb2xlYW47XG4gIGNvbmZpcm1fcGNvbm46IGFueTtcbiAgbG9jYWxpemVkVmFsOiBhbnk7XG4gIGxvY2FsZUNhdGVnb3J5ID0gJ01lc3NhZ2VzJztcbiAgbG9jYWxlUmVmZXJlbmNlOiBhbnk7XG4gIGJhbm5lcnM6IGFueVtdO1xuICAvLyBpdGVtS2V5OiBzdHJpbmcgPSBcIlwiOyAgIC8vIEpBIC0gdGhpcyBpcyB3aGF0IE5lYnVsYS9Db25zdGVsbGF0aW9uIHVzZXMgdG8gcGFzcyB0byBmaW5pc2hBc3NpZ25tZW50LCBuYXZpZ2F0ZVRvU3RlcFxuXG4gIHBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHBzU2VydmljZTogUHJvZ3Jlc3NTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAvLyBjcmVhdGUgdGhlIGZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwJCA9IHRoaXMuZmIuZ3JvdXAoeyBoaWRlUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG5cbiAgICB0aGlzLmxvY2FsaXplZFZhbCA9IFBDb3JlLmdldExvY2FsZVV0aWxzKCkuZ2V0TG9jYWxlVmFsdWU7XG4gICAgY29uc3QgY2FzZUluZm8gPSB0aGlzLnBDb25uJC5nZXRDYXNlSW5mbygpO1xuICAgIHRoaXMubG9jYWxlUmVmZXJlbmNlID0gYCR7Y2FzZUluZm8/LmdldENsYXNzTmFtZSgpfSFDQVNFISR7Y2FzZUluZm8uZ2V0TmFtZSgpfWAudG9VcHBlckNhc2UoKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cblxuICAgIC8vIGdldCB0aGUgUENvcmUgY29uc3RhbnRzXG4gICAgdGhpcy5wQ29yZUNvbnN0YW50cyA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICAgIGNvbnN0IHsgVE9ETyB9ID0gdGhpcy5wQ29yZUNvbnN0YW50cztcbiAgICB0aGlzLlRPRE8gPSBUT0RPO1xuICAgIC8vIHdpdGggaW5pdCwgZm9yY2UgY2hpbGRyZW4gdG8gYmUgbG9hZGVkIG9mIGdsb2JhbCBwQ29ublxuICAgIHRoaXMuaW5pdENvbXBvbmVudCh0cnVlKTtcblxuICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICBQQ29yZS5nZXRDb25zdGFudHMoKS5QVUJfU1VCX0VWRU5UUy5FVkVOVF9DQU5DRUwsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7XG4gICAgICB9LFxuICAgICAgJ2NhbmNlbEFzc2lnbm1lbnQnXG4gICAgKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkuc3Vic2NyaWJlKFxuICAgICAgJ2NhbmNlbFByZXNzZWQnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbmNlbFByZXNzZWQoKTtcbiAgICAgIH0sXG4gICAgICAnY2FuY2VsUHJlc3NlZCdcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuUFVCX1NVQl9FVkVOVFMuRVZFTlRfQ0FOQ0VMLCAnY2FuY2VsQXNzaWdubWVudCcpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZSgnY2FuY2VsUHJlc3NlZCcsICdjYW5jZWxQcmVzc2VkJyk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKSB7XG4gICAgLy8gY2FuY2VsIGhhcHBlbmVkLCBzbyBvayB0byBpbml0aWFsaXplIHRoZSBmbG93IGNvbnRhaW5lclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicsICd0cnVlJyk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWxQcmVzc2VkKCkge1xuICAgIHRoaXMuYkhhc0NhbmNlbCA9IHRydWU7XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZSgpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICBjb25zdCBiVXBkYXRlU2VsZiA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSh0aGlzKTtcblxuICAgIGNvbnN0IHBDb25uID0gdGhpcy5wQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSB8fCB0aGlzLnBDb25uJDtcbiAgICBjb25zdCBjYXNlVmlld01vZGVGcm9tUHJvcHMgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRQcm9wKHRoaXMsICdjYXNlVmlld01vZGUnKTtcbiAgICBjb25zdCBjYXNlVmlld01vZGVGcm9tUmVkdXggPSBwQ29ubi5nZXRWYWx1ZSgnY29udGV4dF9kYXRhLmNhc2VWaWV3TW9kZScsICcnKTtcblxuICAgIC8vIE9OTFkgY2FsbCB1cGRhdGVTZWxmIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlXG4gICAgLy8gICAgQU5EIHJlbW92aW5nIHRoZSBcImdhdGVcIiB0aGF0IHdhcyBwdXQgdGhlcmUgc2luY2Ugc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICAgLy8gICAgICBzaG91bGQgYmUgdGhlIHJlYWwgXCJnYXRlXCJcbiAgICBpZiAoYlVwZGF0ZVNlbGYgfHwgY2FzZVZpZXdNb2RlRnJvbVByb3BzICE9PSBjYXNlVmlld01vZGVGcm9tUmVkdXgpIHtcbiAgICAgIC8vIGRvbid0IHdhbnQgdG8gcmVkcmF3IHRoZSBmbG93IGNvbnRhaW5lciB3aGVuIHRoZXJlIGFyZSBwYWdlIG1lc3NhZ2VzLCBiZWNhdXNlXG4gICAgICAvLyB0aGUgcmVkcmF3IGNhdXNlcyB1cyB0byBsb29zZSB0aGUgZXJyb3JzIG9uIHRoZSBlbGVtZW50c1xuICAgICAgY29uc3QgY29tcGxldGVQcm9wcyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldEN1cnJlbnRDb21wbGV0ZVByb3BzKHRoaXMpIGFzIEZsb3dDb250YWluZXJQcm9wcztcbiAgICAgIGlmICghY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMgfHwgY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgLy8gd2l0aCBhIGNhbmNlbCwgbmVlZCB0byB0aW1lb3V0IHNvIHRvZG8gd2lsbCB1cGRhdGUgY29ycmVjdGx5XG4gICAgICAgIGlmICh0aGlzLmJIYXNDYW5jZWwpIHtcbiAgICAgICAgICB0aGlzLmJIYXNDYW5jZWwgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2VNZXNzYWdlcyhjb21wbGV0ZVByb3BzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93UGFnZU1lc3NhZ2VzKGNvbXBsZXRlUHJvcHM6IEZsb3dDb250YWluZXJQcm9wcykge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCBwYWdlTWVzc2FnZXMgPSBjb21wbGV0ZVByb3BzLnBhZ2VNZXNzYWdlcztcbiAgICAgIHRoaXMuYmFubmVycyA9IFt7IG1lc3NhZ2VzOiBwYWdlTWVzc2FnZXM/Lm1hcChtc2cgPT4gdGhpcy5sb2NhbGl6ZWRWYWwobXNnLm1lc3NhZ2UsICdNZXNzYWdlcycpKSwgdmFyaWFudDogJ3VyZ2VudCcgfV07XG4gICAgfSk7XG4gIH1cblxuICBnZXRUb2RvVmlzaWJpbHR5KCkge1xuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm4kLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG4gICAgaWYgKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCBraWQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpWzBdO1xuICAgICAgY29uc3QgdG9kb0tpZCA9IGtpZC5nZXRQQ29ubmVjdCgpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdwZXJmb3JtJyk7XG4gIH1cblxuICBpbml0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lck1ncjogYW55ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGJhc2VDb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBjb25zdCBjb250YWluZXJOYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclR5cGUgPSAnc2luZ2xlJztcblxuICAgIGNvbnN0IGZsb3dDb250YWluZXJUYXJnZXQgPSBgJHtiYXNlQ29udGV4dH0vJHtjb250YWluZXJOYW1lfWA7XG4gICAgY29uc3QgaXNDb250YWluZXJJdGVtQXZhaWxhYmxlID0gUENvcmUuZ2V0Q29udGFpbmVyVXRpbHMoKS5nZXRBY3RpdmVDb250YWluZXJJdGVtTmFtZShmbG93Q29udGFpbmVyVGFyZ2V0KTtcblxuICAgIC8vIGNsZWFyIG91dCBzaW5jZSB3ZSBhcmUgaW5pdGlhbGl6aW5nXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJywgJ2ZhbHNlJyk7XG5cbiAgICBpZiAoIWlzQ29udGFpbmVySXRlbUF2YWlsYWJsZSkge1xuICAgICAgY29udGFpbmVyTWdyLmluaXRpYWxpemVDb250YWluZXJzKHtcbiAgICAgICAgdHlwZTogY29udGFpbmVyVHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHJlbW92ZSBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0NcbiAgICAgICAqKiogaW5zdGVhZCBvZiBnZXR0aW5nIHZhbHVlcyBoZXJlIHRvIHBhc3MgdG8gYWRkQ29udGFpbmVySXRlbSwgd2UgY2FsbCB0aGUgZnVuY3Rpb24gYmVsb3cgXCJhZGRDb250YWluZXJJdGVtXCJcbiAgICAgICAqKiogd2hpY2ggY29tZXMgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXJzIGluIE5lYnVsYVxuICAgICAgICovXG4gICAgICAvLyBjb250YWluZXJNZ3IuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICAvLyAgIHNlbWFudGljVVJMOiBcIlwiLFxuICAgICAgLy8gICBrZXk6IHRoaXMucENvbm4kLmdldFZhbHVlKFwia2V5XCIpLFxuICAgICAgLy8gICBmbG93TmFtZTogdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJmbG93TmFtZVwiKSxcbiAgICAgIC8vICAgY2FzZVZpZXdNb2RlOiBcInBlcmZvcm1cIixcbiAgICAgIC8vICAgZGF0YTogdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdChiYXNlQ29udGV4dCksXG4gICAgICAvLyAgIGNvbnRhaW5lclR5cGVcbiAgICAgIC8vIH0pO1xuXG4gICAgICB0aGlzLmFkZENvbnRhaW5lckl0ZW0odGhpcy5wQ29ubiQpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRDb21wb25lbnQoYkxvYWRDaGlsZHJlbjogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnUHJvcHMkID0gdGhpcy5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkpIGFzIEZsb3dDb250YWluZXJQcm9wcztcbiAgICB0aGlzLnNob3dQYWdlTWVzc2FnZXModGhpcy5jb25maWdQcm9wcyQpO1xuXG4gICAgLy8gd2hlbiB0cnVlLCB1cGRhdGUgYXJDaGlsZHJlbiBmcm9tIHBDb25uLCBvdGhlcndpc2UsIGFyQ2hpbHJlbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdXBkYXRlU2VsZigpXG4gICAgaWYgKGJMb2FkQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpIGFzIGFueVtdO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IG9EYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgLy8gY29uc3QgYWN0aXZlQWN0aW9uTGFiZWw6IHN0cmluZyA9ICcnO1xuICAgIC8vIGNvbnN0IHsgZ2V0UENvbm5lY3QgfSA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIHRoaXMudG9kb19zaG93VG9kbyQgPSB0aGlzLmdldFRvZG9WaXNpYmlsdHkoKTtcblxuICAgIC8vIGNyZWF0ZSBwb2ludGVycyB0byBmdW5jdGlvbnNcbiAgICAvLyBjb25zdCBjb250YWluZXJNZ3IgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJNYW5hZ2VyKCk7XG4gICAgLy8gY29uc3QgYWN0aW9uc0FQSSA9IHRoaXMucENvbm4kLmdldEFjdGlvbnNBcGkoKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCk7XG4gICAgY29uc3QgYWNOYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuXG4gICAgaWYgKHRoaXMuaXRlbUtleSQgPT09ICcnKSB7XG4gICAgICB0aGlzLml0ZW1LZXkkID0gYmFzZUNvbnRleHQuY29uY2F0KCcvJykuY29uY2F0KGFjTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wQ29ubiQuaXNCb3VuZFRvU3RhdGUoKTtcblxuICAgIC8vIGluc2lkZVxuICAgIC8vIGdldCBmaXN0IGtpZCwgZ2V0IHRoZSBuYW1lIGFuZCBkaXNwbGF5XG4gICAgLy8gcGFzcyBmaXJzdCBraWQgdG8gYSB2aWV3IGNvbnRhaW5lciwgd2hpY2ggd2lsbCBkaXNwZXJzZSBpdCB0byBhIHZpZXcgd2hpY2ggd2lsbCB1c2Ugb25lIGNvbHVtbiwgdHdvIGNvbHVtbiwgZXRjLlxuICAgIGNvbnN0IG9Xb3JrSXRlbSA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcbiAgICAvLyBjb25zdCBvV29ya01ldGEgPSBvV29ya0l0ZW0uZ2V0UmF3TWV0YWRhdGEoKTtcbiAgICBjb25zdCBvV29ya0RhdGEgPSBvV29ya0l0ZW0uZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgLy8gdGhpcy5jb250YWluZXJOYW1lJCA9IG9Xb3JrTWV0YVtcIm5hbWVcIl07XG4gICAgaWYgKGJMb2FkQ2hpbGRyZW4gJiYgb1dvcmtEYXRhKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lck5hbWUkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5nZXRBY3RpdmVWaWV3TGFiZWwoKSB8fCBvV29ya0RhdGEuY2FzZUluZm8uYXNzaWdubWVudHNbMF0ubmFtZSwgdW5kZWZpbmVkLCB0aGlzLmxvY2FsZVJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgLy8gdHVybiBvZmYgc3Bpbm5lclxuICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcbiAgfVxuXG4gIGhhc0Fzc2lnbm1lbnRzKCkge1xuICAgIGxldCBoYXNBc3NpZ25tZW50cyA9IGZhbHNlO1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzTGlzdDogYW55W10gPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gICAgLy8gY29uc3QgdGhpc09wZXJhdG9yID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJZGVudGlmaWVyKCk7XG4gICAgLy8gOC43IGluY2x1ZGVzIGFzc2lnbm1lbnRzIGluIEFzc2lnbm1lbnRzIExpc3QgdGhhdCBtYXkgYmUgYXNzaWduZWQgdG9cbiAgICAvLyAgYSBkaWZmZXJlbnQgb3BlcmF0b3IuIFNvLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBhc3NpZ25tZW50cyBmb3JcbiAgICAvLyAgdGhlIGN1cnJlbnQgb3BlcmF0b3JcbiAgICBjb25zdCBpc0VtYmVkZGVkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VtYmVkZGVkJyk7XG4gICAgbGV0IGJBc3NpZ25tZW50c0ZvclRoaXNPcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGlzRW1iZWRkZWQpIHtcbiAgICAgIGNvbnN0IHRoaXNPcGVyYXRvciA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySWRlbnRpZmllcigpO1xuICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIGFzc2lnbm1lbnRzTGlzdCkge1xuICAgICAgICBpZiAoYXNzaWdubWVudC5hc3NpZ25lZUluZm8uSUQgPT09IHRoaXNPcGVyYXRvcikge1xuICAgICAgICAgIGJBc3NpZ25tZW50c0ZvclRoaXNPcGVyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYkFzc2lnbm1lbnRzRm9yVGhpc09wZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBCYWlsIGlmIHRoZXJlIGlzIG5vIGFzc2lnbm1lbnRzTGlzdFxuICAgIGlmICghYXNzaWdubWVudHNMaXN0KSB7XG4gICAgICByZXR1cm4gaGFzQXNzaWdubWVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzQ2hpbGRDYXNlQXNzaWdubWVudHMgPSB0aGlzLmhhc0NoaWxkQ2FzZUFzc2lnbm1lbnRzKCk7XG5cbiAgICBpZiAoYkFzc2lnbm1lbnRzRm9yVGhpc09wZXJhdG9yIHx8IGhhc0NoaWxkQ2FzZUFzc2lnbm1lbnRzIHx8IHRoaXMuaXNDYXNlV2lkZUxvY2FsQWN0aW9uKCkpIHtcbiAgICAgIGhhc0Fzc2lnbm1lbnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzQXNzaWdubWVudHM7XG4gIH1cblxuICBpc0Nhc2VXaWRlTG9jYWxBY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aW9uSUQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgICBjb25zdCBjYXNlQWN0aW9ucyA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkFWQUlMQUJMRUFDVElPTlMpIGFzIGFueVtdO1xuICAgIGxldCBiQ2FzZVdpZGVBY3Rpb24gPSBmYWxzZTtcbiAgICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IGNhc2VBY3Rpb25zLmZpbmQoY2FzZUFjdGlvbiA9PiBjYXNlQWN0aW9uLklEID09PSBhY3Rpb25JRCk7XG4gICAgICBpZiAoYWN0aW9uT2JqKSB7XG4gICAgICAgIGJDYXNlV2lkZUFjdGlvbiA9IGFjdGlvbk9iai50eXBlID09PSAnQ2FzZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiQ2FzZVdpZGVBY3Rpb247XG4gIH1cblxuICBoYXNDaGlsZENhc2VBc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjaGlsZENhc2VzID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUodGhpcy5wQ29yZUNvbnN0YW50cy5DQVNFX0lORk8uQ0hJTERfQVNTSUdOTUVOVFMpO1xuXG4gICAgcmV0dXJuIGNoaWxkQ2FzZXMgJiYgY2hpbGRDYXNlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0QWN0aXZlVmlld0xhYmVsKCkge1xuICAgIGxldCBhY3RpdmVBY3Rpb25MYWJlbCA9ICcnO1xuXG4gICAgY29uc3QgeyBDQVNFX0lORk86IENBU0VfQ09OU1RTIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcblxuICAgIGNvbnN0IGNhc2VBY3Rpb25zID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpIGFzIGFueVtdO1xuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQUNUSVZFX0FDVElPTl9JRCk7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnM/LmZpbmQoYWN0aW9uID0+IGFjdGlvbi5JRCA9PT0gYWN0aXZlQWN0aW9uSUQpO1xuICAgIGlmIChhY3RpdmVBY3Rpb24pIHtcbiAgICAgIGFjdGl2ZUFjdGlvbkxhYmVsID0gYWN0aXZlQWN0aW9uLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBhY3RpdmVBY3Rpb25MYWJlbDtcbiAgfVxuXG4gIGZpbmRDdXJyZW50SW5kaWNpZXMoYXJTdGVwcGVyU3RlcHM6IGFueVtdLCBhckluZGljaWVzOiBudW1iZXJbXSwgZGVwdGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGFyU3RlcHBlclN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBpZiAoc3RlcC52aXNpdGVkX3N0YXR1cyA9PSAnY3VycmVudCcpIHtcbiAgICAgICAgYXJJbmRpY2llc1tkZXB0aF0gPSBjb3VudDtcblxuICAgICAgICAvLyBhZGQgaW5cbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChzdGVwLnZpc2l0ZWRfc3RhdHVzID09ICdzdWNjZXNzJykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnN0ZXBzKSB7XG4gICAgICAgIGFySW5kaWNpZXMgPSB0aGlzLmZpbmRDdXJyZW50SW5kaWNpZXMoc3RlcC5zdGVwcywgYXJJbmRpY2llcywgZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhckluZGljaWVzO1xuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW4gYnJpZGdlIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbXBvbmVudFxuICAvLyBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICB1cGRhdGVTZWxmKCkge1xuICAgIC8vIGZvciBub3dcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0gPSB0aGlzLmdldFBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtKHRoaXMucENvbm4kKSB8fCB0aGlzLnBDb25uJDtcblxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0uZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgICB0aGlzLmJTaG93QmFubmVyID0gc2hvd0Jhbm5lcih0aGlzLnBDb25uJCk7XG5cbiAgICBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PSAncmV2aWV3Jykge1xuICAgICAgdGhpcy5sb2FkUmV2aWV3UGFnZShsb2NhbFBDb25uKTtcblxuICAgICAgLy8gaW4gTmVidWxhL0NvbnN0ZWxsYXRpb24sIHdoZW4gY2FuY2VsIGlzIGNhbGxlZCwgc29tZWhvdyB0aGUgY29uc3RydWN0b3IgZm9yIGZsb3dDb250YWluZXIgaXMgY2FsbGVkIHdoaWNoXG4gICAgICAvLyBkb2VzIGluaXQvYWRkIG9mIGNvbnRhaW5lcnMuICBUaGlzIG1pbWljcyB0aGF0XG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJykgPT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3BlcmZvcm0nKSB7XG4gICAgICAvLyBwZXJmb3JtXG4gICAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gQW5ndWxhciBTREssIGFzIHdlIG5lZWQgdG8gaW5pdENvbnRhaW5lciBpZiByb290IGNvbnRhaW5lciByZWxvYWRlZFxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicpID09ICd0cnVlJykge1xuICAgICAgICB0aGlzLmluaXRDb250YWluZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBoYXZlIGNhc2VNZXNzYWdlIHNob3cgbWVzc2FnZSBhbmQgZW5kXG4gICAgdGhpcy5zaG93Q2FzZU1lc3NhZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpO1xuICB9XG5cbiAgbG9hZFJldmlld1BhZ2UobG9jYWxQQ29ubikge1xuICAgIGNvbnN0IHsgQ0FTRV9JTkZPOiBDQVNFX0NPTlNUUyB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIC8qXG4gICAgICAgICAgKioqIHJlbm92ZSB0aGlzIGNvbW1tZW50ZWQgb3V0IGNvZGUgd2hlbiBSZWFjdC9XQyBpcyB1cGRhdGVkXG4gICAgICAgICAgKioqIHRoaXMgY29kZSBpcyByZXBsYWNlIHdpdGggdGhlIGNhbGwgdG8gXCJnZXRUb0RvQXNzaWdtZW50c1wiIGZ1bmN0aW9uIGJlbG93XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50c0xpc3QgPSBsb2NhbFBDb25uLmdldFZhbHVlKFxuICAgICAgICAgICAgQ0FTRV9DT05TVFMuRF9DQVNFX0FTU0lHTk1FTlRTX1JFU1VMVFNcbiAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gYWRkIHN0YXR1c1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoXCJjYXNlSW5mby5zdGF0dXNcIik7XG5cbiAgICAgICAgICBsZXQgbG9jYWxBc3NpZ25tZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3NpZ25tZW50c0xpc3RbMF0pKTtcbiAgICAgICAgICBsb2NhbEFzc2lnbm1lbnQuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgIGxldCBsb2NhQXNzaWdubWVudHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgICAgICAgbG9jYUFzc2lnbm1lbnRzTGlzdC5wdXNoKGxvY2FsQXNzaWdubWVudCk7XG5cbiAgICAgICAgICBjb25zdCBjYXNlQWN0aW9ucyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpO1xuICAgICAgICAgICovXG5cbiAgICAgICAgY29uc3QgdG9kb0Fzc2lnbm1lbnRzID0gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHRoaXMucENvbm4kKTtcblxuICAgICAgICBpZiAodG9kb0Fzc2lnbm1lbnRzICYmIHRvZG9Bc3NpZ25tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50b2RvX2Nhc2VJbmZvSUQkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0lEKTtcbiAgICAgICAgICB0aGlzLnRvZG9fZGF0YXNvdXJjZSQgPSB7IHNvdXJjZTogdG9kb0Fzc2lnbm1lbnRzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiByZW1vdmUgdGhpcyBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0MgKi9cbiAgICAgICAgLy8gbGV0IGtpZCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8ga2lkLmdldFBDb25uZWN0KCkgY2FuIGJlIGEgUmVmZXJlbmNlIGNvbXBvbmVudC4gU28gbm9ybWFsaXplIGl0IGp1c3QgaW4gY2FzZVxuICAgICAgICAvLyAgICAgICAgbGV0IHRvZG9LaWQgPSBSZWZlcmVuY2VDb21wb25lbnQubm9ybWFsaXplUENvbm4oa2lkLmdldFBDb25uZWN0KCkpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8gICAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgICAgLyogY29kZSBjaGFuZ2UgaGVyZSB0byBub3RlIGZvciBSZWFjdC9XQyAgKi9cbiAgICAgICAgLy8gdG9kbyBub3cgbmVlZHMgcENvbm4gdG8gb3BlbiB0aGUgd29yayBpdGVtIG9uIGNsaWNrIFwiZ29cIlxuICAgICAgICB0aGlzLnRvZG9fcENvbm4kID0gdGhpcy5wQ29ubiQ7XG5cbiAgICAgICAgLy8gc3RpbGwgbmVlZHMgdGhlIGNvbnRleHQgb2YgdGhlIG9yaWdpbmFsIHdvcmsgaXRlbVxuICAgICAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBsb2NhbFBDb25uLmdldENvbnRleHROYW1lKCk7XG5cbiAgICAgICAgdGhpcy50b2RvX3Nob3dUb2RvJCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93Q2FzZU1lc3NhZ2VzKCkge1xuICAgIHRoaXMuY2FzZU1lc3NhZ2VzJCA9IHRoaXMubG9jYWxpemVkVmFsKHRoaXMucENvbm4kLmdldFZhbHVlKCdjYXNlTWVzc2FnZXMnKSwgdGhpcy5sb2NhbGVDYXRlZ29yeSk7XG4gICAgaWYgKHRoaXMuY2FzZU1lc3NhZ2VzJCB8fCAhdGhpcy5oYXNBc3NpZ25tZW50cygpKSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYlNob3dDb25maXJtID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tTdmckID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnY2hlY2snLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgICAvLyBUZW1wIGZpeCBmb3IgOC43IGNoYW5nZTogY29uZmlybWF0aW9uTm90ZSBubyBsb25nZXIgY29taW5nIHRocm91Z2ggaW4gY2FzZU1lc3NhZ2VzJC5cbiAgICAgIC8vIFNvLCBpZiB3ZSBnZXQgaGVyZSBhbmQgY2FzZU1lc3NhZ2VzJCBpcyBlbXB0eSwgdXNlIGRlZmF1bHQgdmFsdWUgaW4gRFggQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMuY2FzZU1lc3NhZ2VzJCkge1xuICAgICAgICB0aGlzLmNhc2VNZXNzYWdlcyQgPSB0aGlzLmxvY2FsaXplZFZhbCgnVGhhbmsgeW91ISBUaGUgbmV4dCBzdGVwIGluIHRoaXMgY2FzZSBoYXMgYmVlbiByb3V0ZWQgYXBwcm9wcmlhdGVseS4nLCB0aGlzLmxvY2FsZUNhdGVnb3J5KTtcbiAgICAgIH1cblxuICAgICAgLy8gcHVibGlzaCB0aGlzIFwiYXNzaWdubWVudEZpbmlzaGVkXCIgZm9yIG1hc2h1cCwgbmVlZCB0byBnZXQgYXBwcm92ZWQgYXMgYSBzdGFuZGFyZFxuICAgICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5wdWJsaXNoKCdhc3NpZ25tZW50RmluaXNoZWQnKTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gZmFsc2U7XG4gICAgICB0aGlzLmJTaG93Q29uZmlybSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpIHtcbiAgICAvLyByb3V0aW5nSW5mbyB3YXMgYWRkZWQgYXMgY29tcG9uZW50IHByb3AgaW4gcG9wdWxhdGVBZGRpdGlvbmFsUHJvcHNcbiAgICBjb25zdCByb3V0aW5nSW5mbyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldENvbXBvbmVudFByb3AodGhpcywgJ3JvdXRpbmdJbmZvJyk7XG5cbiAgICBsZXQgbG9hZGluZ0luZm86IGFueTtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZSAtIFByb3BlcnR5ICdnZXRMb2FkaW5nU3RhdHVzJyBpcyBwcml2YXRlIGFuZCBvbmx5IGFjY2Vzc2libGUgd2l0aGluIGNsYXNzICdDMTFuRW52J1xuICAgICAgbG9hZGluZ0luZm8gPSB0aGlzLnBDb25uJC5nZXRMb2FkaW5nU3RhdHVzKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuXG4gICAgLy8gdGhpcyBjaGVjayBpbiByb3V0aW5nSW5mbywgbWltaWMgTmVidWxhL0NvbnN0ZWxsYXRpb24gKFJlYWN0KSB0byBjaGVjayBhbmQgZ2V0IHRoZSBpbnRlcm5hbHMgb2YgdGhlXG4gICAgLy8gZmxvd0NvbnRhaW5lciBhbmQgZm9yY2UgdXBkYXRlcyB0byBwQ29ubmVjdC9yZWR1eFxuICAgIGlmIChyb3V0aW5nSW5mbyAmJiBsb2FkaW5nSW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50T3JkZXIgPSByb3V0aW5nSW5mby5hY2Nlc3NlZE9yZGVyO1xuICAgICAgY29uc3QgY3VycmVudEl0ZW1zID0gcm91dGluZ0luZm8uaXRlbXM7XG4gICAgICBjb25zdCB0eXBlID0gcm91dGluZ0luZm8udHlwZTtcbiAgICAgIGlmIChjdXJyZW50T3JkZXIgJiYgY3VycmVudEl0ZW1zKSB7XG4gICAgICAgIC8vIEpBIC0gbWFraW5nIG1vcmUgc2ltaWxhciB0byBOZWJ1bGEvQ29uc3RlbGxhdGlvblxuICAgICAgICBjb25zdCBrZXkgPSBjdXJyZW50T3JkZXJbY3VycmVudE9yZGVyLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIHNhdmUgb2ZmIGl0ZW1LZXkgdG8gYmUgdXNlZCBmb3IgZmluaXNoQXNzaWdubWVudCwgZXRjLlxuICAgICAgICAvLyB0aW1lb3V0IGFuZCBkZXRlY3RDaGFuZ2VzIHRvIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAmJiBrZXkgIT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUtleSQgPSBrZXk7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWNvbGxhcHNpYmxlLWlmXG4gICAgICAgIGlmIChjdXJyZW50T3JkZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChjdXJyZW50SXRlbXNba2V5XSAmJiBjdXJyZW50SXRlbXNba2V5XS52aWV3ICYmIHR5cGUgPT09ICdzaW5nbGUnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRJdGVtc1trZXldLnZpZXcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHdoZW4gd2UgZ2V0IGhlcmUsIGl0IGl0IGJlY2F1c2UgdGhlIGZsb3cgYWN0aW9uIGRhdGEgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHNlcnZlciwgYW5kIG5lZWQgdG8gYWRkIHRvIHBDb25uZWN0IGFuZCB1cGRhdGUgY2hpbGRyZW5cblxuICAgICAgICAgICAgdGhpcy5hZGRQQ29ubmVjdEFuZFVwZGF0ZUNoaWxkcmVuKGN1cnJlbnRJdGVtc1trZXldLCBrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFBDb25uZWN0QW5kVXBkYXRlQ2hpbGRyZW4oY3VycmVudEl0ZW0sIGtleSkge1xuICAgIGNvbnN0IGxvY2FsUENvbm4gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG5cbiAgICBjb25zdCByb290VmlldyA9IGN1cnJlbnRJdGVtLnZpZXc7XG4gICAgY29uc3QgeyBjb250ZXh0LCBuYW1lOiBWaWV3TmFtZSB9ID0gcm9vdFZpZXcuY29uZmlnO1xuICAgIGNvbnN0IGNvbmZpZzogYW55ID0geyBtZXRhOiByb290VmlldyB9O1xuXG4gICAgLy8gRG9uJ3QgZ28gYWhlYWQgaWYgVmlldyBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCFWaWV3TmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9kb19jb250ZXh0JCA9IGN1cnJlbnRJdGVtLmNvbnRleHQ7XG5cbiAgICBjb25maWcub3B0aW9ucyA9IHtcbiAgICAgIGNvbnRleHQ6IGN1cnJlbnRJdGVtLmNvbnRleHQsXG4gICAgICBwYWdlUmVmZXJlbmNlOiBjb250ZXh0IHx8IGxvY2FsUENvbm4uZ2V0UGFnZVJlZmVyZW5jZSgpLFxuICAgICAgaGFzRm9ybTogdHJ1ZSxcbiAgICAgIGlzRmxvd0NvbnRhaW5lcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lck5hbWU6IGxvY2FsUENvbm4uZ2V0Q29udGFpbmVyTmFtZSgpLFxuICAgICAgY29udGFpbmVySXRlbU5hbWU6IGtleSxcbiAgICAgIHBhcmVudFBhZ2VSZWZlcmVuY2U6IGxvY2FsUENvbm4uZ2V0UGFnZVJlZmVyZW5jZSgpXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZ09iamVjdCA9IFBDb3JlLmNyZWF0ZVBDb25uZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5jb25maXJtX3Bjb25uID0gY29uZmlnT2JqZWN0LmdldFBDb25uZWN0KCk7XG4gICAgLy8gOC43IC0gY29uZmlnIG1pZ2h0IGJlIGEgUmVmZXJlbmNlIGNvbXBvbmVudCBzbywgbmVlZCB0byBub3JtYWxpemUgaXQgdG8gZ2V0XG4gICAgLy8gIHRoZSBWaWV3IGlmIGl0IGlzIGEgUmVmZXJlbmNlIGNvbXBvbmVudC4gQW5kIG5lZWQgdG8gcGFzcyBpbiB0aGUgZ2V0UENvbm5lY3RcbiAgICAvLyAgdG8gaGF2ZSBub3JtYWxpemUgZG8gYSBjMTFFbnYgY3JlYXRlQ29tcG9uZW50ICh0aGF0IG1ha2VzIHN1cmUgb3B0aW9ucy5oYXNGb3JtXG4gICAgLy8gIGlzIHBhc3NlZCBhbG9uZyB0byBhbGwgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb25maWdPYmplY3QgPSBSZWZlcmVuY2VDb21wb25lbnQubm9ybWFsaXplUENvbm4oY29uZmlnT2JqZWN0LmdldFBDb25uZWN0KCkpO1xuICAgIC8vIFdlIHdhbnQgdGhlIGNoaWxkcmVuIHRvIGJlIHRoZSBQQ29ubmVjdCBpdHNlbGYsIG5vdCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0UENvbm5lY3QoKSxcbiAgICAvLyAgU28gbmVlZCB0byBnZXQgdGhlIFBDb25uZWN0IG9mIHRoZSBub3JtYWxpemVkIGNvbXBvbmVudCB3ZSBqdXN0IGNyZWF0ZWQuLi5cbiAgICBjb25zdCBub3JtYWxpemVkQ29uZmlnT2JqZWN0QXNQQ29ubmVjdCA9IG5vcm1hbGl6ZWRDb25maWdPYmplY3QuZ2V0Q29tcG9uZW50KCk7XG5cbiAgICAvLyBtYWtlcyBzdXJlIEFuZ3VsYXIgdHJhY2tzIHRoZXNlIGNoYW5nZXNcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5idWlsZE5hbWUkID0gdGhpcy5nZXRCdWlsZE5hbWUoKTtcbiAgICAgIC8vIHdoYXQgY29tZXMgYmFjayBub3cgaW4gY29uZmlnT2JqZWN0IGlzIHRoZSBjaGlsZHJlbiBvZiB0aGUgZmxvd0NvbnRhaW5lclxuXG4gICAgICB0aGlzLmFyQ2hpbGRyZW4kID0gW107XG4gICAgICB0aGlzLmFyQ2hpbGRyZW4kLnB1c2gobm9ybWFsaXplZENvbmZpZ09iamVjdEFzUENvbm5lY3QpO1xuXG4gICAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZShmYWxzZSk7XG5cbiAgICAgIGNvbnN0IG9Xb3JrSXRlbSA9IGNvbmZpZ09iamVjdC5nZXRQQ29ubmVjdCgpO1xuICAgICAgY29uc3Qgb1dvcmtEYXRhOiBhbnkgPSBvV29ya0l0ZW0uZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lck5hbWUkID0gdGhpcy5sb2NhbGl6ZWRWYWwodGhpcy5nZXRBY3RpdmVWaWV3TGFiZWwoKSB8fCBvV29ya0RhdGEuY2FzZUluZm8uYXNzaWdubWVudHM/LlswXS5uYW1lLCB1bmRlZmluZWQsIHRoaXMubG9jYWxlUmVmZXJlbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1aWxkTmFtZSgpOiBzdHJpbmcge1xuICAgIC8vIGxldCB7IGdldFBDb25uZWN0LCBuYW1lIH0gPSB0aGlzLnBDb25uJC5wcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBsZXQgdmlld0NvbnRhaW5lck5hbWUgPSB0aGlzLnBDb25uJC5nZXRDb250YWluZXJOYW1lKCk7XG5cbiAgICBpZiAoIXZpZXdDb250YWluZXJOYW1lKSB2aWV3Q29udGFpbmVyTmFtZSA9ICcnO1xuICAgIHJldHVybiBgJHtjb250ZXh0LnRvVXBwZXJDYXNlKCl9LyR7dmlld0NvbnRhaW5lck5hbWUudG9VcHBlckNhc2UoKX1gO1xuICB9XG5cbiAgZm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudG91Y2hBbGwoKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAkLnZhbGlkO1xuICB9XG5cbiAgdG91Y2hBbGwoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWlkZW50aWNhbC1mdW5jdGlvbnNcbiAgdG9wVmlld1JlZnJlc2goKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhlbHBlcnMgLSBjb3B5aWVkIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycy5qc1xuXG4gIGFkZENvbnRhaW5lckl0ZW0ocENvbm5lY3QpIHtcbiAgICAvLyBjb3BpZWQgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXIuanNcbiAgICBjb25zdCBjb250YWluZXJNYW5hZ2VyID0gcENvbm5lY3QuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gcENvbm5lY3QuZ2V0Q29udGV4dE5hbWUoKTsgLy8gaGVyZSB3ZSB3aWxsIGdldCBwYXJlbnQgY29udGV4dCBuYW1lLCBhcyBmbG93IGNvbnRhaW5lciBpcyBjaGlsZCBvZiB2aWV3IGNvbnRhaW5lclxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHBDb25uZWN0LmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICBsZXQga2V5O1xuICAgIGxldCBmbG93TmFtZTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgIT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0TmFtZS5zdWJzdHJpbmcoMCwgY29udGV4dE5hbWUubGFzdEluZGV4T2YoJ18nKSk7XG4gICAgICBjb25zdCBhY3RpdmVDb250YWluZXJJdGVtSUQgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKHRhcmdldCk7XG4gICAgICBjb25zdCBjb250YWluZXJJdGVtRGF0YSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0Q29udGFpbmVySXRlbURhdGEodGFyZ2V0LCBhY3RpdmVDb250YWluZXJJdGVtSUQpO1xuXG4gICAgICBpZiAoY29udGFpbmVySXRlbURhdGEpIHtcbiAgICAgICAgKHsga2V5LCBmbG93TmFtZSB9ID0gY29udGFpbmVySXRlbURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lck1hbmFnZXIuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICBzZW1hbnRpY1VSTDogJycsXG4gICAgICBrZXksXG4gICAgICBmbG93TmFtZSxcbiAgICAgIGNhc2VWaWV3TW9kZTogJ3BlcmZvcm0nLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQVNTSUdOTUVOVCcsXG4gICAgICBkYXRhOiBwQ29ubmVjdC5nZXREYXRhT2JqZWN0KGNvbnRleHROYW1lKVxuICAgIH0pO1xuICB9XG4gIC8vIGhlbHBlcnMgZW5kXG59XG4iLCI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIGNsYXNzPVwicHNkay1mbG93LWNvbnRhaW5lci10b3BcIj5cbiAgPGRpdiAqbmdJZj1cIiFiU2hvd0NvbmZpcm1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8aDI+e3sgY29udGFpbmVyTmFtZSQgfX08L2gyPlxuICAgICAgPGRpdiAqbmdJZj1cImJhbm5lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiQWxlcnRCYW5uZXJcIiBbcHJvcHNdPVwieyBiYW5uZXJzIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiVG9kb1wiXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgcENvbm4kOiBwQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSxcbiAgICAgICAgICBjYXNlSW5mb0lEJDogdG9kb19jYXNlSW5mb0lEJCxcbiAgICAgICAgICBkYXRhc291cmNlJDogdG9kb19kYXRhc291cmNlJCxcbiAgICAgICAgICBzaG93VG9kb0xpc3QkOiB0b2RvX3Nob3dUb2RvTGlzdCQsXG4gICAgICAgICAgaGVhZGVyVGV4dCQ6IHRvZG9faGVhZGVyVGV4dCQsXG4gICAgICAgICAgdHlwZSQ6ICdUT0RPJyxcbiAgICAgICAgICBjb250ZXh0JDogdG9kb19jb250ZXh0JCxcbiAgICAgICAgICBpc0NvbmZpcm06IHRydWVcbiAgICAgICAgfVwiXG4gICAgICA+PC9jb21wb25lbnQtbWFwcGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhdG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiQXNzaWdubWVudFwiXG4gICAgICAgIFtwcm9wc109XCJ7IHBDb25uJDogcENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0sIGZvcm1Hcm91cCQsIGFyQ2hpbGRyZW4kLCBpdGVtS2V5JCB9XCJcbiAgICAgID48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYkhhc0Nhc2VNZXNzYWdlcyRcIj5cbiAgICA8bWF0LWNhcmQgY2xhc3M9XCJwc2RrLW1lc3NhZ2UtY2FyZFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3dcIj5cbiAgICAgICAgPGRpdj48aW1nIGNsYXNzPVwicHNkay1pY29uXCIgc3JjPVwie3sgY2hlY2tTdmckIH19XCIgLz48L2Rpdj5cbiAgICAgICAgPGRpdj57eyBjYXNlTWVzc2FnZXMkIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImJTaG93QmFubmVyICYmIGJTaG93Q29uZmlybVwiPlxuICAgIDxjb21wb25lbnQtbWFwcGVyIG5hbWU9XCJWaWV3XCIgW3Byb3BzXT1cInsgZm9ybUdyb3VwJCwgcENvbm4kOiBjb25maXJtX3Bjb25uIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=