vcomply-workflow-engine 3.5.3 → 3.5.4

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 (645) hide show
  1. package/esm2022/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +897 -0
  2. package/esm2022/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.mjs +204 -0
  3. package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +1569 -0
  4. package/esm2022/lib/add-multiple-risk/add-multiple-risk.component.mjs +774 -0
  5. package/esm2022/lib/configurations.mjs +6 -0
  6. package/esm2022/lib/confirmation-alert/confirmation-alert.component.mjs +28 -0
  7. package/esm2022/lib/constants/link-responsibility.constants.mjs +9 -0
  8. package/esm2022/lib/constants/time.constants.mjs +3 -0
  9. package/esm2022/lib/create-documents/create-documents.component.mjs +145 -0
  10. package/esm2022/lib/formgroup/cs-checkbox/cs-checkbox.component.mjs +36 -0
  11. package/esm2022/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.mjs +35 -0
  12. package/esm2022/lib/formgroup/cs-radio/cs-radio.component.mjs +34 -0
  13. package/esm2022/lib/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
  14. package/esm2022/lib/formgroup/cs-select/cs-select.component.mjs +95 -0
  15. package/esm2022/lib/formgroup/cs-switch/cs-switch.component.mjs +31 -0
  16. package/esm2022/lib/formgroup/formgroup.module.mjs +56 -0
  17. package/esm2022/lib/formgroup/pipes/pascal.pipe.mjs +19 -0
  18. package/esm2022/lib/formgroup/select/cs-option/cs-option.component.mjs +42 -0
  19. package/esm2022/lib/formgroup/select/cs-select/cs-select.component.mjs +106 -0
  20. package/esm2022/lib/formgroup/select/select.module.mjs +21 -0
  21. package/esm2022/lib/formgroup/select/select.service.mjs +48 -0
  22. package/esm2022/lib/interfaces/categoryList.mjs +2 -0
  23. package/esm2022/lib/interfaces/confirmation-alert.mjs +2 -0
  24. package/esm2022/lib/interfaces/issue-data.mjs +2 -0
  25. package/esm2022/lib/log-an-issue/log-an-issue.component.mjs +1212 -0
  26. package/esm2022/lib/more-option/more-option.component.mjs +790 -0
  27. package/esm2022/lib/pipes/data-type.pipe.mjs +16 -0
  28. package/esm2022/lib/pipes/dom-sanitizer.pipe.mjs +24 -0
  29. package/esm2022/lib/pipes/filter.pipe.mjs +24 -0
  30. package/esm2022/lib/pipes/is-read-more.pipe.mjs +21 -0
  31. package/esm2022/lib/pipes/list-mapper.pipe.mjs +21 -0
  32. package/esm2022/lib/pipes/pipes.module.mjs +67 -0
  33. package/esm2022/lib/pipes/search.pipe.mjs +37 -0
  34. package/esm2022/lib/pipes/space-breaker.pipe.mjs +21 -0
  35. package/esm2022/lib/pipes/uncategorized-filter.pipe.mjs +21 -0
  36. package/esm2022/lib/pipes/user-filter.pipe.mjs +30 -0
  37. package/esm2022/lib/services/bulk-upload.service.mjs +44 -0
  38. package/esm2022/lib/services/common.service.mjs +41 -0
  39. package/esm2022/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.mjs +265 -0
  40. package/esm2022/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.mjs +73 -0
  41. package/esm2022/lib/sharedComponents/approval-workflow/approval-workflow.component.mjs +83 -0
  42. package/esm2022/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.mjs +347 -0
  43. package/esm2022/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.mjs +75 -0
  44. package/esm2022/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.mjs +33 -0
  45. package/esm2022/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.mjs +124 -0
  46. package/esm2022/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.mjs +154 -0
  47. package/esm2022/lib/sharedComponents/assessment-editor/components/build/build.module.mjs +111 -0
  48. package/esm2022/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.mjs +37 -0
  49. package/esm2022/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.mjs +74 -0
  50. package/esm2022/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.mjs +18 -0
  51. package/esm2022/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.mjs +37 -0
  52. package/esm2022/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.mjs +15 -0
  53. package/esm2022/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.mjs +14 -0
  54. package/esm2022/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.mjs +14 -0
  55. package/esm2022/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.mjs +37 -0
  56. package/esm2022/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.mjs +14 -0
  57. package/esm2022/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.mjs +14 -0
  58. package/esm2022/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.mjs +14 -0
  59. package/esm2022/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.mjs +28 -0
  60. package/esm2022/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.mjs +14 -0
  61. package/esm2022/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.mjs +56 -0
  62. package/esm2022/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.mjs +14 -0
  63. package/esm2022/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.mjs +179 -0
  64. package/esm2022/lib/sharedComponents/assessment-editor/components/errorInterface/error.mjs +2 -0
  65. package/esm2022/lib/sharedComponents/assessment-editor/components/errorInterface/question.mjs +2 -0
  66. package/esm2022/lib/sharedComponents/assessment-editor/components/errorInterface/validateStructure.mjs +2 -0
  67. package/esm2022/lib/sharedComponents/assessment-editor/components/logic/logic.component.mjs +104 -0
  68. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.mjs +26 -0
  69. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.mjs +14 -0
  70. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.mjs +56 -0
  71. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.mjs +33 -0
  72. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.mjs +17 -0
  73. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.mjs +26 -0
  74. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.mjs +16 -0
  75. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.mjs +101 -0
  76. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.mjs +16 -0
  77. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.mjs +24 -0
  78. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.mjs +14 -0
  79. package/esm2022/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.mjs +16 -0
  80. package/esm2022/lib/sharedComponents/assessment-editor/components/move/move.component.mjs +103 -0
  81. package/esm2022/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.mjs +23 -0
  82. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.mjs +22 -0
  83. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.mjs +27 -0
  84. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.mjs +21 -0
  85. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.mjs +17 -0
  86. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.mjs +16 -0
  87. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.mjs +21 -0
  88. package/esm2022/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.mjs +16 -0
  89. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.mjs +28 -0
  90. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.mjs +14 -0
  91. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.mjs +49 -0
  92. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.mjs +30 -0
  93. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.mjs +21 -0
  94. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.mjs +17 -0
  95. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.mjs +31 -0
  96. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.mjs +28 -0
  97. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.mjs +28 -0
  98. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.mjs +16 -0
  99. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.mjs +16 -0
  100. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.mjs +16 -0
  101. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.mjs +14 -0
  102. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.mjs +16 -0
  103. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.mjs +78 -0
  104. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/preview.module.mjs +152 -0
  105. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.mjs +14 -0
  106. package/esm2022/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.mjs +14 -0
  107. package/esm2022/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.mjs +19 -0
  108. package/esm2022/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.mjs +252 -0
  109. package/esm2022/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.mjs +35 -0
  110. package/esm2022/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.mjs +61 -0
  111. package/esm2022/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.mjs +163 -0
  112. package/esm2022/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.mjs +118 -0
  113. package/esm2022/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.mjs +23 -0
  114. package/esm2022/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.mjs +97 -0
  115. package/esm2022/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.mjs +493 -0
  116. package/esm2022/lib/sharedComponents/assessment-editor/create-assessment.module.mjs +154 -0
  117. package/esm2022/lib/sharedComponents/assessment-editor/services/editor.service.mjs +635 -0
  118. package/esm2022/lib/sharedComponents/assessment-editor/services/result-criteria.service.mjs +48 -0
  119. package/esm2022/lib/sharedComponents/assessment-editor/services/validator.service.mjs +546 -0
  120. package/esm2022/lib/sharedComponents/assessment-list/assessment-list-loader/assessment-list-loader.component.mjs +15 -0
  121. package/esm2022/lib/sharedComponents/assessment-list/assessment-list-sub-loader/assessment-list-sub-loader.component.mjs +15 -0
  122. package/esm2022/lib/sharedComponents/assessment-list/assessment-list.component.mjs +207 -0
  123. package/esm2022/lib/sharedComponents/assessment-list/service/assessment.interface.mjs +2 -0
  124. package/esm2022/lib/sharedComponents/assessment-list/service/assessment.service.mjs +31 -0
  125. package/esm2022/lib/sharedComponents/assessment-preview/assessment-preview.module.mjs +113 -0
  126. package/esm2022/lib/sharedComponents/assessment-preview/checkbox-question/checkbox-question.component.mjs +33 -0
  127. package/esm2022/lib/sharedComponents/assessment-preview/date-time/date-time.component.mjs +53 -0
  128. package/esm2022/lib/sharedComponents/assessment-preview/description-preview/description-preview.component.mjs +24 -0
  129. package/esm2022/lib/sharedComponents/assessment-preview/device/device.component.mjs +21 -0
  130. package/esm2022/lib/sharedComponents/assessment-preview/file-upload/file-upload.component.mjs +22 -0
  131. package/esm2022/lib/sharedComponents/assessment-preview/page-header/page-header.component.mjs +21 -0
  132. package/esm2022/lib/sharedComponents/assessment-preview/pipes/get-section-order.pipe.mjs +24 -0
  133. package/esm2022/lib/sharedComponents/assessment-preview/preview/preview.component.mjs +62 -0
  134. package/esm2022/lib/sharedComponents/assessment-preview/preview-container/preview-container.component.mjs +22 -0
  135. package/esm2022/lib/sharedComponents/assessment-preview/quick-settings/quick-settings.component.mjs +22 -0
  136. package/esm2022/lib/sharedComponents/assessment-preview/radio-question/radio-question.component.mjs +33 -0
  137. package/esm2022/lib/sharedComponents/assessment-preview/section-details/section-details.component.mjs +20 -0
  138. package/esm2022/lib/sharedComponents/assessment-preview/select-question/select-question.component.mjs +35 -0
  139. package/esm2022/lib/sharedComponents/assessment-preview/single-textbox/single-textbox.component.mjs +21 -0
  140. package/esm2022/lib/sharedComponents/assessment-preview/welcome/welcome.component.mjs +17 -0
  141. package/esm2022/lib/sharedComponents/audit-category-list/audit-category-list.component.mjs +61 -0
  142. package/esm2022/lib/sharedComponents/audit-category-list/audit-category.model.mjs +2 -0
  143. package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +72 -0
  144. package/esm2022/lib/sharedComponents/bulk-view/bulk-view.component.mjs +75 -0
  145. package/esm2022/lib/sharedComponents/category-list/category-list.component.mjs +84 -0
  146. package/esm2022/lib/sharedComponents/category-multiselect/category-multi-select.component.mjs +166 -0
  147. package/esm2022/lib/sharedComponents/checkbox-list/checkbox-list.component.mjs +92 -0
  148. package/esm2022/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.mjs +315 -0
  149. package/esm2022/lib/sharedComponents/checkpoint/checkpoints-list/checkpoints-list.component.mjs +25 -0
  150. package/esm2022/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.mjs +149 -0
  151. package/esm2022/lib/sharedComponents/checkpoint-floating-bar/checkpoint-floating-bar.component.mjs +48 -0
  152. package/esm2022/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.mjs +77 -0
  153. package/esm2022/lib/sharedComponents/checkpoint-policy/checkpoints-policy-list/checkpoints-policy-list.component.mjs +14 -0
  154. package/esm2022/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.mjs +197 -0
  155. package/esm2022/lib/sharedComponents/directive/autofocus.directive.mjs +22 -0
  156. package/esm2022/lib/sharedComponents/directive/conditional-focus.directive.mjs +35 -0
  157. package/esm2022/lib/sharedComponents/directive/drag-drop.directive.mjs +52 -0
  158. package/esm2022/lib/sharedComponents/directive/input-trim.directive.mjs +21 -0
  159. package/esm2022/lib/sharedComponents/directive/scroll-in-view.directive.mjs +35 -0
  160. package/esm2022/lib/sharedComponents/document-section/document-section.component.mjs +184 -0
  161. package/esm2022/lib/sharedComponents/floating-bar/floating-bar.component.mjs +122 -0
  162. package/esm2022/lib/sharedComponents/floating-bar/floating-bar.module.mjs +20 -0
  163. package/esm2022/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +308 -0
  164. package/esm2022/lib/sharedComponents/framework-list/framework-integration-interfaces.mjs +2 -0
  165. package/esm2022/lib/sharedComponents/framework-list/framework-list-table/framework-list-table.component.mjs +38 -0
  166. package/esm2022/lib/sharedComponents/framework-list/framework-list.component.mjs +429 -0
  167. package/esm2022/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.mjs +43 -0
  168. package/esm2022/lib/sharedComponents/framework-list/framework-table-loader/framework-table-loader.component.mjs +15 -0
  169. package/esm2022/lib/sharedComponents/framework-list/parent-table/parent-table.component.mjs +95 -0
  170. package/esm2022/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +297 -0
  171. package/esm2022/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +218 -0
  172. package/esm2022/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.mjs +36 -0
  173. package/esm2022/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +303 -0
  174. package/esm2022/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +152 -0
  175. package/esm2022/lib/sharedComponents/frequency/frequency-due-date/due-date.contant.mjs +21 -0
  176. package/esm2022/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.mjs +83 -0
  177. package/esm2022/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +199 -0
  178. package/esm2022/lib/sharedComponents/frequency/frequency-lifecycle/lifecycl.constant.mjs +12 -0
  179. package/esm2022/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +223 -0
  180. package/esm2022/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.mjs +170 -0
  181. package/esm2022/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +189 -0
  182. package/esm2022/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +75 -0
  183. package/esm2022/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +214 -0
  184. package/esm2022/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.mjs +36 -0
  185. package/esm2022/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +253 -0
  186. package/esm2022/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.mjs +213 -0
  187. package/esm2022/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +133 -0
  188. package/esm2022/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +200 -0
  189. package/esm2022/lib/sharedComponents/frequency/frequency.service.mjs +573 -0
  190. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +300 -0
  191. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +216 -0
  192. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.mjs +29 -0
  193. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.mjs +296 -0
  194. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.mjs +110 -0
  195. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +227 -0
  196. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +213 -0
  197. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +212 -0
  198. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.mjs +33 -0
  199. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.mjs +128 -0
  200. package/esm2022/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.mjs +197 -0
  201. package/esm2022/lib/sharedComponents/group-users-list/group-users-list.component.mjs +259 -0
  202. package/esm2022/lib/sharedComponents/link-program/link-program/link-program.component.mjs +472 -0
  203. package/esm2022/lib/sharedComponents/link-program/link-program/program-list-model.mjs +2 -0
  204. package/esm2022/lib/sharedComponents/link-program/program-integration-interfaces.mjs +2 -0
  205. package/esm2022/lib/sharedComponents/link-program/restapi.service.mjs +149 -0
  206. package/esm2022/lib/sharedComponents/link-program/tooltip-validation.pipe.mjs +28 -0
  207. package/esm2022/lib/sharedComponents/link-responsibility/link-responsibility.component.mjs +221 -0
  208. package/esm2022/lib/sharedComponents/list-loader/list-loader.component.mjs +15 -0
  209. package/esm2022/lib/sharedComponents/list-loader/list-loader.module.mjs +18 -0
  210. package/esm2022/lib/sharedComponents/no-data/no-data.component.mjs +36 -0
  211. package/esm2022/lib/sharedComponents/no-data/no-data.module.mjs +18 -0
  212. package/esm2022/lib/sharedComponents/owner-list/owner-list.component.mjs +176 -0
  213. package/esm2022/lib/sharedComponents/pipes/array-filter.pipe.mjs +18 -0
  214. package/esm2022/lib/sharedComponents/pipes/filterPipe.mjs +30 -0
  215. package/esm2022/lib/sharedComponents/pipes/rcTreeToolTip.pipe.mjs +26 -0
  216. package/esm2022/lib/sharedComponents/pipes/short-merge.pipe.mjs +24 -0
  217. package/esm2022/lib/sharedComponents/pipes/spaceTrim.pipe.mjs +18 -0
  218. package/esm2022/lib/sharedComponents/pipes/within-data.pipe.mjs +21 -0
  219. package/esm2022/lib/sharedComponents/policy-access/policy-access.component.mjs +88 -0
  220. package/esm2022/lib/sharedComponents/program-listing/program-list-model.mjs +2 -0
  221. package/esm2022/lib/sharedComponents/program-listing/program-listing.component.mjs +739 -0
  222. package/esm2022/lib/sharedComponents/radio-list/radio-list.component.mjs +82 -0
  223. package/esm2022/lib/sharedComponents/radio-list-with-pagination/link-treatment-loader/link-treatment-loader.component.mjs +14 -0
  224. package/esm2022/lib/sharedComponents/radio-list-with-pagination/radio-list.component.mjs +128 -0
  225. package/esm2022/lib/sharedComponents/responsibility-centers-list/rc-list.module.mjs +40 -0
  226. package/esm2022/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.mjs +125 -0
  227. package/esm2022/lib/sharedComponents/responsibility-risk-selector/responsibility-risk-selector.component.mjs +81 -0
  228. package/esm2022/lib/sharedComponents/review-frequency/review-frequency.component.mjs +44 -0
  229. package/esm2022/lib/sharedComponents/risk-classification/risk-classification.component.mjs +102 -0
  230. package/esm2022/lib/sharedComponents/roles-list/roles-list.component.mjs +30 -0
  231. package/esm2022/lib/sharedComponents/select-approvers/select-approvers.component.mjs +78 -0
  232. package/esm2022/lib/sharedComponents/table-card-loader/table-card-loader.component.mjs +15 -0
  233. package/esm2022/lib/sharedComponents/users-radio-list/users-radio-list.component.mjs +83 -0
  234. package/esm2022/lib/sharedComponents/v-loader/loader/loader.component.mjs +21 -0
  235. package/esm2022/lib/sharedComponents/v-loader/loader-inline/loader-inline.component.mjs +21 -0
  236. package/esm2022/lib/sharedComponents/v-loader/v-loader.module.mjs +19 -0
  237. package/esm2022/lib/ui-kit/action-dialog/action-dialog.module.mjs +21 -0
  238. package/esm2022/lib/ui-kit/action-dialog/active/active.component.mjs +32 -0
  239. package/esm2022/lib/ui-kit/action-dialog/deactivate/deactivate.component.mjs +33 -0
  240. package/esm2022/lib/ui-kit/action-dialog/delete/delete.component.mjs +26 -0
  241. package/esm2022/lib/ui-kit/action-dialog/duplicate/duplicate.component.mjs +28 -0
  242. package/esm2022/lib/ui-kit/click-outside/click-outside.directive.mjs +29 -0
  243. package/esm2022/lib/ui-kit/click-outside/click-outside.module.mjs +22 -0
  244. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +3 -0
  245. package/esm2022/lib/ui-kit/dialog/dialog-injector.mjs +14 -0
  246. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -0
  247. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +88 -0
  248. package/esm2022/lib/ui-kit/dialog/dialog.module.mjs +20 -0
  249. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +58 -0
  250. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +16 -0
  251. package/esm2022/lib/ui-kit/directive/directive.module.mjs +24 -0
  252. package/esm2022/lib/ui-kit/directive/stop-propagation.directive.mjs +20 -0
  253. package/esm2022/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.mjs +15 -0
  254. package/esm2022/lib/ui-kit/editor-loader/editor-loader.module.mjs +22 -0
  255. package/esm2022/lib/ui-kit/format-html.pipe.mjs +20 -0
  256. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +29 -0
  257. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +31 -0
  258. package/esm2022/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.mjs +35 -0
  259. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +30 -0
  260. package/esm2022/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
  261. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +100 -0
  262. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +32 -0
  263. package/esm2022/lib/ui-kit/formgroup/formgroup.module.mjs +60 -0
  264. package/esm2022/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -0
  265. package/esm2022/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -0
  266. package/esm2022/lib/ui-kit/line-loader/line-loader.component.mjs +15 -0
  267. package/esm2022/lib/ui-kit/line-loader/line-loader.module.mjs +18 -0
  268. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +45 -0
  269. package/esm2022/lib/ui-kit/no-data/no-data.module.mjs +18 -0
  270. package/esm2022/lib/ui-kit/pagination/pagination/pagination.component.mjs +116 -0
  271. package/esm2022/lib/ui-kit/pagination/pagination.module.mjs +28 -0
  272. package/esm2022/lib/ui-kit/popover/popover-event.directive.mjs +28 -0
  273. package/esm2022/lib/ui-kit/popover/popover-longpress.directive.mjs +44 -0
  274. package/esm2022/lib/ui-kit/popover/popover.component.mjs +138 -0
  275. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +97 -0
  276. package/esm2022/lib/ui-kit/popover/popover.module.mjs +23 -0
  277. package/esm2022/lib/ui-kit/popover/popover.service.mjs +15 -0
  278. package/esm2022/lib/ui-kit/popover-hover/popover-hover.component.mjs +109 -0
  279. package/esm2022/lib/ui-kit/popover-hover/popover-hover.directive.mjs +34 -0
  280. package/esm2022/lib/ui-kit/popover-hover/popover-hover.module.mjs +31 -0
  281. package/esm2022/lib/ui-kit/popover-hover/popover-hover.service.mjs +14 -0
  282. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +43 -0
  283. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -0
  284. package/esm2022/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.component.mjs +43 -0
  285. package/esm2022/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.module.mjs +18 -0
  286. package/esm2022/lib/ui-kit/snack-bar/snack-bar.component.mjs +51 -0
  287. package/esm2022/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -0
  288. package/esm2022/lib/ui-kit/snack-bar/snack-bar.service.mjs +32 -0
  289. package/esm2022/lib/ui-kit/time-picker/constants/constant.mjs +5 -0
  290. package/esm2022/lib/ui-kit/time-picker/time-picker/time-picker.component.mjs +220 -0
  291. package/esm2022/lib/ui-kit/time-picker/time-picker.module.mjs +24 -0
  292. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +156 -0
  293. package/esm2022/lib/ui-kit/tooltip/tooltip.module.mjs +18 -0
  294. package/esm2022/lib/workflow/grc-object/grc-object-container/grc-object-container.component.mjs +831 -0
  295. package/esm2022/lib/workflow/grc-object/grc-object.module.mjs +64 -0
  296. package/esm2022/lib/workflow/shared/components/attributes/attributes-checkbox/attributes-checkbox.component.mjs +95 -0
  297. package/esm2022/lib/workflow/shared/components/attributes/attributes-dropdown/attributes-dropdown.component.mjs +110 -0
  298. package/esm2022/lib/workflow/shared/components/attributes/attributes-text-box/attributes-text-box.component.mjs +118 -0
  299. package/esm2022/lib/workflow/shared/components/attributes/attributes.component.mjs +100 -0
  300. package/esm2022/lib/workflow/shared/components/attributes/date-picker/date-picker.component.mjs +116 -0
  301. package/esm2022/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +216 -0
  302. package/esm2022/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.mjs +119 -0
  303. package/esm2022/lib/workflow/shared/components/grc-object-list/grc-object-list.component.mjs +198 -0
  304. package/esm2022/lib/workflow/shared/components/grc-responsibility-listing/grc-responsibility-listing.component.mjs +202 -0
  305. package/esm2022/lib/workflow/shared/components/grc-risk-listing/grc-risk-listing.component.mjs +191 -0
  306. package/esm2022/lib/workflow/shared/components/grc-sub-category-listing/grc-sub-category-listing.component.mjs +86 -0
  307. package/esm2022/lib/workflow/shared/components/list-popup/list-popup.component.mjs +209 -0
  308. package/esm2022/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.mjs +411 -0
  309. package/esm2022/lib/workflow/shared/components/risk-category-risk-listing/risk-category-risk-listing.component.mjs +241 -0
  310. package/esm2022/lib/workflow/shared/components/table-card/table-card.component.mjs +32 -0
  311. package/esm2022/lib/workflow/shared/components/text-field/text-field.component.mjs +143 -0
  312. package/esm2022/lib/workflow/shared/components/text-field-icon/text-field-icon.component.mjs +56 -0
  313. package/esm2022/lib/workflow/shared/constants/cdn-link.constant.mjs +11 -0
  314. package/esm2022/lib/workflow/shared/constants/field-text.constant.mjs +17 -0
  315. package/esm2022/lib/workflow/shared/constants/grcObject.constant.mjs +88 -0
  316. package/esm2022/lib/workflow/shared/constants/link-responsibility.constant.mjs +19 -0
  317. package/esm2022/lib/workflow/shared/constants/message.contstant.mjs +5 -0
  318. package/esm2022/lib/workflow/shared/constants/pagination-limits.constant.mjs +6 -0
  319. package/esm2022/lib/workflow/shared/constants/svg-link.constant.mjs +4 -0
  320. package/esm2022/lib/workflow/shared/constants/validation-message.constant.mjs +8 -0
  321. package/esm2022/lib/workflow/shared/interfaces/add-grc.mjs +2 -0
  322. package/esm2022/lib/workflow/shared/services/grc.service.mjs +310 -0
  323. package/esm2022/lib/workflow/shared/workflow-pipes/get-selected-value.pipe.mjs +30 -0
  324. package/esm2022/lib/workflow/shared/workflow-pipes/is-attributes-valid.pipe.mjs +48 -0
  325. package/esm2022/lib/workflow/shared/workflow-pipes/unique-responsibilities.pipe.mjs +24 -0
  326. package/esm2022/lib/workflow/shared/workflow-pipes/workflow-pipes.module.mjs +32 -0
  327. package/esm2022/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +668 -0
  328. package/esm2022/lib/workflow-assessment/workflow-assessment.component.mjs +254 -0
  329. package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +3913 -0
  330. package/esm2022/lib/workflow-engine-container/workflow-engine-container.component.mjs +734 -0
  331. package/esm2022/lib/workflow-engine.module.mjs +467 -0
  332. package/esm2022/lib/workflow-engine.service.mjs +14 -0
  333. package/esm2022/lib/workflow-interfaces/create-policy-form.mjs +2 -0
  334. package/esm2022/lib/workflow-pagination/workflow-pagination.component.mjs +116 -0
  335. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +1875 -0
  336. package/esm2022/lib/workflow-program/constants.mjs +51 -0
  337. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/assessment-loader/assessment-loader.component.mjs +15 -0
  338. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.mjs +292 -0
  339. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/assessment-sub-loader/assessment-sub-loader.component.mjs +15 -0
  340. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/assessment.service.mjs +43 -0
  341. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/selected-assessment.pipe.mjs +22 -0
  342. package/esm2022/lib/workflow-program/create-program-ui/assessment-picker/workflow-pagination/workflow-pagination.component.mjs +116 -0
  343. package/esm2022/lib/workflow-program/create-program-ui/checkbox/checkbox.component.mjs +39 -0
  344. package/esm2022/lib/workflow-program/create-program-ui/create-program-ui.module.mjs +194 -0
  345. package/esm2022/lib/workflow-program/create-program-ui/cs-switch/cs-switch.component.mjs +44 -0
  346. package/esm2022/lib/workflow-program/create-program-ui/custom-field/custom-field.component.mjs +82 -0
  347. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.mjs +267 -0
  348. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/framework.service.mjs +44 -0
  349. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/loader/loader.component.mjs +15 -0
  350. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/pipes/category-all-select.pipe.mjs +23 -0
  351. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/pipes/search.pipe.mjs +23 -0
  352. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.mjs +26 -0
  353. package/esm2022/lib/workflow-program/create-program-ui/define-framework-listing/pipes/tooltip-message.pipe.mjs +68 -0
  354. package/esm2022/lib/workflow-program/create-program-ui/directives/input-trim.directive.mjs +21 -0
  355. package/esm2022/lib/workflow-program/create-program-ui/file-pill/file-pill.component.mjs +27 -0
  356. package/esm2022/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.mjs +106 -0
  357. package/esm2022/lib/workflow-program/create-program-ui/form-field/form-field.component.mjs +16 -0
  358. package/esm2022/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.mjs +30 -0
  359. package/esm2022/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.mjs +166 -0
  360. package/esm2022/lib/workflow-program/create-program-ui/pagination/pagination.module.mjs +28 -0
  361. package/esm2022/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.mjs +16 -0
  362. package/esm2022/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.mjs +27 -0
  363. package/esm2022/lib/workflow-program/create-program-ui/pipes/filter.pipe.mjs +30 -0
  364. package/esm2022/lib/workflow-program/create-program-ui/pipes/list-to-id.pipe.mjs +16 -0
  365. package/esm2022/lib/workflow-program/create-program-ui/pipes/pager.pipe.mjs +21 -0
  366. package/esm2022/lib/workflow-program/create-program-ui/pipes/ref-disconnect.pipe.mjs +17 -0
  367. package/esm2022/lib/workflow-program/create-program-ui/pipes/search.pipe.mjs +23 -0
  368. package/esm2022/lib/workflow-program/create-program-ui/role-list/loader/loader.component.mjs +15 -0
  369. package/esm2022/lib/workflow-program/create-program-ui/role-list/role-list.component.mjs +240 -0
  370. package/esm2022/lib/workflow-program/create-program-ui/tab-selector/tab-selector.component.mjs +43 -0
  371. package/esm2022/lib/workflow-program/create-program-ui/tick-mark/tick-mark.component.mjs +15 -0
  372. package/esm2022/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +434 -0
  373. package/esm2022/lib/workflow-program/workflow-program.component.mjs +1550 -0
  374. package/esm2022/lib/workflow-risk/workflow-risk.component.mjs +1642 -0
  375. package/esm2022/lib/workflow-services/add-risk.service.mjs +150 -0
  376. package/esm2022/lib/workflow-services/assessment.service.mjs +117 -0
  377. package/esm2022/lib/workflow-services/auth.service.mjs +229 -0
  378. package/esm2022/lib/workflow-services/frequency.service.mjs +173 -0
  379. package/esm2022/lib/workflow-services/log-issue.service.mjs +360 -0
  380. package/esm2022/lib/workflow-services/policy.service.mjs +163 -0
  381. package/esm2022/lib/workflow-services/programs.service.mjs +319 -0
  382. package/esm2022/lib/workflow-services/responsibility.service.mjs +293 -0
  383. package/esm2022/lib/workflow-services/token-decoder.service.mjs +38 -0
  384. package/esm2022/lib/workflow-services/ui-kit.service.mjs +17 -0
  385. package/esm2022/lib/workflow-survey-form/workflow-survey-form.component.mjs +26 -0
  386. package/esm2022/public-api.mjs +8 -0
  387. package/esm2022/vcomply-workflow-engine.mjs +5 -0
  388. package/fesm2022/vcomply-workflow-engine.mjs +44351 -0
  389. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -0
  390. package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts +1 -1
  391. package/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.d.ts +1 -1
  392. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +1 -1
  393. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +1 -1
  394. package/lib/confirmation-alert/confirmation-alert.component.d.ts +1 -1
  395. package/lib/create-documents/create-documents.component.d.ts +1 -1
  396. package/lib/formgroup/cs-checkbox/cs-checkbox.component.d.ts +1 -1
  397. package/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts +1 -1
  398. package/lib/formgroup/cs-radio/cs-radio.component.d.ts +1 -1
  399. package/lib/formgroup/cs-radio-group/cs-radio-group.component.d.ts +1 -1
  400. package/lib/formgroup/cs-select/cs-select.component.d.ts +1 -1
  401. package/lib/formgroup/cs-switch/cs-switch.component.d.ts +1 -1
  402. package/lib/formgroup/select/cs-option/cs-option.component.d.ts +1 -1
  403. package/lib/formgroup/select/cs-select/cs-select.component.d.ts +1 -1
  404. package/lib/log-an-issue/log-an-issue.component.d.ts +7 -3
  405. package/lib/more-option/more-option.component.d.ts +1 -1
  406. package/lib/services/common.service.d.ts +14 -0
  407. package/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.d.ts +1 -1
  408. package/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.d.ts +1 -1
  409. package/lib/sharedComponents/approval-workflow/approval-workflow.component.d.ts +1 -1
  410. package/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.d.ts +1 -1
  411. package/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.d.ts +1 -1
  412. package/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.d.ts +1 -1
  413. package/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.d.ts +1 -1
  414. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.d.ts +1 -1
  415. package/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.d.ts +1 -1
  416. package/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.d.ts +1 -1
  417. package/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.d.ts +1 -1
  418. package/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.d.ts +1 -1
  419. package/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.d.ts +1 -1
  420. package/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.d.ts +1 -1
  421. package/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.d.ts +1 -1
  422. package/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.d.ts +1 -1
  423. package/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.d.ts +1 -1
  424. package/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.d.ts +1 -1
  425. package/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.d.ts +1 -1
  426. package/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.d.ts +1 -1
  427. package/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.d.ts +1 -1
  428. package/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.d.ts +1 -1
  429. package/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.d.ts +1 -1
  430. package/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.d.ts +1 -1
  431. package/lib/sharedComponents/assessment-editor/components/logic/logic.component.d.ts +1 -1
  432. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.d.ts +1 -1
  433. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.d.ts +1 -1
  434. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.d.ts +7 -3
  435. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.d.ts +1 -1
  436. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.d.ts +1 -1
  437. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.d.ts +1 -1
  438. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.d.ts +1 -1
  439. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.d.ts +1 -1
  440. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.d.ts +1 -1
  441. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.d.ts +1 -1
  442. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.d.ts +1 -1
  443. package/lib/sharedComponents/assessment-editor/components/move/move.component.d.ts +1 -1
  444. package/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.d.ts +1 -1
  445. package/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.d.ts +1 -1
  446. package/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.d.ts +1 -1
  447. package/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.d.ts +8 -5
  448. package/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.d.ts +1 -1
  449. package/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.d.ts +1 -1
  450. package/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.d.ts +1 -1
  451. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.d.ts +1 -1
  452. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.d.ts +1 -1
  453. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.d.ts +1 -1
  454. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.d.ts +1 -1
  455. package/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.d.ts +1 -1
  456. package/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.d.ts +1 -1
  457. package/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.d.ts +1 -1
  458. package/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.d.ts +1 -1
  459. package/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.d.ts +1 -1
  460. package/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.d.ts +1 -1
  461. package/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.d.ts +1 -1
  462. package/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.d.ts +1 -1
  463. package/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.d.ts +1 -1
  464. package/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.d.ts +1 -1
  465. package/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.d.ts +1 -1
  466. package/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.d.ts +1 -1
  467. package/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.d.ts +1 -1
  468. package/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.d.ts +1 -1
  469. package/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.d.ts +1 -1
  470. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.d.ts +1 -1
  471. package/lib/sharedComponents/assessment-list/assessment-list-loader/assessment-list-loader.component.d.ts +1 -1
  472. package/lib/sharedComponents/assessment-list/assessment-list-sub-loader/assessment-list-sub-loader.component.d.ts +1 -1
  473. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +1 -1
  474. package/lib/sharedComponents/assessment-preview/checkbox-question/checkbox-question.component.d.ts +1 -1
  475. package/lib/sharedComponents/assessment-preview/date-time/date-time.component.d.ts +8 -5
  476. package/lib/sharedComponents/assessment-preview/description-preview/description-preview.component.d.ts +1 -1
  477. package/lib/sharedComponents/assessment-preview/device/device.component.d.ts +1 -1
  478. package/lib/sharedComponents/assessment-preview/file-upload/file-upload.component.d.ts +1 -1
  479. package/lib/sharedComponents/assessment-preview/page-header/page-header.component.d.ts +1 -1
  480. package/lib/sharedComponents/assessment-preview/preview/preview.component.d.ts +1 -1
  481. package/lib/sharedComponents/assessment-preview/preview-container/preview-container.component.d.ts +1 -1
  482. package/lib/sharedComponents/assessment-preview/quick-settings/quick-settings.component.d.ts +1 -1
  483. package/lib/sharedComponents/assessment-preview/radio-question/radio-question.component.d.ts +1 -1
  484. package/lib/sharedComponents/assessment-preview/section-details/section-details.component.d.ts +1 -1
  485. package/lib/sharedComponents/assessment-preview/select-question/select-question.component.d.ts +1 -1
  486. package/lib/sharedComponents/assessment-preview/single-textbox/single-textbox.component.d.ts +1 -1
  487. package/lib/sharedComponents/assessment-preview/welcome/welcome.component.d.ts +1 -1
  488. package/lib/sharedComponents/audit-category-list/audit-category-list.component.d.ts +1 -1
  489. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +1 -1
  490. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts +1 -1
  491. package/lib/sharedComponents/category-list/category-list.component.d.ts +1 -1
  492. package/lib/sharedComponents/category-multiselect/category-multi-select.component.d.ts +1 -1
  493. package/lib/sharedComponents/checkbox-list/checkbox-list.component.d.ts +1 -1
  494. package/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.d.ts +1 -1
  495. package/lib/sharedComponents/checkpoint/checkpoints-list/checkpoints-list.component.d.ts +1 -1
  496. package/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.d.ts +6 -2
  497. package/lib/sharedComponents/checkpoint-floating-bar/checkpoint-floating-bar.component.d.ts +1 -1
  498. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.d.ts +1 -1
  499. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-list/checkpoints-policy-list.component.d.ts +1 -1
  500. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.d.ts +1 -1
  501. package/lib/sharedComponents/directive/autofocus.directive.d.ts +1 -1
  502. package/lib/sharedComponents/directive/conditional-focus.directive.d.ts +1 -1
  503. package/lib/sharedComponents/directive/drag-drop.directive.d.ts +1 -1
  504. package/lib/sharedComponents/directive/input-trim.directive.d.ts +1 -1
  505. package/lib/sharedComponents/directive/scroll-in-view.directive.d.ts +1 -1
  506. package/lib/sharedComponents/document-section/document-section.component.d.ts +1 -1
  507. package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts +1 -1
  508. package/lib/sharedComponents/format-and-evidence/format-and-evidence.component.d.ts +1 -1
  509. package/lib/sharedComponents/framework-list/framework-list-table/framework-list-table.component.d.ts +1 -1
  510. package/lib/sharedComponents/framework-list/framework-list.component.d.ts +1 -1
  511. package/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.d.ts +1 -1
  512. package/lib/sharedComponents/framework-list/framework-table-loader/framework-table-loader.component.d.ts +1 -1
  513. package/lib/sharedComponents/framework-list/parent-table/parent-table.component.d.ts +1 -1
  514. package/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.d.ts +1 -1
  515. package/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.d.ts +1 -1
  516. package/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.d.ts +1 -1
  517. package/lib/sharedComponents/frequency/frequency-container/frequency-container.component.d.ts +1 -1
  518. package/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.d.ts +1 -1
  519. package/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.d.ts +1 -1
  520. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +10 -4
  521. package/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.d.ts +1 -1
  522. package/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.d.ts +1 -1
  523. package/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.d.ts +9 -5
  524. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts +1 -1
  525. package/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.d.ts +1 -1
  526. package/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.d.ts +1 -1
  527. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts +1 -1
  528. package/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.d.ts +1 -1
  529. package/lib/sharedComponents/frequency/frequency-top/frequency-top.component.d.ts +1 -1
  530. package/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.d.ts +1 -1
  531. package/lib/sharedComponents/frequency/frequency.service.d.ts +1 -0
  532. package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts +1 -1
  533. package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts +1 -1
  534. package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts +1 -1
  535. package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts +1 -1
  536. package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts +1 -1
  537. package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts +1 -1
  538. package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts +10 -5
  539. package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts +1 -1
  540. package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts +1 -1
  541. package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts +1 -1
  542. package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts +1 -1
  543. package/lib/sharedComponents/group-users-list/group-users-list.component.d.ts +1 -1
  544. package/lib/sharedComponents/link-program/link-program/link-program.component.d.ts +1 -1
  545. package/lib/sharedComponents/link-responsibility/link-responsibility.component.d.ts +1 -1
  546. package/lib/sharedComponents/list-loader/list-loader.component.d.ts +1 -1
  547. package/lib/sharedComponents/no-data/no-data.component.d.ts +1 -1
  548. package/lib/sharedComponents/owner-list/owner-list.component.d.ts +1 -1
  549. package/lib/sharedComponents/policy-access/policy-access.component.d.ts +1 -1
  550. package/lib/sharedComponents/program-listing/program-listing.component.d.ts +1 -1
  551. package/lib/sharedComponents/radio-list/radio-list.component.d.ts +1 -1
  552. package/lib/sharedComponents/radio-list-with-pagination/link-treatment-loader/link-treatment-loader.component.d.ts +1 -1
  553. package/lib/sharedComponents/radio-list-with-pagination/radio-list.component.d.ts +1 -1
  554. package/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.d.ts +1 -1
  555. package/lib/sharedComponents/responsibility-risk-selector/responsibility-risk-selector.component.d.ts +1 -1
  556. package/lib/sharedComponents/review-frequency/review-frequency.component.d.ts +1 -1
  557. package/lib/sharedComponents/risk-classification/risk-classification.component.d.ts +1 -1
  558. package/lib/sharedComponents/roles-list/roles-list.component.d.ts +1 -1
  559. package/lib/sharedComponents/select-approvers/select-approvers.component.d.ts +1 -1
  560. package/lib/sharedComponents/table-card-loader/table-card-loader.component.d.ts +1 -1
  561. package/lib/sharedComponents/users-radio-list/users-radio-list.component.d.ts +1 -1
  562. package/lib/sharedComponents/v-loader/loader/loader.component.d.ts +1 -1
  563. package/lib/sharedComponents/v-loader/loader-inline/loader-inline.component.d.ts +1 -1
  564. package/lib/ui-kit/action-dialog/active/active.component.d.ts +1 -1
  565. package/lib/ui-kit/action-dialog/deactivate/deactivate.component.d.ts +1 -1
  566. package/lib/ui-kit/action-dialog/delete/delete.component.d.ts +1 -1
  567. package/lib/ui-kit/action-dialog/duplicate/duplicate.component.d.ts +1 -1
  568. package/lib/ui-kit/click-outside/click-outside.directive.d.ts +1 -1
  569. package/lib/ui-kit/dialog/dialog-injector.d.ts +2 -2
  570. package/lib/ui-kit/dialog/dialog.component.d.ts +6 -4
  571. package/lib/ui-kit/dialog/dialog.service.d.ts +3 -3
  572. package/lib/ui-kit/dialog/insertion.directive.d.ts +1 -1
  573. package/lib/ui-kit/directive/stop-propagation.directive.d.ts +1 -1
  574. package/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.d.ts +1 -1
  575. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +1 -1
  576. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +1 -1
  577. package/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts +1 -1
  578. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +1 -1
  579. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +1 -1
  580. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +1 -1
  581. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +1 -1
  582. package/lib/ui-kit/line-loader/line-loader.component.d.ts +1 -1
  583. package/lib/ui-kit/no-data/no-data.component.d.ts +1 -1
  584. package/lib/ui-kit/pagination/pagination/pagination.component.d.ts +1 -1
  585. package/lib/ui-kit/popover/popover-event.directive.d.ts +1 -1
  586. package/lib/ui-kit/popover/popover-longpress.directive.d.ts +1 -1
  587. package/lib/ui-kit/popover/popover.component.d.ts +1 -1
  588. package/lib/ui-kit/popover/popover.directive.d.ts +1 -1
  589. package/lib/ui-kit/popover-hover/popover-hover.component.d.ts +1 -1
  590. package/lib/ui-kit/popover-hover/popover-hover.directive.d.ts +1 -1
  591. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +1 -1
  592. package/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.component.d.ts +1 -1
  593. package/lib/ui-kit/snack-bar/snack-bar.component.d.ts +1 -1
  594. package/lib/ui-kit/time-picker/time-picker/time-picker.component.d.ts +1 -1
  595. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +1 -1
  596. package/lib/workflow/grc-object/grc-object-container/grc-object-container.component.d.ts +1 -1
  597. package/lib/workflow/shared/components/attributes/attributes-checkbox/attributes-checkbox.component.d.ts +1 -1
  598. package/lib/workflow/shared/components/attributes/attributes-dropdown/attributes-dropdown.component.d.ts +1 -1
  599. package/lib/workflow/shared/components/attributes/attributes-text-box/attributes-text-box.component.d.ts +1 -1
  600. package/lib/workflow/shared/components/attributes/attributes.component.d.ts +1 -1
  601. package/lib/workflow/shared/components/attributes/date-picker/date-picker.component.d.ts +1 -1
  602. package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +1 -1
  603. package/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.d.ts +1 -1
  604. package/lib/workflow/shared/components/grc-object-list/grc-object-list.component.d.ts +1 -1
  605. package/lib/workflow/shared/components/grc-responsibility-listing/grc-responsibility-listing.component.d.ts +1 -1
  606. package/lib/workflow/shared/components/grc-risk-listing/grc-risk-listing.component.d.ts +1 -1
  607. package/lib/workflow/shared/components/grc-sub-category-listing/grc-sub-category-listing.component.d.ts +1 -1
  608. package/lib/workflow/shared/components/list-popup/list-popup.component.d.ts +1 -1
  609. package/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.d.ts +1 -1
  610. package/lib/workflow/shared/components/risk-category-risk-listing/risk-category-risk-listing.component.d.ts +1 -1
  611. package/lib/workflow/shared/components/table-card/table-card.component.d.ts +1 -1
  612. package/lib/workflow/shared/components/text-field/text-field.component.d.ts +1 -1
  613. package/lib/workflow/shared/components/text-field-icon/text-field-icon.component.d.ts +1 -1
  614. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts +1 -1
  615. package/lib/workflow-assessment/workflow-assessment.component.d.ts +1 -1
  616. package/lib/workflow-compliance/workflow-compliance.component.d.ts +1 -1
  617. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +1 -1
  618. package/lib/workflow-pagination/workflow-pagination.component.d.ts +1 -1
  619. package/lib/workflow-policy/workflow-policy.component.d.ts +7 -3
  620. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-loader/assessment-loader.component.d.ts +1 -1
  621. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +1 -1
  622. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-sub-loader/assessment-sub-loader.component.d.ts +1 -1
  623. package/lib/workflow-program/create-program-ui/assessment-picker/workflow-pagination/workflow-pagination.component.d.ts +1 -1
  624. package/lib/workflow-program/create-program-ui/checkbox/checkbox.component.d.ts +1 -1
  625. package/lib/workflow-program/create-program-ui/cs-switch/cs-switch.component.d.ts +1 -1
  626. package/lib/workflow-program/create-program-ui/custom-field/custom-field.component.d.ts +1 -1
  627. package/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.d.ts +1 -1
  628. package/lib/workflow-program/create-program-ui/define-framework-listing/loader/loader.component.d.ts +1 -1
  629. package/lib/workflow-program/create-program-ui/directives/input-trim.directive.d.ts +1 -1
  630. package/lib/workflow-program/create-program-ui/file-pill/file-pill.component.d.ts +1 -1
  631. package/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.d.ts +1 -1
  632. package/lib/workflow-program/create-program-ui/form-field/form-field.component.d.ts +1 -1
  633. package/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.d.ts +1 -1
  634. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts +1 -1
  635. package/lib/workflow-program/create-program-ui/role-list/loader/loader.component.d.ts +1 -1
  636. package/lib/workflow-program/create-program-ui/role-list/role-list.component.d.ts +1 -1
  637. package/lib/workflow-program/create-program-ui/tab-selector/tab-selector.component.d.ts +1 -1
  638. package/lib/workflow-program/create-program-ui/tick-mark/tick-mark.component.d.ts +1 -1
  639. package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts +1 -1
  640. package/lib/workflow-program/workflow-program.component.d.ts +1 -1
  641. package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
  642. package/lib/workflow-services/auth.service.d.ts +0 -1
  643. package/lib/workflow-services/log-issue.service.d.ts +1 -0
  644. package/lib/workflow-survey-form/workflow-survey-form.component.d.ts +1 -1
  645. package/package.json +5 -12
