@hmcts/ccd-case-ui-toolkit 5.0.7-angular11-upgrade → 5.0.10-angular11-upgrade

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 (306) hide show
  1. package/README.md +191 -0
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +21862 -14323
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -16
  5. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  6. package/esm2015/lib/shared/components/case-editor/case-create/case-create.component.js +94 -0
  7. package/esm2015/lib/shared/components/case-editor/case-create/index.js +2 -0
  8. package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +113 -0
  9. package/esm2015/lib/shared/components/case-editor/case-edit/index.js +2 -0
  10. package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +131 -0
  11. package/esm2015/lib/shared/components/case-editor/case-edit-confirm/index.js +2 -0
  12. package/esm2015/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.js +146 -0
  13. package/esm2015/lib/shared/components/case-editor/case-edit-form/index.js +2 -0
  14. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.js +11 -0
  15. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +654 -0
  16. package/esm2015/lib/shared/components/case-editor/case-edit-page/index.js +2 -0
  17. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +759 -0
  18. package/esm2015/lib/shared/components/case-editor/case-edit-submit/index.js +2 -0
  19. package/esm2015/lib/shared/components/case-editor/case-editor.module.js +185 -0
  20. package/esm2015/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.js +89 -0
  21. package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.js +72 -0
  22. package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.js +157 -0
  23. package/esm2015/lib/shared/components/case-editor/case-event-completion/index.js +4 -0
  24. package/esm2015/lib/shared/components/case-editor/case-progress/case-progress.component.js +85 -0
  25. package/esm2015/lib/shared/components/case-editor/case-progress/index.js +2 -0
  26. package/esm2015/lib/shared/components/case-editor/domain/event-completion-params.model.js +2 -0
  27. package/esm2015/lib/shared/components/case-editor/domain/event-completion-portal-types.model.js +6 -0
  28. package/esm2015/lib/shared/components/case-editor/editor.routing.js +31 -0
  29. package/esm2015/lib/shared/components/case-editor/index.js +13 -0
  30. package/esm2015/lib/shared/components/case-editor/services/case-edit-wizard.guard.js +92 -0
  31. package/esm2015/lib/shared/components/case-editor/services/convert-href-to-router.service.js +41 -0
  32. package/esm2015/lib/shared/components/case-editor/services/event-completion-state-machine.service.js +162 -0
  33. package/esm2015/lib/shared/components/case-editor/services/event-trigger.service.js +20 -0
  34. package/esm2015/lib/shared/components/case-editor/services/index.js +12 -0
  35. package/esm2015/lib/shared/components/case-editor/services/page-validation.service.js +50 -0
  36. package/esm2015/lib/shared/components/case-editor/services/wizard-factory.service.js +7 -0
  37. package/esm2015/lib/shared/components/case-history/case-history.component.js +264 -0
  38. package/esm2015/lib/shared/components/case-history/case-history.module.js +52 -0
  39. package/esm2015/lib/shared/components/case-history/domain/case-history.model.js +28 -0
  40. package/esm2015/lib/shared/components/case-history/index.js +3 -0
  41. package/esm2015/lib/shared/components/case-history/services/case-history.service.js +40 -0
  42. package/esm2015/lib/shared/components/case-timeline/case-timeline.component.js +118 -0
  43. package/esm2015/lib/shared/components/case-timeline/case-timeline.module.js +46 -0
  44. package/esm2015/lib/shared/components/case-timeline/index.js +3 -0
  45. package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +195 -0
  46. package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/index.js +2 -0
  47. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.js +307 -0
  48. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/index.js +2 -0
  49. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.js +20 -0
  50. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/index.js +2 -0
  51. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.js +64 -0
  52. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/index.js +2 -0
  53. package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +120 -0
  54. package/esm2015/lib/shared/components/case-viewer/case-event-trigger/index.js +2 -0
  55. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +545 -0
  56. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/index.js +2 -0
  57. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.js +63 -0
  58. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/index.js +2 -0
  59. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.js +258 -0
  60. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/index.js +2 -0
  61. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.js +18 -0
  62. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.js +2 -0
  63. package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +195 -0
  64. package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/index.js +2 -0
  65. package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.js +11 -0
  66. package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/index.js +2 -0
  67. package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.js +60 -0
  68. package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/index.js +2 -0
  69. package/esm2015/lib/shared/components/case-viewer/case-view/case-view.component.js +100 -0
  70. package/esm2015/lib/shared/components/case-viewer/case-view/index.js +2 -0
  71. package/esm2015/lib/shared/components/case-viewer/case-viewer.component.js +129 -0
  72. package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +155 -0
  73. package/esm2015/lib/shared/components/case-viewer/index.js +14 -0
  74. package/esm2015/lib/shared/components/case-viewer/printer/case-printer.component.js +111 -0
  75. package/esm2015/lib/shared/components/case-viewer/printer/index.js +4 -0
  76. package/esm2015/lib/shared/components/case-viewer/printer/pipes/index.js +2 -0
  77. package/esm2015/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.js +60 -0
  78. package/esm2015/lib/shared/components/case-viewer/services/case.resolver.js +110 -0
  79. package/esm2015/lib/shared/components/case-viewer/services/event-trigger.resolver.js +64 -0
  80. package/esm2015/lib/shared/components/case-viewer/services/index.js +3 -0
  81. package/esm2015/lib/shared/components/case-viewer/viewer.routing.js +127 -0
  82. package/esm2015/lib/shared/components/event-trigger/event-trigger.component.js +108 -0
  83. package/esm2015/lib/shared/components/event-trigger/event-trigger.module.js +35 -0
  84. package/esm2015/lib/shared/components/event-trigger/index.js +3 -0
  85. package/esm2015/lib/shared/components/index.js +5 -5
  86. package/esm2015/lib/shared/components/palette/complex/index.js +1 -7
  87. package/esm2015/lib/shared/components/palette/complex/write-complex-field.component.js +2 -2
  88. package/esm2015/lib/shared/components/palette/palette.module.js +16 -27
  89. package/esm2015/lib/shared/components/search-result/index.js +3 -0
  90. package/esm2015/lib/shared/components/search-result/search-result.component.js +845 -0
  91. package/esm2015/lib/shared/components/search-result/search-result.module.js +67 -0
  92. package/esm2015/lib/shared/domain/case-view/role-request.model.js +1 -1
  93. package/esm2015/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.js +29 -0
  94. package/esm2015/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.js +29 -0
  95. package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +154 -0
  96. package/esm2015/lib/shared/pipes/complex/ccd-tab-fields.pipe.js +31 -0
  97. package/esm2015/lib/shared/pipes/complex/cdd-page-fields.pipe.js +39 -0
  98. package/esm2015/lib/shared/pipes/complex/fields-filter.pipe.js +103 -0
  99. package/esm2015/lib/shared/pipes/complex/index.js +7 -0
  100. package/esm2015/lib/shared/pipes/index.js +3 -2
  101. package/esm2015/lib/shared/pipes/pipes.module.js +26 -9
  102. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +19417 -12703
  103. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  104. package/lib/shared/components/case-editor/case-create/case-create.component.d.ts +33 -0
  105. package/lib/shared/components/case-editor/case-create/case-create.component.d.ts.map +1 -0
  106. package/lib/shared/components/case-editor/case-create/index.d.ts +2 -0
  107. package/lib/shared/components/case-editor/case-create/index.d.ts.map +1 -0
  108. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts +50 -0
  109. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -0
  110. package/lib/shared/components/case-editor/case-edit/index.d.ts +2 -0
  111. package/lib/shared/components/case-editor/case-edit/index.d.ts.map +1 -0
  112. package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts +26 -0
  113. package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts.map +1 -0
  114. package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts +2 -0
  115. package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts.map +1 -0
  116. package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts +26 -0
  117. package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts.map +1 -0
  118. package/lib/shared/components/case-editor/case-edit-form/index.d.ts +2 -0
  119. package/lib/shared/components/case-editor/case-edit-form/index.d.ts.map +1 -0
  120. package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts +10 -0
  121. package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts.map +1 -0
  122. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +100 -0
  123. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -0
  124. package/lib/shared/components/case-editor/case-edit-page/index.d.ts +2 -0
  125. package/lib/shared/components/case-editor/case-edit-page/index.d.ts.map +1 -0
  126. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +123 -0
  127. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -0
  128. package/lib/shared/components/case-editor/case-edit-submit/index.d.ts +2 -0
  129. package/lib/shared/components/case-editor/case-edit-submit/index.d.ts.map +1 -0
  130. package/lib/shared/components/case-editor/case-editor.module.d.ts +27 -0
  131. package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -0
  132. package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts +31 -0
  133. package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts.map +1 -0
  134. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts +11 -0
  135. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts.map +1 -0
  136. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +32 -0
  137. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -0
  138. package/lib/shared/components/case-editor/case-event-completion/index.d.ts +4 -0
  139. package/lib/shared/components/case-editor/case-event-completion/index.d.ts.map +1 -0
  140. package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts +30 -0
  141. package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts.map +1 -0
  142. package/lib/shared/components/case-editor/case-progress/index.d.ts +2 -0
  143. package/lib/shared/components/case-editor/case-progress/index.d.ts.map +1 -0
  144. package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts +7 -0
  145. package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts.map +1 -0
  146. package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts +5 -0
  147. package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts.map +1 -0
  148. package/lib/shared/components/case-editor/editor.routing.d.ts +3 -0
  149. package/lib/shared/components/case-editor/editor.routing.d.ts.map +1 -0
  150. package/lib/shared/components/case-editor/index.d.ts +13 -0
  151. package/lib/shared/components/case-editor/index.d.ts.map +1 -0
  152. package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts +23 -0
  153. package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts.map +1 -0
  154. package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts +14 -0
  155. package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts.map +1 -0
  156. package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts +33 -0
  157. package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -0
  158. package/lib/shared/components/case-editor/services/event-trigger.service.d.ts +10 -0
  159. package/lib/shared/components/case-editor/services/event-trigger.service.d.ts.map +1 -0
  160. package/lib/shared/components/case-editor/services/index.d.ts +12 -0
  161. package/lib/shared/components/case-editor/services/index.d.ts.map +1 -0
  162. package/lib/shared/components/case-editor/services/page-validation.service.d.ts +17 -0
  163. package/lib/shared/components/case-editor/services/page-validation.service.d.ts.map +1 -0
  164. package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts +6 -0
  165. package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts.map +1 -0
  166. package/lib/shared/components/case-history/case-history.component.d.ts +33 -0
  167. package/lib/shared/components/case-history/case-history.component.d.ts.map +1 -0
  168. package/lib/shared/components/case-history/case-history.module.d.ts +14 -0
  169. package/lib/shared/components/case-history/case-history.module.d.ts.map +1 -0
  170. package/lib/shared/components/case-history/domain/case-history.model.d.ts +16 -0
  171. package/lib/shared/components/case-history/domain/case-history.model.d.ts.map +1 -0
  172. package/lib/shared/components/case-history/index.d.ts +3 -0
  173. package/lib/shared/components/case-history/index.d.ts.map +1 -0
  174. package/lib/shared/components/case-history/services/case-history.service.d.ts +17 -0
  175. package/lib/shared/components/case-history/services/case-history.service.d.ts.map +1 -0
  176. package/lib/shared/components/case-timeline/case-timeline.component.d.ts +27 -0
  177. package/lib/shared/components/case-timeline/case-timeline.component.d.ts.map +1 -0
  178. package/lib/shared/components/case-timeline/case-timeline.module.d.ts +13 -0
  179. package/lib/shared/components/case-timeline/case-timeline.module.d.ts.map +1 -0
  180. package/lib/shared/components/case-timeline/index.d.ts +3 -0
  181. package/lib/shared/components/case-timeline/index.d.ts.map +1 -0
  182. package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts +19 -0
  183. package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts.map +1 -0
  184. package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts +2 -0
  185. package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts.map +1 -0
  186. package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts +40 -0
  187. package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts.map +1 -0
  188. package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts +2 -0
  189. package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts.map +1 -0
  190. package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts +17 -0
  191. package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts.map +1 -0
  192. package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts +2 -0
  193. package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts.map +1 -0
  194. package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts +12 -0
  195. package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts.map +1 -0
  196. package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts +2 -0
  197. package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts.map +1 -0
  198. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +41 -0
  199. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -0
  200. package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts +2 -0
  201. package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts.map +1 -0
  202. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +90 -0
  203. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -0
  204. package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts +2 -0
  205. package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts.map +1 -0
  206. package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts +14 -0
  207. package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts.map +1 -0
  208. package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts +2 -0
  209. package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts.map +1 -0
  210. package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts +49 -0
  211. package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts.map +1 -0
  212. package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts +2 -0
  213. package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts.map +1 -0
  214. package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts +15 -0
  215. package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts.map +1 -0
  216. package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts +2 -0
  217. package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts.map +1 -0
  218. package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +33 -0
  219. package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts.map +1 -0
  220. package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts +2 -0
  221. package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts.map +1 -0
  222. package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts +9 -0
  223. package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts.map +1 -0
  224. package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts +2 -0
  225. package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts.map +1 -0
  226. package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts +12 -0
  227. package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts.map +1 -0
  228. package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts +2 -0
  229. package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts.map +1 -0
  230. package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts +32 -0
  231. package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts.map +1 -0
  232. package/lib/shared/components/case-viewer/case-view/index.d.ts +2 -0
  233. package/lib/shared/components/case-viewer/case-view/index.d.ts.map +1 -0
  234. package/lib/shared/components/case-viewer/case-viewer.component.d.ts +32 -0
  235. package/lib/shared/components/case-viewer/case-viewer.component.d.ts.map +1 -0
  236. package/lib/shared/components/case-viewer/case-viewer.module.d.ts +36 -0
  237. package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -0
  238. package/lib/shared/components/case-viewer/index.d.ts +14 -0
  239. package/lib/shared/components/case-viewer/index.d.ts.map +1 -0
  240. package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts +24 -0
  241. package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts.map +1 -0
  242. package/lib/shared/components/case-viewer/printer/index.d.ts +4 -0
  243. package/lib/shared/components/case-viewer/printer/index.d.ts.map +1 -0
  244. package/lib/shared/components/case-viewer/printer/pipes/index.d.ts +2 -0
  245. package/lib/shared/components/case-viewer/printer/pipes/index.d.ts.map +1 -0
  246. package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts +24 -0
  247. package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts.map +1 -0
  248. package/lib/shared/components/case-viewer/services/case.resolver.d.ts +29 -0
  249. package/lib/shared/components/case-viewer/services/case.resolver.d.ts.map +1 -0
  250. package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts +26 -0
  251. package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts.map +1 -0
  252. package/lib/shared/components/case-viewer/services/index.d.ts +3 -0
  253. package/lib/shared/components/case-viewer/services/index.d.ts.map +1 -0
  254. package/lib/shared/components/case-viewer/viewer.routing.d.ts +3 -0
  255. package/lib/shared/components/case-viewer/viewer.routing.d.ts.map +1 -0
  256. package/lib/shared/components/event-trigger/event-trigger.component.d.ts +24 -0
  257. package/lib/shared/components/event-trigger/event-trigger.component.d.ts.map +1 -0
  258. package/lib/shared/components/event-trigger/event-trigger.module.d.ts +11 -0
  259. package/lib/shared/components/event-trigger/event-trigger.module.d.ts.map +1 -0
  260. package/lib/shared/components/event-trigger/index.d.ts +3 -0
  261. package/lib/shared/components/event-trigger/index.d.ts.map +1 -0
  262. package/lib/shared/components/index.d.ts +4 -0
  263. package/lib/shared/components/index.d.ts.map +1 -1
  264. package/lib/shared/components/palette/complex/index.d.ts +0 -6
  265. package/lib/shared/components/palette/complex/index.d.ts.map +1 -1
  266. package/lib/shared/components/palette/complex/write-complex-field.component.d.ts.map +1 -1
  267. package/lib/shared/components/palette/palette.module.d.ts +87 -93
  268. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  269. package/lib/shared/components/search-result/index.d.ts +3 -0
  270. package/lib/shared/components/search-result/index.d.ts.map +1 -0
  271. package/lib/shared/components/search-result/search-result.component.d.ts +111 -0
  272. package/lib/shared/components/search-result/search-result.component.d.ts.map +1 -0
  273. package/lib/shared/components/search-result/search-result.module.d.ts +16 -0
  274. package/lib/shared/components/search-result/search-result.module.d.ts.map +1 -0
  275. package/lib/shared/domain/case-view/role-request.model.d.ts.map +1 -1
  276. package/lib/shared/{components/palette → pipes}/complex/ccd-collection-table-value-case-fields.pipe.d.ts +1 -1
  277. package/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +1 -0
  278. package/lib/shared/{components/palette → pipes}/complex/ccd-cyapage-label-filter.pipe.d.ts +1 -1
  279. package/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.d.ts.map +1 -0
  280. package/lib/shared/{components/palette → pipes}/complex/ccd-read-fields-filter.pipe.d.ts +1 -1
  281. package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -0
  282. package/lib/shared/{components/palette → pipes}/complex/ccd-tab-fields.pipe.d.ts +2 -2
  283. package/lib/shared/pipes/complex/ccd-tab-fields.pipe.d.ts.map +1 -0
  284. package/lib/shared/{components/palette → pipes}/complex/cdd-page-fields.pipe.d.ts +2 -2
  285. package/lib/shared/pipes/complex/cdd-page-fields.pipe.d.ts.map +1 -0
  286. package/lib/shared/{components/palette → pipes}/complex/fields-filter.pipe.d.ts +1 -1
  287. package/lib/shared/pipes/complex/fields-filter.pipe.d.ts.map +1 -0
  288. package/lib/shared/pipes/complex/index.d.ts +7 -0
  289. package/lib/shared/pipes/complex/index.d.ts.map +1 -0
  290. package/lib/shared/pipes/index.d.ts +2 -1
  291. package/lib/shared/pipes/index.d.ts.map +1 -1
  292. package/lib/shared/pipes/pipes.module.d.ts +7 -2
  293. package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
  294. package/package.json +1 -1
  295. package/esm2015/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.js +0 -29
  296. package/esm2015/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.js +0 -29
  297. package/esm2015/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.js +0 -154
  298. package/esm2015/lib/shared/components/palette/complex/ccd-tab-fields.pipe.js +0 -31
  299. package/esm2015/lib/shared/components/palette/complex/cdd-page-fields.pipe.js +0 -39
  300. package/esm2015/lib/shared/components/palette/complex/fields-filter.pipe.js +0 -103
  301. package/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +0 -1
  302. package/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.d.ts.map +0 -1
  303. package/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.d.ts.map +0 -1
  304. package/lib/shared/components/palette/complex/ccd-tab-fields.pipe.d.ts.map +0 -1
  305. package/lib/shared/components/palette/complex/cdd-page-fields.pipe.d.ts.map +0 -1
  306. package/lib/shared/components/palette/complex/fields-filter.pipe.d.ts.map +0 -1
