vc-create-dashboard 3.0.67 → 3.0.69

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 (372) hide show
  1. package/esm2022/lib/configurations.mjs +7 -0
  2. package/esm2022/lib/create-dashboard-container/categories/categories-config.mjs +2 -0
  3. package/esm2022/lib/create-dashboard-container/categories/categories.component.mjs +212 -0
  4. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +551 -0
  5. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +2 -0
  6. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +47 -0
  7. package/esm2022/lib/create-dashboard-container/constants/assets.constant.mjs +36 -0
  8. package/esm2022/lib/create-dashboard-container/create-dashboard-config.mjs +2 -0
  9. package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +1128 -0
  10. package/esm2022/lib/create-dashboard-container/create-dashboard.module.mjs +123 -0
  11. package/esm2022/lib/create-dashboard-container/directives/directives.module.mjs +24 -0
  12. package/esm2022/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +36 -0
  13. package/esm2022/lib/create-dashboard-container/form-group/form-group.component.mjs +153 -0
  14. package/esm2022/lib/create-dashboard-container/frequency/frequency.component.mjs +309 -0
  15. package/esm2022/lib/create-dashboard-container/interfaces/widget-data-model.mjs +2 -0
  16. package/esm2022/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -0
  17. package/esm2022/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -0
  18. package/esm2022/lib/create-dashboard-container/pipes/text-count.pipe.mjs +19 -0
  19. package/esm2022/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +149 -0
  20. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs +2 -0
  21. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +206 -0
  22. package/esm2022/lib/create-dashboard-container/services/auth.service.mjs +31 -0
  23. package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +230 -0
  24. package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +160 -0
  25. package/esm2022/lib/create-dashboard-container/services/pagination.service.mjs +28 -0
  26. package/esm2022/lib/create-dashboard-container/services/urlConfig.service.mjs +29 -0
  27. package/esm2022/lib/create-dashboard-container/user-list/user-list.component.mjs +440 -0
  28. package/esm2022/lib/create-dashboard-container/user-list/user-list.config.mjs +2 -0
  29. package/esm2022/lib/create-dashboard.service.mjs +14 -0
  30. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +52 -0
  31. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs +2 -0
  32. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +32 -0
  33. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +7 -0
  34. package/esm2022/lib/ui-kit/dialog/dialog-injector.mjs +17 -0
  35. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -0
  36. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +99 -0
  37. package/esm2022/lib/ui-kit/dialog/dialog.module.mjs +20 -0
  38. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +56 -0
  39. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +17 -0
  40. package/esm2022/lib/ui-kit/floating-bar/floating-bar.component.mjs +57 -0
  41. package/esm2022/lib/ui-kit/floating-bar/floating-bar.module.mjs +32 -0
  42. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +30 -0
  43. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +29 -0
  44. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +34 -0
  45. package/esm2022/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
  46. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +119 -0
  47. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +39 -0
  48. package/esm2022/lib/ui-kit/formgroup/formgroup.module.mjs +55 -0
  49. package/esm2022/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -0
  50. package/esm2022/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -0
  51. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +47 -0
  52. package/esm2022/lib/ui-kit/no-data/no-data.module.mjs +18 -0
  53. package/esm2022/lib/ui-kit/pagination/pagination.component.mjs +130 -0
  54. package/esm2022/lib/ui-kit/pagination/pagination.module.mjs +18 -0
  55. package/esm2022/lib/ui-kit/popover/popover.component.mjs +142 -0
  56. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +93 -0
  57. package/esm2022/lib/ui-kit/popover/popover.module.mjs +21 -0
  58. package/esm2022/lib/ui-kit/popover/popover.service.mjs +23 -0
  59. package/esm2022/lib/ui-kit/select/cs-option/cs-option.component.mjs +41 -0
  60. package/esm2022/lib/ui-kit/select/cs-select/cs-select.component.mjs +107 -0
  61. package/esm2022/lib/ui-kit/select/safe-html.pipe.mjs +21 -0
  62. package/esm2022/lib/ui-kit/select/select.module.mjs +21 -0
  63. package/esm2022/lib/ui-kit/services/cs-select.service.mjs +16 -0
  64. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +52 -0
  65. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -0
  66. package/esm2022/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +46 -0
  67. package/esm2022/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -0
  68. package/esm2022/lib/ui-kit/snack-bar/snack-bar.service.mjs +23 -0
  69. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +168 -0
  70. package/esm2022/lib/ui-kit/tooltip/tooltip.module.mjs +18 -0
  71. package/esm2022/lib/ui-kit/v-loader/loader/loader.component.mjs +24 -0
  72. package/esm2022/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +24 -0
  73. package/esm2022/lib/ui-kit/v-loader/v-loader.module.mjs +19 -0
  74. package/esm2022/public-api.mjs +10 -0
  75. package/esm2022/vc-create-dashboard.mjs +5 -0
  76. package/fesm2022/vc-create-dashboard.mjs +5503 -0
  77. package/fesm2022/vc-create-dashboard.mjs.map +1 -0
  78. package/index.d.ts +5 -0
  79. package/lib/configurations.d.ts +4 -0
  80. package/lib/create-dashboard-container/categories/categories-config.d.ts +18 -0
  81. package/lib/create-dashboard-container/categories/categories.component.d.ts +65 -0
  82. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +122 -0
  83. package/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.d.ts +9 -0
  84. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +14 -0
  85. package/lib/create-dashboard-container/constants/assets.constant.d.ts +34 -0
  86. package/lib/create-dashboard-container/create-dashboard-config.d.ts +18 -0
  87. package/lib/create-dashboard-container/create-dashboard.component.d.ts +179 -0
  88. package/lib/create-dashboard-container/create-dashboard.module.d.ts +36 -0
  89. package/lib/create-dashboard-container/directives/directives.module.d.ts +8 -0
  90. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +12 -0
  91. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +48 -0
  92. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +39 -0
  93. package/{src/lib/create-dashboard-container/interfaces/widget-data-model.ts → lib/create-dashboard-container/interfaces/widget-data-model.d.ts} +1 -1
  94. package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +7 -0
  95. package/lib/create-dashboard-container/pipes/search.pipe.d.ts +7 -0
  96. package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +7 -0
  97. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +61 -0
  98. package/lib/create-dashboard-container/risk-categories/risk-categories-config.d.ts +18 -0
  99. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +65 -0
  100. package/lib/create-dashboard-container/services/auth.service.d.ts +11 -0
  101. package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +38 -0
  102. package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +45 -0
  103. package/lib/create-dashboard-container/services/pagination.service.d.ts +12 -0
  104. package/lib/create-dashboard-container/services/urlConfig.service.d.ts +10 -0
  105. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +122 -0
  106. package/{src/lib/create-dashboard-container/user-list/user-list.config.ts → lib/create-dashboard-container/user-list/user-list.config.d.ts} +6 -6
  107. package/lib/create-dashboard.service.d.ts +6 -0
  108. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +17 -0
  109. package/lib/ui-kit/dashboard-footer/dashboard-footer-config.d.ts +11 -0
  110. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +10 -0
  111. package/lib/ui-kit/dialog/dialog-config.d.ts +6 -0
  112. package/lib/ui-kit/dialog/dialog-injector.d.ts +7 -0
  113. package/lib/ui-kit/dialog/dialog-ref.d.ts +7 -0
  114. package/lib/ui-kit/dialog/dialog.component.d.ts +33 -0
  115. package/lib/ui-kit/dialog/dialog.module.d.ts +9 -0
  116. package/lib/ui-kit/dialog/dialog.service.d.ts +17 -0
  117. package/lib/ui-kit/dialog/insertion.directive.d.ts +8 -0
  118. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +20 -0
  119. package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +10 -0
  120. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +10 -0
  121. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +13 -0
  122. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +15 -0
  123. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +8 -0
  124. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +36 -0
  125. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +15 -0
  126. package/lib/ui-kit/formgroup/formgroup.module.d.ts +17 -0
  127. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +7 -0
  128. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +7 -0
  129. package/lib/ui-kit/no-data/no-data.component.d.ts +19 -0
  130. package/lib/ui-kit/no-data/no-data.module.d.ts +8 -0
  131. package/lib/ui-kit/pagination/pagination.component.d.ts +21 -0
  132. package/lib/ui-kit/pagination/pagination.module.d.ts +8 -0
  133. package/lib/ui-kit/popover/popover.component.d.ts +28 -0
  134. package/lib/ui-kit/popover/popover.directive.d.ts +17 -0
  135. package/lib/ui-kit/popover/popover.module.d.ts +9 -0
  136. package/lib/ui-kit/popover/popover.service.d.ts +13 -0
  137. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +16 -0
  138. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +32 -0
  139. package/lib/ui-kit/select/safe-html.pipe.d.ts +10 -0
  140. package/lib/ui-kit/select/select.module.d.ts +11 -0
  141. package/lib/ui-kit/services/cs-select.service.d.ts +7 -0
  142. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +17 -0
  143. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +8 -0
  144. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +17 -0
  145. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +8 -0
  146. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +9 -0
  147. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +28 -0
  148. package/lib/ui-kit/tooltip/tooltip.module.d.ts +8 -0
  149. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +11 -0
  150. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +11 -0
  151. package/lib/ui-kit/v-loader/v-loader.module.d.ts +9 -0
  152. package/package.json +17 -3
  153. package/public-api.d.ts +3 -0
  154. package/karma.conf.js +0 -44
  155. package/ng-package.json +0 -7
  156. package/src/lib/categoryList.ts +0 -23
  157. package/src/lib/configurations.ts +0 -8
  158. package/src/lib/create-dashboard-container/categories/categories-config.ts +0 -18
  159. package/src/lib/create-dashboard-container/categories/categories.component.html +0 -150
  160. package/src/lib/create-dashboard-container/categories/categories.component.less +0 -252
  161. package/src/lib/create-dashboard-container/categories/categories.component.spec.ts +0 -43
  162. package/src/lib/create-dashboard-container/categories/categories.component.ts +0 -220
  163. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.html +0 -141
  164. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.less +0 -381
  165. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.spec.ts +0 -48
  166. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ts +0 -589
  167. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.ts +0 -9
  168. package/src/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ts +0 -30
  169. package/src/lib/create-dashboard-container/constants/assets.constant.ts +0 -36
  170. package/src/lib/create-dashboard-container/create-dashboard-config.ts +0 -24
  171. package/src/lib/create-dashboard-container/create-dashboard-mockData.ts +0 -341
  172. package/src/lib/create-dashboard-container/create-dashboard.component.html +0 -1276
  173. package/src/lib/create-dashboard-container/create-dashboard.component.less +0 -1453
  174. package/src/lib/create-dashboard-container/create-dashboard.component.ts +0 -1333
  175. package/src/lib/create-dashboard-container/create-dashboard.module.ts +0 -75
  176. package/src/lib/create-dashboard-container/directives/directives.module.ts +0 -18
  177. package/src/lib/create-dashboard-container/directives/scroll-in-view.directive.ts +0 -28
  178. package/src/lib/create-dashboard-container/form-group/form-group.component.html +0 -288
  179. package/src/lib/create-dashboard-container/form-group/form-group.component.less +0 -450
  180. package/src/lib/create-dashboard-container/form-group/form-group.component.spec.ts +0 -90
  181. package/src/lib/create-dashboard-container/form-group/form-group.component.ts +0 -163
  182. package/src/lib/create-dashboard-container/frequency/frequency.component.html +0 -61
  183. package/src/lib/create-dashboard-container/frequency/frequency.component.less +0 -183
  184. package/src/lib/create-dashboard-container/frequency/frequency.component.spec.ts +0 -120
  185. package/src/lib/create-dashboard-container/frequency/frequency.component.ts +0 -303
  186. package/src/lib/create-dashboard-container/pipes/filter.pipe.ts +0 -25
  187. package/src/lib/create-dashboard-container/pipes/search.pipe.ts +0 -23
  188. package/src/lib/create-dashboard-container/pipes/text-count.pipe.spec.ts +0 -8
  189. package/src/lib/create-dashboard-container/pipes/text-count.pipe.ts +0 -15
  190. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.html +0 -70
  191. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.less +0 -181
  192. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.spec.ts +0 -41
  193. package/src/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ts +0 -154
  194. package/src/lib/create-dashboard-container/risk-categories/risk-categories-config.ts +0 -18
  195. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.html +0 -152
  196. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.less +0 -230
  197. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.spec.ts +0 -39
  198. package/src/lib/create-dashboard-container/risk-categories/risk-categories.component.ts +0 -209
  199. package/src/lib/create-dashboard-container/services/auth.service.ts +0 -27
  200. package/src/lib/create-dashboard-container/services/configure-widgets.service.spec.ts +0 -19
  201. package/src/lib/create-dashboard-container/services/configure-widgets.service.ts +0 -245
  202. package/src/lib/create-dashboard-container/services/create-dashboard.service.spec.ts +0 -19
  203. package/src/lib/create-dashboard-container/services/create-dashboard.service.ts +0 -220
  204. package/src/lib/create-dashboard-container/services/pagination.service.spec.ts +0 -16
  205. package/src/lib/create-dashboard-container/services/pagination.service.ts +0 -25
  206. package/src/lib/create-dashboard-container/services/urlConfig.service.ts +0 -21
  207. package/src/lib/create-dashboard-container/user-list/user-list.component.html +0 -358
  208. package/src/lib/create-dashboard-container/user-list/user-list.component.less +0 -451
  209. package/src/lib/create-dashboard-container/user-list/user-list.component.spec.ts +0 -153
  210. package/src/lib/create-dashboard-container/user-list/user-list.component.ts +0 -472
  211. package/src/lib/create-dashboard.service.ts +0 -8
  212. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.html +0 -22
  213. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.less +0 -218
  214. package/src/lib/ui-kit/action-dialog/access-capability/access-capability.component.ts +0 -30
  215. package/src/lib/ui-kit/action-dialog/action-dialog.module.ts +0 -53
  216. package/src/lib/ui-kit/action-dialog/active/active.component.html +0 -1
  217. package/src/lib/ui-kit/action-dialog/active/active.component.less +0 -0
  218. package/src/lib/ui-kit/action-dialog/active/active.component.ts +0 -12
  219. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.html +0 -18
  220. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.less +0 -98
  221. package/src/lib/ui-kit/action-dialog/assesment-confirmation/assesment-confirmation.component.ts +0 -18
  222. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.html +0 -20
  223. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.less +0 -325
  224. package/src/lib/ui-kit/action-dialog/confirmation/confirmation.component.ts +0 -26
  225. package/src/lib/ui-kit/action-dialog/delete/delete.component.html +0 -24
  226. package/src/lib/ui-kit/action-dialog/delete/delete.component.less +0 -240
  227. package/src/lib/ui-kit/action-dialog/delete/delete.component.ts +0 -22
  228. package/src/lib/ui-kit/action-dialog/error/error.component.html +0 -20
  229. package/src/lib/ui-kit/action-dialog/error/error.component.less +0 -103
  230. package/src/lib/ui-kit/action-dialog/error/error.component.ts +0 -18
  231. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.html +0 -23
  232. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.less +0 -167
  233. package/src/lib/ui-kit/action-dialog/inactive/inactive.component.ts +0 -12
  234. package/src/lib/ui-kit/action-dialog/link/link.component.html +0 -57
  235. package/src/lib/ui-kit/action-dialog/link/link.component.less +0 -222
  236. package/src/lib/ui-kit/action-dialog/link/link.component.ts +0 -18
  237. package/src/lib/ui-kit/action-dialog/move/move.component.html +0 -43
  238. package/src/lib/ui-kit/action-dialog/move/move.component.less +0 -157
  239. package/src/lib/ui-kit/action-dialog/move/move.component.ts +0 -25
  240. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.html +0 -19
  241. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.less +0 -97
  242. package/src/lib/ui-kit/action-dialog/my-rating/my-rating.component.ts +0 -18
  243. package/src/lib/ui-kit/action-dialog/upload/upload.component.html +0 -19
  244. package/src/lib/ui-kit/action-dialog/upload/upload.component.less +0 -97
  245. package/src/lib/ui-kit/action-dialog/upload/upload.component.ts +0 -12
  246. package/src/lib/ui-kit/chart/bar/bar.component.html +0 -28
  247. package/src/lib/ui-kit/chart/bar/bar.component.less +0 -13
  248. package/src/lib/ui-kit/chart/bar/bar.component.ts +0 -44
  249. package/src/lib/ui-kit/chart/chart.module.ts +0 -12
  250. package/src/lib/ui-kit/chart/pipes/segmenter.pipe.ts +0 -28
  251. package/src/lib/ui-kit/chart/pipes/x-calculator.pipe.ts +0 -22
  252. package/src/lib/ui-kit/circle-progresss/circle/circle.component.html +0 -37
  253. package/src/lib/ui-kit/circle-progresss/circle/circle.component.less +0 -1448
  254. package/src/lib/ui-kit/circle-progresss/circle/circle.component.ts +0 -19
  255. package/src/lib/ui-kit/circle-progresss/circle-progresss.module.ts +0 -10
  256. package/src/lib/ui-kit/click-outside/click-outside.directive.ts +0 -16
  257. package/src/lib/ui-kit/click-outside/click-outside.module.ts +0 -16
  258. package/src/lib/ui-kit/color-palette/color-palette.component.html +0 -110
  259. package/src/lib/ui-kit/color-palette/color-palette.component.less +0 -54
  260. package/src/lib/ui-kit/color-palette/color-palette.component.ts +0 -28
  261. package/src/lib/ui-kit/color-palette/color-palette.module.ts +0 -10
  262. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.html +0 -37
  263. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.less +0 -335
  264. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.spec.ts +0 -25
  265. package/src/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ts +0 -44
  266. package/src/lib/ui-kit/dashboard-footer/dashboard-footer-config.ts +0 -11
  267. package/src/lib/ui-kit/dashboard-footer/dashboard-footer.module.ts +0 -22
  268. package/src/lib/ui-kit/dialog/dialog-config.ts +0 -6
  269. package/src/lib/ui-kit/dialog/dialog-injector.ts +0 -18
  270. package/src/lib/ui-kit/dialog/dialog-ref.ts +0 -12
  271. package/src/lib/ui-kit/dialog/dialog.component.css +0 -89
  272. package/src/lib/ui-kit/dialog/dialog.component.html +0 -27
  273. package/src/lib/ui-kit/dialog/dialog.component.ts +0 -114
  274. package/src/lib/ui-kit/dialog/dialog.module.ts +0 -11
  275. package/src/lib/ui-kit/dialog/dialog.service.ts +0 -57
  276. package/src/lib/ui-kit/dialog/insertion.directive.ts +0 -8
  277. package/src/lib/ui-kit/floating-bar/floating-bar.component.html +0 -42
  278. package/src/lib/ui-kit/floating-bar/floating-bar.component.less +0 -355
  279. package/src/lib/ui-kit/floating-bar/floating-bar.component.spec.ts +0 -25
  280. package/src/lib/ui-kit/floating-bar/floating-bar.component.ts +0 -40
  281. package/src/lib/ui-kit/floating-bar/floating-bar.module.ts +0 -22
  282. package/src/lib/ui-kit/formgroup/click-outside.directive.ts +0 -16
  283. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.html +0 -11
  284. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.less +0 -102
  285. package/src/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ts +0 -19
  286. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.html +0 -11
  287. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.less +0 -125
  288. package/src/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ts +0 -21
  289. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.html +0 -4
  290. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.less +0 -0
  291. package/src/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ts +0 -12
  292. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.html +0 -78
  293. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.less +0 -259
  294. package/src/lib/ui-kit/formgroup/cs-select/cs-select.component.ts +0 -92
  295. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.html +0 -30
  296. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.less +0 -103
  297. package/src/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ts +0 -23
  298. package/src/lib/ui-kit/formgroup/formgroup.module.ts +0 -35
  299. package/src/lib/ui-kit/formgroup/pipes/pascal.pipe.ts +0 -13
  300. package/src/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.ts +0 -18
  301. package/src/lib/ui-kit/line-loader/line-loader.component.html +0 -3
  302. package/src/lib/ui-kit/line-loader/line-loader.component.less +0 -34
  303. package/src/lib/ui-kit/line-loader/line-loader.component.ts +0 -14
  304. package/src/lib/ui-kit/line-loader/line-loader.module.ts +0 -10
  305. package/src/lib/ui-kit/longpress/longpress.directive.ts +0 -28
  306. package/src/lib/ui-kit/longpress/longpress.module.ts +0 -10
  307. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.html +0 -51
  308. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.less +0 -367
  309. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.spec.ts +0 -24
  310. package/src/lib/ui-kit/multi-select/cs-multiselect/cs-multiselect.component.ts +0 -141
  311. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.html +0 -9
  312. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.less +0 -105
  313. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.spec.ts +0 -27
  314. package/src/lib/ui-kit/multi-select/cs-multiselect-option/cs-multiselect-option.component.ts +0 -24
  315. package/src/lib/ui-kit/multi-select/multi-select.module.ts +0 -24
  316. package/src/lib/ui-kit/multi-select/multi-select.service.ts +0 -10
  317. package/src/lib/ui-kit/no-data/no-data.component.html +0 -14
  318. package/src/lib/ui-kit/no-data/no-data.component.less +0 -86
  319. package/src/lib/ui-kit/no-data/no-data.component.ts +0 -26
  320. package/src/lib/ui-kit/no-data/no-data.module.ts +0 -10
  321. package/src/lib/ui-kit/pagination/pagination.component.html +0 -11
  322. package/src/lib/ui-kit/pagination/pagination.component.less +0 -72
  323. package/src/lib/ui-kit/pagination/pagination.component.spec.ts +0 -25
  324. package/src/lib/ui-kit/pagination/pagination.component.ts +0 -138
  325. package/src/lib/ui-kit/pagination/pagination.module.ts +0 -10
  326. package/src/lib/ui-kit/pipes/pipes.module.ts +0 -10
  327. package/src/lib/ui-kit/pipes/safeHTML.pipe.ts +0 -12
  328. package/src/lib/ui-kit/pipes/trim.pipe.ts +0 -10
  329. package/src/lib/ui-kit/popover/popover.component.html +0 -6
  330. package/src/lib/ui-kit/popover/popover.component.less +0 -20
  331. package/src/lib/ui-kit/popover/popover.component.ts +0 -124
  332. package/src/lib/ui-kit/popover/popover.directive.ts +0 -72
  333. package/src/lib/ui-kit/popover/popover.module.ts +0 -13
  334. package/src/lib/ui-kit/popover/popover.service.ts +0 -17
  335. package/src/lib/ui-kit/ripple/ripple.directive.ts +0 -33
  336. package/src/lib/ui-kit/ripple/ripple.module.ts +0 -10
  337. package/src/lib/ui-kit/select/cs-option/cs-option.component.html +0 -8
  338. package/src/lib/ui-kit/select/cs-option/cs-option.component.less +0 -49
  339. package/src/lib/ui-kit/select/cs-option/cs-option.component.ts +0 -31
  340. package/src/lib/ui-kit/select/cs-select/cs-select.component.html +0 -16
  341. package/src/lib/ui-kit/select/cs-select/cs-select.component.less +0 -142
  342. package/src/lib/ui-kit/select/cs-select/cs-select.component.ts +0 -98
  343. package/src/lib/ui-kit/select/safe-html.pipe.ts +0 -13
  344. package/src/lib/ui-kit/select/select.module.ts +0 -13
  345. package/src/lib/ui-kit/services/cs-select.service.ts +0 -10
  346. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.html +0 -30
  347. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.less +0 -442
  348. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.component.ts +0 -40
  349. package/src/lib/ui-kit/smiley-dialog/smiley-dialog.module.ts +0 -11
  350. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.html +0 -10
  351. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.less +0 -110
  352. package/src/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ts +0 -42
  353. package/src/lib/ui-kit/snack-bar/snack-bar.module.ts +0 -10
  354. package/src/lib/ui-kit/snack-bar/snack-bar.service.ts +0 -18
  355. package/src/lib/ui-kit/time-filter/time-filter.component.html +0 -126
  356. package/src/lib/ui-kit/time-filter/time-filter.component.less +0 -482
  357. package/src/lib/ui-kit/time-filter/time-filter.component.ts +0 -284
  358. package/src/lib/ui-kit/time-filter/time-filter.module.ts +0 -10
  359. package/src/lib/ui-kit/tooltip/tooltip.directive.ts +0 -150
  360. package/src/lib/ui-kit/tooltip/tooltip.module.ts +0 -10
  361. package/src/lib/ui-kit/v-loader/loader/loader.component.html +0 -6
  362. package/src/lib/ui-kit/v-loader/loader/loader.component.less +0 -52
  363. package/src/lib/ui-kit/v-loader/loader/loader.component.ts +0 -22
  364. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.html +0 -6
  365. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.less +0 -52
  366. package/src/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ts +0 -22
  367. package/src/lib/ui-kit/v-loader/v-loader.module.ts +0 -11
  368. package/src/public-api.ts +0 -11
  369. package/src/test.ts +0 -28
  370. package/tsconfig.lib.json +0 -20
  371. package/tsconfig.lib.prod.json +0 -10
  372. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,1128 @@