@@ -0,0 +1,739 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../workflow-services/responsibility.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../../formgroup/cs-checkbox/cs-checkbox.component";
7
+ import * as i4 from "../../formgroup/cs-switch/cs-switch.component";
8
+ import * as i5 from "../../formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component";
9
+ import * as i6 from "../../ui-kit/tooltip/tooltip.directive";
10
+ import * as i7 from "../no-data/no-data.component";
11
+ import * as i8 from "../v-loader/loader/loader.component";
12
+ import * as i9 from "../../ui-kit/pagination/pagination/pagination.component";
13
+ import * as i10 from "../floating-bar/floating-bar.component";
14
+ export class ProgramListingComponent {
15
+ set getSelectedCategories(category) {
16
+ this.selectedCategories = category;
17
+ this.tempSelectedCategories = JSON.stringify(category);
18
+ }
19
+ set getLinkedProgram(program) {
20
+ this.selectedProgramsDetail = [];
21
+ this.selectedProgramsId = [];
22
+ this.viewOnlyProgramsCategoryId = [];
23
+ this.selectedProgramsDetail = program;
24
+ this.selectedProgramsDetail.forEach((ele) => {
25
+ this.selectedProgramsId.push(ele?._id);
26
+ this.getSelectedProgramCount(true, ele?.programType);
27
+ ele?.isViewOnlyProgram
28
+ ? this.viewOnlyProgramsCategoryId?.push(ele?.category_id)
29
+ : null;
30
+ });
31
+ }
32
+ constructor(responsibilityService) {
33
+ this.responsibilityService = responsibilityService;
34
+ this.animation = false;
35
+ this.subList = false;
36
+ this.loader = false;
37
+ this.openedFrom = '';
38
+ // @Input() selectedCategories: any[] = [];
39
+ this.viewOnlyProgramsCategoryId = [];
40
+ this.selectedCategories = [];
41
+ this.tempSelectedCategories = [];
42
+ this.responsibilityId = '';
43
+ this.mode = 'CREATE';
44
+ this.previousSelectedValues = {
45
+ program: {},
46
+ categories: [],
47
+ };
48
+ this.programData = {
49
+ data: [],
50
+ from: 0,
51
+ to: 0,
52
+ totalPages: 0,
53
+ totalRecords: 0,
54
+ currentPage: 1,
55
+ AllInternalControlsProgramsCount: 0,
56
+ AllOthersProgramsCount: 0,
57
+ AllRegulationProgramsCount: 0,
58
+ AllStandardProgramsCount: 0,
59
+ SelectedInternalControlsProgramsCount: 0,
60
+ SelectedOthersProgramsCount: 0,
61
+ SelectedRegulationProgramsCount: 0,
62
+ SelectedStandardProgramsCount: 0,
63
+ AllProgramsCount: 0,
64
+ AllViewOnlyProgramCount: 0,
65
+ };
66
+ this.programTabDataCount = {
67
+ allInternalControlsProgramsCount: 0,
68
+ allOthersProgramsCount: 0,
69
+ allRegulationProgramsCount: 0,
70
+ allStandardProgramsCount: 0,
71
+ };
72
+ this.categoryData = {
73
+ data: [],
74
+ from: 0,
75
+ to: 0,
76
+ totalPages: 0,
77
+ totalRecords: 0,
78
+ currentPage: 1,
79
+ selectedCategories: [],
80
+ };
81
+ this.showCategories = false;
82
+ this.searchString = '';
83
+ this.categorySearchString = '';
84
+ this.activeTab = 'regulations';
85
+ this.selectedIds = [];
86
+ this.categoryList = [];
87
+ this.programTypeObject = {
88
+ regulations: 1,
89
+ standards: 2,
90
+ internal_controls: 3,
91
+ others: 0,
92
+ };
93
+ this.displayConfirmationMessage = false;
94
+ this.tempPrimaryProgram = {};
95
+ this.primaryConfirmationMessage = `Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.`;
96
+ this.isPrimaryConfirmation = false;
97
+ this.isUncheckedProgram = false;
98
+ this.isPrimaryUnchecked = false;
99
+ this.selectedProgramsDetail = [];
100
+ this.selectedProgramsId = [];
101
+ this.programCountLoader = false;
102
+ this.deprecatePrimaryProgramFlag = false;
103
+ this.saveSelectedProgram = new EventEmitter();
104
+ this.closeEvent = new EventEmitter();
105
+ this.allCategories = [];
106
+ this.selectedSubCategoryIds = [];
107
+ this.programSubTab = 'PROGRAMS';
108
+ }
109
+ ngOnInit() {
110
+ this.deprecatePrimaryProgramFlag = this.feature.isFeatureEnabled('ff_deprecate_primary_program_flag');
111
+ this.animation = true;
112
+ setTimeout(() => {
113
+ this.animation = false;
114
+ }, 300);
115
+ if (this.selectedProgram && this.selectedProgram[0]) {
116
+ this.currentProgram = this.selectedProgram[0];
117
+ if (this.mode === 'EDIT' || this.openedFrom === 'PROGRAM_WORKROOM') {
118
+ this.viewOnlyProgramsCategoryId?.push(this.currentProgram?.category_id);
119
+ }
120
+ switch (this.currentProgram?.programType) {
121
+ case 0:
122
+ this.activeTab = 'others';
123
+ break;
124
+ case 1:
125
+ this.activeTab = 'regulations';
126
+ break;
127
+ case 2:
128
+ this.activeTab = 'standards';
129
+ break;
130
+ case 3:
131
+ this.activeTab = 'internal_controls';
132
+ break;
133
+ default:
134
+ this.activeTab = 'regulations';
135
+ break;
136
+ }
137
+ this.getSelectedProgramCount();
138
+ // if (this.selectedCategories?.length && this.currentProgram) {
139
+ this.populateCategories();
140
+ // }
141
+ }
142
+ if (this.hideProgramsList) {
143
+ this.selectedProgramsId?.push(this.selectedProgram[0]?._id);
144
+ this.getCategoriesList();
145
+ }
146
+ else {
147
+ this.getProgramsList();
148
+ }
149
+ this.getProgramsCount();
150
+ this.previousSelectedValues = {
151
+ programs: this.currentProgram,
152
+ categories: this.selectedCategories.length
153
+ ? [...new Set(this.selectedCategories)]
154
+ : [],
155
+ };
156
+ this.preservePreviousDetails();
157
+ }
158
+ populateCategories() {
159
+ this.selectedIds = [];
160
+ let params = new HttpParams();
161
+ // params = params.append('program_id', this.currentProgram._id);
162
+ params = params.append('isPagination', false);
163
+ if (this.responsibilityId) {
164
+ params = params.append('reportId', this.responsibilityId);
165
+ }
166
+ this.responsibilityService
167
+ .getProgramsList(params, this.selectedProgramsId)
168
+ .subscribe({
169
+ next: (res) => {
170
+ const allCategories = res.data;
171
+ this.categoryData.selectedCategories = allCategories.filter((ele) => this.selectedCategories.includes(ele.category_id));
172
+ this.categoryData.selectedCategories.forEach((element) => {
173
+ this.selectedIds.push(element.category_id);
174
+ });
175
+ },
176
+ error: (err) => {
177
+ console.error(err);
178
+ },
179
+ });
180
+ }
181
+ handleSearch(event) {
182
+ if (this.searchString != event) {
183
+ this.programData.currentPage = 1;
184
+ this.searchString = event;
185
+ this.getProgramsList({ search: true });
186
+ this.getProgramsCount({ search: true });
187
+ }
188
+ }
189
+ categorySearch(event) {
190
+ if (this.categorySearchString != event) {
191
+ this.categoryData.currentPage = 1;
192
+ this.categorySearchString = event;
193
+ this.getCategoriesList({ search: true });
194
+ }
195
+ }
196
+ selectProgram(event, program) {
197
+ this.updateSelectedPrograms(event, program);
198
+ // this.getSelectedProgramCount(event, program?.programType);
199
+ if (event) {
200
+ if (!this.feature.isFeatureEnabled('ff_deprecate_primary_program_flag')) {
201
+ Object.keys(this.currentProgram ?? {}).length
202
+ ? null
203
+ : (this.currentProgram = program);
204
+ }
205
+ // this.currentProgram = program;
206
+ this.selectedIds = [];
207
+ this.categoryList = [];
208
+ // this.getSelectedProgramCount();
209
+ }
210
+ }
211
+ /**
212
+ * If the event is true, then push the program to the selectedProgramsDetail array. If the event is
213
+ * false, then remove the program from the selectedProgramsDetail array.
214
+ * @param {any} event - boolean
215
+ * @param {any} program - any = {
216
+ */
217
+ updateSelectedPrograms(event, program) {
218
+ if (event) {
219
+ const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id === program?.category_id);
220
+ if (indexOfProgram === -1 && Object.keys(program)?.length) {
221
+ this.selectedProgramsId?.push(program?._id);
222
+ this.selectedProgramsDetail?.push(program);
223
+ this.getSelectedProgramCount(event, program?.programType);
224
+ }
225
+ }
226
+ else {
227
+ const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id === program?.category_id);
228
+ if (indexOfProgram !== -1) {
229
+ this.selectedProgramsDetail?.splice(indexOfProgram, 1);
230
+ }
231
+ const indexOfId = this.selectedProgramsId?.findIndex((el) => el === program?._id);
232
+ if (indexOfId !== -1) {
233
+ this.selectedProgramsId?.splice(indexOfId, 1);
234
+ }
235
+ this.isPrimaryUnchecked = false;
236
+ if (this.currentProgram &&
237
+ this.currentProgram?.category_id === program?.category_id) {
238
+ // this.primaryConfirmationMessage = 'You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.';
239
+ this.isPrimaryConfirmation = true;
240
+ this.isPrimaryUnchecked = true;
241
+ this.tempPrimaryProgram = JSON.stringify(program);
242
+ // this.currentProgram = undefined;
243
+ }
244
+ // }
245
+ this.getSelectedProgramCount(event, program?.programType);
246
+ }
247
+ if (this.selectedProgramsDetail?.length && !this.currentProgram?.length) {
248
+ this.currentProgram = this.selectedProgramsDetail[0];
249
+ }
250
+ else {
251
+ this.currentProgram = [];
252
+ }
253
+ }
254
+ /**
255
+ * If the currentProgram is set, then set the currentProgram to the program passed in, and set the
256
+ * tempPrimaryProgram to the currentProgram.
257
+ * If the currentProgram is not set, then set the currentProgram to the program passed in.
258
+ * @param {any} event - any - the event that is triggered when the user clicks on the checkbox
259
+ * @param {any} program - the program that is being selected
260
+ */
261
+ setPrimaryProgram(event, program) {
262
+ if (this.currentProgram) {
263
+ const currentTemp = this.currentProgram;
264
+ this.tempPrimaryProgram = JSON.stringify(currentTemp);
265
+ this.currentProgram = program;
266
+ this.updateSelectedPrograms(true, program);
267
+ if (!event) {
268
+ this.currentProgram = {};
269
+ }
270
+ this.primaryConfirmationMessage =
271
+ 'Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.';
272
+ this.isPrimaryConfirmation = true;
273
+ }
274
+ if (event && !this.currentProgram) {
275
+ this.currentProgram = program;
276
+ this.updateSelectedPrograms(true, program);
277
+ }
278
+ }
279
+ /**
280
+ * If the user clicks "Yes" on the confirmation modal, then the function will remove the program from
281
+ * the selectedProgramsDetail array and the selectedProgramsId array. If the user clicks "No" on the
282
+ * confirmation modal, then the function will do nothing.
283
+ * @param {boolean} event - boolean -&gt; this is the value of the checkbox
284
+ */
285
+ updatePrimaryProgram(event) {
286
+ if (event && this.isPrimaryUnchecked) {
287
+ const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id ===
288
+ JSON.parse(this.tempPrimaryProgram ?? {})?.category_id);
289
+ if (indexOfProgram !== -1) {
290
+ this.selectedProgramsDetail?.splice(indexOfProgram, 1);
291
+ }
292
+ const indexOfId = this.selectedProgramsId?.findIndex((el) => el === JSON.parse(this.tempPrimaryProgram ?? {})?._id);
293
+ if (indexOfId !== -1) {
294
+ this.selectedProgramsId?.splice(indexOfId, 1);
295
+ }
296
+ this.isPrimaryConfirmation = false;
297
+ this.currentProgram = {};
298
+ }
299
+ else if (!event && this.isPrimaryUnchecked) {
300
+ this.updateSelectedPrograms(true, this.tempPrimaryProgram?.length
301
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
302
+ : {});
303
+ this.currentProgram = this.tempPrimaryProgram?.length
304
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
305
+ : {};
306
+ this.isPrimaryConfirmation = false;
307
+ }
308
+ else if (event) {
309
+ // this.currentProgram = this.isPrimaryUnchecked ? {} : JSON.parse(this.tempPrimaryProgram);
310
+ this.updateSelectedPrograms(this.isPrimaryUnchecked ? false : true, this.tempPrimaryProgram?.length
311
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
312
+ : {});
313
+ this.isPrimaryConfirmation = false;
314
+ }
315
+ else {
316
+ let currentPrimary = JSON.stringify(this.currentProgram);
317
+ this.currentProgram = {};
318
+ // this.updateSelectedPrograms(false, JSON.parse(currentPrimary)?? {});
319
+ this.updateSelectedPrograms(true, JSON.parse(currentPrimary) ?? {});
320
+ this.currentProgram = this.tempPrimaryProgram?.length
321
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
322
+ : {};
323
+ this.isPrimaryConfirmation = false;
324
+ }
325
+ this.isPrimaryUnchecked = false;
326
+ }
327
+ selectAllCategories(value) {
328
+ if (value) {
329
+ this.selectedIds = [];
330
+ this.categoryData.selectedCategories = [];
331
+ if (this.categoryData.totalPages < 2) {
332
+ this.categoryData.data.forEach((ele) => {
333
+ this.selectedIds.push(ele.category_id);
334
+ this.categoryData.selectedCategories.push(ele);
335
+ });
336
+ }
337
+ else {
338
+ this.loader = true;
339
+ let params = new HttpParams();
340
+ // params = params.append('program_id', this.currentProgram?._id);
341
+ params = params.append('isPagination', false);
342
+ if (this.responsibilityId) {
343
+ params = params.append('reportId', this.responsibilityId);
344
+ }
345
+ this.responsibilityService
346
+ .getProgramsList(params, this.selectedProgramsId)
347
+ .subscribe({
348
+ next: (res) => {
349
+ const allCategories = res.data;
350
+ this.categoryData.selectedCategories = res.data;
351
+ allCategories.forEach((element) => {
352
+ this.selectedIds.push(element.category_id);
353
+ });
354
+ this.loader = false;
355
+ },
356
+ error: (err) => {
357
+ console.error(err);
358
+ this.loader = false;
359
+ },
360
+ });
361
+ }
362
+ }
363
+ else {
364
+ this.categoryData.selectedCategories = [];
365
+ this.selectedIds = [];
366
+ }
367
+ }
368
+ checkCategoriesSelection() {
369
+ if (this.categoryData.selectedCategories.length ==
370
+ this.categoryData.totalRecords) {
371
+ return 'checked';
372
+ }
373
+ else if (!this.categoryData.selectedCategories.length) {
374
+ return 'unchecked';
375
+ }
376
+ else {
377
+ return 'indeterminate';
378
+ }
379
+ }
380
+ openCategories() {
381
+ this.searchString = '';
382
+ this.categorySearchString = '';
383
+ const isSubProgram = this.selectedProgramsDetail?.some((el) => el?.child_id?.length);
384
+ this.populateCategories();
385
+ if (this.currentProgram?.child_id?.length || isSubProgram) {
386
+ this.showCategories = true;
387
+ this.getCategoriesList();
388
+ }
389
+ else {
390
+ this.selectedIds = [];
391
+ this.save();
392
+ }
393
+ }
394
+ backToPrograms() {
395
+ if (!this.hideProgramsList) {
396
+ this.showCategories = false;
397
+ if (this.previousSelectedValues?.program?._id == this.currentProgram) {
398
+ this.categoryData.selectedCategories = [
399
+ ...new Set(this.previousSelectedValues.categories),
400
+ ];
401
+ this.selectedIds = [];
402
+ this.categoryData.selectedCategories.forEach((element) => {
403
+ this.selectedIds.push(element);
404
+ });
405
+ }
406
+ else {
407
+ this.getProgramsList();
408
+ this.categoryData.selectedCategories = [];
409
+ this.selectedIds = [];
410
+ }
411
+ }
412
+ else {
413
+ this.categoryData.selectedCategories = [];
414
+ this.selectedIds = [];
415
+ this.close();
416
+ }
417
+ }
418
+ changeTab(type) {
419
+ this.programSubTab = 'PROGRAMS';
420
+ this.activeTab = type;
421
+ this.programData.currentPage = 1;
422
+ if (this.searchString?.length) {
423
+ this.searchString = '';
424
+ this.getProgramsCount();
425
+ }
426
+ // this.searchString = '';
427
+ this.searchProgram.nativeElement.value = '';
428
+ this.getProgramsList();
429
+ }
430
+ changePage(event, type) {
431
+ switch (type) {
432
+ case 'program':
433
+ this.programData.currentPage = event;
434
+ this.getProgramsList();
435
+ break;
436
+ case 'category':
437
+ this.categoryData.currentPage = event;
438
+ this.getCategoriesList();
439
+ break;
440
+ }
441
+ }
442
+ getProgramsList(paramsObject) {
443
+ this.loader = true;
444
+ let params = new HttpParams();
445
+ params = params.append('programType', this.programTypeObject[this.activeTab]);
446
+ if (paramsObject?.search || this.searchString) {
447
+ params = params.append('searchText', this.searchString);
448
+ }
449
+ // else {
450
+ params = params.append('pageNo', this.programData.currentPage);
451
+ // }
452
+ if (this.programSubTab === 'OTHER_PROGRAMS') {
453
+ params = params.append('isViewOnlyPrograms', true);
454
+ }
455
+ if (this.responsibilityId) {
456
+ params = params.append('reportId', this.responsibilityId);
457
+ }
458
+ this.responsibilityService.getProgramsList(params).subscribe({
459
+ next: (res) => {
460
+ this.programData.data = res.data;
461
+ this.programData.from = res.from;
462
+ this.programData.to = res.to;
463
+ this.programData.totalPages = res.totalPages;
464
+ this.programData.totalRecords = res.totalRecords;
465
+ this.programData.AllInternalControlsProgramsCount =
466
+ res.AllInternalControlsProgramsCount;
467
+ this.programData.AllOthersProgramsCount = res.AllOthersProgramsCount;
468
+ this.programData.AllRegulationProgramsCount =
469
+ res.AllRegulationProgramsCount;
470
+ this.programData.AllStandardProgramsCount =
471
+ res.AllStandardProgramsCount;
472
+ this.programData.AllProgramsCount = res?.AllProgramsCount
473
+ ? res?.AllProgramsCount
474
+ : 0;
475
+ this.programData.AllViewOnlyProgramCount = res?.AllViewOnlyProgramCount
476
+ ? res?.AllViewOnlyProgramCount
477
+ : 0;
478
+ this.loader = false;
479
+ },
480
+ error: (err) => {
481
+ console.error(err);
482
+ this.loader = false;
483
+ },
484
+ });
485
+ }
486
+ getProgramsCount(paramsObject) {
487
+ this.programCountLoader = true;
488
+ let params = new HttpParams();
489
+ // params = params.append('programType', this.programTypeObject[this.activeTab]);
490
+ if (paramsObject?.search || this.searchString) {
491
+ params = params.append('searchText', this.searchString);
492
+ }
493
+ if (this.responsibilityId) {
494
+ params = params.append('reportId', this.responsibilityId);
495
+ }
496
+ this.responsibilityService.getProgramsListCount(params).subscribe({
497
+ next: (res) => {
498
+ this.programTabDataCount.allRegulationProgramsCount =
499
+ res?.AllRegulationProgramsCount;
500
+ this.programTabDataCount.allStandardProgramsCount =
501
+ res?.AllStandardProgramsCount;
502
+ this.programTabDataCount.allInternalControlsProgramsCount =
503
+ res?.AllInternalControlsProgramsCount;
504
+ this.programTabDataCount.allOthersProgramsCount =
505
+ res?.AllOthersProgramsCount;
506
+ this.programCountLoader = false;
507
+ },
508
+ error: (err) => {
509
+ console.error(err);
510
+ this.programCountLoader = false;
511
+ },
512
+ });
513
+ }
514
+ getCategoriesList(queryObject) {
515
+ this.loader = true;
516
+ let params = new HttpParams();
517
+ // params = params.append('program_id', this.currentProgram?._id);
518
+ params = params.append('pageNo', this.categoryData.currentPage);
519
+ if (queryObject?.search || this.categorySearchString) {
520
+ params = params.append('searchText', this.categorySearchString);
521
+ }
522
+ if (this.responsibilityId) {
523
+ params = params.append('reportId', this.responsibilityId);
524
+ }
525
+ this.responsibilityService
526
+ .getProgramsList(params, [...new Set(this.selectedProgramsId)])
527
+ .subscribe({
528
+ next: (res) => {
529
+ this.categoryData.data = res.data;
530
+ this.categoryData.from = res.from;
531
+ this.categoryData.to = res.to;
532
+ this.categoryData.totalPages = res.totalPages;
533
+ this.categoryData.totalRecords = res.totalRecords;
534
+ this.selectedSubCategoryIds = res?.selectedSubCategoryIds?.length
535
+ ? res?.selectedSubCategoryIds
536
+ : [];
537
+ this.loader = false;
538
+ },
539
+ error: (err) => {
540
+ console.error(err);
541
+ this.loader = false;
542
+ },
543
+ });
544
+ this.showCategories = true;
545
+ }
546
+ saveProgram() { }
547
+ selectCategory(mode, category) {
548
+ if (mode) {
549
+ this.selectedIds.push(category.category_id);
550
+ this.categoryData.selectedCategories.push(category);
551
+ this.selectedCategories.push(category.category_id);
552
+ }
553
+ else {
554
+ const index = this.selectedIds.findIndex((element) => element == category.category_id);
555
+ this.selectedIds.splice(index, 1);
556
+ const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == category.category_id);
557
+ this.categoryData.selectedCategories.splice(categoryIndex, 1);
558
+ const selectedIndex = this.selectedCategories.findIndex((ele) => ele == category?.category_id);
559
+ this.selectedCategories.splice(selectedIndex, 1);
560
+ }
561
+ }
562
+ removeCategories(event) {
563
+ const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == event.category_id);
564
+ this.categoryData.selectedCategories.splice(categoryIndex, 1);
565
+ const index = this.selectedIds.findIndex((element) => element == event.category_id);
566
+ this.selectedIds.splice(index, 1);
567
+ }
568
+ close() {
569
+ const currentProgram = this.preservePrimaryProgram?.length
570
+ ? JSON.parse(this.preservePrimaryProgram)
571
+ : {};
572
+ const selectedProgramsId = this.preservedProgramsId?.length
573
+ ? JSON.parse(this.preservedProgramsId)
574
+ : undefined;
575
+ const selectedProgramsDetail = this.preservedSelectedPrograms?.length
576
+ ? JSON.parse(this.preservedSelectedPrograms)
577
+ : [];
578
+ if (this.preservePrimaryProgram?.length &&
579
+ this.preservedSelectedPrograms?.length) {
580
+ this.saveSelectedProgram.emit({
581
+ program: currentProgram,
582
+ categories: JSON.parse(this.tempSelectedCategories),
583
+ linkedProgram: selectedProgramsDetail,
584
+ });
585
+ }
586
+ // this.saveSelectedProgram.emit({program: currentProgram, categories: this.selectedIds, linkedProgram: selectedProgramsDetail });
587
+ this.closeEvent.emit();
588
+ }
589
+ save() {
590
+ if (!this.hideProgramsList && false) {
591
+ this.displayConfirmationMessage = true;
592
+ }
593
+ else {
594
+ const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
595
+ this.saveSelectedProgram.emit({
596
+ program: this.currentProgram,
597
+ categories: [...new Set(selectedCategoryIds)],
598
+ linkedProgram: this.selectedProgramsDetail,
599
+ });
600
+ // this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
601
+ }
602
+ }
603
+ saveChanges(value) {
604
+ if (value) {
605
+ const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
606
+ this.saveSelectedProgram.emit({
607
+ program: this.currentProgram,
608
+ categories: [...new Set(selectedCategoryIds)],
609
+ linkedProgram: this.selectedProgramsDetail,
610
+ });
611
+ // this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
612
+ }
613
+ else {
614
+ this.displayConfirmationMessage = false;
615
+ }
616
+ }
617
+ deleteEvent(event) {
618
+ const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id === event?.category_id);
619
+ if (indexOfProgram !== -1) {
620
+ this.selectedProgramsDetail?.splice(indexOfProgram, 1);
621
+ }
622
+ const indexOfId = this.selectedProgramsId?.findIndex((el) => el === event?._id);
623
+ if (indexOfId !== -1) {
624
+ this.selectedProgramsId?.splice(indexOfId, 1);
625
+ }
626
+ if (this.currentProgram?._id === event?._id) {
627
+ if (this.selectedProgramsDetail?.length) {
628
+ this.currentProgram = this.selectedProgramsDetail[0];
629
+ }
630
+ else {
631
+ this.currentProgram = {};
632
+ }
633
+ }
634
+ // this.currentProgram = undefined;
635
+ this.showCategories = false;
636
+ this.selectedIds = [];
637
+ this.categoryList = [];
638
+ //As this is a radio list and only one item can be selected thats why we are resetting all the counts to zero
639
+ this.getSelectedProgramCount(false, event?.programType);
640
+ }
641
+ getSelectedProgramCount(event, programType) {
642
+ // switch (this.currentProgram.programType) {
643
+ switch (programType) {
644
+ case 0:
645
+ event
646
+ ? this.programData.SelectedOthersProgramsCount++
647
+ : this.programData.SelectedOthersProgramsCount--;
648
+ break;
649
+ case 1:
650
+ event
651
+ ? this.programData.SelectedRegulationProgramsCount++
652
+ : this.programData.SelectedRegulationProgramsCount--;
653
+ break;
654
+ case 2:
655
+ event
656
+ ? this.programData.SelectedStandardProgramsCount++
657
+ : this.programData.SelectedStandardProgramsCount--;
658
+ break;
659
+ case 3:
660
+ event
661
+ ? this.programData.SelectedInternalControlsProgramsCount++
662
+ : this.programData.SelectedInternalControlsProgramsCount--;
663
+ break;
664
+ }
665
+ }
666
+ /**
667
+ * If the selectedProgram array has a length, then preserve the first element of the array as the
668
+ * preservePrimaryProgram variable. Otherwise, set the preservePrimaryProgram variable to an empty
669
+ * object.
670
+ *
671
+ * If the selectedProgramsId array has a length, then preserve the array as the preservedProgramsId
672
+ * variable. Otherwise, set the preservedProgramsId variable to an empty array.
673
+ *
674
+ * If the selectedProgramsDetail array has a length, then preserve the array as the
675
+ * preservedSelectedPrograms variable. Otherwise, set the preservedSelectedPrograms variable to an
676
+ * empty array.
677
+ *
678
+ * If the selectedProgram array does not have a length, then set the selectedProgramsDetail array to
679
+ * an empty array and the selectedProgramsId array to an empty array.
680
+ */
681
+ preservePreviousDetails() {
682
+ if (this.selectedProgram[0]?.length || this.currentProgram) {
683
+ this.preservePrimaryProgram = this.selectedProgram?.length
684
+ ? JSON.stringify(this.selectedProgram[0])
685
+ : {};
686
+ this.preservedProgramsId = this.selectedProgramsId?.length
687
+ ? JSON.stringify(this.selectedProgramsId)
688
+ : [];
689
+ this.preservedSelectedPrograms = this.selectedProgramsDetail
690
+ ? JSON.stringify(this.selectedProgramsDetail)
691
+ : [];
692
+ }
693
+ else {
694
+ this.selectedProgramsDetail = [];
695
+ this.selectedProgramsId = [];
696
+ }
697
+ }
698
+ setProgramSubTab(tab) {
699
+ this.programSubTab = tab;
700
+ this.getProgramsList();
701
+ }
702
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgramListingComponent, deps: [{ token: i1.ResponsibilityService }], target: i0.ɵɵFactoryTarget.Component }); }
703
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProgramListingComponent, selector: "app-program-listing", inputs: { programsList: "programsList", selectedProgram: "selectedProgram", openedFrom: "openedFrom", getSelectedCategories: ["selectedCategories", "getSelectedCategories"], responsibilityId: "responsibilityId", feature: "feature", hideProgramsList: "hideProgramsList", mode: "mode", getLinkedProgram: ["linkedProgram", "getLinkedProgram"] }, outputs: { saveSelectedProgram: "saveSelectedProgram", closeEvent: "closeEvent" }, viewQueries: [{ propertyName: "searchProgram", first: true, predicate: ["searchProgram"], descendants: true }, { propertyName: "searchCategory", first: true, predicate: ["searchCategory"], descendants: true }], ngImport: i0, template: "<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"!showCategories && !hideProgramsList\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select a Program</div>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row\">\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allRegulationProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allStandardProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'internal_controls'\"\r\n (click)=\"changeTab('internal_controls')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allInternalControlsProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <!-- mode === 'EDIT' -->\r\n <div *ngIf=\"mode === 'EDIT' && programData?.AllViewOnlyProgramCount\" class=\"program-listing-tab vx-d-flex vx-align-center\">\r\n <button (click)=\"setProgramSubTab('PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'PROGRAMS'\">PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllProgramsCount}}</span></button>\r\n <button (click)=\"setProgramSubTab('OTHER_PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'OTHER_PROGRAMS'\">OTHER PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllViewOnlyProgramCount}}</span></button>\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\" [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-category-list]=\"!showCategories && !hideProgramsList\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length===0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\" *ngFor=\"let program of programData.data;let i = index\" [class.final-select]=\"false\">\r\n <!-- after category was select & user move to back and edit then final-select class was show -->\r\n <!-- [class.disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') && programSubTab !== 'OTHER_PROGRAMS'\" -->\r\n <div class=\"table-row main-list\" [class.active]=\"selectedProgramsId?.includes(program?._id)\" [class.disabled]=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag') ? false : (currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') && programSubTab !== 'OTHER_PROGRAMS')\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <!-- [disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM')\" -->\r\n <app-cs-checkbox\r\n *ngIf=\"programSubTab !== 'OTHER_PROGRAMS'\"\r\n [disabled]=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag') ? false : (currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM'))\"\r\n [ngValue]=\"selectedProgramsId?.includes(program?._id)\"\r\n (ngValueChange)=\"selectProgram($event,program)\"\r\n ></app-cs-checkbox>\r\n <!-- <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio> -->\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column primary-program\" >\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <app-cs-switch\r\n *ngIf=\"!(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') || currentProgram?._id === program?._id\"\r\n [disabled]=\"currentProgram?._id === program?._id\"\r\n [ngValue]='currentProgram?._id === program?._id' \r\n (ngValueChange)=\"setPrimaryProgram($event, program)\"\r\n >{{currentProgram?._id === program?._id ? 'PRIMARY PROGRAM' : 'SET AS PRIMARY PROGRAM'}}</app-cs-switch>\r\n </ng-container>\r\n </div>\r\n <!-- <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <app-floating-bar *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n\r\n <app-floating-bar *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [defaultSelected]=\"currentProgram\" [nonRemovableUsersList]=\"(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') ? viewOnlyProgramsCategoryId : [currentProgram?.category_id]\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n </div>\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"isPrimaryConfirmation && !isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\" [innerHTML]=\"primaryConfirmationMessage\"></div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"updatePrimaryProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"updatePrimaryProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation error-confirmation\" *ngIf=\"isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text vx-pr-4\">You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.</div>\r\n </div>\r\n <button class=\"ok-btn\" (click)=\"updatePrimaryProgram(false)\">OK</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar> -->\r\n\r\n <!-- ((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true -->\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n</div>\r\n<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"showCategories || hideProgramsList\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n <button class=\"back-btn vx-fs-16 vx-p-0 vx-mr-2\" (click)=\"backToPrograms()\"><i class=\"icons\">&#xe91d;</i></button>\r\n <!-- <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> -->\r\n Program > Select Program Categories\r\n </div>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" class=\"category-pagination\" [start]=\"categoryData.from\" [end]=\"categoryData.to\" [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\" [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-category-pagination]=\"categoryData.totalPages > 1\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length===0 && !loader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container *ngIf=\"!loader && categoryData.data?.length\">\r\n <ng-container *ngIf=\"false\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\" (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n </div>\r\n </ng-container>\r\n <div class=\"table-head\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial\">#</div>\r\n <div class=\"table-column category-name\">CATEGORIES</div>\r\n <div class=\"table-column category-within\">WITHIN</div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\" *ngFor=\"let category of categoryData.data;let i = index\" [class.active]=\"selectedIds.includes(category.category_id)\">\r\n <div class=\"table-row main-list\" [class.disabled]=\"false\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column category-name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"category?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n </div>\r\n <!-- <div class=\"within-part\" *ngIf=\"category?.parent_category_name?.length>0\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))?\r\n parent+' < ':parent}} </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column category-within\" *ngIf=\"category?.parent_category_name?.length > 0\">\r\n <div *ngFor=\"let parent of category?.parent_category_name; let last = last\" class=\"within-name\" [appTooltip]=\"category?.parent_category_name?.slice()?.reverse()?.join(' > ')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{parent}} \r\n <span *ngIf=\"!last\"> >&nbsp; </span>\r\n </div>\r\n <div *ngIf=\"category?.parent_category_ids?.includes(currentProgram?.category_id) && !feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program Category selected'\"\r\n [pluralText]=\"'Program Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n </div>\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .program-listing{position:fixed;inset:0 500px 0 0}::ng-deep .program-listing:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .program-listing.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-listing-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .program-listing-head button.back-btn{background:transparent;border-radius:0;border:none;position:relative;top:.125rem}::ng-deep .program-listing-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .program-listing-body .filter-card{box-shadow:0 0 2px #00000029;border-radius:.125rem;height:55px;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;border:none;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:11px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:28px;min-width:28px;border-radius:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;line-height:28px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::ng-deep .program-listing-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .program-listing-body app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body app-pagination.category-pagination .wk-pagination-sec-ds{padding-bottom:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 225px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-pagination{height:calc(100vh - 244px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 288px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{height:calc(100vh - 324px)}::ng-deep .program-listing-body .program-listing-part.with-category-pagination{height:calc(100vh - 252px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{margin-left:0}::ng-deep .program-listing-body .program-listing-part .table-head{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#161b2f;font-size:11px;font-weight:500;height:24px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select{background:#fbfbfb}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select .table-row .table-column.serial .sr-no{background:transparent}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{border:1px solid #f1f1f1;border-radius:2px;cursor:pointer;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial .sr-no{opacity:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .primary-program app-cs-switch .cs-switch .value{opacity:.4}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .name .name-inner .name-with-count .value{color:#dbdbdb!important}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:40px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 232px);min-width:calc(100% - 232px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1e5dd3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .within-name{color:#747576;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program{width:200px;max-width:200px;justify-content:end}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch{opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch .cs-switch .value{font-size:11px!important;color:#747576!important;font-weight:500!important;width:auto!important;margin-right:8px;cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.primary-program app-cs-switch,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.primary-program app-cs-switch{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-tab{border-bottom:1px solid #DBDBDB;margin-bottom:8px}::ng-deep .program-listing-tab button{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:40px!important}::ng-deep .program-listing-tab button span.count{border-radius:20px;color:#74757680;min-width:24px}::ng-deep .program-listing-tab button.active{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .program-listing-tab button.active span.count{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:2rem;right:2rem;bottom:2rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;min-width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}::ng-deep .program-listing-confirmation.error-confirmation{background:#eb2424}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top{justify-content:space-between}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button{height:1.5rem;width:3rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button.ok-btn{background:#fff;color:#eb2424;margin-left:.25rem}::ng-deep .program-listing app-loader .main-loader{position:absolute}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important;font-size:11px!important;color:#747576!important}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value", "readonly", "oneLine"], outputs: ["ngValueChange"] }, { kind: "component", type: i4.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "component", type: i5.CsCheckboxIndeterminateComponent, selector: "app-cs-checkbox-indeterminate", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i6.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i7.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "button"], outputs: ["buttonAction"] }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.PaginationComponent, selector: "app-pagination", inputs: ["activeAlphabet", "pageCount", "start", "end", "total", "currentPage"], outputs: ["selectedPage", "selectedAlphabet"] }, { kind: "component", type: i10.FloatingBarComponent, selector: "app-floating-bar", inputs: ["selectedData", "selectedGroups", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "defaultSelected", "groupsEnabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "deleteGroupEvent", "workflowTypeChanged"] }] }); }
704
+ }
705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgramListingComponent, decorators: [{
706
+ type: Component,
707
+ args: [{ selector: 'app-program-listing', template: "<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"!showCategories && !hideProgramsList\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select a Program</div>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row\">\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allRegulationProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allStandardProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'internal_controls'\"\r\n (click)=\"changeTab('internal_controls')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allInternalControlsProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <!-- <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span> -->\r\n <span class=\"counter\">{{programTabDataCount?.allOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <!-- mode === 'EDIT' -->\r\n <div *ngIf=\"mode === 'EDIT' && programData?.AllViewOnlyProgramCount\" class=\"program-listing-tab vx-d-flex vx-align-center\">\r\n <button (click)=\"setProgramSubTab('PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'PROGRAMS'\">PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllProgramsCount}}</span></button>\r\n <button (click)=\"setProgramSubTab('OTHER_PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'OTHER_PROGRAMS'\">OTHER PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllViewOnlyProgramCount}}</span></button>\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\" [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-category-list]=\"!showCategories && !hideProgramsList\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length===0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\" *ngFor=\"let program of programData.data;let i = index\" [class.final-select]=\"false\">\r\n <!-- after category was select & user move to back and edit then final-select class was show -->\r\n <!-- [class.disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') && programSubTab !== 'OTHER_PROGRAMS'\" -->\r\n <div class=\"table-row main-list\" [class.active]=\"selectedProgramsId?.includes(program?._id)\" [class.disabled]=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag') ? false : (currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') && programSubTab !== 'OTHER_PROGRAMS')\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <!-- [disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM')\" -->\r\n <app-cs-checkbox\r\n *ngIf=\"programSubTab !== 'OTHER_PROGRAMS'\"\r\n [disabled]=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag') ? false : (currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM'))\"\r\n [ngValue]=\"selectedProgramsId?.includes(program?._id)\"\r\n (ngValueChange)=\"selectProgram($event,program)\"\r\n ></app-cs-checkbox>\r\n <!-- <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio> -->\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column primary-program\" >\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <app-cs-switch\r\n *ngIf=\"!(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') || currentProgram?._id === program?._id\"\r\n [disabled]=\"currentProgram?._id === program?._id\"\r\n [ngValue]='currentProgram?._id === program?._id' \r\n (ngValueChange)=\"setPrimaryProgram($event, program)\"\r\n >{{currentProgram?._id === program?._id ? 'PRIMARY PROGRAM' : 'SET AS PRIMARY PROGRAM'}}</app-cs-switch>\r\n </ng-container>\r\n </div>\r\n <!-- <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <app-floating-bar *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n\r\n <app-floating-bar *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [defaultSelected]=\"currentProgram\" [nonRemovableUsersList]=\"(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') ? viewOnlyProgramsCategoryId : [currentProgram?.category_id]\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n </div>\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"isPrimaryConfirmation && !isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\" [innerHTML]=\"primaryConfirmationMessage\"></div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"updatePrimaryProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"updatePrimaryProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation error-confirmation\" *ngIf=\"isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text vx-pr-4\">You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.</div>\r\n </div>\r\n <button class=\"ok-btn\" (click)=\"updatePrimaryProgram(false)\">OK</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar> -->\r\n\r\n <!-- ((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true -->\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n</div>\r\n<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"showCategories || hideProgramsList\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n <button class=\"back-btn vx-fs-16 vx-p-0 vx-mr-2\" (click)=\"backToPrograms()\"><i class=\"icons\">&#xe91d;</i></button>\r\n <!-- <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> -->\r\n Program > Select Program Categories\r\n </div>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" class=\"category-pagination\" [start]=\"categoryData.from\" [end]=\"categoryData.to\" [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\" [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-category-pagination]=\"categoryData.totalPages > 1\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length===0 && !loader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container *ngIf=\"!loader && categoryData.data?.length\">\r\n <ng-container *ngIf=\"false\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\" (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n </div>\r\n </ng-container>\r\n <div class=\"table-head\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial\">#</div>\r\n <div class=\"table-column category-name\">CATEGORIES</div>\r\n <div class=\"table-column category-within\">WITHIN</div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\" *ngFor=\"let category of categoryData.data;let i = index\" [class.active]=\"selectedIds.includes(category.category_id)\">\r\n <div class=\"table-row main-list\" [class.disabled]=\"false\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column category-name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"category?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n </div>\r\n <!-- <div class=\"within-part\" *ngIf=\"category?.parent_category_name?.length>0\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))?\r\n parent+' < ':parent}} </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column category-within\" *ngIf=\"category?.parent_category_name?.length > 0\">\r\n <div *ngFor=\"let parent of category?.parent_category_name; let last = last\" class=\"within-name\" [appTooltip]=\"category?.parent_category_name?.slice()?.reverse()?.join(' > ')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{parent}} \r\n <span *ngIf=\"!last\"> >&nbsp; </span>\r\n </div>\r\n <div *ngIf=\"category?.parent_category_ids?.includes(currentProgram?.category_id) && !feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program Category selected'\"\r\n [pluralText]=\"'Program Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n </div>\r\n <ng-container *ngIf=\"!feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\">\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .program-listing{position:fixed;inset:0 500px 0 0}::ng-deep .program-listing:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .program-listing.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-listing-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .program-listing-head button.back-btn{background:transparent;border-radius:0;border:none;position:relative;top:.125rem}::ng-deep .program-listing-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .program-listing-body .filter-card{box-shadow:0 0 2px #00000029;border-radius:.125rem;height:55px;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;border:none;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:11px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:28px;min-width:28px;border-radius:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;line-height:28px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::ng-deep .program-listing-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .program-listing-body app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body app-pagination.category-pagination .wk-pagination-sec-ds{padding-bottom:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 225px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-pagination{height:calc(100vh - 244px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 288px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{height:calc(100vh - 324px)}::ng-deep .program-listing-body .program-listing-part.with-category-pagination{height:calc(100vh - 252px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{margin-left:0}::ng-deep .program-listing-body .program-listing-part .table-head{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#161b2f;font-size:11px;font-weight:500;height:24px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select{background:#fbfbfb}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select .table-row .table-column.serial .sr-no{background:transparent}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{border:1px solid #f1f1f1;border-radius:2px;cursor:pointer;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial .sr-no{opacity:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .primary-program app-cs-switch .cs-switch .value{opacity:.4}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .name .name-inner .name-with-count .value{color:#dbdbdb!important}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:40px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 232px);min-width:calc(100% - 232px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1e5dd3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .within-name{color:#747576;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program{width:200px;max-width:200px;justify-content:end}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch{opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch .cs-switch .value{font-size:11px!important;color:#747576!important;font-weight:500!important;width:auto!important;margin-right:8px;cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.primary-program app-cs-switch,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.primary-program app-cs-switch{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-tab{border-bottom:1px solid #DBDBDB;margin-bottom:8px}::ng-deep .program-listing-tab button{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:40px!important}::ng-deep .program-listing-tab button span.count{border-radius:20px;color:#74757680;min-width:24px}::ng-deep .program-listing-tab button.active{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .program-listing-tab button.active span.count{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:2rem;right:2rem;bottom:2rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;min-width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}::ng-deep .program-listing-confirmation.error-confirmation{background:#eb2424}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top{justify-content:space-between}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button{height:1.5rem;width:3rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button.ok-btn{background:#fff;color:#eb2424;margin-left:.25rem}::ng-deep .program-listing app-loader .main-loader{position:absolute}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important;font-size:11px!important;color:#747576!important}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}\n"] }]
708
+ }], ctorParameters: function () { return [{ type: i1.ResponsibilityService }]; }, propDecorators: { programsList: [{
709
+ type: Input
710
+ }], selectedProgram: [{
711
+ type: Input
712
+ }], openedFrom: [{
713
+ type: Input
714
+ }], getSelectedCategories: [{
715
+ type: Input,
716
+ args: ['selectedCategories']
717
+ }], responsibilityId: [{
718
+ type: Input
719
+ }], feature: [{
720
+ type: Input
721
+ }], hideProgramsList: [{
722
+ type: Input
723
+ }], mode: [{
724
+ type: Input
725
+ }], searchProgram: [{
726
+ type: ViewChild,
727
+ args: ['searchProgram']
728
+ }], searchCategory: [{
729
+ type: ViewChild,
730
+ args: ['searchCategory']
731
+ }], getLinkedProgram: [{
732
+ type: Input,
733
+ args: ['linkedProgram']
734
+ }], saveSelectedProgram: [{
735
+ type: Output
736
+ }], closeEvent: [{
737
+ type: Output
738
+ }] } });
739
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL3Byb2dyYW0tbGlzdGluZy9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLHVCQUF1QjtJQWFsQyxJQUFpQyxxQkFBcUIsQ0FBQyxRQUFhO1FBQ2xFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQWFELElBQTRCLGdCQUFnQixDQUFDLE9BQVk7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGtCQUFrQixD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QkFBcUI7c0JBQXJELEtBQUs7dUJBQUMsb0JBQW9CO2dCQUlsQixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ3NCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDRyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFNQyxnQkFBZ0I7c0JBQTNDLEtBQUs7dUJBQUMsZUFBZTtnQkFtRlosbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjYXRlZ29yeUxpc3QsIHByb2dyYW1MaXN0IH0gZnJvbSAnLi9wcm9ncmFtLWxpc3QtbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZ3JhbS1saXN0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyYW1MaXN0aW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBhbmltYXRpb24gPSBmYWxzZTtcclxuICBzdWJMaXN0ID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHJvZ3JhbXNMaXN0OiBhbnk7XHJcbiAgLy8gQElucHV0KCkgYWxsUHJvZ3JhbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRQcm9ncmFtITogYW55O1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb206IHN0cmluZyA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgdmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQ6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHRlbXBTZWxlY3RlZENhdGVnb3JpZXM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgnc2VsZWN0ZWRDYXRlZ29yaWVzJykgc2V0IGdldFNlbGVjdGVkQ2F0ZWdvcmllcyhjYXRlZ29yeTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IGNhdGVnb3J5O1xyXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWRDYXRlZ29yaWVzID0gSlNPTi5zdHJpbmdpZnkoY2F0ZWdvcnkpO1xyXG4gIH1cclxuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eUlkID0gJyc7XHJcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcclxuXHJcbiAgQElucHV0KCkgaGlkZVByb2dyYW1zTGlzdCE6IGFueTtcclxuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgPSAnQ1JFQVRFJztcclxuICBAVmlld0NoaWxkKCdzZWFyY2hQcm9ncmFtJykgc2VhcmNoUHJvZ3JhbSE6IGFueTtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hDYXRlZ29yeScpIHNlYXJjaENhdGVnb3J5ITogYW55O1xyXG5cclxuICBwcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zOiBhbnk7XHJcbiAgcHJlc2VydmVkUHJvZ3JhbXNJZDogYW55O1xyXG4gIHByZXNlcnZlUHJpbWFyeVByb2dyYW06IGFueTtcclxuXHJcbiAgQElucHV0KCdsaW5rZWRQcm9ncmFtJykgc2V0IGdldExpbmtlZFByb2dyYW0ocHJvZ3JhbTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkID0gW107XHJcbiAgICB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBwcm9ncmFtO1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkLnB1c2goZWxlPy5faWQpO1xyXG4gICAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KHRydWUsIGVsZT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICBlbGU/LmlzVmlld09ubHlQcm9ncmFtXHJcbiAgICAgICAgPyB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzOiBhbnkgPSB7XHJcbiAgICBwcm9ncmFtOiB7fSxcclxuICAgIGNhdGVnb3JpZXM6IFtdLFxyXG4gIH07XHJcbiAgcHJvZ3JhbURhdGE6IHByb2dyYW1MaXN0ID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICBBbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsVmlld09ubHlQcm9ncmFtQ291bnQ6IDAsXHJcbiAgfTtcclxuXHJcbiAgcHJvZ3JhbVRhYkRhdGFDb3VudDogYW55ID0ge1xyXG4gICAgYWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxPdGhlcnNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgYWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDAsXHJcbiAgfTtcclxuXHJcbiAgY2F0ZWdvcnlEYXRhOiBjYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW10sXHJcbiAgfTtcclxuXHJcbiAgc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICBjdXJyZW50UHJvZ3JhbSE6IGFueTtcclxuICBzZWFyY2hTdHJpbmc6IHN0cmluZyA9ICcnO1xyXG4gIGNhdGVnb3J5U2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycgPVxyXG4gICAgJ3JlZ3VsYXRpb25zJztcclxuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICBjYXRlZ29yeUxpc3Q6IGFueVtdID0gW107XHJcbiAgYmxvY2tXaWR0aDogYW55O1xyXG5cclxuICBwcm9ncmFtVHlwZU9iamVjdCA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiAxLFxyXG4gICAgc3RhbmRhcmRzOiAyLFxyXG4gICAgaW50ZXJuYWxfY29udHJvbHM6IDMsXHJcbiAgICBvdGhlcnM6IDAsXHJcbiAgfTtcclxuXHJcbiAgZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wUHJpbWFyeVByb2dyYW06IGFueSA9IHt9O1xyXG4gIHByaW1hcnlDb25maXJtYXRpb25NZXNzYWdlOiBzdHJpbmcgPSBgT25jZSBjb25maXJtZWQsIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBjaGFuZ2VkLiBIZW5jZSwgYWxsIHRoZSBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIG5ldyA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gd2lsbCBub3cgYXBwbHkgdG8gdGhpcyByZXNwb25zaWJpbGl0eS5gO1xyXG4gIGlzUHJpbWFyeUNvbmZpcm1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzVW5jaGVja2VkUHJvZ3JhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUHJpbWFyeVVuY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkUHJvZ3JhbXNJZDogYW55ID0gW107XHJcbiAgcHJvZ3JhbUNvdW50TG9hZGVyID0gZmFsc2U7XHJcbiAgZGVwcmVjYXRlUHJpbWFyeVByb2dyYW1GbGFnID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBzYXZlU2VsZWN0ZWRQcm9ncmFtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXByZWNhdGVQcmltYXJ5UHJvZ3JhbUZsYWcgPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcclxuICAgICAgJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZydcclxuICAgICk7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgdGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdO1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcgfHwgdGhpcy5vcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpIHtcclxuICAgICAgICB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkPy5wdXNoKHRoaXMuY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgfVxyXG4gICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0/LnByb2dyYW1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnb3RoZXJzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3N0YW5kYXJkcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdpbnRlcm5hbF9jb250cm9scyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtKSB7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVDYXRlZ29yaWVzKCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdPy5faWQpO1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0NvdW50KCk7XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0ge1xyXG4gICAgICBwcm9ncmFtczogdGhpcy5jdXJyZW50UHJvZ3JhbSxcclxuICAgICAgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoXHJcbiAgICAgICAgPyBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyldXHJcbiAgICAgICAgOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wcmVzZXJ2ZVByZXZpb3VzRGV0YWlscygpO1xyXG4gIH1cclxuICBwb3B1bGF0ZUNhdGVnb3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtLl9pZCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1BhZ2luYXRpb24nLCBmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUlkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3JlcG9ydElkJywgdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZVxyXG4gICAgICAuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IGFsbENhdGVnb3JpZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmluY2x1ZGVzKGVsZS5jYXRlZ29yeV9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KHsgc2VhcmNoOiB0cnVlIH0pO1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zQ291bnQoeyBzZWFyY2g6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhdGVnb3J5U2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nICE9IGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyA9IGV2ZW50O1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KHsgc2VhcmNoOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0UHJvZ3JhbShldmVudDogYW55LCBwcm9ncmFtOiBhbnkpIHtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhldmVudCwgcHJvZ3JhbSk7XHJcbiAgICAvLyB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGV2ZW50LCBwcm9ncmFtPy5wcm9ncmFtVHlwZSk7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgaWYgKCF0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRQcm9ncmFtID8/IHt9KS5sZW5ndGhcclxuICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgOiAodGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgICAgIC8vIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBldmVudCBpcyB0cnVlLCB0aGVuIHB1c2ggdGhlIHByb2dyYW0gdG8gdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkuIElmIHRoZSBldmVudCBpc1xyXG4gICAqIGZhbHNlLCB0aGVuIHJlbW92ZSB0aGUgcHJvZ3JhbSBmcm9tIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIGJvb2xlYW5cclxuICAgKiBAcGFyYW0ge2FueX0gcHJvZ3JhbSAtIGFueSA9IHtcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZFByb2dyYW1zKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4T2ZQcm9ncmFtID09PSAtMSAmJiBPYmplY3Qua2V5cyhwcm9ncmFtKT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnB1c2gocHJvZ3JhbT8uX2lkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnB1c2gocHJvZ3JhbSk7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleE9mUHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uZmluZEluZGV4KFxyXG4gICAgICAgIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNwbGljZShpbmRleE9mUHJvZ3JhbSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWwgPT09IHByb2dyYW0/Ll9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW5kZXhPZklkICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5zcGxpY2UoaW5kZXhPZklkLCAxKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gdGhpcy5wcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZSA9ICdZb3UgY2Fubm90IGRlc2VsZWN0IHRoaXMgUHJvZ3JhbSBzaW5jZSB0aGlzIGlzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuIFRvIHByb2NlZWQsIGZpcnN0IHNlbGVjdCBhbm90aGVyIFByb2dyYW0gYXMgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPi4nO1xyXG4gICAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPSBKU09OLnN0cmluZ2lmeShwcm9ncmFtKTtcclxuICAgICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQsIHByb2dyYW0/LnByb2dyYW1UeXBlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCAmJiAhdGhpcy5jdXJyZW50UHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWxbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgY3VycmVudFByb2dyYW0gaXMgc2V0LCB0aGVuIHNldCB0aGUgY3VycmVudFByb2dyYW0gdG8gdGhlIHByb2dyYW0gcGFzc2VkIGluLCBhbmQgc2V0IHRoZVxyXG4gICAqIHRlbXBQcmltYXJ5UHJvZ3JhbSB0byB0aGUgY3VycmVudFByb2dyYW0uXHJcbiAgICogSWYgdGhlIGN1cnJlbnRQcm9ncmFtIGlzIG5vdCBzZXQsIHRoZW4gc2V0IHRoZSBjdXJyZW50UHJvZ3JhbSB0byB0aGUgcHJvZ3JhbSBwYXNzZWQgaW4uXHJcbiAgICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBjaGVja2JveFxyXG4gICAqIEBwYXJhbSB7YW55fSBwcm9ncmFtIC0gdGhlIHByb2dyYW0gdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIHNldFByaW1hcnlQcm9ncmFtKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgY29uc3QgY3VycmVudFRlbXAgPSB0aGlzLmN1cnJlbnRQcm9ncmFtO1xyXG4gICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRUZW1wKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBwcm9ncmFtKTtcclxuICAgICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByaW1hcnlDb25maXJtYXRpb25NZXNzYWdlID1cclxuICAgICAgICAnT25jZSBjb25maXJtZWQsIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBjaGFuZ2VkLiBIZW5jZSwgYWxsIHRoZSBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIG5ldyA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gd2lsbCBub3cgYXBwbHkgdG8gdGhpcyByZXNwb25zaWJpbGl0eS4nO1xyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQgJiYgIXRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBwcm9ncmFtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSB1c2VyIGNsaWNrcyBcIlllc1wiIG9uIHRoZSBjb25maXJtYXRpb24gbW9kYWwsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIHRoZSBwcm9ncmFtIGZyb21cclxuICAgKiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSBhbmQgdGhlIHNlbGVjdGVkUHJvZ3JhbXNJZCBhcnJheS4gSWYgdGhlIHVzZXIgY2xpY2tzIFwiTm9cIiBvbiB0aGVcclxuICAgKiBjb25maXJtYXRpb24gbW9kYWwsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgZG8gbm90aGluZy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50IC0gYm9vbGVhbiAtJmd0OyB0aGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY2hlY2tib3hcclxuICAgKi9cclxuICB1cGRhdGVQcmltYXJ5UHJvZ3JhbShldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50ICYmIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICBlbD8uY2F0ZWdvcnlfaWQgPT09XHJcbiAgICAgICAgICBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KT8uY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4T2ZQcm9ncmFtICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc3BsaWNlKGluZGV4T2ZQcm9ncmFtLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleE9mSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uZmluZEluZGV4KFxyXG4gICAgICAgIChlbDogYW55KSA9PiBlbCA9PT0gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSk/Ll9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW5kZXhPZklkICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5zcGxpY2UoaW5kZXhPZklkLCAxKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0ge307XHJcbiAgICB9IGVsc2UgaWYgKCFldmVudCAmJiB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoXHJcbiAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pXHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoXHJcbiAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KVxyXG4gICAgICAgIDoge307XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50KSB7XHJcbiAgICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA/IHt9IDogSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhcclxuICAgICAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoXHJcbiAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pXHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY3VycmVudFByaW1hcnkgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRQcm9ncmFtKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9O1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoZmFsc2UsIEpTT04ucGFyc2UoY3VycmVudFByaW1hcnkpPz8ge30pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModHJ1ZSwgSlNPTi5wYXJzZShjdXJyZW50UHJpbWFyeSkgPz8ge30pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0/Lmxlbmd0aFxyXG4gICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSlcclxuICAgICAgICA6IHt9O1xyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbENhdGVnb3JpZXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA8IDIpIHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5kYXRhLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGVsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUlkKSB7XHJcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsIHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZVxyXG4gICAgICAgICAgLmdldFByb2dyYW1zTGlzdChwYXJhbXMsIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFsbENhdGVnb3JpZXMgPSByZXMuZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgYWxsQ2F0ZWdvcmllcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGggPT1cclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxSZWNvcmRzXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICdjaGVja2VkJztcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICd1bmNoZWNrZWQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5DYXRlZ29yaWVzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IGlzU3ViUHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc29tZShcclxuICAgICAgKGVsOiBhbnkpID0+IGVsPy5jaGlsZF9pZD8ubGVuZ3RoXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucG9wdWxhdGVDYXRlZ29yaWVzKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aCB8fCBpc1N1YlByb2dyYW0pIHtcclxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Qcm9ncmFtcygpIHtcclxuICAgIGlmICghdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uX2lkID09IHRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXHJcbiAgICAgICAgICAuLi5uZXcgU2V0KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzKSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUYWIoXHJcbiAgICB0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycydcclxuICApIHtcclxuICAgIHRoaXMucHJvZ3JhbVN1YlRhYiA9ICdQUk9HUkFNUyc7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHR5cGU7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNDb3VudCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnY2F0ZWdvcnknIHwgJ3Byb2dyYW0nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcclxuICAgICAgJ3Byb2dyYW1UeXBlJyxcclxuICAgICAgdGhpcy5wcm9ncmFtVHlwZU9iamVjdFt0aGlzLmFjdGl2ZVRhYl1cclxuICAgICk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSk7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtU3ViVGFiID09PSAnT1RIRVJfUFJPR1JBTVMnKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzVmlld09ubHlQcm9ncmFtcycsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLCB0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzLkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsT3RoZXJzUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxPdGhlcnNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzLkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50ID1cclxuICAgICAgICAgIHJlcy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxQcm9ncmFtc0NvdW50ID0gcmVzPy5BbGxQcm9ncmFtc0NvdW50XHJcbiAgICAgICAgICA/IHJlcz8uQWxsUHJvZ3JhbXNDb3VudFxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsVmlld09ubHlQcm9ncmFtQ291bnQgPSByZXM/LkFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50XHJcbiAgICAgICAgICA/IHJlcz8uQWxsVmlld09ubHlQcm9ncmFtQ291bnRcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtc0NvdW50KHBhcmFtc09iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtVHlwZScsIHRoaXMucHJvZ3JhbVR5cGVPYmplY3RbdGhpcy5hY3RpdmVUYWJdKTtcclxuICAgIGlmIChwYXJhbXNPYmplY3Q/LnNlYXJjaCB8fCB0aGlzLnNlYXJjaFN0cmluZykge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsIHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3RDb3VudChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbVRhYkRhdGFDb3VudC5hbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9XHJcbiAgICAgICAgICByZXM/LkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbVRhYkRhdGFDb3VudC5hbGxTdGFuZGFyZFByb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzPy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID1cclxuICAgICAgICAgIHJlcz8uQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbE90aGVyc1Byb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzPy5BbGxPdGhlcnNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvdW50TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvdW50TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHM6IGFueVtdID0gW107XHJcbiAgZ2V0Q2F0ZWdvcmllc0xpc3QocXVlcnlPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0/Ll9pZCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTm8nLCB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSk7XHJcbiAgICBpZiAocXVlcnlPYmplY3Q/LnNlYXJjaCB8fCB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLCB0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXHJcbiAgICAgIC5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCldKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmZyb20gPSByZXMuZnJvbTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvID0gcmVzLnRvO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsUmVjb3JkcztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWJDYXRlZ29yeUlkcyA9IHJlcz8uc2VsZWN0ZWRTdWJDYXRlZ29yeUlkcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgID8gcmVzPy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9ncmFtKCkge31cclxuXHJcbiAgc2VsZWN0Q2F0ZWdvcnkobW9kZTogYW55LCBjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZiAobW9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleChcclxuICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleChcclxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZSA9PSBjYXRlZ29yeT8uY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2F0ZWdvcmllcyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWRcclxuICAgICk7XHJcbiAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBldmVudC5jYXRlZ29yeV9pZFxyXG4gICAgKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFByb2dyYW0gPSB0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0/Lmxlbmd0aFxyXG4gICAgICA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtKVxyXG4gICAgICA6IHt9O1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9ncmFtc0lkID0gdGhpcy5wcmVzZXJ2ZWRQcm9ncmFtc0lkPy5sZW5ndGhcclxuICAgICAgPyBKU09OLnBhcnNlKHRoaXMucHJlc2VydmVkUHJvZ3JhbXNJZClcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBzZWxlY3RlZFByb2dyYW1zRGV0YWlsID0gdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zPy5sZW5ndGhcclxuICAgICAgPyBKU09OLnBhcnNlKHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcylcclxuICAgICAgOiBbXTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtPy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zPy5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7XHJcbiAgICAgICAgcHJvZ3JhbTogY3VycmVudFByb2dyYW0sXHJcbiAgICAgICAgY2F0ZWdvcmllczogSlNPTi5wYXJzZSh0aGlzLnRlbXBTZWxlY3RlZENhdGVnb3JpZXMpLFxyXG4gICAgICAgIGxpbmtlZFByb2dyYW06IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoe3Byb2dyYW06IGN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkSWRzLCBsaW5rZWRQcm9ncmFtOiBzZWxlY3RlZFByb2dyYW1zRGV0YWlsICB9KTtcclxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhpZGVQcm9ncmFtc0xpc3QgJiYgZmFsc2UpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENhdGVnb3J5SWRzID0gdGhpcy5zZWxlY3RlZElkcy5jb25jYXQoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHtcclxuICAgICAgICBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICAgIGNhdGVnb3JpZXM6IFsuLi5uZXcgU2V0KHNlbGVjdGVkQ2F0ZWdvcnlJZHMpXSxcclxuICAgICAgICBsaW5rZWRQcm9ncmFtOiB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwsXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlJZHMgPSB0aGlzLnNlbGVjdGVkSWRzLmNvbmNhdChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoe1xyXG4gICAgICAgIHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sXHJcbiAgICAgICAgY2F0ZWdvcmllczogWy4uLm5ldyBTZXQoc2VsZWN0ZWRDYXRlZ29yeUlkcyldLFxyXG4gICAgICAgIGxpbmtlZFByb2dyYW06IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IGV2ZW50Py5jYXRlZ29yeV9pZFxyXG4gICAgKTtcclxuICAgIGlmIChpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zcGxpY2UoaW5kZXhPZlByb2dyYW0sIDEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsID09PSBldmVudD8uX2lkXHJcbiAgICApO1xyXG4gICAgaWYgKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gZXZlbnQ/Ll9pZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgLy9BcyB0aGlzIGlzIGEgcmFkaW8gbGlzdCBhbmQgb25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgdGhhdHMgd2h5IHdlIGFyZSByZXNldHRpbmcgYWxsIHRoZSBjb3VudHMgdG8gemVyb1xyXG4gICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChmYWxzZSwgZXZlbnQ/LnByb2dyYW1UeXBlKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGV2ZW50PzogYm9vbGVhbiwgcHJvZ3JhbVR5cGU/OiBudW1iZXIpIHtcclxuICAgIC8vIHN3aXRjaCAodGhpcy5jdXJyZW50UHJvZ3JhbS5wcm9ncmFtVHlwZSkge1xyXG4gICAgc3dpdGNoIChwcm9ncmFtVHlwZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZXZlbnRcclxuICAgICAgICAgID8gdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQrK1xyXG4gICAgICAgICAgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZXZlbnRcclxuICAgICAgICAgID8gdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50KytcclxuICAgICAgICAgIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBldmVudFxyXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50KytcclxuICAgICAgICAgIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgZXZlbnRcclxuICAgICAgICAgID8gdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50KytcclxuICAgICAgICAgIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtIGFycmF5IGhhcyBhIGxlbmd0aCwgdGhlbiBwcmVzZXJ2ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgYXMgdGhlXHJcbiAgICogcHJlc2VydmVQcmltYXJ5UHJvZ3JhbSB2YXJpYWJsZS4gT3RoZXJ3aXNlLCBzZXQgdGhlIHByZXNlcnZlUHJpbWFyeVByb2dyYW0gdmFyaWFibGUgdG8gYW4gZW1wdHlcclxuICAgKiBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0lkIGFycmF5IGhhcyBhIGxlbmd0aCwgdGhlbiBwcmVzZXJ2ZSB0aGUgYXJyYXkgYXMgdGhlIHByZXNlcnZlZFByb2dyYW1zSWRcclxuICAgKiB2YXJpYWJsZS4gT3RoZXJ3aXNlLCBzZXQgdGhlIHByZXNlcnZlZFByb2dyYW1zSWQgdmFyaWFibGUgdG8gYW4gZW1wdHkgYXJyYXkuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGFycmF5IGFzIHRoZVxyXG4gICAqIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMgdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zIHZhcmlhYmxlIHRvIGFuXHJcbiAgICogZW1wdHkgYXJyYXkuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtIGFycmF5IGRvZXMgbm90IGhhdmUgYSBsZW5ndGgsIHRoZW4gc2V0IHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IHRvXHJcbiAgICogYW4gZW1wdHkgYXJyYXkgYW5kIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkgdG8gYW4gZW1wdHkgYXJyYXkuXHJcbiAgICovXHJcbiAgcHJlc2VydmVQcmV2aW91c0RldGFpbHMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0/Lmxlbmd0aCB8fCB0aGlzLmN1cnJlbnRQcm9ncmFtKSB7XHJcbiAgICAgIHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5sZW5ndGhcclxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdKVxyXG4gICAgICAgIDoge307XHJcbiAgICAgIHRoaXMucHJlc2VydmVkUHJvZ3JhbXNJZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5sZW5ndGhcclxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkKVxyXG4gICAgICAgIDogW107XHJcbiAgICAgIHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbFxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsKVxyXG4gICAgICAgIDogW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2dyYW1TdWJUYWI6ICdQUk9HUkFNUycgfCAnT1RIRVJfUFJPR1JBTVMnID0gJ1BST0dSQU1TJztcclxuICBzZXRQcm9ncmFtU3ViVGFiKHRhYjogJ1BST0dSQU1TJyB8ICdPVEhFUl9QUk9HUkFNUycpIHtcclxuICAgIHRoaXMucHJvZ3JhbVN1YlRhYiA9IHRhYjtcclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmdcIiBbY2xhc3MuYW5pbWF0ZV09XCJhbmltYXRpb25cIiAqbmdJZj1cIiFzaG93Q2F0ZWdvcmllcyAmJiAhaGlkZVByb2dyYW1zTGlzdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1oZWFkIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBsLTQgdngtcHItNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xNCB2eC1mdy01MDAgdngtbGFiZWwtdHh0XCI+U2VsZWN0IGEgUHJvZ3JhbTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNhcmQtcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZCB2eC1iZy13aGl0ZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlciB2eC1wdC0yIHZ4LXBiLTIgdngtcGwtMyB2eC1wci0zIHZ4LXctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT0gJ3JlZ3VsYXRpb25zJ1wiIChjbGljayk9XCJjaGFuZ2VUYWIoJ3JlZ3VsYXRpb25zJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyXCI+UkVHVUxBVElPTlM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicHJvZ3JhbURhdGE/LlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9ncmFtRGF0YT8uU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50PT0xKT8nUHJvZ3JhbSc6J1Byb2dyYW1zJ319IHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbURhdGE/LkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50fX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtVGFiRGF0YUNvdW50Py5hbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAnc3RhbmRhcmRzJ1wiIChjbGljayk9XCJjaGFuZ2VUYWIoJ3N0YW5kYXJkcycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlclwiPlNUQU5EQVJEUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9ncmFtRGF0YT8uU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQ+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9ncmFtRGF0YT8uU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyhwcm9ncmFtRGF0YT8uU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQ9PTEpPydQcm9ncmFtJzonUHJvZ3JhbXMnfX0gc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtRGF0YT8uQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50fX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtVGFiRGF0YUNvdW50Py5hbGxTdGFuZGFyZFByb2dyYW1zQ291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZCB2eC1iZy13aGl0ZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlciB2eC1wdC0yIHZ4LXBiLTIgdngtcGwtMyB2eC1wci0zIHZ4LXctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT0gJ2ludGVybmFsX2NvbnRyb2xzJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVGFiKCdpbnRlcm5hbF9jb250cm9scycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlclwiPklOVEVSTkFMIENPTlRST0xTPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInByb2dyYW1EYXRhPy5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50PiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZ3JhbURhdGE/LlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyhwcm9ncmFtRGF0YT8uU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudD09MSk/J1Byb2dyYW0nOidQcm9ncmFtcyd9fSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1EYXRhPy5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudH19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbVRhYkRhdGFDb3VudD8uYWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZCB2eC1iZy13aGl0ZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlciB2eC1wdC0yIHZ4LXBiLTIgdngtcGwtMyB2eC1wci0zIHZ4LXctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT0gJ290aGVycydcIiAoY2xpY2spPVwiY2hhbmdlVGFiKCdvdGhlcnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2UgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1hbGlnbi1jZW50ZXJcIj5PVEhFUlM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicHJvZ3JhbURhdGE/LlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2dyYW1EYXRhPy5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyhwcm9ncmFtRGF0YT8uU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50PT0xKT8nUHJvZ3JhbSc6J1Byb2dyYW1zJ319IHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbURhdGE/LkFsbE90aGVyc1Byb2dyYW1zQ291bnR9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1UYWJEYXRhQ291bnQ/LmFsbE90aGVyc1Byb2dyYW1zQ291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ibG9ja1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICNzZWFyY2hQcm9ncmFtIChrZXl1cC5lbnRlcik9XCJoYW5kbGVTZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUHJvZ3JhbXNcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gbW9kZSA9PT0gJ0VESVQnIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnRURJVCcgJiYgcHJvZ3JhbURhdGE/LkFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50XCIgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctdGFiIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0UHJvZ3JhbVN1YlRhYignUFJPR1JBTVMnKVwiIGNsYXNzPVwidngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIiBbY2xhc3MuYWN0aXZlXT1cInByb2dyYW1TdWJUYWIgPT09ICdQUk9HUkFNUydcIj5QUk9HUkFNUyA8c3BhbiBjbGFzcz1cImNvdW50IHZ4LXBsLTEgdngtcHItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW1sLTIgdngtbGgtNFwiPnt7cHJvZ3JhbURhdGE/LkFsbFByb2dyYW1zQ291bnR9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0UHJvZ3JhbVN1YlRhYignT1RIRVJfUFJPR1JBTVMnKVwiIGNsYXNzPVwidngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIiBbY2xhc3MuYWN0aXZlXT1cInByb2dyYW1TdWJUYWIgPT09ICdPVEhFUl9QUk9HUkFNUydcIj5PVEhFUiBQUk9HUkFNUyA8c3BhbiBjbGFzcz1cImNvdW50IHZ4LXBsLTEgdngtcHItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW1sLTIgdngtbGgtNFwiPnt7cHJvZ3JhbURhdGE/LkFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50fX08L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGFwcC1wYWdpbmF0aW9uICpuZ0lmPVwicHJvZ3JhbURhdGEudG90YWxQYWdlcyA+IDFcIiBbc3RhcnRdPVwicHJvZ3JhbURhdGEuZnJvbVwiIFtlbmRdPVwicHJvZ3JhbURhdGEudG9cIiBbdG90YWxdPVwicHJvZ3JhbURhdGEudG90YWxSZWNvcmRzXCIgW3BhZ2VDb3VudF09XCJwcm9ncmFtRGF0YS50b3RhbFBhZ2VzXCIgW2N1cnJlbnRQYWdlXT1cInByb2dyYW1EYXRhLmN1cnJlbnRQYWdlXCIgKHNlbGVjdGVkUGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudCwncHJvZ3JhbScpXCI+PC9hcHAtcGFnaW5hdGlvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLXBhcnQgdngtbWItNFwiIFtjbGFzcy53aXRoLWNhdGVnb3J5LWxpc3RdPVwiIXNob3dDYXRlZ29yaWVzICYmICFoaWRlUHJvZ3JhbXNMaXN0XCIgW2NsYXNzLndpdGgtcGFnaW5hdGlvbl09XCJwcm9ncmFtRGF0YS50b3RhbFBhZ2VzID4gMVwiPlxyXG4gICAgICAgICAgICA8YXBwLW5vLWRhdGEgKm5nSWY9XCJwcm9ncmFtRGF0YT8uZGF0YT8ubGVuZ3RoPT09MCAmJiAhbG9hZGVyXCJcclxuICAgICAgICAgICAgICAgIFtub0RhdGFJbWFnZV09XCInaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NlYXJjaC1kYXRhLnN2ZydcIlxyXG4gICAgICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiJ05vIERhdGEgRm91bmQnXCI+PC9hcHAtbm8tZGF0YT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctaXRlbVwiIFtjbGFzcy5hY3RpdmVdPVwic2hvd0NhdGVnb3JpZXMgJiYgY3VycmVudFByb2dyYW0/Ll9pZCA9PSBwcm9ncmFtPy5faWRcIiAqbmdGb3I9XCJsZXQgcHJvZ3JhbSBvZiBwcm9ncmFtRGF0YS5kYXRhO2xldCBpID0gaW5kZXhcIiBbY2xhc3MuZmluYWwtc2VsZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGFmdGVyIGNhdGVnb3J5IHdhcyBzZWxlY3QgJiB1c2VyIG1vdmUgdG8gYmFjayBhbmQgZWRpdCB0aGVuIGZpbmFsLXNlbGVjdCBjbGFzcyB3YXMgc2hvdyAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gW2NsYXNzLmRpc2FibGVkXT1cImN1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZCAmJiAobW9kZSA9PT0gJ0VESVQnIHx8IG9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJykgJiYgcHJvZ3JhbVN1YlRhYiAhPT0gJ09USEVSX1BST0dSQU1TJ1wiIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvdyBtYWluLWxpc3RcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkUHJvZ3JhbXNJZD8uaW5jbHVkZXMocHJvZ3JhbT8uX2lkKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJmZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpID8gZmFsc2UgOiAoY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSAmJiBwcm9ncmFtU3ViVGFiICE9PSAnT1RIRVJfUFJPR1JBTVMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gc2VyaWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzci1ub1wiIFthcHBUb29sdGlwXT1cImkrcHJvZ3JhbURhdGEuZnJvbVwiIHBsYWNlbWVudD1cImJvdHRvbVwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj57e2krcHJvZ3JhbURhdGEuZnJvbX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cImN1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZCAmJiAobW9kZSA9PT0gJ0VESVQnIHx8IG9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJylcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9ncmFtU3ViVGFiICE9PSAnT1RIRVJfUFJPR1JBTVMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpID8gZmFsc2UgOiAoY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwic2VsZWN0ZWRQcm9ncmFtc0lkPy5pbmNsdWRlcyhwcm9ncmFtPy5faWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdFByb2dyYW0oJGV2ZW50LHByb2dyYW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNzLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtY3MtcmFkaW8gW25hbWVdPVwiJ3QnXCIgW2NoZWNrZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PSBwcm9ncmFtPy5faWRcIiAoY2hlY2tlZEV2ZW50KT1cInNlbGVjdFByb2dyYW0oJGV2ZW50LnRhcmdldC5jaGVja2VkLHByb2dyYW0pXCI+PC9hcHAtY3MtcmFkaW8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtd2l0aC1jb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cInByb2dyYW0/Lml0ZW1fbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e3Byb2dyYW0/Lm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gcHJpbWFyeS1wcm9ncmFtXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKG1vZGUgPT09ICdFRElUJyB8fCBvcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpIHx8IGN1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPSdjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNldFByaW1hcnlQcm9ncmFtKCRldmVudCwgcHJvZ3JhbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7Y3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkID8gJ1BSSU1BUlkgUFJPR1JBTScgOiAnU0VUIEFTIFBSSU1BUlkgUFJPR1JBTSd9fTwvYXBwLWNzLXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYXJyb3dcIiAqbmdJZj1cInByb2dyYW0/LmNoaWxkX2lkPy5sZW5ndGhcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiEoc2hvd0NhdGVnb3JpZXMgJiYgY3VycmVudFByb2dyYW0/Ll9pZCA9PSBwcm9ncmFtPy5faWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvZ3JhbSgkZXZlbnQscHJvZ3JhbSlcIiBjbGFzcz1cImljb25zXCI+JiN4ZTk3MDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInNob3dDYXRlZ29yaWVzICYmIGN1cnJlbnRQcm9ncmFtPy5faWQgPT0gcHJvZ3JhbT8uX2lkXCIgY2xhc3M9XCJpY29uc1wiPiYjeGU5ZTg7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YXBwLWZsb2F0aW5nLWJhciAqbmdJZj1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIiBbc2VsZWN0ZWREYXRhXT1cIihzZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5sZW5ndGgpID8gc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA6IFtdXCIgW2Rpc3BsYXlFbGVtZW50S2V5XT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgIFtzaW5ndWxhclRleHRdPVwiJ1Byb2dyYW0gc2VsZWN0ZWQnXCIgW3BsdXJhbFRleHRdPVwiJ1Byb2dyYW1zIHNlbGVjdGVkJ1wiIChjbG9zZUV2ZW50KT1cIm9wZW5DYXRlZ29yaWVzKClcIlxyXG4gICAgICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlRXZlbnQoJGV2ZW50KVwiIFtpc0Rpc2FibGVkXT1cIigoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdKT8ubGVuZ3RoID8gZmFsc2UgOnRydWVcIiAoY2xvc2VMaXN0KT1cImNsb3NlKClcIiBbZWxlbWVudElkXT1cIidjYXRlZ29yeV9pZCdcIj5cclxuICAgICAgICA8L2FwcC1mbG9hdGluZy1iYXI+XHJcblxyXG4gICAgICAgIDxhcHAtZmxvYXRpbmctYmFyICpuZ0lmPVwiIWZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIiBbc2VsZWN0ZWREYXRhXT1cIihzZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5sZW5ndGgpID8gc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA6IFtdXCIgW2Rpc3BsYXlFbGVtZW50S2V5XT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgIFtzaW5ndWxhclRleHRdPVwiJ1Byb2dyYW0gc2VsZWN0ZWQnXCIgW3BsdXJhbFRleHRdPVwiJ1Byb2dyYW1zIHNlbGVjdGVkJ1wiIChjbG9zZUV2ZW50KT1cIm9wZW5DYXRlZ29yaWVzKClcIlxyXG4gICAgICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlRXZlbnQoJGV2ZW50KVwiIFtpc0Rpc2FibGVkXT1cIigoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdKT8ubGVuZ3RoID8gZmFsc2UgOnRydWVcIiAoY2xvc2VMaXN0KT1cImNsb3NlKClcIiBbZGVmYXVsdFNlbGVjdGVkXT1cImN1cnJlbnRQcm9ncmFtXCIgW25vblJlbW92YWJsZVVzZXJzTGlzdF09XCIobW9kZSA9PT0gJ0VESVQnIHx8IG9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJykgPyB2aWV3T25seVByb2dyYW1zQ2F0ZWdvcnlJZCA6IFtjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWRdXCIgW2VsZW1lbnRJZF09XCInY2F0ZWdvcnlfaWQnXCI+XHJcbiAgICAgICAgPC9hcHAtZmxvYXRpbmctYmFyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWNvbmZpcm1hdGlvblwiICpuZ0lmPVwiZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJsb2NrXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5PbmNlIHlvdSBzZWxlY3QgdGhpcyBQcm9ncmFtLCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZ3JhbSB3aWxsIGFsc28gYmUgdXBkYXRlZC48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwic2F2ZUNoYW5nZXMoZmFsc2UpXCI+Tk88L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJzYXZlQ2hhbmdlcyh0cnVlKVwiPllFUzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctY29uZmlybWF0aW9uXCIgKm5nSWY9XCJpc1ByaW1hcnlDb25maXJtYXRpb24gJiYgIWlzUHJpbWFyeVVuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tYmxvY2tcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiIFtpbm5lckhUTUxdPVwicHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2VcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwidXBkYXRlUHJpbWFyeVByb2dyYW0oZmFsc2UpXCI+Tk88L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJ1cGRhdGVQcmltYXJ5UHJvZ3JhbSh0cnVlKVwiPllFUzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWNvbmZpcm1hdGlvbiBlcnJvci1jb25maXJtYXRpb25cIiAqbmdJZj1cImlzUHJpbWFyeVVuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCB2eC1wci00XCI+WW91IGNhbm5vdCBkZXNlbGVjdCB0aGlzIFByb2dyYW0gc2luY2UgdGhpcyBpcyB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5LiBUbyBwcm9jZWVkLCBmaXJzdCBzZWxlY3QgYW5vdGhlciBQcm9ncmFtIGFzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJvay1idG5cIiAoY2xpY2spPVwidXBkYXRlUHJpbWFyeVByb2dyYW0oZmFsc2UpXCI+T0s8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gPGFwcC1mbG9hdGluZy1iYXIgW3NlbGVjdGVkRGF0YV09XCIoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdXCIgW2Rpc3BsYXlFbGVtZW50S2V5XT1cIiduYW1lJ1wiXHJcbiAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwib3BlbkNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50KCRldmVudClcIiBbaXNEaXNhYmxlZF09XCIoKGN1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZCk/W2N1cnJlbnRQcm9ncmFtXTpbXSk/Lmxlbmd0aCA/IGZhbHNlIDp0cnVlIFwiIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiPlxyXG4gICAgPC9hcHAtZmxvYXRpbmctYmFyPiAtLT5cclxuXHJcbiAgICA8IS0tICgoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdKT8ubGVuZ3RoID8gZmFsc2UgOnRydWUgIC0tPlxyXG5cclxuICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZ1wiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGlvblwiICpuZ0lmPVwic2hvd0NhdGVnb3JpZXMgfHwgaGlkZVByb2dyYW1zTGlzdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1oZWFkIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBsLTQgdngtcHItNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xNCB2eC1mdy01MDAgdngtbGFiZWwtdHh0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJiYWNrLWJ0biB2eC1mcy0xNiB2eC1wLTAgdngtbXItMlwiIChjbGljayk9XCJiYWNrVG9Qcm9ncmFtcygpXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWQ7PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiY3VycmVudFByb2dyYW0/Lm5hbWVcIj4ge3tjdXJyZW50UHJvZ3JhbT8ubmFtZX19ID4gPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgIFByb2dyYW0gID4gIFNlbGVjdCBQcm9ncmFtIENhdGVnb3JpZXNcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ibG9ja1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICNzZWFyY2hDYXRlZ29yeSAoa2V5dXAuZW50ZXIpPVwiY2F0ZWdvcnlTZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ2F0ZWdvcmllc1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGFwcC1wYWdpbmF0aW9uICpuZ0lmPVwiY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXMgPiAxXCIgY2xhc3M9XCJjYXRlZ29yeS1wYWdpbmF0aW9uXCIgW3N0YXJ0XT1cImNhdGVnb3J5RGF0YS5mcm9tXCIgW2VuZF09XCJjYXRlZ29yeURhdGEudG9cIiBbdG90YWxdPVwiY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3Jkc1wiIFtwYWdlQ291bnRdPVwiY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXNcIiBbY3VycmVudFBhZ2VdPVwiY2F0ZWdvcnlEYXRhLmN1cnJlbnRQYWdlXCIgKHNlbGVjdGVkUGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudCwnY2F0ZWdvcnknKVwiPjwvYXBwLXBhZ2luYXRpb24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1wYXJ0IHZ4LW1iLTRcIiBbY2xhc3Mud2l0aC1jYXRlZ29yeS1wYWdpbmF0aW9uXT1cImNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzID4gMVwiPlxyXG4gICAgICAgICAgICA8YXBwLW5vLWRhdGEgKm5nSWY9XCJjYXRlZ29yeURhdGE/LmRhdGE/Lmxlbmd0aD09PTAgJiYgIWxvYWRlclwiIFtub0RhdGFJbWFnZV09XCInaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NlYXJjaC1kYXRhLnN2ZydcIiBbbm9EYXRhVGV4dF09XCInTm8gRGF0YSBGb3VuZCdcIj48L2FwcC1uby1kYXRhPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkZXIgJiYgY2F0ZWdvcnlEYXRhLmRhdGE/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWFyZWFcIiAqbmdJZj1cIiFsb2FkZXIgJiYgKGN1cnJlbnRQcm9ncmFtPy5uYW1lID8gY2F0ZWdvcnlEYXRhLmRhdGE/Lmxlbmd0aCA6IHByb2dyYW1EYXRhPy5kYXRhPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3ggKm5nSWY9XCJjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKT09J2NoZWNrZWQnXCIgW25nVmFsdWVdPVwidHJ1ZVwiIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbENhdGVnb3JpZXMoZmFsc2UpXCI+RGVzZWxlY3QgQWxsPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAqbmdJZj1cImNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpPT0naW5kZXRlcm1pbmF0ZSdcIiBbbmdWYWx1ZV09XCJ0cnVlXCIgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsQ2F0ZWdvcmllcyhmYWxzZSlcIj5EZXNlbGVjdCBBbGw8L2FwcC1jcy1jaGVja2JveC1pbmRldGVybWluYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94ICpuZ0lmPVwiY2hlY2tDYXRlZ29yaWVzU2VsZWN0aW9uKCk9PSd1bmNoZWNrZWQnXCIgW25nVmFsdWVdPVwiZmFsc2VcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxDYXRlZ29yaWVzKHRydWUpXCI+U2VsZWN0IEFsbDwvYXBwLWNzLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBzZXJpYWxcIj4jPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY2F0ZWdvcnktbmFtZVwiPkNBVEVHT1JJRVM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjYXRlZ29yeS13aXRoaW5cIj5XSVRISU48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJzdWJMaXN0XCIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3J5RGF0YS5kYXRhO2xldCBpID0gaW5kZXhcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGNhdGVnb3J5LmNhdGVnb3J5X2lkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3cgbWFpbi1saXN0XCIgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gc2VyaWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itbm9cIiBbYXBwVG9vbHRpcF09XCJpICsgY2F0ZWdvcnlEYXRhPy5mcm9tXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+e3tpICsgY2F0ZWdvcnlEYXRhPy5mcm9tfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3ggW25nVmFsdWVdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RDYXRlZ29yeSgkZXZlbnQsY2F0ZWdvcnkpXCI+PC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNhdGVnb3J5LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtd2l0aC1jb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeT8ubmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e2NhdGVnb3J5Py5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3aXRoaW4tcGFydFwiICpuZ0lmPVwiY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lPy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndpdGhpbi1ib3hcIj5XaXRoaW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCInU291dGggQWZyaWNhID4gQW1lcmljYSA+IEluZGlhJ1wiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBwYXJlbnQgb2YgY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lO2xldCBqPWluZGV4XCI+e3soaiE9KGNhdGVnb3J5Py5wYXJlbnRfY2F0ZWdvcnlfbmFtZT8ubGVuZ3RoLTEpKT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQrJyA8ICc6cGFyZW50fX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNhdGVnb3J5LXdpdGhpblwiICpuZ0lmPVwiY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYXJlbnQgb2YgY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lOyBsZXQgbGFzdCA9IGxhc3RcIiBjbGFzcz1cIndpdGhpbi1uYW1lXCIgW2FwcFRvb2x0aXBdPVwiY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lPy5zbGljZSgpPy5yZXZlcnNlKCk/LmpvaW4oJyA+ICcpXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7cGFyZW50fX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGFzdFwiPiA+Jm5ic3A7ICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X2lkcz8uaW5jbHVkZXMoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKSAmJiAhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiIGNsYXNzPVwicHJpbWFyeS1sYWJlbFwiPlBSSU1BUlk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxhcHAtZmxvYXRpbmctYmFyIFtzZWxlY3RlZERhdGFdPVwiY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllc1wiIFtkaXNwbGF5RWxlbWVudEtleV09XCInbmFtZSdcIlxyXG4gICAgICAgIFtzaW5ndWxhclRleHRdPVwiJ1Byb2dyYW0gQ2F0ZWdvcnkgc2VsZWN0ZWQnXCJcclxuICAgICAgICBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbSBDYXRlZ29yaWVzIHNlbGVjdGVkJ1wiIChjbG9zZUV2ZW50KT1cInNhdmUoKVwiXHJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KT1cInJlbW92ZUNhdGVnb3JpZXMoJGV2ZW50KVwiIChjbG9zZUxpc3QpPVwiYmFja1RvUHJvZ3JhbXMoKVwiPlxyXG4gICAgICAgIDwvYXBwLWZsb2F0aW5nLWJhcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1jb25maXJtYXRpb25cIiAqbmdJZj1cImRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+T25jZSB5b3Ugc2VsZWN0IHRoaXMgUHJvZ3JhbSwgYWxsIGRlZmF1bHQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2dyYW0gd2lsbCBhbHNvIGJlIHVwZGF0ZWQuPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj5BcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcHJvY2VlZD88L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm8tYnRuXCIgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKGZhbHNlKVwiPk5PPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInllcy1idG5cIiAoY2xpY2spPVwic2F2ZUNoYW5nZXModHJ1ZSlcIj5ZRVM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXI+XHJcbiA8L2Rpdj5cclxuIl19