@@ -0,0 +1,759 @@
1
+ import { Component } from '@angular/core';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { Subject } from 'rxjs';
5
+ import { PaletteContext } from '../../../components/palette/base-field/palette-context.enum';
6
+ import { CaseFieldService } from '../../../services/case-fields/case-field.service';
7
+ import { FieldsUtils } from '../../../services/fields/fields.utils';
8
+ import { FormErrorService } from '../../../services/form/form-error.service';
9
+ import { FormValueService } from '../../../services/form/form-value.service';
10
+ import { OrderService } from '../../../services/order/order.service';
11
+ import { ProfileNotifier } from '../../../services/profile/profile.notifier';
12
+ import { SessionStorageService } from '../../../services/session/session-storage.service';
13
+ import { CallbackErrorsComponent } from '../../error';
14
+ import { CaseEditPageText } from '../case-edit-page/case-edit-page-text.enum';
15
+ import { CaseEditComponent } from '../case-edit/case-edit.component';
16
+ import { Confirmation } from '../domain/confirmation.model';
17
+ import { CaseNotifier } from '../services/case.notifier';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../case-edit/case-edit.component";
20
+ import * as i2 from "../../../services/form/form-value.service";
21
+ import * as i3 from "../../../services/form/form-error.service";
22
+ import * as i4 from "../../../services/fields/fields.utils";
23
+ import * as i5 from "../../../services/case-fields/case-field.service";
24
+ import * as i6 from "@angular/router";
25
+ import * as i7 from "../../../services/order/order.service";
26
+ import * as i8 from "../../../services/profile/profile.notifier";
27
+ import * as i9 from "../../../services/session/session-storage.service";
28
+ import * as i10 from "../services/case.notifier";
29
+ function CaseEditSubmitComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelement(0, "div");
31
+ } }
32
+ function CaseEditSubmitComponent_div_0_ng_template_4_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelement(0, "ccd-markdown", 14);
34
+ i0.ɵɵpipe(1, "ccdCaseTitle");
35
+ } if (rf & 2) {
36
+ const ctx_r4 = i0.ɵɵnextContext(2);
37
+ i0.ɵɵproperty("content", i0.ɵɵpipeBind3(1, 1, ctx_r4.getCaseTitle(), ctx_r4.contextFields, ctx_r4.editForm.controls["data"]));
38
+ } }
39
+ function CaseEditSubmitComponent_div_0_ng_template_6_h2_0_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "h2", 16);
41
+ i0.ɵɵtext(1);
42
+ i0.ɵɵpipe(2, "ccdCaseReference");
43
+ i0.ɵɵelementEnd();
44
+ } if (rf & 2) {
45
+ const ctx_r12 = i0.ɵɵnextContext(3);
46
+ i0.ɵɵadvance(1);
47
+ i0.ɵɵtextInterpolate1("#", i0.ɵɵpipeBind1(2, 1, ctx_r12.getCaseId()), "");
48
+ } }
49
+ function CaseEditSubmitComponent_div_0_ng_template_6_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵtemplate(0, CaseEditSubmitComponent_div_0_ng_template_6_h2_0_Template, 3, 3, "h2", 15);
51
+ } if (rf & 2) {
52
+ const ctx_r6 = i0.ɵɵnextContext(2);
53
+ i0.ɵɵproperty("ngIf", ctx_r6.getCaseId());
54
+ } }
55
+ function CaseEditSubmitComponent_div_0_div_8_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "div", 17);
57
+ i0.ɵɵelementStart(1, "h1", 18);
58
+ i0.ɵɵtext(2, " Something went wrong ");
59
+ i0.ɵɵelementEnd();
60
+ i0.ɵɵelementStart(3, "div", 19);
61
+ i0.ɵɵelementStart(4, "p");
62
+ i0.ɵɵtext(5, "We're working to fix the problem. Try again shortly.");
63
+ i0.ɵɵelementEnd();
64
+ i0.ɵɵelementStart(6, "p");
65
+ i0.ɵɵelementStart(7, "a", 20);
66
+ i0.ɵɵtext(8, "Contact us");
67
+ i0.ɵɵelementEnd();
68
+ i0.ɵɵtext(9, " if you're still having problems.");
69
+ i0.ɵɵelementEnd();
70
+ i0.ɵɵelementEnd();
71
+ i0.ɵɵelementEnd();
72
+ } }
73
+ function CaseEditSubmitComponent_div_0_div_9_ul_5_li_1_Template(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵelementStart(0, "li", 25);
75
+ i0.ɵɵtext(1);
76
+ i0.ɵɵelementEnd();
77
+ } if (rf & 2) {
78
+ const fieldError_r15 = ctx.$implicit;
79
+ i0.ɵɵadvance(1);
80
+ i0.ɵɵtextInterpolate(fieldError_r15.message);
81
+ } }
82
+ function CaseEditSubmitComponent_div_0_div_9_ul_5_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementStart(0, "ul", 23);
84
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_div_9_ul_5_li_1_Template, 2, 1, "li", 24);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ const ctx_r13 = i0.ɵɵnextContext(3);
88
+ i0.ɵɵadvance(1);
89
+ i0.ɵɵproperty("ngForOf", ctx_r13.error.details.field_errors);
90
+ } }
91
+ function CaseEditSubmitComponent_div_0_div_9_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelementStart(0, "div", 17);
93
+ i0.ɵɵelementStart(1, "h3", 21);
94
+ i0.ɵɵtext(2, " The event could not be created ");
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(3, "p");
97
+ i0.ɵɵtext(4);
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵtemplate(5, CaseEditSubmitComponent_div_0_div_9_ul_5_Template, 2, 1, "ul", 22);
100
+ i0.ɵɵelementEnd();
101
+ } if (rf & 2) {
102
+ const ctx_r8 = i0.ɵɵnextContext(2);
103
+ i0.ɵɵadvance(4);
104
+ i0.ɵɵtextInterpolate(ctx_r8.error.message);
105
+ i0.ɵɵadvance(1);
106
+ i0.ɵɵproperty("ngIf", ctx_r8.error.details == null ? null : ctx_r8.error.details.field_errors);
107
+ } }
108
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "th", 35);
110
+ i0.ɵɵelementStart(1, "span", 26);
111
+ i0.ɵɵtext(2);
112
+ i0.ɵɵelementEnd();
113
+ i0.ɵɵelementEnd();
114
+ } if (rf & 2) {
115
+ const field_r20 = i0.ɵɵnextContext(2).$implicit;
116
+ i0.ɵɵadvance(2);
117
+ i0.ɵɵtextInterpolate(field_r20.label);
118
+ } }
119
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template(rf, ctx) { if (rf & 1) {
120
+ const _r27 = i0.ɵɵgetCurrentView();
121
+ i0.ɵɵelementStart(0, "a", 13);
122
+ i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r27); const page_r17 = i0.ɵɵnextContext(4).$implicit; const ctx_r25 = i0.ɵɵnextContext(3); return ctx_r25.navigateToPage(page_r17.id); });
123
+ i0.ɵɵelementStart(1, "span", 26);
124
+ i0.ɵɵtext(2, "Change");
125
+ i0.ɵɵelementEnd();
126
+ i0.ɵɵelementEnd();
127
+ } if (rf & 2) {
128
+ const field_r20 = i0.ɵɵnextContext(2).$implicit;
129
+ i0.ɵɵadvance(1);
130
+ i0.ɵɵattributeInterpolate1("aria-label", "Change ", field_r20.label, "");
131
+ } }
132
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelementContainerStart(0);
134
+ i0.ɵɵelementStart(1, "tr", 29);
135
+ i0.ɵɵtemplate(2, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_th_2_Template, 3, 1, "th", 30);
136
+ i0.ɵɵelementStart(3, "td", 31);
137
+ i0.ɵɵelement(4, "ccd-field-read", 32);
138
+ i0.ɵɵelementEnd();
139
+ i0.ɵɵelementStart(5, "td", 33);
140
+ i0.ɵɵtemplate(6, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template, 3, 1, "a", 34);
141
+ i0.ɵɵelementEnd();
142
+ i0.ɵɵelementEnd();
143
+ i0.ɵɵelementContainerEnd();
144
+ } if (rf & 2) {
145
+ const field_r20 = i0.ɵɵnextContext().$implicit;
146
+ const ctx_r21 = i0.ɵɵnextContext(5);
147
+ i0.ɵɵadvance(1);
148
+ i0.ɵɵproperty("caseField", field_r20)("hidden", field_r20.hidden)("formGroup", ctx_r21.editForm.controls["data"])("contextFields", ctx_r21.contextFields);
149
+ i0.ɵɵadvance(1);
150
+ i0.ɵɵproperty("ngIf", !ctx_r21.isLabel(field_r20));
151
+ i0.ɵɵadvance(1);
152
+ i0.ɵɵattribute("colspan", ctx_r21.isLabel(field_r20) ? "2" : "1");
153
+ i0.ɵɵadvance(1);
154
+ i0.ɵɵproperty("formGroup", ctx_r21.editForm.controls["data"])("topLevelFormGroup", ctx_r21.editForm.controls["data"])("caseField", ctx_r21.summaryCaseField(field_r20))("context", ctx_r21.paletteContext)("caseFields", ctx_r21.contextFields);
155
+ i0.ɵɵadvance(2);
156
+ i0.ɵɵproperty("ngIf", ctx_r21.isChangeAllowed(field_r20));
157
+ } }
158
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
159
+ i0.ɵɵelementContainerStart(0);
160
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_Template, 7, 12, "ng-container", 0);
161
+ i0.ɵɵelementContainerEnd();
162
+ } if (rf & 2) {
163
+ const field_r20 = ctx.$implicit;
164
+ const ctx_r19 = i0.ɵɵnextContext(5);
165
+ i0.ɵɵadvance(1);
166
+ i0.ɵɵproperty("ngIf", ctx_r19.canShowFieldInCYA(field_r20));
167
+ } }
168
+ const _c0 = function (a0, a4) { return [a0, false, undefined, true, a4]; };
169
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelementContainerStart(0);
171
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_Template, 2, 1, "ng-container", 28);
172
+ i0.ɵɵpipe(2, "ccdCYAPageLabelFilter");
173
+ i0.ɵɵpipe(3, "ccdReadFieldsFilter");
174
+ i0.ɵɵpipe(4, "ccdPageFields");
175
+ i0.ɵɵelementContainerEnd();
176
+ } if (rf & 2) {
177
+ const page_r17 = i0.ɵɵnextContext().$implicit;
178
+ const ctx_r18 = i0.ɵɵnextContext(3);
179
+ i0.ɵɵadvance(1);
180
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBindV(3, 3, i0.ɵɵpureFunction2(12, _c0, i0.ɵɵpipeBind2(4, 9, page_r17, ctx_r18.editForm), ctx_r18.editForm.controls["data"]))));
181
+ } }
182
+ function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_Template(rf, ctx) { if (rf & 1) {
183
+ i0.ɵɵelementContainerStart(0);
184
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_Template, 5, 15, "ng-container", 0);
185
+ i0.ɵɵelementContainerEnd();
186
+ } if (rf & 2) {
187
+ const page_r17 = ctx.$implicit;
188
+ const ctx_r16 = i0.ɵɵnextContext(3);
189
+ i0.ɵɵadvance(1);
190
+ i0.ɵɵproperty("ngIf", ctx_r16.isShown(page_r17));
191
+ } }
192
+ function CaseEditSubmitComponent_div_0_ng_container_12_Template(rf, ctx) { if (rf & 1) {
193
+ i0.ɵɵelementContainerStart(0);
194
+ i0.ɵɵelementStart(1, "h2", 16);
195
+ i0.ɵɵtext(2, "Check your answers");
196
+ i0.ɵɵelementEnd();
197
+ i0.ɵɵelementStart(3, "span", 26);
198
+ i0.ɵɵtext(4, "Check the information below carefully.");
199
+ i0.ɵɵelementEnd();
200
+ i0.ɵɵelementStart(5, "table", 27);
201
+ i0.ɵɵelementStart(6, "tbody");
202
+ i0.ɵɵtemplate(7, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_Template, 2, 1, "ng-container", 28);
203
+ i0.ɵɵelementEnd();
204
+ i0.ɵɵelementEnd();
205
+ i0.ɵɵelementContainerEnd();
206
+ } if (rf & 2) {
207
+ const ctx_r9 = i0.ɵɵnextContext(2);
208
+ i0.ɵɵadvance(7);
209
+ i0.ɵɵproperty("ngForOf", ctx_r9.wizard.pages);
210
+ } }
211
+ function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_3_Template(rf, ctx) { if (rf & 1) {
212
+ i0.ɵɵelementStart(0, "tr", 40);
213
+ i0.ɵɵelementStart(1, "th", 41);
214
+ i0.ɵɵtext(2);
215
+ i0.ɵɵelementEnd();
216
+ i0.ɵɵelementStart(3, "td", 42);
217
+ i0.ɵɵelement(4, "ccd-field-read", 43);
218
+ i0.ɵɵelementEnd();
219
+ i0.ɵɵelementEnd();
220
+ } if (rf & 2) {
221
+ const field_r32 = i0.ɵɵnextContext().$implicit;
222
+ const ctx_r33 = i0.ɵɵnextContext(3);
223
+ i0.ɵɵproperty("caseField", field_r32)("formGroup", ctx_r33.editForm.controls["data"])("contextFields", ctx_r33.contextFields);
224
+ i0.ɵɵadvance(2);
225
+ i0.ɵɵtextInterpolate(field_r32.label);
226
+ i0.ɵɵadvance(2);
227
+ i0.ɵɵproperty("formGroup", ctx_r33.editForm.controls["data"])("caseField", ctx_r33.summaryCaseField(field_r32));
228
+ } }
229
+ function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_4_Template(rf, ctx) { if (rf & 1) {
230
+ i0.ɵɵelementStart(0, "tr", 44);
231
+ i0.ɵɵelementStart(1, "td", 45);
232
+ i0.ɵɵelement(2, "ccd-field-read", 46);
233
+ i0.ɵɵelementEnd();
234
+ i0.ɵɵelementEnd();
235
+ } if (rf & 2) {
236
+ const field_r32 = i0.ɵɵnextContext().$implicit;
237
+ const ctx_r34 = i0.ɵɵnextContext(3);
238
+ i0.ɵɵproperty("caseField", field_r32)("formGroup", ctx_r34.editForm.controls["data"])("contextFields", ctx_r34.contextFields);
239
+ i0.ɵɵadvance(2);
240
+ i0.ɵɵproperty("formGroup", ctx_r34.editForm.controls["data"])("caseField", ctx_r34.summaryCaseField(field_r32))("caseFields", ctx_r34.contextFields);
241
+ } }
242
+ function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_Template(rf, ctx) { if (rf & 1) {
243
+ i0.ɵɵelementContainerStart(0);
244
+ i0.ɵɵelementContainerStart(1, 37);
245
+ i0.ɵɵpipe(2, "ccdIsCompound");
246
+ i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_3_Template, 5, 6, "tr", 38);
247
+ i0.ɵɵtemplate(4, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_4_Template, 3, 6, "tr", 39);
248
+ i0.ɵɵelementContainerEnd();
249
+ i0.ɵɵelementContainerEnd();
250
+ } if (rf & 2) {
251
+ const field_r32 = ctx.$implicit;
252
+ i0.ɵɵadvance(1);
253
+ i0.ɵɵproperty("ngSwitch", !i0.ɵɵpipeBind1(2, 3, field_r32));
254
+ i0.ɵɵadvance(2);
255
+ i0.ɵɵproperty("ngSwitchCase", true);
256
+ i0.ɵɵadvance(1);
257
+ i0.ɵɵproperty("ngSwitchCase", false);
258
+ } }
259
+ function CaseEditSubmitComponent_div_0_ng_container_13_Template(rf, ctx) { if (rf & 1) {
260
+ i0.ɵɵelementContainerStart(0);
261
+ i0.ɵɵelementStart(1, "table", 36);
262
+ i0.ɵɵelementStart(2, "tbody");
263
+ i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_Template, 5, 5, "ng-container", 28);
264
+ i0.ɵɵelementEnd();
265
+ i0.ɵɵelementEnd();
266
+ i0.ɵɵelementContainerEnd();
267
+ } if (rf & 2) {
268
+ const ctx_r10 = i0.ɵɵnextContext(2);
269
+ i0.ɵɵadvance(3);
270
+ i0.ɵɵproperty("ngForOf", ctx_r10.showSummaryFields);
271
+ } }
272
+ function CaseEditSubmitComponent_div_0_ng_container_14_fieldset_1_Template(rf, ctx) { if (rf & 1) {
273
+ i0.ɵɵelementStart(0, "fieldset", 48);
274
+ i0.ɵɵelement(1, "legend", 49);
275
+ i0.ɵɵelementStart(2, "div", 50);
276
+ i0.ɵɵelementStart(3, "label", 51);
277
+ i0.ɵɵtext(4, " Event summary (optional) ");
278
+ i0.ɵɵelementStart(5, "span", 52);
279
+ i0.ɵɵtext(6, "A few words describing the purpose of the event.");
280
+ i0.ɵɵelementEnd();
281
+ i0.ɵɵelementEnd();
282
+ i0.ɵɵelement(7, "input", 53);
283
+ i0.ɵɵelementEnd();
284
+ i0.ɵɵelementStart(8, "div", 50);
285
+ i0.ɵɵelementStart(9, "label", 54);
286
+ i0.ɵɵtext(10, "Event description (optional)");
287
+ i0.ɵɵelementEnd();
288
+ i0.ɵɵelement(11, "textarea", 55);
289
+ i0.ɵɵelementEnd();
290
+ i0.ɵɵelementEnd();
291
+ } }
292
+ function CaseEditSubmitComponent_div_0_ng_container_14_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵelementContainerStart(0);
294
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_14_fieldset_1_Template, 12, 0, "fieldset", 47);
295
+ i0.ɵɵelementContainerEnd();
296
+ } if (rf & 2) {
297
+ const ctx_r11 = i0.ɵɵnextContext(2);
298
+ i0.ɵɵadvance(1);
299
+ i0.ɵɵproperty("ngIf", ctx_r11.profile && !ctx_r11.isSolicitor());
300
+ } }
301
+ function CaseEditSubmitComponent_div_0_Template(rf, ctx) { if (rf & 1) {
302
+ const _r39 = i0.ɵɵgetCurrentView();
303
+ i0.ɵɵelementStart(0, "div");
304
+ i0.ɵɵelementStart(1, "h1", 2);
305
+ i0.ɵɵtext(2);
306
+ i0.ɵɵelementEnd();
307
+ i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_div_3_Template, 1, 0, "div", 3);
308
+ i0.ɵɵtemplate(4, CaseEditSubmitComponent_div_0_ng_template_4_Template, 2, 5, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
309
+ i0.ɵɵtemplate(6, CaseEditSubmitComponent_div_0_ng_template_6_Template, 1, 1, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
310
+ i0.ɵɵtemplate(8, CaseEditSubmitComponent_div_0_div_8_Template, 10, 0, "div", 6);
311
+ i0.ɵɵtemplate(9, CaseEditSubmitComponent_div_0_div_9_Template, 6, 2, "div", 6);
312
+ i0.ɵɵelementStart(10, "ccd-callback-errors", 7);
313
+ i0.ɵɵlistener("callbackErrorsContext", function CaseEditSubmitComponent_div_0_Template_ccd_callback_errors_callbackErrorsContext_10_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r38 = i0.ɵɵnextContext(); return ctx_r38.callbackErrorsNotify($event); });
314
+ i0.ɵɵelementEnd();
315
+ i0.ɵɵelementStart(11, "form", 8);
316
+ i0.ɵɵlistener("submit", function CaseEditSubmitComponent_div_0_Template_form_submit_11_listener() { i0.ɵɵrestoreView(_r39); const ctx_r40 = i0.ɵɵnextContext(); return ctx_r40.submit(); });
317
+ i0.ɵɵtemplate(12, CaseEditSubmitComponent_div_0_ng_container_12_Template, 8, 1, "ng-container", 0);
318
+ i0.ɵɵtemplate(13, CaseEditSubmitComponent_div_0_ng_container_13_Template, 4, 1, "ng-container", 0);
319
+ i0.ɵɵtemplate(14, CaseEditSubmitComponent_div_0_ng_container_14_Template, 2, 1, "ng-container", 0);
320
+ i0.ɵɵelementStart(15, "div", 9);
321
+ i0.ɵɵelementStart(16, "button", 10);
322
+ i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r39); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.previous(); });
323
+ i0.ɵɵtext(17, "Previous");
324
+ i0.ɵɵelementEnd();
325
+ i0.ɵɵelementStart(18, "button", 11);
326
+ i0.ɵɵtext(19);
327
+ i0.ɵɵelementEnd();
328
+ i0.ɵɵelementEnd();
329
+ i0.ɵɵelementStart(20, "p", 12);
330
+ i0.ɵɵelementStart(21, "a", 13);
331
+ i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_Template_a_click_21_listener() { i0.ɵɵrestoreView(_r39); const ctx_r42 = i0.ɵɵnextContext(); return ctx_r42.cancel(); });
332
+ i0.ɵɵtext(22);
333
+ i0.ɵɵelementEnd();
334
+ i0.ɵɵelementEnd();
335
+ i0.ɵɵelementEnd();
336
+ i0.ɵɵelementEnd();
337
+ } if (rf & 2) {
338
+ const _r3 = i0.ɵɵreference(5);
339
+ const _r5 = i0.ɵɵreference(7);
340
+ const ctx_r0 = i0.ɵɵnextContext();
341
+ i0.ɵɵadvance(2);
342
+ i0.ɵɵtextInterpolate(ctx_r0.eventTrigger.name);
343
+ i0.ɵɵadvance(1);
344
+ i0.ɵɵproperty("ngIf", ctx_r0.getCaseTitle())("ngIfThen", _r3)("ngIfElse", _r5);
345
+ i0.ɵɵadvance(5);
346
+ i0.ɵɵproperty("ngIf", ctx_r0.error && (!(ctx_r0.error.callbackErrors || ctx_r0.error.callbackWarnings || ctx_r0.error.details) && !ctx_r0.error.message));
347
+ i0.ɵɵadvance(1);
348
+ i0.ɵɵproperty("ngIf", ctx_r0.error && (ctx_r0.error.details || ctx_r0.error.message));
349
+ i0.ɵɵadvance(1);
350
+ i0.ɵɵproperty("callbackErrorsSubject", ctx_r0.callbackErrorsSubject);
351
+ i0.ɵɵadvance(1);
352
+ i0.ɵɵproperty("formGroup", ctx_r0.editForm);
353
+ i0.ɵɵadvance(1);
354
+ i0.ɵɵproperty("ngIf", ctx_r0.checkYourAnswerFieldsToDisplayExists());
355
+ i0.ɵɵadvance(1);
356
+ i0.ɵɵproperty("ngIf", ctx_r0.readOnlySummaryFieldsToDisplayExists());
357
+ i0.ɵɵadvance(1);
358
+ i0.ɵɵproperty("ngIf", ctx_r0.showEventNotes());
359
+ i0.ɵɵadvance(2);
360
+ i0.ɵɵproperty("disabled", !ctx_r0.hasPrevious() || ctx_r0.isSubmitting);
361
+ i0.ɵɵadvance(2);
362
+ i0.ɵɵproperty("disabled", ctx_r0.isDisabled);
363
+ i0.ɵɵadvance(1);
364
+ i0.ɵɵtextInterpolate(ctx_r0.triggerText);
365
+ i0.ɵɵadvance(2);
366
+ i0.ɵɵclassProp("disabled", ctx_r0.isSubmitting);
367
+ i0.ɵɵadvance(1);
368
+ i0.ɵɵtextInterpolate(ctx_r0.getCancelText());
369
+ } }
370
+ function CaseEditSubmitComponent_ccd_case_event_completion_1_Template(rf, ctx) { if (rf & 1) {
371
+ const _r44 = i0.ɵɵgetCurrentView();
372
+ i0.ɵɵelementStart(0, "ccd-case-event-completion", 56);
373
+ i0.ɵɵlistener("eventCanBeCompleted", function CaseEditSubmitComponent_ccd_case_event_completion_1_Template_ccd_case_event_completion_eventCanBeCompleted_0_listener($event) { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(); return ctx_r43.onEventCanBeCompleted($event); });
374
+ i0.ɵɵelementEnd();
375
+ } if (rf & 2) {
376
+ const ctx_r1 = i0.ɵɵnextContext();
377
+ i0.ɵɵproperty("eventCompletionParams", ctx_r1.eventCompletionParams);
378
+ } }
379
+ // @dynamic
380
+ export class CaseEditSubmitComponent {
381
+ constructor(caseEdit, formValueService, formErrorService, fieldsUtils, caseFieldService, route, router, orderService, profileNotifier, sessionStorageService, caseNotifier) {
382
+ this.caseEdit = caseEdit;
383
+ this.formValueService = formValueService;
384
+ this.formErrorService = formErrorService;
385
+ this.fieldsUtils = fieldsUtils;
386
+ this.caseFieldService = caseFieldService;
387
+ this.route = route;
388
+ this.router = router;
389
+ this.orderService = orderService;
390
+ this.profileNotifier = profileNotifier;
391
+ this.sessionStorageService = sessionStorageService;
392
+ this.caseNotifier = caseNotifier;
393
+ this.callbackErrorsSubject = new Subject();
394
+ this.ignoreWarning = false;
395
+ this.paletteContext = PaletteContext.CHECK_YOUR_ANSWER;
396
+ this.eventCompletionChecksRequired = false;
397
+ }
398
+ get isDisabled() {
399
+ // EUI-3452.
400
+ // We don't need to check the validity of the editForm as it is readonly.
401
+ // This was causing issues with hidden fields that aren't wanted but have
402
+ // not been disabled.
403
+ return this.isSubmitting || this.hasErrors;
404
+ }
405
+ get hasErrors() {
406
+ return this.error
407
+ && this.error.callbackErrors
408
+ && this.error.callbackErrors.length;
409
+ }
410
+ ngOnInit() {
411
+ this.profileSubscription = this.profileNotifier.profile.subscribe(_ => this.profile = _);
412
+ this.eventTrigger = this.caseEdit.eventTrigger;
413
+ this.triggerText = this.eventTrigger.end_button_label || CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;
414
+ this.editForm = this.caseEdit.form;
415
+ this.wizard = this.caseEdit.wizard;
416
+ this.showSummaryFields = this.sortFieldsByShowSummaryContent(this.eventTrigger.case_fields);
417
+ this.isSubmitting = false;
418
+ this.contextFields = this.getCaseFields();
419
+ }
420
+ ngOnDestroy() {
421
+ if (this.profileSubscription) {
422
+ this.profileSubscription.unsubscribe();
423
+ }
424
+ }
425
+ /**
426
+ * Handler function for event completion
427
+ */
428
+ submit() {
429
+ this.isSubmitting = true;
430
+ // We have to run the event completion checks if task in session storage
431
+ // and if the task is in session storage, then is it associated to the case
432
+ let taskInSessionStorage;
433
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
434
+ if (taskStr) {
435
+ taskInSessionStorage = JSON.parse(taskStr);
436
+ }
437
+ if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId()) {
438
+ // Show event completion component to perform event completion checks
439
+ this.eventCompletionParams = {
440
+ caseId: this.getCaseId(),
441
+ eventId: this.getEventId(),
442
+ task: taskInSessionStorage
443
+ };
444
+ this.eventCompletionChecksRequired = true;
445
+ }
446
+ else {
447
+ // Task not in session storage, proceed to submit
448
+ const caseEventData = this.generateCaseEventData();
449
+ this.caseSubmit(caseEventData);
450
+ }
451
+ }
452
+ /**
453
+ * Handler function for event emitted from case event completion component
454
+ */
455
+ onEventCanBeCompleted(eventCanBeCompleted) {
456
+ if (eventCanBeCompleted) {
457
+ // Submit
458
+ const caseEventData = this.generateCaseEventData();
459
+ this.caseSubmit(caseEventData);
460
+ }
461
+ else {
462
+ // Navigate to tasks tab on case details page
463
+ this.router.navigate([`/cases/case-details/${this.getCaseId()}/tasks`], { relativeTo: this.route });
464
+ }
465
+ }
466
+ navigateToPage(pageId) {
467
+ this.caseEdit.navigateToPage(pageId);
468
+ }
469
+ callbackErrorsNotify(errorContext) {
470
+ this.ignoreWarning = errorContext.ignore_warning;
471
+ this.triggerText = errorContext.trigger_text;
472
+ }
473
+ summaryCaseField(field) {
474
+ if (!this.editForm.get('data').get(field.id)) {
475
+ // If not in form, return field itself
476
+ return field;
477
+ }
478
+ const cloneField = this.fieldsUtils.cloneCaseField(field);
479
+ cloneField.value = this.editForm.get('data').get(field.id).value;
480
+ return cloneField;
481
+ }
482
+ cancel() {
483
+ if (this.eventTrigger.can_save_draft) {
484
+ if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {
485
+ this.caseEdit.cancelled.emit({ status: CaseEditPageText.RESUMED_FORM_DISCARD });
486
+ }
487
+ else {
488
+ this.caseEdit.cancelled.emit({ status: CaseEditPageText.NEW_FORM_DISCARD });
489
+ }
490
+ }
491
+ else {
492
+ this.caseEdit.cancelled.emit();
493
+ }
494
+ }
495
+ isLabel(field) {
496
+ return this.caseFieldService.isLabel(field);
497
+ }
498
+ isChangeAllowed(field) {
499
+ return !this.caseFieldService.isReadOnly(field);
500
+ }
501
+ checkYourAnswerFieldsToDisplayExists() {
502
+ if (!this.eventTrigger.show_summary) {
503
+ return false;
504
+ }
505
+ for (const page of this.wizard.pages) {
506
+ if (this.isShown(page)) {
507
+ for (const field of page.case_fields) {
508
+ if (this.canShowFieldInCYA(field)) {
509
+ // at least one field needs showing
510
+ return true;
511
+ }
512
+ }
513
+ }
514
+ }
515
+ // found no fields to show in CYA summary page
516
+ return false;
517
+ }
518
+ readOnlySummaryFieldsToDisplayExists() {
519
+ return this.eventTrigger.case_fields.some(field => field.show_summary_content_option >= 0);
520
+ }
521
+ showEventNotes() {
522
+ return this.eventTrigger.show_event_notes !== false;
523
+ }
524
+ previous() {
525
+ if (this.hasPrevious()) {
526
+ this.navigateToPage(this.getLastPageShown().id);
527
+ }
528
+ }
529
+ hasPrevious() {
530
+ return !!this.getLastPageShown();
531
+ }
532
+ isShown(page) {
533
+ const fields = this.fieldsUtils
534
+ .mergeCaseFieldsAndFormFields(this.eventTrigger.case_fields, this.editForm.controls['data'].value);
535
+ return page.parsedShowCondition.match(fields);
536
+ }
537
+ canShowFieldInCYA(field) {
538
+ return field.show_summary_change_option;
539
+ }
540
+ isSolicitor() {
541
+ return this.profile.isSolicitor();
542
+ }
543
+ getCaseId() {
544
+ return (this.caseEdit.caseDetails ? this.caseEdit.caseDetails.case_id : '');
545
+ }
546
+ getEventId() {
547
+ return this.editForm.value.event.id;
548
+ }
549
+ getCaseTitle() {
550
+ return (this.caseEdit.caseDetails && this.caseEdit.caseDetails.state &&
551
+ this.caseEdit.caseDetails.state.title_display ? this.caseEdit.caseDetails.state.title_display : '');
552
+ }
553
+ getCancelText() {
554
+ if (this.eventTrigger.can_save_draft) {
555
+ return 'Return to case list';
556
+ }
557
+ else {
558
+ return 'Cancel';
559
+ }
560
+ }
561
+ /**
562
+ * Function to generate and return case event data for completing the event
563
+ */
564
+ generateCaseEventData() {
565
+ const caseEventData = {
566
+ data: this.replaceEmptyComplexFieldValues(this.formValueService.sanitise(this.replaceHiddenFormValuesWithOriginalCaseData(this.editForm.get('data'), this.eventTrigger.case_fields))),
567
+ event: this.editForm.value.event
568
+ };
569
+ this.formValueService.clearNonCaseFields(caseEventData.data, this.eventTrigger.case_fields);
570
+ this.formValueService.removeNullLabels(caseEventData.data, this.eventTrigger.case_fields);
571
+ this.formValueService.removeEmptyDocuments(caseEventData.data, this.eventTrigger.case_fields);
572
+ // Remove collection fields that have "min" validation of greater than zero set on the FieldType but are empty;
573
+ // these will fail validation
574
+ this.formValueService.removeEmptyCollectionsWithMinValidation(caseEventData.data, this.eventTrigger.case_fields);
575
+ caseEventData.event_token = this.eventTrigger.event_token;
576
+ caseEventData.ignore_warning = this.ignoreWarning;
577
+ if (this.caseEdit.confirmation) {
578
+ caseEventData.data = {};
579
+ }
580
+ return caseEventData;
581
+ }
582
+ /**
583
+ * Function to complete the event
584
+ */
585
+ caseSubmit(caseEventData) {
586
+ this.caseEdit.submit(caseEventData)
587
+ .subscribe(response => {
588
+ this.caseNotifier.cachedCaseView = null;
589
+ const confirmation = this.buildConfirmation(response);
590
+ if (confirmation && (confirmation.getHeader() || confirmation.getBody())) {
591
+ this.caseEdit.confirm(confirmation);
592
+ }
593
+ else {
594
+ this.caseEdit.submitted.emit({ caseId: response['id'], status: this.getStatus(response) });
595
+ }
596
+ }, error => {
597
+ this.error = error;
598
+ this.callbackErrorsSubject.next(this.error);
599
+ if (this.error.details) {
600
+ this.formErrorService
601
+ .mapFieldErrors(this.error.details.field_errors, this.editForm.controls['data'], 'validation');
602
+ }
603
+ this.isSubmitting = false;
604
+ });
605
+ }
606
+ /**
607
+ * Traverse *all* values of a FormGroup, including those for disabled fields (i.e. hidden ones), replacing the
608
+ * value of any that are hidden AND have `retain_hidden_value` set to `true` in the corresponding `CaseField`, with
609
+ * the *original* value held in the `CaseField` object.
610
+ *
611
+ * This is as per design in EUI-3622, where any user-driven updates to hidden fields with `retain_hidden_value` =
612
+ * `true` are ignored (thus retaining the value displayed originally).
613
+ *
614
+ * * For Complex field types, the replacement above is performed recursively for all hidden sub-fields with
615
+ * `retain_hidden_value` = `true`.
616
+ *
617
+ * * For Collection field types, including collections of Complex and Document field types, the replacement is
618
+ * performed for all fields in the collection.
619
+ * returns An object with the *raw* form value data (as key-value pairs), with any value replacements as necessary
620
+ */
621
+ replaceHiddenFormValuesWithOriginalCaseData(formGroup, caseFields, parentField) {
622
+ // Get the raw form value data, which includes the values of any disabled controls, as key-value pairs
623
+ const rawFormValueData = formGroup.getRawValue();
624
+ // Place all case fields in a lookup object, so they can be retrieved by id
625
+ const caseFieldsLookup = {};
626
+ for (let i = 0, len = caseFields.length; i < len; i++) {
627
+ caseFieldsLookup[caseFields[i].id] = caseFields[i];
628
+ }
629
+ /**
630
+ * Replace any form value with the original, where its CaseField is hidden AND has the retain_hidden_value flag set
631
+ * to true.
632
+ *
633
+ * If the CaseField's `hidden` attribute is null or undefined, then check this attribute in the parent CaseField (if
634
+ * one exists). This is occurring (and is possibly a bug) when a CaseField is a sub-field of a Complex type, or an
635
+ * item in a Collection type.
636
+ *
637
+ * If the field is a Complex type with retain_hidden_value = true, perform a recursive replacement for all (hidden)
638
+ * sub-fields with retain_hidden_value = true, using their original CaseField values (from the `formatted_value`
639
+ * attribute).
640
+ *
641
+ * If the field is a Collection type with retain_hidden_value = true, the entire collection is replaced with the
642
+ * original from `formatted_value`. This applies to *all* types of Collections.
643
+ */
644
+ Object.keys(rawFormValueData).forEach((key) => {
645
+ const caseField = caseFieldsLookup[key];
646
+ // If caseField.hidden is NOT truthy and also NOT equal to false, then it must be null/undefined (remember that
647
+ // both null and undefined are equal to *neither false nor true*)
648
+ if (caseField && caseField.retain_hidden_value &&
649
+ (caseField.hidden || (caseField.hidden !== false && parentField && parentField.hidden))) {
650
+ if (caseField.field_type.type === 'Complex') {
651
+ if (caseField.value !== null && caseField.value !== undefined) {
652
+ // Call this function recursively to replace the Complex field's sub-fields as necessary, passing the
653
+ // CaseField itself (the sub-fields do not contain any values, so these need to be obtained from the
654
+ // parent)
655
+ // Update rawFormValueData for this field
656
+ // creating form group and adding control into it in case caseField is of complext type and and part of formGroup
657
+ const form = new FormGroup({});
658
+ if (formGroup.controls[key].value) {
659
+ Object.keys(formGroup.controls[key].value).forEach((item) => {
660
+ form.addControl(item, new FormControl(formGroup.controls[key].value[item]));
661
+ });
662
+ }
663
+ rawFormValueData[key] = this.replaceHiddenFormValuesWithOriginalCaseData(form, caseField.field_type.complex_fields, caseField);
664
+ }
665
+ }
666
+ else {
667
+ // Default case also handles collections of *all* types; the entire collection in rawFormValueData will be
668
+ // replaced with the original from formatted_value
669
+ // Use the CaseField's existing *formatted_value* from the parent, if available. (This is necessary for
670
+ // Complex fields, whose sub-fields do not hold any values in the model.) Otherwise, use formatted_value
671
+ // from the CaseField itself.
672
+ if (parentField && parentField.formatted_value) {
673
+ rawFormValueData[key] = parentField.formatted_value[caseField.id];
674
+ }
675
+ else {
676
+ rawFormValueData[key] = caseField.formatted_value;
677
+ }
678
+ }
679
+ }
680
+ });
681
+ return rawFormValueData;
682
+ }
683
+ /**
684
+ * Replaces non-array value objects with `null` for any Complex-type fields whose value is effectively empty, i.e.
685
+ * all its sub-fields and descendants are `null` or `undefined`.
686
+ */
687
+ replaceEmptyComplexFieldValues(data) {
688
+ Object.keys(data).forEach((key) => {
689
+ if (!Array.isArray(data[key]) && typeof data[key] === 'object' && !FieldsUtils.containsNonEmptyValues(data[key])) {
690
+ data[key] = null;
691
+ }
692
+ });
693
+ return data;
694
+ }
695
+ getStatus(response) {
696
+ return this.hasCallbackFailed(response) ? response['callback_response_status'] : response['delete_draft_response_status'];
697
+ }
698
+ hasCallbackFailed(response) {
699
+ return response['callback_response_status'] !== 'CALLBACK_COMPLETED';
700
+ }
701
+ getLastPageShown() {
702
+ let lastPage;
703
+ this.wizard.reverse().forEach(page => {
704
+ if (!lastPage && this.isShown(page)) {
705
+ lastPage = page;
706
+ }
707
+ });
708
+ // noinspection JSUnusedAssignment
709
+ return lastPage;
710
+ }
711
+ buildConfirmation(response) {
712
+ if (response['after_submit_callback_response']) {
713
+ return new Confirmation(response['id'], response['callback_response_status'], response['after_submit_callback_response']['confirmation_header'], response['after_submit_callback_response']['confirmation_body']);
714
+ }
715
+ else {
716
+ return null;
717
+ }
718
+ }
719
+ sortFieldsByShowSummaryContent(fields) {
720
+ return this.orderService
721
+ .sort(fields, CaseEditSubmitComponent.SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION)
722
+ .filter(cf => cf.show_summary_content_option);
723
+ }
724
+ getCaseFields() {
725
+ if (this.caseEdit.caseDetails) {
726
+ return FieldsUtils.getCaseFields(this.caseEdit.caseDetails);
727
+ }
728
+ return this.eventTrigger.case_fields;
729
+ }
730
+ }
731
+ CaseEditSubmitComponent.SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION = (a, b) => {
732
+ const aCaseField = a.show_summary_content_option === 0 || a.show_summary_content_option;
733
+ const bCaseField = b.show_summary_content_option === 0 || b.show_summary_content_option;
734
+ if (!aCaseField) {
735
+ return !bCaseField ? 0 : 1;
736
+ }
737
+ if (!bCaseField) {
738
+ return -1;
739
+ }
740
+ return a.show_summary_content_option - b.show_summary_content_option;
741
+ };
742
+ CaseEditSubmitComponent.ɵfac = function CaseEditSubmitComponent_Factory(t) { return new (t || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(i1.CaseEditComponent), i0.ɵɵdirectiveInject(i2.FormValueService), i0.ɵɵdirectiveInject(i3.FormErrorService), i0.ɵɵdirectiveInject(i4.FieldsUtils), i0.ɵɵdirectiveInject(i5.CaseFieldService), i0.ɵɵdirectiveInject(i6.ActivatedRoute), i0.ɵɵdirectiveInject(i6.Router), i0.ɵɵdirectiveInject(i7.OrderService), i0.ɵɵdirectiveInject(i8.ProfileNotifier), i0.ɵɵdirectiveInject(i9.SessionStorageService), i0.ɵɵdirectiveInject(i10.CaseNotifier)); };
743
+ CaseEditSubmitComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CaseEditSubmitComponent, selectors: [["ccd-case-edit-submit"]], decls: 2, vars: 2, consts: [[4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], [1, "govuk-heading-l"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["titleBlock", ""], ["idBlock", ""], ["class", "error-summary", "role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 4, "ngIf"], [3, "callbackErrorsSubject", "callbackErrorsContext"], [1, "check-your-answers", 3, "formGroup", "submit"], [1, "form-group", "form-group-related"], ["type", "button", 1, "button", "button-secondary", 3, "disabled", "click"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["href", "javascript:void(0)", 3, "click"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 1, "error-summary"], ["id", "edit-case-event_error-summary-heading", 1, "heading-h1", "error-summary-heading"], ["id", "edit-case-event_error-summary-body", 1, "govuk-error-summary__body"], ["href", "get-help", "target", "_blank"], ["id", "edit-case-event_error-summary-heading", 1, "heading-h3", "error-summary-heading"], ["class", "error-summary-list", 4, "ngIf"], [1, "error-summary-list"], ["class", "ccd-error-summary-li", 4, "ngFor", "ngForOf"], [1, "ccd-error-summary-li"], [1, "text-16"], ["aria-describedby", "check your answers table", 1, "form-table"], [4, "ngFor", "ngForOf"], ["ccdLabelSubstitutor", "", 3, "caseField", "hidden", "formGroup", "contextFields"], ["class", "valign-top case-field-label", 4, "ngIf"], [1, "form-cell", "case-field-content"], [3, "formGroup", "topLevelFormGroup", "caseField", "context", "caseFields"], [1, "valign-top", "check-your-answers__change", "case-field-change"], ["href", "javascript:void(0)", 3, "click", 4, "ngIf"], [1, "valign-top", "case-field-label"], ["aria-describedby", "summary fields table", 1, "summary-fields"], [3, "ngSwitch"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["class", "compound-field", "ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], ["id", "summary-field-label"], [1, "form-cell"], [3, "formGroup", "caseField"], ["ccdLabelSubstitutor", "", 1, "compound-field", 3, "caseField", "formGroup", "contextFields"], ["colspan", "2"], [3, "formGroup", "caseField", "caseFields"], ["id", "fieldset-event", "formGroupName", "event", 4, "ngIf"], ["id", "fieldset-event", "formGroupName", "event"], [2, "display", "none"], [1, "form-group"], ["for", "field-trigger-summary", 1, "form-label"], [1, "form-hint"], ["type", "text", "id", "field-trigger-summary", "formControlName", "summary", "maxlength", "1024", 1, "form-control", "bottom-30", "width-50"], ["for", "field-trigger-description", 1, "form-label"], ["id", "field-trigger-description", "formControlName", "description", "maxlength", "65536", 1, "form-control", "bottom-30", "width-50"], [3, "eventCompletionParams", "eventCanBeCompleted"]], template: function CaseEditSubmitComponent_Template(rf, ctx) { if (rf & 1) {
744
+ i0.ɵɵtemplate(0, CaseEditSubmitComponent_div_0_Template, 23, 17, "div", 0);
745
+ i0.ɵɵtemplate(1, CaseEditSubmitComponent_ccd_case_event_completion_1_Template, 1, 1, "ccd-case-event-completion", 1);
746
+ } if (rf & 2) {
747
+ i0.ɵɵproperty("ngIf", !ctx.eventCompletionChecksRequired);
748
+ i0.ɵɵadvance(1);
749
+ i0.ɵɵproperty("ngIf", ctx.eventCompletionChecksRequired);
750
+ } }, styles: ["#fieldset-case-data[_ngcontent-%COMP%]{margin-bottom:30px}#fieldset-case-data[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{width:1%;white-space:nowrap;vertical-align:top}.compound-field[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:0}#confirmation-header[_ngcontent-%COMP%]{width:630px;background-color:#17958b;border:1px solid #979797;color:#fff;text-align:center}#confirmation-body[_ngcontent-%COMP%]{width:630px;background-color:#fff}.valign-top[_ngcontent-%COMP%]{vertical-align:top}.summary-fields[_ngcontent-%COMP%]{margin-bottom:30px}.summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%], .summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{border-bottom:0}a.disabled[_ngcontent-%COMP%]{pointer-events:none;cursor:default}.case-field-label[_ngcontent-%COMP%]{width:45%}.case-field-content[_ngcontent-%COMP%]{width:50%}.case-field-change[_ngcontent-%COMP%]{width:5%}"] });
751
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditSubmitComponent, [{
752
+ type: Component,
753
+ args: [{
754
+ selector: 'ccd-case-edit-submit',
755
+ templateUrl: 'case-edit-submit.html',
756
+ styleUrls: ['../case-edit.scss']
757
+ }]
758
+ }], function () { return [{ type: i1.CaseEditComponent }, { type: i2.FormValueService }, { type: i3.FormErrorService }, { type: i4.FieldsUtils }, { type: i5.CaseFieldService }, { type: i6.ActivatedRoute }, { type: i6.Router }, { type: i7.OrderService }, { type: i8.ProfileNotifier }, { type: i9.SessionStorageService }, { type: i10.CaseNotifier }]; }, null); })();
759
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBTzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxN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dUJBQXVCO2NBTG5DLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxXQUFXLEVBQUUsdUJBQXVCO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzthQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGFsZXR0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvYmFzZS1maWVsZC9wYWxldHRlLWNvbnRleHQuZW51bSc7XG5pbXBvcnQgeyBDYXNlRXZlbnREYXRhIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZXZlbnQtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRXZlbnRUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9jYXNlLWV2ZW50LXRyaWdnZXIubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vaHR0cC9odHRwLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IFByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vcHJvZmlsZS9wcm9maWxlLm1vZGVsJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2snO1xuaW1wb3J0IHsgQ2FzZUZpZWxkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Nhc2UtZmllbGRzL2Nhc2UtZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuaW1wb3J0IHsgRm9ybUVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1WYWx1ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmRlci9vcmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2ZpbGVOb3RpZmllciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUvcHJvZmlsZS5ub3RpZmllcic7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZXNzaW9uL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGxiYWNrRXJyb3JzQ29tcG9uZW50LCBDYWxsYmFja0Vycm9yc0NvbnRleHQgfSBmcm9tICcuLi8uLi9lcnJvcic7XG5pbXBvcnQgeyBDYXNlRWRpdFBhZ2VUZXh0IH0gZnJvbSAnLi4vY2FzZS1lZGl0LXBhZ2UvY2FzZS1lZGl0LXBhZ2UtdGV4dC5lbnVtJztcbmltcG9ydCB7IENhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1lZGl0L2Nhc2UtZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uIH0gZnJvbSAnLi4vZG9tYWluL2NvbmZpcm1hdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25QYXJhbXMgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1wYXJhbXMubW9kZWwnO1xuaW1wb3J0IHsgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbi93aXphcmQtcGFnZS5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmQgfSBmcm9tICcuLi9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uL3NlcnZpY2VzL2Nhc2Uubm90aWZpZXInO1xuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdC1zdWJtaXQnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jYXNlLWVkaXQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhc2VFZGl0U3VibWl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXQ6IENhc2VFZGl0Q29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZhbHVlU2VydmljZTogRm9ybVZhbHVlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1FcnJvclNlcnZpY2U6IEZvcm1FcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmllbGRTZXJ2aWNlOiBDYXNlRmllbGRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVOb3RpZmllcjogUHJvZmlsZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBFVUktMzQ1Mi5cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWRpdEZvcm0gYXMgaXQgaXMgcmVhZG9ubHkuXG4gICAgLy8gVGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgd2l0aCBoaWRkZW4gZmllbGRzIHRoYXQgYXJlbid0IHdhbnRlZCBidXQgaGF2ZVxuICAgIC8vIG5vdCBiZWVuIGRpc2FibGVkLlxuICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyB8fCB0aGlzLmhhc0Vycm9ycztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclxuICAgICAgJiYgdGhpcy5lcnJvci5jYWxsYmFja0Vycm9yc1xuICAgICAgJiYgdGhpcy5lcnJvci5jYWxsYmFja0Vycm9ycy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyO1xuICBwdWJsaWMgZWRpdEZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yOiBIdHRwRXJyb3I7XG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc1N1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHB1YmxpYyBpZ25vcmVXYXJuaW5nID0gZmFsc2U7XG4gIHB1YmxpYyB0cmlnZ2VyVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgd2l6YXJkOiBXaXphcmQ7XG4gIHB1YmxpYyBwcm9maWxlOiBQcm9maWxlO1xuICBwdWJsaWMgc2hvd1N1bW1hcnlGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgcGFsZXR0ZUNvbnRleHQ6IFBhbGV0dGVDb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVI7XG4gIHB1YmxpYyBpc1N1Ym1pdHRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyBwcm9maWxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjb250ZXh0RmllbGRzOiBDYXNlRmllbGRbXTtcbiAgcHVibGljIHRhc2s6IFRhc2s7XG4gIHB1YmxpYyBldmVudENvbXBsZXRpb25QYXJhbXM6IEV2ZW50Q29tcGxldGlvblBhcmFtcztcbiAgcHVibGljIGV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0hPV19TVU1NQVJZX0NPTlRFTlRfQ09NUEFSRV9GVU5DVElPTiA9IChhOiBDYXNlRmllbGQsIGI6IENhc2VGaWVsZCk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgYUNhc2VGaWVsZCA9IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID09PSAwIHx8IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICAgIGNvbnN0IGJDYXNlRmllbGQgPSBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA9PT0gMCB8fCBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcblxuICAgIGlmICghYUNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuICFiQ2FzZUZpZWxkID8gMCA6IDE7XG4gICAgfVxuXG4gICAgaWYgKCFiQ2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiAtIGIuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJvZmlsZU5vdGlmaWVyLnByb2ZpbGUuc3Vic2NyaWJlKF8gPT4gdGhpcy5wcm9maWxlID0gXyk7XG4gICAgdGhpcy5ldmVudFRyaWdnZXIgPSB0aGlzLmNhc2VFZGl0LmV2ZW50VHJpZ2dlcjtcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5ldmVudFRyaWdnZXIuZW5kX2J1dHRvbl9sYWJlbCB8fCBDYWxsYmFja0Vycm9yc0NvbXBvbmVudC5UUklHR0VSX1RFWFRfU1VCTUlUO1xuICAgIHRoaXMuZWRpdEZvcm0gPSB0aGlzLmNhc2VFZGl0LmZvcm07XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLmNhc2VFZGl0LndpemFyZDtcbiAgICB0aGlzLnNob3dTdW1tYXJ5RmllbGRzID0gdGhpcy5zb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQodGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZXh0RmllbGRzID0gdGhpcy5nZXRDYXNlRmllbGRzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgZnVuY3Rpb24gZm9yIGV2ZW50IGNvbXBsZXRpb25cbiAgICovXG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuXG4gICAgLy8gV2UgaGF2ZSB0byBydW4gdGhlIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzIGlmIHRhc2sgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgLy8gYW5kIGlmIHRoZSB0YXNrIGlzIGluIHNlc3Npb24gc3RvcmFnZSwgdGhlbiBpcyBpdCBhc3NvY2lhdGVkIHRvIHRoZSBjYXNlXG4gICAgbGV0IHRhc2tJblNlc3Npb25TdG9yYWdlOiBUYXNrO1xuICAgIGNvbnN0IHRhc2tTdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd0YXNrVG9Db21wbGV0ZScpO1xuICAgIGlmICh0YXNrU3RyKSB7XG4gICAgICB0YXNrSW5TZXNzaW9uU3RvcmFnZSA9IEpTT04ucGFyc2UodGFza1N0cik7XG4gICAgfVxuXG4gICAgaWYgKHRhc2tJblNlc3Npb25TdG9yYWdlICYmIHRhc2tJblNlc3Npb25TdG9yYWdlLmNhc2VfaWQgPT09IHRoaXMuZ2V0Q2FzZUlkKCkpIHtcbiAgICAgIC8vIFNob3cgZXZlbnQgY29tcGxldGlvbiBjb21wb25lbnQgdG8gcGVyZm9ybSBldmVudCBjb21wbGV0aW9uIGNoZWNrc1xuICAgICAgdGhpcy5ldmVudENvbXBsZXRpb25QYXJhbXMgPSB7XG4gICAgICAgIGNhc2VJZDogdGhpcy5nZXRDYXNlSWQoKSxcbiAgICAgICAgZXZlbnRJZDogdGhpcy5nZXRFdmVudElkKCksXG4gICAgICAgIHRhc2s6IHRhc2tJblNlc3Npb25TdG9yYWdlXG4gICAgICB9O1xuICAgICAgdGhpcy5ldmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRhc2sgbm90IGluIHNlc3Npb24gc3RvcmFnZSwgcHJvY2VlZCB0byBzdWJtaXRcbiAgICAgIGNvbnN0IGNhc2VFdmVudERhdGEgPSB0aGlzLmdlbmVyYXRlQ2FzZUV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5jYXNlU3VibWl0KGNhc2VFdmVudERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZ1bmN0aW9uIGZvciBldmVudCBlbWl0dGVkIGZyb20gY2FzZSBldmVudCBjb21wbGV0aW9uIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZChldmVudENhbkJlQ29tcGxldGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Q2FuQmVDb21wbGV0ZWQpIHtcbiAgICAgIC8vIFN1Ym1pdFxuICAgICAgY29uc3QgY2FzZUV2ZW50RGF0YSA9IHRoaXMuZ2VuZXJhdGVDYXNlRXZlbnREYXRhKCk7XG4gICAgICB0aGlzLmNhc2VTdWJtaXQoY2FzZUV2ZW50RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRhc2tzIHRhYiBvbiBjYXNlIGRldGFpbHMgcGFnZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7dGhpcy5nZXRDYXNlSWQoKX0vdGFza3NgXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUGFnZShwYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQubmF2aWdhdGVUb1BhZ2UocGFnZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc05vdGlmeShlcnJvckNvbnRleHQ6IENhbGxiYWNrRXJyb3JzQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlV2FybmluZyA9IGVycm9yQ29udGV4dC5pZ25vcmVfd2FybmluZztcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gZXJyb3JDb250ZXh0LnRyaWdnZXJfdGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkOiBDYXNlRmllbGQpOiBDYXNlRmllbGQge1xuICAgIGlmICghdGhpcy5lZGl0Rm9ybS5nZXQoJ2RhdGEnKS5nZXQoZmllbGQuaWQpKSB7XG4gICAgICAvLyBJZiBub3QgaW4gZm9ybSwgcmV0dXJuIGZpZWxkIGl0c2VsZlxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lRmllbGQ6IENhc2VGaWVsZCA9IHRoaXMuZmllbGRzVXRpbHMuY2xvbmVDYXNlRmllbGQoZmllbGQpO1xuICAgIGNsb25lRmllbGQudmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGF0YScpLmdldChmaWVsZC5pZCkudmFsdWU7XG5cbiAgICByZXR1cm4gY2xvbmVGaWVsZDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pID09PSAndmlld0RyYWZ0Jykge1xuICAgICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KHtzdGF0dXM6IENhc2VFZGl0UGFnZVRleHQuUkVTVU1FRF9GT1JNX0RJU0NBUkR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoe3N0YXR1czogQ2FzZUVkaXRQYWdlVGV4dC5ORVdfRk9STV9ESVNDQVJEfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZpZWxkU2VydmljZS5pc0xhYmVsKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NoYW5nZUFsbG93ZWQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jYXNlRmllbGRTZXJ2aWNlLmlzUmVhZE9ubHkoZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGNoZWNrWW91ckFuc3dlckZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLndpemFyZC5wYWdlcykge1xuICAgICAgaWYgKHRoaXMuaXNTaG93bihwYWdlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHBhZ2UuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5TaG93RmllbGRJbkNZQShmaWVsZCkpIHtcbiAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBmaWVsZCBuZWVkcyBzaG93aW5nXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3VuZCBubyBmaWVsZHMgdG8gc2hvdyBpbiBDWUEgc3VtbWFyeSBwYWdlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZC5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPj0gMCApO1xuICB9XG5cbiAgcHVibGljIHNob3dFdmVudE5vdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzICE9PSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQcmV2aW91cygpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9QYWdlKHRoaXMuZ2V0TGFzdFBhZ2VTaG93bigpLmlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRMYXN0UGFnZVNob3duKCk7XG4gIH1cblxuICBwdWJsaWMgaXNTaG93bihwYWdlOiBXaXphcmRQYWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZHNVdGlsc1xuICAgICAgLm1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHModGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMsIHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXS52YWx1ZSk7XG4gICAgcmV0dXJuIHBhZ2UucGFyc2VkU2hvd0NvbmRpdGlvbi5tYXRjaChmaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIGNhblNob3dGaWVsZEluQ1lBKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuc2hvd19zdW1tYXJ5X2NoYW5nZV9vcHRpb247XG4gIH1cblxuICBwdWJsaWMgaXNTb2xpY2l0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZS5pc1NvbGljaXRvcigpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyA/IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuY2FzZV9pZCA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdEZvcm0udmFsdWUuZXZlbnQuaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzICYmIHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuc3RhdGUgJiZcbiAgICB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgPyB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgOiAnJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCkge1xuICAgICAgcmV0dXJuICdSZXR1cm4gdG8gY2FzZSBsaXN0JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdDYW5jZWwnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgcmV0dXJuIGNhc2UgZXZlbnQgZGF0YSBmb3IgY29tcGxldGluZyB0aGUgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXNlRXZlbnREYXRhKCk6IENhc2VFdmVudERhdGEge1xuICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB7XG4gICAgICBkYXRhOiB0aGlzLnJlcGxhY2VFbXB0eUNvbXBsZXhGaWVsZFZhbHVlcyhcbiAgICAgICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnNhbml0aXNlKFxuICAgICAgICAgIHRoaXMucmVwbGFjZUhpZGRlbkZvcm1WYWx1ZXNXaXRoT3JpZ2luYWxDYXNlRGF0YShcbiAgICAgICAgICAgIHRoaXMuZWRpdEZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykpKSxcbiAgICAgIGV2ZW50OiB0aGlzLmVkaXRGb3JtLnZhbHVlLmV2ZW50XG4gICAgfSBhcyBDYXNlRXZlbnREYXRhO1xuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5jbGVhck5vbkNhc2VGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU51bGxMYWJlbHMoY2FzZUV2ZW50RGF0YS5kYXRhLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGNhc2VFdmVudERhdGEuZGF0YSwgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIC8vIFJlbW92ZSBjb2xsZWN0aW9uIGZpZWxkcyB0aGF0IGhhdmUgXCJtaW5cIiB2YWxpZGF0aW9uIG9mIGdyZWF0ZXIgdGhhbiB6ZXJvIHNldCBvbiB0aGUgRmllbGRUeXBlIGJ1dCBhcmUgZW1wdHk7XG4gICAgLy8gdGhlc2Ugd2lsbCBmYWlsIHZhbGlkYXRpb25cbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGNhc2VFdmVudERhdGEuZGF0YSwgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIGNhc2VFdmVudERhdGEuZXZlbnRfdG9rZW4gPSB0aGlzLmV2ZW50VHJpZ2dlci5ldmVudF90b2tlbjtcbiAgICBjYXNlRXZlbnREYXRhLmlnbm9yZV93YXJuaW5nID0gdGhpcy5pZ25vcmVXYXJuaW5nO1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmNvbmZpcm1hdGlvbikge1xuICAgICAgY2FzZUV2ZW50RGF0YS5kYXRhID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhc2VFdmVudERhdGE7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY29tcGxldGUgdGhlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGNhc2VTdWJtaXQoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQuc3VibWl0KGNhc2VFdmVudERhdGEpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXNlTm90aWZpZXIuY2FjaGVkQ2FzZVZpZXcgPSBudWxsO1xuICAgICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uID0gdGhpcy5idWlsZENvbmZpcm1hdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbiAmJiAoY29uZmlybWF0aW9uLmdldEhlYWRlcigpIHx8IGNvbmZpcm1hdGlvbi5nZXRCb2R5KCkpKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2VFZGl0LmNvbmZpcm0oY29uZmlybWF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXNlRWRpdC5zdWJtaXR0ZWQuZW1pdCh7Y2FzZUlkOiByZXNwb25zZVsnaWQnXSwgc3RhdHVzOiB0aGlzLmdldFN0YXR1cyhyZXNwb25zZSl9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dCh0aGlzLmVycm9yKTtcbiAgICAgICAgICBpZiAodGhpcy5lcnJvci5kZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FcnJvclNlcnZpY2VcbiAgICAgICAgICAgICAgLm1hcEZpZWxkRXJyb3JzKHRoaXMuZXJyb3IuZGV0YWlscy5maWVsZF9lcnJvcnMsIHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXAsICd2YWxpZGF0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgKmFsbCogdmFsdWVzIG9mIGEgRm9ybUdyb3VwLCBpbmNsdWRpbmcgdGhvc2UgZm9yIGRpc2FibGVkIGZpZWxkcyAoaS5lLiBoaWRkZW4gb25lcyksIHJlcGxhY2luZyB0aGVcbiAgICogdmFsdWUgb2YgYW55IHRoYXQgYXJlIGhpZGRlbiBBTkQgaGF2ZSBgcmV0YWluX2hpZGRlbl92YWx1ZWAgc2V0IHRvIGB0cnVlYCBpbiB0aGUgY29ycmVzcG9uZGluZyBgQ2FzZUZpZWxkYCwgd2l0aFxuICAgKiB0aGUgKm9yaWdpbmFsKiB2YWx1ZSBoZWxkIGluIHRoZSBgQ2FzZUZpZWxkYCBvYmplY3QuXG4gICAqXG4gICAqIFRoaXMgaXMgYXMgcGVyIGRlc2lnbiBpbiBFVUktMzYyMiwgd2hlcmUgYW55IHVzZXItZHJpdmVuIHVwZGF0ZXMgdG8gaGlkZGVuIGZpZWxkcyB3aXRoIGByZXRhaW5faGlkZGVuX3ZhbHVlYCA9XG4gICAqIGB0cnVlYCBhcmUgaWdub3JlZCAodGh1cyByZXRhaW5pbmcgdGhlIHZhbHVlIGRpc3BsYXllZCBvcmlnaW5hbGx5KS5cbiAgICpcbiAgICogKiBGb3IgQ29tcGxleCBmaWVsZCB0eXBlcywgdGhlIHJlcGxhY2VtZW50IGFib3ZlIGlzIHBlcmZvcm1lZCByZWN1cnNpdmVseSBmb3IgYWxsIGhpZGRlbiBzdWItZmllbGRzIHdpdGhcbiAgICogYHJldGFpbl9oaWRkZW5fdmFsdWVgID0gYHRydWVgLlxuICAgKlxuICAgKiAqIEZvciBDb2xsZWN0aW9uIGZpZWxkIHR5cGVzLCBpbmNsdWRpbmcgY29sbGVjdGlvbnMgb2YgQ29tcGxleCBhbmQgRG9jdW1lbnQgZmllbGQgdHlwZXMsIHRoZSByZXBsYWNlbWVudCBpc1xuICAgKiBwZXJmb3JtZWQgZm9yIGFsbCBmaWVsZHMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqIHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlICpyYXcqIGZvcm0gdmFsdWUgZGF0YSAoYXMga2V5LXZhbHVlIHBhaXJzKSwgd2l0aCBhbnkgdmFsdWUgcmVwbGFjZW1lbnRzIGFzIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgcGFyZW50RmllbGQ/OiBDYXNlRmllbGQpOiBvYmplY3Qge1xuICAgIC8vIEdldCB0aGUgcmF3IGZvcm0gdmFsdWUgZGF0YSwgd2hpY2ggaW5jbHVkZXMgdGhlIHZhbHVlcyBvZiBhbnkgZGlzYWJsZWQgY29udHJvbHMsIGFzIGtleS12YWx1ZSBwYWlyc1xuICAgIGNvbnN0IHJhd0Zvcm1WYWx1ZURhdGEgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgIC8vIFBsYWNlIGFsbCBjYXNlIGZpZWxkcyBpbiBhIGxvb2t1cCBvYmplY3QsIHNvIHRoZXkgY2FuIGJlIHJldHJpZXZlZCBieSBpZFxuICAgIGNvbnN0IGNhc2VGaWVsZHNMb29rdXAgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2FzZUZpZWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY2FzZUZpZWxkc0xvb2t1cFtjYXNlRmllbGRzW2ldLmlkXSA9IGNhc2VGaWVsZHNbaV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZSBhbnkgZm9ybSB2YWx1ZSB3aXRoIHRoZSBvcmlnaW5hbCwgd2hlcmUgaXRzIENhc2VGaWVsZCBpcyBoaWRkZW4gQU5EIGhhcyB0aGUgcmV0YWluX2hpZGRlbl92YWx1ZSBmbGFnIHNldFxuICAgICAqIHRvIHRydWUuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgQ2FzZUZpZWxkJ3MgYGhpZGRlbmAgYXR0cmlidXRlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIGNoZWNrIHRoaXMgYXR0cmlidXRlIGluIHRoZSBwYXJlbnQgQ2FzZUZpZWxkIChpZlxuICAgICAqIG9uZSBleGlzdHMpLiBUaGlzIGlzIG9jY3VycmluZyAoYW5kIGlzIHBvc3NpYmx5IGEgYnVnKSB3aGVuIGEgQ2FzZUZpZWxkIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlLCBvciBhblxuICAgICAqIGl0ZW0gaW4gYSBDb2xsZWN0aW9uIHR5cGUuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUgd2l0aCByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSwgcGVyZm9ybSBhIHJlY3Vyc2l2ZSByZXBsYWNlbWVudCBmb3IgYWxsIChoaWRkZW4pXG4gICAgICogc3ViLWZpZWxkcyB3aXRoIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlLCB1c2luZyB0aGVpciBvcmlnaW5hbCBDYXNlRmllbGQgdmFsdWVzIChmcm9tIHRoZSBgZm9ybWF0dGVkX3ZhbHVlYFxuICAgICAqIGF0dHJpYnV0ZSkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb2xsZWN0aW9uIHR5cGUgd2l0aCByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSwgdGhlIGVudGlyZSBjb2xsZWN0aW9uIGlzIHJlcGxhY2VkIHdpdGggdGhlXG4gICAgICogb3JpZ2luYWwgZnJvbSBgZm9ybWF0dGVkX3ZhbHVlYC4gVGhpcyBhcHBsaWVzIHRvICphbGwqIHR5cGVzIG9mIENvbGxlY3Rpb25zLlxuICAgICAqL1xuICAgIE9iamVjdC5rZXlzKHJhd0Zvcm1WYWx1ZURhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY2FzZUZpZWxkOiBDYXNlRmllbGQgPSBjYXNlRmllbGRzTG9va3VwW2tleV07XG4gICAgICAvLyBJZiBjYXNlRmllbGQuaGlkZGVuIGlzIE5PVCB0cnV0aHkgYW5kIGFsc28gTk9UIGVxdWFsIHRvIGZhbHNlLCB0aGVuIGl0IG11c3QgYmUgbnVsbC91bmRlZmluZWQgKHJlbWVtYmVyIHRoYXRcbiAgICAgIC8vIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBlcXVhbCB0byAqbmVpdGhlciBmYWxzZSBub3IgdHJ1ZSopXG4gICAgICBpZiAoY2FzZUZpZWxkICYmIGNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlICYmXG4gICAgICAgIChjYXNlRmllbGQuaGlkZGVuIHx8IChjYXNlRmllbGQuaGlkZGVuICE9PSBmYWxzZSAmJiBwYXJlbnRGaWVsZCAmJiBwYXJlbnRGaWVsZC5oaWRkZW4pKSkge1xuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBjYXNlRmllbGQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHRvIHJlcGxhY2UgdGhlIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIGFzIG5lY2Vzc2FyeSwgcGFzc2luZyB0aGVcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCBpdHNlbGYgKHRoZSBzdWItZmllbGRzIGRvIG5vdCBjb250YWluIGFueSB2YWx1ZXMsIHNvIHRoZXNlIG5lZWQgdG8gYmUgb2J0YWluZWQgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIHBhcmVudClcbiAgICAgICAgICAgIC8vIFVwZGF0ZSByYXdGb3JtVmFsdWVEYXRhIGZvciB0aGlzIGZpZWxkXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBmb3JtIGdyb3VwIGFuZCBhZGRpbmcgY29udHJvbCBpbnRvIGl0IGluIGNhc2UgY2FzZUZpZWxkIGlzIG9mIGNvbXBsZXh0IHR5cGUgYW5kIGFuZCBwYXJ0IG9mIGZvcm1Hcm91cFxuICAgICAgICAgICAgY29uc3QgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZENvbnRyb2woaXRlbSwgbmV3IEZvcm1Db250cm9sKGZvcm1Hcm91cC5jb250cm9sc1trZXldLnZhbHVlW2l0ZW1dKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gdGhpcy5yZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKFxuICAgICAgICAgICAgICBmb3JtLCBjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2FzZUZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGVmYXVsdCBjYXNlIGFsc28gaGFuZGxlcyBjb2xsZWN0aW9ucyBvZiAqYWxsKiB0eXBlczsgdGhlIGVudGlyZSBjb2xsZWN0aW9uIGluIHJhd0Zvcm1WYWx1ZURhdGEgd2lsbCBiZVxuICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggdGhlIG9yaWdpbmFsIGZyb20gZm9ybWF0dGVkX3ZhbHVlXG4gICAgICAgICAgLy8gVXNlIHRoZSBDYXNlRmllbGQncyBleGlzdGluZyAqZm9ybWF0dGVkX3ZhbHVlKiBmcm9tIHRoZSBwYXJlbnQsIGlmIGF2YWlsYWJsZS4gKFRoaXMgaXMgbmVjZXNzYXJ5IGZvclxuICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzLCB3aG9zZSBzdWItZmllbGRzIGRvIG5vdCBob2xkIGFueSB2YWx1ZXMgaW4gdGhlIG1vZGVsLikgT3RoZXJ3aXNlLCB1c2UgZm9ybWF0dGVkX3ZhbHVlXG4gICAgICAgICAgLy8gZnJvbSB0aGUgQ2FzZUZpZWxkIGl0c2VsZi5cbiAgICAgICAgICBpZiAocGFyZW50RmllbGQgJiYgcGFyZW50RmllbGQuZm9ybWF0dGVkX3ZhbHVlKSB7XG4gICAgICAgICAgICByYXdGb3JtVmFsdWVEYXRhW2tleV0gPSBwYXJlbnRGaWVsZC5mb3JtYXR0ZWRfdmFsdWVbY2FzZUZpZWxkLmlkXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByYXdGb3JtVmFsdWVEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIG5vbi1hcnJheSB2YWx1ZSBvYmplY3RzIHdpdGggYG51bGxgIGZvciBhbnkgQ29tcGxleC10eXBlIGZpZWxkcyB3aG9zZSB2YWx1ZSBpcyBlZmZlY3RpdmVseSBlbXB0eSwgaS5lLlxuICAgKiBhbGwgaXRzIHN1Yi1maWVsZHMgYW5kIGRlc2NlbmRhbnRzIGFyZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBwcml2YXRlIHJlcGxhY2VFbXB0eUNvbXBsZXhGaWVsZFZhbHVlcyhkYXRhOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFba2V5XSkgJiYgdHlwZW9mIGRhdGFba2V5XSA9PT0gJ29iamVjdCcgJiYgIUZpZWxkc1V0aWxzLmNvbnRhaW5zTm9uRW1wdHlWYWx1ZXMoZGF0YVtrZXldKSkge1xuICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXR1cyhyZXNwb25zZTogb2JqZWN0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZSkgPyByZXNwb25zZVsnY2FsbGJhY2tfcmVzcG9uc2Vfc3RhdHVzJ10gOiByZXNwb25zZVsnZGVsZXRlX2RyYWZ0X3Jlc3BvbnNlX3N0YXR1cyddO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSAhPT0gJ0NBTExCQUNLX0NPTVBMRVRFRCc7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3RQYWdlU2hvd24oKTogV2l6YXJkUGFnZSB7XG4gICAgbGV0IGxhc3RQYWdlOiBXaXphcmRQYWdlO1xuICAgIHRoaXMud2l6YXJkLnJldmVyc2UoKS5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgaWYgKCFsYXN0UGFnZSAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgbGFzdFBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEFzc2lnbm1lbnRcbiAgICByZXR1cm4gbGFzdFBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZmlybWF0aW9uKHJlc3BvbnNlOiBvYmplY3QpOiBDb25maXJtYXRpb24ge1xuICAgIGlmIChyZXNwb25zZVsnYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlJ10pIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlybWF0aW9uKFxuICAgICAgICByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgcmVzcG9uc2VbJ2NhbGxiYWNrX3Jlc3BvbnNlX3N0YXR1cyddLFxuICAgICAgICByZXNwb25zZVsnYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlJ11bJ2NvbmZpcm1hdGlvbl9oZWFkZXInXSxcbiAgICAgICAgcmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddWydjb25maXJtYXRpb25fYm9keSddXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvcnRGaWVsZHNCeVNob3dTdW1tYXJ5Q29udGVudChmaWVsZHM6IENhc2VGaWVsZFtdKTogQ2FzZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLm9yZGVyU2VydmljZVxuICAgICAgLnNvcnQoZmllbGRzLCBDYXNlRWRpdFN1Ym1pdENvbXBvbmVudC5TSE9XX1NVTU1BUllfQ09OVEVOVF9DT01QQVJFX0ZVTkNUSU9OKVxuICAgICAgLmZpbHRlcihjZiA9PiBjZi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmdldENhc2VGaWVsZHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIWV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCI+XG4gIDwhLS0gRXZlbnQgdHJpZ2dlciBuYW1lIC0tPlxuICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj57eyBldmVudFRyaWdnZXIubmFtZX19PC9oMT5cblxuICA8IS0tQ2FzZSBJRCBvciBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImdldENhc2VUaXRsZSgpOyB0aGVuIHRpdGxlQmxvY2s7IGVsc2UgaWRCbG9ja1wiPjwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3RpdGxlQmxvY2s+XG4gICAgPGNjZC1tYXJrZG93biBbY29udGVudF09XCJnZXRDYXNlVGl0bGUoKSB8IGNjZENhc2VUaXRsZTogY29udGV4dEZpZWxkcyA6IGVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIj48L2NjZC1tYXJrZG93bj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNpZEJsb2NrPlxuICAgIDxoMiAqbmdJZj1cImdldENhc2VJZCgpXCIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+I3t7IGdldENhc2VJZCgpIHwgY2NkQ2FzZVJlZmVyZW5jZSB9fTwvaDI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBHZW5lcmljIGVycm9yIGhlYWRpbmcgYW5kIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHNwZWNpZmljIGNhbGxiYWNrIGVycm9ycyBvciB3YXJuaW5ncywgb3Igbm8gZXJyb3IgZGV0YWlscyAtLT5cbiAgPGRpdiAqbmdJZj1cImVycm9yICYmICghKGVycm9yLmNhbGxiYWNrRXJyb3JzIHx8IGVycm9yLmNhbGxiYWNrV2FybmluZ3MgfHwgZXJyb3IuZGV0YWlscykgJiYgIWVycm9yLm1lc3NhZ2UpXCIgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZWRpdC1jYXNlLWV2ZW50X2Vycm9yLXN1bW1hcnktaGVhZGluZ1wiIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWgxIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZWRpdC1jYXNlLWV2ZW50X2Vycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgU29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCIgaWQ9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1ib2R5XCI+XG4gICAgICA8cD5XZSdyZSB3b3JraW5nIHRvIGZpeCB0aGUgcHJvYmxlbS4gVHJ5IGFnYWluIHNob3J0bHkuPC9wPlxuICAgICAgPHA+PGEgaHJlZj1cImdldC1oZWxwXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Q29udGFjdCB1czwvYT4gaWYgeW91J3JlIHN0aWxsIGhhdmluZyBwcm9ibGVtcy48L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEV2ZW50IGVycm9yIGhlYWRpbmcgYW5kIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBlcnJvciBkZXRhaWxzIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgKGVycm9yLmRldGFpbHMgfHwgZXJyb3IubWVzc2FnZSlcIiBjbGFzcz1cImVycm9yLXN1bW1hcnlcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsbGVkYnk9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgIDxoMyBjbGFzcz1cImhlYWRpbmctaDMgZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICBUaGUgZXZlbnQgY291bGQgbm90IGJlIGNyZWF0ZWRcbiAgICA8L2gzPlxuICAgIDxwPnt7ZXJyb3IubWVzc2FnZX19PC9wPlxuICAgIDx1bCAqbmdJZj1cImVycm9yLmRldGFpbHM/LmZpZWxkX2Vycm9yc1wiIGNsYXNzPVwiZXJyb3Itc3VtbWFyeS1saXN0XCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGZpZWxkRXJyb3Igb2YgZXJyb3IuZGV0YWlscy5maWVsZF9lcnJvcnNcIiBjbGFzcz1cImNjZC1lcnJvci1zdW1tYXJ5LWxpXCI+e3tmaWVsZEVycm9yLm1lc3NhZ2V9fTwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG4gIDxjY2QtY2FsbGJhY2stZXJyb3JzIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tFcnJvcnNDb250ZXh0KT1cImNhbGxiYWNrRXJyb3JzTm90aWZ5KCRldmVudClcIj48L2NjZC1jYWxsYmFjay1lcnJvcnM+XG5cbiAgPGZvcm0gY2xhc3M9XCJjaGVjay15b3VyLWFuc3dlcnNcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtXCIgKHN1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja1lvdXJBbnN3ZXJGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKVwiPlxuXG4gICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+Q2hlY2sgeW91ciBhbnN3ZXJzPC9oMj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiPkNoZWNrIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyBjYXJlZnVsbHkuPC9zcGFuPlxuXG4gICAgICA8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCIgYXJpYS1kZXNjcmliZWRieT1cImNoZWNrIHlvdXIgYW5zd2VycyB0YWJsZVwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgdGhpcy53aXphcmQucGFnZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaG93bihwYWdlKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcGFnZVxuICAgICAgICAgICAgfCBjY2RQYWdlRmllbGRzOiBlZGl0Rm9ybVxuICAgICAgICAgICAgfCBjY2RSZWFkRmllbGRzRmlsdGVyOiBmYWxzZSA6dW5kZWZpbmVkIDp0cnVlIDogZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVxuICAgICAgICAgICAgfCBjY2RDWUFQYWdlTGFiZWxGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNob3dGaWVsZEluQ1lBKGZpZWxkKVwiPlxuICAgICAgICAgICAgICAgIDx0ciBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbaGlkZGVuXT1cImZpZWxkLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc0xhYmVsKGZpZWxkKVwiIGNsYXNzPVwidmFsaWduLXRvcCBjYXNlLWZpZWxkLWxhYmVsXCI+PHNwYW4gY2xhc3M9XCJ0ZXh0LTE2XCI+e3tmaWVsZC5sYWJlbH19PC9zcGFuPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmb3JtLWNlbGwgY2FzZS1maWVsZC1jb250ZW50XCIgW2F0dHIuY29sc3Bhbl09XCJpc0xhYmVsKGZpZWxkKSA/ICcyJyA6ICcxJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWRcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbdG9wTGV2ZWxGb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjb250ZXh0XT1cInBhbGV0dGVDb250ZXh0XCIgW2Nhc2VGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmFsaWduLXRvcCBjaGVjay15b3VyLWFuc3dlcnNfX2NoYW5nZSBjYXNlLWZpZWxkLWNoYW5nZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImlzQ2hhbmdlQWxsb3dlZChmaWVsZClcIiAoY2xpY2spPVwibmF2aWdhdGVUb1BhZ2UocGFnZS5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj48c3BhbiBjbGFzcz1cInRleHQtMTZcIiBhdHRyLmFyaWEtbGFiZWw9XCJDaGFuZ2Uge3sgZmllbGQubGFiZWwgfX1cIj5DaGFuZ2U8L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpXCI+XG5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInN1bW1hcnktZmllbGRzXCIgYXJpYS1kZXNjcmliZWRieT1cInN1bW1hcnkgZmllbGRzIHRhYmxlXCI+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLnNob3dTdW1tYXJ5RmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIiEoZmllbGQgfCBjY2RJc0NvbXBvdW5kKVwiPlxuICAgICAgICAgICAgICAgIDx0ciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBpZD1cInN1bW1hcnktZmllbGQtbGFiZWxcIj57e2ZpZWxkLmxhYmVsfX08L3RoPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZm9ybS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZCBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCI+PC9jY2QtZmllbGQtcmVhZD5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCIgY2xhc3M9XCJjb21wb3VuZC1maWVsZFwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxuICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWQgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjYXNlRmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V2ZW50Tm90ZXMoKVwiPlxuICAgICAgPGZpZWxkc2V0IGlkPVwiZmllbGRzZXQtZXZlbnRcIiBmb3JtR3JvdXBOYW1lPVwiZXZlbnRcIiAqbmdJZj1cInByb2ZpbGUgJiYgIWlzU29saWNpdG9yKClcIj5cbiAgICAgICAgPGxlZ2VuZCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9sZWdlbmQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItc3VtbWFyeVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxuICAgICAgICAgICAgRXZlbnQgc3VtbWFyeSAob3B0aW9uYWwpXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPkEgZmV3IHdvcmRzIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGV2ZW50Ljwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZmllbGQtdHJpZ2dlci1zdW1tYXJ5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCIgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiIG1heGxlbmd0aD1cIjEwMjRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmaWVsZC10cmlnZ2VyLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2NTUzNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmb3JtLWdyb3VwLXJlbGF0ZWRcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWhhc1ByZXZpb3VzKCkgfHwgaXNTdWJtaXR0aW5nXCIgKGNsaWNrKT1cInByZXZpb3VzKClcIj5QcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBjbGFzcz1cImJ1dHRvblwiPnt7dHJpZ2dlclRleHR9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiY2FuY2VsXCI+PGEgKGNsaWNrKT1cImNhbmNlbCgpXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIj57e2dldENhbmNlbFRleHQoKX19PC9hPjwvcD5cbiAgPC9mb3JtPlxuPC9kaXY+XG48Y2NkLWNhc2UtZXZlbnQtY29tcGxldGlvbiAqbmdJZj1cImV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCJcbiAgW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJldmVudENvbXBsZXRpb25QYXJhbXNcIlxuICAoZXZlbnRDYW5CZUNvbXBsZXRlZCk9XCJvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoJGV2ZW50KVwiPlxuPC9jY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uPlxuIl19