1
+ import { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
+ import dayjs from 'dayjs';
3
+ import { TextCountPipe } from './pipes/text-count.pipe';
4
+ import { ASSETS } from './constants/assets.constant';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./services/create-dashboard.service";
7
+ import * as i2 from "./services/pagination.service";
8
+ import * as i3 from "../ui-kit/snack-bar/snack-bar.service";
9
+ import * as i4 from "../ui-kit/popover/popover.service";
10
+ import * as i5 from "./services/configure-widgets.service";
11
+ import * as i6 from "./pipes/text-count.pipe";
12
+ import * as i7 from "@angular/common";
13
+ import * as i8 from "@vcomply/editor";
14
+ import * as i9 from "../ui-kit/formgroup/cs-radio/cs-radio.component";
15
+ import * as i10 from "@angular/forms";
16
+ import * as i11 from "../ui-kit/tooltip/tooltip.directive";
17
+ import * as i12 from "./configure-widgets/configure-widgets/configure-widgets.component";
18
+ import * as i13 from "../ui-kit/popover/popover.component";
19
+ import * as i14 from "../ui-kit/popover/popover.directive";
20
+ import * as i15 from "../ui-kit/v-loader/loader-inline/loader-inline.component";
21
+ import * as i16 from "../ui-kit/snack-bar/snack-bar/snack-bar.component";
22
+ import * as i17 from "./directives/scroll-in-view.directive";
23
+ import * as i18 from "../ui-kit/smiley-dialog/smiley-dialog.component";
24
+ import * as i19 from "ng2-date-picker";
25
+ import * as i20 from "./user-list/user-list.component";
26
+ import * as i21 from "./responsibility-center/responsibility-center.component";
27
+ import * as i22 from "./categories/categories.component";
28
+ import * as i23 from "./risk-categories/risk-categories.component";
29
+ import * as i24 from "./frequency/frequency.component";
30
+ export class CreateDashboardComponent {
31
+ createDashboardService;
32
+ paginationService;
33
+ cdr;
34
+ snackBar;
35
+ popoverService;
36
+ configureWidgetsService;
37
+ textCount;
38
+ feature;
39
+ activeSelector = '';
40
+ disabled = false;
41
+ mode = 'CREATE';
42
+ dashboardId = '';
43
+ close = new EventEmitter();
44
+ createdBy = 0;
45
+ fromDatePicker;
46
+ toDatePicker;
47
+ animation = true;
48
+ configureWidget = false;
49
+ ASSETS = ASSETS;
50
+ totalPages = 1;
51
+ totalList = 1;
52
+ usersList = [];
53
+ vLoader = true;
54
+ userListLoaded = false;
55
+ rcListLoaded = false;
56
+ complianceCategoriesListLoaded = false;
57
+ riskCategoryListLoaded = false;
58
+ hideToDate = false;
59
+ listDetails = {
60
+ selectedUsersList: [],
61
+ selectedGroupList: [],
62
+ nonRemovableUsersList: [],
63
+ displayElementKey: 'member_name',
64
+ displayGroupKey: 'group_name',
65
+ groupIdkey: 'group_id',
66
+ elementIdKey: 'member_id',
67
+ tooltipKey: 'member_email',
68
+ };
69
+ dashboardDescription = {
70
+ placeholder: 'Description (Max limit: 250 characters)',
71
+ mode: 'prime',
72
+ id: 'description',
73
+ };
74
+ responsibilityCategoriesTree = {
75
+ regulations: {
76
+ list: [],
77
+ selectedList: [],
78
+ },
79
+ standards: {
80
+ list: [],
81
+ selectedList: [],
82
+ },
83
+ internalControls: {
84
+ list: [],
85
+ selectedList: [],
86
+ },
87
+ others: {
88
+ list: [],
89
+ selectedList: [],
90
+ },
91
+ };
92
+ allComplianceCategories = [];
93
+ allRiskCategories = [];
94
+ showRiskCategory = false;
95
+ showCriteria = true;
96
+ dashboardForm = {
97
+ dashboardName: '',
98
+ dashboardDescriptionText: '',
99
+ selectedViewers: [],
100
+ selectedGroup: [],
101
+ selectedFromDate: undefined,
102
+ selectedToDate: undefined,
103
+ selectedResponsibilityCenters: [],
104
+ selectedResponsibilityCategories: [],
105
+ selectedRiskCategories: [],
106
+ displayCriteria: 'or',
107
+ configureWidget: [],
108
+ frequencyDetails: '',
109
+ selectedFrequencyType: '',
110
+ selectedFrequencies: [0],
111
+ frequencyMessage: '',
112
+ frequencyDate: 1,
113
+ };
114
+ openConfigureWidgets = false;
115
+ selectedWidgets = [];
116
+ displayedWidgets = [];
117
+ responsibilityCentersList = [];
118
+ datePickerOverlay = false;
119
+ dayNames = [
120
+ 'Monday',
121
+ 'Tuesday',
122
+ 'Wednesday',
123
+ 'Thursday',
124
+ 'Friday',
125
+ 'Saturday',
126
+ 'Sunday',
127
+ ];
128
+ monthNames = [
129
+ 'January',
130
+ 'February',
131
+ 'March',
132
+ 'April',
133
+ 'May',
134
+ 'June',
135
+ 'July',
136
+ 'August',
137
+ 'September',
138
+ 'October',
139
+ 'November',
140
+ 'December',
141
+ ];
142
+ quarters = [
143
+ 'January, April, July, October',
144
+ 'February, May, August, November',
145
+ 'March, June, September, December',
146
+ ];
147
+ categoryListLoaded = false;
148
+ showRiskWidgets = false;
149
+ showComplianceWidgets = false;
150
+ isManageRisk = false;
151
+ riskCategoryList = {
152
+ strategic: {
153
+ list: [],
154
+ selectedList: [],
155
+ },
156
+ operational: {
157
+ list: [],
158
+ selectedList: [],
159
+ },
160
+ compliance: {
161
+ list: [],
162
+ selectedList: [],
163
+ },
164
+ others: {
165
+ list: [],
166
+ selectedList: [],
167
+ },
168
+ };
169
+ fromDatePickerConfig = {
170
+ min: this.getCurrentDate(),
171
+ };
172
+ toDatePickerConfig = {};
173
+ isSmiley;
174
+ smileyMessage = '';
175
+ groupList;
176
+ groupsEnabled = false;
177
+ totalgroups;
178
+ fromDatePickerPopup;
179
+ toDatePickerPopup;
180
+ openedDatePicker = '';
181
+ constructor(createDashboardService, paginationService, cdr, snackBar, popoverService, configureWidgetsService, textCount) {
182
+ this.createDashboardService = createDashboardService;
183
+ this.paginationService = paginationService;
184
+ this.cdr = cdr;
185
+ this.snackBar = snackBar;
186
+ this.popoverService = popoverService;
187
+ this.configureWidgetsService = configureWidgetsService;
188
+ this.textCount = textCount;
189
+ }
190
+ ngOnChanges() {
191
+ if (this.createdBy) {
192
+ this.listDetails.nonRemovableUsersList.push(this.createdBy);
193
+ }
194
+ }
195
+ onKeydownHandler(event) {
196
+ this.close.emit({ mode: 'discard' });
197
+ this.isSmiley = false;
198
+ }
199
+ ngOnInit() {
200
+ this.groupsEnabled = true;
201
+ this.animation = true;
202
+ setTimeout(() => {
203
+ this.animation = false;
204
+ }, 300);
205
+ // this.getOrganizationUsersCount('');
206
+ this.getCategoryList();
207
+ this.getRCList();
208
+ this.getComplianceCategoryList();
209
+ this.setFrequency('2~1~0~0', 'import');
210
+ this.checkWhetherAllListsLoaded();
211
+ this.getUsersList('');
212
+ this.getGroupList();
213
+ this.createDashboardService.getUserInformation().subscribe((res) => {
214
+ this.setPermission(res?.roleActions);
215
+ const quickLink = res.quick_link;
216
+ if (quickLink.risk) {
217
+ this.showRiskCategory = true;
218
+ }
219
+ else {
220
+ this.showRiskCategory = false;
221
+ }
222
+ }, (error) => {
223
+ console.error(error);
224
+ });
225
+ }
226
+ /**
227
+ * Displays the listing pages the left side of policy form to set and edit the dropdown fields values
228
+ * @param type holds name of particular list is to be displayed
229
+ * @param event contains boolean value to display the list or not
230
+ */
231
+ activateSelector(type, event) {
232
+ if (type == 'frequency' || this.activeSelector == 'frequency') {
233
+ this.showCriteria = false;
234
+ setTimeout(() => {
235
+ this.showCriteria = true;
236
+ }, 1);
237
+ }
238
+ this.activeSelector = event ? type : '';
239
+ }
240
+ openFromDatePicker() {
241
+ this.openedDatePicker = 'FROM_DATE';
242
+ this.fromDatePicker?.api?.open();
243
+ this.datePickerOverlay = true;
244
+ }
245
+ openToDatePicker() {
246
+ this.openedDatePicker = 'TO_DATE';
247
+ this.toDatePicker?.api?.open();
248
+ this.datePickerOverlay = true;
249
+ }
250
+ closeFromDatePicker() {
251
+ this.fromDatePicker?.api?.close();
252
+ if (!this.dashboardForm.selectedFromDate) {
253
+ this.dashboardForm.selectedToDate = undefined;
254
+ this.hideToDate = true;
255
+ setTimeout(() => {
256
+ this.hideToDate = false;
257
+ }, 20);
258
+ this.fromDatePicker.api.close();
259
+ this.datePickerOverlay = false;
260
+ return;
261
+ }
262
+ let minToDate = this.setToDate(this.dashboardForm.selectedFromDate);
263
+ this.toDatePickerConfig = { min: minToDate };
264
+ const fromDate = new Date(minToDate.split('-').reverse().join('-'));
265
+ const toDate = new Date(this.dashboardForm.selectedToDate);
266
+ const inValidDate = fromDate >= toDate ? true : false;
267
+ if (inValidDate) {
268
+ this.dashboardForm.selectedToDate = undefined;
269
+ this.hideToDate = true;
270
+ setTimeout(() => {
271
+ this.hideToDate = false;
272
+ }, 20);
273
+ }
274
+ this.datePickerOverlay = false;
275
+ }
276
+ closeToDatePicker() {
277
+ this.toDatePicker?.api?.close();
278
+ this.datePickerOverlay = false;
279
+ }
280
+ animateImage() {
281
+ const circleImage = document.getElementsByClassName('image');
282
+ }
283
+ saveFrequency(eventValues) {
284
+ this.dashboardForm.selectedFrequencyType = eventValues.frequencyType;
285
+ this.dashboardForm.selectedFrequencies = eventValues.frequencies;
286
+ this.dashboardForm.frequencyMessage = eventValues.frequencyString;
287
+ this.dashboardForm.frequencyDate = eventValues.selectedDate;
288
+ this.activateSelector('', false);
289
+ }
290
+ getCurrentDate() {
291
+ let today = new Date();
292
+ return dayjs(today).format('DD-MM-YYYY');
293
+ }
294
+ setToDate(data) {
295
+ let today = new Date(data);
296
+ return dayjs(today).format('DD-MM-YYYY');
297
+ }
298
+ getFromDate(data) {
299
+ let today = new Date(data);
300
+ return (today.getDate() + '-' + (today.getMonth() + 1) + '-' + today.getFullYear());
301
+ }
302
+ /**
303
+ * It takes a string, converts it to a date, then returns a string in the format of YYYY-MM-DD.
304
+ * @param {string} data - the date you want to format
305
+ * @returns A string in the format of YYYY-MM-DD
306
+ */
307
+ getDateFormate(data) {
308
+ let today = new Date(data);
309
+ return (today.getFullYear() +
310
+ '-' +
311
+ String(today.getMonth() + 1).padStart(2, '0') +
312
+ '-' +
313
+ String(today.getDate()).padStart(2, '0'));
314
+ }
315
+ configureDashboard() {
316
+ let fieldsStatus = this.validateDashboard();
317
+ if (fieldsStatus) {
318
+ if (this.mode == 'CREATE') {
319
+ this.vLoader = true;
320
+ const payload = {
321
+ dashboard_name: this.dashboardForm.dashboardName,
322
+ dashboard_id: '',
323
+ };
324
+ this.createDashboardService
325
+ .checkDuplicateDashboardName(payload)
326
+ .subscribe((res) => {
327
+ if (!res) {
328
+ this.vLoader = false;
329
+ this.showRiskWidgets =
330
+ this.isManageRisk &&
331
+ this.showRiskCategory &&
332
+ (this.dashboardForm.selectedRiskCategories.length > 0 ||
333
+ this.dashboardForm.selectedResponsibilityCenters.length > 0)
334
+ ? true
335
+ : false;
336
+ this.showComplianceWidgets =
337
+ this.dashboardForm.selectedResponsibilityCategories.length >
338
+ 0 ||
339
+ this.dashboardForm.selectedResponsibilityCenters.length > 0
340
+ ? true
341
+ : false;
342
+ this.openConfigureWidgets = true;
343
+ }
344
+ else {
345
+ this.vLoader = false;
346
+ this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.', 'alert');
347
+ return;
348
+ }
349
+ }, (error) => {
350
+ console.error(error);
351
+ this.vLoader = false;
352
+ });
353
+ }
354
+ else if (this.mode == 'EDIT') {
355
+ this.vLoader = true;
356
+ const payload = {
357
+ dashboard_name: this.dashboardForm.dashboardName,
358
+ dashboard_id: this.dashboardId,
359
+ };
360
+ this.createDashboardService
361
+ .checkDuplicateDashboardName(payload)
362
+ .subscribe((res) => {
363
+ if (!res) {
364
+ this.vLoader = false;
365
+ this.showRiskWidgets =
366
+ this.isManageRisk &&
367
+ this.showRiskCategory &&
368
+ (this.dashboardForm.selectedRiskCategories.length > 0 ||
369
+ this.dashboardForm.selectedResponsibilityCenters.length > 0)
370
+ ? true
371
+ : false;
372
+ this.showComplianceWidgets =
373
+ this.dashboardForm.selectedResponsibilityCategories.length >
374
+ 0 ||
375
+ this.dashboardForm.selectedResponsibilityCenters.length > 0
376
+ ? true
377
+ : false;
378
+ this.openConfigureWidgets = true;
379
+ }
380
+ else {
381
+ this.vLoader = false;
382
+ this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.', 'alert');
383
+ return;
384
+ }
385
+ }, (error) => {
386
+ this.vLoader = false;
387
+ console.error(error);
388
+ });
389
+ }
390
+ }
391
+ }
392
+ /**
393
+ * Fetches organization users count api to get total number of pages
394
+ * @param Url contains prams
395
+ */
396
+ getOrganizationUsersCount(Url) {
397
+ this.createDashboardService
398
+ .getOrganizationUsersCount(Url)
399
+ .subscribe((res) => {
400
+ this.totalList = res.total_members;
401
+ if (res.total_members && res.limit_per_page > 1) {
402
+ this.totalPages = res.create_page;
403
+ }
404
+ else {
405
+ this.totalPages = 1;
406
+ }
407
+ });
408
+ }
409
+ /**
410
+ * Get users list by making api call and pre selects all admins by adding to viewers
411
+ * @param url contains query params for organization users api
412
+ */
413
+ getUsersList(url) {
414
+ this.createDashboardService.getAllUsers().subscribe((res) => {
415
+ this.usersList = res;
416
+ this.userListLoaded = true;
417
+ if (this.mode === 'EDIT') {
418
+ this.vLoader = true;
419
+ }
420
+ else {
421
+ this.dashboardForm.selectedViewers = this.setList(this.usersList, [this.createdBy], 'member_id');
422
+ this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
423
+ this.vLoader = false;
424
+ }
425
+ });
426
+ }
427
+ getGroupList() {
428
+ this.createDashboardService.getAllGroups().subscribe((res) => {
429
+ this.totalgroups = res.total_items;
430
+ this.groupList = res.data;
431
+ this.userListLoaded = true;
432
+ if (this.mode === 'EDIT') {
433
+ this.vLoader = true;
434
+ }
435
+ else {
436
+ this.dashboardForm.selectedGroup = this.setList(this.groupList, [this.createdBy], 'group_id');
437
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
438
+ this.vLoader = false;
439
+ }
440
+ });
441
+ }
442
+ getComplianceCategoryList() {
443
+ this.createDashboardService
444
+ .getComplianceCategoriesListFromGlobal()
445
+ .subscribe((res) => {
446
+ const data = res;
447
+ this.allComplianceCategories = Object.assign(res);
448
+ // cloneDeep(res);
449
+ data.forEach((element) => {
450
+ if (element && element.compliance_type == 0) {
451
+ this.responsibilityCategoriesTree.others.list.push(element);
452
+ }
453
+ if (element && element.compliance_type == 1) {
454
+ this.responsibilityCategoriesTree.regulations.list.push(element);
455
+ }
456
+ if (element && element.compliance_type == 2) {
457
+ this.responsibilityCategoriesTree.standards.list.push(element);
458
+ }
459
+ if (element && element.compliance_type == 3) {
460
+ this.responsibilityCategoriesTree.internalControls.list.push(element);
461
+ }
462
+ });
463
+ this.complianceCategoriesListLoaded = true;
464
+ }, (err) => {
465
+ console.error(err);
466
+ this.complianceCategoriesListLoaded = true;
467
+ });
468
+ }
469
+ getCategoryList() {
470
+ this.createDashboardService.getCategoryList().subscribe((res) => {
471
+ this.riskCategoryList.strategic.list = res.strategic_arr;
472
+ this.riskCategoryList.operational.list = res.operational_arr;
473
+ this.riskCategoryList.compliance.list = res.compliance_arr;
474
+ this.riskCategoryList.others.list = res.others_arr;
475
+ this.riskCategoryListLoaded = true;
476
+ this.allRiskCategories = [
477
+ ...new Set(this.allRiskCategories.concat(res.strategic_arr, res.operational_arr, res.compliance_arr, res.others_arr)),
478
+ ];
479
+ }, (err) => {
480
+ console.error(err);
481
+ this.riskCategoryListLoaded = true;
482
+ });
483
+ }
484
+ /**
485
+ * It is to ensure whether all required lists on Policy from is loaded from the api call or not
486
+ */
487
+ checkWhetherAllListsLoaded() {
488
+ if (this.rcListLoaded &&
489
+ this.complianceCategoriesListLoaded &&
490
+ this.riskCategoryListLoaded &&
491
+ this.userListLoaded) {
492
+ if (this.mode === 'EDIT') {
493
+ this.editDashboard();
494
+ }
495
+ else {
496
+ this.vLoader = false;
497
+ }
498
+ }
499
+ else {
500
+ setTimeout(() => {
501
+ this.checkWhetherAllListsLoaded();
502
+ }, 300);
503
+ }
504
+ }
505
+ setSelectedWidgets(data) {
506
+ if (this.mode === 'CREATE') {
507
+ const widgetsArray = [];
508
+ data.forEach((element) => {
509
+ let obj = {};
510
+ obj.module_name = element.module;
511
+ obj._id = '';
512
+ obj.widget_name = element.title;
513
+ obj.widget_code = element.id;
514
+ obj.sub_widgets = [];
515
+ obj.state = 'ACTIVE';
516
+ if (element.subWidgets.length > 0) {
517
+ element.subWidgets.forEach((subWidget) => {
518
+ let subWidgetObject = {};
519
+ subWidgetObject._id = '';
520
+ subWidgetObject.widget_name = subWidget.title;
521
+ subWidgetObject.widget_code = subWidget.id;
522
+ subWidgetObject.state = subWidget.value ? 'ACTIVE' : 'INACTIVE';
523
+ obj.sub_widgets.push(Object.assign(subWidgetObject));
524
+ });
525
+ }
526
+ widgetsArray.push(obj);
527
+ });
528
+ this.dashboardForm.configureWidget = widgetsArray;
529
+ }
530
+ else if (this.mode === 'EDIT') {
531
+ const widgetsArray = [];
532
+ data.forEach((element) => {
533
+ if (!this.extractWidgetCodes(this.dashboardForm.configureWidget).includes(element.id)) {
534
+ let obj = {};
535
+ obj.module_name = element.module;
536
+ obj._id = '';
537
+ obj.widget_name = element.title;
538
+ obj.widget_code = element.id;
539
+ obj.sub_widgets = [];
540
+ obj.state = 'ACTIVE';
541
+ if (element.subWidgets.length > 0) {
542
+ element.subWidgets.forEach((subWidget) => {
543
+ let subWidgetObject = {};
544
+ subWidgetObject._id = '';
545
+ subWidgetObject.widget_name = subWidget.title;
546
+ subWidgetObject.widget_code = subWidget.id;
547
+ subWidgetObject.state = subWidget.value ? 'ACTIVE' : 'INACTIVE';
548
+ obj.sub_widgets.push(subWidgetObject);
549
+ });
550
+ }
551
+ this.dashboardForm.configureWidget.push(obj);
552
+ }
553
+ else {
554
+ const index = this.selectedWidgets.findIndex((ele) => ele.widget_code == element.id);
555
+ if (index != -1) {
556
+ this.selectedWidgets[index].state = 'ACTIVE';
557
+ if (this.selectedWidgets[index].sub_widgets.length > 0) {
558
+ this.selectedWidgets[index].sub_widgets.forEach((subWidgetData) => {
559
+ const elementIndex = element.subWidgets.findIndex((ele) => ele.id == subWidgetData.widget_code);
560
+ if (elementIndex != -1) {
561
+ subWidgetData.state = element.subWidgets[elementIndex].value
562
+ ? 'ACTIVE'
563
+ : 'INACTIVE';
564
+ }
565
+ });
566
+ }
567
+ }
568
+ }
569
+ });
570
+ this.dashboardForm.configureWidget.forEach((savedWidget) => {
571
+ const index = data.findIndex((dataElement) => dataElement.id == savedWidget.widget_code);
572
+ if (index == -1) {
573
+ savedWidget.state = 'INACTIVE';
574
+ if (savedWidget.sub_widgets.length > 0) {
575
+ savedWidget.sub_widgets.forEach((saveSubWidget) => {
576
+ saveSubWidget.state = 'INACTIVE';
577
+ });
578
+ }
579
+ }
580
+ });
581
+ }
582
+ this.selectedWidgets = data;
583
+ this.openConfigureWidgets = false;
584
+ this.submitDashboard();
585
+ }
586
+ extractWidgetCodes(widgets) {
587
+ const widgetCodes = [];
588
+ widgets?.forEach((widget) => {
589
+ if (widget?.widget_code) {
590
+ widgetCodes.push(widget?.widget_code);
591
+ }
592
+ });
593
+ return widgetCodes;
594
+ }
595
+ closeConfigureWidgets(event) {
596
+ this.openConfigureWidgets = event;
597
+ }
598
+ /**
599
+ * Filter list user's list based on pagination by making api call
600
+ * @param event specifies a boolean value to call api
601
+ */
602
+ paginationFilter(event) {
603
+ if (event) {
604
+ this.getUsersList({
605
+ p: this.paginationService.currentPage === 1
606
+ ? ''
607
+ : this.paginationService.currentPage,
608
+ type: 'all_except_executive',
609
+ q: !this.paginationService.searchValue
610
+ ? ''
611
+ : this.paginationService.searchValue,
612
+ });
613
+ }
614
+ }
615
+ getRCList() {
616
+ this.createDashboardService.getResponsibilityCenterList().subscribe((res) => {
617
+ this.responsibilityCentersList = res;
618
+ this.rcListLoaded = true;
619
+ }, (err) => {
620
+ console.error(err);
621
+ this.rcListLoaded = true;
622
+ });
623
+ }
624
+ /**
625
+ * #### Description
626
+ *
627
+ * Returns the unique array of object based on unique key
628
+ * @param array
629
+ * @param key
630
+ * @returns
631
+ */
632
+ uniqueByProp(array, key) {
633
+ return Array.from(array
634
+ .reduce((acc, item) => (item && item[key] && acc.set(item[key], item), acc), new Map())
635
+ .values());
636
+ }
637
+ saveSelectedList(type, selectedItems) {
638
+ switch (type) {
639
+ case 'rc':
640
+ this.dashboardForm.selectedResponsibilityCenters = this.setList(this.responsibilityCentersList, selectedItems, 'item_id');
641
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
642
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
643
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
644
+ }
645
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
646
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
647
+ }
648
+ }
649
+ break;
650
+ case 'whoCanView':
651
+ this.dashboardForm.selectedViewers = this.uniqueByProp(selectedItems?.users, 'member_id');
652
+ this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
653
+ this.dashboardForm.selectedGroup = this.uniqueByProp(selectedItems?.groups, 'group_id');
654
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
655
+ break;
656
+ case 'responsibilityCategories':
657
+ this.dashboardForm.selectedResponsibilityCategories = selectedItems;
658
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
659
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
660
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
661
+ }
662
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
663
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
664
+ }
665
+ }
666
+ break;
667
+ case 'riskCategory':
668
+ this.dashboardForm.selectedRiskCategories = selectedItems;
669
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
670
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
671
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
672
+ }
673
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
674
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
675
+ }
676
+ }
677
+ break;
678
+ }
679
+ this.activateSelector('', false);
680
+ }
681
+ remove(type, event, removeIndex) {
682
+ switch (type) {
683
+ case 'rc':
684
+ const rcIndex = this.dashboardForm.selectedResponsibilityCenters.findIndex((rc) => rc.rc_id == event.rc_id);
685
+ if (rcIndex !== -1) {
686
+ const parentRc = this.dashboardForm.selectedResponsibilityCenters[rcIndex];
687
+ this.dashboardForm.selectedResponsibilityCenters.splice(rcIndex, 1);
688
+ if (parentRc?.item_child_ids?.length > 0) {
689
+ parentRc.item_child_ids.forEach((childElement) => {
690
+ const removeIndex = this.dashboardForm.selectedResponsibilityCenters.findIndex((removeElement) => removeElement.rc_id == childElement);
691
+ this.dashboardForm.selectedResponsibilityCenters.splice(removeIndex, 1);
692
+ });
693
+ }
694
+ }
695
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
696
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
697
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
698
+ }
699
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
700
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
701
+ }
702
+ }
703
+ break;
704
+ case 'whoCanView':
705
+ const reviewerIndex = this.dashboardForm.selectedViewers.findIndex((viewer) => viewer.member_id == event.member_id);
706
+ this.dashboardForm.selectedViewers.splice(reviewerIndex, 1);
707
+ break;
708
+ case 'whoCanViewGroup':
709
+ const groups = this.dashboardForm.selectedGroup.findIndex((ele) => ele?.group_id == event?.group_id);
710
+ this.dashboardForm.selectedGroup.splice(groups, 1);
711
+ break;
712
+ case 'responsibilityCategories':
713
+ const CCcategoryIndex = this.dashboardForm.selectedResponsibilityCategories.findIndex((CCcategory) => CCcategory.category_id == event.category_id);
714
+ this.dashboardForm.selectedResponsibilityCategories.splice(CCcategoryIndex, 1);
715
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
716
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
717
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
718
+ }
719
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
720
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
721
+ }
722
+ }
723
+ break;
724
+ case 'riskCategory':
725
+ const riskCategoryIndex = this.dashboardForm.selectedRiskCategories.findIndex((riskCategory) => riskCategory.category_id == event.category_id);
726
+ if (riskCategoryIndex !== -1) {
727
+ const parent = this.dashboardForm.selectedRiskCategories[riskCategoryIndex];
728
+ this.dashboardForm.selectedRiskCategories.splice(riskCategoryIndex, 1);
729
+ if (parent?.child_cat_ids?.length > 0) {
730
+ parent.child_cat_ids.forEach((childElement) => {
731
+ const removeIndex = this.dashboardForm.selectedRiskCategories.findIndex((removeElement) => removeElement.category_id == childElement);
732
+ this.dashboardForm.selectedRiskCategories.splice(removeIndex, 1);
733
+ });
734
+ }
735
+ }
736
+ this.dashboardForm.selectedRiskCategories.splice(riskCategoryIndex, 1);
737
+ if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
738
+ if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
739
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
740
+ }
741
+ else if (this.dashboardForm.selectedRiskCategories.length == 0) {
742
+ this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
743
+ }
744
+ }
745
+ break;
746
+ }
747
+ }
748
+ setList(list, ids, key) {
749
+ const data = [];
750
+ ids.forEach((element) => {
751
+ const index = list.findIndex((listElement) => listElement[key] == element);
752
+ if (index !== -1) {
753
+ data.push(list[index]);
754
+ }
755
+ });
756
+ return data;
757
+ }
758
+ submitted = false;
759
+ /**
760
+ * Returns id's from a particular list elements
761
+ * @param list actual selected list
762
+ * @param key contains key to extract id from the list
763
+ */
764
+ returnIds(list, key) {
765
+ return list?.map((ele) => {
766
+ if (ele[key]) {
767
+ return ele[key];
768
+ }
769
+ });
770
+ }
771
+ /**
772
+ * Validates the data submitted on create dashboard form
773
+ */
774
+ validateDashboard() {
775
+ setTimeout(() => {
776
+ this.submitted = true;
777
+ }, 100);
778
+ const event = this.dashboardForm.dashboardName;
779
+ const re = /&nbsp;|<br>/g;
780
+ this.dashboardForm.dashboardName = event.replace(re, '').trim();
781
+ const description = this.dashboardForm.dashboardDescriptionText;
782
+ this.dashboardForm.dashboardDescriptionText = description
783
+ .replace(re, '')
784
+ .trim();
785
+ if (!this.dashboardForm.dashboardName ||
786
+ this.dashboardForm.dashboardName.trim() == '' ||
787
+ this.dashboardForm.dashboardName.length > 30 ||
788
+ this.textCount.transform(this.dashboardForm?.dashboardDescriptionText) >
789
+ 250 ||
790
+ (this.dashboardForm?.selectedFromDate &&
791
+ !this.dashboardForm?.selectedToDate) ||
792
+ (this.dashboardForm.selectedResponsibilityCenters.length == 0 &&
793
+ this.dashboardForm.selectedResponsibilityCategories.length == 0 &&
794
+ this.dashboardForm.selectedRiskCategories.length == 0)) {
795
+ return false;
796
+ }
797
+ else {
798
+ return true;
799
+ }
800
+ }
801
+ /**
802
+ * Makes an api call to create a policy
803
+ * @param dashboard contains dashboardForm data
804
+ */
805
+ submitDashboard() {
806
+ this.submitted = false;
807
+ const valid = this.validateDashboard();
808
+ if (!valid) {
809
+ return false;
810
+ }
811
+ this.vLoader = true;
812
+ const dashboard = this.dashboardForm;
813
+ const payload = {
814
+ dashboard_name: dashboard.dashboardName,
815
+ description: [
816
+ {
817
+ content: dashboard.dashboardDescriptionText,
818
+ attachments: [],
819
+ },
820
+ ],
821
+ visible_to_users: this.returnIds(dashboard.selectedViewers, 'member_id'),
822
+ visible_to_groups: this.returnIds(dashboard.selectedGroup, 'group_id'),
823
+ responsibility_center: this.returnIds(dashboard.selectedResponsibilityCenters, 'item_id'),
824
+ responsibility_category: this.returnIds(dashboard.selectedResponsibilityCategories, 'category_id'),
825
+ risk_category: this.returnIds(dashboard.selectedRiskCategories, 'category_id'),
826
+ display_criteria: dashboard.displayCriteria === 'and'
827
+ ? 'BOTH_RC_AND_CATEGORY'
828
+ : 'RC_OR_CATEGORY',
829
+ timeframe: {
830
+ start_date: dashboard.selectedFromDate
831
+ ? this.getDateFormate(dashboard?.selectedFromDate)
832
+ : '',
833
+ end_date: dashboard.selectedToDate
834
+ ? this.getDateFormate(dashboard?.selectedToDate)
835
+ : '',
836
+ },
837
+ email_summary: this.setFrequency('', 'export'),
838
+ widget_details: dashboard.configureWidget,
839
+ };
840
+ if (this.mode == 'CREATE') {
841
+ this.createDashboardService.submitDashboard(payload).subscribe((res) => {
842
+ this.vLoader = false;
843
+ // this.snackBar.show('The dashboard has been created.','info');
844
+ this.isSmiley = true;
845
+ this.smileyMessage = 'The dashboard has been created.';
846
+ setTimeout(() => {
847
+ this.isSmiley = false;
848
+ this.close.emit({ mode: 'created', id: res._id });
849
+ }, 3000);
850
+ }, (err) => {
851
+ if (err.status === 409) {
852
+ this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.', 'alert');
853
+ this.vLoader = false;
854
+ }
855
+ else {
856
+ console.error(err);
857
+ this.vLoader = false;
858
+ this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
859
+ }
860
+ });
861
+ }
862
+ if (this.mode === 'EDIT') {
863
+ payload.widget_update_flag = true;
864
+ this.createDashboardService
865
+ .updateDashboard(this.dashboardId, payload)
866
+ .subscribe({
867
+ next: (res) => {
868
+ this.vLoader = false;
869
+ // this.snackBar.show('The dashboard has been updated','info');
870
+ this.isSmiley = true;
871
+ this.smileyMessage = 'The dashboard has been updated';
872
+ setTimeout(() => {
873
+ this.isSmiley = false;
874
+ this.close.emit({ mode: 'updated' });
875
+ }, 3000);
876
+ },
877
+ error: (error) => {
878
+ console.error(error);
879
+ this.vLoader = false;
880
+ this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
881
+ },
882
+ });
883
+ }
884
+ }
885
+ editDashboard() {
886
+ if (this.dashboardId) {
887
+ this.createDashboardService.fetchDashboard(this.dashboardId).subscribe((res) => {
888
+ const data = res;
889
+ this.listDetails.nonRemovableUsersList = [res.created_by];
890
+ data.visible_to_groups =
891
+ data?.visible_to_groups && data.visible_to_groups.length
892
+ ? data.visible_to_groups
893
+ : [];
894
+ this.populateDashboardForm(data);
895
+ }, (error) => {
896
+ console.error(error);
897
+ });
898
+ }
899
+ }
900
+ populateDashboardForm(data) {
901
+ try {
902
+ (this.dashboardForm.dashboardName = data?.dashboard_name),
903
+ (this.dashboardForm.dashboardDescriptionText =
904
+ data?.description[0]?.content ?? ''),
905
+ (this.dashboardForm.selectedViewers = this.setList(this.usersList, data?.visible_to_users, 'member_id'));
906
+ this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
907
+ data.visible_to_groups =
908
+ data?.visible_to_groups && data?.visible_to_groups.length
909
+ ? data?.visible_to_groups
910
+ : [];
911
+ this.dashboardForm.selectedGroup = this.setList(this.groupList, data?.visible_to_groups ?? [], 'group_id');
912
+ this.listDetails.selectedGroupList = this.dashboardForm.selectedGroup;
913
+ this.dashboardForm.selectedResponsibilityCenters = this.setList(this.responsibilityCentersList, data?.responsibility_center, 'item_id');
914
+ this.dashboardForm.selectedResponsibilityCategories = this.setList(this.allComplianceCategories, data?.responsibility_category, 'category_id');
915
+ this.dashboardForm.selectedRiskCategories = this.setList(this.allRiskCategories, data?.risk_category, 'category_id');
916
+ this.dashboardForm.displayCriteria =
917
+ data?.display_criteria === 'BOTH_RC_AND_CATEGORY' ? 'and' : 'or';
918
+ this.dashboardForm.selectedFromDate = data?.timeframe?.start_date
919
+ ? new Date(data?.timeframe?.start_date)
920
+ : undefined;
921
+ this.dashboardForm.selectedToDate = data?.timeframe?.end_date
922
+ ? new Date(data?.timeframe?.end_date)
923
+ : undefined;
924
+ this.vLoader = false;
925
+ this.dashboardForm.configureWidget = data.widget_details;
926
+ this.selectedWidgets =
927
+ data.widget_details.length > 0 ? [...new Set(data.widget_details)] : [];
928
+ this.displayedWidgets =
929
+ data.all_widgets.length > 0 ? [...new Set(data.all_widgets)] : [];
930
+ this.setFrequency(data?.email_summary, 'import');
931
+ let minToDate = this.setToDate(data?.timeframe?.start_date);
932
+ this.toDatePickerConfig = { min: minToDate };
933
+ this.hideToDate = true;
934
+ setTimeout(() => {
935
+ this.hideToDate = false;
936
+ }, 20);
937
+ }
938
+ catch (error) {
939
+ console.error('populate dashboard error =>', error);
940
+ }
941
+ }
942
+ setFrequency(event, mode) {
943
+ if (mode === 'export') {
944
+ switch (this.dashboardForm.selectedFrequencyType) {
945
+ case 'weekly':
946
+ const weeklyValueData = this.dashboardForm?.selectedFrequencies?.map((ele) => Number(ele) + 1);
947
+ const weeklyValue = weeklyValueData?.join();
948
+ return '2~' + weeklyValue + '~0~0';
949
+ case 'monthly':
950
+ const monthlyValueData = this.dashboardForm?.selectedFrequencies?.map((ele) => Number(ele) + 1);
951
+ const monthlyValue = monthlyValueData?.join();
952
+ return ('3~' + this.dashboardForm?.frequencyDate + '~' + monthlyValue + '~0');
953
+ case 'quarterly':
954
+ const quarterlyValueData = Number(this.dashboardForm.selectedFrequencies) + 1;
955
+ return ('7~' +
956
+ this.dashboardForm.frequencyDate +
957
+ '~' +
958
+ quarterlyValueData +
959
+ '~0');
960
+ }
961
+ }
962
+ if (mode === 'import') {
963
+ const val = event.split('~');
964
+ switch (val[0]) {
965
+ case '2':
966
+ {
967
+ let stringVal = 'Every ';
968
+ this.dashboardForm.selectedFrequencyType = 'weekly';
969
+ this.dashboardForm.selectedFrequencies = val[1]
970
+ ?.split(',')
971
+ ?.map((element) => Number(element) - 1);
972
+ this.dashboardForm.selectedFrequencies?.forEach((dayIndex, index) => {
973
+ stringVal +=
974
+ index === 0
975
+ ? this.dayNames[dayIndex]
976
+ : ', ' + this.dayNames[dayIndex];
977
+ });
978
+ this.dashboardForm.frequencyMessage = stringVal;
979
+ }
980
+ break;
981
+ case '3':
982
+ {
983
+ let stringVal = 'every ';
984
+ this.dashboardForm.selectedFrequencyType = 'monthly';
985
+ this.dashboardForm.frequencyDate = val[1];
986
+ this.dashboardForm.selectedFrequencies = val[2]
987
+ ?.split(',')
988
+ ?.map((element) => Number(element) - 1);
989
+ this.dashboardForm.selectedFrequencies.forEach((monthIndex, index) => {
990
+ stringVal +=
991
+ index === 0
992
+ ? this.monthNames[monthIndex]
993
+ : ', ' + this.monthNames[monthIndex];
994
+ });
995
+ let monthDateName;
996
+ if (this.dashboardForm.frequencyDate == '1') {
997
+ monthDateName = '1st';
998
+ }
999
+ else if (this.dashboardForm.frequencyDate == '2') {
1000
+ monthDateName = '2nd';
1001
+ }
1002
+ else if (this.dashboardForm.frequencyDate == '3') {
1003
+ monthDateName = '3rd';
1004
+ }
1005
+ else {
1006
+ monthDateName = this.dashboardForm.frequencyDate + 'th';
1007
+ }
1008
+ this.dashboardForm.frequencyMessage =
1009
+ monthDateName + ' of ' + stringVal;
1010
+ }
1011
+ break;
1012
+ case '7':
1013
+ {
1014
+ let stringVal = 'every ';
1015
+ this.dashboardForm.selectedFrequencyType = 'quarterly';
1016
+ this.dashboardForm.frequencyDate = val[1];
1017
+ this.dashboardForm.selectedFrequencies =
1018
+ Number(val[2].split(',')[0]) - 1;
1019
+ stringVal += this.quarters[this.dashboardForm.selectedFrequencies];
1020
+ let monthDateName;
1021
+ if (this.dashboardForm.frequencyDate == '1') {
1022
+ monthDateName = '1st';
1023
+ }
1024
+ else if (this.dashboardForm.frequencyDate == '2') {
1025
+ monthDateName = '2nd';
1026
+ }
1027
+ else if (this.dashboardForm.frequencyDate == '3') {
1028
+ monthDateName = '3rd';
1029
+ }
1030
+ else {
1031
+ monthDateName = this.dashboardForm.frequencyDate + 'th';
1032
+ }
1033
+ this.dashboardForm.frequencyMessage =
1034
+ monthDateName + ' of ' + stringVal;
1035
+ }
1036
+ break;
1037
+ }
1038
+ }
1039
+ }
1040
+ ngAfterViewChecked() {
1041
+ //your code to update the model
1042
+ this.cdr.detectChanges();
1043
+ }
1044
+ setPermission(roleActions) {
1045
+ let ifExistRisk = roleActions?.find((el) => el.moduleName == 'risk');
1046
+ ifExistRisk?.subModule?.forEach((module) => {
1047
+ module?.permissions?.forEach((permission) => {
1048
+ switch (permission?.code) {
1049
+ case 'RRMR': {
1050
+ if (permission?.defaultPermission == 1 || permission?.enable == 1) {
1051
+ this.isManageRisk = true;
1052
+ }
1053
+ break;
1054
+ }
1055
+ }
1056
+ });
1057
+ });
1058
+ }
1059
+ documentClick(event) {
1060
+ const targetElement = event?.target;
1061
+ const fromDateInputElement = document.getElementById(this.openedDatePicker.toLowerCase()) || null;
1062
+ const datePickerCalendarContainer = document.getElementsByClassName('dp-day-calendar-container')[0];
1063
+ const monthYearElement = document.querySelector('.dp-month-calendar-container');
1064
+ const isNotMonthYearElement = !monthYearElement?.contains(targetElement);
1065
+ const openedElement = this.openedDatePicker === 'FROM_DATE'
1066
+ ? this.fromDatePickerPopup
1067
+ : this.toDatePickerPopup;
1068
+ const isOutsideFromDateInput = !openedElement?.nativeElement?.contains(targetElement);
1069
+ const isNotFromDateElement = event?.target !== fromDateInputElement;
1070
+ const isNotInsideCalendar = !datePickerCalendarContainer?.contains(targetElement);
1071
+ const selectedDatePicker = this.openedDatePicker === 'FROM_DATE'
1072
+ ? this.fromDatePicker
1073
+ : this.toDatePicker;
1074
+ const isNotCalendarMonth = !targetElement.className.includes('dp-calendar-month');
1075
+ if (isOutsideFromDateInput &&
1076
+ isNotFromDateElement &&
1077
+ isNotInsideCalendar &&
1078
+ isNotCalendarMonth &&
1079
+ isNotMonthYearElement &&
1080
+ datePickerCalendarContainer) {
1081
+ this.documentClickListener(event.target, openedElement, selectedDatePicker);
1082
+ }
1083
+ }
1084
+ documentClickListener(target, openedElements, selectedDatePicker) {
1085
+ if (!openedElements?.nativeElement?.contains(target) &&
1086
+ selectedDatePicker?.areCalendarsShown) {
1087
+ selectedDatePicker?.api?.close();
1088
+ this.datePickerOverlay = false;
1089
+ }
1090
+ }
1091
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardComponent, deps: [{ token: i1.CreateDashboardService }, { token: i2.PaginationService }, { token: i0.ChangeDetectorRef }, { token: i3.SnackBarService }, { token: i4.PopoverService }, { token: i5.ConfigureWidgetsService }, { token: i6.TextCountPipe }], target: i0.ɵɵFactoryTarget.Component });
1092
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateDashboardComponent, selector: "app-create-dashboard", inputs: { feature: "feature", mode: "mode", dashboardId: "dashboardId", createdBy: "createdBy", configureWidget: "configureWidget" }, outputs: { close: "close" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)", "document:click": "documentClick($event)" } }, providers: [TextCountPipe], viewQueries: [{ propertyName: "fromDatePicker", first: true, predicate: ["fromDatePicker"], descendants: true }, { propertyName: "toDatePicker", first: true, predicate: ["toDatePicker"], descendants: true }, { propertyName: "fromDatePickerPopup", first: true, predicate: ["fromDatePicker"], descendants: true, read: ElementRef }, { propertyName: "toDatePickerPopup", first: true, predicate: ["toDatePicker"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<app-snack-bar></app-snack-bar>\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\n <div\n class=\"create-dashboard-container vx-d-flex vx-justify-end\"\n [class.animate-slideInRight]=\"animation\"\n >\n <div\n class=\"more-option\"\n *ngIf=\"activeSelector && activeSelector !== 'name'\"\n >\n <app-user-list\n *ngIf=\"activeSelector === 'whoCanView'\"\n (saveSelectedUsers)=\"saveSelectedList('whoCanView', $event)\"\n (closeUserList)=\"activateSelector('', false)\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n [listDetails]=\"listDetails\"\n [totalgroupscount]=\"totalgroups\"\n [feature]=\"feature\"\n ></app-user-list>\n <app-responsibility-center\n *ngIf=\"activeSelector === 'rcList'\"\n [responsibilityCentersList]=\"responsibilityCentersList\"\n [radioSelection]=\"false\"\n [selectedResponsibilityCenters]=\"\n dashboardForm.selectedResponsibilityCenters\n \"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"activateSelector('', false)\"\n >\n </app-responsibility-center>\n <app-categories\n *ngIf=\"activeSelector === 'responsibilityCategories'\"\n [categoryList]=\"responsibilityCategoriesTree\"\n [allCategories]=\"allComplianceCategories\"\n [categoryIdKey]=\"'category_id'\"\n [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\n (saveSelectedCategory)=\"\n saveSelectedList('responsibilityCategories', $event)\n \"\n (closeCategoriesList)=\"activateSelector('', false)\"\n ></app-categories>\n <app-risk-categories\n *ngIf=\"activeSelector === 'riskCategories'\"\n [categoryList]=\"riskCategoryList\"\n [allCategories]=\"allRiskCategories\"\n [categoryIdKey]=\"'category_id'\"\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\n (saveSelectedCategory)=\"saveSelectedList('riskCategory', $event)\"\n (closeCategoriesList)=\"activateSelector('', false)\"\n ></app-risk-categories>\n\n <app-frequency\n *ngIf=\"activeSelector === 'frequency'\"\n (closeFrequencyPopup)=\"activateSelector('', false)\"\n (saveFrequency)=\"saveFrequency($event)\"\n [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\n [selectedDate]=\"dashboardForm.frequencyDate\"\n [savedFrequencies]=\"dashboardForm.selectedFrequencies\"\n >\n </app-frequency>\n </div>\n <div\n class=\"vx-dialog-container side-dialog\"\n [class.tablet-width]=\"activeSelector && activeSelector !== 'name'\"\n >\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n\n <div class=\"form-group\" [class.disabled]=\"disabled\">\n <div\n class=\"vx-dialog-body-container\"\n (scroll)=\"animateImage()\"\n [class.hidden-scroll]=\"popoverService.stopScroll\"\n >\n <!-- Dashboard Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n [ngSrc]=\"ASSETS.dashBoardIcon\"\n *ngIf=\"\n !dashboardForm.dashboardName || activeSelector === 'name'\n \"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n class=\"checkIcon\"\n *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Dashboard Name\n <span class=\"require vx-txt-red vx-fs-16 vx-fw-400\"\n >*</span\n ></label\n >\n <div class=\"vx-input-group\">\n <input\n class=\"textField\"\n placeholder=\"Add dashboard name (Max limit: 30 characters).\"\n [(ngModel)]=\"dashboardForm.dashboardName\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n (focusout)=\"activateSelector('name', false)\"\n />\n\n <span\n class=\"counter\"\n *ngIf=\"dashboardForm?.dashboardName?.length > 0\"\n >{{ 30 - dashboardForm.dashboardName.length }}</span\n >\n </div>\n\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n (dashboardForm?.dashboardName?.length > 30 ||\n !dashboardForm?.dashboardName)\n \"\n >\n {{\n dashboardForm.dashboardName.length > 30\n ? \"You have exceeded the maximum character limit of 30 characters.\"\n : \"Please enter a name for this Dashboard.\"\n }}\n </p>\n\n <div class=\"vx-input-group vx-mt-2\">\n <vcomply-editor\n [editorConfig]=\"dashboardDescription\"\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"\n ></vcomply-editor>\n <span\n class=\"counter\"\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\"\n >{{\n 250 -\n (dashboardForm?.dashboardDescriptionText | textCount)\n }}</span\n >\n </div>\n\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n (dashboardForm?.dashboardDescriptionText | textCount) > 250\n \"\n >\n You have exceeded the maximum character limit of 250\n characters.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'whoCanView'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'whoCanView' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n [ngSrc]=\"ASSETS.dashBoardUsersIcon\"\n *ngIf=\"\n dashboardForm?.selectedViewers?.length == 0 ||\n activeSelector === 'whoCanView'\n \"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n class=\"checkIcon\"\n *ngIf=\"\n dashboardForm?.selectedViewers?.length > 0 &&\n activeSelector !== 'whoCanView'\n \"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Who can view this dashboard?<span\n class=\"require vx-txt-red vx-fs-16 vx-fw-400\"\n >*</span\n ></label\n >\n <div\n *ngIf=\"dashboardForm?.selectedViewers?.length == 0\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('whoCanView', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Who can view this dashboard?\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm?.selectedViewers?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <ng-container *ngIf=\"!groupsEnabled\" id=\"onlyuserslist\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let user of dashboardForm?.selectedViewers?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n user.member_id\n )\n \"\n (click)=\"remove('whoCanView', user)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"user.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ user.member_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedViewers?.length > 1 &&\n !groupsEnabled\n \"\n class=\"countBtn greenBg vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"userList.popover()\"\n placement=\"left\"\n >\n +{{ dashboardForm?.selectedViewers?.slice(1).length }}\n </button>\n </div>\n <app-popover #userList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of dashboardForm?.selectedViewers\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"user?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n user.member_id\n ) && !groupsEnabled\n \"\n (click)=\"remove('whoCanView', user)\"\n >&#xe90d;</i\n >\n {{ user?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n\n <div *ngIf=\"groupsEnabled\" class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\"\n >USER(S)</span\n >\n <button\n class=\"countBtn greenBg vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ dashboardForm?.selectedViewers?.length }}\n </button>\n </div>\n <span\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n dashboardForm?.selectedGroup?.length &&\n dashboardForm?.selectedViewers?.length\n \"\n >&</span\n >\n <div\n *ngIf=\"dashboardForm?.selectedGroup?.length\"\n id=\"usersandgroups\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\"\n >USER GROUP(S)</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"right\"\n >\n {{ dashboardForm?.selectedGroup?.length }}\n </button>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let data of dashboardForm?.selectedViewers\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"data.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n data.member_id\n )\n \"\n (click)=\"remove('whoCanView', data)\"\n >&#xe90d;</i\n >\n {{ data.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of dashboardForm?.selectedGroup\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"data.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('whoCanViewGroup', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'whoCanView'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('whoCanView', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'rcList'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rcList' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length == 0 ||\n activeSelector === 'rcList'\n \"\n [ngSrc]=\"ASSETS.dashBoardRcIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 0 &&\n activeSelector !== 'rcList'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >RESPONSIBILITY CENTER(S)</label\n >\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length == 0\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('rcList', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Responsibility Center(s) that you would like<br />displayed\n in the Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 0\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let rc of dashboardForm?.selectedResponsibilityCenters?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 1\n \"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedResponsibilityCenters?.slice(1)\n .length\n }}\n </button>\n\n <app-popover #rcList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of dashboardForm?.selectedResponsibilityCenters\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"rc?.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('rc', rc)\"\n >&#xe90d;</i\n >\n {{ rc?.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'rcList'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('rcList', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'responsibilityCategories'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityCategories' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 || activeSelector === 'responsibilityCategories'\n \"\n [ngSrc]=\"ASSETS.dashBoardProgramIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length > 0 &&\n activeSelector !== 'responsibilityCategories'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >PROGRAM</label\n >\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length == 0\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('responsibilityCategories', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Program(s) that you would like displayed in\n the<br />Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length > 0\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('responsibilityCategories', rCategory)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"rCategory.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rCategory.item_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories\n ?.length > 1\n \"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rCategoryList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedResponsibilityCategories?.slice(\n 1\n ).length\n }}\n </button>\n\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rCategory of dashboardForm?.selectedResponsibilityCategories\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"rCategory?.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"\n remove(\n 'responsibilityCategories',\n rCategory\n )\n \"\n >&#xe90d;</i\n >\n {{ rCategory?.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'responsibilityCategories'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('responsibilityCategories', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Risk Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'riskCategories'\"\n *ngIf=\"showRiskCategory && isManageRisk\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCategories' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedRiskCategories?.length == 0 ||\n activeSelector === 'riskCategories'\n \"\n [ngSrc]=\"ASSETS.dashBoardRiskIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedRiskCategories?.length > 0 &&\n activeSelector !== 'riskCategories'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\" *ngIf=\"isManageRisk\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >RISK CATEGORIES</label\n >\n <div\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length == 0\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('riskCategories', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Risk Categories that you would like displayed<br />in\n the Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let riskCategory of dashboardForm?.selectedRiskCategories?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('riskCategory', riskCategory)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"riskCategory.category_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ riskCategory.category_name }}</span\n >\n <button\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"riskList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedRiskCategories?.slice(1).length\n }}\n </button>\n\n <app-popover #riskList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let riskCategory of dashboardForm?.selectedRiskCategories\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"riskCategory?.category_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('riskCategory', riskCategory)\"\n >&#xe90d;</i\n >\n {{ riskCategory?.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'riskCategories'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('riskCategories', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Display Criteria -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n *ngIf=\"dashboardForm?.displayCriteria?.length == 0\"\n [ngSrc]=\"ASSETS.dashBoardUsersIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"dashboardForm?.displayCriteria?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >DISPLAY CRITERIA</label\n >\n <div class=\"radio-group\" *ngIf=\"showCriteria\">\n <app-cs-radio\n [checked]=\"dashboardForm.displayCriteria == 'or'\"\n (checkedEvent)=\"dashboardForm.displayCriteria = 'or'\"\n >\n Those Items that have been assigned to either the selected\n Responsibility Center(s) or the selected\n Categories.</app-cs-radio\n >\n\n <app-cs-radio\n [checked]=\"dashboardForm.displayCriteria == 'and'\"\n (checkedEvent)=\"dashboardForm.displayCriteria = 'and'\"\n >\n Those Items that have been assigned to both the selected\n Responsibility Center(s) and the selected\n Categories.</app-cs-radio\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Timeframe -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n !dashboardForm?.selectedFromDate ||\n !dashboardForm?.selectedToDate\n \"\n [ngSrc]=\"ASSETS.dashBoardTimeFrameIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedFromDate &&\n dashboardForm?.selectedToDate\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >TIMEFRAME</label\n >\n <label class=\"vx-control-panel-sub-label\"\n >Select how long you would like the information selected to be\n displayed for. If no timeframe is selected, the information\n will be displayed permanently.</label\n >\n <div class=\"input-group vx-d-flex vx-justify-between\">\n <div class=\"date-select\">\n <i class=\"icons\">&#xe92d;</i>\n <input\n type=\"text\"\n id=\"from_date\"\n [value]=\"\n dashboardForm?.selectedFromDate | date : 'dd MMM yyyy'\n \"\n [placeholder]=\"'From'\"\n (click)=\"openFromDatePicker()\"\n readonly\n />\n <dp-date-picker\n #fromDatePicker\n [(ngModel)]=\"dashboardForm.selectedFromDate\"\n placeholder=\"Select Date\"\n (onSelect)=\"\n closeFromDatePicker(); datePickerOverlay = false\n \"\n [config]=\"fromDatePickerConfig\"\n ></dp-date-picker>\n <div\n class=\"overlay\"\n (click)=\"closeFromDatePicker()\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n <div\n class=\"date-select\"\n *ngIf=\"!hideToDate\"\n [class.disabled]=\"!dashboardForm?.selectedFromDate\"\n >\n <i class=\"icons\">&#xe92d;</i>\n <input\n type=\"text\"\n id=\"to_date\"\n [value]=\"\n dashboardForm?.selectedToDate | date : 'dd MMM yyyy'\n \"\n [placeholder]=\"'To'\"\n (click)=\"openToDatePicker()\"\n readonly\n />\n <dp-date-picker\n #toDatePicker\n [(ngModel)]=\"dashboardForm.selectedToDate\"\n placeholder=\"Select Date\"\n (onSelect)=\"\n closeToDatePicker(); datePickerOverlay = false\n \"\n [config]=\"toDatePickerConfig\"\n ></dp-date-picker>\n <div\n class=\"overlay\"\n (click)=\"closeToDatePicker()\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n dashboardForm.selectedFromDate &&\n !dashboardForm.selectedToDate\n \"\n >\n Select a time-frame.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Email Summary -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"!dashboardForm.frequencyMessage\"\n [ngSrc]=\"ASSETS.dashBoardEmailSummariesIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"dashboardForm.frequencyMessage\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Email Summaries</label\n >\n <label class=\"vx-control-panel-sub-label\"\n >If you would like to send a summary of this Dashboard, please\n select a frequency(By default VComply sends a weekly\n Summary).</label\n >\n <div\n *ngIf=\"!dashboardForm.frequencyMessage\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Email Summaries\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm.frequencyMessage\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [arTooltip]=\"dashboardForm.frequencyMessage\"\n placement=\"bottom-left\"\n type=\"black\"\n delay=\"0\"\n [tooltipMandatory]=\"false\"\n [innerHTML]=\"dashboardForm.frequencyMessage\"\n ></div>\n\n <button\n *ngIf=\"\n dashboardForm.frequencyMessage &&\n activeSelector !== 'frequency'\n \"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"button-block\">\n <button\n class=\"vx-btn block primary\"\n [disabled]=\"activeSelector && activeSelector !== 'name'\"\n (click)=\"configureDashboard()\"\n >\n Next: Configure Widgets\n </button>\n </div>\n </div>\n\n <button\n class=\"close-dialog\"\n type=\"button\"\n [disabled]=\"activeSelector && activeSelector !== 'name'\"\n (click)=\"close.emit({ mode: 'discard' })\"\n [arTooltip]=\"'[Esc] to close'\"\n placement=\"left\"\n type=\"black\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n [class.hide]=\"activeSelector && activeSelector !== 'name'\"\n >\n <i class=\"icons\">&#xe93f;</i>\n </button>\n <div\n class=\"global-confirmation-alert\"\n *ngIf=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length == 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div class=\"global-confirmation-alert-top\">\n <span class=\"icon-block\">\n <i class=\"icons\">&#xe930;</i>\n </span>\n <p class=\"text\" *ngIf=\"showRiskCategory\">\n Select a Responsibility Center, Program or Risk Category.\n </p>\n <p class=\"text\" *ngIf=\"!showRiskCategory\">\n Select a Responsibility Center or Program.\n </p>\n </div>\n <div class=\"global-confirmation-alert-bottom\">\n <p class=\"message\"></p>\n <div class=\"button-group\">\n <button class=\"fill\" type=\"button\" (click)=\"submitted = false\">\n OKAY\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<app-smiley-dialog\n *ngIf=\"isSmiley\"\n [message]=\"smileyMessage\"\n></app-smiley-dialog>\n\n<app-configure-widgets\n *ngIf=\"openConfigureWidgets\"\n [mode]=\"mode\"\n [displayedWidgets]=\"displayedWidgets\"\n [showRisk]=\"showRiskWidgets\"\n [showCompliance]=\"showComplianceWidgets\"\n [selectedWidgetsData]=\"selectedWidgets\"\n (widgetsDataModified)=\"setSelectedWidgets($event)\"\n (closeConfigureWidgets)=\"closeConfigureWidgets($event)\"\n></app-configure-widgets>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@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/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.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-right.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/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-right.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/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161b2fcc}::ng-deep .create-dashboard-container .vx-dialog-container{background-color:#fff;border:none;position:relative}@media screen and (max-width: 1280px){::ng-deep .create-dashboard-container .vx-dialog-container.tablet-width{width:28px!important}::ng-deep .create-dashboard-container .vx-dialog-container.tablet-width .form-group .vx-dialog-body-container{overflow:hidden}}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:8px;right:8px;height:32px;width:32px;font-size:16px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:2px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog:hover{background:#f1f1f1}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}@media screen and (max-width: 1280px){::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog.hide{display:none}}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #f1f1f1;float:left}@media screen and (max-width: 1280px){::ng-deep .create-dashboard .more-option{width:calc(100vw - 28px)}::ng-deep .create-dashboard .more-option app-user-list .user-list{right:28px}::ng-deep .create-dashboard .more-option app-responsibility-center .responsibility-center{right:28px}::ng-deep .create-dashboard .more-option app-categories .category-list{right:28px}::ng-deep .create-dashboard .more-option app-risk-categories .risk-category-list{right:28px}::ng-deep .create-dashboard .more-option app-frequency .create-frequency{right:28px}}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .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}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .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}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+vcomply-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover .custom-input{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #f1f1f1;border-radius:2px;background:#fff;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-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 .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count{background:#1e5dd3;border-radius:20px;color:#fff;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group vcomply-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group vcomply-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form 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 .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form 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 .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #dbdbdb;background:#fff;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group 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 .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled input{background:#f1f1f1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:none;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,#fff0,#ffffffbf 22%,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{font-size:13px!important;letter-spacing:1.3px!important;height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{background:#f1f1f1!important;border-color:#f1f1f1!important;color:#747576!important;opacity:1!important;filter:unset!important}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#fff;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.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}.action-list ul.action-item{display:block}.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}.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}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.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}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:4px}.action-list ul.action-item li .avatar-card span.value i.cross-icon{color:#747576}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.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}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.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}.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}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#fff;border:1px solid #dcdcdc;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#fff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background,::ng-deep vcomply-modal .popup-modal-background{background-color:#161b2fcc!important}::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.error{border-color:#eb2424}::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 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 .cdk-overlay-pane{inset:0!important;align-items:center;justify-content:center}::ng-deep .cdk-overlay-pane .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:transparent!important;border:none!important;box-shadow:unset!important}::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "component", type: i9.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i12.ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: ["selectedWidgetsData", "displayedWidgets", "showRisk", "showCompliance", "mode"], outputs: ["widgetsDataModified", "closeConfigureWidgets"] }, { kind: "component", type: i13.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i14.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i15.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i16.SnackBarComponent, selector: "app-snack-bar" }, { kind: "directive", type: i17.ScrollInViewDirective, selector: "[appScrollInView]", inputs: ["appScrollInView"] }, { kind: "component", type: i18.SmileyDialogComponent, selector: "app-smiley-dialog", inputs: ["message", "autoClose", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "component", type: i19.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "directive", type: i7.NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }, { kind: "component", type: i20.UserListComponent, selector: "app-user-list", inputs: ["selectionType", "listDetails", "totalPages", "limit", "totalList", "feature", "totalgroupscount"], outputs: ["closeUserList", "saveSelectedUsers"] }, { kind: "component", type: i21.ResponsibilityCenterComponent, selector: "app-responsibility-center", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i22.CategoriesComponent, selector: "app-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i23.RiskCategoriesComponent, selector: "app-risk-categories", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i24.FrequencyComponent, selector: "app-frequency", inputs: ["savedFrequencyTab", "savedFrequencies", "selectedDate"], outputs: ["closeFrequencyPopup", "saveFrequency"] }, { kind: "pipe", type: i7.SlicePipe, name: "slice" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i6.TextCountPipe, name: "textCount" }] });
1093
+ }
1094
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardComponent, decorators: [{
1095
+ type: Component,
1096
+ args: [{ selector: 'app-create-dashboard', providers: [TextCountPipe], template: "<app-snack-bar></app-snack-bar>\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\n <div\n class=\"create-dashboard-container vx-d-flex vx-justify-end\"\n [class.animate-slideInRight]=\"animation\"\n >\n <div\n class=\"more-option\"\n *ngIf=\"activeSelector && activeSelector !== 'name'\"\n >\n <app-user-list\n *ngIf=\"activeSelector === 'whoCanView'\"\n (saveSelectedUsers)=\"saveSelectedList('whoCanView', $event)\"\n (closeUserList)=\"activateSelector('', false)\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n [listDetails]=\"listDetails\"\n [totalgroupscount]=\"totalgroups\"\n [feature]=\"feature\"\n ></app-user-list>\n <app-responsibility-center\n *ngIf=\"activeSelector === 'rcList'\"\n [responsibilityCentersList]=\"responsibilityCentersList\"\n [radioSelection]=\"false\"\n [selectedResponsibilityCenters]=\"\n dashboardForm.selectedResponsibilityCenters\n \"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"activateSelector('', false)\"\n >\n </app-responsibility-center>\n <app-categories\n *ngIf=\"activeSelector === 'responsibilityCategories'\"\n [categoryList]=\"responsibilityCategoriesTree\"\n [allCategories]=\"allComplianceCategories\"\n [categoryIdKey]=\"'category_id'\"\n [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\n (saveSelectedCategory)=\"\n saveSelectedList('responsibilityCategories', $event)\n \"\n (closeCategoriesList)=\"activateSelector('', false)\"\n ></app-categories>\n <app-risk-categories\n *ngIf=\"activeSelector === 'riskCategories'\"\n [categoryList]=\"riskCategoryList\"\n [allCategories]=\"allRiskCategories\"\n [categoryIdKey]=\"'category_id'\"\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\n (saveSelectedCategory)=\"saveSelectedList('riskCategory', $event)\"\n (closeCategoriesList)=\"activateSelector('', false)\"\n ></app-risk-categories>\n\n <app-frequency\n *ngIf=\"activeSelector === 'frequency'\"\n (closeFrequencyPopup)=\"activateSelector('', false)\"\n (saveFrequency)=\"saveFrequency($event)\"\n [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\n [selectedDate]=\"dashboardForm.frequencyDate\"\n [savedFrequencies]=\"dashboardForm.selectedFrequencies\"\n >\n </app-frequency>\n </div>\n <div\n class=\"vx-dialog-container side-dialog\"\n [class.tablet-width]=\"activeSelector && activeSelector !== 'name'\"\n >\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n\n <div class=\"form-group\" [class.disabled]=\"disabled\">\n <div\n class=\"vx-dialog-body-container\"\n (scroll)=\"animateImage()\"\n [class.hidden-scroll]=\"popoverService.stopScroll\"\n >\n <!-- Dashboard Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n [ngSrc]=\"ASSETS.dashBoardIcon\"\n *ngIf=\"\n !dashboardForm.dashboardName || activeSelector === 'name'\n \"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n class=\"checkIcon\"\n *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Dashboard Name\n <span class=\"require vx-txt-red vx-fs-16 vx-fw-400\"\n >*</span\n ></label\n >\n <div class=\"vx-input-group\">\n <input\n class=\"textField\"\n placeholder=\"Add dashboard name (Max limit: 30 characters).\"\n [(ngModel)]=\"dashboardForm.dashboardName\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n (focusout)=\"activateSelector('name', false)\"\n />\n\n <span\n class=\"counter\"\n *ngIf=\"dashboardForm?.dashboardName?.length > 0\"\n >{{ 30 - dashboardForm.dashboardName.length }}</span\n >\n </div>\n\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n (dashboardForm?.dashboardName?.length > 30 ||\n !dashboardForm?.dashboardName)\n \"\n >\n {{\n dashboardForm.dashboardName.length > 30\n ? \"You have exceeded the maximum character limit of 30 characters.\"\n : \"Please enter a name for this Dashboard.\"\n }}\n </p>\n\n <div class=\"vx-input-group vx-mt-2\">\n <vcomply-editor\n [editorConfig]=\"dashboardDescription\"\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"\n ></vcomply-editor>\n <span\n class=\"counter\"\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\"\n >{{\n 250 -\n (dashboardForm?.dashboardDescriptionText | textCount)\n }}</span\n >\n </div>\n\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n (dashboardForm?.dashboardDescriptionText | textCount) > 250\n \"\n >\n You have exceeded the maximum character limit of 250\n characters.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'whoCanView'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'whoCanView' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n [ngSrc]=\"ASSETS.dashBoardUsersIcon\"\n *ngIf=\"\n dashboardForm?.selectedViewers?.length == 0 ||\n activeSelector === 'whoCanView'\n \"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n class=\"checkIcon\"\n *ngIf=\"\n dashboardForm?.selectedViewers?.length > 0 &&\n activeSelector !== 'whoCanView'\n \"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Who can view this dashboard?<span\n class=\"require vx-txt-red vx-fs-16 vx-fw-400\"\n >*</span\n ></label\n >\n <div\n *ngIf=\"dashboardForm?.selectedViewers?.length == 0\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('whoCanView', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Who can view this dashboard?\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm?.selectedViewers?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <ng-container *ngIf=\"!groupsEnabled\" id=\"onlyuserslist\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let user of dashboardForm?.selectedViewers?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n user.member_id\n )\n \"\n (click)=\"remove('whoCanView', user)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"user.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ user.member_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedViewers?.length > 1 &&\n !groupsEnabled\n \"\n class=\"countBtn greenBg vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"userList.popover()\"\n placement=\"left\"\n >\n +{{ dashboardForm?.selectedViewers?.slice(1).length }}\n </button>\n </div>\n <app-popover #userList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of dashboardForm?.selectedViewers\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"user?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n user.member_id\n ) && !groupsEnabled\n \"\n (click)=\"remove('whoCanView', user)\"\n >&#xe90d;</i\n >\n {{ user?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n\n <div *ngIf=\"groupsEnabled\" class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\"\n >USER(S)</span\n >\n <button\n class=\"countBtn greenBg vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ dashboardForm?.selectedViewers?.length }}\n </button>\n </div>\n <span\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n dashboardForm?.selectedGroup?.length &&\n dashboardForm?.selectedViewers?.length\n \"\n >&</span\n >\n <div\n *ngIf=\"dashboardForm?.selectedGroup?.length\"\n id=\"usersandgroups\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\"\n >USER GROUP(S)</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"right\"\n >\n {{ dashboardForm?.selectedGroup?.length }}\n </button>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let data of dashboardForm?.selectedViewers\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"data.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n data.member_id\n )\n \"\n (click)=\"remove('whoCanView', data)\"\n >&#xe90d;</i\n >\n {{ data.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of dashboardForm?.selectedGroup\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"data.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('whoCanViewGroup', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'whoCanView'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('whoCanView', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'rcList'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rcList' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length == 0 ||\n activeSelector === 'rcList'\n \"\n [ngSrc]=\"ASSETS.dashBoardRcIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 0 &&\n activeSelector !== 'rcList'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >RESPONSIBILITY CENTER(S)</label\n >\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length == 0\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('rcList', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Responsibility Center(s) that you would like<br />displayed\n in the Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 0\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let rc of dashboardForm?.selectedResponsibilityCenters?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCenters?.length > 1\n \"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedResponsibilityCenters?.slice(1)\n .length\n }}\n </button>\n\n <app-popover #rcList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of dashboardForm?.selectedResponsibilityCenters\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"rc?.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('rc', rc)\"\n >&#xe90d;</i\n >\n {{ rc?.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'rcList'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('rcList', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'responsibilityCategories'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityCategories' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 || activeSelector === 'responsibilityCategories'\n \"\n [ngSrc]=\"ASSETS.dashBoardProgramIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length > 0 &&\n activeSelector !== 'responsibilityCategories'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >PROGRAM</label\n >\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length == 0\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('responsibilityCategories', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Program(s) that you would like displayed in\n the<br />Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories?.length > 0\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('responsibilityCategories', rCategory)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"rCategory.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rCategory.item_name }}</span\n >\n <button\n *ngIf=\"\n dashboardForm?.selectedResponsibilityCategories\n ?.length > 1\n \"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rCategoryList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedResponsibilityCategories?.slice(\n 1\n ).length\n }}\n </button>\n\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rCategory of dashboardForm?.selectedResponsibilityCategories\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"rCategory?.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"\n remove(\n 'responsibilityCategories',\n rCategory\n )\n \"\n >&#xe90d;</i\n >\n {{ rCategory?.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'responsibilityCategories'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('responsibilityCategories', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Risk Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'riskCategories'\"\n *ngIf=\"showRiskCategory && isManageRisk\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCategories' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n dashboardForm?.selectedRiskCategories?.length == 0 ||\n activeSelector === 'riskCategories'\n \"\n [ngSrc]=\"ASSETS.dashBoardRiskIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedRiskCategories?.length > 0 &&\n activeSelector !== 'riskCategories'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\" *ngIf=\"isManageRisk\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >RISK CATEGORIES</label\n >\n <div\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length == 0\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('riskCategories', true)\"\n [class.error]=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length ==\n 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the Risk Categories that you would like displayed<br />in\n the Dashboard, if any.\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"\n let riskCategory of dashboardForm?.selectedRiskCategories?.slice(\n 0,\n 1\n )\n \"\n >\n <i\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('riskCategory', riskCategory)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [arTooltip]=\"riskCategory.category_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ riskCategory.category_name }}</span\n >\n <button\n *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"riskList.popover()\"\n placement=\"left\"\n >\n +{{\n dashboardForm?.selectedRiskCategories?.slice(1).length\n }}\n </button>\n\n <app-popover #riskList [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let riskCategory of dashboardForm?.selectedRiskCategories\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"riskCategory?.category_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"remove('riskCategory', riskCategory)\"\n >&#xe90d;</i\n >\n {{ riskCategory?.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n *ngIf=\"activeSelector !== 'riskCategories'\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('riskCategories', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Display Criteria -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n *ngIf=\"dashboardForm?.displayCriteria?.length == 0\"\n [ngSrc]=\"ASSETS.dashBoardUsersIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"dashboardForm?.displayCriteria?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >DISPLAY CRITERIA</label\n >\n <div class=\"radio-group\" *ngIf=\"showCriteria\">\n <app-cs-radio\n [checked]=\"dashboardForm.displayCriteria == 'or'\"\n (checkedEvent)=\"dashboardForm.displayCriteria = 'or'\"\n >\n Those Items that have been assigned to either the selected\n Responsibility Center(s) or the selected\n Categories.</app-cs-radio\n >\n\n <app-cs-radio\n [checked]=\"dashboardForm.displayCriteria == 'and'\"\n (checkedEvent)=\"dashboardForm.displayCriteria = 'and'\"\n >\n Those Items that have been assigned to both the selected\n Responsibility Center(s) and the selected\n Categories.</app-cs-radio\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Timeframe -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"image\">\n <img\n *ngIf=\"\n !dashboardForm?.selectedFromDate ||\n !dashboardForm?.selectedToDate\n \"\n [ngSrc]=\"ASSETS.dashBoardTimeFrameIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"\n dashboardForm?.selectedFromDate &&\n dashboardForm?.selectedToDate\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >TIMEFRAME</label\n >\n <label class=\"vx-control-panel-sub-label\"\n >Select how long you would like the information selected to be\n displayed for. If no timeframe is selected, the information\n will be displayed permanently.</label\n >\n <div class=\"input-group vx-d-flex vx-justify-between\">\n <div class=\"date-select\">\n <i class=\"icons\">&#xe92d;</i>\n <input\n type=\"text\"\n id=\"from_date\"\n [value]=\"\n dashboardForm?.selectedFromDate | date : 'dd MMM yyyy'\n \"\n [placeholder]=\"'From'\"\n (click)=\"openFromDatePicker()\"\n readonly\n />\n <dp-date-picker\n #fromDatePicker\n [(ngModel)]=\"dashboardForm.selectedFromDate\"\n placeholder=\"Select Date\"\n (onSelect)=\"\n closeFromDatePicker(); datePickerOverlay = false\n \"\n [config]=\"fromDatePickerConfig\"\n ></dp-date-picker>\n <div\n class=\"overlay\"\n (click)=\"closeFromDatePicker()\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n <div\n class=\"date-select\"\n *ngIf=\"!hideToDate\"\n [class.disabled]=\"!dashboardForm?.selectedFromDate\"\n >\n <i class=\"icons\">&#xe92d;</i>\n <input\n type=\"text\"\n id=\"to_date\"\n [value]=\"\n dashboardForm?.selectedToDate | date : 'dd MMM yyyy'\n \"\n [placeholder]=\"'To'\"\n (click)=\"openToDatePicker()\"\n readonly\n />\n <dp-date-picker\n #toDatePicker\n [(ngModel)]=\"dashboardForm.selectedToDate\"\n placeholder=\"Select Date\"\n (onSelect)=\"\n closeToDatePicker(); datePickerOverlay = false\n \"\n [config]=\"toDatePickerConfig\"\n ></dp-date-picker>\n <div\n class=\"overlay\"\n (click)=\"closeToDatePicker()\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n <p\n class=\"vx-txt-error\"\n [appScrollInView]=\"true\"\n *ngIf=\"\n submitted &&\n dashboardForm.selectedFromDate &&\n !dashboardForm.selectedToDate\n \"\n >\n Select a time-frame.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Email Summary -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n activeSelector !== 'name'\n \"\n >\n <div class=\"image\">\n <img\n *ngIf=\"!dashboardForm.frequencyMessage\"\n [ngSrc]=\"ASSETS.dashBoardEmailSummariesIcon\"\n alt=\"\"\n width=\"36\"\n height=\"36\"\n />\n <svg\n *ngIf=\"dashboardForm.frequencyMessage\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"form\">\n <div class=\"vx-form-group vx-d-block\">\n <label\n class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-d-block vx-tt-uppercase vx-mb-2 vx-w-100 vx-lh-4\"\n >Email Summaries</label\n >\n <label class=\"vx-control-panel-sub-label\"\n >If you would like to send a summary of this Dashboard, please\n select a frequency(By default VComply sends a weekly\n Summary).</label\n >\n <div\n *ngIf=\"!dashboardForm.frequencyMessage\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Email Summaries\n </div>\n </div>\n\n <div\n *ngIf=\"dashboardForm.frequencyMessage\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [arTooltip]=\"dashboardForm.frequencyMessage\"\n placement=\"bottom-left\"\n type=\"black\"\n delay=\"0\"\n [tooltipMandatory]=\"false\"\n [innerHTML]=\"dashboardForm.frequencyMessage\"\n ></div>\n\n <button\n *ngIf=\"\n dashboardForm.frequencyMessage &&\n activeSelector !== 'frequency'\n \"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"button-block\">\n <button\n class=\"vx-btn block primary\"\n [disabled]=\"activeSelector && activeSelector !== 'name'\"\n (click)=\"configureDashboard()\"\n >\n Next: Configure Widgets\n </button>\n </div>\n </div>\n\n <button\n class=\"close-dialog\"\n type=\"button\"\n [disabled]=\"activeSelector && activeSelector !== 'name'\"\n (click)=\"close.emit({ mode: 'discard' })\"\n [arTooltip]=\"'[Esc] to close'\"\n placement=\"left\"\n type=\"black\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n [class.hide]=\"activeSelector && activeSelector !== 'name'\"\n >\n <i class=\"icons\">&#xe93f;</i>\n </button>\n <div\n class=\"global-confirmation-alert\"\n *ngIf=\"\n submitted &&\n dashboardForm?.selectedResponsibilityCenters?.length == 0 &&\n dashboardForm?.selectedResponsibilityCategories?.length == 0 &&\n dashboardForm?.selectedRiskCategories?.length == 0\n \"\n >\n <div class=\"global-confirmation-alert-top\">\n <span class=\"icon-block\">\n <i class=\"icons\">&#xe930;</i>\n </span>\n <p class=\"text\" *ngIf=\"showRiskCategory\">\n Select a Responsibility Center, Program or Risk Category.\n </p>\n <p class=\"text\" *ngIf=\"!showRiskCategory\">\n Select a Responsibility Center or Program.\n </p>\n </div>\n <div class=\"global-confirmation-alert-bottom\">\n <p class=\"message\"></p>\n <div class=\"button-group\">\n <button class=\"fill\" type=\"button\" (click)=\"submitted = false\">\n OKAY\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<app-smiley-dialog\n *ngIf=\"isSmiley\"\n [message]=\"smileyMessage\"\n></app-smiley-dialog>\n\n<app-configure-widgets\n *ngIf=\"openConfigureWidgets\"\n [mode]=\"mode\"\n [displayedWidgets]=\"displayedWidgets\"\n [showRisk]=\"showRiskWidgets\"\n [showCompliance]=\"showComplianceWidgets\"\n [selectedWidgetsData]=\"selectedWidgets\"\n (widgetsDataModified)=\"setSelectedWidgets($event)\"\n (closeConfigureWidgets)=\"closeConfigureWidgets($event)\"\n></app-configure-widgets>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@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/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.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-right.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/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-right.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/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161b2fcc}::ng-deep .create-dashboard-container .vx-dialog-container{background-color:#fff;border:none;position:relative}@media screen and (max-width: 1280px){::ng-deep .create-dashboard-container .vx-dialog-container.tablet-width{width:28px!important}::ng-deep .create-dashboard-container .vx-dialog-container.tablet-width .form-group .vx-dialog-body-container{overflow:hidden}}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:8px;right:8px;height:32px;width:32px;font-size:16px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:2px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog:hover{background:#f1f1f1}::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}@media screen and (max-width: 1280px){::ng-deep .create-dashboard-container .vx-dialog-container button.close-dialog.hide{display:none}}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #f1f1f1;float:left}@media screen and (max-width: 1280px){::ng-deep .create-dashboard .more-option{width:calc(100vw - 28px)}::ng-deep .create-dashboard .more-option app-user-list .user-list{right:28px}::ng-deep .create-dashboard .more-option app-responsibility-center .responsibility-center{right:28px}::ng-deep .create-dashboard .more-option app-categories .category-list{right:28px}::ng-deep .create-dashboard .more-option app-risk-categories .risk-category-list{right:28px}::ng-deep .create-dashboard .more-option app-frequency .create-frequency{right:28px}}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .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}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .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}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+vcomply-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover .custom-input{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #f1f1f1;border-radius:2px;background:#fff;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-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 .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count{background:#1e5dd3;border-radius:20px;color:#fff;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .user-group-chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group vcomply-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group vcomply-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form 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 .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form 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 .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #dbdbdb;background:#fff;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group 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 .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled input{background:#f1f1f1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:none;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(to bottom,#fff0,#ffffffbf 22%,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{font-size:13px!important;letter-spacing:1.3px!important;height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{background:#f1f1f1!important;border-color:#f1f1f1!important;color:#747576!important;opacity:1!important;filter:unset!important}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;inset:0;background:#fff;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.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}.action-list ul.action-item{display:block}.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}.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}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.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}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:4px}.action-list ul.action-item li .avatar-card span.value i.cross-icon{color:#747576}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.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}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.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}.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}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#fff;border:1px solid #dcdcdc;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#fff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background,::ng-deep vcomply-modal .popup-modal-background{background-color:#161b2fcc!important}::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.error{border-color:#eb2424}::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 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 .cdk-overlay-pane{inset:0!important;align-items:center;justify-content:center}::ng-deep .cdk-overlay-pane .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:transparent!important;border:none!important;box-shadow:unset!important}::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .cdk-overlay-pane .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 .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .cdk-overlay-pane .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .cdk-overlay-pane .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}\n"] }]
1097
+ }], ctorParameters: function () { return [{ type: i1.CreateDashboardService }, { type: i2.PaginationService }, { type: i0.ChangeDetectorRef }, { type: i3.SnackBarService }, { type: i4.PopoverService }, { type: i5.ConfigureWidgetsService }, { type: i6.TextCountPipe }]; }, propDecorators: { feature: [{
1098
+ type: Input
1099
+ }], mode: [{
1100
+ type: Input
1101
+ }], dashboardId: [{
1102
+ type: Input
1103
+ }], close: [{
1104
+ type: Output
1105
+ }], createdBy: [{
1106
+ type: Input
1107
+ }], fromDatePicker: [{
1108
+ type: ViewChild,
1109
+ args: ['fromDatePicker']
1110
+ }], toDatePicker: [{
1111
+ type: ViewChild,
1112
+ args: ['toDatePicker']
1113
+ }], configureWidget: [{
1114
+ type: Input
1115
+ }], fromDatePickerPopup: [{
1116
+ type: ViewChild,
1117
+ args: ['fromDatePicker', { read: ElementRef, static: false }]
1118
+ }], toDatePickerPopup: [{
1119
+ type: ViewChild,
1120
+ args: ['toDatePicker', { read: ElementRef, static: false }]
1121
+ }], onKeydownHandler: [{
1122
+ type: HostListener,
1123
+ args: ['document:keydown.escape', ['$event']]
1124
+ }], documentClick: [{
1125
+ type: HostListener,
1126
+ args: ['document:click', ['$event']]
1127
+ }] } });
1128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBVXZCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyRCxNQUFNLE9BQU8sd0JBQXdCO0lBNkp6QjtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQWxLRCxPQUFPLENBQU07SUFDdEIsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ1IsSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNoQixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDTSxjQUFjLENBQXVCO0lBQ3ZDLFlBQVksQ0FBdUI7SUFDOUQsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNSLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsTUFBTSxH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LEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzt3R0EveENVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLDZVQUZ4QixDQUFDLGFBQWEsQ0FBQyw4VEF3SlcsVUFBVSw0R0FFWixVQUFVLGtEQ3hML0MseWxtREE0dkNBOzs0RkQ1dENhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsYUFHckIsQ0FBQyxhQUFhLENBQUM7MFNBR2pCLE9BQU87c0JBQWYsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0UsU0FBUztzQkFBakIsS0FBSztnQkFDdUIsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0EsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixlQUFlO3NCQUF2QixLQUFLO2dCQTRJTixtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hFLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBb0JULGdCQUFnQjtzQkFBcEUsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEwakNuRCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICdAdmNvbXBseS9lZGl0b3InO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCwgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckxpc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWxpc3QvdXNlci1saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBDcmVhdGVEYXNoYm9hcmRGb3JtIH0gZnJvbSAnLi9jcmVhdGUtZGFzaGJvYXJkLWNvbmZpZyc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb25maWd1cmUtd2lkZ2V0cy5zZXJ2aWNlJztcblxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRDb3VudFBpcGUgfSBmcm9tICcuL3BpcGVzL3RleHQtY291bnQucGlwZSc7XG5pbXBvcnQgeyBBU1NFVFMgfSBmcm9tICcuL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQubGVzcyddLFxuICBwcm92aWRlcnM6IFtUZXh0Q291bnRQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlRGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBmZWF0dXJlOiBhbnk7XG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcbiAgQElucHV0KCkgZGFzaGJvYXJkSWQgPSAnJztcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBjcmVhdGVkQnkgPSAwO1xuICBAVmlld0NoaWxkKCdmcm9tRGF0ZVBpY2tlcicpIGZyb21EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndG9EYXRlUGlja2VyJykgdG9EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcbiAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgQElucHV0KCkgY29uZmlndXJlV2lkZ2V0ID0gZmFsc2U7XG4gIEFTU0VUUzogYW55ID0gQVNTRVRTO1xuXG4gIHRvdGFsUGFnZXMgPSAxO1xuICB0b3RhbExpc3QgPSAxO1xuICB1c2Vyc0xpc3Q6IGFueVtdID0gW107XG4gIHZMb2FkZXIgPSB0cnVlO1xuICB1c2VyTGlzdExvYWRlZCA9IGZhbHNlO1xuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIHJpc2tDYXRlZ29yeUxpc3RMb2FkZWQgPSBmYWxzZTtcbiAgaGlkZVRvRGF0ZSA9IGZhbHNlO1xuICBsaXN0RGV0YWlsczogVXNlckxpc3RDb25maWd1cmF0aW9uID0ge1xuICAgIHNlbGVjdGVkVXNlcnNMaXN0OiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwTGlzdDogW10sXG4gICAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBbXSxcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJ21lbWJlcl9uYW1lJyxcbiAgICBkaXNwbGF5R3JvdXBLZXk6ICdncm91cF9uYW1lJyxcbiAgICBncm91cElka2V5OiAnZ3JvdXBfaWQnLFxuICAgIGVsZW1lbnRJZEtleTogJ21lbWJlcl9pZCcsXG4gICAgdG9vbHRpcEtleTogJ21lbWJlcl9lbWFpbCcsXG4gIH07XG4gIGRhc2hib2FyZERlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XG4gICAgcGxhY2Vob2xkZXI6ICdEZXNjcmlwdGlvbiAoTWF4IGxpbWl0OiAyNTAgY2hhcmFjdGVycyknLFxuICAgIG1vZGU6ICdwcmltZScsXG4gICAgaWQ6ICdkZXNjcmlwdGlvbicsXG4gIH07XG4gIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWU6IGFueSA9IHtcbiAgICByZWd1bGF0aW9uczoge1xuICAgICAgbGlzdDogW10sXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdLFxuICAgIH0sXG4gICAgc3RhbmRhcmRzOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBpbnRlcm5hbENvbnRyb2xzOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBvdGhlcnM6IHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXSxcbiAgICB9LFxuICB9O1xuICBhbGxDb21wbGlhbmNlQ2F0ZWdvcmllczogYW55W10gPSBbXTtcbiAgYWxsUmlza0NhdGVnb3JpZXM6IGFueVtdID0gW107XG4gIHNob3dSaXNrQ2F0ZWdvcnkgPSBmYWxzZTtcbiAgc2hvd0NyaXRlcmlhID0gdHJ1ZTtcblxuICBkYXNoYm9hcmRGb3JtOiBDcmVhdGVEYXNoYm9hcmRGb3JtID0ge1xuICAgIGRhc2hib2FyZE5hbWU6ICcnLFxuICAgIGRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDogJycsXG4gICAgc2VsZWN0ZWRWaWV3ZXJzOiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwOiBbXSxcbiAgICBzZWxlY3RlZEZyb21EYXRlOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRUb0RhdGU6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogW10sXG4gICAgc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM6IFtdLFxuICAgIHNlbGVjdGVkUmlza0NhdGVnb3JpZXM6IFtdLFxuICAgIGRpc3BsYXlDcml0ZXJpYTogJ29yJyxcbiAgICBjb25maWd1cmVXaWRnZXQ6IFtdLFxuICAgIGZyZXF1ZW5jeURldGFpbHM6ICcnLFxuICAgIHNlbGVjdGVkRnJlcXVlbmN5VHlwZTogJycsXG4gICAgc2VsZWN0ZWRGcmVxdWVuY2llczogWzBdLFxuICAgIGZyZXF1ZW5jeU1lc3NhZ2U6ICcnLFxuICAgIGZyZXF1ZW5jeURhdGU6IDEsXG4gIH07XG5cbiAgb3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBmYWxzZTtcbiAgc2VsZWN0ZWRXaWRnZXRzOiBhbnkgPSBbXTtcbiAgZGlzcGxheWVkV2lkZ2V0czogYW55ID0gW107XG5cbiAgcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IFtdO1xuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuICBkYXlOYW1lcyA9IFtcbiAgICAnTW9uZGF5JyxcbiAgICAnVHVlc2RheScsXG4gICAgJ1dlZG5lc2RheScsXG4gICAgJ1RodXJzZGF5JyxcbiAgICAnRnJpZGF5JyxcbiAgICAnU2F0dXJkYXknLFxuICAgICdTdW5kYXknLFxuICBdO1xuICBtb250aE5hbWVzID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG4gIHF1YXJ0ZXJzID0gW1xuICAgICdKYW51YXJ5LCBBcHJpbCwgSnVseSwgT2N0b2JlcicsXG4gICAgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLFxuICAgICdNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlcicsXG4gIF07XG5cbiAgY2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XG4gIHNob3dSaXNrV2lkZ2V0cyA9IGZhbHNlO1xuICBzaG93Q29tcGxpYW5jZVdpZGdldHMgPSBmYWxzZTtcbiAgaXNNYW5hZ2VSaXNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmlza0NhdGVnb3J5TGlzdCA9IHtcbiAgICBzdHJhdGVnaWM6IHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXSxcbiAgICB9LFxuICAgIG9wZXJhdGlvbmFsOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBjb21wbGlhbmNlOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBvdGhlcnM6IHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGZyb21EYXRlUGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyA9IHtcbiAgICBtaW46IHRoaXMuZ2V0Q3VycmVudERhdGUoKSxcbiAgfTtcblxuICB0b0RhdGVQaWNrZXJDb25maWc6IElEYXRlUGlja2VyQ29uZmlnID0ge307XG5cbiAgaXNTbWlsZXkhOiBib29sZWFuO1xuICBzbWlsZXlNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgZ3JvdXBMaXN0OiBhbnk7XG4gIGdyb3Vwc0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG90YWxncm91cHM6IGFueTtcbiAgQFZpZXdDaGlsZCgnZnJvbURhdGVQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgZnJvbURhdGVQaWNrZXJQb3B1cCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RvRGF0ZVBpY2tlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICB0b0RhdGVQaWNrZXJQb3B1cCE6IEVsZW1lbnRSZWY7XG4gIG9wZW5lZERhdGVQaWNrZXI6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkU2VydmljZTogQ3JlYXRlRGFzaGJvYXJkU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBwb3BvdmVyU2VydmljZTogUG9wb3ZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmVXaWRnZXRzU2VydmljZTogQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZXh0Q291bnQ6IFRleHRDb3VudFBpcGVcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmNyZWF0ZWRCeSkge1xuICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QucHVzaCh0aGlzLmNyZWF0ZWRCeSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKSBvbktleWRvd25IYW5kbGVyKFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50XG4gICkge1xuICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdkaXNjYXJkJyB9KTtcbiAgICB0aGlzLmlzU21pbGV5ID0gZmFsc2U7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3Vwc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgfSwgMzAwKTtcbiAgICAvLyB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoJycpO1xuICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcbiAgICB0aGlzLmdldENvbXBsaWFuY2VDYXRlZ29yeUxpc3QoKTtcbiAgICB0aGlzLnNldEZyZXF1ZW5jeSgnMn4xfjB+MCcsICdpbXBvcnQnKTtcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoJycpO1xuICAgIHRoaXMuZ2V0R3JvdXBMaXN0KCk7XG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbigpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFBlcm1pc3Npb24ocmVzPy5yb2xlQWN0aW9ucyk7XG4gICAgICAgIGNvbnN0IHF1aWNrTGluayA9IHJlcy5xdWlja19saW5rO1xuICAgICAgICBpZiAocXVpY2tMaW5rLnJpc2spIHtcbiAgICAgICAgICB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIGxpc3RpbmcgcGFnZXMgdGhlIGxlZnQgc2lkZSBvZiBwb2xpY3kgZm9ybSB0byBzZXQgYW5kIGVkaXQgdGhlIGRyb3Bkb3duIGZpZWxkcyB2YWx1ZXNcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBib29sZWFuIHZhbHVlIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb3Igbm90XG4gICAqL1xuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZSA9PSAnZnJlcXVlbmN5JyB8fCB0aGlzLmFjdGl2ZVNlbGVjdG9yID09ICdmcmVxdWVuY3knKSB7XG4gICAgICB0aGlzLnNob3dDcml0ZXJpYSA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0NyaXRlcmlhID0gdHJ1ZTtcbiAgICAgIH0sIDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XG4gIH1cblxuICBvcGVuRnJvbURhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5vcGVuZWREYXRlUGlja2VyID0gJ0ZST01fREFURSc7XG5cbiAgICB0aGlzLmZyb21EYXRlUGlja2VyPy5hcGk/Lm9wZW4oKTtcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gdHJ1ZTtcbiAgfVxuXG4gIG9wZW5Ub0RhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5vcGVuZWREYXRlUGlja2VyID0gJ1RPX0RBVEUnO1xuXG4gICAgdGhpcy50b0RhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xuXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XG4gIH1cbiAgY2xvc2VGcm9tRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmZyb21EYXRlUGlja2VyPy5hcGk/LmNsb3NlKCk7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSkge1xuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcbiAgICAgIH0sIDIwKTtcbiAgICAgIHRoaXMuZnJvbURhdGVQaWNrZXIuYXBpLmNsb3NlKCk7XG4gICAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSk7XG4gICAgdGhpcy50b0RhdGVQaWNrZXJDb25maWcgPSB7IG1pbjogbWluVG9EYXRlIH07XG5cbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKG1pblRvRGF0ZS5zcGxpdCgnLScpLnJldmVyc2UoKS5qb2luKCctJykpO1xuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSk7XG4gICAgY29uc3QgaW5WYWxpZERhdGUgPSBmcm9tRGF0ZSA+PSB0b0RhdGUgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKGluVmFsaWREYXRlKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZVRvRGF0ZSA9IGZhbHNlO1xuICAgICAgfSwgMjApO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlVG9EYXRlUGlja2VyKCkge1xuICAgIHRoaXMudG9EYXRlUGlja2VyPy5hcGk/LmNsb3NlKCk7XG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuICB9XG5cbiAgYW5pbWF0ZUltYWdlKCkge1xuICAgIGNvbnN0IGNpcmNsZUltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW1hZ2UnKTtcbiAgfVxuXG4gIHNhdmVGcmVxdWVuY3koZXZlbnRWYWx1ZXM6IGFueSkge1xuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSBldmVudFZhbHVlcy5mcmVxdWVuY3lUeXBlO1xuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmNpZXM7XG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBldmVudFZhbHVlcy5mcmVxdWVuY3lTdHJpbmc7XG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSBldmVudFZhbHVlcy5zZWxlY3RlZERhdGU7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSk7XG4gIH1cblxuICBnZXRDdXJyZW50RGF0ZSgpIHtcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBkYXlqcyh0b2RheSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gIH1cbiAgc2V0VG9EYXRlKGRhdGE6IHN0cmluZykge1xuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKGRhdGEpO1xuICAgIHJldHVybiBkYXlqcyh0b2RheSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gIH1cbiAgZ2V0RnJvbURhdGUoZGF0YTogc3RyaW5nKSB7XG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoZGF0YSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRvZGF5LmdldERhdGUoKSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZywgY29udmVydHMgaXQgdG8gYSBkYXRlLCB0aGVuIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCBvZiBZWVlZLU1NLURELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIHRoZSBkYXRlIHlvdSB3YW50IHRvIGZvcm1hdFxuICAgKiBAcmV0dXJucyBBIHN0cmluZyBpbiB0aGUgZm9ybWF0IG9mIFlZWVktTU0tRERcbiAgICovXG4gIGdldERhdGVGb3JtYXRlKGRhdGE6IHN0cmluZykge1xuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKGRhdGEpO1xuICAgIHJldHVybiAoXG4gICAgICB0b2RheS5nZXRGdWxsWWVhcigpICtcbiAgICAgICctJyArXG4gICAgICBTdHJpbmcodG9kYXkuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgJy0nICtcbiAgICAgIFN0cmluZyh0b2RheS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlRGFzaGJvYXJkKCkge1xuICAgIGxldCBmaWVsZHNTdGF0dXMgPSB0aGlzLnZhbGlkYXRlRGFzaGJvYXJkKCk7XG4gICAgaWYgKGZpZWxkc1N0YXR1cykge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJykge1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgIGRhc2hib2FyZF9uYW1lOiB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSxcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6ICcnLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2VcbiAgICAgICAgICAuY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTWFuYWdlUmlzayAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Umlza0NhdGVnb3J5ICYmXG4gICAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgICAgIDAgfHxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgICAgICdBIGRhc2hib2FyZCB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4gU3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgZGFzaGJvYXJkLicsXG4gICAgICAgICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcbiAgICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXG4gICAgICAgICAgZGFzaGJvYXJkX2lkOiB0aGlzLmRhc2hib2FyZElkLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2VcbiAgICAgICAgICAuY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTWFuYWdlUmlzayAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Umlza0NhdGVnb3J5ICYmXG4gICAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgICAgIDAgfHxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgICAgICdBIGRhc2hib2FyZCB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4gU3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgZGFzaGJvYXJkLicsXG4gICAgICAgICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGNvdW50IGFwaSB0byBnZXQgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIEBwYXJhbSBVcmwgY29udGFpbnMgcHJhbXNcbiAgICovXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2VcbiAgICAgIC5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnRvdGFsTGlzdCA9IHJlcy50b3RhbF9tZW1iZXJzO1xuICAgICAgICBpZiAocmVzLnRvdGFsX21lbWJlcnMgJiYgcmVzLmxpbWl0X3Blcl9wYWdlID4gMSkge1xuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHJlcy5jcmVhdGVfcGFnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlcnMgbGlzdCBieSBtYWtpbmcgYXBpIGNhbGwgYW5kIHByZSBzZWxlY3RzIGFsbCBhZG1pbnMgYnkgYWRkaW5nIHRvIHZpZXdlcnNcbiAgICogQHBhcmFtIHVybCBjb250YWlucyBxdWVyeSBwYXJhbXMgZm9yIG9yZ2FuaXphdGlvbiB1c2VycyBhcGlcbiAgICovXG4gIGdldFVzZXJzTGlzdCh1cmw6IGFueSkge1xuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRBbGxVc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gcmVzO1xuICAgICAgdGhpcy51c2VyTGlzdExvYWRlZCA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCxcbiAgICAgICAgICBbdGhpcy5jcmVhdGVkQnldLFxuICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEdyb3VwTGlzdCgpIHtcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0QWxsR3JvdXBzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy50b3RhbGdyb3VwcyA9IHJlcy50b3RhbF9pdGVtcztcbiAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gcmVzLmRhdGE7XG4gICAgICB0aGlzLnVzZXJMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5ncm91cExpc3QsXG4gICAgICAgICAgW3RoaXMuY3JlYXRlZEJ5XSxcbiAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRHcm91cDtcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb21wbGlhbmNlQ2F0ZWdvcnlMaXN0KCkge1xuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldENvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdEZyb21HbG9iYWwoKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlcztcbiAgICAgICAgICB0aGlzLmFsbENvbXBsaWFuY2VDYXRlZ29yaWVzID0gT2JqZWN0LmFzc2lnbihyZXMpO1xuICAgICAgICAgIC8vIGNsb25lRGVlcChyZXMpO1xuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5vdGhlcnMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUucmVndWxhdGlvbnMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMikge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUuc3RhbmRhcmRzLmxpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDMpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLmludGVybmFsQ29udHJvbHMubGlzdC5wdXNoKFxuICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Quc3RyYXRlZ2ljLmxpc3QgPSByZXMuc3RyYXRlZ2ljX2FycjtcbiAgICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0Lm9wZXJhdGlvbmFsLmxpc3QgPSByZXMub3BlcmF0aW9uYWxfYXJyO1xuICAgICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3QuY29tcGxpYW5jZS5saXN0ID0gcmVzLmNvbXBsaWFuY2VfYXJyO1xuICAgICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Qub3RoZXJzLmxpc3QgPSByZXMub3RoZXJzX2FycjtcbiAgICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbGxSaXNrQ2F0ZWdvcmllcyA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgdGhpcy5hbGxSaXNrQ2F0ZWdvcmllcy5jb25jYXQoXG4gICAgICAgICAgICAgIHJlcy5zdHJhdGVnaWNfYXJyLFxuICAgICAgICAgICAgICByZXMub3BlcmF0aW9uYWxfYXJyLFxuICAgICAgICAgICAgICByZXMuY29tcGxpYW5jZV9hcnIsXG4gICAgICAgICAgICAgIHJlcy5vdGhlcnNfYXJyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XG4gICAqL1xuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCAmJlxuICAgICAgdGhpcy5jb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgJiZcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCAmJlxuICAgICAgdGhpcy51c2VyTGlzdExvYWRlZFxuICAgICkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgIHRoaXMuZWRpdERhc2hib2FyZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkV2lkZ2V0cyhkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xuICAgICAgY29uc3Qgd2lkZ2V0c0FycmF5OiBhbnkgPSBbXTtcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgICBvYmoubW9kdWxlX25hbWUgPSBlbGVtZW50Lm1vZHVsZTtcbiAgICAgICAgb2JqLl9pZCA9ICcnO1xuICAgICAgICBvYmoud2lkZ2V0X25hbWUgPSBlbGVtZW50LnRpdGxlO1xuICAgICAgICBvYmoud2lkZ2V0X2NvZGUgPSBlbGVtZW50LmlkO1xuICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcbiAgICAgICAgb2JqLnN0YXRlID0gJ0FDVElWRSc7XG4gICAgICAgIGlmIChlbGVtZW50LnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1YldpZGdldE9iamVjdDogYW55ID0ge307XG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3QuX2lkID0gJyc7XG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X25hbWUgPSBzdWJXaWRnZXQudGl0bGU7XG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X2NvZGUgPSBzdWJXaWRnZXQuaWQ7XG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Quc3RhdGUgPSBzdWJXaWRnZXQudmFsdWUgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSc7XG4gICAgICAgICAgICBvYmouc3ViX3dpZGdldHMucHVzaChPYmplY3QuYXNzaWduKHN1YldpZGdldE9iamVjdCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHdpZGdldHNBcnJheS5wdXNoKG9iaik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCA9IHdpZGdldHNBcnJheTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICBjb25zdCB3aWRnZXRzQXJyYXk6IGFueSA9IFtdO1xuXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuZXh0cmFjdFdpZGdldENvZGVzKHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQpLmluY2x1ZGVzKFxuICAgICAgICAgICAgZWxlbWVudC5pZFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICAgICAgb2JqLm1vZHVsZV9uYW1lID0gZWxlbWVudC5tb2R1bGU7XG4gICAgICAgICAgb2JqLl9pZCA9ICcnO1xuICAgICAgICAgIG9iai53aWRnZXRfbmFtZSA9IGVsZW1lbnQudGl0bGU7XG4gICAgICAgICAgb2JqLndpZGdldF9jb2RlID0gZWxlbWVudC5pZDtcbiAgICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcbiAgICAgICAgICBvYmouc3RhdGUgPSAnQUNUSVZFJztcbiAgICAgICAgICBpZiAoZWxlbWVudC5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgc3ViV2lkZ2V0T2JqZWN0OiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0Ll9pZCA9ICcnO1xuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X25hbWUgPSBzdWJXaWRnZXQudGl0bGU7XG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfY29kZSA9IHN1YldpZGdldC5pZDtcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LnN0YXRlID0gc3ViV2lkZ2V0LnZhbHVlID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnO1xuICAgICAgICAgICAgICBvYmouc3ViX3dpZGdldHMucHVzaChzdWJXaWRnZXRPYmplY3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUud2lkZ2V0X2NvZGUgPT0gZWxlbWVudC5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3RhdGUgPSAnQUNUSVZFJztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3ViX3dpZGdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3ViX3dpZGdldHMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoc3ViV2lkZ2V0RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SW5kZXggPSBlbGVtZW50LnN1YldpZGdldHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5pZCA9PSBzdWJXaWRnZXREYXRhLndpZGdldF9jb2RlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRJbmRleCAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJXaWRnZXREYXRhLnN0YXRlID0gZWxlbWVudC5zdWJXaWRnZXRzW2VsZW1lbnRJbmRleF0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA/ICdBQ1RJVkUnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnSU5BQ1RJVkUnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldC5mb3JFYWNoKChzYXZlZFdpZGdldDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoXG4gICAgICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50LmlkID09IHNhdmVkV2lkZ2V0LndpZGdldF9jb2RlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgIHNhdmVkV2lkZ2V0LnN0YXRlID0gJ0lOQUNUSVZFJztcbiAgICAgICAgICBpZiAoc2F2ZWRXaWRnZXQuc3ViX3dpZGdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2F2ZWRXaWRnZXQuc3ViX3dpZGdldHMuZm9yRWFjaCgoc2F2ZVN1YldpZGdldDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHNhdmVTdWJXaWRnZXQuc3RhdGUgPSAnSU5BQ1RJVkUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBkYXRhO1xuICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBmYWxzZTtcbiAgICB0aGlzLnN1Ym1pdERhc2hib2FyZCgpO1xuICB9XG5cbiAgZXh0cmFjdFdpZGdldENvZGVzKHdpZGdldHM6IGFueVtdKSB7XG4gICAgY29uc3Qgd2lkZ2V0Q29kZXM6IGFueVtdID0gW107XG5cbiAgICB3aWRnZXRzPy5mb3JFYWNoKCh3aWRnZXQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHdpZGdldD8ud2lkZ2V0X2NvZGUpIHtcbiAgICAgICAgd2lkZ2V0Q29kZXMucHVzaCh3aWRnZXQ/LndpZGdldF9jb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB3aWRnZXRDb2RlcztcbiAgfVxuXG4gIGNsb3NlQ29uZmlndXJlV2lkZ2V0cyhldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBldmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgbGlzdCB1c2VyJ3MgbGlzdCBiYXNlZCBvbiBwYWdpbmF0aW9uIGJ5IG1ha2luZyBhcGkgY2FsbFxuICAgKiBAcGFyYW0gZXZlbnQgc3BlY2lmaWVzIGEgYm9vbGVhbiB2YWx1ZSB0byBjYWxsIGFwaVxuICAgKi9cbiAgcGFnaW5hdGlvbkZpbHRlcihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmdldFVzZXJzTGlzdCh7XG4gICAgICAgIHA6XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9PT0gMVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxuICAgICAgICB0eXBlOiAnYWxsX2V4Y2VwdF9leGVjdXRpdmUnLFxuICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRSQ0xpc3QoKSB7XG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSByZXM7XG4gICAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcbiAgICogQHBhcmFtIGFycmF5XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHVuaXF1ZUJ5UHJvcChhcnJheTogYW55LCBrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgYXJyYXlcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxuICAgICAgICAgICAgaXRlbSAmJiBpdGVtW2tleV0gJiYgYWNjLnNldChpdGVtW2tleV0sIGl0ZW0pLCBhY2NcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBNYXAoKVxuICAgICAgICApXG4gICAgICAgIC52YWx1ZXMoKVxuICAgICk7XG4gIH1cblxuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnaXRlbV9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdDT01QTElBTkNFJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5tb2R1bGVfbmFtZSAhPSAnUklTSydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2hvQ2FuVmlldyc6XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy51c2VycyxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5ncm91cHMsXG4gICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkR3JvdXBMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJzpcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzID0gc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdDT01QTElBTkNFJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5tb2R1bGVfbmFtZSAhPSAnUklTSydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmlza0NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubW9kdWxlX25hbWUgIT0gJ0NPTVBMSUFOQ0UnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdSSVNLJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpO1xuICB9XG5cbiAgcmVtb3ZlKHR5cGU6IGFueSwgZXZlbnQ6IGFueSwgcmVtb3ZlSW5kZXg/OiBhbnkpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3JjJzpcbiAgICAgICAgY29uc3QgcmNJbmRleCA9XG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChyY0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFJjOiBhbnkgPVxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzW3JjSW5kZXhdO1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5zcGxpY2UocmNJbmRleCwgMSk7XG5cbiAgICAgICAgICBpZiAocGFyZW50UmM/Lml0ZW1fY2hpbGRfaWRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYXJlbnRSYy5pdGVtX2NoaWxkX2lkcy5mb3JFYWNoKChjaGlsZEVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZW1vdmVJbmRleCA9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChyZW1vdmVFbGVtZW50OiBhbnkpID0+IHJlbW92ZUVsZW1lbnQucmNfaWQgPT0gY2hpbGRFbGVtZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLnNwbGljZShcbiAgICAgICAgICAgICAgICByZW1vdmVJbmRleCxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdDT01QTElBTkNFJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5tb2R1bGVfbmFtZSAhPSAnUklTSydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3aG9DYW5WaWV3JzpcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMuZmluZEluZGV4KFxuICAgICAgICAgICh2aWV3ZXI6IGFueSkgPT4gdmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2Vycy5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2hvQ2FuVmlld0dyb3VwJzpcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXAuc3BsaWNlKGdyb3VwcywgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJzpcbiAgICAgICAgY29uc3QgQ0NjYXRlZ29yeUluZGV4ID1cbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKENDY2F0ZWdvcnk6IGFueSkgPT4gQ0NjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5zcGxpY2UoXG4gICAgICAgICAgQ0NjYXRlZ29yeUluZGV4LFxuICAgICAgICAgIDFcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdDT01QTElBTkNFJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5tb2R1bGVfbmFtZSAhPSAnUklTSydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaXNrQ2F0ZWdvcnknOlxuICAgICAgICBjb25zdCByaXNrQ2F0ZWdvcnlJbmRleCA9XG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHJpc2tDYXRlZ29yeTogYW55KSA9PiByaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocmlza0NhdGVnb3J5SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50OiBhbnkgPVxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXNbcmlza0NhdGVnb3J5SW5kZXhdO1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShcbiAgICAgICAgICAgIHJpc2tDYXRlZ29yeUluZGV4LFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcmVudD8uY2hpbGRfY2F0X2lkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkX2NhdF9pZHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlSW5kZXggPVxuICAgICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChyZW1vdmVFbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQuY2F0ZWdvcnlfaWQgPT0gY2hpbGRFbGVtZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5zcGxpY2Uocmlza0NhdGVnb3J5SW5kZXgsIDEpO1xuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubW9kdWxlX25hbWUgIT0gJ0NPTVBMSUFOQ0UnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm1vZHVsZV9uYW1lICE9ICdSSVNLJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2V0TGlzdChsaXN0OiBhbnlbXSwgaWRzOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcblxuICAgIGlkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoXG4gICAgICAgIChsaXN0RWxlbWVudDogYW55KSA9PiBsaXN0RWxlbWVudFtrZXldID09IGVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXG4gICAqIEBwYXJhbSBsaXN0IGFjdHVhbCBzZWxlY3RlZCBsaXN0XG4gICAqIEBwYXJhbSBrZXkgY29udGFpbnMga2V5IHRvIGV4dHJhY3QgaWQgZnJvbSB0aGUgbGlzdFxuICAgKi9cbiAgcmV0dXJuSWRzKGxpc3Q6IGFueVtdLCBrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBsaXN0Py5tYXAoKGVsZSkgPT4ge1xuICAgICAgaWYgKGVsZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRhdGEgc3VibWl0dGVkIG9uIGNyZWF0ZSBkYXNoYm9hcmQgZm9ybVxuICAgKi9cbiAgdmFsaWRhdGVEYXNoYm9hcmQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgICBjb25zdCBldmVudCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lO1xuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDtcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0ID0gZGVzY3JpcHRpb25cbiAgICAgIC5yZXBsYWNlKHJlLCAnJylcbiAgICAgIC50cmltKCk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8XG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZS50cmltKCkgPT0gJycgfHxcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLmxlbmd0aCA+IDMwIHx8XG4gICAgICB0aGlzLnRleHRDb3VudC50cmFuc2Zvcm0odGhpcy5kYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQpID5cbiAgICAgICAgMjUwIHx8XG4gICAgICAodGhpcy5kYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEZyb21EYXRlICYmXG4gICAgICAgICF0aGlzLmRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVG9EYXRlKSB8fFxuICAgICAgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCAmJlxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID09IDApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhbiBhcGkgY2FsbCB0byBjcmVhdGUgYSBwb2xpY3lcbiAgICogQHBhcmFtIGRhc2hib2FyZCBjb250YWlucyBkYXNoYm9hcmRGb3JtIGRhdGFcbiAgICovXG4gIHN1Ym1pdERhc2hib2FyZCgpIHtcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZURhc2hib2FyZCgpO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcbiAgICBjb25zdCBkYXNoYm9hcmQgPSB0aGlzLmRhc2hib2FyZEZvcm07XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgZGFzaGJvYXJkX25hbWU6IGRhc2hib2FyZC5kYXNoYm9hcmROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IGRhc2hib2FyZC5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQsXG4gICAgICAgICAgYXR0YWNobWVudHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHZpc2libGVfdG9fdXNlcnM6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFZpZXdlcnMsICdtZW1iZXJfaWQnKSxcbiAgICAgIHZpc2libGVfdG9fZ3JvdXBzOiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRHcm91cCwgJ2dyb3VwX2lkJyksXG4gICAgICByZXNwb25zaWJpbGl0eV9jZW50ZXI6IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICBkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMsXG4gICAgICAgICdpdGVtX2lkJ1xuICAgICAgKSxcbiAgICAgIHJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhcbiAgICAgICAgZGFzaGJvYXJkLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLFxuICAgICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgICApLFxuICAgICAgcmlza19jYXRlZ29yeTogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIGRhc2hib2FyZC5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLFxuICAgICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgICApLFxuICAgICAgZGlzcGxheV9jcml0ZXJpYTpcbiAgICAgICAgZGFzaGJvYXJkLmRpc3BsYXlDcml0ZXJpYSA9PT0gJ2FuZCdcbiAgICAgICAgICA/ICdCT1RIX1JDX0FORF9DQVRFR09SWSdcbiAgICAgICAgICA6ICdSQ19PUl9DQVRFR09SWScsXG4gICAgICB0aW1lZnJhbWU6IHtcbiAgICAgICAgc3RhcnRfZGF0ZTogZGFzaGJvYXJkLnNlbGVjdGVkRnJvbURhdGVcbiAgICAgICAgICA/IHRoaXMuZ2V0RGF0ZUZvcm1hdGUoZGFzaGJvYXJkPy5zZWxlY3RlZEZyb21EYXRlKVxuICAgICAgICAgIDogJycsXG4gICAgICAgIGVuZF9kYXRlOiBkYXNoYm9hcmQuc2VsZWN0ZWRUb0RhdGVcbiAgICAgICAgICA/IHRoaXMuZ2V0RGF0ZUZvcm1hdGUoZGFzaGJvYXJkPy5zZWxlY3RlZFRvRGF0ZSlcbiAgICAgICAgICA6ICcnLFxuICAgICAgfSxcbiAgICAgIGVtYWlsX3N1bW1hcnk6IHRoaXMuc2V0RnJlcXVlbmN5KCcnLCAnZXhwb3J0JyksIC8vc2V0Rm9ybWF0XG4gICAgICB3aWRnZXRfZGV0YWlsczogZGFzaGJvYXJkLmNvbmZpZ3VyZVdpZGdldCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5zdWJtaXREYXNoYm9hcmQocGF5bG9hZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nLCdpbmZvJyk7XG4gICAgICAgICAgdGhpcy5pc1NtaWxleSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NtaWxleSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHsgbW9kZTogJ2NyZWF0ZWQnLCBpZDogcmVzLl9pZCB9KTtcbiAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJyxcbiAgICAgICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgIHBheWxvYWQud2lkZ2V0X3VwZGF0ZV9mbGFnID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZVxuICAgICAgICAudXBkYXRlRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQsIHBheWxvYWQpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZCcsJ2luZm8nKTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZCc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc1NtaWxleSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoeyBtb2RlOiAndXBkYXRlZCcgfSk7XG4gICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdERhc2hib2FyZCgpIHtcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJZCkge1xuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmZldGNoRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlcztcbiAgICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IFtyZXMuY3JlYXRlZF9ieV07XG4gICAgICAgICAgZGF0YS52aXNpYmxlX3RvX2dyb3VwcyA9XG4gICAgICAgICAgICBkYXRhPy52aXNpYmxlX3RvX2dyb3VwcyAmJiBkYXRhLnZpc2libGVfdG9fZ3JvdXBzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGRhdGEudmlzaWJsZV90b19ncm91cHNcbiAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlRGFzaGJvYXJkRm9ybShkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcG9wdWxhdGVEYXNoYm9hcmRGb3JtKGRhdGE6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAodGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBkYXRhPy5kYXNoYm9hcmRfbmFtZSksXG4gICAgICAgICh0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0ID1cbiAgICAgICAgICBkYXRhPy5kZXNjcmlwdGlvblswXT8uY29udGVudCA/PyAnJyksXG4gICAgICAgICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgIGRhdGE/LnZpc2libGVfdG9fdXNlcnMsXG4gICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgKSk7XG4gICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcbiAgICAgIGRhdGEudmlzaWJsZV90b19ncm91cHMgPVxuICAgICAgICBkYXRhPy52aXNpYmxlX3RvX2dyb3VwcyAmJiBkYXRhPy52aXNpYmxlX3RvX2dyb3Vwcy5sZW5ndGhcbiAgICAgICAgICA/IGRhdGE/LnZpc2libGVfdG9fZ3JvdXBzXG4gICAgICAgICAgOiBbXTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEdyb3VwID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICB0aGlzLmdyb3VwTGlzdCxcbiAgICAgICAgZGF0YT8udmlzaWJsZV90b19ncm91cHMgPz8gW10sXG4gICAgICAgICdncm91cF9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkR3JvdXBMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkR3JvdXA7XG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCxcbiAgICAgICAgZGF0YT8ucmVzcG9uc2liaWxpdHlfY2VudGVyLFxuICAgICAgICAnaXRlbV9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMuYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXMsXG4gICAgICAgIGRhdGE/LnJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5LFxuICAgICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMuYWxsUmlza0NhdGVnb3JpZXMsXG4gICAgICAgIGRhdGE/LnJpc2tfY2F0ZWdvcnksXG4gICAgICAgICdjYXRlZ29yeV9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhID1cbiAgICAgICAgZGF0YT8uZGlzcGxheV9jcml0ZXJpYSA9PT0gJ0JPVEhfUkNfQU5EX0NBVEVHT1JZJyA/ICdhbmQnIDogJ29yJztcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlID0gZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlXG4gICAgICAgID8gbmV3IERhdGUoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IGRhdGE/LnRpbWVmcmFtZT8uZW5kX2RhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShkYXRhPy50aW1lZnJhbWU/LmVuZF9kYXRlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCA9IGRhdGEud2lkZ2V0X2RldGFpbHM7XG4gICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9XG4gICAgICAgIGRhdGEud2lkZ2V0X2RldGFpbHMubGVuZ3RoID4gMCA/IFsuLi5uZXcgU2V0KGRhdGEud2lkZ2V0X2RldGFpbHMpXSA6IFtdO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRXaWRnZXRzID1cbiAgICAgICAgZGF0YS5hbGxfd2lkZ2V0cy5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoZGF0YS5hbGxfd2lkZ2V0cyldIDogW107XG4gICAgICB0aGlzLnNldEZyZXF1ZW5jeShkYXRhPy5lbWFpbF9zdW1tYXJ5LCAnaW1wb3J0Jyk7XG4gICAgICBsZXQgbWluVG9EYXRlID0gdGhpcy5zZXRUb0RhdGUoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKTtcbiAgICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcbiAgICAgIH0sIDIwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcigncG9wdWxhdGUgZGFzaGJvYXJkIGVycm9yID0+JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZyZXF1ZW5jeShldmVudDogYW55LCBtb2RlOiBhbnkpIHtcbiAgICBpZiAobW9kZSA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSkge1xuICAgICAgICBjYXNlICd3ZWVrbHknOlxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcmVxdWVuY2llcz8ubWFwKFxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBOdW1iZXIoZWxlKSArIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlID0gd2Vla2x5VmFsdWVEYXRhPy5qb2luKCk7XG4gICAgICAgICAgcmV0dXJuICcyficgKyB3ZWVrbHlWYWx1ZSArICd+MH4wJztcbiAgICAgICAgY2FzZSAnbW9udGhseSc6XG4gICAgICAgICAgY29uc3QgbW9udGhseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcmVxdWVuY2llcz8ubWFwKFxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBOdW1iZXIoZWxlKSArIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG1vbnRobHlWYWx1ZSA9IG1vbnRobHlWYWx1ZURhdGE/LmpvaW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJzN+JyArIHRoaXMuZGFzaGJvYXJkRm9ybT8uZnJlcXVlbmN5RGF0ZSArICd+JyArIG1vbnRobHlWYWx1ZSArICd+MCdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlICdxdWFydGVybHknOlxuICAgICAgICAgIGNvbnN0IHF1YXJ0ZXJseVZhbHVlRGF0YSA9XG4gICAgICAgICAgICBOdW1iZXIodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMpICsgMTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJzd+JyArXG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArXG4gICAgICAgICAgICAnficgK1xuICAgICAgICAgICAgcXVhcnRlcmx5VmFsdWVEYXRhICtcbiAgICAgICAgICAgICd+MCdcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ2ltcG9ydCcpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnNwbGl0KCd+Jyk7XG4gICAgICBzd2l0Y2ggKHZhbFswXSkge1xuICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nVmFsID0gJ0V2ZXJ5ICc7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ3dlZWtseSc7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IHZhbFsxXVxuICAgICAgICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgPy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gTnVtYmVyKGVsZW1lbnQpIC0gMSk7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcz8uZm9yRWFjaChcbiAgICAgICAgICAgICAgKGRheUluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdWYWwgKz1cbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXlOYW1lc1tkYXlJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiAnLCAnICsgdGhpcy5kYXlOYW1lc1tkYXlJbmRleF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IHN0cmluZ1ZhbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnMyc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9ICdldmVyeSAnO1xuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdtb250aGx5JztcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID0gdmFsWzFdO1xuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSB2YWxbMl1cbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgID8ubWFwKChlbGVtZW50OiBhbnkpID0+IE51bWJlcihlbGVtZW50KSAtIDEpO1xuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMuZm9yRWFjaChcbiAgICAgICAgICAgICAgKG1vbnRoSW5kZXg6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmluZ1ZhbCArPVxuICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1vbnRoTmFtZXNbbW9udGhJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiAnLCAnICsgdGhpcy5tb250aE5hbWVzW21vbnRoSW5kZXhdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IG1vbnRoRGF0ZU5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gJzEnKSB7XG4gICAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMXN0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gJzInKSB7XG4gICAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gJzMnKSB7XG4gICAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnM3JkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd0aCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9XG4gICAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgKyAnIG9mICcgKyBzdHJpbmdWYWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc3JzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nVmFsID0gJ2V2ZXJ5ICc7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ3F1YXJ0ZXJseSc7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXTtcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID1cbiAgICAgICAgICAgICAgTnVtYmVyKHZhbFsyXS5zcGxpdCgnLCcpWzBdKSAtIDE7XG4gICAgICAgICAgICBzdHJpbmdWYWwgKz0gdGhpcy5xdWFydGVyc1t0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc107XG4gICAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSAnMScpIHtcbiAgICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcxc3QnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSAnMicpIHtcbiAgICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICcybmQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSAnMycpIHtcbiAgICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID1cbiAgICAgICAgICAgICAgbW9udGhEYXRlTmFtZSArICcgb2YgJyArIHN0cmluZ1ZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIC8veW91ciBjb2RlIHRvIHVwZGF0ZSB0aGUgbW9kZWxcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzZXRQZXJtaXNzaW9uKHJvbGVBY3Rpb25zOiBhbnkpIHtcbiAgICBsZXQgaWZFeGlzdFJpc2sgPSByb2xlQWN0aW9ucz8uZmluZCgoZWw6IGFueSkgPT4gZWwubW9kdWxlTmFtZSA9PSAncmlzaycpO1xuICAgIGlmRXhpc3RSaXNrPy5zdWJNb2R1bGU/LmZvckVhY2goKG1vZHVsZTogYW55KSA9PiB7XG4gICAgICBtb2R1bGU/LnBlcm1pc3Npb25zPy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgc3dpdGNoIChwZXJtaXNzaW9uPy5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnUlJNUic6IHtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uPy5kZWZhdWx0UGVybWlzc2lvbiA9PSAxIHx8IHBlcm1pc3Npb24/LmVuYWJsZSA9PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNNYW5hZ2VSaXNrID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQ/LnRhcmdldCBhcyBFbGVtZW50O1xuICAgIGNvbnN0IGZyb21EYXRlSW5wdXRFbGVtZW50ID1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3BlbmVkRGF0ZVBpY2tlci50b0xvd2VyQ2FzZSgpKSB8fCBudWxsO1xuICAgIGNvbnN0IGRhdGVQaWNrZXJDYWxlbmRhckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAnZHAtZGF5LWNhbGVuZGFyLWNvbnRhaW5lcidcbiAgICApWzBdO1xuICAgIGNvbnN0IG1vbnRoWWVhckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5kcC1tb250aC1jYWxlbmRhci1jb250YWluZXInXG4gICAgKTtcbiAgICBjb25zdCBpc05vdE1vbnRoWWVhckVsZW1lbnQgPSAhbW9udGhZZWFyRWxlbWVudD8uY29udGFpbnModGFyZ2V0RWxlbWVudCk7XG5cbiAgICBjb25zdCBvcGVuZWRFbGVtZW50ID1cbiAgICAgIHRoaXMub3BlbmVkRGF0ZVBpY2tlciA9PT0gJ0ZST01fREFURSdcbiAgICAgICAgPyB0aGlzLmZyb21EYXRlUGlja2VyUG9wdXBcbiAgICAgICAgOiB0aGlzLnRvRGF0ZVBpY2tlclBvcHVwO1xuICAgIGNvbnN0IGlzT3V0c2lkZUZyb21EYXRlSW5wdXQgPVxuICAgICAgIW9wZW5lZEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpO1xuICAgIGNvbnN0IGlzTm90RnJvbURhdGVFbGVtZW50ID0gZXZlbnQ/LnRhcmdldCAhPT0gZnJvbURhdGVJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgaXNOb3RJbnNpZGVDYWxlbmRhciA9XG4gICAgICAhZGF0ZVBpY2tlckNhbGVuZGFyQ29udGFpbmVyPy5jb250YWlucyh0YXJnZXRFbGVtZW50KTtcbiAgICBjb25zdCBzZWxlY3RlZERhdGVQaWNrZXIgPVxuICAgICAgdGhpcy5vcGVuZWREYXRlUGlja2VyID09PSAnRlJPTV9EQVRFJ1xuICAgICAgICA/IHRoaXMuZnJvbURhdGVQaWNrZXJcbiAgICAgICAgOiB0aGlzLnRvRGF0ZVBpY2tlcjtcblxuICAgIGNvbnN0IGlzTm90Q2FsZW5kYXJNb250aCA9XG4gICAgICAhdGFyZ2V0RWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ2RwLWNhbGVuZGFyLW1vbnRoJyk7XG5cbiAgICBpZiAoXG4gICAgICBpc091dHNpZGVGcm9tRGF0ZUlucHV0ICYmXG4gICAgICBpc05vdEZyb21EYXRlRWxlbWVudCAmJlxuICAgICAgaXNOb3RJbnNpZGVDYWxlbmRhciAmJlxuICAgICAgaXNOb3RDYWxlbmRhck1vbnRoICYmXG4gICAgICBpc05vdE1vbnRoWWVhckVsZW1lbnQgJiZcbiAgICAgIGRhdGVQaWNrZXJDYWxlbmRhckNvbnRhaW5lclxuICAgICkge1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoXG4gICAgICAgIGV2ZW50LnRhcmdldCxcbiAgICAgICAgb3BlbmVkRWxlbWVudCxcbiAgICAgICAgc2VsZWN0ZWREYXRlUGlja2VyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50Q2xpY2tMaXN0ZW5lcihcbiAgICB0YXJnZXQ6IGFueSxcbiAgICBvcGVuZWRFbGVtZW50czogRWxlbWVudFJlZixcbiAgICBzZWxlY3RlZERhdGVQaWNrZXI6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhb3BlbmVkRWxlbWVudHM/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRhcmdldCkgJiZcbiAgICAgIHNlbGVjdGVkRGF0ZVBpY2tlcj8uYXJlQ2FsZW5kYXJzU2hvd25cbiAgICApIHtcbiAgICAgIHNlbGVjdGVkRGF0ZVBpY2tlcj8uYXBpPy5jbG9zZSgpO1xuICAgICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGFwcC1zbmFjay1iYXI+PC9hcHAtc25hY2stYmFyPlxuPGRpdiBjbGFzcz1cImNyZWF0ZS1kYXNoYm9hcmRcIiAqbmdJZj1cIiFvcGVuQ29uZmlndXJlV2lkZ2V0c1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lciB2eC1kLWZsZXggdngtanVzdGlmeS1lbmRcIlxuICAgIFtjbGFzcy5hbmltYXRlLXNsaWRlSW5SaWdodF09XCJhbmltYXRpb25cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb3JlLW9wdGlvblwiXG4gICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgID5cbiAgICAgIDxhcHAtdXNlci1saXN0XG4gICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICd3aG9DYW5WaWV3J1wiXG4gICAgICAgIChzYXZlU2VsZWN0ZWRVc2Vycyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCd3aG9DYW5WaWV3JywgJGV2ZW50KVwiXG4gICAgICAgIChjbG9zZVVzZXJMaXN0KT1cImFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVwiXG4gICAgICAgIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIlxuICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsTGlzdFwiXG4gICAgICAgIFtsaXN0RGV0YWlsc109XCJsaXN0RGV0YWlsc1wiXG4gICAgICAgIFt0b3RhbGdyb3Vwc2NvdW50XT1cInRvdGFsZ3JvdXBzXCJcbiAgICAgICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgICA+PC9hcHAtdXNlci1saXN0PlxuICAgICAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjTGlzdCdcIlxuICAgICAgICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XCJcbiAgICAgICAgW3JhZGlvU2VsZWN0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW3NlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzXT1cIlxuICAgICAgICAgIGRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgXCJcbiAgICAgICAgW3JjSWRLZXldPVwiJ2l0ZW1faWQnXCJcbiAgICAgICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCAkZXZlbnQpXCJcbiAgICAgICAgKGNsb3NlUmNMaXN0KT1cImFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVwiXG4gICAgICA+XG4gICAgICA8L2FwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXI+XG4gICAgICA8YXBwLWNhdGVnb3JpZXNcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcydcIlxuICAgICAgICBbY2F0ZWdvcnlMaXN0XT1cInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWVcIlxuICAgICAgICBbYWxsQ2F0ZWdvcmllc109XCJhbGxDb21wbGlhbmNlQ2F0ZWdvcmllc1wiXG4gICAgICAgIFtjYXRlZ29yeUlkS2V5XT1cIidjYXRlZ29yeV9pZCdcIlxuICAgICAgICBbc2VsZWN0ZWRDYXRlZ29yaWVzXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNcIlxuICAgICAgICAoc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkpPVwiXG4gICAgICAgICAgc2F2ZVNlbGVjdGVkTGlzdCgncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJywgJGV2ZW50KVxuICAgICAgICBcIlxuICAgICAgICAoY2xvc2VDYXRlZ29yaWVzTGlzdCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSlcIlxuICAgICAgPjwvYXBwLWNhdGVnb3JpZXM+XG4gICAgICA8YXBwLXJpc2stY2F0ZWdvcmllc1xuICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmlza0NhdGVnb3JpZXMnXCJcbiAgICAgICAgW2NhdGVnb3J5TGlzdF09XCJyaXNrQ2F0ZWdvcnlMaXN0XCJcbiAgICAgICAgW2FsbENhdGVnb3JpZXNdPVwiYWxsUmlza0NhdGVnb3JpZXNcIlxuICAgICAgICBbY2F0ZWdvcnlJZEtleV09XCInY2F0ZWdvcnlfaWQnXCJcbiAgICAgICAgW3NlbGVjdGVkQ2F0ZWdvcmllc109XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXNcIlxuICAgICAgICAoc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmlza0NhdGVnb3J5JywgJGV2ZW50KVwiXG4gICAgICAgIChjbG9zZUNhdGVnb3JpZXNMaXN0KT1cImFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVwiXG4gICAgICA+PC9hcHAtcmlzay1jYXRlZ29yaWVzPlxuXG4gICAgICA8YXBwLWZyZXF1ZW5jeVxuICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiXG4gICAgICAgIChjbG9zZUZyZXF1ZW5jeVBvcHVwKT1cImFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVwiXG4gICAgICAgIChzYXZlRnJlcXVlbmN5KT1cInNhdmVGcmVxdWVuY3koJGV2ZW50KVwiXG4gICAgICAgIFtzYXZlZEZyZXF1ZW5jeVRhYl09XCJkYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZVwiXG4gICAgICAgIFtzZWxlY3RlZERhdGVdPVwiZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlXCJcbiAgICAgICAgW3NhdmVkRnJlcXVlbmNpZXNdPVwiZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLWZyZXF1ZW5jeT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInZ4LWRpYWxvZy1jb250YWluZXIgc2lkZS1kaWFsb2dcIlxuICAgICAgW2NsYXNzLnRhYmxldC13aWR0aF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJ2TG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidngtZGlhbG9nLWJvZHktY29udGFpbmVyXCJcbiAgICAgICAgICAoc2Nyb2xsKT1cImFuaW1hdGVJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuLXNjcm9sbF09XCJwb3BvdmVyU2VydmljZS5zdG9wU2Nyb2xsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRGFzaGJvYXJkIE5hbWUgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBbbmdTcmNdPVwiQVNTRVRTLmRhc2hCb2FyZEljb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnbmFtZSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC1kLWJsb2NrIHZ4LXR0LXVwcGVyY2FzZSB2eC1tYi0yIHZ4LXctMTAwIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgPkRhc2hib2FyZCBOYW1lXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmUgdngtdHh0LXJlZCB2eC1mcy0xNiB2eC1mdy00MDBcIlxuICAgICAgICAgICAgICAgICAgICA+Kjwvc3BhblxuICAgICAgICAgICAgICAgICAgPjwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0RmllbGRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBkYXNoYm9hcmQgbmFtZSAoTWF4IGxpbWl0OiAzMCBjaGFyYWN0ZXJzKS5cIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzaW4pPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmROYW1lPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IDMwIC0gZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLmxlbmd0aCB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtdHh0LWVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRhc2hib2FyZEZvcm0/LmRhc2hib2FyZE5hbWU/Lmxlbmd0aCA+IDMwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIWRhc2hib2FyZEZvcm0/LmRhc2hib2FyZE5hbWUpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZS5sZW5ndGggPiAzMFxuICAgICAgICAgICAgICAgICAgICAgID8gXCJZb3UgaGF2ZSBleGNlZWRlZCB0aGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgb2YgMzAgY2hhcmFjdGVycy5cIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIERhc2hib2FyZC5cIlxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtaW5wdXQtZ3JvdXAgdngtbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgPHZjb21wbHktZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgIFtlZGl0b3JDb25maWddPVwiZGFzaGJvYXJkRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0XCJcbiAgICAgICAgICAgICAgICAgID48L3Zjb21wbHktZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQ/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAyNTAgLVxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhc2hib2FyZEZvcm0/LmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCB8IHRleHRDb3VudClcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LXR4dC1lcnJvclwiXG4gICAgICAgICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgICAgICAgIChkYXNoYm9hcmRGb3JtPy5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgfCB0ZXh0Q291bnQpID4gMjUwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBvZiAyNTBcbiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBXaG8gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnd2hvQ2FuVmlldydcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3dob0NhblZpZXcnICYmXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBbbmdTcmNdPVwiQVNTRVRTLmRhc2hCb2FyZFVzZXJzSWNvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnd2hvQ2FuVmlldydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnd2hvQ2FuVmlldydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC1kLWJsb2NrIHZ4LXR0LXVwcGVyY2FzZSB2eC1tYi0yIHZ4LXctMTAwIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgPldobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD88c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlcXVpcmUgdngtdHh0LXJlZCB2eC1mcy0xNiB2eC1mdy00MDBcIlxuICAgICAgICAgICAgICAgICAgICA+Kjwvc3BhblxuICAgICAgICAgICAgICAgICAgPjwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCd3aG9DYW5WaWV3JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cHNFbmFibGVkXCIgaWQ9XCJvbmx5dXNlcnNsaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXIgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm1lbWJlcl9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd2hvQ2FuVmlldycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJ1c2VyLm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHVzZXIubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFncm91cHNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biBncmVlbkJnIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJMaXN0LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAre3sgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRWaWV3ZXJzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjdXNlckxpc3QgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwidXNlcj8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm1lbWJlcl9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAhZ3JvdXBzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd2hvQ2FuVmlldycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBzRW5hYmxlZFwiIGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5VU0VSKFMpPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gZ3JlZW5CZyB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEdyb3VwPy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVmlld2Vycz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+Jjwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkR3JvdXA/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2Vyc2FuZGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5VU0VSIEdST1VQKFMpPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JvdXBDb3VudC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkR3JvdXA/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFZpZXdlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJkYXRhLm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcy1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3dob0NhblZpZXcnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImRhdGEuZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd2hvQ2FuVmlld0dyb3VwJywgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGEuZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICd3aG9DYW5WaWV3J1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCd3aG9DYW5WaWV3JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFJlc3BvbnNpYmlsaXR5IENlbnRlciAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyY0xpc3QnXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyY0xpc3QnICYmXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ3JjTGlzdCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1NyY109XCJBU1NFVFMuZGFzaEJvYXJkUmNJY29uXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMzZcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjM2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyY0xpc3QnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LWQtYmxvY2sgdngtdHQtdXBwZXJjYXNlIHZ4LW1iLTIgdngtdy0xMDAgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+UkVTUE9OU0lCSUxJVFkgQ0VOVEVSKFMpPC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoID09IDBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmNMaXN0JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGggPT1cbiAgICAgICAgICAgICAgICAgICAgICAwICYmXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA9PSAwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIHRoYXQgeW91IHdvdWxkIGxpa2U8YnIgLz5kaXNwbGF5ZWRcbiAgICAgICAgICAgICAgICAgICAgaW4gdGhlIERhc2hib2FyZCwgaWYgYW55LlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHJjIG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJyYy5pdGVtX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57eyByYy5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmNMaXN0LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAre3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5zbGljZSgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNyY0xpc3QgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwicmM/Lml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJjPy5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmNMaXN0J1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyY0xpc3QnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gUHJvZ3JhbSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnICYmXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aCA9PVxuICAgICAgICAgICAgICAgICAgICAwIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW25nU3JjXT1cIkFTU0VUUy5kYXNoQm9hcmRQcm9ncmFtSWNvblwiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjM2XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzNlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC1kLWJsb2NrIHZ4LXR0LXVwcGVyY2FzZSB2eC1tYi0yIHZ4LXctMTAwIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgPlBST0dSQU08L2xhYmVsXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXM/Lmxlbmd0aCA9PVxuICAgICAgICAgICAgICAgICAgICAgIDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoZSBQcm9ncmFtKHMpIHRoYXQgeW91IHdvdWxkIGxpa2UgZGlzcGxheWVkIGluXG4gICAgICAgICAgICAgICAgICAgIHRoZTxiciAvPkRhc2hib2FyZCwgaWYgYW55LlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHJDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8uc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJywgckNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJyQ2F0ZWdvcnkuaXRlbV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgckNhdGVnb3J5Lml0ZW1fbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwickNhdGVnb3J5TGlzdC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcz8uc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNyQ2F0ZWdvcnlMaXN0IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJyQ2F0ZWdvcnk/Lml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgckNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByQ2F0ZWdvcnk/Lml0ZW1fbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcycsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSaXNrIENhdGVnb3J5IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jpc2tDYXRlZ29yaWVzJ1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dSaXNrQ2F0ZWdvcnkgJiYgaXNNYW5hZ2VSaXNrXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2F0ZWdvcmllcycgJiZcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2F0ZWdvcmllcydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1NyY109XCJBU1NFVFMuZGFzaEJvYXJkUmlza0ljb25cIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmlza0NhdGVnb3JpZXMnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCIgKm5nSWY9XCJpc01hbmFnZVJpc2tcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9jayB2eC1tYi00XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHQgdngtZC1ibG9jayB2eC10dC11cHBlcmNhc2UgdngtbWItMiB2eC13LTEwMCB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgID5SSVNLIENBVEVHT1JJRVM8L2xhYmVsXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jpc2tDYXRlZ29yaWVzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGggPT1cbiAgICAgICAgICAgICAgICAgICAgICAwICYmXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA9PSAwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgUmlzayBDYXRlZ29yaWVzIHRoYXQgeW91IHdvdWxkIGxpa2UgZGlzcGxheWVkPGJyIC8+aW5cbiAgICAgICAgICAgICAgICAgICAgdGhlIERhc2hib2FyZCwgaWYgYW55LlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcmlza0NhdGVnb3J5IG9mIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/LnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jpc2tDYXRlZ29yeScsIHJpc2tDYXRlZ29yeSlcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwicmlza0NhdGVnb3J5LmNhdGVnb3J5X25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57eyByaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyaXNrTGlzdC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzPy5zbGljZSgxKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3Jpc2tMaXN0IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJpc2tDYXRlZ29yeSBvZiBkYXNoYm9hcmRGb3JtPy5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cInJpc2tDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmlza0NhdGVnb3J5Jywgcmlza0NhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmlza0NhdGVnb3J5Py5jYXRlZ29yeV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jpc2tDYXRlZ29yaWVzJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyaXNrQ2F0ZWdvcmllcycsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEaXNwbGF5IENyaXRlcmlhIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtPy5kaXNwbGF5Q3JpdGVyaWE/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICAgICBbbmdTcmNdPVwiQVNTRVRTLmRhc2hCb2FyZFVzZXJzSWNvblwiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjM2XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzNlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZEZvcm0/LmRpc3BsYXlDcml0ZXJpYT8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCB2eC1kLWJsb2NrIHZ4LW1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC1kLWJsb2NrIHZ4LXR0LXVwcGVyY2FzZSB2eC1tYi0yIHZ4LXctMTAwIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgPkRJU1BMQVkgQ1JJVEVSSUE8L2xhYmVsXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cFwiICpuZ0lmPVwic2hvd0NyaXRlcmlhXCI+XG4gICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhID09ICdvcidcIlxuICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhID0gJ29yJ1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFRob3NlIEl0ZW1zIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGVpdGhlciB0aGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIG9yIHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBDYXRlZ29yaWVzLjwvYXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZGFzaGJvYXJkRm9ybS5kaXNwbGF5Q3JpdGVyaWEgPT0gJ2FuZCdcIlxuICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cImRhc2hib2FyZEZvcm0uZGlzcGxheUNyaXRlcmlhID0gJ2FuZCdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBUaG9zZSBJdGVtcyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBib3RoIHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJpbGl0eSBDZW50ZXIocykgYW5kIHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBDYXRlZ29yaWVzLjwvYXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRpbWVmcmFtZSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgIWRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVG9EYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdTcmNdPVwiQVNTRVRTLmRhc2hCb2FyZFRpbWVGcmFtZUljb25cIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkRnJvbURhdGUgJiZcbiAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkVG9EYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwIHZ4LWQtYmxvY2sgdngtbWItNFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LWQtYmxvY2sgdngtdHQtdXBwZXJjYXNlIHZ4LW1iLTIgdngtdy0xMDAgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+VElNRUZSQU1FPC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsLXN1Yi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICA+U2VsZWN0IGhvdyBsb25nIHlvdSB3b3VsZCBsaWtlIHRoZSBpbmZvcm1hdGlvbiBzZWxlY3RlZCB0byBiZVxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkIGZvci4gSWYgbm8gdGltZWZyYW1lIGlzIHNlbGVjdGVkLCB0aGUgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZGlzcGxheWVkIHBlcm1hbmVudGx5LjwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkyZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImZyb21fZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZSB8IGRhdGUgOiAnZGQgTU1NIHl5eXknXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZyb21EYXRlUGlja2VyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICNmcm9tRGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUZyb21EYXRlUGlja2VyKCk7IGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZnJvbURhdGVQaWNrZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kcC1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlRnJvbURhdGVQaWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwidG9fZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRUb0RhdGUgfCBkYXRlIDogJ2RkIE1NTSB5eXl5J1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUbydcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVG9EYXRlUGlja2VyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICN0b0RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvblNlbGVjdCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlVG9EYXRlUGlja2VyKCk7IGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidG9EYXRlUGlja2VyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZHAtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVRvRGF0ZVBpY2tlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVQaWNrZXJPdmVybGF5XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtdHh0LWVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICFkYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHRpbWUtZnJhbWUuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBTdW1tYXJ5IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeScgJiZcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW25nU3JjXT1cIkFTU0VUUy5kYXNoQm9hcmRFbWFpbFN1bW1hcmllc0ljb25cIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIzNlwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgdngtZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LWQtYmxvY2sgdngtdHQtdXBwZXJjYXNlIHZ4LW1iLTIgdngtdy0xMDAgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICA+RW1haWwgU3VtbWFyaWVzPC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsLXN1Yi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICA+SWYgeW91IHdvdWxkIGxpa2UgdG8gc2VuZCBhIHN1bW1hcnkgb2YgdGhpcyBEYXNoYm9hcmQsIHBsZWFzZVxuICAgICAgICAgICAgICAgICAgc2VsZWN0IGEgZnJlcXVlbmN5KEJ5IGRlZmF1bHQgVkNvbXBseSBzZW5kcyBhIHdlZWtseVxuICAgICAgICAgICAgICAgICAgU3VtbWFyeSkuPC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBFbWFpbCBTdW1tYXJpZXNcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFRleHQgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwiZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJsb2NrXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ2eC1idG4gYmxvY2sgcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlndXJlRGFzaGJvYXJkKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIE5leHQ6IENvbmZpZ3VyZSBXaWRnZXRzXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjbG9zZS1kaWFsb2dcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2UuZW1pdCh7IG1vZGU6ICdkaXNjYXJkJyB9KVwiXG4gICAgICAgIFthclRvb2x0aXBdPVwiJ1tFc2NdIHRvIGNsb3NlJ1wiXG4gICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzLmhpZGVdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTNmOzwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImdsb2JhbC1jb25maXJtYXRpb24tYWxlcnRcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgIGRhc2hib2FyZEZvcm0/LnNlbGVjdGVkUmlza0NhdGVnb3JpZXM/Lmxlbmd0aCA9PSAwXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtY29uZmlybWF0aW9uLWFsZXJ0LXRvcFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1ibG9ja1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cInRleHRcIiAqbmdJZj1cInNob3dSaXNrQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIFNlbGVjdCBhIFJlc3BvbnNpYmlsaXR5IENlbnRlciwgUHJvZ3JhbSBvciBSaXNrIENhdGVnb3J5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInRleHRcIiAqbmdJZj1cIiFzaG93Umlza0NhdGVnb3J5XCI+XG4gICAgICAgICAgICBTZWxlY3QgYSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgb3IgUHJvZ3JhbS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWNvbmZpcm1hdGlvbi1hbGVydC1ib3R0b21cIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1lc3NhZ2VcIj48L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZpbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdHRlZCA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgIE9LQVlcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48YXBwLXNtaWxleS1kaWFsb2dcbiAgKm5nSWY9XCJpc1NtaWxleVwiXG4gIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIlxuPjwvYXBwLXNtaWxleS1kaWFsb2c+XG5cbjxhcHAtY29uZmlndXJlLXdpZGdldHNcbiAgKm5nSWY9XCJvcGVuQ29uZmlndXJlV2lkZ2V0c1wiXG4gIFttb2RlXT1cIm1vZGVcIlxuICBbZGlzcGxheWVkV2lkZ2V0c109XCJkaXNwbGF5ZWRXaWRnZXRzXCJcbiAgW3Nob3dSaXNrXT1cInNob3dSaXNrV2lkZ2V0c1wiXG4gIFtzaG93Q29tcGxpYW5jZV09XCJzaG93Q29tcGxpYW5jZVdpZGdldHNcIlxuICBbc2VsZWN0ZWRXaWRnZXRzRGF0YV09XCJzZWxlY3RlZFdpZGdldHNcIlxuICAod2lkZ2V0c0RhdGFNb2RpZmllZCk9XCJzZXRTZWxlY3RlZFdpZGdldHMoJGV2ZW50KVwiXG4gIChjbG9zZUNvbmZpZ3VyZVdpZGdldHMpPVwiY2xvc2VDb25maWd1cmVXaWRnZXRzKCRldmVudClcIlxuPjwvYXBwLWNvbmZpZ3VyZS13aWRnZXRzPlxuIl19