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,1550 @@
1
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { Validators, } from '@angular/forms';
3
+ import { cloneDeep, isEqual } from 'lodash';
4
+ import { distinctUntilChanged, take } from 'rxjs';
5
+ import { CONSTANTS } from './constants';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "../workflow-services/programs.service";
9
+ import * as i3 from "../workflow-services/auth.service";
10
+ import * as i4 from "../workflow-services/ui-kit.service";
11
+ import * as i5 from "@vcomply/editor";
12
+ import * as i6 from "@angular/common";
13
+ import * as i7 from "../formgroup/cs-radio/cs-radio.component";
14
+ import * as i8 from "../ui-kit/tooltip/tooltip.directive";
15
+ import * as i9 from "../ui-kit/popover/popover.component";
16
+ import * as i10 from "../ui-kit/popover/popover.directive";
17
+ import * as i11 from "../sharedComponents/v-loader/loader-inline/loader-inline.component";
18
+ import * as i12 from "../ui-kit/smiley-dialog-inline/smiley-dialog-inline.component";
19
+ import * as i13 from "../ui-kit/popover-hover/popover-hover.component";
20
+ import * as i14 from "../ui-kit/popover-hover/popover-hover.directive";
21
+ import * as i15 from "./create-program-ui/tab-selector/tab-selector.component";
22
+ import * as i16 from "./create-program-ui/form-field/form-field.component";
23
+ import * as i17 from "./create-program-ui/file-pill/file-pill.component";
24
+ import * as i18 from "./create-program-ui/input-with-pill/input-with-pill.component";
25
+ import * as i19 from "./create-program-ui/cs-switch/cs-switch.component";
26
+ import * as i20 from "./create-program-ui/directives/input-trim.directive";
27
+ import * as i21 from "./create-program-ui/role-list/role-list.component";
28
+ import * as i22 from "./create-program-ui/user-group-list/user-group-list.component";
29
+ import * as i23 from "./create-program-ui/assessment-picker/assessment-picker.component";
30
+ import * as i24 from "./create-program-ui/custom-field/custom-field.component";
31
+ import * as i25 from "../sharedComponents/responsibility-centers-list/responsibility-centers-list.component";
32
+ import * as i26 from "../sharedComponents/framework-list/framework-list.component";
33
+ import * as i27 from "../sharedComponents/directive/scroll-in-view.directive";
34
+ import * as i28 from "./create-program-ui/pipes/list-to-id.pipe";
35
+ import * as i29 from "./create-program-ui/pipes/ref-disconnect.pipe";
36
+ import * as i30 from "./create-program-ui/pipes/assessment-resolver.pipe";
37
+ import * as i31 from "./create-program-ui/pipes/array-concat.pipe";
38
+ export class WorkflowProgramComponent {
39
+ constructor(fb, programService, authService, uiKitService, changeRef) {
40
+ this.fb = fb;
41
+ this.programService = programService;
42
+ this.authService = authService;
43
+ this.uiKitService = uiKitService;
44
+ this.changeRef = changeRef;
45
+ this.constants = CONSTANTS;
46
+ this.isAscentAllowed = false;
47
+ this.ff_rc_listing = false;
48
+ this.datePickerOverlay = false;
49
+ this.pickerChanged = new EventEmitter();
50
+ this.populateOption = new EventEmitter();
51
+ this.closeWorkflow = new EventEmitter();
52
+ this.showConfirmationAlert = new EventEmitter();
53
+ this.disconnectRefresh = new EventEmitter();
54
+ this.refreshForm = new EventEmitter();
55
+ this.hideElementsFromMoreOptions = new EventEmitter();
56
+ this.onRemovingRole = new EventEmitter();
57
+ this.disableElementsFromMoreOptions = new EventEmitter();
58
+ this.canFrameworkChange = true;
59
+ this.programSimplifyFlag = false;
60
+ // All Input fields
61
+ this.mode = '';
62
+ this.programId = '';
63
+ this.programType = 1;
64
+ this.panelTitleDefaultReviewer = 'Select Default Reviewer(s)';
65
+ this.panelTitleOwner = 'Select Owner(s)';
66
+ this.panelTitleReviewer = 'Select Reviewer(s)';
67
+ this.panelTitleAssignee = 'Select Assignee(s)';
68
+ this.panelTitleApprover = 'Select Approver';
69
+ this.isApproverDisabled = false;
70
+ this.isProgramScope = false;
71
+ this.toolTipData = {
72
+ owner: 'Owners are responsible for managing a Program. Only Owners can make changes to a Program and the responsibilities that are linked with the Program.<br>The <strong>Key Admin</strong> and all <b>Admin</b> users will be selected as the Owners of a Program by default.',
73
+ programScope: `A Program Scope can be used as follows:
74
+ <li>To specify the duration of the Program.</li>
75
+ <li>To pre-select certain options that are available when creating a responsibility, thereby decreasing the time required to create a responsibility.</li>
76
+ <li>To limit the options available for selection when creating a responsibility, thereby making it easier to create a responsibility and reducing the likelihood of an incorrect option being selected.</li>
77
+ `,
78
+ };
79
+ this.featureflagrole = false;
80
+ this.featureflagGroups = false;
81
+ this.disabledAssigneeIds = [];
82
+ this.selectedReviewerIds = [];
83
+ this.selectedAssigneeIds = [];
84
+ this.selectedOverseerIds = [];
85
+ this.assignorId = [];
86
+ this.disableReviewerIds = [];
87
+ this.disableOverseerIds = [];
88
+ this.loader = false;
89
+ this.showSmiley = false;
90
+ this.actionButtons = [
91
+ { buttonText: 'Add More Programs', class: 'white-btn', id: 'addMore' },
92
+ { buttonText: 'View Program', class: 'blue-btn', id: 'viewProgram' },
93
+ ];
94
+ this.smileyMessage = `You're All Set!`;
95
+ this.createdProgramId = '';
96
+ this.isObjectiveValid = true;
97
+ this.isNameExists = false;
98
+ //form body for program meta data
99
+ this.programForm = this.fb.group({
100
+ program_type: [
101
+ this.programType,
102
+ [Validators.required, Validators.min(0), Validators.max(3)],
103
+ ],
104
+ program_name: ['', [Validators.required, this.noWhitespaceValidator]],
105
+ program_description: [''],
106
+ program_description_attachments: [[]],
107
+ program_objective: [''],
108
+ // program_objective: ['', [Validators.required, this.noWhitespaceValidator]],
109
+ program_objective_attachments: [[]],
110
+ program_roles: [[], [Validators.required, this.blankArrayValidator]],
111
+ all_user_in_role: [false],
112
+ program_owners: [[], [Validators.required, this.blankArrayValidator]],
113
+ program_owners_group: [[]],
114
+ program_approver: [[]],
115
+ performance_calculation: ['PAST_EVENT', [Validators.required]],
116
+ recurring_frequency: [true, [Validators.required]],
117
+ lock_scope_change: [false, [Validators.required]],
118
+ framework: [],
119
+ rc: [[]],
120
+ program_assignee: [[]],
121
+ program_assignee_group: [[]],
122
+ program_default_assignee: [[]],
123
+ program_default_assignee_group: [[]],
124
+ assignee_completion_criteria: ['ALL'],
125
+ program_reviewer: [[]],
126
+ program_reviewer_group: [[]],
127
+ program_default_reviewer: [[]],
128
+ program_default_reviewer_group: [[]],
129
+ reviewer_completion_criteria: ['SEQUENTIAL'],
130
+ program_overseer: [[]],
131
+ program_overseer_group: [[]],
132
+ program_default_overseer: [[]],
133
+ program_default_overseer_group: [[]],
134
+ program_default_failed_overseer: [[]],
135
+ program_default_failed_overseer_group: [[]],
136
+ program_assessments: [[]],
137
+ evidence_required: [false],
138
+ allow_any_file_key_evidence: [false],
139
+ custom_fields: [[]],
140
+ program_state: 0,
141
+ });
142
+ //exceptional handling of custom fields
143
+ this.showAddCustomField = true;
144
+ //Program objective and descripion are explectly declared as they are using marx editor which does not supports Reactive forms binding
145
+ this.editorData = {
146
+ programObjective: '',
147
+ programDescription: '',
148
+ };
149
+ this.controls = {
150
+ program_name: this.programForm.get('program_name'),
151
+ program_type: this.programForm.get('program_type'),
152
+ program_objective: this.programForm.get('program_objective'),
153
+ program_roles: this.programForm.get('program_roles'),
154
+ program_owners: this.programForm.get('program_owners'),
155
+ program_owners_group: this.programForm.get('program_owners_group'),
156
+ all_user_in_role: this.programForm.get('all_user_in_role'),
157
+ program_approver: this.programForm.get('program_approver'),
158
+ description_attachment: this.programForm.get('program_description_attachments'),
159
+ objective_attachments: this.programForm.get('program_objective_attachments'),
160
+ performance_calculation: this.programForm.get('performance_calculation'),
161
+ recurring_frequency: this.programForm.get('recurring_frequency'),
162
+ lock_scope_change: this.programForm.get('lock_scope_change'),
163
+ rc: this.programForm.get('rc'),
164
+ evidence_required: this.programForm.get('evidence_required'),
165
+ framework: this.programForm.get('framework'),
166
+ allow_any_file_key_evidence: this.programForm.get('allow_any_file_key_evidence'),
167
+ program_assignee: this.programForm.get('program_assignee'),
168
+ program_assignee_group: this.programForm.get('program_assignee_group'),
169
+ program_default_assignee: this.programForm.get('program_default_assignee'),
170
+ program_default_assignee_group: this.programForm.get('program_default_assignee_group'),
171
+ assignee_completion_criteria: this.programForm.get('assignee_completion_criteria'),
172
+ program_default_reviewer: this.programForm.get('program_default_reviewer'),
173
+ program_default_reviewer_group: this.programForm.get('program_default_reviewer_group'),
174
+ program_reviewer: this.programForm.get('program_reviewer'),
175
+ program_reviewer_group: this.programForm.get('program_reviewer_group'),
176
+ program_overseer: this.programForm.get('program_overseer'),
177
+ program_overseer_group: this.programForm.get('program_overseer_group'),
178
+ program_default_overseer: this.programForm.get('program_default_overseer'),
179
+ program_default_overseer_group: this.programForm.get('program_default_overseer_group'),
180
+ program_default_failed_overseer: this.programForm.get('program_default_failed_overseer'),
181
+ program_default_failed_overseer_group: this.programForm.get('program_default_failed_overseer_group'),
182
+ reviewer_completion_criteria: this.programForm.get('reviewer_completion_criteria'),
183
+ program_assessments: this.programForm.get('program_assessments'),
184
+ custom_fields: this.programForm.get('custom_fields'),
185
+ isApproverDisabled: this.programForm.get('isApproverDisabled'),
186
+ };
187
+ this.lists = {
188
+ ROLES: [],
189
+ OWNERS: [],
190
+ OWNERS_GROUPS: [],
191
+ APPROVERS: [],
192
+ REVIEWERS: [],
193
+ REVIEWERS_GROUP: [],
194
+ ASSIGNEES: [],
195
+ ASSIGNEES_GROUP: [],
196
+ DEFAULT_ASSIGNEES: [],
197
+ DEFAULT_ASSIGNEES_GROUP: [],
198
+ DEFAULT_REVIEWERS: [],
199
+ DEFAULT_REVIEWERS_GROUP: [],
200
+ OVERSEERS: [],
201
+ OVERSEERS_GROUP: [],
202
+ DEFAULT_OVERSEERS: [],
203
+ DEFAULT_OVERSEERS_GROUP: [],
204
+ RC: [],
205
+ NON_REMOVABLE_OWNERS: [],
206
+ ALL_USER: [],
207
+ ALL_GROUP: [],
208
+ SYSTEM_ROLE_IDS: [],
209
+ };
210
+ this.listLoadingState = {
211
+ ROLES: false,
212
+ USERS: false,
213
+ GROUP: false,
214
+ RC: false,
215
+ };
216
+ this.sideElements = [
217
+ 'ROLE',
218
+ 'RC',
219
+ 'OWNER',
220
+ 'ASSIGNEE',
221
+ 'APPROVER',
222
+ 'DEFAULT_ASSIGNEE',
223
+ 'REVIEWER',
224
+ 'DEFAULT_REVIEWER',
225
+ 'ASSESSMENT',
226
+ 'FRAMEWORK',
227
+ 'OVERSEER',
228
+ 'DEFAULT_FAILED_OVERSEER',
229
+ 'DEFAULT_OVERSEER',
230
+ 'OVERSEER',
231
+ ];
232
+ this.additionalOption = { ...CONSTANTS.additionalOption };
233
+ this.activeList = '';
234
+ this.fileUploadTracker = {
235
+ description: [],
236
+ objective: [],
237
+ };
238
+ this.businessCycle = JSON.parse(localStorage.getItem('businessCycle') ?? '{}');
239
+ }
240
+ noWhitespaceValidator(control) {
241
+ const isWhitespace = (control.value || '').trim().length === 0;
242
+ const isValid = !isWhitespace;
243
+ return isValid ? null : { whitespace: true };
244
+ }
245
+ blankArrayValidator(control) {
246
+ const isBlank = control.value?.filter((ele) => ele)?.length === 0;
247
+ const isValid = !isBlank;
248
+ return isValid ? null : { blank: true };
249
+ }
250
+ currentUser() {
251
+ const user = this.authService.tokenInfo();
252
+ return {
253
+ member_email: user?.email,
254
+ member_id: user?.id,
255
+ member_name: user?.name,
256
+ user_role: 'LOGGED_IN',
257
+ _id: '',
258
+ };
259
+ }
260
+ //Sets the value of a form control
261
+ setFormField(controlName, value, isFromForm) {
262
+ let patch = {};
263
+ patch[controlName] = value;
264
+ this.programForm.patchValue(patch);
265
+ this.controls[controlName]?.markAsTouched();
266
+ if (isFromForm &&
267
+ controlName === 'program_objective' &&
268
+ !value.replace(/&nbsp;/g, ' ').trim())
269
+ this.isObjectiveValid = false;
270
+ else
271
+ this.isObjectiveValid = true;
272
+ }
273
+ //Returns weather the form is valid or not
274
+ get formValid() {
275
+ if (this.programForm.valid &&
276
+ this.editorData?.programObjective?.replace(/&nbsp;/g, ' ')?.trim()?.length) {
277
+ return true;
278
+ }
279
+ else {
280
+ return false;
281
+ }
282
+ }
283
+ ngOnInit() {
284
+ this.setFormField('program_type', this.programType);
285
+ if (this.mode === 'EDIT') {
286
+ this.getProgramDetails();
287
+ }
288
+ else {
289
+ this.fetchOrganizationUsers();
290
+ this.fetchOrganizationGroup();
291
+ }
292
+ this.fetchRoles();
293
+ this.fetchRC();
294
+ if (this.addToProgramDetails?._id) {
295
+ this.listAction(this.addToProgramDetails, 'FRAMEWORK');
296
+ }
297
+ this.enablefeature();
298
+ this.changeRef.detectChanges();
299
+ }
300
+ get valid() {
301
+ return this.programForm.valid;
302
+ }
303
+ /**
304
+ * #### Description
305
+ * Populates optional fields status for the optional fields
306
+ */
307
+ populateOptionalFields() {
308
+ const activatedOptions = [];
309
+ for (const key of Object.keys(this.additionalOption)) {
310
+ if (this.additionalOption[key] === true) {
311
+ activatedOptions.push(key);
312
+ }
313
+ }
314
+ this.populateOption.emit(activatedOptions);
315
+ }
316
+ addMoreInfo(event) {
317
+ this.additionalOption[event.code] = event.checked;
318
+ this.scrollToBottom = true;
319
+ this.checkProgramOptionField();
320
+ }
321
+ // function to automate form value change handng
322
+ formChangeListner() {
323
+ const fields = Object.keys(this.controls);
324
+ fields.forEach((ele) => {
325
+ this.controls[ele]?.valueChanges.pipe(distinctUntilChanged()).subscribe({
326
+ next: (res) => {
327
+ this.handleFormFieldChange(ele, res);
328
+ },
329
+ });
330
+ });
331
+ }
332
+ handleFormFieldChange(control, payload) {
333
+ switch (control) {
334
+ case 'program_roles': {
335
+ this.fetchUsersAssociatedWithRoles();
336
+ }
337
+ }
338
+ }
339
+ activateList(evt) {
340
+ if (evt === 'FRAMEWORK' && !this.canFrameworkChange)
341
+ return;
342
+ this.activeList = evt;
343
+ this.pickerChanged.emit(true);
344
+ }
345
+ listAction(evt, type) {
346
+ switch (type) {
347
+ case 'ROLE': {
348
+ this.showConfirmation = true;
349
+ const systemRoles = evt?.filter((ele) => ele?.roleName?.toLowerCase() === 'key admin' ||
350
+ ele?.roleName?.toLowerCase() === 'admin');
351
+ const patchVal = this.uniqueByProp([...systemRoles, ...evt], '_id');
352
+ if (!isEqual(this.controls.program_roles.value.sort(), patchVal.sort())) {
353
+ this.setFormField('program_roles', patchVal);
354
+ this.fetchUsersAssociatedWithRoles();
355
+ this.fetchGroupsAssociatedWithRoles();
356
+ }
357
+ this.fieldDeselector(type);
358
+ break;
359
+ }
360
+ case 'RC': {
361
+ const rc = this.setList(this.lists.RC, evt, 'item_id');
362
+ this.setFormField('rc', this.uniqueByProp(rc, 'item_id'));
363
+ this.fieldDeselector(type);
364
+ break;
365
+ }
366
+ case 'OWNER': {
367
+ this.setFormField('program_owners', this.uniqueByProp(evt?.users, 'member_id'));
368
+ this.setFormField('program_owners_group', this.uniqueByProp(evt?.groups, 'group_id'));
369
+ this.fieldDeselector(type);
370
+ break;
371
+ }
372
+ case 'APPROVER': {
373
+ this.setFormField('program_approver', this.uniqueByProp(evt?.users, 'member_id'));
374
+ this.fieldDeselector(type);
375
+ break;
376
+ }
377
+ case 'ASSIGNEE': {
378
+ this.setFormField('program_assignee', this.uniqueByProp(evt?.users, 'member_id'));
379
+ this.setFormField('program_assignee_group', this.uniqueByProp(evt?.groups, 'group_id'));
380
+ this.fieldDeselector(type);
381
+ this.setDefaultAssignee(evt);
382
+ break;
383
+ }
384
+ case 'DEFAULT_ASSIGNEE': {
385
+ this.setFormField('program_default_assignee', this.uniqueByProp(evt?.users, 'member_id'));
386
+ this.setFormField('program_default_assignee_group', this.uniqueByProp(evt?.groups, 'group_id'));
387
+ this.fieldDeselector(type);
388
+ this.refreshList();
389
+ break;
390
+ }
391
+ case 'REVIEWER': {
392
+ this.setFormField('program_reviewer', this.uniqueByProp(evt?.users, 'member_id'));
393
+ this.setFormField('program_reviewer_group', this.uniqueByProp(evt?.groups, 'group_id'));
394
+ this.fieldDeselector(type);
395
+ this.setDefaultReviewer(evt);
396
+ break;
397
+ }
398
+ case 'DEFAULT_REVIEWER': {
399
+ this.setFormField('program_default_reviewer', this.uniqueByProp(evt?.users, 'member_id'));
400
+ this.setFormField('program_default_reviewer_group', this.uniqueByProp(evt?.groups, 'group_id'));
401
+ this.fieldDeselector(type);
402
+ this.controls.reviewer_completion_criteria.value =
403
+ this.controls?.program_default_reviewer_group?.value?.length > 0
404
+ ? 'ANYONE'
405
+ : this.controls?.reviewer_completion_criteria?.value;
406
+ this.refreshList();
407
+ break;
408
+ }
409
+ case 'OVERSEER': {
410
+ this.setFormField('program_overseer', this.uniqueByProp(evt?.users, 'member_id'));
411
+ this.setFormField('program_overseer_group', this.uniqueByProp(evt?.groups, 'group_id'));
412
+ this.fieldDeselector(type);
413
+ this.setDefaultOverseer(evt);
414
+ break;
415
+ }
416
+ case 'DEFAULT_OVERSEER': {
417
+ this.setFormField('program_default_overseer', this.uniqueByProp(evt?.users, 'member_id'));
418
+ this.setFormField('program_default_overseer_group', this.uniqueByProp(evt?.groups, 'group_id'));
419
+ this.fieldDeselector(type);
420
+ this.refreshList();
421
+ break;
422
+ }
423
+ case 'DEFAULT_FAILED_OVERSEER': {
424
+ this.setFormField('program_default_failed_overseer', this.uniqueByProp(evt?.users, 'member_id'));
425
+ this.setFormField('program_default_failed_overseer_group', this.uniqueByProp(evt?.groups, 'group_id'));
426
+ this.fieldDeselector(type);
427
+ this.refreshList();
428
+ break;
429
+ }
430
+ case 'ASSESSMENT': {
431
+ this.setFormField('program_assessments', evt);
432
+ this.fieldDeselector(type);
433
+ break;
434
+ }
435
+ case 'FRAMEWORK': {
436
+ this.setFormField('framework', evt);
437
+ this.setFormField('program_name', evt?.name);
438
+ this.setFormField('program_description', evt?.description);
439
+ this.editorData.programDescription = evt?.description;
440
+ this.fieldDeselector(type);
441
+ break;
442
+ }
443
+ }
444
+ }
445
+ remove(evt, type) {
446
+ switch (type) {
447
+ case 'ROLE': {
448
+ let msg = '';
449
+ msg = 'If you change the roles, any unsaved changes would be lost.';
450
+ const roles = this.controls?.program_roles?.value?.filter((ele) => ele?._id !== evt?._id);
451
+ this.listAction(roles, 'ROLE');
452
+ this.setFormField('program_roles', roles);
453
+ break;
454
+ }
455
+ case 'RC': {
456
+ const rcs = this.controls?.rc?.value?.filter((ele) => ele?.item_id !== evt?.item_id);
457
+ this.setFormField('rc', rcs);
458
+ break;
459
+ }
460
+ case 'OWNER': {
461
+ const owners = this.controls?.program_owners?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
462
+ this.setFormField('program_owners', owners);
463
+ break;
464
+ }
465
+ case 'OWNER_GROUP': {
466
+ const owners_group = this.controls?.program_owners_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
467
+ this.setFormField('program_owners_group', owners_group);
468
+ break;
469
+ }
470
+ case 'APPROVER': {
471
+ const approver = this.controls?.program_approver?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
472
+ this.setFormField('program_approver', approver);
473
+ break;
474
+ }
475
+ case 'ASSIGNEE': {
476
+ const assignee = this.controls?.program_assignee?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
477
+ this.setFormField('program_assignee', assignee);
478
+ this.setDefaultAssigneeOnRemove(evt, type);
479
+ break;
480
+ }
481
+ case 'ASSIGNEE_GROUP': {
482
+ const assignee_group = this.controls?.program_assignee_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
483
+ this.setFormField('program_assignee_group', assignee_group);
484
+ this.setDefaultAssigneeOnRemove(evt, type);
485
+ break;
486
+ }
487
+ case 'DEFAULT_ASSIGNEE': {
488
+ const assignee = this.controls?.program_default_assignee?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
489
+ this.setFormField('program_default_assignee', assignee);
490
+ this.refreshList();
491
+ break;
492
+ }
493
+ case 'DEFAULT_ASSIGNEE_GROUP': {
494
+ const assignee_group = this.controls?.program_default_assignee_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
495
+ this.setFormField('program_default_assignee_group', assignee_group);
496
+ break;
497
+ }
498
+ case 'REVIEWER': {
499
+ const reviewer = this.controls?.program_reviewer?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
500
+ this.setFormField('program_reviewer', reviewer);
501
+ this.setDefaultReviewerOnRemove(evt, type);
502
+ break;
503
+ }
504
+ case 'REVIEWER_GROUP': {
505
+ const reviewer_group = this.controls?.program_reviewer_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
506
+ this.setFormField('program_reviewer_group', reviewer_group);
507
+ this.setDefaultReviewerOnRemove(evt, type);
508
+ break;
509
+ }
510
+ case 'DEFAULT_REVIEWER': {
511
+ const reviewer = this.controls?.program_default_reviewer?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
512
+ this.setFormField('program_default_reviewer', reviewer);
513
+ this.refreshList();
514
+ break;
515
+ }
516
+ case 'DEFAULT_REVIEWER_GROUP': {
517
+ const reviewer_group = this.controls?.program_default_reviewer_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
518
+ this.setFormField('program_default_reviewer_group', reviewer_group);
519
+ this.controls.reviewer_completion_criteria.value =
520
+ this.controls?.program_default_reviewer_group?.value?.length > 0
521
+ ? 'ANYONE'
522
+ : this.controls?.reviewer_completion_criteria?.value;
523
+ break;
524
+ }
525
+ case 'OVERSEER': {
526
+ const overseer = this.controls?.program_overseer?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
527
+ this.setFormField('program_overseer', overseer);
528
+ this.setDefaultOverseerOnRemove(evt, type);
529
+ break;
530
+ }
531
+ case 'OVERSEER_GROUP': {
532
+ const overseer_group = this.controls?.program_overseer_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
533
+ this.setFormField('program_overseer_group', overseer_group);
534
+ this.setDefaultOverseerOnRemove(evt, type);
535
+ break;
536
+ }
537
+ case 'DEFAULT_OVERSEER': {
538
+ const overseer = this.controls?.program_default_overseer?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
539
+ this.setFormField('program_default_overseer', overseer);
540
+ this.refreshList();
541
+ break;
542
+ }
543
+ case 'DEFAULT_OVERSEER_GROUP': {
544
+ const overseer_group = this.controls?.program_default_overseer_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
545
+ this.setFormField('program_default_overseer_group', overseer_group);
546
+ break;
547
+ }
548
+ case 'DEFAULT_FAILED_OVERSEER': {
549
+ const overseer = this.controls?.program_default_failed_overseer?.value?.filter((ele) => ele?.member_id !== evt?.member_id);
550
+ this.setFormField('program_default_failed_overseer', overseer);
551
+ this.refreshList();
552
+ break;
553
+ }
554
+ case 'DEFAULT_FAILED_OVERSEER_GROUP': {
555
+ const overseer_group = this.controls?.program_default_failed_overseer_group?.value?.filter((ele) => ele?.group_id !== evt?.group_id);
556
+ this.setFormField('program_default_failed_overseer_group', overseer_group);
557
+ break;
558
+ }
559
+ case 'ASSESSMENT': {
560
+ let current = cloneDeep(this.controls.program_assessments?.value);
561
+ const index = current.findIndex((ele) => ele.category_id == evt.category_id);
562
+ current[index].assessmentIds = current[index].assessmentIds.filter((assessment) => assessment.id !== evt.id);
563
+ if (current[index].assessmentIds.length === 0)
564
+ current.splice(index, 1);
565
+ this.listAction(current, 'ASSESSMENT');
566
+ break;
567
+ }
568
+ case 'FRAMEWORK': {
569
+ this.setFormField('framework', null);
570
+ break;
571
+ }
572
+ }
573
+ }
574
+ returnIds(list, key) {
575
+ return list
576
+ ?.map((ele) => {
577
+ if (ele[key]) {
578
+ return ele[key];
579
+ }
580
+ })
581
+ .filter((ele) => ele);
582
+ }
583
+ refreshList() {
584
+ this.selectedAssigneeIds = [];
585
+ this.selectedReviewerIds = [];
586
+ this.selectedOverseerIds = [];
587
+ let assignorAndAssigneesIds = [];
588
+ this.assignorId = [];
589
+ let selectedAssignee = this.controls?.program_default_assignee?.value;
590
+ let selectedReviewer = this.controls?.program_default_reviewer?.value;
591
+ let selectedOverseerList = this.controls?.program_default_overseer?.value;
592
+ let selectedOverseerFailureList = this.controls?.program_default_failed_overseer?.value;
593
+ let assignor = this.currentUser();
594
+ this.assignorId.push(assignor?.member_id);
595
+ assignorAndAssigneesIds.push(assignor?.member_id);
596
+ selectedAssignee?.forEach((user) => {
597
+ this.selectedAssigneeIds.push(user?.member_id);
598
+ assignorAndAssigneesIds.push(user?.member_id);
599
+ });
600
+ selectedReviewer?.forEach((user) => {
601
+ this.selectedReviewerIds.push(user?.member_id);
602
+ });
603
+ selectedOverseerList?.forEach((user) => {
604
+ this.selectedOverseerIds.push(user?.member_id);
605
+ });
606
+ selectedOverseerFailureList?.forEach((user) => {
607
+ this.selectedOverseerIds.push(user?.member_id);
608
+ });
609
+ this.selectedReviewerIds = [...new Set(this.selectedReviewerIds)];
610
+ this.selectedAssigneeIds = [...new Set(this.selectedAssigneeIds)];
611
+ this.selectedOverseerIds = [...new Set(this.selectedOverseerIds)];
612
+ let disableAssigneeList = this.lists?.ALL_USER?.filter((user) => this.selectedReviewerIds?.includes(user?.member_id) ||
613
+ this.selectedOverseerIds?.includes(user?.member_id));
614
+ this.disabledAssigneeIds = this.returnIds(disableAssigneeList, 'member_id');
615
+ let disableReviewerList = this.lists?.ALL_USER?.filter((user) => this.selectedOverseerIds?.includes(user?.member_id) ||
616
+ this.selectedAssigneeIds?.includes(user?.member_id));
617
+ this.disableReviewerIds = this.returnIds(disableReviewerList, 'member_id');
618
+ let disableOverseerList = this.lists?.ALL_USER?.filter((user) => assignorAndAssigneesIds?.includes(user?.member_id) ||
619
+ this.selectedReviewerIds?.includes(user?.member_id));
620
+ this.disableOverseerIds = this.returnIds(disableOverseerList, 'member_id');
621
+ }
622
+ removeRole(evt) {
623
+ this.onRemovingRole.emit(evt);
624
+ }
625
+ //below 4 functions can be easilty combined into one as they follow same kind of pattern or can be offloaded to a external service
626
+ setDefaultAssignee(evt) {
627
+ if (evt?.users?.length || evt?.groups?.length) {
628
+ this.lists.DEFAULT_ASSIGNEES = this.uniqueByProp(evt?.users, 'member_id');
629
+ this.lists.DEFAULT_ASSIGNEES_GROUP = this.uniqueByProp(evt?.groups, 'group_id');
630
+ }
631
+ else {
632
+ this.lists.DEFAULT_ASSIGNEES = this.lists.ALL_USER;
633
+ this.lists.DEFAULT_ASSIGNEES_GROUP = this.lists.ALL_GROUP;
634
+ }
635
+ const assigneeMap = evt?.users?.map((ele) => ele?.member_id);
636
+ let currentDefaultAssignee = this.controls.program_default_assignee?.value;
637
+ currentDefaultAssignee = currentDefaultAssignee.filter((ele) => assigneeMap.includes(ele?.member_id));
638
+ this.setFormField('program_default_assignee', currentDefaultAssignee);
639
+ }
640
+ setDefaultAssigneeOnRemove(evt, type) {
641
+ switch (type) {
642
+ case 'ASSIGNEE': {
643
+ this.lists.DEFAULT_ASSIGNEES = this.lists.DEFAULT_ASSIGNEES.filter((ele) => ele?.member_id !== evt?.member_id);
644
+ const defaultAssignee = this.controls.program_default_assignee?.value;
645
+ const assignee = defaultAssignee.filter((ele) => ele?.member_id !== evt?.member_id);
646
+ if (!assignee?.length) {
647
+ this.lists.DEFAULT_ASSIGNEES = this.lists.ALL_USER;
648
+ }
649
+ this.setFormField('program_default_assignee', assignee);
650
+ break;
651
+ }
652
+ case 'ASSIGNEE_GROUP': {
653
+ this.lists.DEFAULT_ASSIGNEES_GROUP =
654
+ this.lists.DEFAULT_ASSIGNEES_GROUP.filter((ele) => ele?.group_id !== evt?.group_id);
655
+ const defaultAssigneeGroup = this.controls.program_default_assignee_group?.value;
656
+ const assigneeGroup = defaultAssigneeGroup.filter((ele) => ele?.group_id !== evt?.group_id);
657
+ if (!assigneeGroup?.length) {
658
+ this.lists.DEFAULT_ASSIGNEES_GROUP = this.lists.ALL_GROUP;
659
+ }
660
+ this.setFormField('program_default_assignee_group', assigneeGroup);
661
+ }
662
+ }
663
+ }
664
+ setDefaultReviewer(evt) {
665
+ if (evt?.users?.length || evt?.groups?.length) {
666
+ this.lists.DEFAULT_REVIEWERS = this.uniqueByProp(evt?.users, 'member_id');
667
+ this.lists.DEFAULT_REVIEWERS_GROUP = this.uniqueByProp(evt?.groups, 'group_id');
668
+ }
669
+ else {
670
+ this.lists.DEFAULT_REVIEWERS = this.lists.ALL_USER;
671
+ this.lists.DEFAULT_REVIEWERS_GROUP = this.lists.ALL_GROUP;
672
+ }
673
+ const reviewerMap = evt?.users?.map((ele) => ele?.member_id);
674
+ let currentDefaultReviewer = this.controls.program_default_reviewer?.value;
675
+ currentDefaultReviewer = currentDefaultReviewer.filter((ele) => reviewerMap.includes(ele?.member_id));
676
+ this.setFormField('program_default_reviewer', currentDefaultReviewer);
677
+ }
678
+ setDefaultOverseer(evt) {
679
+ if (evt?.users?.length || evt?.groups?.length) {
680
+ this.lists.DEFAULT_OVERSEERS = this.uniqueByProp(evt?.users, 'member_id');
681
+ this.lists.DEFAULT_OVERSEERS_GROUP = this.uniqueByProp(evt?.groups, 'group_id');
682
+ }
683
+ else {
684
+ this.lists.DEFAULT_OVERSEERS = this.lists.ALL_USER;
685
+ this.lists.DEFAULT_OVERSEERS_GROUP = this.lists.ALL_GROUP;
686
+ }
687
+ const overseerMap = evt?.users?.map((ele) => ele?.member_id);
688
+ let currentDefaultReviewer = this.controls.program_default_overseer?.value;
689
+ let currentDefaultFailReviewer = this.controls.program_default_failed_overseer?.value;
690
+ currentDefaultReviewer = currentDefaultReviewer.filter((ele) => overseerMap.includes(ele?.member_id));
691
+ currentDefaultFailReviewer = currentDefaultReviewer.filter((ele) => overseerMap.includes(ele?.member_id));
692
+ this.setFormField('program_default_overseer', currentDefaultReviewer);
693
+ this.setFormField('program_default_failed_overseer', currentDefaultFailReviewer);
694
+ }
695
+ setDefaultReviewerOnRemove(evt, type) {
696
+ switch (type) {
697
+ case 'REVIEWER': {
698
+ this.lists.DEFAULT_REVIEWERS = this.lists.DEFAULT_REVIEWERS.filter((ele) => ele?.member_id !== evt?.member_id);
699
+ const defaultReviewer = this.controls.program_default_reviewer?.value;
700
+ const reviewer = defaultReviewer.filter((ele) => ele?.member_id !== evt?.member_id);
701
+ this.setFormField('program_default_reviewer', reviewer);
702
+ break;
703
+ }
704
+ case 'REVIEWER_GROUP': {
705
+ this.lists.DEFAULT_REVIEWERS_GROUP =
706
+ this.lists.DEFAULT_REVIEWERS_GROUP.filter((ele) => ele?.group_id !== evt?.group_id);
707
+ const defaultReviewerGroup = this.controls.program_default_reviewer_group?.value;
708
+ const reviewerGroup = defaultReviewerGroup.filter((ele) => ele?.group_id !== evt?.group_id);
709
+ this.setFormField('program_default_reviewer_group', reviewerGroup);
710
+ }
711
+ }
712
+ }
713
+ setDefaultOverseerOnRemove(evt, type) {
714
+ switch (type) {
715
+ case 'OVERSEER': {
716
+ this.lists.DEFAULT_OVERSEERS = this.lists.DEFAULT_OVERSEERS.filter((ele) => ele?.member_id !== evt?.member_id);
717
+ const defaultOverseer = this.controls.program_default_overseer?.value;
718
+ const overseer = defaultOverseer.filter((ele) => ele?.member_id !== evt?.member_id);
719
+ this.setFormField('program_default_overseer', overseer);
720
+ const defaultFailOverseer = this.controls.program_default_failed_overseer?.value;
721
+ const overseerFail = defaultFailOverseer.filter((ele) => ele?.member_id !== evt?.member_id);
722
+ this.setFormField('program_default_failed_overseer', overseerFail);
723
+ break;
724
+ }
725
+ case 'OVERSEER_GROUP': {
726
+ this.lists.DEFAULT_OVERSEERS_GROUP =
727
+ this.lists.DEFAULT_OVERSEERS_GROUP.filter((ele) => ele?.group_id !== evt?.group_id);
728
+ const defaultOverseerGroup = this.controls.program_default_overseer_group?.value;
729
+ const overseerGroup = defaultOverseerGroup.filter((ele) => ele?.group_id !== evt?.group_id);
730
+ this.setFormField('program_default_overseer_group', overseerGroup);
731
+ const defaultOverseerFailedGroup = this.controls.program_default_failed_overseer_group?.value;
732
+ const overseerFailedGroup = defaultOverseerFailedGroup.filter((ele) => ele?.group_id !== evt?.group_id);
733
+ this.setFormField('program_default_failed_overseer_group', overseerFailedGroup);
734
+ }
735
+ }
736
+ }
737
+ fieldDeselector(type) {
738
+ this.activeList = '';
739
+ this.pickerChanged.emit(false);
740
+ this.markasTouchedSelector(type);
741
+ }
742
+ markasTouchedSelector(fieldName) {
743
+ const typeField = {
744
+ ROLE: 'program_roles',
745
+ APPROVER: 'program_approver',
746
+ OWNER: 'program_owners',
747
+ OWNER_GROUP: 'program_owners_group',
748
+ };
749
+ this.controls[typeField[fieldName]]?.markAsTouched();
750
+ }
751
+ fetchRoles() {
752
+ this.programService.getRoles().subscribe({
753
+ next: (res) => {
754
+ this.lists.ROLES = res;
755
+ const defaultSystemVal = this.lists?.ROLES?.data
756
+ ?.filter((ele) => ele?.roleName?.toLowerCase() === 'key admin' ||
757
+ ele?.roleName?.toLowerCase() === 'admin')
758
+ ?.map((ele) => ele?._id);
759
+ const defaultVal = this.lists?.ROLES?.data?.filter((ele) => ele?.roleName?.toLowerCase() === 'key admin' ||
760
+ ele?.roleName?.toLowerCase() === 'admin');
761
+ this.lists.SYSTEM_ROLE_IDS = defaultSystemVal;
762
+ if (this.mode !== 'EDIT') {
763
+ this.setFormField('program_roles', defaultVal);
764
+ this.fetchUsersAssociatedWithRoles();
765
+ this.fetchGroupsAssociatedWithRoles();
766
+ }
767
+ },
768
+ error: (err) => { },
769
+ });
770
+ }
771
+ //fetch the list of responsibilities center
772
+ fetchRC() {
773
+ this.programService.getResponsibilityCenterList().subscribe({
774
+ next: (res) => {
775
+ this.lists.RC = res;
776
+ },
777
+ error: (err) => { },
778
+ });
779
+ }
780
+ fetchUsersAssociatedWithRoles(calledFrom) {
781
+ const loggedInUser = this.currentUser();
782
+ const roleIds = this.controls.program_roles?.value?.map((ele) => ele?._id);
783
+ // if (fetchAll) {
784
+ this.programService.fetchAllRoleUsers(roleIds).subscribe({
785
+ next: (res) => {
786
+ const isUserFind = res?.data?.some((res) => res?.member_id === loggedInUser?.member_id);
787
+ if (!isUserFind) {
788
+ res?.data?.push(loggedInUser);
789
+ res.total_items = res?.total_items + 1;
790
+ }
791
+ this.lists.OWNERS = res;
792
+ this.lists.APPROVERS = res;
793
+ if (!res?.data
794
+ ?.map((ele) => ele?.member_id)
795
+ ?.includes(this.controls.program_approver?.value[0]?.member_id)) {
796
+ this.setFormField('program_approver', []);
797
+ }
798
+ if (this.controls?.all_user_in_role?.value) {
799
+ this.setFormField('program_owners', res?.data);
800
+ }
801
+ else {
802
+ this.setDefaultOwners(res?.data, calledFrom);
803
+ }
804
+ },
805
+ error: (err) => { },
806
+ });
807
+ }
808
+ fetchGroupsAssociatedWithRoles() {
809
+ const roleIds = this.controls.program_roles?.value?.map((ele) => ele?._id);
810
+ this.programService.fetchAllRoleGroups(roleIds).subscribe({
811
+ next: (res) => {
812
+ this.lists.OWNERS_GROUPS = res;
813
+ const roleIds = this.controls.program_roles?.value.map((ele) => ele._id);
814
+ const groupDetails = this.controls.program_owners_group?.value.filter((roleId) => {
815
+ if (roleId.roles.length) {
816
+ let isSameRole = false;
817
+ roleId.roles.forEach((role) => {
818
+ if (roleIds.includes(role.roleId)) {
819
+ isSameRole = true;
820
+ }
821
+ });
822
+ if (isSameRole) {
823
+ return roleId;
824
+ }
825
+ }
826
+ });
827
+ this.setFormField('program_owners_group', groupDetails);
828
+ },
829
+ });
830
+ }
831
+ setDefaultOwners(userList, calledFrom) {
832
+ const loggedInuser = this.currentUser();
833
+ const defaultOwner = userList.filter((ele) => ['ADMIN', 'KEY_ADMIN'].includes(ele?.user_role) &&
834
+ ele?.member_id != loggedInuser?.member_id);
835
+ this.lists.NON_REMOVABLE_OWNERS = this.uniqueByProp([...[loggedInuser], ...defaultOwner], 'member_id');
836
+ // this.setFormField('program_owners', this.lists.NON_REMOVABLE_OWNERS);
837
+ const preSelectedUsers = this.getPreSelectedOwners(this.controls?.program_owners?.value, userList);
838
+ if (calledFrom !== 'getProgramDetails') {
839
+ this.setFormField('program_owners', preSelectedUsers?.length
840
+ ? preSelectedUsers
841
+ : this.lists.NON_REMOVABLE_OWNERS);
842
+ }
843
+ }
844
+ getPreSelectedOwners(previousSelectedUsers, currentUsers) {
845
+ let finalUsers = [];
846
+ finalUsers = previousSelectedUsers?.filter((previous) => currentUsers?.some((current) => previous?.member_id === current?.member_id));
847
+ return finalUsers;
848
+ }
849
+ fetchOrganizationUsers(data) {
850
+ this.listLoadingState.USERS = true;
851
+ this.programService.fetchAllOrgUser().subscribe({
852
+ next: (res) => {
853
+ this.lists.ALL_USER = res;
854
+ this.lists.ASSIGNEES = res;
855
+ this.lists.REVIEWERS = res;
856
+ this.lists.OVERSEERS = res;
857
+ if (this.mode !== 'EDIT') {
858
+ this.lists.DEFAULT_ASSIGNEES = res;
859
+ this.lists.DEFAULT_REVIEWERS = res;
860
+ this.lists.DEFAULT_OVERSEERS = res;
861
+ }
862
+ else if (this.mode === 'EDIT') {
863
+ if (!this.controls.program_assignee?.value?.length) {
864
+ this.lists.DEFAULT_ASSIGNEES = res;
865
+ }
866
+ if (!this.controls.program_reviewer?.value?.length) {
867
+ this.lists.DEFAULT_REVIEWERS = res;
868
+ }
869
+ if (!this.controls.program_overseer?.value?.length) {
870
+ this.lists.DEFAULT_OVERSEERS = res;
871
+ }
872
+ }
873
+ this.listLoadingState.USERS = false;
874
+ this.refreshList();
875
+ },
876
+ error: () => {
877
+ this.listLoadingState.USERS = false;
878
+ },
879
+ });
880
+ }
881
+ fetchOrganizationGroup(data) {
882
+ this.programService.fetchComplianceGroups().subscribe({
883
+ next: (res) => {
884
+ this.lists.ALL_GROUP = res;
885
+ this.lists.ASSIGNEES_GROUP = res;
886
+ this.lists.REVIEWERS_GROUP = res;
887
+ this.lists.OVERSEERS_GROUP = res;
888
+ if (this.mode !== 'EDIT') {
889
+ this.lists.DEFAULT_ASSIGNEES_GROUP = res;
890
+ this.lists.DEFAULT_REVIEWERS_GROUP = res;
891
+ this.lists.DEFAULT_OVERSEERS_GROUP = res;
892
+ }
893
+ },
894
+ error: (err) => { },
895
+ });
896
+ }
897
+ selectFile(type, files) {
898
+ for (let i = 0; i <= files.length - 1; i++) {
899
+ const name = files[i].file.name ?? '';
900
+ this.uploadFiles(type, files[i].file);
901
+ }
902
+ }
903
+ uploadFiles(type, file) {
904
+ const formData = new FormData();
905
+ formData.append('file', file);
906
+ const destinationString = this.authService.getOrganizationId().toString();
907
+ const dummyFile = {
908
+ file_url_path: `${file?.name}`,
909
+ name: `${file?.name}`,
910
+ uploading: true,
911
+ org_file: `${file?.name}`,
912
+ };
913
+ if (type === 'DESCRIPTION') {
914
+ let description = this.controls?.description_attachment?.value ?? [];
915
+ this.setFormField('program_description_attachments', [
916
+ ...description,
917
+ ...[dummyFile],
918
+ ]);
919
+ this.programService.uploadFiles(formData, destinationString).subscribe({
920
+ next: (res) => {
921
+ description = this.controls?.description_attachment?.value ?? [];
922
+ let descriptionIndex = description.findIndex((ele) => ele?.org_file === res?.org_file);
923
+ description[descriptionIndex] = res;
924
+ this.setFormField('program_description_attachments', this.uniqueByProp(description, 'org_file'));
925
+ },
926
+ error: (err) => {
927
+ description = this.controls?.description_attachment?.value ?? [];
928
+ description = description.filter((ele) => ele?.org_file !== file?.name);
929
+ this.setFormField('program_description_attachments', this.uniqueByProp(description, 'org_file'));
930
+ },
931
+ });
932
+ }
933
+ else if (type === 'OBJECTIVE') {
934
+ let description = this.controls?.description_attachment?.value ?? [];
935
+ this.setFormField('program_description_attachments', [
936
+ ...description,
937
+ ...[dummyFile],
938
+ ]);
939
+ this.programService.uploadFiles(formData, destinationString).subscribe({
940
+ next: (res) => {
941
+ description = this.controls?.description_attachment?.value ?? [];
942
+ let descriptionIndex = description.findIndex((ele) => ele?.org_file === res?.org_file);
943
+ description[descriptionIndex] = res;
944
+ this.setFormField('program_description_attachments', this.uniqueByProp(description, 'org_file'));
945
+ },
946
+ error: (err) => {
947
+ description = this.controls?.description_attachment?.value ?? [];
948
+ description = description.filter((ele) => ele?.org_file !== file?.name);
949
+ this.setFormField('program_description_attachments', this.uniqueByProp(description, 'org_file'));
950
+ },
951
+ });
952
+ }
953
+ }
954
+ deleteAttachment(type, file) {
955
+ if (type === 'DESCRIPTION') {
956
+ let description = this.controls?.description_attachment?.value ?? [];
957
+ if (description) {
958
+ description = description.filter((ele) => ele?.org_file !== file?.org_file);
959
+ this.setFormField('program_description_attachments', description);
960
+ }
961
+ }
962
+ else if (type === 'OBJECTIVE') {
963
+ let objective = this.controls?.objective_attachments?.value ?? [];
964
+ if (objective) {
965
+ objective = objective.filter((ele) => ele?.org_file !== file?.org_file);
966
+ this.setFormField('program_description_attachments', objective);
967
+ }
968
+ }
969
+ }
970
+ selectAllRoleOwner(evt) {
971
+ //need to fetch all the users for all the selected roles
972
+ const loggedInUser = this.currentUser();
973
+ let roleId = [];
974
+ let user;
975
+ if (evt?.target?.checked) {
976
+ roleId = this.controls.program_roles?.value?.map((ele) => ele?._id);
977
+ if (this.featureflagGroups) {
978
+ user = this.controls.program_roles?.value?.map((ele) => ele?._id);
979
+ this.controls.program_owners_group.value = user;
980
+ }
981
+ }
982
+ else {
983
+ roleId = this.controls.program_roles?.value?.map((ele) => {
984
+ if (['key admin', 'admin'].includes(ele.roleName.toLowerCase())) {
985
+ return ele?._id;
986
+ }
987
+ });
988
+ }
989
+ this.programService.fetchAllRoleUsers(roleId).subscribe({
990
+ next: (res) => {
991
+ const user = this.uniqueByProp([...[loggedInUser], ...res?.data], 'member_id');
992
+ this.setFormField('program_owners', user);
993
+ },
994
+ error: (err) => { },
995
+ });
996
+ this.programService.fetchAllRoleGroups(user).subscribe({
997
+ next: (res) => {
998
+ const user = this.uniqueByProp([...res?.data], 'group_id');
999
+ this.setFormField('program_owners_group', user);
1000
+ },
1001
+ });
1002
+ }
1003
+ /**
1004
+ * #### Description
1005
+ *
1006
+ * Returns the unique array of object based on unique key
1007
+ * @param array
1008
+ * @param key
1009
+ * @returns
1010
+ */
1011
+ uniqueByProp(array, key) {
1012
+ return Array.from(array
1013
+ .reduce((acc, item) => (item && item[key] && acc.set(item[key], item), acc), new Map())
1014
+ .values());
1015
+ }
1016
+ setList(list, ids, key) {
1017
+ const data = [];
1018
+ ids.forEach((element) => {
1019
+ const index = list.findIndex((listElement) => listElement[key] == element);
1020
+ if (index !== -1) {
1021
+ data.push(list[index]);
1022
+ }
1023
+ });
1024
+ return data;
1025
+ }
1026
+ saveProgram() {
1027
+ this.loader = true;
1028
+ let payload = this.programService.buildPayload(this.programForm, this);
1029
+ if (payload && this.mode === 'CREATE') {
1030
+ this.programService.saveProgram(payload).subscribe({
1031
+ next: (res) => {
1032
+ this.loader = false;
1033
+ this.showSmiley = true;
1034
+ this.uiKitService.isSmileyOn = true;
1035
+ this.createdProgramId = res._id;
1036
+ },
1037
+ error: (err) => {
1038
+ this.loader = false;
1039
+ this.uiKitService.isSmileyOn = false;
1040
+ if (err?.error?.message?.includes('Category already exist')) {
1041
+ this.isNameExists = true;
1042
+ }
1043
+ },
1044
+ });
1045
+ }
1046
+ if (payload && this.mode === 'EDIT') {
1047
+ this.programService.updateProgram(payload, this.programId).subscribe({
1048
+ next: (res) => {
1049
+ this.loader = false;
1050
+ this.showSmiley = true;
1051
+ this.uiKitService.isSmileyOn = true;
1052
+ this.createdProgramId = res._id;
1053
+ },
1054
+ error: (err) => {
1055
+ this.loader = false;
1056
+ this.uiKitService.isSmileyOn = false;
1057
+ if (err?.error?.message?.includes('Category already exist')) {
1058
+ this.isNameExists = true;
1059
+ }
1060
+ },
1061
+ });
1062
+ }
1063
+ }
1064
+ action(event) {
1065
+ switch (event) {
1066
+ case 'addMore':
1067
+ this.resetForm();
1068
+ this.populateOptionalFields();
1069
+ break;
1070
+ case 'viewProgram':
1071
+ this.viewPrograms();
1072
+ break;
1073
+ }
1074
+ }
1075
+ viewPrograms() {
1076
+ this.disconnectRefresh.emit(false);
1077
+ let url;
1078
+ if (window.location.host.startsWith('localhost')) {
1079
+ url = 'http://' + window.location.host;
1080
+ }
1081
+ else {
1082
+ url = 'https://' + window.location.host;
1083
+ }
1084
+ if (window.location.host.startsWith('localhost')) {
1085
+ url += '/program-workroom?id=' + this.createdProgramId;
1086
+ }
1087
+ else {
1088
+ url += '/program/program-workroom?id=' + this.createdProgramId;
1089
+ }
1090
+ window.location.href = url;
1091
+ }
1092
+ resetForm() {
1093
+ this.uiKitService.isSmileyOn = false;
1094
+ this.scrollToBottom = false;
1095
+ this.showSmiley = false;
1096
+ this.loader = true;
1097
+ const DEFAULT_VALUES = {
1098
+ program_type: 1,
1099
+ program_name: '',
1100
+ program_description: '',
1101
+ program_description_attachments: [],
1102
+ program_objective: '',
1103
+ program_objective_attachments: [],
1104
+ program_roles: [],
1105
+ all_user_in_role: false,
1106
+ program_owners: [],
1107
+ program_owners_group: [],
1108
+ program_approver: [],
1109
+ performance_calculation: 'PAST_EVENT',
1110
+ recurring_frequency: false,
1111
+ lock_scope_change: false,
1112
+ framework: [],
1113
+ rc: [],
1114
+ program_assignee: [],
1115
+ program_assignee_group: [],
1116
+ program_default_assignee: [],
1117
+ program_default_assignee_group: [],
1118
+ assignee_completion_criteria: 'ALL',
1119
+ program_reviewer: [],
1120
+ program_reviewer_group: [],
1121
+ program_default_reviewer: [],
1122
+ program_default_reviewer_group: [],
1123
+ reviewer_completion_criteria: 'SEQUENTIAL',
1124
+ program_overseer: [],
1125
+ program_overseer_group: [],
1126
+ program_default_overseer: [],
1127
+ program_default_overseer_group: [],
1128
+ program_default_failed_overseer: [],
1129
+ program_default_failed_overseer_group: [],
1130
+ program_assessments: [],
1131
+ evidence_required: false,
1132
+ allow_any_file_key_evidence: false,
1133
+ custom_fields: [],
1134
+ program_state: 0,
1135
+ };
1136
+ this.resetAdditionalOption();
1137
+ this.programForm.reset();
1138
+ this.programForm.patchValue(DEFAULT_VALUES);
1139
+ this.editorData = {
1140
+ programObjective: '',
1141
+ programDescription: '',
1142
+ };
1143
+ this.loader = false;
1144
+ this.isNameExists = false;
1145
+ this.fetchRoles();
1146
+ this.refreshForm.emit(true);
1147
+ this.form.nativeElement.scrollIntoView({
1148
+ behavior: 'smooth',
1149
+ block: 'start',
1150
+ });
1151
+ }
1152
+ closeSmiley(event) {
1153
+ this.showSmiley = false;
1154
+ this.uiKitService.isSmileyOn = false;
1155
+ this.closeWorkflow.emit({ evt: '', confirm: false });
1156
+ }
1157
+ /**
1158
+ * Get program details when user is trying to edit program
1159
+ */
1160
+ getProgramDetails() {
1161
+ this.programService
1162
+ .getProgram(this.programId)
1163
+ .pipe(take(1))
1164
+ .subscribe((res) => {
1165
+ this.setFormField('program_name', res?.name);
1166
+ this.setFormField('program_type', res?.programType);
1167
+ this.setFormField('program_objective', res?.program_objective?.text);
1168
+ this.setFormField('all_user_in_role', res?.all_user_in_role);
1169
+ this.setFormField('program_description_attachments', res?.description?.attachments);
1170
+ this.setFormField('program_objective_attachments', res?.program_objective?.attachments);
1171
+ this.setFormField('performance_calculation', res?.calculate_past_upcoming_event);
1172
+ this.setFormField('recurring_frequency', res?.program_frequency);
1173
+ if (res?.program_frequency &&
1174
+ this.mode === 'EDIT' &&
1175
+ (this.orgDetails?.hasProgramFullPermission ||
1176
+ !this.programSimplifyFlag)) {
1177
+ this.additionalOption.PROGRAM_FREQUENCY = true;
1178
+ this.populateOptionalFields();
1179
+ }
1180
+ this.setFormField('lock_scope_change', res?.lock_scope);
1181
+ if (res?.lock_scope &&
1182
+ (this.orgDetails?.hasProgramFullPermission ||
1183
+ !this.programSimplifyFlag)) {
1184
+ this.additionalOption.SCOPE_CHANGES = true;
1185
+ this.populateOptionalFields();
1186
+ }
1187
+ this.setFormField('program_state', res?.state);
1188
+ const rc = res.rc_details.map((ele) => {
1189
+ return { ...ele, item_name: ele?.rc_name, item_id: ele?.rc_id };
1190
+ });
1191
+ this.setFormField('rc', rc);
1192
+ if (res?.rc_details &&
1193
+ res?.rc_details?.length &&
1194
+ (this.orgDetails?.hasProgramFullPermission ||
1195
+ !this.programSimplifyFlag)) {
1196
+ this.additionalOption.RC = true;
1197
+ this.populateOptionalFields();
1198
+ }
1199
+ this.setFormField('evidence_required', res?.evidence_upload_flag);
1200
+ this.setFormField('allow_any_file_key_evidence', res?.is_key_evidence);
1201
+ if ((res?.evidence_upload_flag || res?.is_key_evidence) &&
1202
+ (this.orgDetails?.hasProgramFullPermission ||
1203
+ !this.programSimplifyFlag)) {
1204
+ this.additionalOption.FORMATE_EVIDENCE = true;
1205
+ this.populateOptionalFields();
1206
+ }
1207
+ this.setFormField('assignee_completion_criteria', res.default_assignee_type);
1208
+ this.setFormField('reviewer_completion_criteria', res.default_reviewers_type);
1209
+ this.editorData.programDescription = res.description?.text;
1210
+ this.editorData.programObjective = res.program_objective?.text;
1211
+ this.setFormField('framework', {
1212
+ ...res.framework_details,
1213
+ ...{ _id: res?.framework_details?.framework_id },
1214
+ });
1215
+ const role = res?.roles?.map((ele) => {
1216
+ return {
1217
+ _id: ele?.roleId,
1218
+ roleName: ele?.roleName,
1219
+ licenseType: ele?.licenseType,
1220
+ permissionGroupName: ele?.permissionGroupName,
1221
+ };
1222
+ });
1223
+ this.setFormField('program_roles', role);
1224
+ if (res?.roles && res?.roles?.length && this.mode === 'EDIT') {
1225
+ this.additionalOption.ROLES = true;
1226
+ }
1227
+ if (res.assessmentData.length) {
1228
+ res.assessmentData = res.assessmentData.map((ele) => {
1229
+ return {
1230
+ ...ele,
1231
+ assessmentIds: ele?.assessments.map((assess) => {
1232
+ return { ...assess, id: assess?._id };
1233
+ }),
1234
+ };
1235
+ });
1236
+ this.setFormField('program_assessments', res.assessmentData);
1237
+ if (this.orgDetails?.hasProgramFullPermission ||
1238
+ !this.programSimplifyFlag) {
1239
+ this.additionalOption.ASSESSMENT = true;
1240
+ this.populateOptionalFields();
1241
+ }
1242
+ }
1243
+ if (res.custom_fields.length) {
1244
+ this.setFormField('custom_fields', res.custom_fields);
1245
+ this.additionalOption.CUSTOM_FIELDS = true;
1246
+ this.populateOptionalFields();
1247
+ }
1248
+ this.isApproverDisabled = res?.isApproverDisabled ?? false;
1249
+ if (this.isApproverDisabled) {
1250
+ setTimeout(() => {
1251
+ this.disableElementsFromMoreOptions.emit(['APPROVER']);
1252
+ }, 500);
1253
+ }
1254
+ this.populateMembers(res);
1255
+ this.populateGroups(res);
1256
+ this.fetchUsersAssociatedWithRoles('getProgramDetails');
1257
+ this.fetchGroupsAssociatedWithRoles();
1258
+ this.fetchOrganizationGroup();
1259
+ this.fetchOrganizationUsers();
1260
+ });
1261
+ }
1262
+ populateMembers(res) {
1263
+ this.loader = true;
1264
+ const ids = [
1265
+ ...new Set([
1266
+ ...(res?.owners ?? []),
1267
+ ...(res?.approvers ?? []),
1268
+ ...(res?.assignee_ids ?? []),
1269
+ ...(res?.default_assignee_ids ?? []),
1270
+ ...(res?.reviewers ?? []),
1271
+ ...(res?.default_reviewers ?? []),
1272
+ ...(res?.overseers?.cc_email ?? []),
1273
+ ...(res?.overseers?.failure_cc_email ?? []).filter((ele) => ele),
1274
+ ...(res?.default_overseers?.cc_email ?? []),
1275
+ ...(res?.default_overseers?.failure_cc_email ?? []).filter((ele) => ele),
1276
+ ]),
1277
+ ];
1278
+ this.programService.getMemeberByIds(ids).subscribe({
1279
+ next: (response) => {
1280
+ this.loader = false;
1281
+ if (res.owners && res?.owners?.length) {
1282
+ const owners = response.filter((ele) => res?.owners.includes(ele?.member_id));
1283
+ this.setFormField('program_owners', owners);
1284
+ if (this.mode === 'EDIT') {
1285
+ this.additionalOption.OWNERS = true;
1286
+ this.populateOptionalFields();
1287
+ }
1288
+ }
1289
+ if (res.approvers &&
1290
+ res?.approvers?.length &&
1291
+ !this.programSimplifyFlag) {
1292
+ const approvers = response.filter((ele) => res?.approvers.includes(ele?.member_id));
1293
+ this.setFormField('program_approver', approvers);
1294
+ this.additionalOption.APPROVER = true;
1295
+ this.populateOptionalFields();
1296
+ }
1297
+ if (res?.assignee_ids && res?.assignee_ids?.length) {
1298
+ const assignee = response.filter((ele) => res?.assignee_ids.includes(ele?.member_id));
1299
+ this.setFormField('program_assignee', assignee);
1300
+ this.lists.DEFAULT_ASSIGNEES = assignee;
1301
+ if (this.orgDetails?.hasProgramFullPermission ||
1302
+ !this.programSimplifyFlag) {
1303
+ this.additionalOption.ASSIGNEES = true;
1304
+ this.populateOptionalFields();
1305
+ }
1306
+ }
1307
+ if (res?.default_assignee_ids && res?.default_assignee_ids?.length) {
1308
+ const assignee = response.filter((ele) => res?.default_assignee_ids.includes(ele?.member_id));
1309
+ this.setFormField('program_default_assignee', assignee);
1310
+ if (this.orgDetails?.hasProgramFullPermission ||
1311
+ !this.programSimplifyFlag) {
1312
+ this.additionalOption.ASSIGNEES = true;
1313
+ this.populateOptionalFields();
1314
+ }
1315
+ }
1316
+ if (res?.reviewers && res?.reviewers?.length) {
1317
+ const reviewers = response.filter((ele) => res?.reviewers.includes(ele?.member_id));
1318
+ this.setFormField('program_reviewer', reviewers);
1319
+ this.lists.DEFAULT_REVIEWERS = reviewers;
1320
+ if (this.orgDetails?.hasProgramFullPermission ||
1321
+ !this.programSimplifyFlag) {
1322
+ this.additionalOption.REVIEWER = true;
1323
+ this.populateOptionalFields();
1324
+ }
1325
+ }
1326
+ if (res?.default_reviewers && res?.default_reviewers?.length) {
1327
+ const reviewers = response.filter((ele) => res?.default_reviewers.includes(ele?.member_id));
1328
+ this.setFormField('program_default_reviewer', reviewers);
1329
+ if (this.orgDetails?.hasProgramFullPermission ||
1330
+ !this.programSimplifyFlag) {
1331
+ this.additionalOption.REVIEWER = true;
1332
+ this.populateOptionalFields();
1333
+ }
1334
+ }
1335
+ if (res?.overseers && res?.overseers?.cc_email?.length) {
1336
+ const cc = response.filter((ele) => res?.overseers?.cc_email.includes(ele?.member_id));
1337
+ this.setFormField('program_overseer', cc);
1338
+ this.lists.DEFAULT_OVERSEERS = cc;
1339
+ if (this.orgDetails?.hasProgramFullPermission ||
1340
+ !this.programSimplifyFlag) {
1341
+ this.additionalOption.OVERSEER = true;
1342
+ this.populateOptionalFields();
1343
+ }
1344
+ }
1345
+ if (res?.default_overseers &&
1346
+ (res?.default_overseers?.cc_email?.length ||
1347
+ res?.default_overseers?.failure_cc_email?.length)) {
1348
+ if (res?.default_overseers?.cc_email?.length) {
1349
+ const defaultCC = response.filter((ele) => res?.default_overseers?.cc_email.includes(ele?.member_id));
1350
+ this.setFormField('program_default_overseer', defaultCC);
1351
+ }
1352
+ if (res?.default_overseers?.failure_cc_email?.length) {
1353
+ const failCC = response.filter((ele) => res?.default_overseers?.failure_cc_email.includes(ele?.member_id));
1354
+ this.setFormField('program_default_failed_overseer', failCC);
1355
+ }
1356
+ if (this.orgDetails?.hasProgramFullPermission ||
1357
+ !this.programSimplifyFlag) {
1358
+ this.additionalOption.OVERSEER = true;
1359
+ this.populateOptionalFields();
1360
+ }
1361
+ }
1362
+ },
1363
+ });
1364
+ this.checkProgramOptionField();
1365
+ }
1366
+ populateGroups(res) {
1367
+ const ids = [
1368
+ ...new Set([
1369
+ ...(res?.owners_group ?? []),
1370
+ ...(res?.assignee_group_ids ?? []),
1371
+ ...(res?.default_assignee_group_ids ?? []),
1372
+ ...(res?.overseers?.cc_email_groups ?? []),
1373
+ ...(res?.reviewer_group_ids ?? []),
1374
+ ...(res?.default_reviewer_group_ids ?? []),
1375
+ ...(res?.default_overseers?.cc_email_groups ?? []),
1376
+ ...(res?.default_overseers?.failure_cc_email_groups ?? []),
1377
+ ]),
1378
+ ];
1379
+ this.programService.getMemberByGroups(ids).subscribe({
1380
+ next: (resp) => {
1381
+ const response = resp?.data;
1382
+ if (res.owners_group && res?.owners_group?.length) {
1383
+ const owners = response.filter((ele) => res?.owners_group?.includes(ele?.group_id));
1384
+ this.setFormField('program_owners_group', owners);
1385
+ }
1386
+ if (res.assignee_group_ids && res?.assignee_group_ids?.length) {
1387
+ const assignee = response.filter((ele) => res?.assignee_group_ids?.includes(ele?.group_id));
1388
+ this.setFormField('program_assignee_group', assignee);
1389
+ this.lists.DEFAULT_ASSIGNEES_GROUP = assignee;
1390
+ if (this.orgDetails?.hasProgramFullPermission ||
1391
+ !this.programSimplifyFlag) {
1392
+ this.additionalOption.ASSIGNEES = true;
1393
+ }
1394
+ }
1395
+ if (res?.default_assignee_group_ids &&
1396
+ res?.default_assignee_group_ids?.length) {
1397
+ const assignee = response.filter((ele) => res?.default_assignee_group_ids?.includes(ele?.group_id));
1398
+ this.setFormField('program_default_assignee_group', assignee);
1399
+ if (this.orgDetails?.hasProgramFullPermission ||
1400
+ !this.programSimplifyFlag) {
1401
+ this.additionalOption.ASSIGNEES = true;
1402
+ }
1403
+ }
1404
+ if (res?.reviewer_group_ids && res?.reviewer_group_ids?.length) {
1405
+ const reviewer = response.filter((ele) => res?.reviewer_group_ids?.includes(ele?.group_id));
1406
+ this.setFormField('program_reviewer_group', reviewer);
1407
+ this.lists.DEFAULT_REVIEWERS_GROUP = reviewer;
1408
+ if (this.orgDetails?.hasProgramFullPermission ||
1409
+ !this.programSimplifyFlag) {
1410
+ this.additionalOption.REVIEWER = true;
1411
+ }
1412
+ }
1413
+ if (res?.default_reviewer_group_ids &&
1414
+ res?.default_reviewer_group_ids?.length) {
1415
+ const reviewer = response?.filter((ele) => res?.default_reviewer_group_ids?.includes(ele?.group_id));
1416
+ this.setFormField('program_default_reviewer_group', reviewer);
1417
+ this.controls.reviewer_completion_criteria.value =
1418
+ this.controls?.program_default_reviewer_group?.value?.length > 0
1419
+ ? 'ANYONE'
1420
+ : this.controls?.reviewer_completion_criteria?.value;
1421
+ if (this.orgDetails?.hasProgramFullPermission ||
1422
+ !this.programSimplifyFlag) {
1423
+ this.additionalOption.REVIEWER = true;
1424
+ }
1425
+ }
1426
+ if (res?.overseers?.cc_email_groups &&
1427
+ res?.overseers?.cc_email_groups?.length) {
1428
+ const overseerGroup = response.filter((ele) => res?.overseers?.cc_email_groups?.includes(ele?.group_id));
1429
+ this.setFormField('program_overseer_group', overseerGroup);
1430
+ this.lists.DEFAULT_OVERSEERS_GROUP = overseerGroup;
1431
+ if (this.orgDetails?.hasProgramFullPermission ||
1432
+ !this.programSimplifyFlag) {
1433
+ this.additionalOption.OVERSEER = true;
1434
+ }
1435
+ }
1436
+ if (res?.default_overseers?.cc_email_groups &&
1437
+ res?.default_overseers?.cc_email_groups?.length) {
1438
+ const defaultOverseerGroup = response.filter((ele) => res?.default_overseers?.cc_email_groups?.includes(ele?.group_id));
1439
+ this.setFormField('program_default_overseer_group', defaultOverseerGroup);
1440
+ if (this.orgDetails?.hasProgramFullPermission ||
1441
+ !this.programSimplifyFlag) {
1442
+ this.additionalOption.OVERSEER = true;
1443
+ }
1444
+ }
1445
+ if (res?.default_overseers?.failure_cc_email_groups &&
1446
+ res?.default_overseers?.failure_cc_email_groups?.length) {
1447
+ const defaultOverseerFailureGroup = response.filter((ele) => res?.default_overseers?.failure_cc_email_groups?.includes(ele?.group_id));
1448
+ this.setFormField('program_default_failed_overseer_group', defaultOverseerFailureGroup);
1449
+ if (this.orgDetails?.hasProgramFullPermission ||
1450
+ !this.programSimplifyFlag) {
1451
+ this.additionalOption.OVERSEER = true;
1452
+ }
1453
+ }
1454
+ },
1455
+ // As of now groups has been removed from reviewer and overseeer if this group feature gets incoperated in
1456
+ //future need to add group condition here to prepopulate the data while editing.
1457
+ });
1458
+ this.checkProgramOptionField();
1459
+ }
1460
+ resetAdditionalOption() {
1461
+ this.additionalOption.ROLES = false;
1462
+ this.additionalOption.OWNERS = false;
1463
+ this.additionalOption.APPROVER = false;
1464
+ this.additionalOption.PROGRAM_FREQUENCY = false;
1465
+ this.additionalOption.SCOPE_CHANGES = false;
1466
+ this.additionalOption.RC = false;
1467
+ this.additionalOption.ASSIGNEES = false;
1468
+ this.additionalOption.REVIEWER = false;
1469
+ this.additionalOption.OVERSEER = false;
1470
+ this.additionalOption.ASSESSMENT = false;
1471
+ this.additionalOption.FORMATE_EVIDENCE = false;
1472
+ this.additionalOption.CUSTOM_FIELDS = false;
1473
+ }
1474
+ checkProgramOptionField() {
1475
+ const code = [
1476
+ 'PROGRAM_FREQUENCY',
1477
+ 'SCOPE_CHANGES',
1478
+ 'RC',
1479
+ 'ASSIGNEES',
1480
+ 'REVIEWER',
1481
+ 'OVERSEER',
1482
+ 'ASSESSMENT',
1483
+ 'FORMATE_EVIDENCE',
1484
+ 'CUSTOM_FIELDS',
1485
+ ];
1486
+ let isMoreOption = false;
1487
+ code.forEach((key) => {
1488
+ if (this.additionalOption[key]) {
1489
+ isMoreOption = true;
1490
+ }
1491
+ });
1492
+ this.isProgramScope = isMoreOption;
1493
+ }
1494
+ enablefeature() {
1495
+ this.featureflagrole = this.allowedFeature.isFeatureEnabled('ff_role_improvements');
1496
+ this.isAscentAllowed = this.allowedFeature.isFeatureEnabled('ff_compliance_framework');
1497
+ this.programSimplifyFlag = this.allowedFeature.isFeatureEnabled('ff_program_simplify');
1498
+ this.featureflagGroups =
1499
+ this.allowedFeature.isFeatureEnabled('ff_program_groups');
1500
+ this.toolTipData.owner = this.featureflagrole
1501
+ ? 'Owners are responsible for managing a Program. Only Owners can make changes to a Program and the responsibilities that are linked with the Program.<br>The <strong>Key Power User</strong> and all <b>Power Users</b> will be selected as the Owners of a Program by default.'
1502
+ : 'Owners are responsible for managing a Program. Only Owners can make changes to a Program and the responsibilities that are linked with the Program.<br>The <strong>Key Admin</strong> and all <b>Admin</b> users will be selected as the Owners of a Program by default.';
1503
+ this.ff_rc_listing = this.allowedFeature.isFeatureEnabled('ff_rc_listing');
1504
+ }
1505
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowProgramComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.ProgramsService }, { token: i3.AuthService }, { token: i4.UiKitService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1506
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowProgramComponent, selector: "app-workflow-program", inputs: { canFrameworkChange: "canFrameworkChange", mode: "mode", programId: "programId", programType: "programType", allowedFeature: "allowedFeature", addToProgramDetails: "addToProgramDetails", orgDetails: "orgDetails" }, outputs: { pickerChanged: "pickerChanged", populateOption: "populateOption", closeWorkflow: "closeWorkflow", showConfirmationAlert: "showConfirmationAlert", disconnectRefresh: "disconnectRefresh", refreshForm: "refreshForm", hideElementsFromMoreOptions: "hideElementsFromMoreOptions", onRemovingRole: "onRemovingRole", disableElementsFromMoreOptions: "disableElementsFromMoreOptions" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, read: ElementRef }, { propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-program\" #form>\r\n <form novalidate [formGroup]=\"programForm\">\r\n <!-- Program Category Type -->\r\n <form-field\r\n [checked]=\"controls?.program_type?.value > -1\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >PROGRAM TYPE <span class=\"required\">*</span></label\r\n >\r\n <tab-selector\r\n formControlName=\"program_type\"\r\n [displayArray]=\"constants?.categoryType\"\r\n ></tab-selector>\r\n <!-- <p *ngIf=\"program_name?.invalid\" class=\"error-message\">Add a program type</p> -->\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <form-field\r\n *ngIf=\"isAscentAllowed\"\r\n [checked]=\"false\"\r\n [active]=\"false\"\r\n [disabled]=\"false\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <!-- [selectDiv]=\"true\" -->\r\n <input-with-pill\r\n [placeholder]=\"'Select a framework that this Program relates to'\"\r\n (select)=\"activateList('FRAMEWORK')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.framework.value?.name\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"canFrameworkChange\"\r\n (click)=\"remove('', 'FRAMEWORK')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.framework.value?.name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.framework.value?.name }}</span\r\n >\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove('', 'FRAMEWORK')\" *ngIf=\"canFrameworkChange\" class=\"icons\" >&#xe90d;</i> {{controls?.framework.value?.name}}</span>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"canFrameworkChange\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('FRAMEWORK')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Program Category Name -->\r\n <form-field\r\n [checked]=\"controls?.program_name?.value?.trim()?.length\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >PROGRAM NAME <span class=\"required\">*</span></label\r\n >\r\n <input\r\n InputTrim\r\n formControlName=\"program_name\"\r\n type=\"text\"\r\n placeholder=\"What is the Program name?\"\r\n />\r\n\r\n <p\r\n *ngIf=\"\r\n controls?.program_name?.errors && controls?.program_name?.touched\r\n \"\r\n class=\"error-message\"\r\n >\r\n Enter a name for this Program.\r\n </p>\r\n <p *ngIf=\"isNameExists\" class=\"error-message\">\r\n Program name already exists.\r\n </p>\r\n <div class=\"upload-files vx-d-flex vx-align-center vx-flex-wrap vx-mt-1\">\r\n <file-pill\r\n *ngFor=\"\r\n let attachment of controls?.description_attachment?.value\r\n | slice : 0 : 2\r\n \"\r\n [extension]=\"attachment?.org_file?.split('.').pop()\"\r\n [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\"\r\n (delete)=\"deleteAttachment('DESCRIPTION', attachment)\"\r\n >\r\n </file-pill>\r\n <button\r\n *ngIf=\"controls?.description_attachment?.value?.length > 2\"\r\n class=\"file-count\"\r\n appPopover\r\n (click)=\"uploadFile.popover()\"\r\n placement=\"right\"\r\n >\r\n +{{ controls?.description_attachment?.value?.length - 2 }}\r\n </button>\r\n <app-popover #uploadFile [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n class=\"vx-p-2\"\r\n *ngFor=\"\r\n let attachment of controls?.description_attachment?.value\r\n | slice : 2\r\n \"\r\n >\r\n <file-pill\r\n [extension]=\"attachment?.org_file?.split('.').pop()\"\r\n [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\"\r\n (delete)=\"deleteAttachment('DESCRIPTION', attachment)\"\r\n ></file-pill>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <vcomply-editor\r\n [(ngModel)]=\"editorData.programDescription\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (sendSavedFiles)=\"selectFile('DESCRIPTION', $event)\"\r\n (ngModelChange)=\"setFormField('program_description', $event)\"\r\n [editorConfig]=\"constants?.description\"\r\n >\r\n </vcomply-editor>\r\n </form-field>\r\n\r\n <!-- Objective -->\r\n <form-field\r\n [checked]=\"controls?.program_objective?.value?.trim()?.length\"\r\n [active]=\"activeList === 'OBJECTIVE'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'OBJECTIVE'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >OBJECTIVE\r\n <!-- <span class=\"required\">*</span> -->\r\n </label>\r\n <vcomply-editor\r\n [(ngModel)]=\"editorData.programObjective\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (sendSavedFiles)=\"selectFile('OBJECTIVE', $event)\"\r\n (ngModelChange)=\"setFormField('program_objective', $event, true)\"\r\n [editorConfig]=\"constants?.objective\"\r\n >\r\n </vcomply-editor>\r\n <!-- <p *ngIf=\"!isObjectiveValid\" class=\"error-message\">Specify the objective for this Program.</p> -->\r\n </form-field>\r\n\r\n <!-- Roles -->\r\n <form-field\r\n *ngIf=\"additionalOption?.ROLES\"\r\n [checked]=\"controls?.program_roles?.value?.length\"\r\n [active]=\"activeList === 'ROLE'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'ROLE'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/roles.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\" id=\"permissiongroup\"\r\n >{{ ff_rc_listing ? \"PERMISSIONS\" : \"PERMISSION GROUP(S)\" }}\r\n <span class=\"required\">*</span\r\n ><i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n ff_rc_listing\r\n ? 'Permissions let you specify the users that can be \u201COwners\u201D' +\r\n (allowedFeature.isFeatureEnabled('ff_program_simplify')\r\n ? ' '\r\n : ' and \u201CApprovers\u201D') +\r\n 'of a Program.'\r\n : 'Permission group(s) let you specify the users that can be \u201COwners\u201D' +\r\n (allowedFeature.isFeatureEnabled('ff_program_simplify')\r\n ? ' '\r\n : ' and \u201CApprovers\u201D') +\r\n 'of a Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"RoleHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n id=\"placeholdername\"\r\n [placeholder]=\"\r\n ff_rc_listing\r\n ? 'Which user permissions have access to this program?'\r\n : 'Which user permission groups have access to this program?'\r\n \"\r\n (select)=\"activateList('ROLE')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_roles?.value?.length\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"\r\n !lists.SYSTEM_ROLE_IDS.includes(\r\n controls?.program_roles?.value[0]?._id\r\n )\r\n \"\r\n (click)=\"remove(controls?.program_roles?.value[0], 'ROLE')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n featureflagrole &&\r\n controls?.program_roles?.value[0]?.permissionGroupName\r\n ? controls?.program_roles?.value[0]?.permissionGroupName\r\n : controls?.program_roles?.value[0]?.roleName\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n featureflagrole &&\r\n controls?.program_roles?.value[0]?.permissionGroupName\r\n ? controls?.program_roles?.value[0]?.permissionGroupName\r\n : controls?.program_roles?.value[0]?.roleName\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"role.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_roles?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_roles?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(controls?.program_roles?.value[0]?._id)\" (click)=\"remove(controls?.program_roles?.value[0],'ROLE')\" class=\"icons\">&#xe90d;</i>{{featureflagrole && controls?.program_roles?.value[0]?.permissionGroupName ? controls?.program_roles?.value[0]?.permissionGroupName : controls?.program_roles?.value[0]?.roleName}}</span>\r\n <button *ngIf=\"controls?.program_roles?.value?.length > 1\" class=\"count\" appPopover (click)=\"role.popover()\" placement=\"right\">+{{controls?.program_roles?.value?.length - 1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ROLE'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ROLE')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">\r\n {{ featureflagrole ? \"Add a permission group(s)\" : \"Add a role(s)\" }}\r\n </p>\r\n <app-popover #role [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of controls?.program_roles?.value | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(data?._id)\"\r\n class=\"icons\"\r\n (click)=\"removeRole(data, 'ROLE')\"\r\n >&#xe90d;</i\r\n >\r\n {{\r\n featureflagrole && data?.permissionGroupName\r\n ? data?.permissionGroupName\r\n : data?.roleName\r\n }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Owners -->\r\n <form-field\r\n *ngIf=\"additionalOption?.OWNERS\"\r\n [checked]=\"\r\n controls?.program_owners.value?.length > 0 ||\r\n controls?.program_owners_group.value?.length > 0\r\n \"\r\n [active]=\"activeList === 'OWNER'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'OWNER'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/owner.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >OWNER(S) <span class=\"required\">*</span>\r\n <span\r\n class=\"icon\"\r\n *ngIf=\"toolTipData.owner !== ''\"\r\n libPopoverHover\r\n (mouseover)=\"dataTooltip.popover()\"\r\n (mouseleave)=\"dataTooltip.closePopover()\"\r\n placement=\"right\"\r\n ><i class=\"icons\">&#xe91f;</i></span\r\n >\r\n <popover-hover #dataTooltip>\r\n <div class=\"vx-info-card\">\r\n <div\r\n class=\"vx-info-card-body\"\r\n [innerHTML]=\"toolTipData.owner\"\r\n id=\"OwnerHelpText\"\r\n ></div>\r\n </div>\r\n </popover-hover>\r\n </label>\r\n <input-with-pill\r\n [placeholder]=\"'Who is responsible for managing this program?'\"\r\n (select)=\"activateList('OWNER')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_owners.value[0]\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_owners?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_owners?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover\r\n (click)=\"owner.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_owners?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_owners?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_owners_group?.value?.length &&\r\n controls?.program_owners?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_owners_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"\r\n !['ADMIN', 'KEY_ADMIN', 'LOGGED_IN'].includes(\r\n owner?.user_role\r\n )\r\n \"\r\n (click)=\"\r\n remove(\r\n controls?.program_owners_group?.value[0],\r\n 'OWNER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_owners_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_owners_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"group.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_owners_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_owners_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_owners?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >{{controls?.program_owners?.value[0]?.member_name}}</span></span>\r\n <button *ngIf=\"controls?.program_owners?.value?.length > 1\" class=\"count user\" appPopover (click)=\"owner.popover()\" placement=\"right\">+{{controls?.program_owners?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_owners_group?.value?.length && controls?.program_owners?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_owners_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\" (click)=\"remove(owner,'OWNER_GROUP')\">&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_owners_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_owners_group?.value[0]?.group_name}}</span></span>\r\n <button *ngIf=\"controls?.program_owners_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{controls?.program_owners_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'OWNER'\"\r\n [class.disabled]=\"controls?.all_user_in_role?.value\"\r\n (click)=\"activateList('OWNER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a owner(s)</p>\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div\r\n class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\"\r\n >\r\n {{\r\n featureflagrole\r\n ? \"ALL USERS ASSOCIATED WITH THE SELECTED PERMISSION GROUPS\"\r\n : \"ALL USERS ASSOCIATED WITH THE SELECTED ROLES\"\r\n }}\r\n </div>\r\n <switch\r\n formControlName=\"all_user_in_role\"\r\n (change)=\"selectAllRoleOwner($event)\"\r\n ></switch>\r\n </div>\r\n <app-popover #owner [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let owner of controls?.program_owners?.value | slice : 1\"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\r\n ).includes(owner?.member_id)\r\n \"\r\n class=\"icons\"\r\n (click)=\"remove(owner, 'OWNER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let owner of controls?.program_owners_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"\r\n !['ADMIN', 'KEY_ADMIN', 'LOGGED_IN'].includes(\r\n owner?.user_role\r\n )\r\n \"\r\n class=\"icons\"\r\n (click)=\"remove(owner, 'OWNER_GROUP')\"\r\n >&#xe90d;</i\r\n >\r\n {{ owner?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Approvers -->\r\n <!-- Removing this option in Program simplification -->\r\n <form-field\r\n *ngIf=\"additionalOption?.APPROVER && !programSimplifyFlag\"\r\n [checked]=\"controls?.program_approver?.value?.length\"\r\n [active]=\"activeList === 'APPROVER'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'APPROVER'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >APPROVER\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'An Approver is responsible for approving a Program. Where an Approver is selected, the Program and all responsibilities linked with that Program will only commence once the Program has been approved.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ApproverHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [placeholder]=\"'Who is responsible for approving this program?'\"\r\n [disabled]=\"isApproverDisabled\"\r\n (select)=\"activateList('APPROVER')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_approver?.value[0]\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"isApproverDisabled === false\"\r\n (click)=\"remove(controls?.program_approver?.value[0], 'APPROVER')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_approver?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_approver?.value[0]?.member_name }}</span\r\n >\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <i *ngIf=\"isApproverDisabled === false\" (click)=\"remove(controls?.program_approver?.value[0],'APPROVER')\"\r\n class=\"icons vx-fs-9 vx-mr-1 cross\">&#xe90d;</i>{{controls?.program_approver?.value[0]?.member_name}}\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'APPROVER' && isApproverDisabled === false\"\r\n (click)=\"activateList('APPROVER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Performance Calculated -->\r\n <!-- <form-field [checked]=\"controls?.performance_calculation?.value\" [active]=\"activeList === 'PERFORMANCE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'PERFORMANCE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/performance-calc.svg'\">\r\n <label class=\"vx-control-panel\">HOW SHOULD THE PERFORMANCE OF THIS PROGRAM BE CALCULATED?</label>\r\n <tab-selector formControlName=\"performance_calculation\" [displayArray]=\"constants?.performanceCalculation\">\r\n </tab-selector>\r\n </form-field> -->\r\n <ng-container *ngIf=\"isProgramScope\">\r\n <div\r\n class=\"scope-label vx-fs-10 vx-txt-white vx-tt-uppercase vx-pl-1 vx-pr-1 vx-mb-5 vx-lh-4 vx-d-inline-block\"\r\n >\r\n PROGRAM SCOPE\r\n </div>\r\n <!-- <i class=\"icons info-icon vx-fs-12 vx-txt-blue vx-ml-1\" [appTooltip]=\"tooltip.programScope\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i> -->\r\n <span\r\n class=\"icon info-icon vx-fs-12 vx-txt-blue vx-ml-1\"\r\n *ngIf=\"toolTipData.programScop !== ''\"\r\n libPopoverHover\r\n (mouseover)=\"dataTooltip.popover()\"\r\n (mouseleave)=\"dataTooltip.closePopover()\"\r\n placement=\"right\"\r\n ><i class=\"icons\">&#xe91f;</i></span\r\n >\r\n <popover-hover #dataTooltip>\r\n <div class=\"vx-info-card\">\r\n <div\r\n class=\"vx-info-card-body\"\r\n [innerHTML]=\"toolTipData.programScope\"\r\n id=\"PSHelpText\"\r\n ></div>\r\n </div>\r\n </popover-hover>\r\n </ng-container>\r\n\r\n <!-- Program Frequency -->\r\n <form-field\r\n *ngIf=\"additionalOption?.PROGRAM_FREQUENCY\"\r\n [checked]=\"[true, false].includes(controls?.recurring_frequency?.value)\"\r\n [active]=\"activeList === 'FREQUENCY'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'FREQUENCY'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recurring.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\" id=\"PDChange\"\r\n >PROGRAM DURATION\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Program Duration refers to the duration of the Program. A Program can occur in perpetuity, or it can occur until the end of the current business cycle that has been specified in ' +\r\n businessCycle.selectedCycle.business_cycle +\r\n '. All responsibilities linked with that Program will also have the same Program Duration.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ProgramDurationHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <span class=\"text vx-mb-0\">Is this program recurring?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'recurring_frequency'\"\r\n [checked]=\"controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'recurring_frequency'\"\r\n [checked]=\"!controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Scope Changes -->\r\n <form-field\r\n *ngIf=\"additionalOption?.SCOPE_CHANGES\"\r\n [checked]=\"[true, false].includes(controls?.lock_scope_change?.value)\"\r\n [active]=\"activeList === 'SCOPE'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'SCOPE'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >Lock the Program Scope\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If the Program Scope is locked, neither the Program nor the responsibilities linked with the Program can be edited once the Program begins. In order to edit the Program or the linked responsibilities, the Program details will need to be edited.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ScopeChangesHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <span class=\"text\"\r\n >Would you like to\r\n <span class=\"vx-label-txt vx-fw-500\">lock changes</span> to the\r\n program scope?</span\r\n >\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'lock_scope_change'\"\r\n [checked]=\"controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'lock_scope_change'\"\r\n [checked]=\"!controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <!-- <form-field [checked]=\"false\" [active]=\"activeList === 'FRAMEWORK'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FRAMEWORK'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\">\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <input-with-pill [placeholder]=\"'Select a framework that this Program relates to'\" (select)=\"activateList('FRAMEWORK')\">\r\n <div class=\"selected\" *ngIf=\"controls?.framework?.value?.framework_name\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove(controls?.framework.value,'FRAMEWORK')\" class=\"icons\">&#xe90d;</i>{{controls?.framework?.value?.framework_name}}</span>\r\n <button class=\"count\" appPopover (click)=\"framework.popover()\" placement=\"right\">+5</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='FRAMEWORK'\" (click)=\"activateList('FRAMEWORK')\" class=\"edit\" type=\"button\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #framework [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\">&#xe90d;</i>\r\n Manage framework name\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field> -->\r\n\r\n <!-- Responsibility Center -->\r\n <form-field\r\n *ngIf=\"additionalOption?.RC\"\r\n [checked]=\"controls?.rc?.value?.length\"\r\n [active]=\"activeList === 'RC'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'RC'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >RESPONSIBILITY CENTER\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Responsibility Centers represent your organizational and operational infrastructure. Where Responsibility Centers are selected when creating a Program, only those Responsibilities Centers will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"RCHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n (select)=\"activateList('RC')\"\r\n [placeholder]=\"\r\n 'Which Responsibility Center(s) can be linked to the responsibilities associated with this Program?'\r\n \"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"controls?.rc?.value && controls?.rc?.value?.length\"\r\n >\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove(controls?.rc?.value[0], 'RC')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.rc?.value[0]?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.rc?.value[0]?.item_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"rc.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.rc?.value?.length > 1\"\r\n >\r\n +{{ controls?.rc?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove(controls?.rc?.value[0],'RC')\">&#xe90d;</i>{{controls?.rc?.value[0]?.item_name}}</span>\r\n <button *ngIf=\"controls?.rc?.value?.length > 1\" class=\"count\" appPopover (click)=\"rc.popover()\" placement=\"right\">+{{controls?.rc?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'RC'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('RC')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of controls?.rc?.value | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(rc, 'RC')\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Assignee -->\r\n <form-field\r\n *ngIf=\"additionalOption?.ASSIGNEES\"\r\n [checked]=\"\r\n controls?.program_assignee?.value?.length ||\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee_group?.value?.length\r\n \"\r\n [active]=\"['ASSIGNEE', 'DEFAULT_ASSIGNEE']?.includes(activeList)\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['ASSIGNEE', 'DEFAULT_ASSIGNEE'].includes(activeList)\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg'\r\n \"\r\n >\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n >ASSIGNEES\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Assignees are required to complete the responsibilities that have been assigned to them. Where Assignees are selected when creating a Program, only those Assignees will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"AssigneeHelpText\"\r\n >&#xeb16;</i\r\n >\r\n </label>\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n [placeholder]=\"\r\n 'Who is responsible for completing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('ASSIGNEE')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_assignee?.value?.length ||\r\n controls?.program_assignee_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_assignee?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_assignee?.value[0], 'ASSIGNEE')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_assignee?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_assignee?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"assignee.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_assignee?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_assignee?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_assignee_group?.value?.length &&\r\n controls?.program_assignee?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_assignee_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_assignee_group?.value[0],\r\n 'ASSIGNEE_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_assignee_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_assignee_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"assignee_group.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_assignee_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_assignee_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_assignee?.value[0],'ASSIGNEE')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_assignee?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_assignee?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_assignee?.value?.length > 1\" class=\"count user\" appPopover (click)=\"assignee.popover()\" placement=\"right\">+{{controls?.program_assignee?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_assignee_group?.value?.length && controls?.program_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_assignee_group?.value[0],'ASSIGNEE_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_assignee_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_assignee_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_assignee_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">+{{controls?.program_assignee_group?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ASSIGNEE'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ASSIGNEE')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #assignee [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assignee of controls?.program_assignee?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee, 'ASSIGNEE')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assignee?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #assignee_group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_assignee_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'ASSIGNEE_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"activeList === 'ASSIGNEE'\"\r\n >DEFAULT ASSIGNEE\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Assignees for all new responsibilities linked with a Program. If a Default Assignees is selected, the user will automatically be selected the Assignee when creating a responsibility linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility. '\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DAHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'ASSIGNEE'\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default assignees for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_ASSIGNEE')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_assignee?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_assignee?.value[0],\r\n 'DEFAULT_ASSIGNEE'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_assignee?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_assignee?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultAssignee.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_assignee?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_assignee?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_default_assignee_group?.value?.length &&\r\n controls?.program_default_assignee?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_assignee_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_assignee_group?.value[0],\r\n 'DEFAULT_ASSIGNEE_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_assignee_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_assignee_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultAssigneeGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_assignee_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_assignee_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_assignee?.value[0],'DEFAULT_ASSIGNEE')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_assignee?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{ controls?.program_default_assignee?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_assignee?.value?.length > 1\" class=\"count user\" appPopover (click)=\"defaultAssignee.popover()\" placement=\"right\">+{{controls?.program_default_assignee?.value?.length - 1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_assignee_group?.value?.length && controls?.program_default_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_assignee_group?.value[0],'DEFAULT_ASSIGNEE_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_assignee_group?.value[0]?.group_name }}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_assignee_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"defaultAssigneeGroup.popover()\" placement=\"right\">+{{controls?.program_default_assignee_group?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_ASSIGNEE'\"\r\n (click)=\"activateList('DEFAULT_ASSIGNEE')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultAssignee [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assignee of controls?.program_default_assignee?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(assignee, 'DEFAULT_ASSIGNEE')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assignee?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultAssigneeGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_assignee_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(assignee, 'DEFAULT_ASSIGNEE_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div\r\n class=\"radio-group-selector\"\r\n [class.disabled]=\"activeList === 'ASSIGNEE'\"\r\n >\r\n <app-cs-radio\r\n [name]=\"'assignee'\"\r\n [checked]=\"controls?.assignee_completion_criteria?.value === 'ALL'\"\r\n (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ALL')\"\r\n >\r\n ALL SELECTED PERSONS NEED TO COMPLETE THIS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, separate responsibilities will be created for each person.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [name]=\"'assignee'\"\r\n [checked]=\"controls?.assignee_completion_criteria?.value === 'ANYONE'\"\r\n (checkedEvent)=\"\r\n setFormField('assignee_completion_criteria', 'ANYONE')\r\n \"\r\n >\r\n ANY SELECTED PERSON CAN COMPLETE THIS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, only one responsibility will be created.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Reviewer -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.REVIEWER\"\r\n [checked]=\"\r\n controls?.program_reviewer?.value?.length ||\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer_group?.value?.length\r\n \"\r\n [active]=\"['REVIEWER', 'DEFAULT_REVIEWER']?.includes(activeList)\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['REVIEWER', 'DEFAULT_REVIEWER'].includes(activeList)\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg'\r\n \"\r\n >\r\n <label\r\n [class.disabled]=\"activeList === 'DEFAULT_REVIEWER'\"\r\n class=\"vx-control-panel\"\r\n >Reviewers\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Reviewers are required to review responsibilities after they have been completed. Where Reviewers are selected when creating a Program, only those Reviewers will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ReviewerHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'DEFAULT_REVIEWER'\"\r\n [placeholder]=\"\r\n 'Who is responsible for reviewing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('REVIEWER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_reviewer?.value?.length ||\r\n controls?.program_reviewer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_reviewer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_reviewer?.value[0], 'REVIEWER')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_reviewer?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_reviewer?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"reviewer.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_reviewer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_reviewer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_reviewer_group?.value?.length &&\r\n controls?.program_reviewer?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_reviewer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_reviewer_group?.value[0],\r\n 'REVIEWER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_reviewer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_reviewer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"reviewerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_reviewer_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_reviewer_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_reviewer?.value[0],'REVIEWER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_reviewer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_reviewer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_reviewer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{controls?.program_reviewer?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_reviewer_group?.value?.length && controls?.program_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_reviewer_group?.value[0],'REVIEWER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_reviewer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_reviewer_group?.value[0]?.group_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_reviewer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"reviewerGroup.popover()\" placement=\"right\">+{{controls?.program_reviewer_group?.value?.length - 1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'REVIEWER'\"\r\n (click)=\"activateList('REVIEWER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let reviewer of controls?.program_reviewer?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer, 'REVIEWER')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ reviewer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #reviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_reviewer_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'REVIEWER_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label\r\n [class.disabled]=\"activeList === 'REVIEWER'\"\r\n class=\"vx-control-panel\"\r\n >DEFAULT Reviewer\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Reviewers for responsibilities linked with a Program. Where a user has been specified as a Default Reviewer, that user will automatically be selected as the Reviewer when creating a responsibility linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DRHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'REVIEWER'\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default reviewers for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_REVIEWER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_reviewer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_reviewer?.value[0],\r\n 'DEFAULT_REVIEWER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_reviewer?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_reviewer?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultReviewer.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_reviewer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_reviewer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer_group?.value?.length &&\r\n controls?.program_default_reviewer?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_reviewer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_reviewer_group?.value[0],\r\n 'DEFAULT_REVIEWER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_reviewer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_reviewer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultReviewerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_reviewer_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_reviewer?.value[0],'DEFAULT_REVIEWER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_reviewer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_reviewer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_reviewer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"defaultReviewer.popover()\" placement=\"right\">+{{controls?.program_default_reviewer?.value?.length - 1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length && controls?.program_default_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_reviewer_group?.value[0],'DEFAULT_REVIEWER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_reviewer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_reviewer_group?.value[0]?.group_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_reviewer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"defaultReviewerGroup.popover()\" placement=\"right\">+{{controls?.program_default_reviewer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_REVIEWER'\"\r\n (click)=\"activateList('DEFAULT_REVIEWER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultReviewer [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let reviewer of controls?.program_default_reviewer?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(reviewer, 'DEFAULT_REVIEWER')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ reviewer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultReviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_reviewer_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_REVIEWER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div\r\n class=\"radio-group-selector\"\r\n [class.disabled]=\"activeList === 'REVIEWER'\"\r\n >\r\n <app-cs-radio\r\n [name]=\"'reviewer'\"\r\n [checked]=\"\r\n controls?.reviewer_completion_criteria?.value === 'SEQUENTIAL'\r\n \"\r\n (checkedEvent)=\"\r\n setFormField('reviewer_completion_criteria', 'SEQUENTIAL')\r\n \"\r\n [class.disabled]=\"\r\n controls?.program_default_reviewer_group?.value?.length > 0\r\n \"\r\n >\r\n SEQUENTIAL\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [name]=\"'reviewer'\"\r\n [checked]=\"\r\n controls?.reviewer_completion_criteria?.value === 'ANYONE' ||\r\n controls?.program_default_reviewer_group?.value?.length > 0\r\n \"\r\n (checkedEvent)=\"\r\n setFormField('reviewer_completion_criteria', 'ANYONE')\r\n \"\r\n >\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Overseer -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.OVERSEER\"\r\n [checked]=\"\r\n controls?.program_overseer?.value?.length ||\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer_group?.value?.length\r\n \"\r\n [active]=\"activeList === 'OVERSEER'\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['OVERSEER', 'DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(\r\n activeList\r\n )\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg'\r\n \"\r\n >\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"\r\n ['DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n >Oversights\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Oversights receive updates when a responsibility is completed, completed with delay or not completed. Where Oversights are selected when creating a Program, only those Oversights will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"overseerHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"\r\n ['DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n [placeholder]=\"\r\n 'Who is responsible for overseeing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_overseer?.value?.length ||\r\n controls?.program_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_overseer?.value[0], 'OVERSEER')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_overseer?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_overseer?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseers.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_overseer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_overseer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_overseer_group?.value?.length &&\r\n controls?.program_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_overseer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_overseer_group?.value[0],\r\n 'OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_overseer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_overseer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_overseer_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_overseer_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_overseer?.value[0],'OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_overseer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">\r\n {{controls?.program_overseer?.value[0]?.member_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{controls?.program_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_overseer_group?.value?.length && controls?.program_overseer?.value?.length \" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_overseer_group?.value[0],'OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_overseer_group?.value[0]?.group_name}}</span></span>\r\n <button *ngIf=\"controls?.program_overseer_group?.value?.length> 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{controls?.program_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n\r\n <button\r\n *ngIf=\"activeList !== 'OVERSEER'\"\r\n (click)=\"activateList('OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_overseer?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer, 'OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_overseer_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'OVERSEER_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <ng-container [class.disabled]=\"activeList === 'OVERSEER'\">\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"['OVERSEER'].includes(activeList)\"\r\n >DEFAULT Oversight\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Oversight for responsibilities linked with a Program. Where a user has been specified as a Default Oversight, that user will automatically be selected as the Oversight when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DOHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [disabled]=\"\r\n ['OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n [selectDiv]=\"true\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default overseers for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_overseer?.value[0],\r\n 'DEFAULT_OVERSEER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_overseer?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_overseer?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseersDefault.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_overseer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_overseer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_default_overseer_group?.value?.length &&\r\n controls?.program_default_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_overseer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_overseer_group?.value[0],\r\n 'DEFAULT_OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_overseer_group?.value[0]\r\n ?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_overseer_group?.value[0]\r\n ?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerDefaultGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_overseer_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_overseer_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_overseer?.value[0],'DEFAULT_OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_overseer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_overseer?.value[0]?.member_name}}</span></span>\r\n <button *ngIf=\"controls?.program_default_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseersDefault.popover()\" placement=\"right\">+{{controls?.program_default_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_default_overseer_group?.value?.length && controls?.program_default_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_overseer_group?.value[0],'DEFAULT_OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_overseer_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_overseer_group?.value?.length >1\" class=\"count\" appPopover (click)=\"overseerDefaultGroup.popover()\" placement=\"right\">+{{controls?.program_default_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_OVERSEER'\"\r\n (click)=\"activateList('DEFAULT_OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefault [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_default_overseer?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n class=\"icons\"\r\n (click)=\"remove(overseer, 'DEFAULT_OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_overseer_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_OVERSEER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\"> </label>\r\n <input-with-pill\r\n class=\"vx-mt-2\"\r\n [selectDiv]=\"true\"\r\n [line]=\"3\"\r\n [disabled]=\"['OVERSEER', 'DEFAULT_OVERSEER'].includes(activeList)\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default overseers for responsibilities that are not completed within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_FAILED_OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer?.value?.length ||\r\n controls?.program_default_failed_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_failed_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_failed_overseer?.value[0],\r\n 'DEFAULT_FAILED_OVERSEER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_failed_overseer?.value[0]\r\n ?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_failed_overseer?.value[0]\r\n ?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseersDefaultFail.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_failed_overseer?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length &&\r\n controls?.program_default_failed_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value?.length\r\n \"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_failed_overseer_group?.value[0],\r\n 'DEFAULT_FAILED_OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_failed_overseer_group?.value[0]\r\n ?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_failed_overseer_group?.value[0]\r\n ?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerDefaultFailGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_failed_overseer?.value[0],'DEFAULT_FAILED_OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_failed_overseer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_failed_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseersDefaultFail.popover()\" placement=\"right\">+{{controls?.program_default_failed_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length && controls?.program_default_failed_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_failed_overseer_group?.value[0],'DEFAULT_FAILED_OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_failed_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_failed_overseer_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"overseerDefaultFailGroup.popover()\" placement=\"right\">+{{controls?.program_default_failed_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_FAILED_OVERSEER'\"\r\n (click)=\"activateList('DEFAULT_FAILED_OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefaultFail [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_default_failed_overseer\r\n ?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n class=\"icons\"\r\n (click)=\"remove(overseer, 'DEFAULT_FAILED_OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_failed_overseer_group\r\n ?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_FAILED_OVERSEER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </ng-container>\r\n </form-field>\r\n\r\n <!-- Assessment -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.ASSESSMENT\"\r\n [checked]=\"controls?.program_assessments?.value?.length\"\r\n [active]=\"activeList === 'ASSESSMENT'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'ASSESSMENT'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >ASSESSMENTS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Assessments are a digital form that are created in \u201CAssessment\u201D within the Compliance Module. Where Assessments are selected when creating a Program, only those Assessments will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"AssessmentHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [placeholder]=\"\r\n 'Which assessments can be linked to the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('ASSESSMENT')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"controls?.program_assessments?.value?.length\"\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"\r\n controls?.program_assessments?.value\r\n | assessmentResolver as assessments\r\n \"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove(assessments[0], 'ASSESSMENT')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"assessments[0]?.assessment_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ assessments[0]?.assessment_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"program_assessments.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"assessments?.length > 1\"\r\n >\r\n +{{ assessments?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <ng-container *ngIf=\"(controls?.program_assessments?.value | assessmentResolver) as assessments\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove(assessments[0],'ASSESSMENT')\">&#xe90d;</i>{{assessments[0]?.assessment_name}} </span>\r\n <button *ngIf=\"assessments?.length > 1\" class=\"count\" appPopover (click)=\"program_assessments.popover()\" placement=\"right\">+{{assessments?.length -1 }}</button>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ASSESSMENT'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ASSESSMENT')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #program_assessments [dontCloseonClick]=\"true\">\r\n <ng-container>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assessment of controls?.program_assessments?.value\r\n | assessmentResolver\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assessment, 'ASSESSMENT')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assessment?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Format & Evidence -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.FORMATE_EVIDENCE\"\r\n [checked]=\"[true, false].includes(controls?.evidence_required?.value)\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >Evidence\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, evidence of completion of a responsibility will be required for all responsibilities that are linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"EvidenceHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <span class=\"text\"\r\n >Do all responsibilities within this program require evidence?</span\r\n >\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'evidence_required'\"\r\n [checked]=\"controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'evidence_required'\"\r\n [checked]=\"!controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n <!-- <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">Allow any file to be marked as\r\n key\r\n evidence</div>\r\n <switch formControlName=\"allow_any_file_key_evidence\"\r\n (change)=\"setFormField('allow_any_file_key_evidence',$event?.target?.checked)\"></switch>\r\n </div> -->\r\n </form-field>\r\n\r\n <!-- Custom Field -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.CUSTOM_FIELDS\"\r\n [checked]=\"controls?.custom_fields?.value?.length\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/custom-fields.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >CUSTOM FIELD\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Where a custom field is specified, all responsibilities linked with a Program will contain that custom field. Custom fields enable the collection of additional meta data.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"CFHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <custom-field formControlName=\"custom_fields\"></custom-field>\r\n </form-field>\r\n </form>\r\n</div>\r\n\r\n<!-- list of roles -->\r\n<role-list\r\n *ngIf=\"activeList === 'ROLE'\"\r\n [selected]=\"controls?.program_roles?.value | refDisconnect\"\r\n [loading]=\"listLoadingState.ROLES\"\r\n [list]=\"lists?.ROLES?.data ?? []\"\r\n (save)=\"listAction($event, 'ROLE')\"\r\n (cancel)=\"fieldDeselector('ROLE')\"\r\n [featureflagrole]=\"featureflagrole\"\r\n [featureflagGroup]=\"featureflagGroups\"\r\n [ff_rc_listing]=\"ff_rc_listing\"\r\n></role-list>\r\n\r\n<!-- list of frameworks -->\r\n<!-- <app-define-framework-listing *ngIf=\"activeList === 'FRAMEWORK'\" (cancel)=\"fieldDeselector('FRAMEWORK')\" (next)=\"listAction($event,'FRAMEWORK')\" [mode]=\"mode\" [selectedFramework]=\"controls?.framework?.value\"></app-define-framework-listing> -->\r\n<!-- list of responsibility center -->\r\n<app-responsibility-centers-list\r\n *ngIf=\"activeList === 'RC'\"\r\n [responsibilityCentersList]=\"lists?.RC ?? []\"\r\n [radioSelection]=\"false\"\r\n [rcIdKey]=\"'rc_id'\"\r\n (closeRcList)=\"fieldDeselector('RC')\"\r\n (saveSelectedList)=\"listAction($event, 'RC')\"\r\n [selectedResponsibilityCenters]=\"controls?.rc?.value | refDisconnect\"\r\n>\r\n</app-responsibility-centers-list>\r\n<!-- render userlist with group -->\r\n\r\n<user-group-list\r\n *ngIf=\"activeList === 'OWNER'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [nonRemovableUserIds]=\"lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\"\r\n [userlist]=\"lists?.OWNERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_owners?.value | refDisconnect\"\r\n (fetchUserData)=\"fetchUsersAssociatedWithRoles(false, $event)\"\r\n [userListInfo]=\"lists?.OWNERS\"\r\n [groupListInfo]=\"lists?.OWNERS_GROUPS\"\r\n [groupList]=\"lists?.OWNERS_GROUPS?.data ?? []\"\r\n [selectedGroups]=\"controls?.program_owners_group?.value | refDisconnect\"\r\n (save)=\"listAction($event, 'OWNER')\"\r\n (cancel)=\"fieldDeselector('OWNER')\"\r\n [panelTitle]=\"panelTitleOwner\"\r\n [featureflag]=\"featureflagGroups\"\r\n></user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'APPROVER'\"\r\n [groupEnabled]=\"false\"\r\n [singleSelect]=\"true\"\r\n [userlist]=\"lists?.APPROVERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_approver?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.APPROVERS\"\r\n (save)=\"listAction($event, 'APPROVER')\"\r\n (cancel)=\"fieldDeselector('APPROVER')\"\r\n [panelTitle]=\"panelTitleApprover\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'ASSIGNEE'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [userlist]=\"lists?.ASSIGNEES ?? []\"\r\n [selectedUsers]=\"controls?.program_assignee?.value | refDisconnect\"\r\n [groupList]=\"lists?.ASSIGNEES_GROUP ?? []\"\r\n [FromProgram]=\"true\"\r\n [selectedGroups]=\"controls?.program_assignee_group?.value | refDisconnect\"\r\n [disabledIds]=\"disabledAssigneeIds\"\r\n [fromResponsibility]=\"'Assignee'\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [assignorId]=\"assignorId\"\r\n [userListInfo]=\"lists?.ASSIGNEES\"\r\n (save)=\"listAction($event, 'ASSIGNEE')\"\r\n (cancel)=\"fieldDeselector('ASSIGNEE')\"\r\n [panelTitle]=\"panelTitleAssignee\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_assignee?.value | refDisconnect\r\n \"\r\n [userType]=\"'assignees'\"\r\n [featureflag]=\"featureflagGroups\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [userlist]=\"lists?.DEFAULT_ASSIGNEES ?? []\"\r\n [selectedUsers]=\"controls?.program_default_assignee?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_ASSIGNEES_GROUP ?? []\"\r\n [FromProgram]=\"true\"\r\n [selectedGroups]=\"\r\n controls?.program_default_assignee_group?.value | refDisconnect\r\n \"\r\n [disabledIds]=\"disabledAssigneeIds\"\r\n [fromResponsibility]=\"'Assignee'\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [assignorId]=\"assignorId\"\r\n [userListInfo]=\"lists?.DEFAULT_ASSIGNEE\"\r\n (save)=\"listAction($event, 'DEFAULT_ASSIGNEE')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_ASSIGNEE')\"\r\n [featureflag]=\"featureflagGroups\"\r\n>\r\n</user-group-list>\r\n\r\n<user-group-list\r\n *ngIf=\"activeList === 'REVIEWER' && (!featureflagGroups || featureflagGroups)\"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.REVIEWERS ?? []\"\r\n [selectedUsers]=\"controls?.program_reviewer?.value | refDisconnect\"\r\n [groupList]=\"lists?.REVIEWERS_GROUP ?? []\"\r\n [featureflag]=\"featureflagGroups\"\r\n [selectedGroups]=\"controls?.program_reviewer_group?.value | refDisconnect\"\r\n [disabledIds]=\"disableReviewerIds\"\r\n [fromResponsibility]=\"'Reviewer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [userListInfo]=\"lists?.REVIEWERS\"\r\n (save)=\"listAction($event, 'REVIEWER')\"\r\n (cancel)=\"fieldDeselector('REVIEWER')\"\r\n [panelTitle]=\"panelTitleReviewer\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_reviewer?.value | refDisconnect\r\n \"\r\n [userType]=\"'reviewers'\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_REVIEWER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_REVIEWERS ?? []\"\r\n [selectedUsers]=\"controls?.program_default_reviewer?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_REVIEWERS_GROUP ?? []\"\r\n [featureflag]=\"featureflagGroups\"\r\n [selectedGroups]=\"\r\n controls?.program_default_reviewer_group?.value | refDisconnect\r\n \"\r\n [disabledIds]=\"disableReviewerIds\"\r\n [fromResponsibility]=\"'Reviewer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_REVIEWERS\"\r\n (save)=\"listAction($event, 'DEFAULT_REVIEWER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_REVIEWER')\"\r\n [panelTitle]=\"panelTitleDefaultReviewer\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'OVERSEER' && (!featureflagGroups || featureflagGroups)\"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.OVERSEERS ?? []\"\r\n [selectedUsers]=\"controls?.program_overseer?.value | refDisconnect\"\r\n [groupList]=\"lists?.OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_overseer_group?.value | refDisconnect\"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.OVERSEES\"\r\n (save)=\"listAction($event, 'OVERSEER')\"\r\n (cancel)=\"fieldDeselector('OVERSEER')\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_overseer?.value\r\n | refDisconnect\r\n | arrayConcat : controls?.program_default_failed_overseer?.value\r\n \"\r\n [userType]=\"'overseers'\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_OVERSEER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\"\r\n [selectedUsers]=\"controls?.program_default_overseer?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"\r\n controls?.program_default_overseer_group?.value | refDisconnect\r\n \"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\"\r\n (save)=\"listAction($event, 'DEFAULT_OVERSEER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_OVERSEER')\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_FAILED_OVERSEER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\"\r\n [selectedUsers]=\"\r\n controls?.program_default_failed_overseer?.value | refDisconnect\r\n \"\r\n [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"\r\n controls?.program_default_failed_overseer_group?.value | refDisconnect\r\n \"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\"\r\n (save)=\"listAction($event, 'DEFAULT_FAILED_OVERSEER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_FAILED_OVERSEER')\"\r\n>\r\n</user-group-list>\r\n<assessment-picker\r\n *ngIf=\"activeList === 'ASSESSMENT'\"\r\n [selectedAssessment]=\"controls?.program_assessments?.value\"\r\n (cancelAssessment)=\"fieldDeselector('ASSESSMENT')\"\r\n (onAssessmentSelect)=\"listAction($event, 'ASSESSMENT')\"\r\n></assessment-picker>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\"\r\n>\r\n</app-smiley-dialog-inline>\r\n\r\n<!-- Framework selector -->\r\n<app-framework-list\r\n *ngIf=\"activeList === 'FRAMEWORK'\"\r\n [workflowPage]=\"['FRAMEWORK']\"\r\n (assignControl)=\"listAction($event, 'FRAMEWORK')\"\r\n (closeFramework)=\"fieldDeselector('FRAMEWORK')\"\r\n [previousSelectedValues]=\"{ framework: controls?.framework.value }\"\r\n (entrustFramework)=\"entrustFramework($event)\"\r\n [headerText]=\"'Select a framework'\"\r\n></app-framework-list>\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/padding/padding.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\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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-top.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\";::ng-deep .workflow-program{display:block;position:relative}::ng-deep .workflow-program .scope-label{background:#747576;border-radius:.125rem;position:relative;z-index:1}::ng-deep .workflow-program .scope-label:before{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:7rem;width:20rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label:after{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:-2.5rem;width:2.5rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label .required{position:absolute;top:0;right:-.625rem}::ng-deep .workflow-program .info-icon{position:relative;top:.125rem;cursor:pointer}::ng-deep .workflow-program .date-picker .picker-group{width:calc(50% - .125rem);position:relative}::ng-deep .workflow-program .date-picker .picker-group:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .workflow-program .date-picker .picker-group input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#fff;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;padding:0 2rem 0 .75rem;outline:none}::ng-deep .workflow-program .date-picker .picker-group input:focus,::ng-deep .workflow-program .date-picker .picker-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .workflow-program .date-picker .picker-group input::placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input:-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input::-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group i{height:1rem;width:1rem;position:absolute;right:.75rem;top:.625rem;pointer-events:none}::ng-deep .workflow-program .program-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;justify-content:space-between;padding:4px;position:relative;z-index:1}::ng-deep .workflow-program .program-type-field .type-item{position:relative}::ng-deep .workflow-program .program-type-field .type-item:first-of-type{width:6.25rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2){width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(6.4375rem);width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3){width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3).active~.background-glider{transform:translate(12.375rem);width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type{width:5.25rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type.active~.background-glider{transform:translate(21.1875rem);width:5.25rem}::ng-deep .workflow-program .program-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:center}::ng-deep .workflow-program .program-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none}::ng-deep .workflow-program .program-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .workflow-program .program-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .workflow-program .program-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:6.25rem;height:32px;z-index:-1;transition:.25s ease-out}::ng-deep .workflow-program .vx-form-group .upload-files .file-item{background:#f1f1f1;border:1px solid #dbdbdb;border-radius:.25rem;padding-left:.125rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:8.5rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item button.delete-btn{background:transparent;border-radius:0;border:none;border-left:1px solid #dbdbdb;height:1.625rem}::ng-deep .workflow-program .vx-form-group .upload-files button.file-count{background:#1e5dd3;border-radius:.125rem;border:none;color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0;margin:4px 0 0 4px}::ng-deep .workflow-program .vx-form-group .upload-format .radio-group app-cs-radio{height:1.375rem}::ng-deep .workflow-program .vx-form-group .default-selected{background:#fbfbfb;border:1px solid #F1F1F1;border-radius:.25rem;margin-top:.5rem}::ng-deep .workflow-program .vx-form-group .default-selected .selected{border-radius:0;border:none;background:none}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio{border-top:1px solid #F1F1F1}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio{margin-top:0!important}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.radio{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;padding:.5rem .5rem .5rem 2.25rem;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item svg{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .selected .custom-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:2.4rem}::ng-deep .workflow-program .vx-form-group .selected button.cross-btn{background:transparent;border-radius:0;border:0;padding:0}::ng-deep .workflow-program .vx-form-group .custom-input{position:relative}::ng-deep .workflow-program .vx-form-group .custom-input input{padding-right:2rem}::ng-deep .workflow-program .vx-form-group .custom-input button.cross-btn{background:transparent;border-radius:0;border:0;position:absolute;top:.875rem;right:.625rem}::ng-deep .workflow-program .vx-form-group button.add-more-btn{background:transparent;border-radius:0;border:none;padding:0}::ng-deep app-popover .wf-action-list ul.action-item .avatar-card .value{text-transform:none!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill .file-item{background:transparent!important;border:none!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill .file-name{width:100%!important;max-width:100%!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill button.delete-btn{border:none!important;padding-right:0!important}.disabled{opacity:.4;pointer-events:none;filter:grayscale(1)}.vx-info-card{width:280px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;position:static;display:block;left:780}.vx-info-card-body{font-size:12px;padding:8px 12px;margin:0;font-weight:400;text-transform:none;color:#747576}\n", "@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\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group vcomply-editor{margin-top:8px;display:block}::ng-deep .vx-form-group vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "directive", type: i8.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i9.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i10.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i12.SmileyDialogInlineComponent, selector: "app-smiley-dialog-inline", inputs: ["message", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "component", type: i13.PopoverHoverComponent, selector: "popover-hover" }, { kind: "directive", type: i14.PopoverHoverDirective, selector: "[libPopoverHover]", inputs: ["placement"] }, { kind: "component", type: i15.TabSelector, selector: "tab-selector", inputs: ["disabled", "selectedItem", "displayArray"], outputs: ["onValueChanged"] }, { kind: "component", type: i16.FormFieldComponent, selector: "form-field", inputs: ["active", "disabled", "checked", "img"] }, { kind: "component", type: i17.FilePillComponent, selector: "file-pill", inputs: ["name", "extension", "disabled"], outputs: ["delete"] }, { kind: "component", type: i18.InputWithPillComponent, selector: "input-with-pill", inputs: ["placeholder", "disabled", "selectDiv", "line"], outputs: ["select"] }, { kind: "component", type: i19.SwitchComponent, selector: "switch", inputs: ["disabled", "checked", "tooltipMessage", "value", "position"], outputs: ["change"] }, { kind: "directive", type: i20.InputTrimDirective, selector: "[InputTrim]" }, { kind: "component", type: i21.RoleListComponent, selector: "role-list", inputs: ["featureflagrole", "featureflagGroup", "ff_rc_listing", "list", "loading", "selected"], outputs: ["save", "cancel"] }, { kind: "component", type: i22.UserGroupListComponent, selector: "user-group-list", inputs: ["groupEnabled", "panelTitle", "singleSelect", "selectedReviewer", "featureflag", "reviewerWorkflowType", "mode", "fieldType", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds", "FromProgram", "userListInfo", "groupListInfo", "fromApprovalWorkflow", "approvalType", "showFutureUsersSwitch", "futureUsersWillSelect", "isAllDisabled", "isGroupTabShow", "disabledIds", "nonRemovableUserIds", "allUserSelectedDisabled", "nonRemovableGroupIds", "loading", "userlist", "selectedUsers", "defaultSelectedUsers", "userType", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i23.AssessmentPickerComponent, selector: "assessment-picker", inputs: ["isEdit", "selectedAssessment", "selectedAssessmentData"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i24.CustomFieldComponent, selector: "custom-field", inputs: ["disabled"] }, { kind: "component", type: i25.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i26.FrameworkListComponent, selector: "app-framework-list", inputs: ["previousSelectedValues", "headerText", "workflowPage", "policy", "frameWorkList", "selectedFrameWork", "selectedCategories"], outputs: ["entrustFramework", "closeFramework", "assignControl"] }, { kind: "directive", type: i27.ScrollInViewDirective, selector: "[appScrollInView]", inputs: ["appScrollInView"] }, { kind: "pipe", type: i6.SlicePipe, name: "slice" }, { kind: "pipe", type: i28.ListToIdPipe, name: "listToId" }, { kind: "pipe", type: i29.RefDisconnectPipe, name: "refDisconnect" }, { kind: "pipe", type: i30.AssessmentResolverPipe, name: "assessmentResolver" }, { kind: "pipe", type: i31.ArrayConcatPipe, name: "arrayConcat" }] }); }
1507
+ }
1508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowProgramComponent, decorators: [{
1509
+ type: Component,
1510
+ args: [{ selector: 'app-workflow-program', template: "<div class=\"workflow-program\" #form>\r\n <form novalidate [formGroup]=\"programForm\">\r\n <!-- Program Category Type -->\r\n <form-field\r\n [checked]=\"controls?.program_type?.value > -1\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/issue-type.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >PROGRAM TYPE <span class=\"required\">*</span></label\r\n >\r\n <tab-selector\r\n formControlName=\"program_type\"\r\n [displayArray]=\"constants?.categoryType\"\r\n ></tab-selector>\r\n <!-- <p *ngIf=\"program_name?.invalid\" class=\"error-message\">Add a program type</p> -->\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <form-field\r\n *ngIf=\"isAscentAllowed\"\r\n [checked]=\"false\"\r\n [active]=\"false\"\r\n [disabled]=\"false\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <!-- [selectDiv]=\"true\" -->\r\n <input-with-pill\r\n [placeholder]=\"'Select a framework that this Program relates to'\"\r\n (select)=\"activateList('FRAMEWORK')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.framework.value?.name\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"canFrameworkChange\"\r\n (click)=\"remove('', 'FRAMEWORK')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.framework.value?.name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.framework.value?.name }}</span\r\n >\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove('', 'FRAMEWORK')\" *ngIf=\"canFrameworkChange\" class=\"icons\" >&#xe90d;</i> {{controls?.framework.value?.name}}</span>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"canFrameworkChange\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('FRAMEWORK')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Program Category Name -->\r\n <form-field\r\n [checked]=\"controls?.program_name?.value?.trim()?.length\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >PROGRAM NAME <span class=\"required\">*</span></label\r\n >\r\n <input\r\n InputTrim\r\n formControlName=\"program_name\"\r\n type=\"text\"\r\n placeholder=\"What is the Program name?\"\r\n />\r\n\r\n <p\r\n *ngIf=\"\r\n controls?.program_name?.errors && controls?.program_name?.touched\r\n \"\r\n class=\"error-message\"\r\n >\r\n Enter a name for this Program.\r\n </p>\r\n <p *ngIf=\"isNameExists\" class=\"error-message\">\r\n Program name already exists.\r\n </p>\r\n <div class=\"upload-files vx-d-flex vx-align-center vx-flex-wrap vx-mt-1\">\r\n <file-pill\r\n *ngFor=\"\r\n let attachment of controls?.description_attachment?.value\r\n | slice : 0 : 2\r\n \"\r\n [extension]=\"attachment?.org_file?.split('.').pop()\"\r\n [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\"\r\n (delete)=\"deleteAttachment('DESCRIPTION', attachment)\"\r\n >\r\n </file-pill>\r\n <button\r\n *ngIf=\"controls?.description_attachment?.value?.length > 2\"\r\n class=\"file-count\"\r\n appPopover\r\n (click)=\"uploadFile.popover()\"\r\n placement=\"right\"\r\n >\r\n +{{ controls?.description_attachment?.value?.length - 2 }}\r\n </button>\r\n <app-popover #uploadFile [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n class=\"vx-p-2\"\r\n *ngFor=\"\r\n let attachment of controls?.description_attachment?.value\r\n | slice : 2\r\n \"\r\n >\r\n <file-pill\r\n [extension]=\"attachment?.org_file?.split('.').pop()\"\r\n [name]=\"attachment?.org_file\"\r\n [disabled]=\"attachment?.uploading\"\r\n (delete)=\"deleteAttachment('DESCRIPTION', attachment)\"\r\n ></file-pill>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <vcomply-editor\r\n [(ngModel)]=\"editorData.programDescription\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (sendSavedFiles)=\"selectFile('DESCRIPTION', $event)\"\r\n (ngModelChange)=\"setFormField('program_description', $event)\"\r\n [editorConfig]=\"constants?.description\"\r\n >\r\n </vcomply-editor>\r\n </form-field>\r\n\r\n <!-- Objective -->\r\n <form-field\r\n [checked]=\"controls?.program_objective?.value?.trim()?.length\"\r\n [active]=\"activeList === 'OBJECTIVE'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'OBJECTIVE'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >OBJECTIVE\r\n <!-- <span class=\"required\">*</span> -->\r\n </label>\r\n <vcomply-editor\r\n [(ngModel)]=\"editorData.programObjective\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (sendSavedFiles)=\"selectFile('OBJECTIVE', $event)\"\r\n (ngModelChange)=\"setFormField('program_objective', $event, true)\"\r\n [editorConfig]=\"constants?.objective\"\r\n >\r\n </vcomply-editor>\r\n <!-- <p *ngIf=\"!isObjectiveValid\" class=\"error-message\">Specify the objective for this Program.</p> -->\r\n </form-field>\r\n\r\n <!-- Roles -->\r\n <form-field\r\n *ngIf=\"additionalOption?.ROLES\"\r\n [checked]=\"controls?.program_roles?.value?.length\"\r\n [active]=\"activeList === 'ROLE'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'ROLE'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/roles.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\" id=\"permissiongroup\"\r\n >{{ ff_rc_listing ? \"PERMISSIONS\" : \"PERMISSION GROUP(S)\" }}\r\n <span class=\"required\">*</span\r\n ><i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n ff_rc_listing\r\n ? 'Permissions let you specify the users that can be \u201COwners\u201D' +\r\n (allowedFeature.isFeatureEnabled('ff_program_simplify')\r\n ? ' '\r\n : ' and \u201CApprovers\u201D') +\r\n 'of a Program.'\r\n : 'Permission group(s) let you specify the users that can be \u201COwners\u201D' +\r\n (allowedFeature.isFeatureEnabled('ff_program_simplify')\r\n ? ' '\r\n : ' and \u201CApprovers\u201D') +\r\n 'of a Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"RoleHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n id=\"placeholdername\"\r\n [placeholder]=\"\r\n ff_rc_listing\r\n ? 'Which user permissions have access to this program?'\r\n : 'Which user permission groups have access to this program?'\r\n \"\r\n (select)=\"activateList('ROLE')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_roles?.value?.length\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"\r\n !lists.SYSTEM_ROLE_IDS.includes(\r\n controls?.program_roles?.value[0]?._id\r\n )\r\n \"\r\n (click)=\"remove(controls?.program_roles?.value[0], 'ROLE')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n featureflagrole &&\r\n controls?.program_roles?.value[0]?.permissionGroupName\r\n ? controls?.program_roles?.value[0]?.permissionGroupName\r\n : controls?.program_roles?.value[0]?.roleName\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n featureflagrole &&\r\n controls?.program_roles?.value[0]?.permissionGroupName\r\n ? controls?.program_roles?.value[0]?.permissionGroupName\r\n : controls?.program_roles?.value[0]?.roleName\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"role.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_roles?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_roles?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(controls?.program_roles?.value[0]?._id)\" (click)=\"remove(controls?.program_roles?.value[0],'ROLE')\" class=\"icons\">&#xe90d;</i>{{featureflagrole && controls?.program_roles?.value[0]?.permissionGroupName ? controls?.program_roles?.value[0]?.permissionGroupName : controls?.program_roles?.value[0]?.roleName}}</span>\r\n <button *ngIf=\"controls?.program_roles?.value?.length > 1\" class=\"count\" appPopover (click)=\"role.popover()\" placement=\"right\">+{{controls?.program_roles?.value?.length - 1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ROLE'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ROLE')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">\r\n {{ featureflagrole ? \"Add a permission group(s)\" : \"Add a role(s)\" }}\r\n </p>\r\n <app-popover #role [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of controls?.program_roles?.value | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"!lists.SYSTEM_ROLE_IDS.includes(data?._id)\"\r\n class=\"icons\"\r\n (click)=\"removeRole(data, 'ROLE')\"\r\n >&#xe90d;</i\r\n >\r\n {{\r\n featureflagrole && data?.permissionGroupName\r\n ? data?.permissionGroupName\r\n : data?.roleName\r\n }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Owners -->\r\n <form-field\r\n *ngIf=\"additionalOption?.OWNERS\"\r\n [checked]=\"\r\n controls?.program_owners.value?.length > 0 ||\r\n controls?.program_owners_group.value?.length > 0\r\n \"\r\n [active]=\"activeList === 'OWNER'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'OWNER'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/owner.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >OWNER(S) <span class=\"required\">*</span>\r\n <span\r\n class=\"icon\"\r\n *ngIf=\"toolTipData.owner !== ''\"\r\n libPopoverHover\r\n (mouseover)=\"dataTooltip.popover()\"\r\n (mouseleave)=\"dataTooltip.closePopover()\"\r\n placement=\"right\"\r\n ><i class=\"icons\">&#xe91f;</i></span\r\n >\r\n <popover-hover #dataTooltip>\r\n <div class=\"vx-info-card\">\r\n <div\r\n class=\"vx-info-card-body\"\r\n [innerHTML]=\"toolTipData.owner\"\r\n id=\"OwnerHelpText\"\r\n ></div>\r\n </div>\r\n </popover-hover>\r\n </label>\r\n <input-with-pill\r\n [placeholder]=\"'Who is responsible for managing this program?'\"\r\n (select)=\"activateList('OWNER')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_owners.value[0]\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_owners?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_owners?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover\r\n (click)=\"owner.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_owners?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_owners?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_owners_group?.value?.length &&\r\n controls?.program_owners?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_owners_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"\r\n !['ADMIN', 'KEY_ADMIN', 'LOGGED_IN'].includes(\r\n owner?.user_role\r\n )\r\n \"\r\n (click)=\"\r\n remove(\r\n controls?.program_owners_group?.value[0],\r\n 'OWNER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_owners_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_owners_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"group.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_owners_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_owners_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_owners?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >{{controls?.program_owners?.value[0]?.member_name}}</span></span>\r\n <button *ngIf=\"controls?.program_owners?.value?.length > 1\" class=\"count user\" appPopover (click)=\"owner.popover()\" placement=\"right\">+{{controls?.program_owners?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_owners_group?.value?.length && controls?.program_owners?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_owners_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" *ngIf=\"!['ADMIN','KEY_ADMIN','LOGGED_IN'].includes(owner?.user_role)\" (click)=\"remove(owner,'OWNER_GROUP')\">&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_owners_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_owners_group?.value[0]?.group_name}}</span></span>\r\n <button *ngIf=\"controls?.program_owners_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{controls?.program_owners_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'OWNER'\"\r\n [class.disabled]=\"controls?.all_user_in_role?.value\"\r\n (click)=\"activateList('OWNER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a owner(s)</p>\r\n <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div\r\n class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\"\r\n >\r\n {{\r\n featureflagrole\r\n ? \"ALL USERS ASSOCIATED WITH THE SELECTED PERMISSION GROUPS\"\r\n : \"ALL USERS ASSOCIATED WITH THE SELECTED ROLES\"\r\n }}\r\n </div>\r\n <switch\r\n formControlName=\"all_user_in_role\"\r\n (change)=\"selectAllRoleOwner($event)\"\r\n ></switch>\r\n </div>\r\n <app-popover #owner [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let owner of controls?.program_owners?.value | slice : 1\"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\r\n ).includes(owner?.member_id)\r\n \"\r\n class=\"icons\"\r\n (click)=\"remove(owner, 'OWNER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let owner of controls?.program_owners_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n *ngIf=\"\r\n !['ADMIN', 'KEY_ADMIN', 'LOGGED_IN'].includes(\r\n owner?.user_role\r\n )\r\n \"\r\n class=\"icons\"\r\n (click)=\"remove(owner, 'OWNER_GROUP')\"\r\n >&#xe90d;</i\r\n >\r\n {{ owner?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Approvers -->\r\n <!-- Removing this option in Program simplification -->\r\n <form-field\r\n *ngIf=\"additionalOption?.APPROVER && !programSimplifyFlag\"\r\n [checked]=\"controls?.program_approver?.value?.length\"\r\n [active]=\"activeList === 'APPROVER'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'APPROVER'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >APPROVER\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'An Approver is responsible for approving a Program. Where an Approver is selected, the Program and all responsibilities linked with that Program will only commence once the Program has been approved.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ApproverHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [placeholder]=\"'Who is responsible for approving this program?'\"\r\n [disabled]=\"isApproverDisabled\"\r\n (select)=\"activateList('APPROVER')\"\r\n >\r\n <div class=\"selected\" *ngIf=\"controls?.program_approver?.value[0]\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"isApproverDisabled === false\"\r\n (click)=\"remove(controls?.program_approver?.value[0], 'APPROVER')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_approver?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_approver?.value[0]?.member_name }}</span\r\n >\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <i *ngIf=\"isApproverDisabled === false\" (click)=\"remove(controls?.program_approver?.value[0],'APPROVER')\"\r\n class=\"icons vx-fs-9 vx-mr-1 cross\">&#xe90d;</i>{{controls?.program_approver?.value[0]?.member_name}}\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'APPROVER' && isApproverDisabled === false\"\r\n (click)=\"activateList('APPROVER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n </form-field>\r\n\r\n <!-- Performance Calculated -->\r\n <!-- <form-field [checked]=\"controls?.performance_calculation?.value\" [active]=\"activeList === 'PERFORMANCE'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'PERFORMANCE'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/performance-calc.svg'\">\r\n <label class=\"vx-control-panel\">HOW SHOULD THE PERFORMANCE OF THIS PROGRAM BE CALCULATED?</label>\r\n <tab-selector formControlName=\"performance_calculation\" [displayArray]=\"constants?.performanceCalculation\">\r\n </tab-selector>\r\n </form-field> -->\r\n <ng-container *ngIf=\"isProgramScope\">\r\n <div\r\n class=\"scope-label vx-fs-10 vx-txt-white vx-tt-uppercase vx-pl-1 vx-pr-1 vx-mb-5 vx-lh-4 vx-d-inline-block\"\r\n >\r\n PROGRAM SCOPE\r\n </div>\r\n <!-- <i class=\"icons info-icon vx-fs-12 vx-txt-blue vx-ml-1\" [appTooltip]=\"tooltip.programScope\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i> -->\r\n <span\r\n class=\"icon info-icon vx-fs-12 vx-txt-blue vx-ml-1\"\r\n *ngIf=\"toolTipData.programScop !== ''\"\r\n libPopoverHover\r\n (mouseover)=\"dataTooltip.popover()\"\r\n (mouseleave)=\"dataTooltip.closePopover()\"\r\n placement=\"right\"\r\n ><i class=\"icons\">&#xe91f;</i></span\r\n >\r\n <popover-hover #dataTooltip>\r\n <div class=\"vx-info-card\">\r\n <div\r\n class=\"vx-info-card-body\"\r\n [innerHTML]=\"toolTipData.programScope\"\r\n id=\"PSHelpText\"\r\n ></div>\r\n </div>\r\n </popover-hover>\r\n </ng-container>\r\n\r\n <!-- Program Frequency -->\r\n <form-field\r\n *ngIf=\"additionalOption?.PROGRAM_FREQUENCY\"\r\n [checked]=\"[true, false].includes(controls?.recurring_frequency?.value)\"\r\n [active]=\"activeList === 'FREQUENCY'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'FREQUENCY'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/recurring.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\" id=\"PDChange\"\r\n >PROGRAM DURATION\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Program Duration refers to the duration of the Program. A Program can occur in perpetuity, or it can occur until the end of the current business cycle that has been specified in ' +\r\n businessCycle.selectedCycle.business_cycle +\r\n '. All responsibilities linked with that Program will also have the same Program Duration.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ProgramDurationHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <span class=\"text vx-mb-0\">Is this program recurring?</span>\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'recurring_frequency'\"\r\n [checked]=\"controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'recurring_frequency'\"\r\n [checked]=\"!controls?.recurring_frequency?.value\"\r\n (checkedEvent)=\"setFormField('recurring_frequency', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Scope Changes -->\r\n <form-field\r\n *ngIf=\"additionalOption?.SCOPE_CHANGES\"\r\n [checked]=\"[true, false].includes(controls?.lock_scope_change?.value)\"\r\n [active]=\"activeList === 'SCOPE'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'SCOPE'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >Lock the Program Scope\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If the Program Scope is locked, neither the Program nor the responsibilities linked with the Program can be edited once the Program begins. In order to edit the Program or the linked responsibilities, the Program details will need to be edited.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ScopeChangesHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <span class=\"text\"\r\n >Would you like to\r\n <span class=\"vx-label-txt vx-fw-500\">lock changes</span> to the\r\n program scope?</span\r\n >\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'lock_scope_change'\"\r\n [checked]=\"controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'lock_scope_change'\"\r\n [checked]=\"!controls?.lock_scope_change?.value\"\r\n (checkedEvent)=\"setFormField('lock_scope_change', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Framework -->\r\n <!-- <form-field [checked]=\"false\" [active]=\"activeList === 'FRAMEWORK'\" [disabled]=\"sideElements.includes(activeList) && activeList !== 'FRAMEWORK'\"\r\n [img]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg'\">\r\n <label class=\"vx-control-panel\">FRAMEWORK</label>\r\n <input-with-pill [placeholder]=\"'Select a framework that this Program relates to'\" (select)=\"activateList('FRAMEWORK')\">\r\n <div class=\"selected\" *ngIf=\"controls?.framework?.value?.framework_name\">\r\n <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i (click)=\"remove(controls?.framework.value,'FRAMEWORK')\" class=\"icons\">&#xe90d;</i>{{controls?.framework?.value?.framework_name}}</span>\r\n <button class=\"count\" appPopover (click)=\"framework.popover()\" placement=\"right\">+5</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeList!=='FRAMEWORK'\" (click)=\"activateList('FRAMEWORK')\" class=\"edit\" type=\"button\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #framework [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\">&#xe90d;</i>\r\n Manage framework name\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field> -->\r\n\r\n <!-- Responsibility Center -->\r\n <form-field\r\n *ngIf=\"additionalOption?.RC\"\r\n [checked]=\"controls?.rc?.value?.length\"\r\n [active]=\"activeList === 'RC'\"\r\n [disabled]=\"sideElements.includes(activeList) && activeList !== 'RC'\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >RESPONSIBILITY CENTER\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Responsibility Centers represent your organizational and operational infrastructure. Where Responsibility Centers are selected when creating a Program, only those Responsibilities Centers will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"RCHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n (select)=\"activateList('RC')\"\r\n [placeholder]=\"\r\n 'Which Responsibility Center(s) can be linked to the responsibilities associated with this Program?'\r\n \"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"controls?.rc?.value && controls?.rc?.value?.length\"\r\n >\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove(controls?.rc?.value[0], 'RC')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.rc?.value[0]?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.rc?.value[0]?.item_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"rc.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.rc?.value?.length > 1\"\r\n >\r\n +{{ controls?.rc?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove(controls?.rc?.value[0],'RC')\">&#xe90d;</i>{{controls?.rc?.value[0]?.item_name}}</span>\r\n <button *ngIf=\"controls?.rc?.value?.length > 1\" class=\"count\" appPopover (click)=\"rc.popover()\" placement=\"right\">+{{controls?.rc?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'RC'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('RC')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of controls?.rc?.value | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(rc, 'RC')\">&#xe90d;</i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Assignee -->\r\n <form-field\r\n *ngIf=\"additionalOption?.ASSIGNEES\"\r\n [checked]=\"\r\n controls?.program_assignee?.value?.length ||\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee_group?.value?.length\r\n \"\r\n [active]=\"['ASSIGNEE', 'DEFAULT_ASSIGNEE']?.includes(activeList)\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['ASSIGNEE', 'DEFAULT_ASSIGNEE'].includes(activeList)\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg'\r\n \"\r\n >\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n >ASSIGNEES\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Assignees are required to complete the responsibilities that have been assigned to them. Where Assignees are selected when creating a Program, only those Assignees will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"AssigneeHelpText\"\r\n >&#xeb16;</i\r\n >\r\n </label>\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n [placeholder]=\"\r\n 'Who is responsible for completing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('ASSIGNEE')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_assignee?.value?.length ||\r\n controls?.program_assignee_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_assignee?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_assignee?.value[0], 'ASSIGNEE')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_assignee?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_assignee?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"assignee.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_assignee?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_assignee?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_assignee_group?.value?.length &&\r\n controls?.program_assignee?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_assignee_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_assignee_group?.value[0],\r\n 'ASSIGNEE_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_assignee_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_assignee_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"assignee_group.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_assignee_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_assignee_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_assignee?.value[0],'ASSIGNEE')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_assignee?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_assignee?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_assignee?.value?.length > 1\" class=\"count user\" appPopover (click)=\"assignee.popover()\" placement=\"right\">+{{controls?.program_assignee?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_assignee_group?.value?.length && controls?.program_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_assignee_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_assignee_group?.value[0],'ASSIGNEE_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_assignee_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_assignee_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_assignee_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"assignee_group.popover()\" placement=\"right\">+{{controls?.program_assignee_group?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ASSIGNEE'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ASSIGNEE')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #assignee [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assignee of controls?.program_assignee?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assignee, 'ASSIGNEE')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assignee?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #assignee_group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_assignee_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'ASSIGNEE_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"activeList === 'ASSIGNEE'\"\r\n >DEFAULT ASSIGNEE\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Assignees for all new responsibilities linked with a Program. If a Default Assignees is selected, the user will automatically be selected the Assignee when creating a responsibility linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility. '\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DAHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'ASSIGNEE'\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default assignees for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_ASSIGNEE')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_assignee?.value?.length ||\r\n controls?.program_default_assignee_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_assignee?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_assignee?.value[0],\r\n 'DEFAULT_ASSIGNEE'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_assignee?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_assignee?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultAssignee.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_assignee?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_assignee?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_default_assignee_group?.value?.length &&\r\n controls?.program_default_assignee?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_assignee_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_assignee_group?.value[0],\r\n 'DEFAULT_ASSIGNEE_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_assignee_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_assignee_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultAssigneeGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_assignee_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_assignee_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_assignee?.value[0],'DEFAULT_ASSIGNEE')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_assignee?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{ controls?.program_default_assignee?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_assignee?.value?.length > 1\" class=\"count user\" appPopover (click)=\"defaultAssignee.popover()\" placement=\"right\">+{{controls?.program_default_assignee?.value?.length - 1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_assignee_group?.value?.length && controls?.program_default_assignee?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_assignee_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_assignee_group?.value[0],'DEFAULT_ASSIGNEE_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_assignee_group?.value[0]?.group_name }}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_assignee_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"defaultAssigneeGroup.popover()\" placement=\"right\">+{{controls?.program_default_assignee_group?.value?.length -1 }}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_ASSIGNEE'\"\r\n (click)=\"activateList('DEFAULT_ASSIGNEE')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultAssignee [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assignee of controls?.program_default_assignee?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(assignee, 'DEFAULT_ASSIGNEE')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assignee?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultAssigneeGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_assignee_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(assignee, 'DEFAULT_ASSIGNEE_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div\r\n class=\"radio-group-selector\"\r\n [class.disabled]=\"activeList === 'ASSIGNEE'\"\r\n >\r\n <app-cs-radio\r\n [name]=\"'assignee'\"\r\n [checked]=\"controls?.assignee_completion_criteria?.value === 'ALL'\"\r\n (checkedEvent)=\"setFormField('assignee_completion_criteria', 'ALL')\"\r\n >\r\n ALL SELECTED PERSONS NEED TO COMPLETE THIS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, separate responsibilities will be created for each person.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [name]=\"'assignee'\"\r\n [checked]=\"controls?.assignee_completion_criteria?.value === 'ANYONE'\"\r\n (checkedEvent)=\"\r\n setFormField('assignee_completion_criteria', 'ANYONE')\r\n \"\r\n >\r\n ANY SELECTED PERSON CAN COMPLETE THIS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, only one responsibility will be created.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Reviewer -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.REVIEWER\"\r\n [checked]=\"\r\n controls?.program_reviewer?.value?.length ||\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer_group?.value?.length\r\n \"\r\n [active]=\"['REVIEWER', 'DEFAULT_REVIEWER']?.includes(activeList)\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['REVIEWER', 'DEFAULT_REVIEWER'].includes(activeList)\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg'\r\n \"\r\n >\r\n <label\r\n [class.disabled]=\"activeList === 'DEFAULT_REVIEWER'\"\r\n class=\"vx-control-panel\"\r\n >Reviewers\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Reviewers are required to review responsibilities after they have been completed. Where Reviewers are selected when creating a Program, only those Reviewers will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"ReviewerHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'DEFAULT_REVIEWER'\"\r\n [placeholder]=\"\r\n 'Who is responsible for reviewing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('REVIEWER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_reviewer?.value?.length ||\r\n controls?.program_reviewer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_reviewer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_reviewer?.value[0], 'REVIEWER')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_reviewer?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_reviewer?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"reviewer.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_reviewer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_reviewer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_reviewer_group?.value?.length &&\r\n controls?.program_reviewer?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_reviewer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_reviewer_group?.value[0],\r\n 'REVIEWER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_reviewer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_reviewer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"reviewerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_reviewer_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_reviewer_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_reviewer?.value[0],'REVIEWER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_reviewer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_reviewer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_reviewer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{controls?.program_reviewer?.value?.length -1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_reviewer_group?.value?.length && controls?.program_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_reviewer_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_reviewer_group?.value[0],'REVIEWER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_reviewer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_reviewer_group?.value[0]?.group_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_reviewer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"reviewerGroup.popover()\" placement=\"right\">+{{controls?.program_reviewer_group?.value?.length - 1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'REVIEWER'\"\r\n (click)=\"activateList('REVIEWER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let reviewer of controls?.program_reviewer?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(reviewer, 'REVIEWER')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ reviewer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #reviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_reviewer_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'REVIEWER_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label\r\n [class.disabled]=\"activeList === 'REVIEWER'\"\r\n class=\"vx-control-panel\"\r\n >DEFAULT Reviewer\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Reviewers for responsibilities linked with a Program. Where a user has been specified as a Default Reviewer, that user will automatically be selected as the Reviewer when creating a responsibility linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DRHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"activeList === 'REVIEWER'\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default reviewers for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_REVIEWER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer?.value?.length ||\r\n controls?.program_default_reviewer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_reviewer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_reviewer?.value[0],\r\n 'DEFAULT_REVIEWER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_reviewer?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_reviewer?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultReviewer.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_reviewer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_reviewer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer_group?.value?.length &&\r\n controls?.program_default_reviewer?.value?.length\r\n \"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_reviewer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_reviewer_group?.value[0],\r\n 'DEFAULT_REVIEWER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_reviewer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_reviewer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"defaultReviewerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_reviewer_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_reviewer_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_reviewer?.value[0],'DEFAULT_REVIEWER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_reviewer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_reviewer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_reviewer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"defaultReviewer.popover()\" placement=\"right\">+{{controls?.program_default_reviewer?.value?.length - 1}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length && controls?.program_default_reviewer?.value?.length\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_reviewer_group?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_reviewer_group?.value[0],'DEFAULT_REVIEWER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_reviewer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_reviewer_group?.value[0]?.group_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_reviewer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"defaultReviewerGroup.popover()\" placement=\"right\">+{{controls?.program_default_reviewer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_REVIEWER'\"\r\n (click)=\"activateList('DEFAULT_REVIEWER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #defaultReviewer [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let reviewer of controls?.program_default_reviewer?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(reviewer, 'DEFAULT_REVIEWER')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ reviewer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #defaultReviewerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_reviewer_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_REVIEWER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div\r\n class=\"radio-group-selector\"\r\n [class.disabled]=\"activeList === 'REVIEWER'\"\r\n >\r\n <app-cs-radio\r\n [name]=\"'reviewer'\"\r\n [checked]=\"\r\n controls?.reviewer_completion_criteria?.value === 'SEQUENTIAL'\r\n \"\r\n (checkedEvent)=\"\r\n setFormField('reviewer_completion_criteria', 'SEQUENTIAL')\r\n \"\r\n [class.disabled]=\"\r\n controls?.program_default_reviewer_group?.value?.length > 0\r\n \"\r\n >\r\n SEQUENTIAL\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [name]=\"'reviewer'\"\r\n [checked]=\"\r\n controls?.reviewer_completion_criteria?.value === 'ANYONE' ||\r\n controls?.program_default_reviewer_group?.value?.length > 0\r\n \"\r\n (checkedEvent)=\"\r\n setFormField('reviewer_completion_criteria', 'ANYONE')\r\n \"\r\n >\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\r\n \"\r\n placement=\"bottom-right\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n >&#xe91f;</i\r\n >\r\n </app-cs-radio>\r\n </div>\r\n </form-field>\r\n\r\n <!-- Overseer -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.OVERSEER\"\r\n [checked]=\"\r\n controls?.program_overseer?.value?.length ||\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer_group?.value?.length\r\n \"\r\n [active]=\"activeList === 'OVERSEER'\"\r\n [disabled]=\"\r\n sideElements?.includes(activeList) &&\r\n !['OVERSEER', 'DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(\r\n activeList\r\n )\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg'\r\n \"\r\n >\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"\r\n ['DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n >Oversights\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Oversights receive updates when a responsibility is completed, completed with delay or not completed. Where Oversights are selected when creating a Program, only those Oversights will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"overseerHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [disabled]=\"\r\n ['DEFAULT_OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n [placeholder]=\"\r\n 'Who is responsible for overseeing the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_overseer?.value?.length ||\r\n controls?.program_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(controls?.program_overseer?.value[0], 'OVERSEER')\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"controls?.program_overseer?.value[0]?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ controls?.program_overseer?.value[0]?.member_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseers.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_overseer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_overseer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_overseer_group?.value?.length &&\r\n controls?.program_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_overseer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_overseer_group?.value[0],\r\n 'OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_overseer_group?.value[0]?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_overseer_group?.value[0]?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_overseer_group?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_overseer_group?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_overseer?.value[0],'OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_overseer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">\r\n {{controls?.program_overseer?.value[0]?.member_name}}\r\n </span>\r\n </span>\r\n <button *ngIf=\"controls?.program_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{controls?.program_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_overseer_group?.value?.length && controls?.program_overseer?.value?.length \" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_overseer_group?.value[0],'OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_overseer_group?.value[0]?.group_name}}</span></span>\r\n <button *ngIf=\"controls?.program_overseer_group?.value?.length> 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{controls?.program_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n\r\n <button\r\n *ngIf=\"activeList !== 'OVERSEER'\"\r\n (click)=\"activateList('OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_overseer?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove(overseer, 'OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_overseer_group?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(group, 'OVERSEER_GROUP')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <ng-container [class.disabled]=\"activeList === 'OVERSEER'\">\r\n <label\r\n class=\"vx-control-panel\"\r\n [class.disabled]=\"['OVERSEER'].includes(activeList)\"\r\n >DEFAULT Oversight\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'This option lets you specify the Default Oversight for responsibilities linked with a Program. Where a user has been specified as a Default Oversight, that user will automatically be selected as the Oversight when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"DOHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [disabled]=\"\r\n ['OVERSEER', 'DEFAULT_FAILED_OVERSEER'].includes(activeList)\r\n \"\r\n [selectDiv]=\"true\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default overseers for the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_overseer?.value?.length ||\r\n controls?.program_default_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_overseer?.value[0],\r\n 'DEFAULT_OVERSEER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_overseer?.value[0]?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_overseer?.value[0]?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseersDefault.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"controls?.program_default_overseer?.value?.length > 1\"\r\n >\r\n +{{ controls?.program_default_overseer?.value?.length - 1 }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_default_overseer_group?.value?.length &&\r\n controls?.program_default_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_overseer_group?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_overseer_group?.value[0],\r\n 'DEFAULT_OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_overseer_group?.value[0]\r\n ?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_overseer_group?.value[0]\r\n ?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerDefaultGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_overseer_group?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_overseer_group?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_overseer?.value[0],'DEFAULT_OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_overseer?.value[0]?.member_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_overseer?.value[0]?.member_name}}</span></span>\r\n <button *ngIf=\"controls?.program_default_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseersDefault.popover()\" placement=\"right\">+{{controls?.program_default_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_default_overseer_group?.value?.length && controls?.program_default_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_overseer_group?.value[0],'DEFAULT_OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_overseer_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_overseer_group?.value?.length >1\" class=\"count\" appPopover (click)=\"overseerDefaultGroup.popover()\" placement=\"right\">+{{controls?.program_default_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_OVERSEER'\"\r\n (click)=\"activateList('DEFAULT_OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefault [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_default_overseer?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n class=\"icons\"\r\n (click)=\"remove(overseer, 'DEFAULT_OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_overseer_group?.value\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_OVERSEER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <label class=\"vx-control-panel\"> </label>\r\n <input-with-pill\r\n class=\"vx-mt-2\"\r\n [selectDiv]=\"true\"\r\n [line]=\"3\"\r\n [disabled]=\"['OVERSEER', 'DEFAULT_OVERSEER'].includes(activeList)\"\r\n [placeholder]=\"\r\n 'Which persons will be selected as the default overseers for responsibilities that are not completed within this Program?'\r\n \"\r\n (select)=\"activateList('DEFAULT_FAILED_OVERSEER')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer?.value?.length ||\r\n controls?.program_default_failed_overseer_group?.value?.length\r\n \"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"controls?.program_default_failed_overseer?.value?.length\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_failed_overseer?.value[0],\r\n 'DEFAULT_FAILED_OVERSEER'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_failed_overseer?.value[0]\r\n ?.member_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_failed_overseer?.value[0]\r\n ?.member_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseersDefaultFail.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer?.value?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_failed_overseer?.value?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n <span\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length &&\r\n controls?.program_default_failed_overseer?.value?.length\r\n \"\r\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\r\n >&</span\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value?.length\r\n \"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"\r\n remove(\r\n controls?.program_default_failed_overseer_group?.value[0],\r\n 'DEFAULT_FAILED_OVERSEER_GROUP'\r\n )\r\n \"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"\r\n controls?.program_default_failed_overseer_group?.value[0]\r\n ?.group_name\r\n \"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{\r\n controls?.program_default_failed_overseer_group?.value[0]\r\n ?.group_name\r\n }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"overseerDefaultFailGroup.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length > 1\r\n \"\r\n >\r\n +{{\r\n controls?.program_default_failed_overseer_group?.value\r\n ?.length - 1\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer?.value?.length\">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_failed_overseer?.value[0],'DEFAULT_FAILED_OVERSEER')\" >&#xe90d;</i>\r\n <span class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_failed_overseer?.value[0]?.member_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_failed_overseer?.value?.length > 1\" class=\"count user\" appPopover (click)=\"overseersDefaultFail.popover()\" placement=\"right\">+{{controls?.program_default_failed_overseer?.value?.length -1}}</button>\r\n </div>\r\n <span *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length && controls?.program_default_failed_overseer?.value?.length\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\">&</span>\r\n <div class=\"chip-inner\" *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length \">\r\n <i class=\"icons cross vx-mr-1\" (click)=\"remove(controls?.program_default_failed_overseer_group?.value[0],'DEFAULT_FAILED_OVERSEER_GROUP')\" >&#xe90d;</i>\r\n <span class=\"chip\" [appTooltip]=\"controls?.program_default_failed_overseer_group?.value[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">{{controls?.program_default_failed_overseer_group?.value[0]?.group_name}}</span>\r\n </span>\r\n <button *ngIf=\"controls?.program_default_failed_overseer_group?.value?.length > 1\" class=\"count\" appPopover (click)=\"overseerDefaultFailGroup.popover()\" placement=\"right\">+{{controls?.program_default_failed_overseer_group?.value?.length -1}}</button>\r\n </div>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'DEFAULT_FAILED_OVERSEER'\"\r\n (click)=\"activateList('DEFAULT_FAILED_OVERSEER')\"\r\n class=\"edit\"\r\n type=\"button\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #overseersDefaultFail [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let overseer of controls?.program_default_failed_overseer\r\n ?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n class=\"icons\"\r\n (click)=\"remove(overseer, 'DEFAULT_FAILED_OVERSEER')\"\r\n >&#xe90d;</i\r\n >\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerDefaultFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let group of controls?.program_default_failed_overseer_group\r\n ?.value | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i\r\n (click)=\"remove(group, 'DEFAULT_FAILED_OVERSEER_GROUP')\"\r\n class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ group?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </ng-container>\r\n </form-field>\r\n\r\n <!-- Assessment -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.ASSESSMENT\"\r\n [checked]=\"controls?.program_assessments?.value?.length\"\r\n [active]=\"activeList === 'ASSESSMENT'\"\r\n [disabled]=\"\r\n sideElements.includes(activeList) && activeList !== 'ASSESSMENT'\r\n \"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >ASSESSMENTS\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Assessments are a digital form that are created in \u201CAssessment\u201D within the Compliance Module. Where Assessments are selected when creating a Program, only those Assessments will be available for selection when creating a responsibility linked with the Program.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"AssessmentHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <input-with-pill\r\n [selectDiv]=\"true\"\r\n [placeholder]=\"\r\n 'Which assessments can be linked to the responsibilities within this Program?'\r\n \"\r\n (select)=\"activateList('ASSESSMENT')\"\r\n >\r\n <div\r\n class=\"selected\"\r\n *ngIf=\"controls?.program_assessments?.value?.length\"\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"\r\n controls?.program_assessments?.value\r\n | assessmentResolver as assessments\r\n \"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove(assessments[0], 'ASSESSMENT')\"\r\n >&#xe9ae;</i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"assessments[0]?.assessment_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ assessments[0]?.assessment_name }}</span\r\n >\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"program_assessments.popover()\"\r\n placement=\"right\"\r\n *ngIf=\"assessments?.length > 1\"\r\n >\r\n +{{ assessments?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\">\r\n <ng-container *ngIf=\"(controls?.program_assessments?.value | assessmentResolver) as assessments\">\r\n <div class=\"chip-inner\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove(assessments[0],'ASSESSMENT')\">&#xe90d;</i>{{assessments[0]?.assessment_name}} </span>\r\n <button *ngIf=\"assessments?.length > 1\" class=\"count\" appPopover (click)=\"program_assessments.popover()\" placement=\"right\">+{{assessments?.length -1 }}</button>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n <button\r\n *ngIf=\"activeList !== 'ASSESSMENT'\"\r\n class=\"edit\"\r\n type=\"button\"\r\n (click)=\"activateList('ASSESSMENT')\"\r\n >\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </input-with-pill>\r\n <app-popover #program_assessments [dontCloseonClick]=\"true\">\r\n <ng-container>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let assessment of controls?.program_assessments?.value\r\n | assessmentResolver\r\n | slice : 1\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i (click)=\"remove(assessment, 'ASSESSMENT')\" class=\"icons\"\r\n >&#xe90d;</i\r\n >\r\n {{ assessment?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </app-popover>\r\n </form-field>\r\n\r\n <!-- Format & Evidence -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.FORMATE_EVIDENCE\"\r\n [checked]=\"[true, false].includes(controls?.evidence_required?.value)\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >Evidence\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If selected, evidence of completion of a responsibility will be required for all responsibilities that are linked with the Program. An Assignor, being the person who creates the responsibility, can override this option when creating a responsibility.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"EvidenceHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <div class=\"upload-format\">\r\n <span class=\"text\"\r\n >Do all responsibilities within this program require evidence?</span\r\n >\r\n <div class=\"radio-group program\">\r\n <app-cs-radio\r\n [name]=\"'evidence_required'\"\r\n [checked]=\"controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required', true)\"\r\n >YES</app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'evidence_required'\"\r\n [checked]=\"!controls?.evidence_required?.value\"\r\n (checkedEvent)=\"setFormField('evidence_required', false)\"\r\n >NO</app-cs-radio\r\n >\r\n </div>\r\n </div>\r\n <!-- <div class=\"vx-d-flex vx-align-center vx-justify-end vx-mt-2\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-mr-2\">Allow any file to be marked as\r\n key\r\n evidence</div>\r\n <switch formControlName=\"allow_any_file_key_evidence\"\r\n (change)=\"setFormField('allow_any_file_key_evidence',$event?.target?.checked)\"></switch>\r\n </div> -->\r\n </form-field>\r\n\r\n <!-- Custom Field -->\r\n <form-field\r\n [appScrollInView]=\"scrollToBottom\"\r\n *ngIf=\"additionalOption?.CUSTOM_FIELDS\"\r\n [checked]=\"controls?.custom_fields?.value?.length\"\r\n [active]=\"false\"\r\n [disabled]=\"sideElements.includes(activeList)\"\r\n [img]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/custom-fields.svg'\r\n \"\r\n >\r\n <label class=\"vx-control-panel\"\r\n >CUSTOM FIELD\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'Where a custom field is specified, all responsibilities linked with a Program will contain that custom field. Custom fields enable the collection of additional meta data.'\r\n \"\r\n placement=\"bottom\"\r\n delay=\"0\"\r\n type=\"white\"\r\n [tooltipMandatory]=\"true\"\r\n id=\"CFHelpText\"\r\n >&#xeb16;</i\r\n ></label\r\n >\r\n <custom-field formControlName=\"custom_fields\"></custom-field>\r\n </form-field>\r\n </form>\r\n</div>\r\n\r\n<!-- list of roles -->\r\n<role-list\r\n *ngIf=\"activeList === 'ROLE'\"\r\n [selected]=\"controls?.program_roles?.value | refDisconnect\"\r\n [loading]=\"listLoadingState.ROLES\"\r\n [list]=\"lists?.ROLES?.data ?? []\"\r\n (save)=\"listAction($event, 'ROLE')\"\r\n (cancel)=\"fieldDeselector('ROLE')\"\r\n [featureflagrole]=\"featureflagrole\"\r\n [featureflagGroup]=\"featureflagGroups\"\r\n [ff_rc_listing]=\"ff_rc_listing\"\r\n></role-list>\r\n\r\n<!-- list of frameworks -->\r\n<!-- <app-define-framework-listing *ngIf=\"activeList === 'FRAMEWORK'\" (cancel)=\"fieldDeselector('FRAMEWORK')\" (next)=\"listAction($event,'FRAMEWORK')\" [mode]=\"mode\" [selectedFramework]=\"controls?.framework?.value\"></app-define-framework-listing> -->\r\n<!-- list of responsibility center -->\r\n<app-responsibility-centers-list\r\n *ngIf=\"activeList === 'RC'\"\r\n [responsibilityCentersList]=\"lists?.RC ?? []\"\r\n [radioSelection]=\"false\"\r\n [rcIdKey]=\"'rc_id'\"\r\n (closeRcList)=\"fieldDeselector('RC')\"\r\n (saveSelectedList)=\"listAction($event, 'RC')\"\r\n [selectedResponsibilityCenters]=\"controls?.rc?.value | refDisconnect\"\r\n>\r\n</app-responsibility-centers-list>\r\n<!-- render userlist with group -->\r\n\r\n<user-group-list\r\n *ngIf=\"activeList === 'OWNER'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [nonRemovableUserIds]=\"lists.NON_REMOVABLE_OWNERS | listToId : 'member_id'\"\r\n [userlist]=\"lists?.OWNERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_owners?.value | refDisconnect\"\r\n (fetchUserData)=\"fetchUsersAssociatedWithRoles(false, $event)\"\r\n [userListInfo]=\"lists?.OWNERS\"\r\n [groupListInfo]=\"lists?.OWNERS_GROUPS\"\r\n [groupList]=\"lists?.OWNERS_GROUPS?.data ?? []\"\r\n [selectedGroups]=\"controls?.program_owners_group?.value | refDisconnect\"\r\n (save)=\"listAction($event, 'OWNER')\"\r\n (cancel)=\"fieldDeselector('OWNER')\"\r\n [panelTitle]=\"panelTitleOwner\"\r\n [featureflag]=\"featureflagGroups\"\r\n></user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'APPROVER'\"\r\n [groupEnabled]=\"false\"\r\n [singleSelect]=\"true\"\r\n [userlist]=\"lists?.APPROVERS?.data ?? []\"\r\n [selectedUsers]=\"controls?.program_approver?.value | refDisconnect\"\r\n [userListInfo]=\"lists?.APPROVERS\"\r\n (save)=\"listAction($event, 'APPROVER')\"\r\n (cancel)=\"fieldDeselector('APPROVER')\"\r\n [panelTitle]=\"panelTitleApprover\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'ASSIGNEE'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [userlist]=\"lists?.ASSIGNEES ?? []\"\r\n [selectedUsers]=\"controls?.program_assignee?.value | refDisconnect\"\r\n [groupList]=\"lists?.ASSIGNEES_GROUP ?? []\"\r\n [FromProgram]=\"true\"\r\n [selectedGroups]=\"controls?.program_assignee_group?.value | refDisconnect\"\r\n [disabledIds]=\"disabledAssigneeIds\"\r\n [fromResponsibility]=\"'Assignee'\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [assignorId]=\"assignorId\"\r\n [userListInfo]=\"lists?.ASSIGNEES\"\r\n (save)=\"listAction($event, 'ASSIGNEE')\"\r\n (cancel)=\"fieldDeselector('ASSIGNEE')\"\r\n [panelTitle]=\"panelTitleAssignee\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_assignee?.value | refDisconnect\r\n \"\r\n [userType]=\"'assignees'\"\r\n [featureflag]=\"featureflagGroups\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'DEFAULT_ASSIGNEE'\"\r\n [groupEnabled]=\"true\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [userlist]=\"lists?.DEFAULT_ASSIGNEES ?? []\"\r\n [selectedUsers]=\"controls?.program_default_assignee?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_ASSIGNEES_GROUP ?? []\"\r\n [FromProgram]=\"true\"\r\n [selectedGroups]=\"\r\n controls?.program_default_assignee_group?.value | refDisconnect\r\n \"\r\n [disabledIds]=\"disabledAssigneeIds\"\r\n [fromResponsibility]=\"'Assignee'\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [assignorId]=\"assignorId\"\r\n [userListInfo]=\"lists?.DEFAULT_ASSIGNEE\"\r\n (save)=\"listAction($event, 'DEFAULT_ASSIGNEE')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_ASSIGNEE')\"\r\n [featureflag]=\"featureflagGroups\"\r\n>\r\n</user-group-list>\r\n\r\n<user-group-list\r\n *ngIf=\"activeList === 'REVIEWER' && (!featureflagGroups || featureflagGroups)\"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.REVIEWERS ?? []\"\r\n [selectedUsers]=\"controls?.program_reviewer?.value | refDisconnect\"\r\n [groupList]=\"lists?.REVIEWERS_GROUP ?? []\"\r\n [featureflag]=\"featureflagGroups\"\r\n [selectedGroups]=\"controls?.program_reviewer_group?.value | refDisconnect\"\r\n [disabledIds]=\"disableReviewerIds\"\r\n [fromResponsibility]=\"'Reviewer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [userListInfo]=\"lists?.REVIEWERS\"\r\n (save)=\"listAction($event, 'REVIEWER')\"\r\n (cancel)=\"fieldDeselector('REVIEWER')\"\r\n [panelTitle]=\"panelTitleReviewer\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_reviewer?.value | refDisconnect\r\n \"\r\n [userType]=\"'reviewers'\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_REVIEWER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_REVIEWERS ?? []\"\r\n [selectedUsers]=\"controls?.program_default_reviewer?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_REVIEWERS_GROUP ?? []\"\r\n [featureflag]=\"featureflagGroups\"\r\n [selectedGroups]=\"\r\n controls?.program_default_reviewer_group?.value | refDisconnect\r\n \"\r\n [disabledIds]=\"disableReviewerIds\"\r\n [fromResponsibility]=\"'Reviewer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [overseerIds]=\"selectedOverseerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_REVIEWERS\"\r\n (save)=\"listAction($event, 'DEFAULT_REVIEWER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_REVIEWER')\"\r\n [panelTitle]=\"panelTitleDefaultReviewer\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"activeList === 'OVERSEER' && (!featureflagGroups || featureflagGroups)\"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.OVERSEERS ?? []\"\r\n [selectedUsers]=\"controls?.program_overseer?.value | refDisconnect\"\r\n [groupList]=\"lists?.OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"controls?.program_overseer_group?.value | refDisconnect\"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.OVERSEES\"\r\n (save)=\"listAction($event, 'OVERSEER')\"\r\n (cancel)=\"fieldDeselector('OVERSEER')\"\r\n [defaultSelectedUsers]=\"\r\n controls?.program_default_overseer?.value\r\n | refDisconnect\r\n | arrayConcat : controls?.program_default_failed_overseer?.value\r\n \"\r\n [userType]=\"'overseers'\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_OVERSEER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\"\r\n [selectedUsers]=\"controls?.program_default_overseer?.value | refDisconnect\"\r\n [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"\r\n controls?.program_default_overseer_group?.value | refDisconnect\r\n \"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\"\r\n (save)=\"listAction($event, 'DEFAULT_OVERSEER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_OVERSEER')\"\r\n>\r\n</user-group-list>\r\n<user-group-list\r\n *ngIf=\"\r\n activeList === 'DEFAULT_FAILED_OVERSEER' &&\r\n (!featureflagGroups || featureflagGroups)\r\n \"\r\n [groupEnabled]=\"featureflagGroups\"\r\n [singleSelect]=\"false\"\r\n [loading]=\"listLoadingState.USERS\"\r\n [FromProgram]=\"true\"\r\n [userlist]=\"lists?.DEFAULT_OVERSEERS ?? []\"\r\n [selectedUsers]=\"\r\n controls?.program_default_failed_overseer?.value | refDisconnect\r\n \"\r\n [groupList]=\"lists?.DEFAULT_OVERSEERS_GROUP ?? []\"\r\n [selectedGroups]=\"\r\n controls?.program_default_failed_overseer_group?.value | refDisconnect\r\n \"\r\n [featureflag]=\"featureflagGroups\"\r\n [disabledIds]=\"disableOverseerIds\"\r\n [fromResponsibility]=\"'Overseer'\"\r\n [assignorId]=\"assignorId\"\r\n [assigneeIds]=\"selectedAssigneeIds\"\r\n [reviewerIds]=\"selectedReviewerIds\"\r\n [userListInfo]=\"lists?.DEFAULT_OVERSEERS\"\r\n (save)=\"listAction($event, 'DEFAULT_FAILED_OVERSEER')\"\r\n (cancel)=\"fieldDeselector('DEFAULT_FAILED_OVERSEER')\"\r\n>\r\n</user-group-list>\r\n<assessment-picker\r\n *ngIf=\"activeList === 'ASSESSMENT'\"\r\n [selectedAssessment]=\"controls?.program_assessments?.value\"\r\n (cancelAssessment)=\"fieldDeselector('ASSESSMENT')\"\r\n (onAssessmentSelect)=\"listAction($event, 'ASSESSMENT')\"\r\n></assessment-picker>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\"\r\n>\r\n</app-smiley-dialog-inline>\r\n\r\n<!-- Framework selector -->\r\n<app-framework-list\r\n *ngIf=\"activeList === 'FRAMEWORK'\"\r\n [workflowPage]=\"['FRAMEWORK']\"\r\n (assignControl)=\"listAction($event, 'FRAMEWORK')\"\r\n (closeFramework)=\"fieldDeselector('FRAMEWORK')\"\r\n [previousSelectedValues]=\"{ framework: controls?.framework.value }\"\r\n (entrustFramework)=\"entrustFramework($event)\"\r\n [headerText]=\"'Select a framework'\"\r\n></app-framework-list>\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/padding/padding.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\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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-top.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\";::ng-deep .workflow-program{display:block;position:relative}::ng-deep .workflow-program .scope-label{background:#747576;border-radius:.125rem;position:relative;z-index:1}::ng-deep .workflow-program .scope-label:before{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:7rem;width:20rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label:after{background:#f1f1f1;content:\"\";position:absolute;top:.5rem;left:-2.5rem;width:2.5rem;height:1px;z-index:-1}::ng-deep .workflow-program .scope-label .required{position:absolute;top:0;right:-.625rem}::ng-deep .workflow-program .info-icon{position:relative;top:.125rem;cursor:pointer}::ng-deep .workflow-program .date-picker .picker-group{width:calc(50% - .125rem);position:relative}::ng-deep .workflow-program .date-picker .picker-group:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .workflow-program .date-picker .picker-group input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#fff;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;padding:0 2rem 0 .75rem;outline:none}::ng-deep .workflow-program .date-picker .picker-group input:focus,::ng-deep .workflow-program .date-picker .picker-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .workflow-program .date-picker .picker-group input::placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input:-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group input::-ms-input-placeholder{color:#747576;font-size:13px}::ng-deep .workflow-program .date-picker .picker-group i{height:1rem;width:1rem;position:absolute;right:.75rem;top:.625rem;pointer-events:none}::ng-deep .workflow-program .program-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;justify-content:space-between;padding:4px;position:relative;z-index:1}::ng-deep .workflow-program .program-type-field .type-item{position:relative}::ng-deep .workflow-program .program-type-field .type-item:first-of-type{width:6.25rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2){width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(6.4375rem);width:5.75rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3){width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:nth-child(3).active~.background-glider{transform:translate(12.375rem);width:8.625rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type{width:5.25rem}::ng-deep .workflow-program .program-type-field .type-item:last-of-type.active~.background-glider{transform:translate(21.1875rem);width:5.25rem}::ng-deep .workflow-program .program-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:center}::ng-deep .workflow-program .program-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none}::ng-deep .workflow-program .program-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .workflow-program .program-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .workflow-program .program-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:6.25rem;height:32px;z-index:-1;transition:.25s ease-out}::ng-deep .workflow-program .vx-form-group .upload-files .file-item{background:#f1f1f1;border:1px solid #dbdbdb;border-radius:.25rem;padding-left:.125rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:8.5rem}::ng-deep .workflow-program .vx-form-group .upload-files .file-item button.delete-btn{background:transparent;border-radius:0;border:none;border-left:1px solid #dbdbdb;height:1.625rem}::ng-deep .workflow-program .vx-form-group .upload-files button.file-count{background:#1e5dd3;border-radius:.125rem;border:none;color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0;margin:4px 0 0 4px}::ng-deep .workflow-program .vx-form-group .upload-format .radio-group app-cs-radio{height:1.375rem}::ng-deep .workflow-program .vx-form-group .default-selected{background:#fbfbfb;border:1px solid #F1F1F1;border-radius:.25rem;margin-top:.5rem}::ng-deep .workflow-program .vx-form-group .default-selected .selected{border-radius:0;border:none;background:none}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio{border-top:1px solid #F1F1F1}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio{margin-top:0!important}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.radio{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;padding:.5rem .5rem .5rem 2.25rem;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .workflow-program .vx-form-group .default-selected .default-radio app-cs-radio label.radio-item svg{position:absolute;top:.5rem;left:.75rem}::ng-deep .workflow-program .vx-form-group .selected .custom-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:2.4rem}::ng-deep .workflow-program .vx-form-group .selected button.cross-btn{background:transparent;border-radius:0;border:0;padding:0}::ng-deep .workflow-program .vx-form-group .custom-input{position:relative}::ng-deep .workflow-program .vx-form-group .custom-input input{padding-right:2rem}::ng-deep .workflow-program .vx-form-group .custom-input button.cross-btn{background:transparent;border-radius:0;border:0;position:absolute;top:.875rem;right:.625rem}::ng-deep .workflow-program .vx-form-group button.add-more-btn{background:transparent;border-radius:0;border:none;padding:0}::ng-deep app-popover .wf-action-list ul.action-item .avatar-card .value{text-transform:none!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill .file-item{background:transparent!important;border:none!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill .file-name{width:100%!important;max-width:100%!important}::ng-deep app-popover .wf-action-list ul.action-item li file-pill button.delete-btn{border:none!important;padding-right:0!important}.disabled{opacity:.4;pointer-events:none;filter:grayscale(1)}.vx-info-card{width:280px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;position:static;display:block;left:780}.vx-info-card-body{font-size:12px;padding:8px 12px;margin:0;font-weight:400;text-transform:none;color:#747576}\n", "@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\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group vcomply-editor{margin-top:8px;display:block}::ng-deep .vx-form-group vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"] }]
1511
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.ProgramsService }, { type: i3.AuthService }, { type: i4.UiKitService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { form: [{
1512
+ type: ViewChild,
1513
+ args: ['form', { read: ElementRef }]
1514
+ }], datePicker: [{
1515
+ type: ViewChild,
1516
+ args: ['datePicker']
1517
+ }], pickerChanged: [{
1518
+ type: Output
1519
+ }], populateOption: [{
1520
+ type: Output
1521
+ }], closeWorkflow: [{
1522
+ type: Output
1523
+ }], showConfirmationAlert: [{
1524
+ type: Output
1525
+ }], disconnectRefresh: [{
1526
+ type: Output
1527
+ }], refreshForm: [{
1528
+ type: Output
1529
+ }], hideElementsFromMoreOptions: [{
1530
+ type: Output
1531
+ }], onRemovingRole: [{
1532
+ type: Output
1533
+ }], disableElementsFromMoreOptions: [{
1534
+ type: Output
1535
+ }], canFrameworkChange: [{
1536
+ type: Input
1537
+ }], mode: [{
1538
+ type: Input
1539
+ }], programId: [{
1540
+ type: Input
1541
+ }], programType: [{
1542
+ type: Input
1543
+ }], allowedFeature: [{
1544
+ type: Input
1545
+ }], addToProgramDetails: [{
1546
+ type: Input
1547
+ }], orgDetails: [{
1548
+ type: Input
1549
+ }] } });
1550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcHJvZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL3dvcmtmbG93LXByb2dyYW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcHJvZ3JhbS93b3JrZmxvdy1wcm9ncmFtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUlsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPeEMsTUFBTSxPQUFPLHdCQUF3QjtJQXVEbkMsWUFDVSxFQUFzQixFQUN0QixjQUErQixFQUMvQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixTQUE0QjtRQUo1QixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUEzRHRDLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFdEIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMs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VSxFQUFFO2dCQUVkLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDYixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csOEJBQThCO3NCQUF2QyxNQUFNO2dCQUVFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1zU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IENPTlNUQU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXByb2dyYW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1wcm9ncmFtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1wcm9ncmFtLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93UHJvZ3JhbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RhbnRzID0gQ09OU1RBTlRTO1xyXG4gIHNob3dDb25maXJtYXRpb246IGFueTtcclxuICBpc0FzY2VudEFsbG93ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmZl9yY19saXN0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnZm9ybScsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBmb3JtITogRWxlbWVudFJlZjtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNob3dDb25maXJtYXRpb25BbGVydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUmVtb3ZpbmdSb2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzYWJsZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHNjcm9sbFRvQm90dG9tITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjYW5GcmFtZXdvcmtDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByb2dyYW1TaW1wbGlmeUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQWxsIElucHV0IGZpZWxkc1xyXG4gIEBJbnB1dCgpIG1vZGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1JZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgcHJvZ3JhbVR5cGU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgYWxsb3dlZEZlYXR1cmUhOiBhbnk7XHJcbiAgQElucHV0KCkgYWRkVG9Qcm9ncmFtRGV0YWlsczogYW55O1xyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHM6IGFueTtcclxuICBwYW5lbFRpdGxlRGVmYXVsdFJldmlld2VyID0gJ1NlbGVjdCBEZWZhdWx0IFJldmlld2VyKHMpJztcclxuICBwYW5lbFRpdGxlT3duZXIgPSAnU2VsZWN0IE93bmVyKHMpJztcclxuICBwYW5lbFRpdGxlUmV2aWV3ZXIgPSAnU2VsZWN0IFJldmlld2VyKHMpJztcclxuICBwYW5lbFRpdGxlQXNzaWduZWUgPSAnU2VsZWN0IEFzc2lnbmVlKHMpJztcclxuICBwYW5lbFRpdGxlQXBwcm92ZXIgPSAnU2VsZWN0ICBBcHByb3Zlcic7XHJcbiAgaXNBcHByb3ZlckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNQcm9ncmFtU2NvcGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sVGlwRGF0YTogYW55ID0ge1xyXG4gICAgb3duZXI6XHJcbiAgICAgICdPd25lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhIFByb2dyYW0uIE9ubHkgT3duZXJzIGNhbiBtYWtlIGNoYW5nZXMgdG8gYSBQcm9ncmFtIGFuZCB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IGFyZSBsaW5rZWQgd2l0aCB0aGUgUHJvZ3JhbS48YnI+VGhlIDxzdHJvbmc+S2V5IEFkbWluPC9zdHJvbmc+IGFuZCBhbGwgPGI+QWRtaW48L2I+IHVzZXJzIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIE93bmVycyBvZiBhIFByb2dyYW0gYnkgZGVmYXVsdC4nLFxyXG4gICAgcHJvZ3JhbVNjb3BlOiBgQSBQcm9ncmFtIFNjb3BlIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M6XHJcbiAgPGxpPlRvIHNwZWNpZnkgdGhlIGR1cmF0aW9uIG9mIHRoZSBQcm9ncmFtLjwvbGk+XHJcbiAgPGxpPlRvIHByZS1zZWxlY3QgY2VydGFpbiBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB3aGVuIGNyZWF0aW5nIGEgcmVzcG9uc2liaWxpdHksIHRoZXJlYnkgZGVjcmVhc2luZyB0aGUgdGltZSByZXF1aXJlZCB0byBjcmVhdGUgYSByZXNwb25zaWJpbGl0eS48L2xpPlxyXG4gIDxsaT5UbyBsaW1pdCB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiB3aGVuIGNyZWF0aW5nIGEgcmVzcG9uc2liaWxpdHksIHRoZXJlYnkgbWFraW5nIGl0IGVhc2llciB0byBjcmVhdGUgYSByZXNwb25zaWJpbGl0eSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2Qgb2YgYW4gaW5jb3JyZWN0IG9wdGlvbiBiZWluZyBzZWxlY3RlZC48L2xpPlxyXG4gICAgYCxcclxuICB9O1xyXG4gIGJ1c2luZXNzQ3ljbGU6IGFueTtcclxuICBmZWF0dXJlZmxhZ3JvbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmZWF0dXJlZmxhZ0dyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpc2FibGVkQXNzaWduZWVJZHM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRSZXZpZXdlcklkczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkT3ZlcnNlZXJJZHM6IGFueVtdID0gW107XHJcbiAgYXNzaWdub3JJZDogbnVtYmVyW10gPSBbXTtcclxuICBkaXNhYmxlUmV2aWV3ZXJJZHM6IGFueVtdID0gW107XHJcbiAgZGlzYWJsZU92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgcHJvZ3JhbVNlcnZpY2U6IFByb2dyYW1zU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5idXNpbmVzc0N5Y2xlID0gSlNPTi5wYXJzZShcclxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzQ3ljbGUnKSA/PyAne30nXHJcbiAgICApO1xyXG4gIH1cclxuICBwdWJsaWMgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgY29uc3QgaXNXaGl0ZXNwYWNlID0gKGNvbnRyb2wudmFsdWUgfHwgJycpLnRyaW0oKS5sZW5ndGggPT09IDA7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gIWlzV2hpdGVzcGFjZTtcclxuICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgd2hpdGVzcGFjZTogdHJ1ZSB9O1xyXG4gIH1cclxuICBwdWJsaWMgYmxhbmtBcnJheVZhbGlkYXRvcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcclxuICAgIGNvbnN0IGlzQmxhbmsgPSBjb250cm9sLnZhbHVlPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUpPy5sZW5ndGggPT09IDA7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gIWlzQmxhbms7XHJcbiAgICByZXR1cm4gaXNWYWxpZCA/IG51bGwgOiB7IGJsYW5rOiB0cnVlIH07XHJcbiAgfVxyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUHJvZ3JhbXMnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUHJvZ3JhbScsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdQcm9ncmFtJyB9LFxyXG4gIF07XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCFgO1xyXG4gIGNyZWF0ZWRQcm9ncmFtSWQgPSAnJztcclxuICBpc09iamVjdGl2ZVZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc05hbWVFeGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvL2Zvcm0gYm9keSBmb3IgcHJvZ3JhbSBtZXRhIGRhdGFcclxuICBwcm9ncmFtRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgcHJvZ3JhbV90eXBlOiBbXHJcbiAgICAgIHRoaXMucHJvZ3JhbVR5cGUsXHJcbiAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKSwgVmFsaWRhdG9ycy5tYXgoMyldLFxyXG4gICAgXSxcclxuICAgIHByb2dyYW1fbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5ub1doaXRlc3BhY2VWYWxpZGF0b3JdXSxcclxuICAgIHByb2dyYW1fZGVzY3JpcHRpb246IFsnJ10sXHJcbiAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9vYmplY3RpdmU6IFsnJ10sXHJcbiAgICAvLyBwcm9ncmFtX29iamVjdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5ub1doaXRlc3BhY2VWYWxpZGF0b3JdXSxcclxuICAgIHByb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9yb2xlczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5ibGFua0FycmF5VmFsaWRhdG9yXV0sXHJcbiAgICBhbGxfdXNlcl9pbl9yb2xlOiBbZmFsc2VdLFxyXG4gICAgcHJvZ3JhbV9vd25lcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuYmxhbmtBcnJheVZhbGlkYXRvcl1dLFxyXG4gICAgcHJvZ3JhbV9vd25lcnNfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2FwcHJvdmVyOiBbW11dLFxyXG4gICAgcGVyZm9ybWFuY2VfY2FsY3VsYXRpb246IFsnUEFTVF9FVkVOVCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICByZWN1cnJpbmdfZnJlcXVlbmN5OiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIGxvY2tfc2NvcGVfY2hhbmdlOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICBmcmFtZXdvcms6IFtdLFxyXG4gICAgcmM6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2Fzc2lnbmVlOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZV9ncm91cDogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZTogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cDogW1tdXSxcclxuICAgIGFzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWE6IFsnQUxMJ10sXHJcbiAgICBwcm9ncmFtX3Jldmlld2VyOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9yZXZpZXdlcl9ncm91cDogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcjogW1tdXSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cDogW1tdXSxcclxuICAgIHJldmlld2VyX2NvbXBsZXRpb25fY3JpdGVyaWE6IFsnU0VRVUVOVElBTCddLFxyXG4gICAgcHJvZ3JhbV9vdmVyc2VlcjogW1tdXSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6IFtbXV0sXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyOiBbW11dLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cDogW1tdXSxcclxuICAgIHByb2dyYW1fYXNzZXNzbWVudHM6IFtbXV0sXHJcbiAgICBldmlkZW5jZV9yZXF1aXJlZDogW2ZhbHNlXSxcclxuICAgIGFsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZTogW2ZhbHNlXSxcclxuICAgIGN1c3RvbV9maWVsZHM6IFtbXV0sXHJcbiAgICBwcm9ncmFtX3N0YXRlOiAwLFxyXG4gIH0pO1xyXG5cclxuICAvL2V4Y2VwdGlvbmFsIGhhbmRsaW5nIG9mIGN1c3RvbSBmaWVsZHNcclxuXHJcbiAgc2hvd0FkZEN1c3RvbUZpZWxkID0gdHJ1ZTtcclxuICAvL1Byb2dyYW0gb2JqZWN0aXZlIGFuZCBkZXNjcmlwaW9uIGFyZSBleHBsZWN0bHkgZGVjbGFyZWQgYXMgdGhleSBhcmUgdXNpbmcgbWFyeCBlZGl0b3Igd2hpY2ggZG9lcyBub3Qgc3VwcG9ydHMgUmVhY3RpdmUgZm9ybXMgYmluZGluZ1xyXG4gIGVkaXRvckRhdGEgPSB7XHJcbiAgICBwcm9ncmFtT2JqZWN0aXZlOiAnJyxcclxuICAgIHByb2dyYW1EZXNjcmlwdGlvbjogJycsXHJcbiAgfTtcclxuXHJcbiAgc2VsZWN0ZWRBc3Nlc3NtZW50ITogYW55O1xyXG5cclxuICBjdXJyZW50VXNlcigpIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLnRva2VuSW5mbygpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWVtYmVyX2VtYWlsOiB1c2VyPy5lbWFpbCxcclxuICAgICAgbWVtYmVyX2lkOiB1c2VyPy5pZCxcclxuICAgICAgbWVtYmVyX25hbWU6IHVzZXI/Lm5hbWUsXHJcbiAgICAgIHVzZXJfcm9sZTogJ0xPR0dFRF9JTicsXHJcbiAgICAgIF9pZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvL1NldHMgdGhlIHZhbHVlIG9mIGEgZm9ybSBjb250cm9sXHJcbiAgc2V0Rm9ybUZpZWxkKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRnJvbUZvcm0/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgcGF0Y2g6IGFueSA9IHt9O1xyXG4gICAgcGF0Y2hbY29udHJvbE5hbWVdID0gdmFsdWU7XHJcbiAgICB0aGlzLnByb2dyYW1Gb3JtLnBhdGNoVmFsdWUocGF0Y2gpO1xyXG4gICAgdGhpcy5jb250cm9sc1tjb250cm9sTmFtZV0/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIGlmIChcclxuICAgICAgaXNGcm9tRm9ybSAmJlxyXG4gICAgICBjb250cm9sTmFtZSA9PT0gJ3Byb2dyYW1fb2JqZWN0aXZlJyAmJlxyXG4gICAgICAhdmFsdWUucmVwbGFjZSgvJm5ic3A7L2csICcgJykudHJpbSgpXHJcbiAgICApXHJcbiAgICAgIHRoaXMuaXNPYmplY3RpdmVWYWxpZCA9IGZhbHNlO1xyXG4gICAgZWxzZSB0aGlzLmlzT2JqZWN0aXZlVmFsaWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9SZXR1cm5zIHdlYXRoZXIgdGhlIGZvcm0gaXMgdmFsaWQgb3Igbm90XHJcbiAgZ2V0IGZvcm1WYWxpZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcm9ncmFtRm9ybS52YWxpZCAmJlxyXG4gICAgICB0aGlzLmVkaXRvckRhdGE/LnByb2dyYW1PYmplY3RpdmU/LnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpPy50cmltKCk/Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udHJvbHM6IGFueSA9IHtcclxuICAgIHByb2dyYW1fbmFtZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fbmFtZScpLFxyXG4gICAgcHJvZ3JhbV90eXBlOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV90eXBlJyksXHJcbiAgICBwcm9ncmFtX29iamVjdGl2ZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fb2JqZWN0aXZlJyksXHJcbiAgICBwcm9ncmFtX3JvbGVzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9yb2xlcycpLFxyXG4gICAgcHJvZ3JhbV9vd25lcnM6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX293bmVycycpLFxyXG4gICAgcHJvZ3JhbV9vd25lcnNfZ3JvdXA6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX293bmVyc19ncm91cCcpLFxyXG4gICAgYWxsX3VzZXJfaW5fcm9sZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2FsbF91c2VyX2luX3JvbGUnKSxcclxuICAgIHByb2dyYW1fYXBwcm92ZXI6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2FwcHJvdmVyJyksXHJcbiAgICBkZXNjcmlwdGlvbl9hdHRhY2htZW50OiB0aGlzLnByb2dyYW1Gb3JtLmdldChcclxuICAgICAgJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnXHJcbiAgICApLFxyXG4gICAgb2JqZWN0aXZlX2F0dGFjaG1lbnRzOiB0aGlzLnByb2dyYW1Gb3JtLmdldChcclxuICAgICAgJ3Byb2dyYW1fb2JqZWN0aXZlX2F0dGFjaG1lbnRzJ1xyXG4gICAgKSxcclxuICAgIHBlcmZvcm1hbmNlX2NhbGN1bGF0aW9uOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncGVyZm9ybWFuY2VfY2FsY3VsYXRpb24nKSxcclxuICAgIHJlY3VycmluZ19mcmVxdWVuY3k6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdyZWN1cnJpbmdfZnJlcXVlbmN5JyksXHJcbiAgICBsb2NrX3Njb3BlX2NoYW5nZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2xvY2tfc2NvcGVfY2hhbmdlJyksXHJcbiAgICByYzogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3JjJyksXHJcbiAgICBldmlkZW5jZV9yZXF1aXJlZDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ2V2aWRlbmNlX3JlcXVpcmVkJyksXHJcbiAgICBmcmFtZXdvcms6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdmcmFtZXdvcmsnKSxcclxuICAgIGFsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoXHJcbiAgICAgICdhbGxvd19hbnlfZmlsZV9rZXlfZXZpZGVuY2UnXHJcbiAgICApLFxyXG4gICAgcHJvZ3JhbV9hc3NpZ25lZTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fYXNzaWduZWUnKSxcclxuICAgIHByb2dyYW1fYXNzaWduZWVfZ3JvdXA6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2Fzc2lnbmVlX2dyb3VwJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoXHJcbiAgICAgICdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXAnXHJcbiAgICApLFxyXG4gICAgYXNzaWduZWVfY29tcGxldGlvbl9jcml0ZXJpYTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoXHJcbiAgICAgICdhc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhJ1xyXG4gICAgKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcjogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcicpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwOiB0aGlzLnByb2dyYW1Gb3JtLmdldChcclxuICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cCdcclxuICAgICksXHJcbiAgICBwcm9ncmFtX3Jldmlld2VyOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9yZXZpZXdlcicpLFxyXG4gICAgcHJvZ3JhbV9yZXZpZXdlcl9ncm91cDogdGhpcy5wcm9ncmFtRm9ybS5nZXQoJ3Byb2dyYW1fcmV2aWV3ZXJfZ3JvdXAnKSxcclxuICAgIHByb2dyYW1fb3ZlcnNlZXI6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX292ZXJzZWVyJyksXHJcbiAgICBwcm9ncmFtX292ZXJzZWVyX2dyb3VwOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9vdmVyc2Vlcl9ncm91cCcpLFxyXG4gICAgcHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJyksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KFxyXG4gICAgICAncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJ1xyXG4gICAgKSxcclxuICAgIHByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KFxyXG4gICAgICAncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcidcclxuICAgICksXHJcbiAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwOiB0aGlzLnByb2dyYW1Gb3JtLmdldChcclxuICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXAnXHJcbiAgICApLFxyXG4gICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYTogdGhpcy5wcm9ncmFtRm9ybS5nZXQoXHJcbiAgICAgICdyZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhJ1xyXG4gICAgKSxcclxuICAgIHByb2dyYW1fYXNzZXNzbWVudHM6IHRoaXMucHJvZ3JhbUZvcm0uZ2V0KCdwcm9ncmFtX2Fzc2Vzc21lbnRzJyksXHJcbiAgICBjdXN0b21fZmllbGRzOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgnY3VzdG9tX2ZpZWxkcycpLFxyXG4gICAgaXNBcHByb3ZlckRpc2FibGVkOiB0aGlzLnByb2dyYW1Gb3JtLmdldCgnaXNBcHByb3ZlckRpc2FibGVkJyksXHJcbiAgfTtcclxuXHJcbiAgbGlzdHM6IGFueSA9IHtcclxuICAgIFJPTEVTOiBbXSxcclxuICAgIE9XTkVSUzogW10sXHJcbiAgICBPV05FUlNfR1JPVVBTOiBbXSxcclxuICAgIEFQUFJPVkVSUzogW10sXHJcbiAgICBSRVZJRVdFUlM6IFtdLFxyXG4gICAgUkVWSUVXRVJTX0dST1VQOiBbXSxcclxuICAgIEFTU0lHTkVFUzogW10sXHJcbiAgICBBU1NJR05FRVNfR1JPVVA6IFtdLFxyXG4gICAgREVGQVVMVF9BU1NJR05FRVM6IFtdLFxyXG4gICAgREVGQVVMVF9BU1NJR05FRVNfR1JPVVA6IFtdLFxyXG4gICAgREVGQVVMVF9SRVZJRVdFUlM6IFtdLFxyXG4gICAgREVGQVVMVF9SRVZJRVdFUlNfR1JPVVA6IFtdLFxyXG4gICAgT1ZFUlNFRVJTOiBbXSxcclxuICAgIE9WRVJTRUVSU19HUk9VUDogW10sXHJcbiAgICBERUZBVUxUX09WRVJTRUVSUzogW10sXHJcbiAgICBERUZBVUxUX09WRVJTRUVSU19HUk9VUDogW10sXHJcbiAgICBSQzogW10sXHJcbiAgICBOT05fUkVNT1ZBQkxFX09XTkVSUzogW10sXHJcbiAgICBBTExfVVNFUjogW10sXHJcbiAgICBBTExfR1JPVVA6IFtdLFxyXG4gICAgU1lTVEVNX1JPTEVfSURTOiBbXSxcclxuICB9O1xyXG5cclxuICBsaXN0TG9hZGluZ1N0YXRlID0ge1xyXG4gICAgUk9MRVM6IGZhbHNlLFxyXG4gICAgVVNFUlM6IGZhbHNlLFxyXG4gICAgR1JPVVA6IGZhbHNlLFxyXG4gICAgUkM6IGZhbHNlLFxyXG4gIH07XHJcbiAgc2lkZUVsZW1lbnRzID0gW1xyXG4gICAgJ1JPTEUnLFxyXG4gICAgJ1JDJyxcclxuICAgICdPV05FUicsXHJcbiAgICAnQVNTSUdORUUnLFxyXG4gICAgJ0FQUFJPVkVSJyxcclxuICAgICdERUZBVUxUX0FTU0lHTkVFJyxcclxuICAgICdSRVZJRVdFUicsXHJcbiAgICAnREVGQVVMVF9SRVZJRVdFUicsXHJcbiAgICAnQVNTRVNTTUVOVCcsXHJcbiAgICAnRlJBTUVXT1JLJyxcclxuICAgICdPVkVSU0VFUicsXHJcbiAgICAnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVInLFxyXG4gICAgJ0RFRkFVTFRfT1ZFUlNFRVInLFxyXG4gICAgJ09WRVJTRUVSJyxcclxuICBdO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3R5cGUnLCB0aGlzLnByb2dyYW1UeXBlKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1EZXRhaWxzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZldGNoT3JnYW5pemF0aW9uVXNlcnMoKTtcclxuICAgICAgdGhpcy5mZXRjaE9yZ2FuaXphdGlvbkdyb3VwKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZldGNoUm9sZXMoKTtcclxuICAgIHRoaXMuZmV0Y2hSQygpO1xyXG4gICAgaWYgKHRoaXMuYWRkVG9Qcm9ncmFtRGV0YWlscz8uX2lkKSB7XHJcbiAgICAgIHRoaXMubGlzdEFjdGlvbih0aGlzLmFkZFRvUHJvZ3JhbURldGFpbHMsICdGUkFNRVdPUksnKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlZmVhdHVyZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBnZXQgdmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtRm9ybS52YWxpZDtcclxuICB9XHJcblxyXG4gIGFkZGl0aW9uYWxPcHRpb246IGFueSA9IHsgLi4uQ09OU1RBTlRTLmFkZGl0aW9uYWxPcHRpb24gfTtcclxuICBhY3RpdmVMaXN0ID0gJyc7XHJcbiAgLyoqXHJcbiAgICogIyMjIyBEZXNjcmlwdGlvblxyXG4gICAqIFBvcHVsYXRlcyBvcHRpb25hbCBmaWVsZHMgc3RhdHVzIGZvciB0aGUgb3B0aW9uYWwgZmllbGRzXHJcbiAgICovXHJcbiAgcG9wdWxhdGVPcHRpb25hbEZpZWxkcygpIHtcclxuICAgIGNvbnN0IGFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuYWRkaXRpb25hbE9wdGlvbikpIHtcclxuICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbE9wdGlvbltrZXldID09PSB0cnVlKSB7XHJcbiAgICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKGtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChhY3RpdmF0ZWRPcHRpb25zKTtcclxuICB9XHJcbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uW2V2ZW50LmNvZGVdID0gZXZlbnQuY2hlY2tlZDtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja1Byb2dyYW1PcHRpb25GaWVsZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZnVuY3Rpb24gdG8gYXV0b21hdGUgZm9ybSB2YWx1ZSBjaGFuZ2UgaGFuZG5nXHJcbiAgZm9ybUNoYW5nZUxpc3RuZXIoKSB7XHJcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRyb2xzW2VsZV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUZvcm1GaWVsZENoYW5nZShlbGUsIHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZvcm1GaWVsZENoYW5nZShjb250cm9sOiBzdHJpbmcsIHBheWxvYWQ/OiBhbnkpIHtcclxuICAgIHN3aXRjaCAoY29udHJvbCkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtX3JvbGVzJzoge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hVc2Vyc0Fzc29jaWF0ZWRXaXRoUm9sZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVMaXN0KGV2dDogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZ0ID09PSAnRlJBTUVXT1JLJyAmJiAhdGhpcy5jYW5GcmFtZXdvcmtDaGFuZ2UpIHJldHVybjtcclxuICAgIHRoaXMuYWN0aXZlTGlzdCA9IGV2dDtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbGlzdEFjdGlvbihldnQ6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnUk9MRSc6IHtcclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHN5c3RlbVJvbGVzID0gZXZ0Py5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIGVsZT8ucm9sZU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdrZXkgYWRtaW4nIHx8XHJcbiAgICAgICAgICAgIGVsZT8ucm9sZU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdhZG1pbidcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHBhdGNoVmFsID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnN5c3RlbVJvbGVzLCAuLi5ldnRdLCAnX2lkJyk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWlzRXF1YWwodGhpcy5jb250cm9scy5wcm9ncmFtX3JvbGVzLnZhbHVlLnNvcnQoKSwgcGF0Y2hWYWwuc29ydCgpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcm9sZXMnLCBwYXRjaFZhbCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgICB0aGlzLmZldGNoR3JvdXBzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSQyc6IHtcclxuICAgICAgICBjb25zdCByYyA9IHRoaXMuc2V0TGlzdCh0aGlzLmxpc3RzLlJDLCBldnQsICdpdGVtX2lkJyk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JjJywgdGhpcy51bmlxdWVCeVByb3AocmMsICdpdGVtX2lkJykpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ09XTkVSJzoge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fb3duZXJzJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9vd25lcnNfZ3JvdXAnLFxyXG4gICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBUFBST1ZFUic6IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICdwcm9ncmFtX2FwcHJvdmVyJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTSUdORUUnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9hc3NpZ25lZScsXHJcbiAgICAgICAgICB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLFxyXG4gICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRBc3NpZ25lZShldnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfQVNTSUdORUUnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JFVklFV0VSJzoge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fcmV2aWV3ZXInLFxyXG4gICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICdwcm9ncmFtX3Jldmlld2VyX2dyb3VwJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0UmV2aWV3ZXIoZXZ0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX1JFVklFV0VSJzoge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcicsXHJcbiAgICAgICAgICB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cCcsXHJcbiAgICAgICAgICB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/Lmdyb3VwcywgJ2dyb3VwX2lkJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMucmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYS52YWx1ZSA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gJ0FOWU9ORSdcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnRyb2xzPy5yZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhPy52YWx1ZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVInOiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9vdmVyc2VlcicsXHJcbiAgICAgICAgICB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fb3ZlcnNlZXJfZ3JvdXAnLFxyXG4gICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py5ncm91cHMsICdncm91cF9pZCcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRGVzZWxlY3Rvcih0eXBlKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRPdmVyc2VlcihldnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8udXNlcnMsICdtZW1iZXJfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJzoge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXInLFxyXG4gICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwJyxcclxuICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGV2dD8uZ3JvdXBzLCAnZ3JvdXBfaWQnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZERlc2VsZWN0b3IodHlwZSk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FTU0VTU01FTlQnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzZXNzbWVudHMnLCBldnQpO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0ZSQU1FV09SSyc6IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgnZnJhbWV3b3JrJywgZXZ0KTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9uYW1lJywgZXZ0Py5uYW1lKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbicsIGV2dD8uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGF0YS5wcm9ncmFtRGVzY3JpcHRpb24gPSBldnQ/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZmllbGREZXNlbGVjdG9yKHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmUoZXZ0OiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ1JPTEUnOiB7XHJcbiAgICAgICAgbGV0IG1zZyA9ICcnO1xyXG4gICAgICAgIG1zZyA9ICdJZiB5b3UgY2hhbmdlIHRoZSByb2xlcywgYW55IHVuc2F2ZWQgY2hhbmdlcyB3b3VsZCBiZSBsb3N0Lic7XHJcbiAgICAgICAgY29uc3Qgcm9sZXMgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Ll9pZCAhPT0gZXZ0Py5faWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubGlzdEFjdGlvbihyb2xlcywgJ1JPTEUnKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yb2xlcycsIHJvbGVzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSQyc6IHtcclxuICAgICAgICBjb25zdCByY3MgPSB0aGlzLmNvbnRyb2xzPy5yYz8udmFsdWU/LmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5pdGVtX2lkICE9PSBldnQ/Lml0ZW1faWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdyYycsIHJjcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1dORVInOiB7XHJcbiAgICAgICAgY29uc3Qgb3duZXJzID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgb3duZXJzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdPV05FUl9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBvd25lcnNfZ3JvdXAgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/LmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzX2dyb3VwJywgb3duZXJzX2dyb3VwKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBUFBST1ZFUic6IHtcclxuICAgICAgICBjb25zdCBhcHByb3ZlciA9IHRoaXMuY29udHJvbHM/LnByb2dyYW1fYXBwcm92ZXI/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXBwcm92ZXInLCBhcHByb3Zlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTSUdORUUnOiB7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdEFzc2lnbmVlT25SZW1vdmUoZXZ0LCB0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBU1NJR05FRV9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZV9ncm91cCA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZV9ncm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0QXNzaWduZWVPblJlbW92ZShldnQsIHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfQVNTSUdORUUnOiB7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZScsIGFzc2lnbmVlKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9BU1NJR05FRV9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZV9ncm91cCA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwJywgYXNzaWduZWVfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1JFVklFV0VSJzoge1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/LmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcicsIHJldmlld2VyKTtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRSZXZpZXdlck9uUmVtb3ZlKGV2dCwgdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUkVWSUVXRVJfR1JPVVAnOiB7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJfZ3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5jb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/LmZpbHRlcihcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXJfZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFJldmlld2VyT25SZW1vdmUoZXZ0LCB0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX1JFVklFV0VSJzoge1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXInLCByZXZpZXdlcik7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfUkVWSUVXRVJfR1JPVVAnOiB7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJfZ3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cCcsIHJldmlld2VyX2dyb3VwKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLnJldmlld2VyX2NvbXBsZXRpb25fY3JpdGVyaWEudmFsdWUgPVxyXG4gICAgICAgICAgdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/ICdBTllPTkUnXHJcbiAgICAgICAgICAgIDogdGhpcy5jb250cm9scz8ucmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYT8udmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVInOiB7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXIgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE92ZXJzZWVyT25SZW1vdmUoZXZ0LCB0eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdPVkVSU0VFUl9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBvdmVyc2Vlcl9ncm91cCA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3ZlcnNlZXJfZ3JvdXAnLCBvdmVyc2Vlcl9ncm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3ZlcnNlZXJPblJlbW92ZShldnQsIHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfT1ZFUlNFRVInOiB7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXIgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnREVGQVVMVF9PVkVSU0VFUl9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBvdmVyc2Vlcl9ncm91cCA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJfZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJzoge1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyID1cclxuICAgICAgICAgIHRoaXMuY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlPy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJywgb3ZlcnNlZXIpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUl9HUk9VUCc6IHtcclxuICAgICAgICBjb25zdCBvdmVyc2Vlcl9ncm91cCA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsXHJcbiAgICAgICAgICBvdmVyc2Vlcl9ncm91cFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQVNTRVNTTUVOVCc6IHtcclxuICAgICAgICBsZXQgY3VycmVudCA9IGNsb25lRGVlcCh0aGlzLmNvbnRyb2xzLnByb2dyYW1fYXNzZXNzbWVudHM/LnZhbHVlKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQuZmluZEluZGV4KFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZ0LmNhdGVnb3J5X2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzID0gY3VycmVudFtpbmRleF0uYXNzZXNzbWVudElkcy5maWx0ZXIoXHJcbiAgICAgICAgICAoYXNzZXNzbWVudDogYW55KSA9PiBhc3Nlc3NtZW50LmlkICE9PSBldnQuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjdXJyZW50W2luZGV4XS5hc3Nlc3NtZW50SWRzLmxlbmd0aCA9PT0gMCkgY3VycmVudC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMubGlzdEFjdGlvbihjdXJyZW50LCAnQVNTRVNTTUVOVCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0ZSQU1FV09SSyc6IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgnZnJhbWV3b3JrJywgbnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsaXN0XHJcbiAgICAgID8ubWFwKChlbGUpID0+IHtcclxuICAgICAgICBpZiAoZWxlW2tleV0pIHtcclxuICAgICAgICAgIHJldHVybiBlbGVba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKGVsZSkgPT4gZWxlKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hMaXN0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEFzc2lnbmVlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUmV2aWV3ZXJJZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRPdmVyc2VlcklkcyA9IFtdO1xyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIHRoaXMuYXNzaWdub3JJZCA9IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlO1xyXG4gICAgbGV0IHNlbGVjdGVkUmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlO1xyXG4gICAgbGV0IHNlbGVjdGVkT3ZlcnNlZXJMaXN0ID0gdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZTtcclxuICAgIGxldCBzZWxlY3RlZE92ZXJzZWVyRmFpbHVyZUxpc3QgPVxyXG4gICAgICB0aGlzLmNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZTtcclxuICAgIGxldCBhc3NpZ25vciA9IHRoaXMuY3VycmVudFVzZXIoKTtcclxuICAgIHRoaXMuYXNzaWdub3JJZC5wdXNoKGFzc2lnbm9yPy5tZW1iZXJfaWQpO1xyXG4gICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaChhc3NpZ25vcj8ubWVtYmVyX2lkKTtcclxuICAgIHNlbGVjdGVkQXNzaWduZWU/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXNzaWduZWVJZHMucHVzaCh1c2VyPy5tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXI/Lm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIHNlbGVjdGVkUmV2aWV3ZXI/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUmV2aWV3ZXJJZHMucHVzaCh1c2VyPy5tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBzZWxlY3RlZE92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIHNlbGVjdGVkT3ZlcnNlZXJGYWlsdXJlTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSZXZpZXdlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRSZXZpZXdlcklkcyldO1xyXG4gICAgdGhpcy5zZWxlY3RlZEFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZEFzc2lnbmVlSWRzKV07XHJcbiAgICB0aGlzLnNlbGVjdGVkT3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkT3ZlcnNlZXJJZHMpXTtcclxuICAgIGxldCBkaXNhYmxlQXNzaWduZWVMaXN0ID0gdGhpcy5saXN0cz8uQUxMX1VTRVI/LmZpbHRlcihcclxuICAgICAgKHVzZXI6IGFueSkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcclxuICAgICk7XHJcbiAgICB0aGlzLmRpc2FibGVkQXNzaWduZWVJZHMgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlQXNzaWduZWVMaXN0LCAnbWVtYmVyX2lkJyk7XHJcbiAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9IHRoaXMubGlzdHM/LkFMTF9VU0VSPy5maWx0ZXIoXHJcbiAgICAgICh1c2VyOiBhbnkpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXHJcbiAgICApO1xyXG4gICAgdGhpcy5kaXNhYmxlUmV2aWV3ZXJJZHMgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlUmV2aWV3ZXJMaXN0LCAnbWVtYmVyX2lkJyk7XHJcbiAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IHRoaXMubGlzdHM/LkFMTF9VU0VSPy5maWx0ZXIoXHJcbiAgICAgICh1c2VyOiBhbnkpID0+XHJcbiAgICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcclxuICAgICk7XHJcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVPdmVyc2Vlckxpc3QsICdtZW1iZXJfaWQnKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJvbGUoZXZ0OiBhbnkpIHtcclxuICAgIHRoaXMub25SZW1vdmluZ1JvbGUuZW1pdChldnQpO1xyXG4gIH1cclxuXHJcbiAgLy9iZWxvdyA0IGZ1bmN0aW9ucyBjYW4gYmUgZWFzaWx0eSBjb21iaW5lZCBpbnRvIG9uZSBhcyB0aGV5IGZvbGxvdyBzYW1lIGtpbmQgb2YgcGF0dGVybiBvciBjYW4gYmUgb2ZmbG9hZGVkIHRvIGEgZXh0ZXJuYWwgc2VydmljZVxyXG4gIHNldERlZmF1bHRBc3NpZ25lZShldnQ6IGFueSkge1xyXG4gICAgaWYgKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVNfR1JPVVAgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcclxuICAgICAgICBldnQ/Lmdyb3VwcyxcclxuICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy5saXN0cy5BTExfVVNFUjtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA9IHRoaXMubGlzdHMuQUxMX0dST1VQO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNzaWduZWVNYXAgPSBldnQ/LnVzZXJzPy5tYXAoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCk7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRBc3NpZ25lZSA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZTtcclxuICAgIGN1cnJlbnREZWZhdWx0QXNzaWduZWUgPSBjdXJyZW50RGVmYXVsdEFzc2lnbmVlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgIGFzc2lnbmVlTWFwLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnLCBjdXJyZW50RGVmYXVsdEFzc2lnbmVlKTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRBc3NpZ25lZU9uUmVtb3ZlKGV2dDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdBU1NJR05FRSc6IHtcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gdGhpcy5saXN0cy5ERUZBVUxUX0FTU0lHTkVFUy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdEFzc2lnbmVlID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0gZGVmYXVsdEFzc2lnbmVlLmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWFzc2lnbmVlPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSB0aGlzLmxpc3RzLkFMTF9VU0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlJywgYXNzaWduZWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBU1NJR05FRV9HUk9VUCc6IHtcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID1cclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVNfR1JPVVAuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdEFzc2lnbmVlR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlR3JvdXAgPSBkZWZhdWx0QXNzaWduZWVHcm91cC5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzaWduZWVHcm91cD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gdGhpcy5saXN0cy5BTExfR1JPVVA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZUdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXREZWZhdWx0UmV2aWV3ZXIoZXZ0OiBhbnkpIHtcclxuICAgIGlmIChldnQ/LnVzZXJzPy5sZW5ndGggfHwgZXZ0Py5ncm91cHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gdGhpcy51bmlxdWVCeVByb3AoZXZ0Py51c2VycywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTX0dST1VQID0gdGhpcy51bmlxdWVCeVByb3AoXHJcbiAgICAgICAgZXZ0Py5ncm91cHMsXHJcbiAgICAgICAgJ2dyb3VwX2lkJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUyA9IHRoaXMubGlzdHMuQUxMX1VTRVI7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAgPSB0aGlzLmxpc3RzLkFMTF9HUk9VUDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldmlld2VyTWFwID0gZXZ0Py51c2Vycz8ubWFwKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xyXG4gICAgbGV0IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU7XHJcbiAgICBjdXJyZW50RGVmYXVsdFJldmlld2VyID0gY3VycmVudERlZmF1bHRSZXZpZXdlci5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICByZXZpZXdlck1hcC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZClcclxuICAgICk7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgY3VycmVudERlZmF1bHRSZXZpZXdlcik7XHJcbiAgfVxyXG4gIHNldERlZmF1bHRPdmVyc2VlcihldnQ6IGFueSkge1xyXG4gICAgaWYgKGV2dD8udXNlcnM/Lmxlbmd0aCB8fCBldnQ/Lmdyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChldnQ/LnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlNfR1JPVVAgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcclxuICAgICAgICBldnQ/Lmdyb3VwcyxcclxuICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTID0gdGhpcy5saXN0cy5BTExfVVNFUjtcclxuICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9IHRoaXMubGlzdHMuQUxMX0dST1VQO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb3ZlcnNlZXJNYXAgPSBldnQ/LnVzZXJzPy5tYXAoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCk7XHJcbiAgICBsZXQgY3VycmVudERlZmF1bHRSZXZpZXdlciA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZTtcclxuICAgIGxldCBjdXJyZW50RGVmYXVsdEZhaWxSZXZpZXdlciA9XHJcbiAgICAgIHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcj8udmFsdWU7XHJcbiAgICBjdXJyZW50RGVmYXVsdFJldmlld2VyID0gY3VycmVudERlZmF1bHRSZXZpZXdlci5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICBvdmVyc2Vlck1hcC5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZClcclxuICAgICk7XHJcbiAgICBjdXJyZW50RGVmYXVsdEZhaWxSZXZpZXdlciA9IGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgb3ZlcnNlZXJNYXAuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIGN1cnJlbnREZWZhdWx0UmV2aWV3ZXIpO1xyXG4gICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJyxcclxuICAgICAgY3VycmVudERlZmF1bHRGYWlsUmV2aWV3ZXJcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldERlZmF1bHRSZXZpZXdlck9uUmVtb3ZlKGV2dDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdSRVZJRVdFUic6IHtcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUy5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJldmlld2VyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyID0gZGVmYXVsdFJldmlld2VyLmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IGV2dD8ubWVtYmVyX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgcmV2aWV3ZXIpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdSRVZJRVdFUl9HUk9VUCc6IHtcclxuICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTX0dST1VQID1cclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJldmlld2VyR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyR3JvdXAgPSBkZWZhdWx0UmV2aWV3ZXJHcm91cC5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IGV2dD8uZ3JvdXBfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAnLCByZXZpZXdlckdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXREZWZhdWx0T3ZlcnNlZXJPblJlbW92ZShldnQ6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnT1ZFUlNFRVInOiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlMuZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2VlciA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBvdmVyc2VlciA9IGRlZmF1bHRPdmVyc2Vlci5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBldnQ/Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2VlcicsIG92ZXJzZWVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdEZhaWxPdmVyc2VlciA9XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzLnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyRmFpbCA9IGRlZmF1bHRGYWlsT3ZlcnNlZXIuZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gZXZ0Py5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyJywgb3ZlcnNlZXJGYWlsKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnT1ZFUlNFRVJfR1JPVVAnOiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfT1ZFUlNFRVJTX0dST1VQLmZpbHRlcihcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2Vlckdyb3VwID1cclxuICAgICAgICAgIHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBvdmVyc2Vlckdyb3VwID0gZGVmYXVsdE92ZXJzZWVyR3JvdXAuZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBldnQ/Lmdyb3VwX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwJywgb3ZlcnNlZXJHcm91cCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwID1cclxuICAgICAgICAgIHRoaXMuY29udHJvbHMucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWU7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJGYWlsZWRHcm91cCA9IGRlZmF1bHRPdmVyc2VlckZhaWxlZEdyb3VwLmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gZXZ0Py5ncm91cF9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCcsXHJcbiAgICAgICAgICBvdmVyc2VlckZhaWxlZEdyb3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmllbGREZXNlbGVjdG9yKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVMaXN0ID0gJyc7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLm1hcmthc1RvdWNoZWRTZWxlY3Rvcih0eXBlKTtcclxuICB9XHJcbiAgbWFya2FzVG91Y2hlZFNlbGVjdG9yKGZpZWxkTmFtZTogYW55KSB7XHJcbiAgICBjb25zdCB0eXBlRmllbGQ6IGFueSA9IHtcclxuICAgICAgUk9MRTogJ3Byb2dyYW1fcm9sZXMnLFxyXG4gICAgICBBUFBST1ZFUjogJ3Byb2dyYW1fYXBwcm92ZXInLFxyXG4gICAgICBPV05FUjogJ3Byb2dyYW1fb3duZXJzJyxcclxuICAgICAgT1dORVJfR1JPVVA6ICdwcm9ncmFtX293bmVyc19ncm91cCcsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jb250cm9sc1t0eXBlRmllbGRbZmllbGROYW1lXV0/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGZldGNoUm9sZXMoKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFJvbGVzKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5ST0xFUyA9IHJlcztcclxuICAgICAgICBjb25zdCBkZWZhdWx0U3lzdGVtVmFsID0gdGhpcy5saXN0cz8uUk9MRVM/LmRhdGFcclxuICAgICAgICAgID8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgZWxlPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2tleSBhZG1pbicgfHxcclxuICAgICAgICAgICAgICBlbGU/LnJvbGVOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYWRtaW4nXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICA/Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uX2lkKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsID0gdGhpcy5saXN0cz8uUk9MRVM/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgZWxlPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2tleSBhZG1pbicgfHxcclxuICAgICAgICAgICAgZWxlPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkbWluJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5saXN0cy5TWVNURU1fUk9MRV9JRFMgPSBkZWZhdWx0U3lzdGVtVmFsO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fcm9sZXMnLCBkZWZhdWx0VmFsKTtcclxuICAgICAgICAgIHRoaXMuZmV0Y2hVc2Vyc0Fzc29jaWF0ZWRXaXRoUm9sZXMoKTtcclxuICAgICAgICAgIHRoaXMuZmV0Y2hHcm91cHNBc3NvY2lhdGVkV2l0aFJvbGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7fSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL2ZldGNoIHRoZSBsaXN0IG9mIHJlc3BvbnNpYmlsaXRpZXMgY2VudGVyXHJcbiAgZmV0Y2hSQygpIHtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5SQyA9IHJlcztcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge30sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZldGNoVXNlcnNBc3NvY2lhdGVkV2l0aFJvbGVzKGNhbGxlZEZyb20/OiBhbnkpIHtcclxuICAgIGNvbnN0IGxvZ2dlZEluVXNlciA9IHRoaXMuY3VycmVudFVzZXIoKTtcclxuICAgIGNvbnN0IHJvbGVJZHMgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5faWRcclxuICAgICk7XHJcbiAgICAvLyBpZiAoZmV0Y2hBbGwpIHtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlVXNlcnMocm9sZUlkcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNVc2VyRmluZCA9IHJlcz8uZGF0YT8uc29tZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4gcmVzPy5tZW1iZXJfaWQgPT09IGxvZ2dlZEluVXNlcj8ubWVtYmVyX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWlzVXNlckZpbmQpIHtcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucHVzaChsb2dnZWRJblVzZXIpO1xyXG4gICAgICAgICAgcmVzLnRvdGFsX2l0ZW1zID0gcmVzPy50b3RhbF9pdGVtcyArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlzdHMuT1dORVJTID0gcmVzO1xyXG4gICAgICAgIHRoaXMubGlzdHMuQVBQUk9WRVJTID0gcmVzO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFyZXM/LmRhdGFcclxuICAgICAgICAgICAgPy5tYXAoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZClcclxuICAgICAgICAgICAgPy5pbmNsdWRlcyh0aGlzLmNvbnRyb2xzLnByb2dyYW1fYXBwcm92ZXI/LnZhbHVlWzBdPy5tZW1iZXJfaWQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hcHByb3ZlcicsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbHM/LmFsbF91c2VyX2luX3JvbGU/LnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vd25lcnMnLCByZXM/LmRhdGEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRPd25lcnMocmVzPy5kYXRhLCBjYWxsZWRGcm9tKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHt9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmZXRjaEdyb3Vwc0Fzc29jaWF0ZWRXaXRoUm9sZXMoKSB7XHJcbiAgICBjb25zdCByb2xlSWRzID0gdGhpcy5jb250cm9scy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubWFwKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8uX2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5mZXRjaEFsbFJvbGVHcm91cHMocm9sZUlkcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5PV05FUlNfR1JPVVBTID0gcmVzO1xyXG4gICAgICAgIGNvbnN0IHJvbGVJZHM6IEFycmF5PHN0cmluZz4gPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlLm1hcChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBEZXRhaWxzID0gdGhpcy5jb250cm9scy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWUuZmlsdGVyKFxyXG4gICAgICAgICAgKHJvbGVJZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyb2xlSWQucm9sZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGlzU2FtZVJvbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByb2xlSWQucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9sZUlkcy5pbmNsdWRlcyhyb2xlLnJvbGVJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgaXNTYW1lUm9sZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChpc1NhbWVSb2xlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcm9sZUlkO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzX2dyb3VwJywgZ3JvdXBEZXRhaWxzKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdE93bmVycyh1c2VyTGlzdDogYW55LCBjYWxsZWRGcm9tPzogYW55KSB7XHJcbiAgICBjb25zdCBsb2dnZWRJbnVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0T3duZXIgPSB1c2VyTGlzdC5maWx0ZXIoXHJcbiAgICAgIChlbGU6IGFueSkgPT5cclxuICAgICAgICBbJ0FETUlOJywgJ0tFWV9BRE1JTiddLmluY2x1ZGVzKGVsZT8udXNlcl9yb2xlKSAmJlxyXG4gICAgICAgIGVsZT8ubWVtYmVyX2lkICE9IGxvZ2dlZEludXNlcj8ubWVtYmVyX2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyA9IHRoaXMudW5pcXVlQnlQcm9wKFxyXG4gICAgICBbLi4uW2xvZ2dlZEludXNlcl0sIC4uLmRlZmF1bHRPd25lcl0sXHJcbiAgICAgICdtZW1iZXJfaWQnXHJcbiAgICApO1xyXG4gICAgLy8gdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyk7XHJcbiAgICBjb25zdCBwcmVTZWxlY3RlZFVzZXJzID0gdGhpcy5nZXRQcmVTZWxlY3RlZE93bmVycyhcclxuICAgICAgdGhpcy5jb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlLFxyXG4gICAgICB1c2VyTGlzdFxyXG4gICAgKTtcclxuICAgIGlmIChjYWxsZWRGcm9tICE9PSAnZ2V0UHJvZ3JhbURldGFpbHMnKSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICdwcm9ncmFtX293bmVycycsXHJcbiAgICAgICAgcHJlU2VsZWN0ZWRVc2Vycz8ubGVuZ3RoXHJcbiAgICAgICAgICA/IHByZVNlbGVjdGVkVXNlcnNcclxuICAgICAgICAgIDogdGhpcy5saXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSU1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJlU2VsZWN0ZWRPd25lcnMocHJldmlvdXNTZWxlY3RlZFVzZXJzOiBhbnksIGN1cnJlbnRVc2VyczogYW55KSB7XHJcbiAgICBsZXQgZmluYWxVc2VycyA9IFtdO1xyXG4gICAgZmluYWxVc2VycyA9IHByZXZpb3VzU2VsZWN0ZWRVc2Vycz8uZmlsdGVyKChwcmV2aW91czogYW55KSA9PlxyXG4gICAgICBjdXJyZW50VXNlcnM/LnNvbWUoXHJcbiAgICAgICAgKGN1cnJlbnQ6IGFueSkgPT4gcHJldmlvdXM/Lm1lbWJlcl9pZCA9PT0gY3VycmVudD8ubWVtYmVyX2lkXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmluYWxVc2VycztcclxuICB9XHJcblxyXG4gIGZldGNoT3JnYW5pemF0aW9uVXNlcnMoZGF0YT86IGFueSkge1xyXG4gICAgdGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gdHJ1ZTtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxPcmdVc2VyKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5BTExfVVNFUiA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLkFTU0lHTkVFUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLlJFVklFV0VSUyA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3RzLk9WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSAnRURJVCcpIHtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IHJlcztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbHMucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2xzLnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX1JFVklFV0VSUyA9IHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdGhpcy5jb250cm9scy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9PVkVSU0VFUlMgPSByZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3RMb2FkaW5nU3RhdGUuVVNFUlMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0TG9hZGluZ1N0YXRlLlVTRVJTID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZldGNoT3JnYW5pemF0aW9uR3JvdXAoZGF0YT86IGFueSkge1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5mZXRjaENvbXBsaWFuY2VHcm91cHMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RzLkFMTF9HUk9VUCA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5saXN0cy5BU1NJR05FRVNfR1JPVVAgPSByZXM7XHJcbiAgICAgICAgdGhpcy5saXN0cy5SRVZJRVdFUlNfR1JPVVAgPSByZXM7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdHMuT1ZFUlNFRVJTX0dST1VQID0gcmVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSAnRURJVCcpIHtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9BU1NJR05FRVNfR1JPVVAgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTX0dST1VQID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9IHJlcztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHt9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkVHJhY2tlciA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBbXSxcclxuICAgIG9iamVjdGl2ZTogW10sXHJcbiAgfTtcclxuXHJcbiAgc2VsZWN0RmlsZSh0eXBlOiBhbnksIGZpbGVzOiBhbnkpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGZpbGVzLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICBjb25zdCBuYW1lID0gZmlsZXNbaV0uZmlsZS5uYW1lID8/ICcnO1xyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzKHR5cGUsIGZpbGVzW2ldLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXModHlwZTogJ0RFU0NSSVBUSU9OJyB8ICdPQkpFQ1RJVkUnLCBmaWxlOiBhbnkpIHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uU3RyaW5nID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpLnRvU3RyaW5nKCk7XHJcbiAgICBjb25zdCBkdW1teUZpbGUgPSB7XHJcbiAgICAgIGZpbGVfdXJsX3BhdGg6IGAke2ZpbGU/Lm5hbWV9YCxcclxuICAgICAgbmFtZTogYCR7ZmlsZT8ubmFtZX1gLFxyXG4gICAgICB1cGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIG9yZ19maWxlOiBgJHtmaWxlPy5uYW1lfWAsXHJcbiAgICB9O1xyXG4gICAgaWYgKHR5cGUgPT09ICdERVNDUklQVElPTicpIHtcclxuICAgICAgbGV0IGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzJywgW1xyXG4gICAgICAgIC4uLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgIC4uLltkdW1teUZpbGVdLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy5wcm9ncmFtU2VydmljZS51cGxvYWRGaWxlcyhmb3JtRGF0YSwgZGVzdGluYXRpb25TdHJpbmcpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICAgICAgbGV0IGRlc2NyaXB0aW9uSW5kZXggPSBkZXNjcmlwdGlvbi5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5vcmdfZmlsZSA9PT0gcmVzPy5vcmdfZmlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uW2Rlc2NyaXB0aW9uSW5kZXhdID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAgICdwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzJyxcclxuICAgICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZGVzY3JpcHRpb24sICdvcmdfZmlsZScpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uZmlsdGVyKFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgIT09IGZpbGU/Lm5hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICAgJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLFxyXG4gICAgICAgICAgICB0aGlzLnVuaXF1ZUJ5UHJvcChkZXNjcmlwdGlvbiwgJ29yZ19maWxlJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdPQkpFQ1RJVkUnKSB7XHJcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlID8/IFtdO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsIFtcclxuICAgICAgICAuLi5kZXNjcmlwdGlvbixcclxuICAgICAgICAuLi5bZHVtbXlGaWxlXSxcclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UudXBsb2FkRmlsZXMoZm9ybURhdGEsIGRlc3RpbmF0aW9uU3RyaW5nKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZSA/PyBbXTtcclxuICAgICAgICAgIGxldCBkZXNjcmlwdGlvbkluZGV4ID0gZGVzY3JpcHRpb24uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ub3JnX2ZpbGUgPT09IHJlcz8ub3JnX2ZpbGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbltkZXNjcmlwdGlvbkluZGV4XSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgICAncHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cycsXHJcbiAgICAgICAgICAgIHRoaXMudW5pcXVlQnlQcm9wKGRlc2NyaXB0aW9uLCAnb3JnX2ZpbGUnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmZpbHRlcihcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlICE9PSBmaWxlPy5uYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAgICdwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzJyxcclxuICAgICAgICAgICAgdGhpcy51bmlxdWVCeVByb3AoZGVzY3JpcHRpb24sICdvcmdfZmlsZScpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlQXR0YWNobWVudCh0eXBlOiAnREVTQ1JJUFRJT04nIHwgJ09CSkVDVElWRScsIGZpbGU6IGFueSkge1xyXG4gICAgaWYgKHR5cGUgPT09ICdERVNDUklQVElPTicpIHtcclxuICAgICAgbGV0IGRlc2NyaXB0aW9uID0gdGhpcy5jb250cm9scz8uZGVzY3JpcHRpb25fYXR0YWNobWVudD8udmFsdWUgPz8gW107XHJcbiAgICAgIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlICE9PSBmaWxlPy5vcmdfZmlsZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBkZXNjcmlwdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ09CSkVDVElWRScpIHtcclxuICAgICAgbGV0IG9iamVjdGl2ZSA9IHRoaXMuY29udHJvbHM/Lm9iamVjdGl2ZV9hdHRhY2htZW50cz8udmFsdWUgPz8gW107XHJcbiAgICAgIGlmIChvYmplY3RpdmUpIHtcclxuICAgICAgICBvYmplY3RpdmUgPSBvYmplY3RpdmUuZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm9yZ19maWxlICE9PSBmaWxlPy5vcmdfZmlsZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVzY3JpcHRpb25fYXR0YWNobWVudHMnLCBvYmplY3RpdmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxSb2xlT3duZXIoZXZ0OiBhbnkpIHtcclxuICAgIC8vbmVlZCB0byBmZXRjaCBhbGwgdGhlIHVzZXJzIGZvciBhbGwgdGhlIHNlbGVjdGVkIHJvbGVzXHJcbiAgICBjb25zdCBsb2dnZWRJblVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyKCk7XHJcbiAgICBsZXQgcm9sZUlkID0gW107XHJcbiAgICBsZXQgdXNlcjogYW55O1xyXG4gICAgaWYgKGV2dD8udGFyZ2V0Py5jaGVja2VkKSB7XHJcbiAgICAgIHJvbGVJZCA9IHRoaXMuY29udHJvbHMucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uX2lkKTtcclxuICAgICAgaWYgKHRoaXMuZmVhdHVyZWZsYWdHcm91cHMpIHtcclxuICAgICAgICB1c2VyID0gdGhpcy5jb250cm9scy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubWFwKChlbGU6IGFueSkgPT4gZWxlPy5faWQpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMucHJvZ3JhbV9vd25lcnNfZ3JvdXAudmFsdWUgPSB1c2VyO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb2xlSWQgPSB0aGlzLmNvbnRyb2xzLnByb2dyYW1fcm9sZXM/LnZhbHVlPy5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKFsna2V5IGFkbWluJywgJ2FkbWluJ10uaW5jbHVkZXMoZWxlLnJvbGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlPy5faWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZmV0Y2hBbGxSb2xlVXNlcnMocm9sZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51bmlxdWVCeVByb3AoXHJcbiAgICAgICAgICBbLi4uW2xvZ2dlZEluVXNlcl0sIC4uLnJlcz8uZGF0YV0sXHJcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgdXNlcik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHt9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmZldGNoQWxsUm9sZUdyb3Vwcyh1c2VyKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51bmlxdWVCeVByb3AoWy4uLnJlcz8uZGF0YV0sICdncm91cF9pZCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIHVzZXIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXlcclxuICAgKiBAcGFyYW0ga2V5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICB1bmlxdWVCeVByb3AoYXJyYXk6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKFxyXG4gICAgICBhcnJheVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxyXG4gICAgICAgICAgICBpdGVtICYmIGl0ZW1ba2V5XSAmJiBhY2Muc2V0KGl0ZW1ba2V5XSwgaXRlbSksIGFjY1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBNYXAoKVxyXG4gICAgICAgIClcclxuICAgICAgICAudmFsdWVzKClcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmZpbmRJbmRleChcclxuICAgICAgICAobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2dyYW0oKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHRoaXMucHJvZ3JhbVNlcnZpY2UuYnVpbGRQYXlsb2FkKHRoaXMucHJvZ3JhbUZvcm0sIHRoaXMpO1xyXG4gICAgaWYgKHBheWxvYWQgJiYgdGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLnNhdmVQcm9ncmFtKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVkUHJvZ3JhbUlkID0gcmVzLl9pZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZXJyPy5lcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoJ0NhdGVnb3J5IGFscmVhZHkgZXhpc3QnKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTmFtZUV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAocGF5bG9hZCAmJiB0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLnVwZGF0ZVByb2dyYW0ocGF5bG9hZCwgdGhpcy5wcm9ncmFtSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVkUHJvZ3JhbUlkID0gcmVzLl9pZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZXJyPy5lcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoJ0NhdGVnb3J5IGFscmVhZHkgZXhpc3QnKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTmFtZUV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3UHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy52aWV3UHJvZ3JhbXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZpZXdQcm9ncmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCArPSAnL3Byb2dyYW0td29ya3Jvb20/aWQ9JyArIHRoaXMuY3JlYXRlZFByb2dyYW1JZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCArPSAnL3Byb2dyYW0vcHJvZ3JhbS13b3Jrcm9vbT9pZD0nICsgdGhpcy5jcmVhdGVkUHJvZ3JhbUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuICByZXNldEZvcm0oKSB7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IERFRkFVTFRfVkFMVUVTID0ge1xyXG4gICAgICBwcm9ncmFtX3R5cGU6IDEsXHJcbiAgICAgIHByb2dyYW1fbmFtZTogJycsXHJcbiAgICAgIHByb2dyYW1fZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICBwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzOiBbXSxcclxuICAgICAgcHJvZ3JhbV9vYmplY3RpdmU6ICcnLFxyXG4gICAgICBwcm9ncmFtX29iamVjdGl2ZV9hdHRhY2htZW50czogW10sXHJcbiAgICAgIHByb2dyYW1fcm9sZXM6IFtdLFxyXG4gICAgICBhbGxfdXNlcl9pbl9yb2xlOiBmYWxzZSxcclxuICAgICAgcHJvZ3JhbV9vd25lcnM6IFtdLFxyXG4gICAgICBwcm9ncmFtX293bmVyc19ncm91cDogW10sXHJcbiAgICAgIHByb2dyYW1fYXBwcm92ZXI6IFtdLFxyXG4gICAgICBwZXJmb3JtYW5jZV9jYWxjdWxhdGlvbjogJ1BBU1RfRVZFTlQnLFxyXG4gICAgICByZWN1cnJpbmdfZnJlcXVlbmN5OiBmYWxzZSxcclxuICAgICAgbG9ja19zY29wZV9jaGFuZ2U6IGZhbHNlLFxyXG4gICAgICBmcmFtZXdvcms6IFtdLFxyXG4gICAgICByYzogW10sXHJcbiAgICAgIHByb2dyYW1fYXNzaWduZWU6IFtdLFxyXG4gICAgICBwcm9ncmFtX2Fzc2lnbmVlX2dyb3VwOiBbXSxcclxuICAgICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlOiBbXSxcclxuICAgICAgcHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwOiBbXSxcclxuICAgICAgYXNzaWduZWVfY29tcGxldGlvbl9jcml0ZXJpYTogJ0FMTCcsXHJcbiAgICAgIHByb2dyYW1fcmV2aWV3ZXI6IFtdLFxyXG4gICAgICBwcm9ncmFtX3Jldmlld2VyX2dyb3VwOiBbXSxcclxuICAgICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyOiBbXSxcclxuICAgICAgcHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwOiBbXSxcclxuICAgICAgcmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYTogJ1NFUVVFTlRJQUwnLFxyXG4gICAgICBwcm9ncmFtX292ZXJzZWVyOiBbXSxcclxuICAgICAgcHJvZ3JhbV9vdmVyc2Vlcl9ncm91cDogW10sXHJcbiAgICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2VlcjogW10sXHJcbiAgICAgIHByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cDogW10sXHJcbiAgICAgIHByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI6IFtdLFxyXG4gICAgICBwcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwOiBbXSxcclxuICAgICAgcHJvZ3JhbV9hc3Nlc3NtZW50czogW10sXHJcbiAgICAgIGV2aWRlbmNlX3JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlOiBmYWxzZSxcclxuICAgICAgY3VzdG9tX2ZpZWxkczogW10sXHJcbiAgICAgIHByb2dyYW1fc3RhdGU6IDAsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXNldEFkZGl0aW9uYWxPcHRpb24oKTtcclxuICAgIHRoaXMucHJvZ3JhbUZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMucHJvZ3JhbUZvcm0ucGF0Y2hWYWx1ZShERUZBVUxUX1ZBTFVFUyk7XHJcbiAgICB0aGlzLmVkaXRvckRhdGEgPSB7XHJcbiAgICAgIHByb2dyYW1PYmplY3RpdmU6ICcnLFxyXG4gICAgICBwcm9ncmFtRGVzY3JpcHRpb246ICcnLFxyXG4gICAgfTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTmFtZUV4aXN0cyA9IGZhbHNlO1xyXG4gICAgdGhpcy5mZXRjaFJvbGVzKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmZvcm0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgYmxvY2s6ICdzdGFydCcsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6ICcnLCBjb25maXJtOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBwcm9ncmFtIGRldGFpbHMgd2hlbiB1c2VyIGlzIHRyeWluZyB0byBlZGl0IHByb2dyYW1cclxuICAgKi9cclxuICBnZXRQcm9ncmFtRGV0YWlscygpIHtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2VcclxuICAgICAgLmdldFByb2dyYW0odGhpcy5wcm9ncmFtSWQpXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fbmFtZScsIHJlcz8ubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fdHlwZScsIHJlcz8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX29iamVjdGl2ZScsIHJlcz8ucHJvZ3JhbV9vYmplY3RpdmU/LnRleHQpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdhbGxfdXNlcl9pbl9yb2xlJywgcmVzPy5hbGxfdXNlcl9pbl9yb2xlKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICdwcm9ncmFtX2Rlc2NyaXB0aW9uX2F0dGFjaG1lbnRzJyxcclxuICAgICAgICAgIHJlcz8uZGVzY3JpcHRpb24/LmF0dGFjaG1lbnRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICdwcm9ncmFtX29iamVjdGl2ZV9hdHRhY2htZW50cycsXHJcbiAgICAgICAgICByZXM/LnByb2dyYW1fb2JqZWN0aXZlPy5hdHRhY2htZW50c1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncGVyZm9ybWFuY2VfY2FsY3VsYXRpb24nLFxyXG4gICAgICAgICAgcmVzPy5jYWxjdWxhdGVfcGFzdF91cGNvbWluZ19ldmVudFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3JlY3VycmluZ19mcmVxdWVuY3knLCByZXM/LnByb2dyYW1fZnJlcXVlbmN5KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXM/LnByb2dyYW1fZnJlcXVlbmN5ICYmXHJcbiAgICAgICAgICB0aGlzLm1vZGUgPT09ICdFRElUJyAmJlxyXG4gICAgICAgICAgKHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUFJPR1JBTV9GUkVRVUVOQ1kgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdsb2NrX3Njb3BlX2NoYW5nZScsIHJlcz8ubG9ja19zY29wZSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzPy5sb2NrX3Njb3BlICYmXHJcbiAgICAgICAgICAodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24gfHxcclxuICAgICAgICAgICAgIXRoaXMucHJvZ3JhbVNpbXBsaWZ5RmxhZylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5TQ09QRV9DSEFOR0VTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9zdGF0ZScsIHJlcz8uc3RhdGUpO1xyXG4gICAgICAgIGNvbnN0IHJjID0gcmVzLnJjX2RldGFpbHMubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4uZWxlLCBpdGVtX25hbWU6IGVsZT8ucmNfbmFtZSwgaXRlbV9pZDogZWxlPy5yY19pZCB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdyYycsIHJjKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXM/LnJjX2RldGFpbHMgJiZcclxuICAgICAgICAgIHJlcz8ucmNfZGV0YWlscz8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24gfHxcclxuICAgICAgICAgICAgIXRoaXMucHJvZ3JhbVNpbXBsaWZ5RmxhZylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5SQyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2V2aWRlbmNlX3JlcXVpcmVkJywgcmVzPy5ldmlkZW5jZV91cGxvYWRfZmxhZyk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2FsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZScsIHJlcz8uaXNfa2V5X2V2aWRlbmNlKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAocmVzPy5ldmlkZW5jZV91cGxvYWRfZmxhZyB8fCByZXM/LmlzX2tleV9ldmlkZW5jZSkgJiZcclxuICAgICAgICAgICh0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiB8fFxyXG4gICAgICAgICAgICAhdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKFxyXG4gICAgICAgICAgJ2Fzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWEnLFxyXG4gICAgICAgICAgcmVzLmRlZmF1bHRfYXNzaWduZWVfdHlwZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoXHJcbiAgICAgICAgICAncmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYScsXHJcbiAgICAgICAgICByZXMuZGVmYXVsdF9yZXZpZXdlcnNfdHlwZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdG9yRGF0YS5wcm9ncmFtRGVzY3JpcHRpb24gPSByZXMuZGVzY3JpcHRpb24/LnRleHQ7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JEYXRhLnByb2dyYW1PYmplY3RpdmUgPSByZXMucHJvZ3JhbV9vYmplY3RpdmU/LnRleHQ7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2ZyYW1ld29yaycsIHtcclxuICAgICAgICAgIC4uLnJlcy5mcmFtZXdvcmtfZGV0YWlscyxcclxuICAgICAgICAgIC4uLnsgX2lkOiByZXM/LmZyYW1ld29ya19kZXRhaWxzPy5mcmFtZXdvcmtfaWQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCByb2xlID0gcmVzPy5yb2xlcz8ubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgX2lkOiBlbGU/LnJvbGVJZCxcclxuICAgICAgICAgICAgcm9sZU5hbWU6IGVsZT8ucm9sZU5hbWUsXHJcbiAgICAgICAgICAgIGxpY2Vuc2VUeXBlOiBlbGU/LmxpY2Vuc2VUeXBlLFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uR3JvdXBOYW1lOiBlbGU/LnBlcm1pc3Npb25Hcm91cE5hbWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX3JvbGVzJywgcm9sZSk7XHJcbiAgICAgICAgaWYgKHJlcz8ucm9sZXMgJiYgcmVzPy5yb2xlcz8ubGVuZ3RoICYmIHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUk9MRVMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzLmFzc2Vzc21lbnREYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzLmFzc2Vzc21lbnREYXRhID0gcmVzLmFzc2Vzc21lbnREYXRhLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAuLi5lbGUsXHJcbiAgICAgICAgICAgICAgYXNzZXNzbWVudElkczogZWxlPy5hc3Nlc3NtZW50cy5tYXAoKGFzc2VzczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hc3Nlc3MsIGlkOiBhc3Nlc3M/Ll9pZCB9O1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9hc3Nlc3NtZW50cycsIHJlcy5hc3Nlc3NtZW50RGF0YSk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTRVNTTUVOVCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5jdXN0b21fZmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ2N1c3RvbV9maWVsZHMnLCByZXMuY3VzdG9tX2ZpZWxkcyk7XHJcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQ1VTVE9NX0ZJRUxEUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0FwcHJvdmVyRGlzYWJsZWQgPSByZXM/LmlzQXBwcm92ZXJEaXNhYmxlZCA/PyBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5pc0FwcHJvdmVyRGlzYWJsZWQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KFsnQVBQUk9WRVInXSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU1lbWJlcnMocmVzKTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlR3JvdXBzKHJlcyk7XHJcbiAgICAgICAgdGhpcy5mZXRjaFVzZXJzQXNzb2NpYXRlZFdpdGhSb2xlcygnZ2V0UHJvZ3JhbURldGFpbHMnKTtcclxuICAgICAgICB0aGlzLmZldGNoR3JvdXBzQXNzb2NpYXRlZFdpdGhSb2xlcygpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hPcmdhbml6YXRpb25Hcm91cCgpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hPcmdhbml6YXRpb25Vc2VycygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlTWVtYmVycyhyZXM6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgaWRzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFtcclxuICAgICAgICAuLi4ocmVzPy5vd25lcnMgPz8gW10pLFxyXG4gICAgICAgIC4uLihyZXM/LmFwcHJvdmVycyA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8uYXNzaWduZWVfaWRzID8/IFtdKSxcclxuICAgICAgICAuLi4ocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8ucmV2aWV3ZXJzID8/IFtdKSxcclxuICAgICAgICAuLi4ocmVzPy5kZWZhdWx0X3Jldmlld2VycyA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8ub3ZlcnNlZXJzPy5jY19lbWFpbCA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8ub3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsID8/IFtdKS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUpLFxyXG4gICAgICAgIC4uLihyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbCA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwgPz8gW10pLmZpbHRlcihcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlXHJcbiAgICAgICAgKSxcclxuICAgICAgXSksXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRNZW1lYmVyQnlJZHMoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlcy5vd25lcnMgJiYgcmVzPy5vd25lcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3Qgb3duZXJzID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5vd25lcnMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fb3duZXJzJywgb3duZXJzKTtcclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uT1dORVJTID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlcy5hcHByb3ZlcnMgJiZcclxuICAgICAgICAgIHJlcz8uYXBwcm92ZXJzPy5sZW5ndGggJiZcclxuICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHJlcz8uYXBwcm92ZXJzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2FwcHJvdmVyJywgYXBwcm92ZXJzKTtcclxuICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5BUFBST1ZFUiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcz8uYXNzaWduZWVfaWRzICYmIHJlcz8uYXNzaWduZWVfaWRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5hc3NpZ25lZV9pZHMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWUnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTID0gYXNzaWduZWU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTSUdORUVTID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXM/LmRlZmF1bHRfYXNzaWduZWVfaWRzICYmIHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9pZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgYXNzaWduZWUgPSByZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgICByZXM/LmRlZmF1bHRfYXNzaWduZWVfaWRzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX2RlZmF1bHRfYXNzaWduZWUnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTSUdORUVTID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXM/LnJldmlld2VycyAmJiByZXM/LnJldmlld2Vycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCByZXZpZXdlcnMgPSByZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgICByZXM/LnJldmlld2Vycy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcicsIHJldmlld2Vycyk7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfUkVWSUVXRVJTID0gcmV2aWV3ZXJzO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiB8fFxyXG4gICAgICAgICAgICAhdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLlJFVklFV0VSID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXM/LmRlZmF1bHRfcmV2aWV3ZXJzICYmIHJlcz8uZGVmYXVsdF9yZXZpZXdlcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgcmV2aWV3ZXJzID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5kZWZhdWx0X3Jldmlld2Vycy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyJywgcmV2aWV3ZXJzKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24gfHxcclxuICAgICAgICAgICAgIXRoaXMucHJvZ3JhbVNpbXBsaWZ5RmxhZ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5SRVZJRVdFUiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5vdmVyc2VlcnMgJiYgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGNjID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX292ZXJzZWVyJywgY2MpO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSUyA9IGNjO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiB8fFxyXG4gICAgICAgICAgICAhdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXM/LmRlZmF1bHRfb3ZlcnNlZXJzICYmXHJcbiAgICAgICAgICAocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWw/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICByZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsPy5sZW5ndGgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAocmVzPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWw/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q0MgPSByZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyJywgZGVmYXVsdENDKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZmFpbENDID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgICByZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2VlcicsIGZhaWxDQyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2hlY2tQcm9ncmFtT3B0aW9uRmllbGQoKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlR3JvdXBzKHJlczogYW55KSB7XHJcbiAgICBjb25zdCBpZHMgPSBbXHJcbiAgICAgIC4uLm5ldyBTZXQoW1xyXG4gICAgICAgIC4uLihyZXM/Lm93bmVyc19ncm91cCA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8uYXNzaWduZWVfZ3JvdXBfaWRzID8/IFtdKSxcclxuICAgICAgICAuLi4ocmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8ub3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHMgPz8gW10pLFxyXG4gICAgICAgIC4uLihyZXM/LnJldmlld2VyX2dyb3VwX2lkcyA/PyBbXSksXHJcbiAgICAgICAgLi4uKHJlcz8uZGVmYXVsdF9yZXZpZXdlcl9ncm91cF9pZHMgPz8gW10pLFxyXG4gICAgICAgIC4uLihyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHMgPz8gW10pLFxyXG4gICAgICAgIC4uLihyZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsX2dyb3VwcyA/PyBbXSksXHJcbiAgICAgIF0pLFxyXG4gICAgXTtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZ2V0TWVtYmVyQnlHcm91cHMoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXNwPy5kYXRhO1xyXG4gICAgICAgIGlmIChyZXMub3duZXJzX2dyb3VwICYmIHJlcz8ub3duZXJzX2dyb3VwPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IG93bmVycyA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHJlcz8ub3duZXJzX2dyb3VwPy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkKCdwcm9ncmFtX293bmVyc19ncm91cCcsIG93bmVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXMuYXNzaWduZWVfZ3JvdXBfaWRzICYmIHJlcz8uYXNzaWduZWVfZ3JvdXBfaWRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGFzc2lnbmVlID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5hc3NpZ25lZV9ncm91cF9pZHM/LmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fYXNzaWduZWVfZ3JvdXAnLCBhc3NpZ25lZSk7XHJcbiAgICAgICAgICB0aGlzLmxpc3RzLkRFRkFVTFRfQVNTSUdORUVTX0dST1VQID0gYXNzaWduZWU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTSUdORUVTID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyAmJlxyXG4gICAgICAgICAgcmVzPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcz8ubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHJlcz8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHM/LmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGQoJ3Byb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCcsIGFzc2lnbmVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24gfHxcclxuICAgICAgICAgICAgIXRoaXMucHJvZ3JhbVNpbXBsaWZ5RmxhZ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5BU1NJR05FRVMgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5yZXZpZXdlcl9ncm91cF9pZHMgJiYgcmVzPy5yZXZpZXdlcl9ncm91cF9pZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgcmV2aWV3ZXIgPSByZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgICByZXM/LnJldmlld2VyX2dyb3VwX2lkcz8uaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9yZXZpZXdlcl9ncm91cCcsIHJldmlld2VyKTtcclxuICAgICAgICAgIHRoaXMubGlzdHMuREVGQVVMVF9SRVZJRVdFUlNfR1JPVVAgPSByZXZpZXdlcjtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24gfHxcclxuICAgICAgICAgICAgIXRoaXMucHJvZ3JhbVNpbXBsaWZ5RmxhZ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5SRVZJRVdFUiA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlcz8uZGVmYXVsdF9yZXZpZXdlcl9ncm91cF9pZHMgJiZcclxuICAgICAgICAgIHJlcz8uZGVmYXVsdF9yZXZpZXdlcl9ncm91cF9pZHM/Lmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgcmV2aWV3ZXIgPSByZXNwb25zZT8uZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5kZWZhdWx0X3Jldmlld2VyX2dyb3VwX2lkcz8uaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwJywgcmV2aWV3ZXIpO1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5yZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhLnZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy5jb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gJ0FOWU9ORSdcclxuICAgICAgICAgICAgICA6IHRoaXMuY29udHJvbHM/LnJldmlld2VyX2NvbXBsZXRpb25fY3JpdGVyaWE/LnZhbHVlO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiB8fFxyXG4gICAgICAgICAgICAhdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLlJFVklFV0VSID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3VwcyAmJlxyXG4gICAgICAgICAgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8ubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBvdmVyc2Vlckdyb3VwID0gcmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgICAgcmVzPy5vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8uaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZCgncHJvZ3JhbV9vdmVyc2Vlcl9ncm91cCcsIG92ZXJzZWVyR3JvdXApO1xyXG4gICAgICAgICAgdGhpcy5saXN0cy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA9IG92ZXJzZWVyR3JvdXA7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXM/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHMgJiZcclxuICAgICAgICAgIHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8ubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWZhdWx0T3ZlcnNlZXJHcm91cCA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8uaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCcsXHJcbiAgICAgICAgICAgIGRlZmF1bHRPdmVyc2Vlckdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiB8fFxyXG4gICAgICAgICAgICAhdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbF9ncm91cHMgJiZcclxuICAgICAgICAgIHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzPy5sZW5ndGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRPdmVyc2VlckZhaWx1cmVHcm91cCA9IHJlc3BvbnNlLmZpbHRlcigoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHJlcz8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzPy5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICBlbGU/Lmdyb3VwX2lkXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZChcclxuICAgICAgICAgICAgJ3Byb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXAnLFxyXG4gICAgICAgICAgICBkZWZhdWx0T3ZlcnNlZXJGYWlsdXJlR3JvdXBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uIHx8XHJcbiAgICAgICAgICAgICF0aGlzLnByb2dyYW1TaW1wbGlmeUZsYWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gQXMgb2Ygbm93IGdyb3VwcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gcmV2aWV3ZXIgYW5kIG92ZXJzZWVlciBpZiB0aGlzIGdyb3VwIGZlYXR1cmUgZ2V0cyBpbmNvcGVyYXRlZCBpblxyXG4gICAgICAvL2Z1dHVyZSBuZWVkIHRvIGFkZCBncm91cCBjb25kaXRpb24gaGVyZSB0byBwcmVwb3B1bGF0ZSB0aGUgZGF0YSB3aGlsZSBlZGl0aW5nLlxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrUHJvZ3JhbU9wdGlvbkZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFkZGl0aW9uYWxPcHRpb24oKSB7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUk9MRVMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5PV05FUlMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5BUFBST1ZFUiA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLlBST0dSQU1fRlJFUVVFTkNZID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uU0NPUEVfQ0hBTkdFUyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLlJDID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQVNTSUdORUVTID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uUkVWSUVXRVIgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5PVkVSU0VFUiA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9uLkFTU0VTU01FTlQgPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbi5GT1JNQVRFX0VWSURFTkNFID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxPcHRpb24uQ1VTVE9NX0ZJRUxEUyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQcm9ncmFtT3B0aW9uRmllbGQoKTogYW55IHtcclxuICAgIGNvbnN0IGNvZGUgPSBbXHJcbiAgICAgICdQUk9HUkFNX0ZSRVFVRU5DWScsXHJcbiAgICAgICdTQ09QRV9DSEFOR0VTJyxcclxuICAgICAgJ1JDJyxcclxuICAgICAgJ0FTU0lHTkVFUycsXHJcbiAgICAgICdSRVZJRVdFUicsXHJcbiAgICAgICdPVkVSU0VFUicsXHJcbiAgICAgICdBU1NFU1NNRU5UJyxcclxuICAgICAgJ0ZPUk1BVEVfRVZJREVOQ0UnLFxyXG4gICAgICAnQ1VTVE9NX0ZJRUxEUycsXHJcbiAgICBdO1xyXG4gICAgbGV0IGlzTW9yZU9wdGlvbiA9IGZhbHNlO1xyXG4gICAgY29kZS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hZGRpdGlvbmFsT3B0aW9uW2tleV0pIHtcclxuICAgICAgICBpc01vcmVPcHRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuaXNQcm9ncmFtU2NvcGUgPSBpc01vcmVPcHRpb247XHJcbiAgfVxyXG4gIGVuYWJsZWZlYXR1cmUoKSB7XHJcbiAgICB0aGlzLmZlYXR1cmVmbGFncm9sZSA9IHRoaXMuYWxsb3dlZEZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcclxuICAgICAgJ2ZmX3JvbGVfaW1wcm92ZW1lbnRzJ1xyXG4gICAgKTtcclxuICAgIHRoaXMuaXNBc2NlbnRBbGxvd2VkID0gdGhpcy5hbGxvd2VkRmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxyXG4gICAgICAnZmZfY29tcGxpYW5jZV9mcmFtZXdvcmsnXHJcbiAgICApO1xyXG4gICAgdGhpcy5wcm9ncmFtU2ltcGxpZnlGbGFnID0gdGhpcy5hbGxvd2VkRmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxyXG4gICAgICAnZmZfcHJvZ3JhbV9zaW1wbGlmeSdcclxuICAgICk7XHJcbiAgICB0aGlzLmZlYXR1cmVmbGFnR3JvdXBzID1cclxuICAgICAgdGhpcy5hbGxvd2VkRmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9wcm9ncmFtX2dyb3VwcycpO1xyXG4gICAgdGhpcy50b29sVGlwRGF0YS5vd25lciA9IHRoaXMuZmVhdHVyZWZsYWdyb2xlXHJcbiAgICAgID8gJ093bmVycyBhcmUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGEgUHJvZ3JhbS4gT25seSBPd25lcnMgY2FuIG1ha2UgY2hhbmdlcyB0byBhIFByb2dyYW0gYW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgYXJlIGxpbmtlZCB3aXRoIHRoZSBQcm9ncmFtLjxicj5UaGUgPHN0cm9uZz5LZXkgUG93ZXIgVXNlcjwvc3Ryb25nPiBhbmQgYWxsIDxiPlBvd2VyIFVzZXJzPC9iPiB3aWxsIGJlIHNlbGVjdGVkIGFzIHRoZSBPd25lcnMgb2YgYSBQcm9ncmFtIGJ5IGRlZmF1bHQuJ1xyXG4gICAgICA6ICdPd25lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhIFByb2dyYW0uIE9ubHkgT3duZXJzIGNhbiBtYWtlIGNoYW5nZXMgdG8gYSBQcm9ncmFtIGFuZCB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IGFyZSBsaW5rZWQgd2l0aCB0aGUgUHJvZ3JhbS48YnI+VGhlIDxzdHJvbmc+S2V5IEFkbWluPC9zdHJvbmc+IGFuZCBhbGwgPGI+QWRtaW48L2I+IHVzZXJzIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIE93bmVycyBvZiBhIFByb2dyYW0gYnkgZGVmYXVsdC4nO1xyXG4gICAgdGhpcy5mZl9yY19saXN0aW5nID0gdGhpcy5hbGxvd2VkRmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9yY19saXN0aW5nJyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1wcm9ncmFtXCIgI2Zvcm0+XHJcbiAgPGZvcm0gbm92YWxpZGF0ZSBbZm9ybUdyb3VwXT1cInByb2dyYW1Gb3JtXCI+XHJcbiAgICA8IS0tIFByb2dyYW0gQ2F0ZWdvcnkgVHlwZSAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5wcm9ncmFtX3R5cGU/LnZhbHVlID4gLTFcIlxyXG4gICAgICBbYWN0aXZlXT1cImZhbHNlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KVwiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9pc3N1ZS10eXBlLnN2ZydcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgPlBST0dSQU0gVFlQRSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPHRhYi1zZWxlY3RvclxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2dyYW1fdHlwZVwiXHJcbiAgICAgICAgW2Rpc3BsYXlBcnJheV09XCJjb25zdGFudHM/LmNhdGVnb3J5VHlwZVwiXHJcbiAgICAgID48L3RhYi1zZWxlY3Rvcj5cclxuICAgICAgPCEtLSA8cCAqbmdJZj1cInByb2dyYW1fbmFtZT8uaW52YWxpZFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPkFkZCBhIHByb2dyYW0gdHlwZTwvcD4gLS0+XHJcbiAgICA8L2Zvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLSBGcmFtZXdvcmsgLS0+XHJcbiAgICA8Zm9ybS1maWVsZFxyXG4gICAgICAqbmdJZj1cImlzQXNjZW50QWxsb3dlZFwiXHJcbiAgICAgIFtjaGVja2VkXT1cImZhbHNlXCJcclxuICAgICAgW2FjdGl2ZV09XCJmYWxzZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9jYXRlZ29yeS5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5GUkFNRVdPUks8L2xhYmVsPlxyXG4gICAgICA8IS0tIFtzZWxlY3REaXZdPVwidHJ1ZVwiIC0tPlxyXG4gICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYSBmcmFtZXdvcmsgdGhhdCB0aGlzIFByb2dyYW0gcmVsYXRlcyB0bydcIlxyXG4gICAgICAgIChzZWxlY3QpPVwiYWN0aXZhdGVMaXN0KCdGUkFNRVdPUksnKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cImNvbnRyb2xzPy5mcmFtZXdvcmsudmFsdWU/Lm5hbWVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuRnJhbWV3b3JrQ2hhbmdlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCcnLCAnRlJBTUVXT1JLJylcIlxyXG4gICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNvbnRyb2xzPy5mcmFtZXdvcmsudmFsdWU/Lm5hbWVcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgID57eyBjb250cm9scz8uZnJhbWV3b3JrLnZhbHVlPy5uYW1lIH19PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj48aSAoY2xpY2spPVwicmVtb3ZlKCcnLCAnRlJBTUVXT1JLJylcIiAqbmdJZj1cImNhbkZyYW1ld29ya0NoYW5nZVwiIGNsYXNzPVwiaWNvbnNcIiA+JiN4ZTkwZDs8L2k+IHt7Y29udHJvbHM/LmZyYW1ld29yay52YWx1ZT8ubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuRnJhbWV3b3JrQ2hhbmdlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ0ZSQU1FV09SSycpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9pbnB1dC13aXRoLXBpbGw+XHJcbiAgICA8L2Zvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLSBQcm9ncmFtIENhdGVnb3J5IE5hbWUgLS0+XHJcbiAgICA8Zm9ybS1maWVsZFxyXG4gICAgICBbY2hlY2tlZF09XCJjb250cm9scz8ucHJvZ3JhbV9uYW1lPy52YWx1ZT8udHJpbSgpPy5sZW5ndGhcIlxyXG4gICAgICBbYWN0aXZlXT1cImZhbHNlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KVwiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aGF0LnN2ZydcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgPlBST0dSQU0gTkFNRSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgSW5wdXRUcmltXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZ3JhbV9uYW1lXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJXaGF0IGlzIHRoZSBQcm9ncmFtIG5hbWU/XCJcclxuICAgICAgLz5cclxuXHJcbiAgICAgIDxwXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX25hbWU/LmVycm9ycyAmJiBjb250cm9scz8ucHJvZ3JhbV9uYW1lPy50b3VjaGVkXHJcbiAgICAgICAgXCJcclxuICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxyXG4gICAgICA+XHJcbiAgICAgICAgRW50ZXIgYSBuYW1lIGZvciB0aGlzIFByb2dyYW0uXHJcbiAgICAgIDwvcD5cclxuICAgICAgPHAgKm5nSWY9XCJpc05hbWVFeGlzdHNcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICBQcm9ncmFtIG5hbWUgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgIDwvcD5cclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1maWxlcyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWZsZXgtd3JhcCB2eC1tdC0xXCI+XHJcbiAgICAgICAgPGZpbGUtcGlsbFxyXG4gICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgIGxldCBhdHRhY2htZW50IG9mIGNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZVxyXG4gICAgICAgICAgICAgIHwgc2xpY2UgOiAwIDogMlxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtleHRlbnNpb25dPVwiYXR0YWNobWVudD8ub3JnX2ZpbGU/LnNwbGl0KCcuJykucG9wKClcIlxyXG4gICAgICAgICAgW25hbWVdPVwiYXR0YWNobWVudD8ub3JnX2ZpbGVcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImF0dGFjaG1lbnQ/LnVwbG9hZGluZ1wiXHJcbiAgICAgICAgICAoZGVsZXRlKT1cImRlbGV0ZUF0dGFjaG1lbnQoJ0RFU0NSSVBUSU9OJywgYXR0YWNobWVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2ZpbGUtcGlsbD5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZT8ubGVuZ3RoID4gMlwiXHJcbiAgICAgICAgICBjbGFzcz1cImZpbGUtY291bnRcIlxyXG4gICAgICAgICAgYXBwUG9wb3ZlclxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwbG9hZEZpbGUucG9wb3ZlcigpXCJcclxuICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAre3sgY29udHJvbHM/LmRlc2NyaXB0aW9uX2F0dGFjaG1lbnQ/LnZhbHVlPy5sZW5ndGggLSAyIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGFwcC1wb3BvdmVyICN1cGxvYWRGaWxlIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1wLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRhY2htZW50IG9mIGNvbnRyb2xzPy5kZXNjcmlwdGlvbl9hdHRhY2htZW50Py52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAyXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxmaWxlLXBpbGxcclxuICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbl09XCJhdHRhY2htZW50Py5vcmdfZmlsZT8uc3BsaXQoJy4nKS5wb3AoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImF0dGFjaG1lbnQ/Lm9yZ19maWxlXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImF0dGFjaG1lbnQ/LnVwbG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgIChkZWxldGUpPVwiZGVsZXRlQXR0YWNobWVudCgnREVTQ1JJUFRJT04nLCBhdHRhY2htZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9maWxlLXBpbGw+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8dmNvbXBseS1lZGl0b3JcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRvckRhdGEucHJvZ3JhbURlc2NyaXB0aW9uXCJcclxuICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgIChzZW5kU2F2ZWRGaWxlcyk9XCJzZWxlY3RGaWxlKCdERVNDUklQVElPTicsICRldmVudClcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZvcm1GaWVsZCgncHJvZ3JhbV9kZXNjcmlwdGlvbicsICRldmVudClcIlxyXG4gICAgICAgIFtlZGl0b3JDb25maWddPVwiY29uc3RhbnRzPy5kZXNjcmlwdGlvblwiXHJcbiAgICAgID5cclxuICAgICAgPC92Y29tcGx5LWVkaXRvcj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIE9iamVjdGl2ZSAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5wcm9ncmFtX29iamVjdGl2ZT8udmFsdWU/LnRyaW0oKT8ubGVuZ3RoXCJcclxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVMaXN0ID09PSAnT0JKRUNUSVZFJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICBzaWRlRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiYgYWN0aXZlTGlzdCAhPT0gJ09CSkVDVElWRSdcclxuICAgICAgXCJcclxuICAgICAgW2ltZ109XCJcclxuICAgICAgICAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L29iamVjdGl2ZXMuc3ZnJ1xyXG4gICAgICBcIlxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcclxuICAgICAgICA+T0JKRUNUSVZFXHJcbiAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gLS0+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDx2Y29tcGx5LWVkaXRvclxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZWRpdG9yRGF0YS5wcm9ncmFtT2JqZWN0aXZlXCJcclxuICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgIChzZW5kU2F2ZWRGaWxlcyk9XCJzZWxlY3RGaWxlKCdPQkpFQ1RJVkUnLCAkZXZlbnQpXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGb3JtRmllbGQoJ3Byb2dyYW1fb2JqZWN0aXZlJywgJGV2ZW50LCB0cnVlKVwiXHJcbiAgICAgICAgW2VkaXRvckNvbmZpZ109XCJjb25zdGFudHM/Lm9iamVjdGl2ZVwiXHJcbiAgICAgID5cclxuICAgICAgPC92Y29tcGx5LWVkaXRvcj5cclxuICAgICAgPCEtLSA8cCAqbmdJZj1cIiFpc09iamVjdGl2ZVZhbGlkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+U3BlY2lmeSB0aGUgb2JqZWN0aXZlIGZvciB0aGlzIFByb2dyYW0uPC9wPiAtLT5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIFJvbGVzIC0tPlxyXG4gICAgPGZvcm0tZmllbGRcclxuICAgICAgKm5nSWY9XCJhZGRpdGlvbmFsT3B0aW9uPy5ST0xFU1wiXHJcbiAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVMaXN0ID09PSAnUk9MRSdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwic2lkZUVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZUxpc3QpICYmIGFjdGl2ZUxpc3QgIT09ICdST0xFJ1wiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yb2xlcy5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIiBpZD1cInBlcm1pc3Npb25ncm91cFwiXHJcbiAgICAgICAgPnt7IGZmX3JjX2xpc3RpbmcgPyBcIlBFUk1JU1NJT05TXCIgOiBcIlBFUk1JU1NJT04gR1JPVVAoUylcIiB9fVxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuXHJcbiAgICAgICAgPjxpXHJcbiAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICBmZl9yY19saXN0aW5nXHJcbiAgICAgICAgICAgICAgPyAnUGVybWlzc2lvbnMgbGV0IHlvdSBzcGVjaWZ5IHRoZSB1c2VycyB0aGF0IGNhbiBiZSDigJxPd25lcnPigJ0nICtcclxuICAgICAgICAgICAgICAgIChhbGxvd2VkRmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9wcm9ncmFtX3NpbXBsaWZ5JylcclxuICAgICAgICAgICAgICAgICAgPyAnICdcclxuICAgICAgICAgICAgICAgICAgOiAnIGFuZCDigJxBcHByb3ZlcnPigJ0nKSArXHJcbiAgICAgICAgICAgICAgICAnb2YgYSBQcm9ncmFtLidcclxuICAgICAgICAgICAgICA6ICdQZXJtaXNzaW9uIGdyb3VwKHMpIGxldCB5b3Ugc3BlY2lmeSB0aGUgdXNlcnMgdGhhdCBjYW4gYmUg4oCcT3duZXJz4oCdJyArXHJcbiAgICAgICAgICAgICAgICAoYWxsb3dlZEZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfcHJvZ3JhbV9zaW1wbGlmeScpXHJcbiAgICAgICAgICAgICAgICAgID8gJyAnXHJcbiAgICAgICAgICAgICAgICAgIDogJyBhbmQg4oCcQXBwcm92ZXJz4oCdJykgK1xyXG4gICAgICAgICAgICAgICAgJ29mIGEgUHJvZ3JhbS4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIlJvbGVIZWxwVGV4dFwiXHJcbiAgICAgICAgICA+JiN4ZWIxNjs8L2lcclxuICAgICAgICA+PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxpbnB1dC13aXRoLXBpbGxcclxuICAgICAgICBpZD1cInBsYWNlaG9sZGVybmFtZVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgZmZfcmNfbGlzdGluZ1xyXG4gICAgICAgICAgICA/ICdXaGljaCB1c2VyIHBlcm1pc3Npb25zIGhhdmUgYWNjZXNzIHRvIHRoaXMgcHJvZ3JhbT8nXHJcbiAgICAgICAgICAgIDogJ1doaWNoIHVzZXIgcGVybWlzc2lvbiBncm91cHMgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBwcm9ncmFtPydcclxuICAgICAgICBcIlxyXG4gICAgICAgIChzZWxlY3QpPVwiYWN0aXZhdGVMaXN0KCdST0xFJylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICFsaXN0cy5TWVNURU1fUk9MRV9JRFMuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZVswXT8uX2lkXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZVswXSwgJ1JPTEUnKVwiXHJcbiAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlZmxhZ3JvbGUgJiZcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZVswXT8ucGVybWlzc2lvbkdyb3VwTmFtZVxyXG4gICAgICAgICAgICAgICAgICA/IGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZVswXT8ucGVybWlzc2lvbkdyb3VwTmFtZVxyXG4gICAgICAgICAgICAgICAgICA6IGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZVswXT8ucm9sZU5hbWVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgZmVhdHVyZWZsYWdyb2xlICYmXHJcbiAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnBlcm1pc3Npb25Hcm91cE5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnBlcm1pc3Npb25Hcm91cE5hbWVcclxuICAgICAgICAgICAgICAgICAgOiBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnJvbGVOYW1lXHJcbiAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJvbGUucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgK3t7IGNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj48aSAqbmdJZj1cIiFsaXN0cy5TWVNURU1fUk9MRV9JRFMuaW5jbHVkZXMoY29udHJvbHM/LnByb2dyYW1fcm9sZXM/LnZhbHVlWzBdPy5faWQpXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0sJ1JPTEUnKVwiIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT57e2ZlYXR1cmVmbGFncm9sZSAmJiBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnBlcm1pc3Npb25Hcm91cE5hbWUgPyBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnBlcm1pc3Npb25Hcm91cE5hbWUgOiBjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWVbMF0/LnJvbGVOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fcm9sZXM/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJvbGUucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tjb250cm9scz8ucHJvZ3JhbV9yb2xlcz8udmFsdWU/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ1JPTEUnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ1JPTEUnKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICA8cCAqbmdJZj1cImZhbHNlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAge3sgZmVhdHVyZWZsYWdyb2xlID8gXCJBZGQgYSBwZXJtaXNzaW9uIGdyb3VwKHMpXCIgOiBcIkFkZCBhIHJvbGUocylcIiB9fVxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjcm9sZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgY29udHJvbHM/LnByb2dyYW1fcm9sZXM/LnZhbHVlIHwgc2xpY2UgOiAxXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbGlzdHMuU1lTVEVNX1JPTEVfSURTLmluY2x1ZGVzKGRhdGE/Ll9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSb2xlKGRhdGEsICdST0xFJylcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZWZsYWdyb2xlICYmIGRhdGE/LnBlcm1pc3Npb25Hcm91cE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgID8gZGF0YT8ucGVybWlzc2lvbkdyb3VwTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBkYXRhPy5yb2xlTmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIE93bmVycyAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uT1dORVJTXCJcclxuICAgICAgW2NoZWNrZWRdPVwiXHJcbiAgICAgICAgY29udHJvbHM/LnByb2dyYW1fb3duZXJzLnZhbHVlPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwLnZhbHVlPy5sZW5ndGggPiAwXHJcbiAgICAgIFwiXHJcbiAgICAgIFthY3RpdmVdPVwiYWN0aXZlTGlzdCA9PT0gJ09XTkVSJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJzaWRlRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiYgYWN0aXZlTGlzdCAhPT0gJ09XTkVSJ1wiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9vd25lci5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxyXG4gICAgICAgID5PV05FUihTKSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uXCJcclxuICAgICAgICAgICpuZ0lmPVwidG9vbFRpcERhdGEub3duZXIgIT09ICcnXCJcclxuICAgICAgICAgIGxpYlBvcG92ZXJIb3ZlclxyXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJkYXRhVG9vbHRpcC5wb3BvdmVyKClcIlxyXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwiZGF0YVRvb2x0aXAuY2xvc2VQb3BvdmVyKClcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFmOzwvaT48L3NwYW5cclxuICAgICAgICA+XHJcbiAgICAgICAgPHBvcG92ZXItaG92ZXIgI2RhdGFUb29sdGlwPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWluZm8tY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1pbmZvLWNhcmQtYm9keVwiXHJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b29sVGlwRGF0YS5vd25lclwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJPd25lckhlbHBUZXh0XCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9wb3BvdmVyLWhvdmVyPlxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidXaG8gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoaXMgcHJvZ3JhbT8nXCJcclxuICAgICAgICAoc2VsZWN0KT1cImFjdGl2YXRlTGlzdCgnT1dORVInKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX293bmVycy52YWx1ZVswXVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICA+e3sgY29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZVswXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm93bmVyLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX293bmVycz8udmFsdWU/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICt7eyBjb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9vd25lcnNfZ3JvdXA/LnZhbHVlPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX293bmVycz8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPiY8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIVsnQURNSU4nLCAnS0VZX0FETUlOJywgJ0xPR0dFRF9JTiddLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICAgIG93bmVyPy51c2VyX3JvbGVcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ09XTkVSX0dST1VQJ1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgK3t7IGNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlXCIgPnt7Y29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZT8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnQgdXNlclwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm93bmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fb3duZXJzPy52YWx1ZT8ubGVuZ3RoIC0xfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/Lmxlbmd0aCAmJiBjb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlPy5sZW5ndGhcIj4mPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKm5nSWY9XCIhWydBRE1JTicsJ0tFWV9BRE1JTicsJ0xPR0dFRF9JTiddLmluY2x1ZGVzKG93bmVyPy51c2VyX3JvbGUpXCIgKGNsaWNrKT1cInJlbW92ZShvd25lciwnT1dORVJfR1JPVVAnKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWV9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3duZXJzX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnRcIiBhcHBQb3BvdmVyIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2NvbnRyb2xzPy5wcm9ncmFtX293bmVyc19ncm91cD8udmFsdWU/Lmxlbmd0aCAtMX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVMaXN0ICE9PSAnT1dORVInXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImNvbnRyb2xzPy5hbGxfdXNlcl9pbl9yb2xlPy52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ09XTkVSJylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2lucHV0LXdpdGgtcGlsbD5cclxuICAgICAgPHAgKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPkFkZCBhIG93bmVyKHMpPC9wPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWVuZCB2eC1tdC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbXItMlwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZmVhdHVyZWZsYWdyb2xlXHJcbiAgICAgICAgICAgICAgPyBcIkFMTCBVU0VSUyBBU1NPQ0lBVEVEIFdJVEggVEhFIFNFTEVDVEVEIFBFUk1JU1NJT04gR1JPVVBTXCJcclxuICAgICAgICAgICAgICA6IFwiQUxMIFVTRVJTIEFTU09DSUFURUQgV0lUSCBUSEUgU0VMRUNURUQgUk9MRVNcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3dpdGNoXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbGxfdXNlcl9pbl9yb2xlXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsUm9sZU93bmVyKCRldmVudClcIlxyXG4gICAgICAgID48L3N3aXRjaD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjb3duZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG93bmVyIG9mIGNvbnRyb2xzPy5wcm9ncmFtX293bmVycz8udmFsdWUgfCBzbGljZSA6IDFcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RzLk5PTl9SRU1PVkFCTEVfT1dORVJTIHwgbGlzdFRvSWQgOiAnbWVtYmVyX2lkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgKS5pbmNsdWRlcyhvd25lcj8ubWVtYmVyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShvd25lciwgJ09XTkVSJylcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG93bmVyPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGFwcC1wb3BvdmVyICNncm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBvd25lciBvZiBjb250cm9scz8ucHJvZ3JhbV9vd25lcnNfZ3JvdXA/LnZhbHVlIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAhWydBRE1JTicsICdLRVlfQURNSU4nLCAnTE9HR0VEX0lOJ10uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPy51c2VyX3JvbGVcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUob3duZXIsICdPV05FUl9HUk9VUCcpXCJcclxuICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvd25lcj8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIEFwcHJvdmVycyAtLT5cclxuICAgIDwhLS0gUmVtb3ZpbmcgdGhpcyBvcHRpb24gaW4gUHJvZ3JhbSBzaW1wbGlmaWNhdGlvbiAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uQVBQUk9WRVIgJiYgIXByb2dyYW1TaW1wbGlmeUZsYWdcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjb250cm9scz8ucHJvZ3JhbV9hcHByb3Zlcj8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgIFthY3RpdmVdPVwiYWN0aXZlTGlzdCA9PT0gJ0FQUFJPVkVSJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICBzaWRlRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiYgYWN0aXZlTGlzdCAhPT0gJ0FQUFJPVkVSJ1xyXG4gICAgICBcIlxyXG4gICAgICBbaW1nXT1cIlxyXG4gICAgICAgICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvYXBwcm92YWwuc3ZnJ1xyXG4gICAgICBcIlxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcclxuICAgICAgICA+QVBQUk9WRVJcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ0FuIEFwcHJvdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBhcHByb3ZpbmcgYSBQcm9ncmFtLiBXaGVyZSBhbiBBcHByb3ZlciBpcyBzZWxlY3RlZCwgdGhlIFByb2dyYW0gYW5kIGFsbCByZXNwb25zaWJpbGl0aWVzIGxpbmtlZCB3aXRoIHRoYXQgUHJvZ3JhbSB3aWxsIG9ubHkgY29tbWVuY2Ugb25jZSB0aGUgUHJvZ3JhbSBoYXMgYmVlbiBhcHByb3ZlZC4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIkFwcHJvdmVySGVscFRleHRcIlxyXG4gICAgICAgICAgPiYjeGViMTY7PC9pXHJcbiAgICAgICAgPjwvbGFiZWxcclxuICAgICAgPlxyXG4gICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidXaG8gaXMgcmVzcG9uc2libGUgZm9yIGFwcHJvdmluZyB0aGlzIHByb2dyYW0/J1wiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzQXBwcm92ZXJEaXNhYmxlZFwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJhY3RpdmF0ZUxpc3QoJ0FQUFJPVkVSJylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hcHByb3Zlcj8udmFsdWVbMF1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNBcHByb3ZlckRpc2FibGVkID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9hcHByb3Zlcj8udmFsdWVbMF0sICdBUFBST1ZFUicpXCJcclxuICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcclxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9hcHByb3Zlcj8udmFsdWVbMF0/Lm1lbWJlcl9uYW1lXCJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICA+e3sgY29udHJvbHM/LnByb2dyYW1fYXBwcm92ZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpc0FwcHJvdmVyRGlzYWJsZWQgPT09IGZhbHNlXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9hcHByb3Zlcj8udmFsdWVbMF0sJ0FQUFJPVkVSJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy05IHZ4LW1yLTEgY3Jvc3NcIj4mI3hlOTBkOzwvaT57e2NvbnRyb2xzPy5wcm9ncmFtX2FwcHJvdmVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0FQUFJPVkVSJyAmJiBpc0FwcHJvdmVyRGlzYWJsZWQgPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlTGlzdCgnQVBQUk9WRVInKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgPC9mb3JtLWZpZWxkPlxyXG5cclxuICAgIDwhLS0gUGVyZm9ybWFuY2UgQ2FsY3VsYXRlZCAtLT5cclxuICAgIDwhLS0gPGZvcm0tZmllbGQgW2NoZWNrZWRdPVwiY29udHJvbHM/LnBlcmZvcm1hbmNlX2NhbGN1bGF0aW9uPy52YWx1ZVwiIFthY3RpdmVdPVwiYWN0aXZlTGlzdCA9PT0gJ1BFUkZPUk1BTkNFJ1wiIFtkaXNhYmxlZF09XCJzaWRlRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiYgYWN0aXZlTGlzdCAhPT0gJ1BFUkZPUk1BTkNFJ1wiXHJcbiAgICAgICAgICAgIFtpbWddPVwiJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9wZXJmb3JtYW5jZS1jYWxjLnN2ZydcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkhPVyBTSE9VTEQgVEhFIFBFUkZPUk1BTkNFIE9GIFRISVMgUFJPR1JBTSBCRSBDQUxDVUxBVEVEPzwvbGFiZWw+XHJcbiAgICAgICAgICAgIDx0YWItc2VsZWN0b3IgZm9ybUNvbnRyb2xOYW1lPVwicGVyZm9ybWFuY2VfY2FsY3VsYXRpb25cIiBbZGlzcGxheUFycmF5XT1cImNvbnN0YW50cz8ucGVyZm9ybWFuY2VDYWxjdWxhdGlvblwiPlxyXG4gICAgICAgICAgICA8L3RhYi1zZWxlY3Rvcj5cclxuICAgICAgICA8L2Zvcm0tZmllbGQ+IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUHJvZ3JhbVNjb3BlXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInNjb3BlLWxhYmVsIHZ4LWZzLTEwIHZ4LXR4dC13aGl0ZSB2eC10dC11cHBlcmNhc2UgdngtcGwtMSB2eC1wci0xIHZ4LW1iLTUgdngtbGgtNCB2eC1kLWlubGluZS1ibG9ja1wiXHJcbiAgICAgID5cclxuICAgICAgICBQUk9HUkFNIFNDT1BFXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxpICBjbGFzcz1cImljb25zIGluZm8taWNvbiB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xXCIgW2FwcFRvb2x0aXBdPVwidG9vbHRpcC5wcm9ncmFtU2NvcGVcIiBwbGFjZW1lbnQ9XCJib3R0b21cIiBkZWxheT1cIjBcIiB0eXBlPVwid2hpdGVcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+IC0tPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwiaWNvbiBpbmZvLWljb24gdngtZnMtMTIgdngtdHh0LWJsdWUgdngtbWwtMVwiXHJcbiAgICAgICAgKm5nSWY9XCJ0b29sVGlwRGF0YS5wcm9ncmFtU2NvcCAhPT0gJydcIlxyXG4gICAgICAgIGxpYlBvcG92ZXJIb3ZlclxyXG4gICAgICAgIChtb3VzZW92ZXIpPVwiZGF0YVRvb2x0aXAucG9wb3ZlcigpXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJkYXRhVG9vbHRpcC5jbG9zZVBvcG92ZXIoKVwiXHJcbiAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgID48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxZjs8L2k+PC9zcGFuXHJcbiAgICAgID5cclxuICAgICAgPHBvcG92ZXItaG92ZXIgI2RhdGFUb29sdGlwPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1pbmZvLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJ2eC1pbmZvLWNhcmQtYm9keVwiXHJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9vbFRpcERhdGEucHJvZ3JhbVNjb3BlXCJcclxuICAgICAgICAgICAgaWQ9XCJQU0hlbHBUZXh0XCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9wb3BvdmVyLWhvdmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBQcm9ncmFtIEZyZXF1ZW5jeSAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uUFJPR1JBTV9GUkVRVUVOQ1lcIlxyXG4gICAgICBbY2hlY2tlZF09XCJbdHJ1ZSwgZmFsc2VdLmluY2x1ZGVzKGNvbnRyb2xzPy5yZWN1cnJpbmdfZnJlcXVlbmN5Py52YWx1ZSlcIlxyXG4gICAgICBbYWN0aXZlXT1cImFjdGl2ZUxpc3QgPT09ICdGUkVRVUVOQ1knXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgIHNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KSAmJiBhY3RpdmVMaXN0ICE9PSAnRlJFUVVFTkNZJ1xyXG4gICAgICBcIlxyXG4gICAgICBbaW1nXT1cIlxyXG4gICAgICAgICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvcmVjdXJyaW5nLnN2ZydcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiIGlkPVwiUERDaGFuZ2VcIlxyXG4gICAgICAgID5QUk9HUkFNIERVUkFUSU9OXHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICdQcm9ncmFtIER1cmF0aW9uIHJlZmVycyB0byB0aGUgZHVyYXRpb24gb2YgdGhlIFByb2dyYW0uIEEgUHJvZ3JhbSBjYW4gb2NjdXIgaW4gcGVycGV0dWl0eSwgb3IgaXQgY2FuIG9jY3VyIHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYnVzaW5lc3MgY3ljbGUgdGhhdCBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gJyArXHJcbiAgICAgICAgICAgIGJ1c2luZXNzQ3ljbGUuc2VsZWN0ZWRDeWNsZS5idXNpbmVzc19jeWNsZSArXHJcbiAgICAgICAgICAgICcuICBBbGwgcmVzcG9uc2liaWxpdGllcyBsaW5rZWQgd2l0aCB0aGF0IFByb2dyYW0gd2lsbCBhbHNvIGhhdmUgdGhlIHNhbWUgUHJvZ3JhbSBEdXJhdGlvbi4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIlByb2dyYW1EdXJhdGlvbkhlbHBUZXh0XCJcclxuICAgICAgICAgID4mI3hlYjE2OzwvaVxyXG4gICAgICAgID48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1mb3JtYXRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dCB2eC1tYi0wXCI+SXMgdGhpcyBwcm9ncmFtIHJlY3VycmluZz88L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZ3JvdXAgcHJvZ3JhbVwiPlxyXG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICAgICAgW25hbWVdPVwiJ3JlY3VycmluZ19mcmVxdWVuY3knXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb250cm9scz8ucmVjdXJyaW5nX2ZyZXF1ZW5jeT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2V0Rm9ybUZpZWxkKCdyZWN1cnJpbmdfZnJlcXVlbmN5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgID5ZRVM8L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgICAgICBbbmFtZV09XCIncmVjdXJyaW5nX2ZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiFjb250cm9scz8ucmVjdXJyaW5nX2ZyZXF1ZW5jeT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2V0Rm9ybUZpZWxkKCdyZWN1cnJpbmdfZnJlcXVlbmN5JywgZmFsc2UpXCJcclxuICAgICAgICAgICAgICA+Tk88L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLSBTY29wZSBDaGFuZ2VzIC0tPlxyXG4gICAgPGZvcm0tZmllbGRcclxuICAgICAgKm5nSWY9XCJhZGRpdGlvbmFsT3B0aW9uPy5TQ09QRV9DSEFOR0VTXCJcclxuICAgICAgW2NoZWNrZWRdPVwiW3RydWUsIGZhbHNlXS5pbmNsdWRlcyhjb250cm9scz8ubG9ja19zY29wZV9jaGFuZ2U/LnZhbHVlKVwiXHJcbiAgICAgIFthY3RpdmVdPVwiYWN0aXZlTGlzdCA9PT0gJ1NDT1BFJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJzaWRlRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiYgYWN0aXZlTGlzdCAhPT0gJ1NDT1BFJ1wiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9sb2NrLXNjb3BlLnN2ZydcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgPkxvY2sgdGhlIFByb2dyYW0gU2NvcGVcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ0lmIHRoZSBQcm9ncmFtIFNjb3BlIGlzIGxvY2tlZCwgbmVpdGhlciB0aGUgUHJvZ3JhbSBub3IgdGhlIHJlc3BvbnNpYmlsaXRpZXMgbGlua2VkIHdpdGggdGhlIFByb2dyYW0gY2FuIGJlIGVkaXRlZCBvbmNlIHRoZSBQcm9ncmFtIGJlZ2lucy4gSW4gb3JkZXIgdG8gZWRpdCB0aGUgUHJvZ3JhbSBvciB0aGUgbGlua2VkIHJlc3BvbnNpYmlsaXRpZXMsIHRoZSBQcm9ncmFtIGRldGFpbHMgd2lsbCBuZWVkIHRvIGJlIGVkaXRlZC4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIlNjb3BlQ2hhbmdlc0hlbHBUZXh0XCJcclxuICAgICAgICAgID4mI3hlYjE2OzwvaVxyXG4gICAgICAgID48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1mb3JtYXRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHRcIlxyXG4gICAgICAgICAgPldvdWxkIHlvdSBsaWtlIHRvXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWxhYmVsLXR4dCB2eC1mdy01MDBcIj5sb2NrIGNoYW5nZXM8L3NwYW4+IHRvIHRoZVxyXG4gICAgICAgICAgcHJvZ3JhbSBzY29wZT88L3NwYW5cclxuICAgICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwIHByb2dyYW1cIj5cclxuICAgICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgICAgW25hbWVdPVwiJ2xvY2tfc2NvcGVfY2hhbmdlJ1wiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5sb2NrX3Njb3BlX2NoYW5nZT8udmFsdWVcIlxyXG4gICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInNldEZvcm1GaWVsZCgnbG9ja19zY29wZV9jaGFuZ2UnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgID5ZRVM8L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPGFwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICBbbmFtZV09XCInbG9ja19zY29wZV9jaGFuZ2UnXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiIWNvbnRyb2xzPy5sb2NrX3Njb3BlX2NoYW5nZT8udmFsdWVcIlxyXG4gICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInNldEZvcm1GaWVsZCgnbG9ja19zY29wZV9jaGFuZ2UnLCBmYWxzZSlcIlxyXG4gICAgICAgICAgICA+Tk88L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIEZyYW1ld29yayAtLT5cclxuICAgIDwhLS0gPGZvcm0tZmllbGQgW2NoZWNrZWRdPVwiZmFsc2VcIiBbYWN0aXZlXT1cImFjdGl2ZUxpc3QgPT09ICdGUkFNRVdPUksnXCIgW2Rpc2FibGVkXT1cInNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KSAmJiBhY3RpdmVMaXN0ICE9PSAnRlJBTUVXT1JLJ1wiXHJcbiAgICAgICAgICAgIFtpbWddPVwiJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9jYXRlZ29yeS5zdmcnXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5GUkFNRVdPUks8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQtd2l0aC1waWxsIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGEgZnJhbWV3b3JrIHRoYXQgdGhpcyBQcm9ncmFtIHJlbGF0ZXMgdG8nXCIgKHNlbGVjdCk9XCJhY3RpdmF0ZUxpc3QoJ0ZSQU1FV09SSycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cImNvbnRyb2xzPy5mcmFtZXdvcms/LnZhbHVlPy5mcmFtZXdvcmtfbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+PGkgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8uZnJhbWV3b3JrLnZhbHVlLCdGUkFNRVdPUksnKVwiIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT57e2NvbnRyb2xzPy5mcmFtZXdvcms/LnZhbHVlPy5mcmFtZXdvcmtfbmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZnJhbWV3b3JrLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+KzU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZUxpc3QhPT0nRlJBTUVXT1JLJ1wiIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ0ZSQU1FV09SSycpXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2ZyYW1ld29yayBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgWzEsIDEsIDEsIDEsIDEsIDEsIDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGZyYW1ld29yayBuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgIDwvZm9ybS1maWVsZD4gLS0+XHJcblxyXG4gICAgPCEtLSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgLS0+XHJcbiAgICA8Zm9ybS1maWVsZFxyXG4gICAgICAqbmdJZj1cImFkZGl0aW9uYWxPcHRpb24/LlJDXCJcclxuICAgICAgW2NoZWNrZWRdPVwiY29udHJvbHM/LnJjPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVMaXN0ID09PSAnUkMnXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KSAmJiBhY3RpdmVMaXN0ICE9PSAnUkMnXCJcclxuICAgICAgW2ltZ109XCJcclxuICAgICAgICAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3Jlc3BvbnNpYmlsaXR5LWNlbnRlci5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxyXG4gICAgICAgID5SRVNQT05TSUJJTElUWSBDRU5URVJcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ1Jlc3BvbnNpYmlsaXR5IENlbnRlcnMgcmVwcmVzZW50IHlvdXIgb3JnYW5pemF0aW9uYWwgYW5kIG9wZXJhdGlvbmFsIGluZnJhc3RydWN0dXJlLiBXaGVyZSBSZXNwb25zaWJpbGl0eSBDZW50ZXJzIGFyZSBzZWxlY3RlZCB3aGVuIGNyZWF0aW5nIGEgUHJvZ3JhbSwgb25seSB0aG9zZSBSZXNwb25zaWJpbGl0aWVzIENlbnRlcnMgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiB3aGVuIGNyZWF0aW5nIGEgcmVzcG9uc2liaWxpdHkgbGlua2VkIHdpdGggdGhlIFByb2dyYW0uJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgaWQ9XCJSQ0hlbHBUZXh0XCJcclxuICAgICAgICAgID4mI3hlYjE2OzwvaVxyXG4gICAgICAgID48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGlucHV0LXdpdGgtcGlsbFxyXG4gICAgICAgIFtzZWxlY3REaXZdPVwidHJ1ZVwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJhY3RpdmF0ZUxpc3QoJ1JDJylcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICdXaGljaCBSZXNwb25zaWJpbGl0eSBDZW50ZXIocykgY2FuIGJlIGxpbmtlZCB0byB0aGUgcmVzcG9uc2liaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9ncmFtPydcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZFwiXHJcbiAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5yYz8udmFsdWUgJiYgY29udHJvbHM/LnJjPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGNvbnRyb2xzPy5yYz8udmFsdWVbMF0sICdSQycpXCJcclxuICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcclxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucmM/LnZhbHVlWzBdPy5pdGVtX25hbWVcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgID57eyBjb250cm9scz8ucmM/LnZhbHVlWzBdPy5pdGVtX25hbWUgfX08L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJjLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnJjPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAre3sgY29udHJvbHM/LnJjPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucmM/LnZhbHVlWzBdLCdSQycpXCI+JiN4ZTkwZDs8L2k+e3tjb250cm9scz8ucmM/LnZhbHVlWzBdPy5pdGVtX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucmM/LnZhbHVlPy5sZW5ndGggID4gMVwiIGNsYXNzPVwiY291bnRcIiBhcHBQb3BvdmVyIChjbGljayk9XCJyYy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2NvbnRyb2xzPy5yYz8udmFsdWU/Lmxlbmd0aCAtMSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ1JDJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVMaXN0KCdSQycpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9pbnB1dC13aXRoLXBpbGw+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjcmMgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCByYyBvZiBjb250cm9scz8ucmM/LnZhbHVlIHwgc2xpY2UgOiAxXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKHJjLCAnUkMnKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICB7eyByYz8uaXRlbV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgPC9mb3JtLWZpZWxkPlxyXG5cclxuICAgIDwhLS0gQXNzaWduZWUgLS0+XHJcbiAgICA8Zm9ybS1maWVsZFxyXG4gICAgICAqbmdJZj1cImFkZGl0aW9uYWxPcHRpb24/LkFTU0lHTkVFU1wiXHJcbiAgICAgIFtjaGVja2VkXT1cIlxyXG4gICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoIHx8XHJcbiAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlPy5sZW5ndGggfHxcclxuICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgIFwiXHJcbiAgICAgIFthY3RpdmVdPVwiWydBU1NJR05FRScsICdERUZBVUxUX0FTU0lHTkVFJ10/LmluY2x1ZGVzKGFjdGl2ZUxpc3QpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgIHNpZGVFbGVtZW50cz8uaW5jbHVkZXMoYWN0aXZlTGlzdCkgJiZcclxuICAgICAgICAhWydBU1NJR05FRScsICdERUZBVUxUX0FTU0lHTkVFJ10uaW5jbHVkZXMoYWN0aXZlTGlzdClcclxuICAgICAgXCJcclxuICAgICAgW2ltZ109XCJcclxuICAgICAgICAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3doby5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbFxyXG4gICAgICAgIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZUxpc3QgPT09ICdERUZBVUxUX0FTU0lHTkVFJ1wiXHJcbiAgICAgICAgPkFTU0lHTkVFU1xyXG4gICAgICAgIDxpXHJcbiAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAnQXNzaWduZWVzIGFyZSByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCB0byB0aGVtLiBXaGVyZSBBc3NpZ25lZXMgYXJlIHNlbGVjdGVkIHdoZW4gY3JlYXRpbmcgYSBQcm9ncmFtLCBvbmx5IHRob3NlIEFzc2lnbmVlcyB3aWxsIGJlIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uIHdoZW4gY3JlYXRpbmcgYSByZXNwb25zaWJpbGl0eSBsaW5rZWQgd2l0aCB0aGUgUHJvZ3JhbS4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIkFzc2lnbmVlSGVscFRleHRcIlxyXG4gICAgICAgICAgPiYjeGViMTY7PC9pXHJcbiAgICAgICAgPlxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgW3NlbGVjdERpdl09XCJ0cnVlXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZlTGlzdCA9PT0gJ0RFRkFVTFRfQVNTSUdORUUnXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnV2hvIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0aW5nIHRoZSByZXNwb25zaWJpbGl0aWVzIHdpdGhpbiB0aGlzIFByb2dyYW0/J1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJhY3RpdmF0ZUxpc3QoJ0FTU0lHTkVFJylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWVbMF0sICdBU1NJR05FRScpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWVbMF0/Lm1lbWJlcl9uYW1lXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7IGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZVswXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25lZS5wb3BvdmVyKClcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICt7eyBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPiY8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ0FTU0lHTkVFX0dST1VQJ1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWVfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWVfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnbmVlX2dyb3VwLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgK3t7IGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWU/LnZhbHVlWzBdLCdBU1NJR05FRScpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWU/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50IHVzZXJcIiBhcHBQb3BvdmVyIChjbGljayk9XCJhc3NpZ25lZS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2NvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoIC0xfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoICYmIGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWVbMF0sJ0FTU0lHTkVFX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlXCI+e3tjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiYXNzaWduZWVfZ3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCAtMSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0FTU0lHTkVFJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVMaXN0KCdBU1NJR05FRScpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9pbnB1dC13aXRoLXBpbGw+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjYXNzaWduZWUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWU/LnZhbHVlIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKGFzc2lnbmVlLCAnQVNTSUdORUUnKVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGFwcC1wb3BvdmVyICNhc3NpZ25lZV9ncm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiBjb250cm9scz8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cD8udmFsdWUgfCBzbGljZSA6IDFcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoZ3JvdXAsICdBU1NJR05FRV9HUk9VUCcpXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZ3JvdXA/Lmdyb3VwX25hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgIDxsYWJlbFxyXG4gICAgICAgIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZUxpc3QgPT09ICdBU1NJR05FRSdcIlxyXG4gICAgICAgID5ERUZBVUxUIEFTU0lHTkVFXHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICdUaGlzIG9wdGlvbiBsZXRzIHlvdSBzcGVjaWZ5IHRoZSBEZWZhdWx0IEFzc2lnbmVlcyBmb3IgYWxsIG5ldyByZXNwb25zaWJpbGl0aWVzIGxpbmtlZCB3aXRoIGEgUHJvZ3JhbS4gSWYgYSBEZWZhdWx0IEFzc2lnbmVlcyBpcyBzZWxlY3RlZCwgdGhlIHVzZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNlbGVjdGVkIHRoZSBBc3NpZ25lZSB3aGVuIGNyZWF0aW5nIGEgcmVzcG9uc2liaWxpdHkgbGlua2VkIHdpdGggdGhlIFByb2dyYW0uIEFuIEFzc2lnbm9yLCBiZWluZyB0aGUgcGVyc29uIHdobyBjcmVhdGVzIHRoZSByZXNwb25zaWJpbGl0eSwgY2FuIG92ZXJyaWRlIHRoaXMgb3B0aW9uIHdoZW4gY3JlYXRpbmcgYSByZXNwb25zaWJpbGl0eS4gJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgaWQ9XCJEQUhlbHBUZXh0XCJcclxuICAgICAgICAgID4mI3hlYjE2OzwvaVxyXG4gICAgICAgID48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGlucHV0LXdpdGgtcGlsbFxyXG4gICAgICAgIFtzZWxlY3REaXZdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2ZUxpc3QgPT09ICdBU1NJR05FRSdcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICdXaGljaCBwZXJzb25zIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIGRlZmF1bHQgYXNzaWduZWVzIGZvciB0aGUgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhpcyBQcm9ncmFtPydcclxuICAgICAgICBcIlxyXG4gICAgICAgIChzZWxlY3QpPVwiYWN0aXZhdGVMaXN0KCdERUZBVUxUX0FTU0lHTkVFJylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAnREVGQVVMVF9BU1NJR05FRSdcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWZhdWx0QXNzaWduZWUucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICt7eyBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPiY8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICdERUZBVUxUX0FTU0lHTkVFX0dST1VQJ1xyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWZhdWx0QXNzaWduZWVHcm91cC5wb3BvdmVyKClcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgK3t7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZVswXSwnREVGQVVMVF9BU1NJR05FRScpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWVbMF0/Lm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZVwiPnt7IGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZGVmYXVsdEFzc2lnbmVlLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWU/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJiBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZT8ubGVuZ3RoXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlWzBdLCdERUZBVUxUX0FTU0lHTkVFX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cImRlZmF1bHRBc3NpZ25lZUdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWU/Lmxlbmd0aCAtMSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0RFRkFVTFRfQVNTSUdORUUnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlTGlzdCgnREVGQVVMVF9BU1NJR05FRScpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICA8YXBwLXBvcG92ZXIgI2RlZmF1bHRBc3NpZ25lZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2Fzc2lnbmVlPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGFzc2lnbmVlLCAnREVGQVVMVF9BU1NJR05FRScpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBhc3NpZ25lZT8ubWVtYmVyX25hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjZGVmYXVsdEFzc2lnbmVlR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgb2YgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cD8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDFcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShhc3NpZ25lZSwgJ0RFRkFVTFRfQVNTSUdORUVfR1JPVVAnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZ3JvdXA/Lmdyb3VwX25hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInJhZGlvLWdyb3VwLXNlbGVjdG9yXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlTGlzdCA9PT0gJ0FTU0lHTkVFJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8YXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICBbbmFtZV09XCInYXNzaWduZWUnXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5hc3NpZ25lZV9jb21wbGV0aW9uX2NyaXRlcmlhPy52YWx1ZSA9PT0gJ0FMTCdcIlxyXG4gICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJzZXRGb3JtRmllbGQoJ2Fzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWEnLCAnQUxMJylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEFMTCBTRUxFQ1RFRCBQRVJTT05TIE5FRUQgVE8gQ09NUExFVEUgVEhJU1xyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggcGVyc29uLidcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTFmOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLWNzLXJhZGlvPlxyXG4gICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgIFtuYW1lXT1cIidhc3NpZ25lZSdcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiY29udHJvbHM/LmFzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWE/LnZhbHVlID09PSAnQU5ZT05FJ1wiXHJcbiAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cIlxyXG4gICAgICAgICAgICBzZXRGb3JtRmllbGQoJ2Fzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWEnLCAnQU5ZT05FJylcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQU5ZIFNFTEVDVEVEIFBFUlNPTiBDQU4gQ09NUExFVEUgVEhJU1xyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgb25seSBvbmUgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBjcmVhdGVkLidcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID4mI3hlOTFmOzwvaVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLWNzLXJhZGlvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIFJldmlld2VyIC0tPlxyXG4gICAgPGZvcm0tZmllbGRcclxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uUkVWSUVXRVJcIlxyXG4gICAgICBbY2hlY2tlZF09XCJcclxuICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggfHxcclxuICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZT8ubGVuZ3RoIHx8XHJcbiAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICBcIlxyXG4gICAgICBbYWN0aXZlXT1cIlsnUkVWSUVXRVInLCAnREVGQVVMVF9SRVZJRVdFUiddPy5pbmNsdWRlcyhhY3RpdmVMaXN0KVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICBzaWRlRWxlbWVudHM/LmluY2x1ZGVzKGFjdGl2ZUxpc3QpICYmXHJcbiAgICAgICAgIVsnUkVWSUVXRVInLCAnREVGQVVMVF9SRVZJRVdFUiddLmluY2x1ZGVzKGFjdGl2ZUxpc3QpXHJcbiAgICAgIFwiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yZXZpZXdlci5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbFxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVMaXN0ID09PSAnREVGQVVMVF9SRVZJRVdFUidcIlxyXG4gICAgICAgIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgPlJldmlld2Vyc1xyXG4gICAgICAgIDxpXHJcbiAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAnUmV2aWV3ZXJzIGFyZSByZXF1aXJlZCB0byByZXZpZXcgcmVzcG9uc2liaWxpdGllcyBhZnRlciB0aGV5IGhhdmUgYmVlbiBjb21wbGV0ZWQuIFdoZXJlIFJldmlld2VycyBhcmUgc2VsZWN0ZWQgd2hlbiBjcmVhdGluZyBhIFByb2dyYW0sIG9ubHkgdGhvc2UgUmV2aWV3ZXJzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gd2hlbiBjcmVhdGluZyBhIHJlc3BvbnNpYmlsaXR5IGxpbmtlZCB3aXRoIHRoZSBQcm9ncmFtLidcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgIGlkPVwiUmV2aWV3ZXJIZWxwVGV4dFwiXHJcbiAgICAgICAgICA+JiN4ZWIxNjs8L2lcclxuICAgICAgICA+PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxpbnB1dC13aXRoLXBpbGxcclxuICAgICAgICBbc2VsZWN0RGl2XT1cInRydWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmVMaXN0ID09PSAnREVGQVVMVF9SRVZJRVdFUidcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICdXaG8gaXMgcmVzcG9uc2libGUgZm9yIHJldmlld2luZyB0aGUgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhpcyBQcm9ncmFtPydcclxuICAgICAgICBcIlxyXG4gICAgICAgIChzZWxlY3QpPVwiYWN0aXZhdGVMaXN0KCdSRVZJRVdFUicpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICByZW1vdmUoY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlWzBdLCAnUkVWSUVXRVInKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgID57eyBjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWVbMF0/Lm1lbWJlcl9uYW1lIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmV2aWV3ZXIucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAre3sgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID4mPC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICdSRVZJRVdFUl9HUk9VUCdcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXZpZXdlckdyb3VwLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgK3t7IGNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlWzBdLCdSRVZJRVdFUicpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50IHVzZXJcIiBhcHBQb3BvdmVyIChjbGljayk9XCJyZXZpZXdlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2NvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyPy52YWx1ZT8ubGVuZ3RoIC0xfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoICYmIGNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyPy52YWx1ZT8ubGVuZ3RoXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWVbMF0sJ1JFVklFV0VSX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlXCI+e3tjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJldmlld2VyR3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ1JFVklFV0VSJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ1JFVklFV0VSJylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9pbnB1dC13aXRoLXBpbGw+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjcmV2aWV3ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgcmV2aWV3ZXIgb2YgY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKHJldmlld2VyLCAnUkVWSUVXRVInKVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJldmlld2VyPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGFwcC1wb3BvdmVyICNyZXZpZXdlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwIG9mIGNvbnRyb2xzPy5wcm9ncmFtX3Jldmlld2VyX2dyb3VwPy52YWx1ZSB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZShncm91cCwgJ1JFVklFV0VSX0dST1VQJylcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBncm91cD8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGxhYmVsXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZUxpc3QgPT09ICdSRVZJRVdFUidcIlxyXG4gICAgICAgIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgPkRFRkFVTFQgUmV2aWV3ZXJcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ1RoaXMgb3B0aW9uIGxldHMgeW91IHNwZWNpZnkgdGhlIERlZmF1bHQgUmV2aWV3ZXJzIGZvciByZXNwb25zaWJpbGl0aWVzIGxpbmtlZCB3aXRoIGEgUHJvZ3JhbS4gV2hlcmUgYSB1c2VyIGhhcyBiZWVuIHNwZWNpZmllZCBhcyBhIERlZmF1bHQgUmV2aWV3ZXIsIHRoYXQgdXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2VsZWN0ZWQgYXMgdGhlIFJldmlld2VyIHdoZW4gY3JlYXRpbmcgYSByZXNwb25zaWJpbGl0eSBsaW5rZWQgd2l0aCB0aGUgUHJvZ3JhbS4gQW4gQXNzaWdub3IsIGJlaW5nIHRoZSBwZXJzb24gd2hvIGNyZWF0ZXMgdGhlIHJlc3BvbnNpYmlsaXR5LCBjYW4gb3ZlcnJpZGUgdGhpcyBvcHRpb24gd2hlbiBjcmVhdGluZyBhIHJlc3BvbnNpYmlsaXR5LidcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgIGlkPVwiRFJIZWxwVGV4dFwiXHJcbiAgICAgICAgICA+JiN4ZWIxNjs8L2lcclxuICAgICAgICA+PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxpbnB1dC13aXRoLXBpbGxcclxuICAgICAgICBbc2VsZWN0RGl2XT1cInRydWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmVMaXN0ID09PSAnUkVWSUVXRVInXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnV2hpY2ggcGVyc29ucyB3aWxsIGJlIHNlbGVjdGVkIGFzIHRoZSBkZWZhdWx0IHJldmlld2VycyBmb3IgdGhlIHJlc3BvbnNpYmlsaXRpZXMgd2l0aGluIHRoaXMgUHJvZ3JhbT8nXHJcbiAgICAgICAgXCJcclxuICAgICAgICAoc2VsZWN0KT1cImFjdGl2YXRlTGlzdCgnREVGQVVMVF9SRVZJRVdFUicpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ0RFRkFVTFRfUkVWSUVXRVInXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcclxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVmYXVsdFJldmlld2VyLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAre3sgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID4mPC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAnREVGQVVMVF9SRVZJRVdFUl9HUk9VUCdcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVmYXVsdFJldmlld2VyR3JvdXAucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICt7e1xyXG4gICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWVbMF0sJ0RFRkFVTFRfUkVWSUVXRVInKVwiID4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZGVmYXVsdFJldmlld2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWU/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJiBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyPy52YWx1ZT8ubGVuZ3RoXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlWzBdLCdERUZBVUxUX1JFVklFV0VSX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cImRlZmF1bHRSZXZpZXdlckdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAtMX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVMaXN0ICE9PSAnREVGQVVMVF9SRVZJRVdFUidcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVMaXN0KCdERUZBVUxUX1JFVklFV0VSJylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9pbnB1dC13aXRoLXBpbGw+XHJcbiAgICAgIDxhcHAtcG9wb3ZlciAjZGVmYXVsdFJldmlld2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgbGV0IHJldmlld2VyIG9mIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUocmV2aWV3ZXIsICdERUZBVUxUX1JFVklFV0VSJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJldmlld2VyPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGFwcC1wb3BvdmVyICNkZWZhdWx0UmV2aWV3ZXJHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGdyb3VwLCAnREVGQVVMVF9SRVZJRVdFUl9HUk9VUCcpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBncm91cD8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwicmFkaW8tZ3JvdXAtc2VsZWN0b3JcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVMaXN0ID09PSAnUkVWSUVXRVInXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgIFtuYW1lXT1cIidyZXZpZXdlcidcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiXHJcbiAgICAgICAgICAgIGNvbnRyb2xzPy5yZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhPy52YWx1ZSA9PT0gJ1NFUVVFTlRJQUwnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJcclxuICAgICAgICAgICAgc2V0Rm9ybUZpZWxkKCdyZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhJywgJ1NFUVVFTlRJQUwnKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgU0VRVUVOVElBTFxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICdUaGUgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBzZW50IGZvciByZXZpZXcgb25lIGF0IGEgdGltZSBpbiB0aGUgc2VxdWVuY2UgZGVmaW5lZCBieSB5b3UuJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxyXG4gICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPiYjeGU5MWY7PC9pXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtY3MtcmFkaW8+XHJcbiAgICAgICAgPGFwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgW25hbWVdPVwiJ3Jldmlld2VyJ1wiXHJcbiAgICAgICAgICBbY2hlY2tlZF09XCJcclxuICAgICAgICAgICAgY29udHJvbHM/LnJldmlld2VyX2NvbXBsZXRpb25fY3JpdGVyaWE/LnZhbHVlID09PSAnQU5ZT05FJyB8fFxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwiXHJcbiAgICAgICAgICAgIHNldEZvcm1GaWVsZCgncmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYScsICdBTllPTkUnKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBBTlkgUkVWSUVXRVIgQ0FOIE1BUksgVEhJUyBBUyBSRVZJRVdFRFxyXG4gICAgICAgICAgPGlcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICdUaGUgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBzZW50IGZvciByZXZpZXcgdG8gYWxsIHJldmlld2VycyBhdCB0aGUgc2FtZSB0aW1lLiBJZiBhbnlvbmUgb2YgdGhlIHJldmlld2VyIHJldmlld3MgdGhlIHJlc3BvbnNpYmlsaXR5LCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcmV2aWV3ZWQuJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxyXG4gICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPiYjeGU5MWY7PC9pXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtY3MtcmFkaW8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtLWZpZWxkPlxyXG5cclxuICAgIDwhLS0gT3ZlcnNlZXIgLS0+XHJcbiAgICA8Zm9ybS1maWVsZFxyXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcclxuICAgICAgKm5nSWY9XCJhZGRpdGlvbmFsT3B0aW9uPy5PVkVSU0VFUlwiXHJcbiAgICAgIFtjaGVja2VkXT1cIlxyXG4gICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoIHx8XHJcbiAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggfHxcclxuICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgIFwiXHJcbiAgICAgIFthY3RpdmVdPVwiYWN0aXZlTGlzdCA9PT0gJ09WRVJTRUVSJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICBzaWRlRWxlbWVudHM/LmluY2x1ZGVzKGFjdGl2ZUxpc3QpICYmXHJcbiAgICAgICAgIVsnT1ZFUlNFRVInLCAnREVGQVVMVF9PVkVSU0VFUicsICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUiddLmluY2x1ZGVzKFxyXG4gICAgICAgICAgYWN0aXZlTGlzdFxyXG4gICAgICAgIClcclxuICAgICAgXCJcclxuICAgICAgW2ltZ109XCJcclxuICAgICAgICAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L292ZXJzaWdodC5zdmcnXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDxsYWJlbFxyXG4gICAgICAgIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgWydERUZBVUxUX09WRVJTRUVSJywgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJ10uaW5jbHVkZXMoYWN0aXZlTGlzdClcclxuICAgICAgICBcIlxyXG4gICAgICAgID5PdmVyc2lnaHRzXHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICdPdmVyc2lnaHRzIHJlY2VpdmUgdXBkYXRlcyB3aGVuIGEgcmVzcG9uc2liaWxpdHkgaXMgY29tcGxldGVkLCBjb21wbGV0ZWQgd2l0aCBkZWxheSBvciBub3QgY29tcGxldGVkLiBXaGVyZSBPdmVyc2lnaHRzIGFyZSBzZWxlY3RlZCB3aGVuIGNyZWF0aW5nIGEgUHJvZ3JhbSwgb25seSB0aG9zZSBPdmVyc2lnaHRzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gd2hlbiBjcmVhdGluZyBhIHJlc3BvbnNpYmlsaXR5IGxpbmtlZCB3aXRoIHRoZSBQcm9ncmFtLidcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgIGlkPVwib3ZlcnNlZXJIZWxwVGV4dFwiXHJcbiAgICAgICAgICA+JiN4ZWIxNjs8L2lcclxuICAgICAgICA+PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxpbnB1dC13aXRoLXBpbGxcclxuICAgICAgICBbc2VsZWN0RGl2XT1cInRydWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgIFsnREVGQVVMVF9PVkVSU0VFUicsICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUiddLmluY2x1ZGVzKGFjdGl2ZUxpc3QpXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnV2hvIGlzIHJlc3BvbnNpYmxlIGZvciBvdmVyc2VlaW5nIHRoZSByZXNwb25zaWJpbGl0aWVzIHdpdGhpbiB0aGlzIFByb2dyYW0/J1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJhY3RpdmF0ZUxpc3QoJ09WRVJTRUVSJylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWVbMF0sICdPVkVSU0VFUicpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWVbMF0/Lm1lbWJlcl9uYW1lXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7IGNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2VlcnMucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAre3sgY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgID4mPC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICdPVkVSU0VFUl9HUk9VUCdcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgK3t7IGNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlWzBdLCdPVkVSU0VFUicpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggLTF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJiBjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aCBcIiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCI+Jjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF0sJ09WRVJTRUVSX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF0/Lmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXT8uZ3JvdXBfbmFtZX19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aD4gMVwiIGNsYXNzPVwiY291bnRcIiBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggLTF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUxpc3QgIT09ICdPVkVSU0VFUidcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVMaXN0KCdPVkVSU0VFUicpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVycyBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiBjb250cm9scz8ucHJvZ3JhbV9vdmVyc2Vlcj8udmFsdWUgfCBzbGljZSA6IDFcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKG92ZXJzZWVyLCAnT1ZFUlNFRVInKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/Lm1lbWJlcl9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgb2YgY29udHJvbHM/LnByb2dyYW1fb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKGdyb3VwLCAnT1ZFUlNFRVJfR1JPVVAnKVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVMaXN0ID09PSAnT1ZFUlNFRVInXCI+XHJcbiAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlsnT1ZFUlNFRVInXS5pbmNsdWRlcyhhY3RpdmVMaXN0KVwiXHJcbiAgICAgICAgICA+REVGQVVMVCBPdmVyc2lnaHRcclxuICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAnVGhpcyBvcHRpb24gbGV0cyB5b3Ugc3BlY2lmeSB0aGUgRGVmYXVsdCBPdmVyc2lnaHQgZm9yIHJlc3BvbnNpYmlsaXRpZXMgbGlua2VkIHdpdGggYSBQcm9ncmFtLiBXaGVyZSBhIHVzZXIgaGFzIGJlZW4gc3BlY2lmaWVkIGFzIGEgRGVmYXVsdCBPdmVyc2lnaHQsIHRoYXQgdXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2VsZWN0ZWQgYXMgdGhlIE92ZXJzaWdodCB3aGVuIGNyZWF0aW5nIGEgcmVzcG9uc2liaWxpdHkgbGlua2VkIHdpdGggdGhlIFByb2dyYW0uJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgaWQ9XCJET0hlbHBUZXh0XCJcclxuICAgICAgICAgICAgPiYjeGViMTY7PC9pXHJcbiAgICAgICAgICA+PC9sYWJlbFxyXG4gICAgICAgID5cclxuICAgICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgIFsnT1ZFUlNFRVInLCAnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVInXS5pbmNsdWRlcyhhY3RpdmVMaXN0KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtzZWxlY3REaXZdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICdXaGljaCBwZXJzb25zIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIGRlZmF1bHQgb3ZlcnNlZXJzIGZvciB0aGUgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhpcyBQcm9ncmFtPydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoc2VsZWN0KT1cImFjdGl2YXRlTGlzdCgnREVGQVVMVF9PVkVSU0VFUicpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAnREVGQVVMVF9PVkVSU0VFUidcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2VlcnNEZWZhdWx0LnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICt7eyBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxyXG4gICAgICAgICAgICAgICAgPiY8L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAnREVGQVVMVF9PVkVSU0VFUl9HUk9VUCdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyRGVmYXVsdEdyb3VwLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAre3tcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZVswXSwnREVGQVVMVF9PVkVSU0VFUicpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlWzBdPy5tZW1iZXJfbmFtZX19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzRGVmYXVsdC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggLTF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCAmJiBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoXCIgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiPiY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF0sJ0RFRkFVTFRfT1ZFUlNFRVJfR1JPVVAnKVwiID4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgIFthcHBUb29sdGlwXT1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggPjFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJEZWZhdWx0R3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoIC0xfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0RFRkFVTFRfT1ZFUlNFRVInXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVMaXN0KCdERUZBVUxUX09WRVJTRUVSJylcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2lucHV0LXdpdGgtcGlsbD5cclxuICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyc0RlZmF1bHQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXI/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDFcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKG92ZXJzZWVyLCAnREVGQVVMVF9PVkVSU0VFUicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckRlZmF1bHRHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgb2YgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGdyb3VwLCAnREVGQVVMVF9PVkVSU0VFUl9HUk9VUCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj4gPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQtd2l0aC1waWxsXHJcbiAgICAgICAgICBjbGFzcz1cInZ4LW10LTJcIlxyXG4gICAgICAgICAgW3NlbGVjdERpdl09XCJ0cnVlXCJcclxuICAgICAgICAgIFtsaW5lXT1cIjNcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlsnT1ZFUlNFRVInLCAnREVGQVVMVF9PVkVSU0VFUiddLmluY2x1ZGVzKGFjdGl2ZUxpc3QpXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgJ1doaWNoIHBlcnNvbnMgd2lsbCBiZSBzZWxlY3RlZCBhcyB0aGUgZGVmYXVsdCBvdmVyc2VlcnMgZm9yIHJlc3BvbnNpYmlsaXRpZXMgdGhhdCBhcmUgbm90IGNvbXBsZXRlZCB3aXRoaW4gdGhpcyBQcm9ncmFtPydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoc2VsZWN0KT1cImFjdGl2YXRlTGlzdCgnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVInKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcj8udmFsdWU/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUidcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcj8udmFsdWVbMF1cclxuICAgICAgICAgICAgICAgICAgICAgID8ubWVtYmVyX25hbWVcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5tZW1iZXJfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2VlcnNEZWZhdWx0RmFpbC5wb3BvdmVyKClcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICt7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgID8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXHJcbiAgICAgICAgICAgICAgICA+Jjwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSX0dST1VQJ1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF1cclxuICAgICAgICAgICAgICAgICAgICAgID8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2VlckRlZmF1bHRGYWlsR3JvdXAucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICt7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlWzBdLCdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUicpXCIgPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2VcIj57e2NvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZVswXT8ubWVtYmVyX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnQgdXNlclwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyc0RlZmF1bHRGYWlsLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXI/LnZhbHVlPy5sZW5ndGggLTF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwPy52YWx1ZT8ubGVuZ3RoICYmIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZT8ubGVuZ3RoXCIgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiPiY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiICpuZ0lmPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZShjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWVbMF0sJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSX0dST1VQJylcIiA+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZVwiPnt7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlWzBdPy5ncm91cF9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cD8udmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJEZWZhdWx0RmFpbEdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7Y29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlPy5sZW5ndGggLTF9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlTGlzdCgnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVInKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJzRGVmYXVsdEZhaWwgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyXHJcbiAgICAgICAgICAgICAgICAgICAgPy52YWx1ZSB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUob3ZlcnNlZXIsICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckRlZmF1bHRGYWlsR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwIG9mIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyX2dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgPy52YWx1ZSB8IHNsaWNlIDogMVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKGdyb3VwLCAnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVJfR1JPVVAnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Zvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLSBBc3Nlc3NtZW50IC0tPlxyXG4gICAgPGZvcm0tZmllbGRcclxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uQVNTRVNTTUVOVFwiXHJcbiAgICAgIFtjaGVja2VkXT1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2Vzc21lbnRzPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVMaXN0ID09PSAnQVNTRVNTTUVOVCdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgc2lkZUVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZUxpc3QpICYmIGFjdGl2ZUxpc3QgIT09ICdBU1NFU1NNRU5UJ1xyXG4gICAgICBcIlxyXG4gICAgICBbaW1nXT1cIlxyXG4gICAgICAgICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvYXNzZXNzbWVudHMuc3ZnJ1xyXG4gICAgICBcIlxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcclxuICAgICAgICA+QVNTRVNTTUVOVFNcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ0Fzc2Vzc21lbnRzIGFyZSBhIGRpZ2l0YWwgZm9ybSB0aGF0IGFyZSBjcmVhdGVkIGluIOKAnEFzc2Vzc21lbnTigJ0gd2l0aGluIHRoZSBDb21wbGlhbmNlIE1vZHVsZS4gV2hlcmUgQXNzZXNzbWVudHMgYXJlIHNlbGVjdGVkIHdoZW4gY3JlYXRpbmcgYSBQcm9ncmFtLCBvbmx5IHRob3NlIEFzc2Vzc21lbnRzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gd2hlbiBjcmVhdGluZyBhIHJlc3BvbnNpYmlsaXR5IGxpbmtlZCB3aXRoIHRoZSBQcm9ncmFtLidcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgIGlkPVwiQXNzZXNzbWVudEhlbHBUZXh0XCJcclxuICAgICAgICAgID4mI3hlYjE2OzwvaVxyXG4gICAgICAgID48L2xhYmVsXHJcbiAgICAgID5cclxuICAgICAgPGlucHV0LXdpdGgtcGlsbFxyXG4gICAgICAgIFtzZWxlY3REaXZdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgJ1doaWNoIGFzc2Vzc21lbnRzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHJlc3BvbnNpYmlsaXRpZXMgd2l0aGluIHRoaXMgUHJvZ3JhbT8nXHJcbiAgICAgICAgXCJcclxuICAgICAgICAoc2VsZWN0KT1cImFjdGl2YXRlTGlzdCgnQVNTRVNTTUVOVCcpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb250cm9scz8ucHJvZ3JhbV9hc3Nlc3NtZW50cz8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2Vzc21lbnRzPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgfCBhc3Nlc3NtZW50UmVzb2x2ZXIgYXMgYXNzZXNzbWVudHNcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShhc3Nlc3NtZW50c1swXSwgJ0FTU0VTU01FTlQnKVwiXHJcbiAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiYXNzZXNzbWVudHNbMF0/LmFzc2Vzc21lbnRfbmFtZVwiXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgPnt7IGFzc2Vzc21lbnRzWzBdPy5hc3Nlc3NtZW50X25hbWUgfX08L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2dyYW1fYXNzZXNzbWVudHMucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhc3Nlc3NtZW50cz8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAre3sgYXNzZXNzbWVudHM/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbnRyb2xzPy5wcm9ncmFtX2Fzc2Vzc21lbnRzPy52YWx1ZSB8IGFzc2Vzc21lbnRSZXNvbHZlcikgYXMgYXNzZXNzbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoYXNzZXNzbWVudHNbMF0sJ0FTU0VTU01FTlQnKVwiPiYjeGU5MGQ7PC9pPnt7YXNzZXNzbWVudHNbMF0/LmFzc2Vzc21lbnRfbmFtZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXNzZXNzbWVudHM/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwicHJvZ3JhbV9hc3Nlc3NtZW50cy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e2Fzc2Vzc21lbnRzPy5sZW5ndGggLTEgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlTGlzdCAhPT0gJ0FTU0VTU01FTlQnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUxpc3QoJ0FTU0VTU01FTlQnKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW5wdXQtd2l0aC1waWxsPlxyXG4gICAgICA8YXBwLXBvcG92ZXIgI3Byb2dyYW1fYXNzZXNzbWVudHMgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgYXNzZXNzbWVudCBvZiBjb250cm9scz8ucHJvZ3JhbV9hc3Nlc3NtZW50cz8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB8IGFzc2Vzc21lbnRSZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZShhc3Nlc3NtZW50LCAnQVNTRVNTTUVOVCcpXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgYXNzZXNzbWVudD8uYXNzZXNzbWVudF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIEZvcm1hdCAmIEV2aWRlbmNlIC0tPlxyXG4gICAgPGZvcm0tZmllbGRcclxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXHJcbiAgICAgICpuZ0lmPVwiYWRkaXRpb25hbE9wdGlvbj8uRk9STUFURV9FVklERU5DRVwiXHJcbiAgICAgIFtjaGVja2VkXT1cIlt0cnVlLCBmYWxzZV0uaW5jbHVkZXMoY29udHJvbHM/LmV2aWRlbmNlX3JlcXVpcmVkPy52YWx1ZSlcIlxyXG4gICAgICBbYWN0aXZlXT1cImZhbHNlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInNpZGVFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVMaXN0KVwiXHJcbiAgICAgIFtpbWddPVwiXHJcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9mb3JtYXQtZXZpZGVuY2Uuc3ZnJ1xyXG4gICAgICBcIlxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcclxuICAgICAgICA+RXZpZGVuY2VcclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCBldmlkZW5jZSBvZiBjb21wbGV0aW9uIG9mIGEgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSByZXF1aXJlZCBmb3IgYWxsIHJlc3BvbnNpYmlsaXRpZXMgdGhhdCBhcmUgbGlua2VkIHdpdGggdGhlIFByb2dyYW0uIEFuIEFzc2lnbm9yLCBiZWluZyB0aGUgcGVyc29uIHdobyBjcmVhdGVzIHRoZSByZXNwb25zaWJpbGl0eSwgY2FuIG92ZXJyaWRlIHRoaXMgb3B0aW9uIHdoZW4gY3JlYXRpbmcgYSByZXNwb25zaWJpbGl0eS4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBpZD1cIkV2aWRlbmNlSGVscFRleHRcIlxyXG4gICAgICAgICAgPiYjeGViMTY7PC9pXHJcbiAgICAgICAgPjwvbGFiZWxcclxuICAgICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWZvcm1hdFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiXHJcbiAgICAgICAgICA+RG8gYWxsIHJlc3BvbnNpYmlsaXRpZXMgd2l0aGluIHRoaXMgcHJvZ3JhbSByZXF1aXJlIGV2aWRlbmNlPzwvc3BhblxyXG4gICAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZ3JvdXAgcHJvZ3JhbVwiPlxyXG4gICAgICAgICAgPGFwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICBbbmFtZV09XCInZXZpZGVuY2VfcmVxdWlyZWQnXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29udHJvbHM/LmV2aWRlbmNlX3JlcXVpcmVkPy52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2V0Rm9ybUZpZWxkKCdldmlkZW5jZV9yZXF1aXJlZCcsIHRydWUpXCJcclxuICAgICAgICAgICAgPllFUzwvYXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8YXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIidldmlkZW5jZV9yZXF1aXJlZCdcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCIhY29udHJvbHM/LmV2aWRlbmNlX3JlcXVpcmVkPy52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2V0Rm9ybUZpZWxkKCdldmlkZW5jZV9yZXF1aXJlZCcsIGZhbHNlKVwiXHJcbiAgICAgICAgICAgID5OTzwvYXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktZW5kIHZ4LW10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbXItMlwiPkFsbG93IGFueSBmaWxlIHRvIGJlIG1hcmtlZCBhc1xyXG4gICAgICAgICAgICAgICAgICAgIGtleVxyXG4gICAgICAgICAgICAgICAgICAgIGV2aWRlbmNlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3dpdGNoIGZvcm1Db250cm9sTmFtZT1cImFsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRGb3JtRmllbGQoJ2FsbG93X2FueV9maWxlX2tleV9ldmlkZW5jZScsJGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQpXCI+PC9zd2l0Y2g+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZm9ybS1maWVsZD5cclxuXHJcbiAgICA8IS0tIEN1c3RvbSBGaWVsZCAtLT5cclxuICAgIDxmb3JtLWZpZWxkXHJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxyXG4gICAgICAqbmdJZj1cImFkZGl0aW9uYWxPcHRpb24/LkNVU1RPTV9GSUVMRFNcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjb250cm9scz8uY3VzdG9tX2ZpZWxkcz8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgIFthY3RpdmVdPVwiZmFsc2VcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwic2lkZUVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZUxpc3QpXCJcclxuICAgICAgW2ltZ109XCJcclxuICAgICAgICAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2N1c3RvbS1maWVsZHMuc3ZnJ1xyXG4gICAgICBcIlxyXG4gICAgPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcclxuICAgICAgICA+Q1VTVE9NIEZJRUxEXHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICdXaGVyZSBhIGN1c3RvbSBmaWVsZCBpcyBzcGVjaWZpZWQsIGFsbCByZXNwb25zaWJpbGl0aWVzIGxpbmtlZCB3aXRoIGEgUHJvZ3JhbSB3aWxsIGNvbnRhaW4gdGhhdCBjdXN0b20gZmllbGQuIEN1c3RvbSBmaWVsZHMgZW5hYmxlIHRoZSBjb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgbWV0YSBkYXRhLidcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgZGVsYXk9XCIwXCJcclxuICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcclxuICAgICAgICAgIGlkPVwiQ0ZIZWxwVGV4dFwiXHJcbiAgICAgICAgICA+JiN4ZWIxNjs8L2lcclxuICAgICAgICA+PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxjdXN0b20tZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tX2ZpZWxkc1wiPjwvY3VzdG9tLWZpZWxkPlxyXG4gICAgPC9mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcblxyXG48IS0tIGxpc3Qgb2Ygcm9sZXMgLS0+XHJcbjxyb2xlLWxpc3RcclxuICAqbmdJZj1cImFjdGl2ZUxpc3QgPT09ICdST0xFJ1wiXHJcbiAgW3NlbGVjdGVkXT1cImNvbnRyb2xzPy5wcm9ncmFtX3JvbGVzPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcIlxyXG4gIFtsb2FkaW5nXT1cImxpc3RMb2FkaW5nU3RhdGUuUk9MRVNcIlxyXG4gIFtsaXN0XT1cImxpc3RzPy5ST0xFUz8uZGF0YSA/PyBbXVwiXHJcbiAgKHNhdmUpPVwibGlzdEFjdGlvbigkZXZlbnQsICdST0xFJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdST0xFJylcIlxyXG4gIFtmZWF0dXJlZmxhZ3JvbGVdPVwiZmVhdHVyZWZsYWdyb2xlXCJcclxuICBbZmVhdHVyZWZsYWdHcm91cF09XCJmZWF0dXJlZmxhZ0dyb3Vwc1wiXHJcbiAgW2ZmX3JjX2xpc3RpbmddPVwiZmZfcmNfbGlzdGluZ1wiXHJcbj48L3JvbGUtbGlzdD5cclxuXHJcbjwhLS0gbGlzdCBvZiBmcmFtZXdvcmtzIC0tPlxyXG48IS0tIDxhcHAtZGVmaW5lLWZyYW1ld29yay1saXN0aW5nICpuZ0lmPVwiYWN0aXZlTGlzdCA9PT0gJ0ZSQU1FV09SSydcIiAoY2FuY2VsKT1cImZpZWxkRGVzZWxlY3RvcignRlJBTUVXT1JLJylcIiAobmV4dCk9XCJsaXN0QWN0aW9uKCRldmVudCwnRlJBTUVXT1JLJylcIiBbbW9kZV09XCJtb2RlXCIgW3NlbGVjdGVkRnJhbWV3b3JrXT1cImNvbnRyb2xzPy5mcmFtZXdvcms/LnZhbHVlXCI+PC9hcHAtZGVmaW5lLWZyYW1ld29yay1saXN0aW5nPiAtLT5cclxuPCEtLSBsaXN0IG9mIHJlc3BvbnNpYmlsaXR5IGNlbnRlciAtLT5cclxuPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3RcclxuICAqbmdJZj1cImFjdGl2ZUxpc3QgPT09ICdSQydcIlxyXG4gIFtyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XT1cImxpc3RzPy5SQyA/PyBbXVwiXHJcbiAgW3JhZGlvU2VsZWN0aW9uXT1cImZhbHNlXCJcclxuICBbcmNJZEtleV09XCIncmNfaWQnXCJcclxuICAoY2xvc2VSY0xpc3QpPVwiZmllbGREZXNlbGVjdG9yKCdSQycpXCJcclxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJsaXN0QWN0aW9uKCRldmVudCwgJ1JDJylcIlxyXG4gIFtzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc109XCJjb250cm9scz8ucmM/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFwiXHJcbj5cclxuPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxyXG48IS0tIHJlbmRlciB1c2VybGlzdCB3aXRoIGdyb3VwIC0tPlxyXG5cclxuPHVzZXItZ3JvdXAtbGlzdFxyXG4gICpuZ0lmPVwiYWN0aXZlTGlzdCA9PT0gJ09XTkVSJ1wiXHJcbiAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbbm9uUmVtb3ZhYmxlVXNlcklkc109XCJsaXN0cy5OT05fUkVNT1ZBQkxFX09XTkVSUyB8IGxpc3RUb0lkIDogJ21lbWJlcl9pZCdcIlxyXG4gIFt1c2VybGlzdF09XCJsaXN0cz8uT1dORVJTPy5kYXRhID8/IFtdXCJcclxuICBbc2VsZWN0ZWRVc2Vyc109XCJjb250cm9scz8ucHJvZ3JhbV9vd25lcnM/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFwiXHJcbiAgKGZldGNoVXNlckRhdGEpPVwiZmV0Y2hVc2Vyc0Fzc29jaWF0ZWRXaXRoUm9sZXMoZmFsc2UsICRldmVudClcIlxyXG4gIFt1c2VyTGlzdEluZm9dPVwibGlzdHM/Lk9XTkVSU1wiXHJcbiAgW2dyb3VwTGlzdEluZm9dPVwibGlzdHM/Lk9XTkVSU19HUk9VUFNcIlxyXG4gIFtncm91cExpc3RdPVwibGlzdHM/Lk9XTkVSU19HUk9VUFM/LmRhdGEgPz8gW11cIlxyXG4gIFtzZWxlY3RlZEdyb3Vwc109XCJjb250cm9scz8ucHJvZ3JhbV9vd25lcnNfZ3JvdXA/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFwiXHJcbiAgKHNhdmUpPVwibGlzdEFjdGlvbigkZXZlbnQsICdPV05FUicpXCJcclxuICAoY2FuY2VsKT1cImZpZWxkRGVzZWxlY3RvcignT1dORVInKVwiXHJcbiAgW3BhbmVsVGl0bGVdPVwicGFuZWxUaXRsZU93bmVyXCJcclxuICBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZWZsYWdHcm91cHNcIlxyXG4+PC91c2VyLWdyb3VwLWxpc3Q+XHJcbjx1c2VyLWdyb3VwLWxpc3RcclxuICAqbmdJZj1cImFjdGl2ZUxpc3QgPT09ICdBUFBST1ZFUidcIlxyXG4gIFtncm91cEVuYWJsZWRdPVwiZmFsc2VcIlxyXG4gIFtzaW5nbGVTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5BUFBST1ZFUlM/LmRhdGEgPz8gW11cIlxyXG4gIFtzZWxlY3RlZFVzZXJzXT1cImNvbnRyb2xzPy5wcm9ncmFtX2FwcHJvdmVyPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcIlxyXG4gIFt1c2VyTGlzdEluZm9dPVwibGlzdHM/LkFQUFJPVkVSU1wiXHJcbiAgKHNhdmUpPVwibGlzdEFjdGlvbigkZXZlbnQsICdBUFBST1ZFUicpXCJcclxuICAoY2FuY2VsKT1cImZpZWxkRGVzZWxlY3RvcignQVBQUk9WRVInKVwiXHJcbiAgW3BhbmVsVGl0bGVdPVwicGFuZWxUaXRsZUFwcHJvdmVyXCJcclxuPlxyXG48L3VzZXItZ3JvdXAtbGlzdD5cclxuPHVzZXItZ3JvdXAtbGlzdFxyXG4gICpuZ0lmPVwiYWN0aXZlTGlzdCA9PT0gJ0FTU0lHTkVFJ1wiXHJcbiAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbdXNlcmxpc3RdPVwibGlzdHM/LkFTU0lHTkVFUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiY29udHJvbHM/LnByb2dyYW1fYXNzaWduZWU/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFwiXHJcbiAgW2dyb3VwTGlzdF09XCJsaXN0cz8uQVNTSUdORUVTX0dST1VQID8/IFtdXCJcclxuICBbRnJvbVByb2dyYW1dPVwidHJ1ZVwiXHJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cImNvbnRyb2xzPy5wcm9ncmFtX2Fzc2lnbmVlX2dyb3VwPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcIlxyXG4gIFtkaXNhYmxlZElkc109XCJkaXNhYmxlZEFzc2lnbmVlSWRzXCJcclxuICBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidBc3NpZ25lZSdcIlxyXG4gIFtyZXZpZXdlcklkc109XCJzZWxlY3RlZFJldmlld2VySWRzXCJcclxuICBbb3ZlcnNlZXJJZHNdPVwic2VsZWN0ZWRPdmVyc2Vlcklkc1wiXHJcbiAgW2Fzc2lnbm9ySWRdPVwiYXNzaWdub3JJZFwiXHJcbiAgW3VzZXJMaXN0SW5mb109XCJsaXN0cz8uQVNTSUdORUVTXCJcclxuICAoc2F2ZSk9XCJsaXN0QWN0aW9uKCRldmVudCwgJ0FTU0lHTkVFJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdBU1NJR05FRScpXCJcclxuICBbcGFuZWxUaXRsZV09XCJwYW5lbFRpdGxlQXNzaWduZWVcIlxyXG4gIFtkZWZhdWx0U2VsZWN0ZWRVc2Vyc109XCJcclxuICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWU/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFxyXG4gIFwiXHJcbiAgW3VzZXJUeXBlXT1cIidhc3NpZ25lZXMnXCJcclxuICBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZWZsYWdHcm91cHNcIlxyXG4+XHJcbjwvdXNlci1ncm91cC1saXN0PlxyXG48dXNlci1ncm91cC1saXN0XHJcbiAgKm5nSWY9XCJhY3RpdmVMaXN0ID09PSAnREVGQVVMVF9BU1NJR05FRSdcIlxyXG4gIFtncm91cEVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgW3NpbmdsZVNlbGVjdF09XCJmYWxzZVwiXHJcbiAgW2xvYWRpbmddPVwibGlzdExvYWRpbmdTdGF0ZS5VU0VSU1wiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5ERUZBVUxUX0FTU0lHTkVFUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZT8udmFsdWUgfCByZWZEaXNjb25uZWN0XCJcclxuICBbZ3JvdXBMaXN0XT1cImxpc3RzPy5ERUZBVUxUX0FTU0lHTkVFU19HUk9VUCA/PyBbXVwiXHJcbiAgW0Zyb21Qcm9ncmFtXT1cInRydWVcIlxyXG4gIFtzZWxlY3RlZEdyb3Vwc109XCJcclxuICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXA/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFxyXG4gIFwiXHJcbiAgW2Rpc2FibGVkSWRzXT1cImRpc2FibGVkQXNzaWduZWVJZHNcIlxyXG4gIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ0Fzc2lnbmVlJ1wiXHJcbiAgW3Jldmlld2VySWRzXT1cInNlbGVjdGVkUmV2aWV3ZXJJZHNcIlxyXG4gIFtvdmVyc2Vlcklkc109XCJzZWxlY3RlZE92ZXJzZWVySWRzXCJcclxuICBbYXNzaWdub3JJZF09XCJhc3NpZ25vcklkXCJcclxuICBbdXNlckxpc3RJbmZvXT1cImxpc3RzPy5ERUZBVUxUX0FTU0lHTkVFXCJcclxuICAoc2F2ZSk9XCJsaXN0QWN0aW9uKCRldmVudCwgJ0RFRkFVTFRfQVNTSUdORUUnKVwiXHJcbiAgKGNhbmNlbCk9XCJmaWVsZERlc2VsZWN0b3IoJ0RFRkFVTFRfQVNTSUdORUUnKVwiXHJcbiAgW2ZlYXR1cmVmbGFnXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuPlxyXG48L3VzZXItZ3JvdXAtbGlzdD5cclxuXHJcbjx1c2VyLWdyb3VwLWxpc3RcclxuICAqbmdJZj1cImFjdGl2ZUxpc3QgPT09ICdSRVZJRVdFUicgJiYgKCFmZWF0dXJlZmxhZ0dyb3VwcyB8fCBmZWF0dXJlZmxhZ0dyb3VwcylcIlxyXG4gIFtncm91cEVuYWJsZWRdPVwiZmVhdHVyZWZsYWdHcm91cHNcIlxyXG4gIFtzaW5nbGVTZWxlY3RdPVwiZmFsc2VcIlxyXG4gIFtsb2FkaW5nXT1cImxpc3RMb2FkaW5nU3RhdGUuVVNFUlNcIlxyXG4gIFtGcm9tUHJvZ3JhbV09XCJ0cnVlXCJcclxuICBbdXNlcmxpc3RdPVwibGlzdHM/LlJFVklFV0VSUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiY29udHJvbHM/LnByb2dyYW1fcmV2aWV3ZXI/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFwiXHJcbiAgW2dyb3VwTGlzdF09XCJsaXN0cz8uUkVWSUVXRVJTX0dST1VQID8/IFtdXCJcclxuICBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZWZsYWdHcm91cHNcIlxyXG4gIFtzZWxlY3RlZEdyb3Vwc109XCJjb250cm9scz8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cD8udmFsdWUgfCByZWZEaXNjb25uZWN0XCJcclxuICBbZGlzYWJsZWRJZHNdPVwiZGlzYWJsZVJldmlld2VySWRzXCJcclxuICBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidSZXZpZXdlcidcIlxyXG4gIFthc3NpZ25vcklkXT1cImFzc2lnbm9ySWRcIlxyXG4gIFthc3NpZ25lZUlkc109XCJzZWxlY3RlZEFzc2lnbmVlSWRzXCJcclxuICBbb3ZlcnNlZXJJZHNdPVwic2VsZWN0ZWRPdmVyc2Vlcklkc1wiXHJcbiAgW3VzZXJMaXN0SW5mb109XCJsaXN0cz8uUkVWSUVXRVJTXCJcclxuICAoc2F2ZSk9XCJsaXN0QWN0aW9uKCRldmVudCwgJ1JFVklFV0VSJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdSRVZJRVdFUicpXCJcclxuICBbcGFuZWxUaXRsZV09XCJwYW5lbFRpdGxlUmV2aWV3ZXJcIlxyXG4gIFtkZWZhdWx0U2VsZWN0ZWRVc2Vyc109XCJcclxuICAgIGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXI/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFxyXG4gIFwiXHJcbiAgW3VzZXJUeXBlXT1cIidyZXZpZXdlcnMnXCJcclxuPlxyXG48L3VzZXItZ3JvdXAtbGlzdD5cclxuPHVzZXItZ3JvdXAtbGlzdFxyXG4gICpuZ0lmPVwiXHJcbiAgICBhY3RpdmVMaXN0ID09PSAnREVGQVVMVF9SRVZJRVdFUicgJiZcclxuICAgICghZmVhdHVyZWZsYWdHcm91cHMgfHwgZmVhdHVyZWZsYWdHcm91cHMpXHJcbiAgXCJcclxuICBbZ3JvdXBFbmFibGVkXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbRnJvbVByb2dyYW1dPVwidHJ1ZVwiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5ERUZBVUxUX1JFVklFV0VSUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9yZXZpZXdlcj8udmFsdWUgfCByZWZEaXNjb25uZWN0XCJcclxuICBbZ3JvdXBMaXN0XT1cImxpc3RzPy5ERUZBVUxUX1JFVklFV0VSU19HUk9VUCA/PyBbXVwiXHJcbiAgW2ZlYXR1cmVmbGFnXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbc2VsZWN0ZWRHcm91cHNdPVwiXHJcbiAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcclxuICBcIlxyXG4gIFtkaXNhYmxlZElkc109XCJkaXNhYmxlUmV2aWV3ZXJJZHNcIlxyXG4gIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ1Jldmlld2VyJ1wiXHJcbiAgW2Fzc2lnbm9ySWRdPVwiYXNzaWdub3JJZFwiXHJcbiAgW2Fzc2lnbmVlSWRzXT1cInNlbGVjdGVkQXNzaWduZWVJZHNcIlxyXG4gIFtvdmVyc2Vlcklkc109XCJzZWxlY3RlZE92ZXJzZWVySWRzXCJcclxuICBbdXNlckxpc3RJbmZvXT1cImxpc3RzPy5ERUZBVUxUX1JFVklFV0VSU1wiXHJcbiAgKHNhdmUpPVwibGlzdEFjdGlvbigkZXZlbnQsICdERUZBVUxUX1JFVklFV0VSJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdERUZBVUxUX1JFVklFV0VSJylcIlxyXG4gIFtwYW5lbFRpdGxlXT1cInBhbmVsVGl0bGVEZWZhdWx0UmV2aWV3ZXJcIlxyXG4+XHJcbjwvdXNlci1ncm91cC1saXN0PlxyXG48dXNlci1ncm91cC1saXN0XHJcbiAgKm5nSWY9XCJhY3RpdmVMaXN0ID09PSAnT1ZFUlNFRVInICYmICghZmVhdHVyZWZsYWdHcm91cHMgfHwgZmVhdHVyZWZsYWdHcm91cHMpXCJcclxuICBbZ3JvdXBFbmFibGVkXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbRnJvbVByb2dyYW1dPVwidHJ1ZVwiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5PVkVSU0VFUlMgPz8gW11cIlxyXG4gIFtzZWxlY3RlZFVzZXJzXT1cImNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcIlxyXG4gIFtncm91cExpc3RdPVwibGlzdHM/Lk9WRVJTRUVSU19HUk9VUCA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cImNvbnRyb2xzPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwPy52YWx1ZSB8IHJlZkRpc2Nvbm5lY3RcIlxyXG4gIFtmZWF0dXJlZmxhZ109XCJmZWF0dXJlZmxhZ0dyb3Vwc1wiXHJcbiAgW2Rpc2FibGVkSWRzXT1cImRpc2FibGVPdmVyc2Vlcklkc1wiXHJcbiAgW2Zyb21SZXNwb25zaWJpbGl0eV09XCInT3ZlcnNlZXInXCJcclxuICBbYXNzaWdub3JJZF09XCJhc3NpZ25vcklkXCJcclxuICBbYXNzaWduZWVJZHNdPVwic2VsZWN0ZWRBc3NpZ25lZUlkc1wiXHJcbiAgW3Jldmlld2VySWRzXT1cInNlbGVjdGVkUmV2aWV3ZXJJZHNcIlxyXG4gIFt1c2VyTGlzdEluZm9dPVwibGlzdHM/Lk9WRVJTRUVTXCJcclxuICAoc2F2ZSk9XCJsaXN0QWN0aW9uKCRldmVudCwgJ09WRVJTRUVSJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdPVkVSU0VFUicpXCJcclxuICBbZGVmYXVsdFNlbGVjdGVkVXNlcnNdPVwiXHJcbiAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyPy52YWx1ZVxyXG4gICAgICB8IHJlZkRpc2Nvbm5lY3RcclxuICAgICAgfCBhcnJheUNvbmNhdCA6IGNvbnRyb2xzPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyPy52YWx1ZVxyXG4gIFwiXHJcbiAgW3VzZXJUeXBlXT1cIidvdmVyc2VlcnMnXCJcclxuPlxyXG48L3VzZXItZ3JvdXAtbGlzdD5cclxuPHVzZXItZ3JvdXAtbGlzdFxyXG4gICpuZ0lmPVwiXHJcbiAgICBhY3RpdmVMaXN0ID09PSAnREVGQVVMVF9PVkVSU0VFUicgJiZcclxuICAgICghZmVhdHVyZWZsYWdHcm91cHMgfHwgZmVhdHVyZWZsYWdHcm91cHMpXHJcbiAgXCJcclxuICBbZ3JvdXBFbmFibGVkXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbRnJvbVByb2dyYW1dPVwidHJ1ZVwiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5ERUZBVUxUX09WRVJTRUVSUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcj8udmFsdWUgfCByZWZEaXNjb25uZWN0XCJcclxuICBbZ3JvdXBMaXN0XT1cImxpc3RzPy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cIlxyXG4gICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cD8udmFsdWUgfCByZWZEaXNjb25uZWN0XHJcbiAgXCJcclxuICBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZWZsYWdHcm91cHNcIlxyXG4gIFtkaXNhYmxlZElkc109XCJkaXNhYmxlT3ZlcnNlZXJJZHNcIlxyXG4gIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ092ZXJzZWVyJ1wiXHJcbiAgW2Fzc2lnbm9ySWRdPVwiYXNzaWdub3JJZFwiXHJcbiAgW2Fzc2lnbmVlSWRzXT1cInNlbGVjdGVkQXNzaWduZWVJZHNcIlxyXG4gIFtyZXZpZXdlcklkc109XCJzZWxlY3RlZFJldmlld2VySWRzXCJcclxuICBbdXNlckxpc3RJbmZvXT1cImxpc3RzPy5ERUZBVUxUX09WRVJTRUVSU1wiXHJcbiAgKHNhdmUpPVwibGlzdEFjdGlvbigkZXZlbnQsICdERUZBVUxUX09WRVJTRUVSJylcIlxyXG4gIChjYW5jZWwpPVwiZmllbGREZXNlbGVjdG9yKCdERUZBVUxUX09WRVJTRUVSJylcIlxyXG4+XHJcbjwvdXNlci1ncm91cC1saXN0PlxyXG48dXNlci1ncm91cC1saXN0XHJcbiAgKm5nSWY9XCJcclxuICAgIGFjdGl2ZUxpc3QgPT09ICdERUZBVUxUX0ZBSUxFRF9PVkVSU0VFUicgJiZcclxuICAgICghZmVhdHVyZWZsYWdHcm91cHMgfHwgZmVhdHVyZWZsYWdHcm91cHMpXHJcbiAgXCJcclxuICBbZ3JvdXBFbmFibGVkXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbc2luZ2xlU2VsZWN0XT1cImZhbHNlXCJcclxuICBbbG9hZGluZ109XCJsaXN0TG9hZGluZ1N0YXRlLlVTRVJTXCJcclxuICBbRnJvbVByb2dyYW1dPVwidHJ1ZVwiXHJcbiAgW3VzZXJsaXN0XT1cImxpc3RzPy5ERUZBVUxUX09WRVJTRUVSUyA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkVXNlcnNdPVwiXHJcbiAgICBjb250cm9scz8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcj8udmFsdWUgfCByZWZEaXNjb25uZWN0XHJcbiAgXCJcclxuICBbZ3JvdXBMaXN0XT1cImxpc3RzPy5ERUZBVUxUX09WRVJTRUVSU19HUk9VUCA/PyBbXVwiXHJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cIlxyXG4gICAgY29udHJvbHM/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXJfZ3JvdXA/LnZhbHVlIHwgcmVmRGlzY29ubmVjdFxyXG4gIFwiXHJcbiAgW2ZlYXR1cmVmbGFnXT1cImZlYXR1cmVmbGFnR3JvdXBzXCJcclxuICBbZGlzYWJsZWRJZHNdPVwiZGlzYWJsZU92ZXJzZWVySWRzXCJcclxuICBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidPdmVyc2VlcidcIlxyXG4gIFthc3NpZ25vcklkXT1cImFzc2lnbm9ySWRcIlxyXG4gIFthc3NpZ25lZUlkc109XCJzZWxlY3RlZEFzc2lnbmVlSWRzXCJcclxuICBbcmV2aWV3ZXJJZHNdPVwic2VsZWN0ZWRSZXZpZXdlcklkc1wiXHJcbiAgW3VzZXJMaXN0SW5mb109XCJsaXN0cz8uREVGQVVMVF9PVkVSU0VFUlNcIlxyXG4gIChzYXZlKT1cImxpc3RBY3Rpb24oJGV2ZW50LCAnREVGQVVMVF9GQUlMRURfT1ZFUlNFRVInKVwiXHJcbiAgKGNhbmNlbCk9XCJmaWVsZERlc2VsZWN0b3IoJ0RFRkFVTFRfRkFJTEVEX09WRVJTRUVSJylcIlxyXG4+XHJcbjwvdXNlci1ncm91cC1saXN0PlxyXG48YXNzZXNzbWVudC1waWNrZXJcclxuICAqbmdJZj1cImFjdGl2ZUxpc3QgPT09ICdBU1NFU1NNRU5UJ1wiXHJcbiAgW3NlbGVjdGVkQXNzZXNzbWVudF09XCJjb250cm9scz8ucHJvZ3JhbV9hc3Nlc3NtZW50cz8udmFsdWVcIlxyXG4gIChjYW5jZWxBc3Nlc3NtZW50KT1cImZpZWxkRGVzZWxlY3RvcignQVNTRVNTTUVOVCcpXCJcclxuICAob25Bc3Nlc3NtZW50U2VsZWN0KT1cImxpc3RBY3Rpb24oJGV2ZW50LCAnQVNTRVNTTUVOVCcpXCJcclxuPjwvYXNzZXNzbWVudC1waWNrZXI+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmVcclxuICAqbmdJZj1cInNob3dTbWlsZXlcIlxyXG4gIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIlxyXG4gIChjbG9zZVNtaWxleSk9XCJjbG9zZVNtaWxleSgkZXZlbnQpXCJcclxuPlxyXG48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT5cclxuXHJcbjwhLS0gRnJhbWV3b3JrIHNlbGVjdG9yICAtLT5cclxuPGFwcC1mcmFtZXdvcmstbGlzdFxyXG4gICpuZ0lmPVwiYWN0aXZlTGlzdCA9PT0gJ0ZSQU1FV09SSydcIlxyXG4gIFt3b3JrZmxvd1BhZ2VdPVwiWydGUkFNRVdPUksnXVwiXHJcbiAgKGFzc2lnbkNvbnRyb2wpPVwibGlzdEFjdGlvbigkZXZlbnQsICdGUkFNRVdPUksnKVwiXHJcbiAgKGNsb3NlRnJhbWV3b3JrKT1cImZpZWxkRGVzZWxlY3RvcignRlJBTUVXT1JLJylcIlxyXG4gIFtwcmV2aW91c1NlbGVjdGVkVmFsdWVzXT1cInsgZnJhbWV3b3JrOiBjb250cm9scz8uZnJhbWV3b3JrLnZhbHVlIH1cIlxyXG4gIChlbnRydXN0RnJhbWV3b3JrKT1cImVudHJ1c3RGcmFtZXdvcmsoJGV2ZW50KVwiXHJcbiAgW2hlYWRlclRleHRdPVwiJ1NlbGVjdCBhIGZyYW1ld29yaydcIlxyXG4+PC9hcHAtZnJhbWV3b3JrLWxpc3Q+XHJcbiJdfQ==