@thetradeengineorg1/snova-shell-module 0.0.260 → 0.0.261

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +24 -24
  2. package/bundles/thetradeengineorg1-snova-shell-module.umd.js +18874 -18874
  3. package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -1
  4. package/esm2015/lib/globaldependencies/components/avatar.component.js +33 -33
  5. package/esm2015/lib/globaldependencies/components/componentbase.js +538 -538
  6. package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -449
  7. package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -38
  8. package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -70
  9. package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -144
  10. package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -37
  11. package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -32
  12. package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -40
  13. package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -36
  14. package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -24
  15. package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -24
  16. package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -22
  17. package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -24
  18. package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -346
  19. package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -23
  20. package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -25
  21. package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -27
  22. package/esm2015/lib/shell-components/components/Payments/account.component.js +121 -121
  23. package/esm2015/lib/shell-components/components/Payments/company-information.js +558 -558
  24. package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +636 -636
  25. package/esm2015/lib/shell-components/components/Payments/document.component.js +129 -129
  26. package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +90 -90
  27. package/esm2015/lib/shell-components/components/Payments/product-service.component.js +438 -438
  28. package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +249 -249
  29. package/esm2015/lib/shell-components/components/Payments/transactions.component.js +172 -172
  30. package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +350 -350
  31. package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +102 -102
  32. package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +126 -126
  33. package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +502 -502
  34. package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +98 -98
  35. package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +87 -87
  36. package/esm2015/lib/shell-components/components/header-side/header-side.component.js +2342 -2342
  37. package/esm2015/lib/shell-components/components/header-top/header-top.component.js +489 -489
  38. package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +55 -55
  39. package/esm2015/lib/shell-components/components/menu/menu.component.js +3413 -3413
  40. package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -10
  41. package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +110 -110
  42. package/esm2015/lib/shell-components/components/notifications/notifications.component.js +534 -534
  43. package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +39 -39
  44. package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +148 -148
  45. package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +439 -439
  46. package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +75 -75
  47. package/esm2015/lib/shell-components/constants/api-urls.js +1052 -1052
  48. package/esm2015/lib/shell-components/constants/available-languages.js +25 -25
  49. package/esm2015/lib/shell-components/constants/channel-names.js +38 -38
  50. package/esm2015/lib/shell-components/constants/menu-categories.js +6 -6
  51. package/esm2015/lib/shell-components/constants/notification-routes.js +6 -6
  52. package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -42
  53. package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -13
  54. package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -3
  55. package/esm2015/lib/shell-components/models/AppNotification.js +17 -17
  56. package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -12
  57. package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -3
  58. package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -3
  59. package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -2
  60. package/esm2015/lib/shell-components/models/IBadge.js +2 -2
  61. package/esm2015/lib/shell-components/models/IChildItem.js +2 -2
  62. package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -2
  63. package/esm2015/lib/shell-components/models/IMenuItem.js +2 -2
  64. package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -2
  65. package/esm2015/lib/shell-components/models/IntroModel.js +3 -3
  66. package/esm2015/lib/shell-components/models/MessageDetails.js +3 -3
  67. package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -3
  68. package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -10
  69. package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -10
  70. package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -22
  71. package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -3
  72. package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -5
  73. package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -11
  74. package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -12
  75. package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -9
  76. package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -13
  77. package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -10
  78. package/esm2015/lib/shell-components/models/companieslist.model.js +3 -3
  79. package/esm2015/lib/shell-components/models/company-model.js +7 -7
  80. package/esm2015/lib/shell-components/models/company-payment-model.js +3 -3
  81. package/esm2015/lib/shell-components/models/dragedWidget.js +3 -3
  82. package/esm2015/lib/shell-components/models/employee-List.js +3 -3
  83. package/esm2015/lib/shell-components/models/employee.js +4 -4
  84. package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -3
  85. package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -3
  86. package/esm2015/lib/shell-components/models/export-data.module.js +8 -8
  87. package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -9
  88. package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -3
  89. package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -3
  90. package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -3
  91. package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -9
  92. package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -11
  93. package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -10
  94. package/esm2015/lib/shell-components/models/project.js +3 -3
  95. package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -3
  96. package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -3
  97. package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -7
  98. package/esm2015/lib/shell-components/models/softlabels-model.js +7 -7
  99. package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -9
  100. package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -9
  101. package/esm2015/lib/shell-components/models/store-model.js +3 -3
  102. package/esm2015/lib/shell-components/models/store-search-model.js +4 -4
  103. package/esm2015/lib/shell-components/models/themes.model.js +3 -3
  104. package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -4
  105. package/esm2015/lib/shell-components/models/user.js +8 -8
  106. package/esm2015/lib/shell-components/models/userStory.js +3 -3
  107. package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -9
  108. package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -9
  109. package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -3
  110. package/esm2015/lib/shell-components/models/validation.model.js +2 -2
  111. package/esm2015/lib/shell-components/models/widgetlist.js +6 -6
  112. package/esm2015/lib/shell-components/models/workspaceList.js +3 -3
  113. package/esm2015/lib/shell-components/services/authentication.service.js +96 -96
  114. package/esm2015/lib/shell-components/services/chat.service.js +67 -67
  115. package/esm2015/lib/shell-components/services/common-used.service.js +263 -263
  116. package/esm2015/lib/shell-components/services/feature.service.js +101 -101
  117. package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -24
  118. package/esm2015/lib/shell-components/services/layout.service.js +68 -68
  119. package/esm2015/lib/shell-components/services/payment.service.js +103 -103
  120. package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -90
  121. package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -24
  122. package/esm2015/lib/shell-components/services/signalr.service.js +113 -113
  123. package/esm2015/lib/shell-components/services/theme.service.js +161 -161
  124. package/esm2015/lib/shell-components/shell.module.js +450 -450
  125. package/esm2015/lib/shell-components/shell.routing.js +16 -16
  126. package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -260
  127. package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -248
  128. package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -39
  129. package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -19
  130. package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -74
  131. package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -503
  132. package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -139
  133. package/esm2015/lib/shell-components/store/effects/index.js +13 -13
  134. package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -53
  135. package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -56
  136. package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -116
  137. package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -86
  138. package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -68
  139. package/esm2015/lib/shell-components/store/reducers/index.js +80 -80
  140. package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -56
  141. package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -13
  142. package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -38
  143. package/esm2015/public-api.js +92 -92
  144. package/esm2015/store/reducers/index.js +47 -47
  145. package/esm2015/thetradeengineorg1-snova-shell-module.js +4 -4
  146. package/fesm2015/thetradeengineorg1-snova-shell-module.js +16979 -16979
  147. package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -1
  148. package/lib/globaldependencies/components/avatar.component.d.ts +10 -10
  149. package/lib/globaldependencies/components/componentbase.d.ts +455 -455
  150. package/lib/globaldependencies/constants/feature-ids.d.ts +448 -448
  151. package/lib/globaldependencies/constants/localstorage-properties.d.ts +37 -37
  152. package/lib/globaldependencies/helpers/dom.helper.d.ts +7 -7
  153. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +1 -1
  154. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +9 -9
  155. package/lib/globaldependencies/helpers/window.helper.d.ts +12 -12
  156. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +11 -11
  157. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +8 -8
  158. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +8 -8
  159. package/lib/globaldependencies/pipes/orderby-pipe.d.ts +9 -9
  160. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +8 -8
  161. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +11 -11
  162. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +8 -8
  163. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +8 -8
  164. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +8 -8
  165. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +8 -8
  166. package/lib/shell-components/components/Payments/account.component.d.ts +14 -14
  167. package/lib/shell-components/components/Payments/company-information.d.ts +62 -62
  168. package/lib/shell-components/components/Payments/company-plans.component.d.ts +47 -47
  169. package/lib/shell-components/components/Payments/document.component.d.ts +20 -20
  170. package/lib/shell-components/components/Payments/payment-method.component.d.ts +15 -15
  171. package/lib/shell-components/components/Payments/product-service.component.d.ts +48 -48
  172. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +37 -37
  173. package/lib/shell-components/components/Payments/transactions.component.d.ts +28 -28
  174. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +67 -67
  175. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +32 -32
  176. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +32 -32
  177. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +60 -60
  178. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +33 -33
  179. package/lib/shell-components/components/feed-time/feed-time.component.d.ts +27 -27
  180. package/lib/shell-components/components/header-side/header-side.component.d.ts +220 -220
  181. package/lib/shell-components/components/header-top/header-top.component.d.ts +40 -40
  182. package/lib/shell-components/components/lives/lives-welcome-page.d.ts +14 -14
  183. package/lib/shell-components/components/menu/menu.component.d.ts +220 -220
  184. package/lib/shell-components/components/menu/searchTask.enum.d.ts +8 -8
  185. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +27 -27
  186. package/lib/shell-components/components/notifications/notifications.component.d.ts +53 -53
  187. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +10 -10
  188. package/lib/shell-components/components/sidenav/side-bar.component.d.ts +23 -23
  189. package/lib/shell-components/components/sidenav/sidenav.component.d.ts +17 -17
  190. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +25 -25
  191. package/lib/shell-components/constants/api-urls.d.ts +1051 -1051
  192. package/lib/shell-components/constants/available-languages.d.ts +7 -7
  193. package/lib/shell-components/constants/channel-names.d.ts +37 -37
  194. package/lib/shell-components/constants/menu-categories.d.ts +5 -5
  195. package/lib/shell-components/constants/notification-routes.d.ts +5 -5
  196. package/lib/shell-components/constants/notification-type-ids.d.ts +41 -41
  197. package/lib/shell-components/enum/recentSearchType.enum.d.ts +11 -11
  198. package/lib/shell-components/models/AppMenuItemModel.d.ts +12 -12
  199. package/lib/shell-components/models/AppNotification.d.ts +12 -12
  200. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +10 -10
  201. package/lib/shell-components/models/ChannelUpdateModel.d.ts +47 -47
  202. package/lib/shell-components/models/EmployeeStatusModel.d.ts +11 -11
  203. package/lib/shell-components/models/IAdjust-screen-options.d.ts +4 -4
  204. package/lib/shell-components/models/IBadge.d.ts +4 -4
  205. package/lib/shell-components/models/IChildItem.d.ts +7 -7
  206. package/lib/shell-components/models/ILayout-change-options.d.ts +4 -4
  207. package/lib/shell-components/models/IMenuItem.d.ts +14 -14
  208. package/lib/shell-components/models/IlayoutConf.d.ts +10 -10
  209. package/lib/shell-components/models/IntroModel.d.ts +3 -3
  210. package/lib/shell-components/models/MessageDetails.d.ts +55 -55
  211. package/lib/shell-components/models/MessageTypingDetails.d.ts +9 -9
  212. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +8 -8
  213. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +8 -8
  214. package/lib/shell-components/models/NotificationsOutPutModel.d.ts +41 -41
  215. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +10 -10
  216. package/lib/shell-components/models/RecentSearchModel.d.ts +14 -14
  217. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +9 -9
  218. package/lib/shell-components/models/ReportSubmittedNotification.d.ts +10 -10
  219. package/lib/shell-components/models/RoleUpdatedNotification.d.ts +7 -7
  220. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +8 -8
  221. package/lib/shell-components/models/archiveUserStoryModel.d.ts +7 -7
  222. package/lib/shell-components/models/companieslist.model.d.ts +8 -8
  223. package/lib/shell-components/models/company-model.d.ts +31 -31
  224. package/lib/shell-components/models/company-payment-model.d.ts +18 -18
  225. package/lib/shell-components/models/dragedWidget.d.ts +16 -16
  226. package/lib/shell-components/models/employee-List.d.ts +8 -8
  227. package/lib/shell-components/models/employee.d.ts +60 -60
  228. package/lib/shell-components/models/entityRoleFeature.d.ts +9 -9
  229. package/lib/shell-components/models/export-configuration-model.d.ts +8 -8
  230. package/lib/shell-components/models/export-data.module.d.ts +6 -6
  231. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +8 -8
  232. package/lib/shell-components/models/import-configuration-model.d.ts +3 -3
  233. package/lib/shell-components/models/initialStatusofUsers.d.ts +5 -5
  234. package/lib/shell-components/models/invoiceOutput-model.d.ts +9 -9
  235. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +7 -7
  236. package/lib/shell-components/models/multiChartsScheduling.d.ts +9 -9
  237. package/lib/shell-components/models/parkUserStoryInputModel.d.ts +7 -7
  238. package/lib/shell-components/models/project.d.ts +28 -28
  239. package/lib/shell-components/models/recentSearchApiModel.d.ts +6 -6
  240. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +10 -10
  241. package/lib/shell-components/models/shellModulesInfo.d.ts +16 -16
  242. package/lib/shell-components/models/softlabels-model.d.ts +66 -66
  243. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +7 -7
  244. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +7 -7
  245. package/lib/shell-components/models/store-model.d.ts +13 -13
  246. package/lib/shell-components/models/store-search-model.d.ts +7 -7
  247. package/lib/shell-components/models/themes.model.d.ts +9 -9
  248. package/lib/shell-components/models/timesheetenabledisable.d.ts +16 -16
  249. package/lib/shell-components/models/user.d.ts +40 -40
  250. package/lib/shell-components/models/userStory.d.ts +188 -188
  251. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +6 -6
  252. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +6 -6
  253. package/lib/shell-components/models/userstory-custom-fields.model.d.ts +6 -6
  254. package/lib/shell-components/models/validation.model.d.ts +5 -5
  255. package/lib/shell-components/models/widgetlist.d.ts +28 -28
  256. package/lib/shell-components/models/workspaceList.d.ts +19 -19
  257. package/lib/shell-components/services/authentication.service.d.ts +18 -18
  258. package/lib/shell-components/services/chat.service.d.ts +16 -16
  259. package/lib/shell-components/services/common-used.service.d.ts +45 -45
  260. package/lib/shell-components/services/feature.service.d.ts +19 -19
  261. package/lib/shell-components/services/google-analytics.service.d.ts +9 -9
  262. package/lib/shell-components/services/layout.service.d.ts +23 -23
  263. package/lib/shell-components/services/payment.service.d.ts +19 -19
  264. package/lib/shell-components/services/recentSearch.service.d.ts +16 -16
  265. package/lib/shell-components/services/shell.modules.service.d.ts +9 -9
  266. package/lib/shell-components/services/signalr.service.d.ts +25 -25
  267. package/lib/shell-components/services/theme.service.d.ts +14 -14
  268. package/lib/shell-components/shell.module.d.ts +119 -119
  269. package/lib/shell-components/shell.routing.d.ts +2 -2
  270. package/lib/shell-components/store/actions/authentication.actions.d.ts +327 -327
  271. package/lib/shell-components/store/actions/chat.actions.d.ts +399 -399
  272. package/lib/shell-components/store/actions/menuitems.actions.d.ts +51 -51
  273. package/lib/shell-components/store/actions/notification-validator.action.d.ts +25 -25
  274. package/lib/shell-components/store/actions/notifications.actions.d.ts +116 -116
  275. package/lib/shell-components/store/effects/authentication.effects.d.ts +54 -54
  276. package/lib/shell-components/store/effects/chat.effects.d.ts +30 -30
  277. package/lib/shell-components/store/effects/index.d.ts +1 -1
  278. package/lib/shell-components/store/effects/menuitems.effects.d.ts +17 -17
  279. package/lib/shell-components/store/effects/notification-validator.effects.d.ts +21 -21
  280. package/lib/shell-components/store/effects/notifications.effects.d.ts +23 -23
  281. package/lib/shell-components/store/reducers/authentication.reducers.d.ts +30 -30
  282. package/lib/shell-components/store/reducers/chat.reducers.d.ts +17 -17
  283. package/lib/shell-components/store/reducers/index.d.ts +59 -59
  284. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +11 -11
  285. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +5 -5
  286. package/lib/shell-components/store/reducers/notifications.reducers.d.ts +10 -10
  287. package/package.json +1 -1
  288. package/public-api.d.ts +82 -82
  289. package/store/reducers/index.d.ts +24 -24
  290. package/thetradeengineorg1-snova-shell-module.d.ts +5 -5
@@ -1,350 +1,350 @@
1
- import { Component, HostListener } from "@angular/core";
2
- import { NavigationEnd, RouteConfigLoadStart, RouteConfigLoadEnd, ResolveStart, ResolveEnd, NavigationStart, NavigationCancel, NavigationError, } from "@angular/router";
3
- // import PerfectScrollbar from 'perfect-scrollbar';
4
- import { Subject } from "rxjs";
5
- import { takeUntil, tap } from "rxjs/operators";
6
- import { filter } from "rxjs/operators";
7
- import { UserDetailsFetchedAfterLogin, AuthenticationActionTypes } from "../../store/actions/authentication.actions";
8
- import { ofType } from "@ngrx/effects";
9
- import { SoftLabelConfigurationModel } from "../../models/softlabels-model";
10
- import '../../../globaldependencies/helpers/fontawesome-icons';
11
- import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
12
- import { SPINNER } from 'ngx-ui-loader';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/router";
15
- import * as i2 from "@ngx-translate/core";
16
- import * as i3 from "../../services/layout.service";
17
- import * as i4 from "@ngrx/store";
18
- import * as i5 from "ngx-cookie-service";
19
- import * as i6 from "@ngrx/effects";
20
- import * as i7 from "@angular/common";
21
- import * as i8 from "../../services/common-used.service";
22
- import * as i9 from "pubnub-angular2";
23
- import * as i10 from "../../services/signalr.service";
24
- import * as i11 from "@angular/cdk/bidi";
25
- import * as i12 from "ngx-ui-loader";
26
- import * as i13 from "@angular/material/sidenav";
27
- import * as i14 from "@angular/flex-layout/extended";
28
- import * as i15 from "ngx-perfect-scrollbar";
29
- import * as i16 from "../header-side/header-side.component";
30
- import * as i17 from "../sidenav/side-bar.component";
31
- import * as i18 from "../header-top/header-top.component";
32
- import * as i19 from "../sidebar-top/sidebar-top.component";
33
- function AdminLayoutComponent_app_header_top_1_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelement(0, "app-header-top", 13);
35
- } if (rf & 2) {
36
- i0.ɵɵnextContext();
37
- const _r5 = i0.ɵɵreference(13);
38
- i0.ɵɵproperty("notificPanel", _r5);
39
- } }
40
- function AdminLayoutComponent_app_sidebar_top_4_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "app-sidebar-top");
42
- } }
43
- function AdminLayoutComponent_div_8_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 14);
45
- i0.ɵɵelementStart(1, "div", 15);
46
- i0.ɵɵelement(2, "div", 16);
47
- i0.ɵɵelement(3, "div", 17);
48
- i0.ɵɵelementEnd();
49
- i0.ɵɵelementEnd();
50
- } }
51
- function AdminLayoutComponent_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
52
- i0.ɵɵelement(0, "div", 21);
53
- } }
54
- function AdminLayoutComponent_div_9_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelementStart(0, "div", 18);
56
- i0.ɵɵelementStart(1, "span", 19);
57
- i0.ɵɵtext(2);
58
- i0.ɵɵpipe(3, "translate");
59
- i0.ɵɵpipe(4, "translate");
60
- i0.ɵɵelementEnd();
61
- i0.ɵɵtemplate(5, AdminLayoutComponent_div_9_div_5_Template, 1, 0, "div", 20);
62
- i0.ɵɵelementEnd();
63
- } if (rf & 2) {
64
- const ctx_r3 = i0.ɵɵnextContext();
65
- i0.ɵɵadvance(2);
66
- i0.ɵɵtextInterpolate3(" ", i0.ɵɵpipeBind1(3, 4, "LOADINGPLEASEWAIT"), " (", ctx_r3.totalLoadingTime, " ", i0.ɵɵpipeBind1(4, 6, "SECONDS"), ") ");
67
- i0.ɵɵadvance(3);
68
- i0.ɵɵproperty("ngIf", ctx_r3.loading);
69
- } }
70
- function AdminLayoutComponent_div_10_Template(rf, ctx) { if (rf & 1) {
71
- i0.ɵɵelementStart(0, "div");
72
- i0.ɵɵelement(1, "router-outlet");
73
- i0.ɵɵelementEnd();
74
- } }
75
- const _c0 = function (a0, a1, a2, a3, a4, a5, a6, a7) { return { "navigation-top": a0, "sidebar-full": a1, "sidebar-compact": a2, "sidebar-compact-big": a3, "layout-intransition": a4, "sidebar-opened": a5, "sidebar-closed": a6, "fixed-topbar": a7 }; };
76
- const _c1 = function (a0) { return { "blur-on-opened": a0 }; };
77
- const _c2 = function (a0) { return { "show-in-dashboard": a0 }; };
78
- const _c3 = function (a0) { return { "visible": a0 }; };
79
- export class AdminLayoutComponent {
80
- constructor(router, translate, layout, store, cookieService, actionUpdates$, location, commonService, pubnub, signalr) {
81
- this.router = router;
82
- this.translate = translate;
83
- this.layout = layout;
84
- this.store = store;
85
- this.cookieService = cookieService;
86
- this.actionUpdates$ = actionUpdates$;
87
- this.location = location;
88
- this.commonService = commonService;
89
- this.pubnub = pubnub;
90
- this.signalr = signalr;
91
- this.isModuleLoading = false;
92
- // private sidebarPS: PerfectScrollbar;
93
- // private bodyPS: PerfectScrollbar;
94
- // private headerFixedBodyPS: PerfectScrollbar;
95
- this.scrollConfig = {};
96
- this.layoutConf = {};
97
- this.ngDestroyed$ = new Subject();
98
- this.userstory = 'userstory';
99
- this.loading = false;
100
- this.totalLoadingTime = 0;
101
- this.spinnerType = SPINNER.circle;
102
- // let conId = sessionStorage.getItem('conectionId');
103
- // if(!conId) {
104
- this.signalr.initializeSignalRConnection();
105
- // }
106
- let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
107
- let companySettings = localStorage.getItem(LocalStorageProperties.CompanySettings);
108
- if (!companySettings || companySettings == 'null' || companySettings == "undefined") {
109
- pubnub.init({
110
- publishKey: environment.publishKey,
111
- subscribeKey: environment.subscribeKey
112
- });
113
- }
114
- else {
115
- const comSet = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
116
- var publishKey = comSet.find(i => i.key == "PubnubPublishKey");
117
- var subscribeKey = comSet.find(i => i.key == "PubnubSubscribeKey");
118
- if ((publishKey && publishKey.value) && (subscribeKey && subscribeKey.value)) {
119
- pubnub.init({
120
- publishKey: publishKey.value,
121
- subscribeKey: subscribeKey.value
122
- });
123
- }
124
- else {
125
- pubnub.init({
126
- publishKey: environment.publishKey,
127
- subscribeKey: environment.subscribeKey
128
- });
129
- }
130
- }
131
- // Close sidenav after route change in mobile
132
- this.routerEventSub = router.events
133
- .pipe(filter(event => event instanceof NavigationEnd))
134
- .subscribe((routeChange) => {
135
- this.layout.adjustLayout({ route: routeChange.url });
136
- });
137
- // Translator init
138
- let currentCulture = this.cookieService.get(LocalStorageProperties.CurrentCulture);
139
- if (currentCulture === 'null' || currentCulture === 'undefined') {
140
- currentCulture = 'en';
141
- }
142
- translate.use(currentCulture);
143
- this.router.events.subscribe((event) => {
144
- switch (true) {
145
- case event instanceof NavigationStart: {
146
- this.loading = true;
147
- this.totalLoadingTime = 0;
148
- this.startTimer();
149
- break;
150
- }
151
- case event instanceof NavigationEnd: {
152
- this.loading = false;
153
- clearInterval(this.interval);
154
- break;
155
- }
156
- case event instanceof NavigationCancel:
157
- case event instanceof NavigationError: {
158
- this.loading = false;
159
- break;
160
- }
161
- default: {
162
- break;
163
- }
164
- }
165
- });
166
- router.events.subscribe(val => {
167
- if (location.path() != "") {
168
- if (location.path().includes('/dashboard-management/dashboard/')) {
169
- this.dashboardPage = true;
170
- this.bgcolor = 'none';
171
- }
172
- else {
173
- this.dashboardPage = false;
174
- this.bgcolor = 'beige';
175
- }
176
- }
177
- });
178
- // if (this.cookieService.check(LocalStorageProperties.UserModel)) {
179
- // let data = JSON.parse(this.cookieService.get(LocalStorageProperties.UserModel));
180
- // if (data && data != 'null' && data != 'undefined')
181
- // this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
182
- // }
183
- if ((localStorage.getItem(LocalStorageProperties.UserModel) != null && localStorage.getItem(LocalStorageProperties.UserModel) != undefined)
184
- && !localStorage.hasOwnProperty(LocalStorageProperties.UserRoleFeatures)) {
185
- let data = JSON.parse(localStorage.getItem(LocalStorageProperties.UserModel));
186
- this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
187
- }
188
- this.actionUpdates$
189
- .pipe(takeUntil(this.ngDestroyed$), ofType(AuthenticationActionTypes.ClearDemoDataCompleted), tap((result) => {
190
- if (result && result.companyId) {
191
- this.getSoftLabels();
192
- }
193
- })).subscribe();
194
- }
195
- ngOnInit() {
196
- this.getSoftLabelConfigurations();
197
- this.layoutConf = this.layout.layoutConf;
198
- // this.layout.adjustLayout();
199
- // FOR MODULE LOADER FLAG
200
- this.moduleLoaderSub = this.router.events.subscribe(event => {
201
- if (event instanceof RouteConfigLoadStart ||
202
- event instanceof ResolveStart) {
203
- this.isModuleLoading = false;
204
- }
205
- if (event instanceof RouteConfigLoadEnd || event instanceof ResolveEnd) {
206
- this.isModuleLoading = false;
207
- }
208
- });
209
- }
210
- onResize(event) {
211
- this.layout.adjustLayout(event);
212
- }
213
- Opened(event) {
214
- this.display = event;
215
- }
216
- getSoftLabelConfigurations() {
217
- this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
218
- }
219
- getSoftLabels() {
220
- let model = new SoftLabelConfigurationModel();
221
- model.searchText = null;
222
- this.commonService.getSoftLabels(model).subscribe((response) => {
223
- if (response.success) {
224
- let data = response.data;
225
- if (data) {
226
- localStorage.setItem('SoftLabels', JSON.stringify(data));
227
- }
228
- }
229
- });
230
- }
231
- ngAfterViewInit() {
232
- // this.layoutConfSub = this.layout.layoutConf$.subscribe(change => {
233
- // // this.initBodyPS(change)
234
- // })
235
- }
236
- // initBodyPS(layoutConf:any = {}) {
237
- // if(layoutConf.navigationPos === 'side' && layoutConf.topbarFixed) {
238
- // if (this.bodyPS) this.bodyPS.destroy();
239
- // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
240
- // this.headerFixedBodyPS = new PerfectScrollbar('.rightside-content-hold', {
241
- // suppressScrollX: true
242
- // });
243
- // this.scrollToTop('.rightside-content-hold');
244
- // } else {
245
- // if (this.bodyPS) this.bodyPS.destroy();
246
- // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
247
- // this.bodyPS = new PerfectScrollbar('.main-content-wrap', {
248
- // suppressScrollX: true
249
- // });
250
- // this.scrollToTop('.main-content-wrap');
251
- // }
252
- // }
253
- scrollToTop(selector) {
254
- if (document) {
255
- let element = document.querySelector(selector);
256
- element.scrollTop = 0;
257
- }
258
- }
259
- ngOnDestroy() {
260
- if (this.moduleLoaderSub) {
261
- this.moduleLoaderSub.unsubscribe();
262
- }
263
- if (this.layoutConfSub) {
264
- this.layoutConfSub.unsubscribe();
265
- }
266
- if (this.routerEventSub) {
267
- this.routerEventSub.unsubscribe();
268
- }
269
- if (this.sub) {
270
- this.sub.unsubscribe();
271
- }
272
- }
273
- closeSidebar() {
274
- this.layout.publishLayoutChange({
275
- sidebarStyle: "closed"
276
- });
277
- }
278
- startTimer() {
279
- this.interval = setInterval(() => {
280
- this.totalLoadingTime++;
281
- }, 1000);
282
- }
283
- }
284
- AdminLayoutComponent.ɵfac = function AdminLayoutComponent_Factory(t) { return new (t || AdminLayoutComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.LayoutService), i0.ɵɵdirectiveInject(i4.Store), i0.ɵɵdirectiveInject(i5.CookieService), i0.ɵɵdirectiveInject(i6.Actions), i0.ɵɵdirectiveInject(i7.Location), i0.ɵɵdirectiveInject(i8.CommonService), i0.ɵɵdirectiveInject(i9.PubNubAngular), i0.ɵɵdirectiveInject(i10.SignalrService)); };
285
- AdminLayoutComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminLayoutComponent, selectors: [["app-admin-layout"]], hostBindings: function AdminLayoutComponent_HostBindings(rf, ctx) { if (rf & 1) {
286
- i0.ɵɵlistener("resize", function AdminLayoutComponent_resize_HostBindingHandler($event) { return ctx.onResize($event); }, false, i0.ɵɵresolveWindow);
287
- } }, decls: 15, vars: 38, consts: [[1, "app-admin-wrap", 3, "dir"], [3, "notificPanel", 4, "ngIf"], ["fgsSize", "180", "color", "primary", 3, "fgsType"], [1, "app-admin-container", "app-side-nav-container", "mat-drawer-transition", 3, "dir", "ngClass"], [4, "ngIf"], [1, "main-content-wrap", 3, "perfectScrollbar", "disabled"], [3, "notificPanel", "opened"], [1, "rightside-content-hold", 3, "perfectScrollbar", "disabled", "ngClass"], ["class", "view-loader", 4, "ngIf"], ["id", "btrak-preloader", 4, "ngIf"], [1, "sidebar-backdrop", 3, "ngClass", "click"], ["mode", "side", "opened", "", "id", "style-1", 1, "side-nav-color", "custom-app-nav", 3, "fixedInViewport", "fixedTopGap", "fixedBottomGap"], ["sidenav", ""], [3, "notificPanel"], [1, "view-loader"], [1, "spinner"], [1, "double-bounce1", "mat-bg-accent"], [1, "double-bounce2", "mat-bg-primary"], ["id", "btrak-preloader"], [1, "preloading-text"], ["id", "btrak-loader", 4, "ngIf"], ["id", "btrak-loader"]], template: function AdminLayoutComponent_Template(rf, ctx) { if (rf & 1) {
288
- i0.ɵɵelementStart(0, "div", 0);
289
- i0.ɵɵtemplate(1, AdminLayoutComponent_app_header_top_1_Template, 1, 1, "app-header-top", 1);
290
- i0.ɵɵelement(2, "ngx-ui-loader", 2);
291
- i0.ɵɵelementStart(3, "mat-sidenav-container", 3);
292
- i0.ɵɵtemplate(4, AdminLayoutComponent_app_sidebar_top_4_Template, 1, 0, "app-sidebar-top", 4);
293
- i0.ɵɵelementStart(5, "div", 5);
294
- i0.ɵɵelementStart(6, "app-header-side", 6);
295
- i0.ɵɵlistener("opened", function AdminLayoutComponent_Template_app_header_side_opened_6_listener($event) { return ctx.Opened($event); });
296
- i0.ɵɵelementEnd();
297
- i0.ɵɵelementStart(7, "div", 7);
298
- i0.ɵɵtemplate(8, AdminLayoutComponent_div_8_Template, 4, 0, "div", 8);
299
- i0.ɵɵtemplate(9, AdminLayoutComponent_div_9_Template, 6, 8, "div", 9);
300
- i0.ɵɵtemplate(10, AdminLayoutComponent_div_10_Template, 2, 0, "div", 4);
301
- i0.ɵɵelementEnd();
302
- i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(11, "div", 10);
304
- i0.ɵɵlistener("click", function AdminLayoutComponent_Template_div_click_11_listener() { return ctx.closeSidebar(); });
305
- i0.ɵɵelementEnd();
306
- i0.ɵɵelementStart(12, "mat-sidenav", 11, 12);
307
- i0.ɵɵelement(14, "app-sidebar");
308
- i0.ɵɵelementEnd();
309
- i0.ɵɵelementEnd();
310
- i0.ɵɵelementEnd();
311
- } if (rf & 2) {
312
- const _r5 = i0.ɵɵreference(13);
313
- i0.ɵɵproperty("dir", ctx.layoutConf.dir);
314
- i0.ɵɵadvance(1);
315
- i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top");
316
- i0.ɵɵadvance(1);
317
- i0.ɵɵproperty("fgsType", ctx.spinnerType);
318
- i0.ɵɵadvance(1);
319
- i0.ɵɵproperty("dir", ctx.layoutConf.dir)("ngClass", i0.ɵɵpureFunction8(23, _c0, ctx.layoutConf.navigationPos === "top", ctx.layoutConf.sidebarStyle === "full", ctx.layoutConf.sidebarStyle === "compact" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "compact-big" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.layoutInTransition, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "closed", ctx.layoutConf.topbarFixed && ctx.layoutConf.navigationPos === "side"));
320
- i0.ɵɵadvance(1);
321
- i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top" && ctx.layoutConf.isMobile);
322
- i0.ɵɵadvance(1);
323
- i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", ctx.layoutConf.topbarFixed);
324
- i0.ɵɵadvance(1);
325
- i0.ɵɵclassMap(ctx.layoutConf.isMobile ? "custom-app-header-mobile" : "custom-app-header");
326
- i0.ɵɵproperty("notificPanel", _r5);
327
- i0.ɵɵadvance(1);
328
- i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", !ctx.layoutConf.topbarFixed)("ngClass", i0.ɵɵpureFunction1(32, _c1, ctx.display))("ngClass", i0.ɵɵpureFunction1(34, _c2, ctx.dashboardPage));
329
- i0.ɵɵadvance(1);
330
- i0.ɵɵproperty("ngIf", ctx.isModuleLoading);
331
- i0.ɵɵadvance(1);
332
- i0.ɵɵproperty("ngIf", ctx.loading);
333
- i0.ɵɵadvance(1);
334
- i0.ɵɵproperty("ngIf", !ctx.loading);
335
- i0.ɵɵadvance(1);
336
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(36, _c3, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.isMobile));
337
- i0.ɵɵadvance(1);
338
- i0.ɵɵproperty("fixedInViewport", true)("fixedTopGap", ctx.layoutConf.isMobile ? 45 : 88)("fixedBottomGap", 0);
339
- } }, directives: [i11.Dir, i7.NgIf, i12.ɵb, i13.MatSidenavContainer, i7.NgClass, i14.DefaultClassDirective, i15.PerfectScrollbarDirective, i16.HeaderSideComponent, i13.MatSidenav, i17.SideBarComponent, i18.HeaderTopComponent, i19.SidebarTopComponent, i1.RouterOutlet], pipes: [i2.TranslatePipe], encapsulation: 2 });
340
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminLayoutComponent, [{
341
- type: Component,
342
- args: [{
343
- selector: "app-admin-layout",
344
- templateUrl: "./admin-layout.template.html"
345
- }]
346
- }], function () { return [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.LayoutService }, { type: i4.Store }, { type: i5.CookieService }, { type: i6.Actions }, { type: i7.Location }, { type: i8.CommonService }, { type: i9.PubNubAngular }, { type: i10.SignalrService }]; }, { onResize: [{
347
- type: HostListener,
348
- args: ["window:resize", ['$event']]
349
- }] }); })();
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvYWRtaW4tbGF5b3V0L2FkbWluLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2FkbWluLWxheW91dC9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFVLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUt4TCxvREFBb0Q7QUFDcEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQTZCLE1BQU0sNENBQTRDLENBQUM7QUFFaEosT0FBTyxFQUFXLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkzRSxPQUFPLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtE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Z0RBVUc7UUFPRCw2RkFBcUc7UUFHckcsOEJBQXFHO1FBR25HLDBDQUF1SjtRQUFuRCxrSEFBVSxrQkFBYyxJQUFDO1FBQzdILGlCQUFrQjtRQTBCbEIsOEJBQzBGO1FBa0N4RixxRUFLTTtRQUVOLHFFQU1NO1FBQ04sdUVBRU07UUFDUixpQkFBTTtRQUNSLGlCQUFNO1FBRU4sZ0NBQzJCO1FBQXpCLCtGQUFTLGtCQUFjLElBQUM7UUFBQyxpQkFBTTtRQUdqQyw0Q0FDMEU7UUFDeEUsK0JBQTJCO1FBQzdCLGlCQUFjO1FBQ2hCLGlCQUF3QjtRQUMxQixpQkFBTTs7O1FBekhzQix3Q0FBc0I7UUFHL0IsZUFBd0M7UUFBeEMsNkRBQXdDO1FBRTVCLGVBQXVCO1FBQXZCLHlDQUF1QjtRQUU3QixlQUFzQjtRQUF0Qix3Q0FBc0IsaWhCQUFBO1FBaUJ6QixlQUErRDtRQUEvRCx3RkFBK0Q7UUFHbEQsZUFBaUM7UUFBakMsbURBQWlDLHdDQUFBO1FBRzdDLGVBQWtGO1FBQWxGLHlGQUFrRjtRQUEyQixrQ0FBd0I7UUEyQmxILGVBQWlDO1FBQWpDLG1EQUFpQyx5Q0FBQSxxREFBQSwyREFBQTtRQW1DekMsZUFBcUI7UUFBckIsMENBQXFCO1FBT3BCLGVBQWE7UUFBYixrQ0FBYTtRQU9sQyxlQUFjO1FBQWQsbUNBQWM7UUFNTSxlQUFvRjtRQUFwRiwwSEFBb0Y7UUFJakQsZUFBd0I7UUFBeEIsc0NBQXdCLGtEQUFBLHFCQUFBOzt1RkRyRmhGLG9CQUFvQjtjQUxoQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLDhCQUE4QjthQUM1Qzt1U0E4S0MsUUFBUTtrQkFGUCxZQUFZO21CQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZUNvbmZpZ0xvYWRTdGFydCwgUm91dGVDb25maWdMb2FkRW5kLCBSZXNvbHZlU3RhcnQsIFJlc29sdmVFbmQsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVycm9yLCBFdmVudCwgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdlwiO1xyXG5pbXBvcnQgeyBNZWRpYUNoYW5nZSB9IGZyb20gXCJAYW5ndWxhci9mbGV4LWxheW91dFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuLy8gaW1wb3J0IFBlcmZlY3RTY3JvbGxiYXIgZnJvbSAncGVyZmVjdC1zY3JvbGxiYXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcclxuaW1wb3J0IHsgVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpbiwgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcywgVXNlckluaXRpYWxEZXRhaWxzRmV0Y2hlZCB9IGZyb20gXCIuLi8uLi9zdG9yZS9hY3Rpb25zL2F1dGhlbnRpY2F0aW9uLmFjdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aW9ucywgb2ZUeXBlIH0gZnJvbSBcIkBuZ3J4L2VmZmVjdHNcIjtcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc29mdGxhYmVscy1tb2RlbFwiXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeSB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyU3RvcnknO1xyXG5pbXBvcnQgKiBhcyBTaGFyZWRNb2R1bGVTdGF0ZSBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0ICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy9mb250YXdlc29tZS1pY29ucyc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvY29uc3RhbnRzL2xvY2Fsc3RvcmFnZS1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi11c2VkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQdWJOdWJBbmd1bGFyIH0gZnJvbSAncHVibnViLWFuZ3VsYXIyJztcclxuaW1wb3J0IHsgU1BJTk5FUiB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBTaWduYWxyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1hZG1pbi1sYXlvdXRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkbWluLWxheW91dC50ZW1wbGF0ZS5odG1sXCJcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBZG1pbkxheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgaXNNb2R1bGVMb2FkaW5nOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBtb2R1bGVMb2FkZXJTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGxheW91dENvbmZTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJvdXRlckV2ZW50U3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBtZWRpYVN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHNvZnRMYWJlbHMkOiBPYnNlcnZhYmxlPFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdPjtcclxuICBzb2Z0TGFiZWxzOiBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWxbXTtcclxuICAvLyBwcml2YXRlIHNpZGViYXJQUzogUGVyZmVjdFNjcm9sbGJhcjtcclxuXHJcbiAgLy8gcHJpdmF0ZSBib2R5UFM6IFBlcmZlY3RTY3JvbGxiYXI7XHJcbiAgLy8gcHJpdmF0ZSBoZWFkZXJGaXhlZEJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcclxuICBwdWJsaWMgc2Nyb2xsQ29uZmlnID0ge307XHJcbiAgcHVibGljIGxheW91dENvbmY6IGFueSA9IHt9O1xyXG4gIGRpc3BsYXk6IGJvb2xlYW47XHJcbiAgdXNlclN0b3JpZXMkOiBPYnNlcnZhYmxlPFVzZXJTdG9yeVtdPjtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHVzZXJTdG9yaWVzOiBVc2VyU3RvcnlbXTtcclxuICB1c2VyU3Rvcnk6IFVzZXJTdG9yeTtcclxuICBhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBuZ0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGRhc2hib2FyZFBhZ2U6IGJvb2xlYW47XHJcbiAgYmdjb2xvcjogYW55O1xyXG4gIHByaXZhdGUgc3ViOiBTdWJzY3JpcHRpb247XHJcbiAgdXNlcnN0b3J5ID0gJ3VzZXJzdG9yeSc7XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIHRvdGFsTG9hZGluZ1RpbWU6IG51bWJlciA9IDA7XHJcbiAgaW50ZXJ2YWw7XHJcbiAgc3Bpbm5lclR5cGUgPSBTUElOTkVSLmNpcmNsZTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheW91dDogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPFNoYXJlZE1vZHVsZVN0YXRlLlN0YXRlPixcclxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uVXBkYXRlcyQ6IEFjdGlvbnMsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcHVibnViOiBQdWJOdWJBbmd1bGFyLFxyXG4gICAgcHJpdmF0ZSBzaWduYWxyOiBTaWduYWxyU2VydmljZSxcclxuICApIHtcclxuICAgIC8vIGxldCBjb25JZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NvbmVjdGlvbklkJyk7XHJcbiAgICAvLyBpZighY29uSWQpIHtcclxuICAgICAgdGhpcy5zaWduYWxyLmluaXRpYWxpemVTaWduYWxSQ29ubmVjdGlvbigpO1xyXG4gICAgLy8gfVxyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICBsZXQgY29tcGFueVNldHRpbmdzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpO1xyXG4gICAgaWYgKCFjb21wYW55U2V0dGluZ3MgfHwgY29tcGFueVNldHRpbmdzID09ICdudWxsJyB8fCBjb21wYW55U2V0dGluZ3MgPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICBwdWJudWIuaW5pdCh7XHJcbiAgICAgICAgcHVibGlzaEtleTogZW52aXJvbm1lbnQucHVibGlzaEtleSxcclxuICAgICAgICBzdWJzY3JpYmVLZXk6IGVudmlyb25tZW50LnN1YnNjcmliZUtleVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbVNldCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpKTtcclxuICAgICAgdmFyIHB1Ymxpc2hLZXkgPSBjb21TZXQuZmluZChpID0+IGkua2V5ID09IFwiUHVibnViUHVibGlzaEtleVwiKTtcclxuICAgICAgdmFyIHN1YnNjcmliZUtleSA9IGNvbVNldC5maW5kKGkgPT4gaS5rZXkgPT0gXCJQdWJudWJTdWJzY3JpYmVLZXlcIilcclxuICAgICAgaWYgKChwdWJsaXNoS2V5ICYmIHB1Ymxpc2hLZXkudmFsdWUpICYmIChzdWJzY3JpYmVLZXkgJiYgc3Vic2NyaWJlS2V5LnZhbHVlKSkge1xyXG4gICAgICAgIHB1Ym51Yi5pbml0KHtcclxuICAgICAgICAgIHB1Ymxpc2hLZXk6IHB1Ymxpc2hLZXkudmFsdWUsXHJcbiAgICAgICAgICBzdWJzY3JpYmVLZXk6IHN1YnNjcmliZUtleS52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHB1Ym51Yi5pbml0KHtcclxuICAgICAgICAgIHB1Ymxpc2hLZXk6IGVudmlyb25tZW50LnB1Ymxpc2hLZXksXHJcbiAgICAgICAgICBzdWJzY3JpYmVLZXk6IGVudmlyb25tZW50LnN1YnNjcmliZUtleVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBDbG9zZSBzaWRlbmF2IGFmdGVyIHJvdXRlIGNoYW5nZSBpbiBtb2JpbGVcclxuICAgIHRoaXMucm91dGVyRXZlbnRTdWIgPSByb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyb3V0ZUNoYW5nZTogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG4gICAgICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dCh7IHJvdXRlOiByb3V0ZUNoYW5nZS51cmwgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFRyYW5zbGF0b3IgaW5pdFxyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEN1bHR1cmUgPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgY3VycmVudEN1bHR1cmUgPSAnZW4nO1xyXG4gICAgfVxyXG4gICAgdHJhbnNsYXRlLnVzZShjdXJyZW50Q3VsdHVyZSk7XHJcblxyXG5cclxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICBjYXNlIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0OiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy50b3RhbExvYWRpbmdUaW1lID0gMDtcclxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDoge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsOlxyXG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3I6IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKGxvY2F0aW9uLnBhdGgoKSAhPSBcIlwiKSB7XHJcbiAgICAgICAgaWYgKGxvY2F0aW9uLnBhdGgoKS5pbmNsdWRlcygnL2Rhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC8nKSkge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRQYWdlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYmdjb2xvciA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFBhZ2UgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYmdjb2xvciA9ICdiZWlnZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSkge1xyXG4gICAgLy8gICBsZXQgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xyXG4gICAgLy8gICBpZiAoZGF0YSAmJiBkYXRhICE9ICdudWxsJyAmJiBkYXRhICE9ICd1bmRlZmluZWQnKVxyXG4gICAgLy8gICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4oZGF0YSkpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICgobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IG51bGwgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IHVuZGVmaW5lZClcclxuICAgICAgJiYgIWxvY2FsU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSb2xlRmVhdHVyZXMpKSB7XHJcbiAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luKGRhdGEpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvblVwZGF0ZXMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgb2ZUeXBlKEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuQ2xlYXJEZW1vRGF0YUNvbXBsZXRlZCksXHJcbiAgICAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY29tcGFueUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U29mdExhYmVscygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ2V0U29mdExhYmVsQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIHRoaXMubGF5b3V0Q29uZiA9IHRoaXMubGF5b3V0LmxheW91dENvbmY7XHJcbiAgICAvLyB0aGlzLmxheW91dC5hZGp1c3RMYXlvdXQoKTtcclxuXHJcbiAgICAvLyBGT1IgTU9EVUxFIExPQURFUiBGTEFHXHJcbiAgICB0aGlzLm1vZHVsZUxvYWRlclN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZUNvbmZpZ0xvYWRTdGFydCB8fFxyXG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZVN0YXJ0XHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuaXNNb2R1bGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgUm91dGVDb25maWdMb2FkRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZUVuZCkge1xyXG4gICAgICAgIHRoaXMuaXNNb2R1bGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgWyckZXZlbnQnXSlcclxuXHJcbiAgb25SZXNpemUoZXZlbnQpIHtcclxuICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBPcGVuZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuZGlzcGxheSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U29mdExhYmVsQ29uZmlndXJhdGlvbnMoKSB7XHJcbiAgICB0aGlzLnNvZnRMYWJlbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTb2Z0TGFiZWxzJykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29mdExhYmVscygpIHtcclxuICAgIGxldCBtb2RlbCA9IG5ldyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwoKTtcclxuICAgIG1vZGVsLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLmdldFNvZnRMYWJlbHMobW9kZWwpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NvZnRMYWJlbHMnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIHRoaXMubGF5b3V0Q29uZlN1YiA9IHRoaXMubGF5b3V0LmxheW91dENvbmYkLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xyXG4gICAgLy8gICAvLyB0aGlzLmluaXRCb2R5UFMoY2hhbmdlKVxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIC8vIGluaXRCb2R5UFMobGF5b3V0Q29uZjphbnkgPSB7fSkge1xyXG4gIC8vICAgaWYobGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZScgJiYgbGF5b3V0Q29uZi50b3BiYXJGaXhlZCkge1xyXG4gIC8vICAgICBpZiAodGhpcy5ib2R5UFMpIHRoaXMuYm9keVBTLmRlc3Ryb3koKTtcclxuICAvLyAgICAgaWYgKHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMpIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMuZGVzdHJveSgpO1xyXG4gIC8vICAgICB0aGlzLmhlYWRlckZpeGVkQm9keVBTID0gbmV3IFBlcmZlY3RTY3JvbGxiYXIoJy5yaWdodHNpZGUtY29udGVudC1ob2xkJywge1xyXG4gIC8vICAgICAgIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgICAgdGhpcy5zY3JvbGxUb1RvcCgnLnJpZ2h0c2lkZS1jb250ZW50LWhvbGQnKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xyXG4gIC8vICAgICBpZiAodGhpcy5oZWFkZXJGaXhlZEJvZHlQUykgdGhpcy5oZWFkZXJGaXhlZEJvZHlQUy5kZXN0cm95KCk7XHJcbiAgLy8gICAgIHRoaXMuYm9keVBTID0gbmV3IFBlcmZlY3RTY3JvbGxiYXIoJy5tYWluLWNvbnRlbnQtd3JhcCcsIHtcclxuICAvLyAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWVcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICAgIHRoaXMuc2Nyb2xsVG9Ub3AoJy5tYWluLWNvbnRlbnQtd3JhcCcpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzY3JvbGxUb1RvcChzZWxlY3Rvcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQpIHtcclxuICAgICAgbGV0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5tb2R1bGVMb2FkZXJTdWIpIHtcclxuICAgICAgdGhpcy5tb2R1bGVMb2FkZXJTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxheW91dENvbmZTdWIpIHtcclxuICAgICAgdGhpcy5sYXlvdXRDb25mU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yb3V0ZXJFdmVudFN1Yikge1xyXG4gICAgICB0aGlzLnJvdXRlckV2ZW50U3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdWIpIHtcclxuICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvc2VTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5sYXlvdXQucHVibGlzaExheW91dENoYW5nZSh7XHJcbiAgICAgIHNpZGViYXJTdHlsZTogXCJjbG9zZWRcIlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGFydFRpbWVyKCkge1xyXG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy50b3RhbExvYWRpbmdUaW1lKys7XHJcbiAgICB9LCAxMDAwKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXBwLWFkbWluLXdyYXBcIiBbZGlyXT0nbGF5b3V0Q29uZi5kaXInPlxyXG4gIDwhLS0gSGVhZGVyIGZvciB0b3AgbmF2aWdhdGlvbiBsYXlvdXQgLS0+XHJcbiAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxyXG4gIDxhcHAtaGVhZGVyLXRvcCAqbmdJZj1cImxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3RvcCdcIiBbbm90aWZpY1BhbmVsXT1cInNpZGVuYXZcIj5cclxuICA8L2FwcC1oZWFkZXItdG9wPlxyXG4gIDxuZ3gtdWktbG9hZGVyIGZnc1NpemU9XCIxODBcIiBbZmdzVHlwZV09XCJzcGlubmVyVHlwZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbmd4LXVpLWxvYWRlcj5cclxuICA8IS0tIE1haW4gQ29udGFpbmVyIC0tPlxyXG4gIDxtYXQtc2lkZW5hdi1jb250YWluZXIgW2Rpcl09J2xheW91dENvbmYuZGlyJyBjbGFzcz1cImFwcC1hZG1pbi1jb250YWluZXIgYXBwLXNpZGUtbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLXRyYW5zaXRpb25cIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgJ25hdmlnYXRpb24tdG9wJzogbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAndG9wJyxcclxuICAgICdzaWRlYmFyLWZ1bGwnOiBsYXlvdXRDb25mLnNpZGViYXJTdHlsZSA9PT0gJ2Z1bGwnLFxyXG4gICAgJ3NpZGViYXItY29tcGFjdCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnY29tcGFjdCcgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZScsXHJcbiAgICAnc2lkZWJhci1jb21wYWN0LWJpZyc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnY29tcGFjdC1iaWcnICYmIGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnLFxyXG4gICAgJ2xheW91dC1pbnRyYW5zaXRpb24nOiBsYXlvdXRDb25mLmxheW91dEluVHJhbnNpdGlvbixcclxuICAgICdzaWRlYmFyLW9wZW5lZCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlICE9PSAnY2xvc2VkJyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcclxuICAgICdzaWRlYmFyLWNsb3NlZCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnY2xvc2VkJyxcclxuICAgICdmaXhlZC10b3BiYXInOiBsYXlvdXRDb25mLnRvcGJhckZpeGVkICYmIGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnXHJcbiAgfVwiPlxyXG4gICAgPCEtLSBTSURFQkFSIC0tPlxyXG4gICAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlNJREUqKiBOQVZJR0FUSU9OIExBWU9VVCAtLT5cclxuICAgIDwhLS0gPGFwcC1zaWRlYmFyLXNpZGUgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJ1wiPjwvYXBwLXNpZGViYXItc2lkZT4gLS0+XHJcblxyXG4gICAgPCEtLSBUb3AgbmF2aWdhdGlvbiBsYXlvdXQgKG5hdmlnYXRpb24gZm9yIG1vYmlsZSBzY3JlZW4pIC0tPlxyXG4gICAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTU9CSUxFIExBWU9VVCAtLT5cclxuICAgIDxhcHAtc2lkZWJhci10b3AgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICd0b3AnICYmIGxheW91dENvbmYuaXNNb2JpbGVcIj48L2FwcC1zaWRlYmFyLXRvcD5cclxuXHJcbiAgICA8IS0tIEFwcCBjb250ZW50IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudC13cmFwXCIgW3BlcmZlY3RTY3JvbGxiYXJdPVwic2Nyb2xsQ29uZmlnXCIgW2Rpc2FibGVkXT1cImxheW91dENvbmYudG9wYmFyRml4ZWRcIj5cclxuICAgICAgPCEtLSBIZWFkZXIgZm9yIHNpZGUgbmF2aWdhdGlvbiBsYXlvdXQgLS0+XHJcbiAgICAgIDwhLS0gT05MWSBSRVFVSVJFRCBGT1IgKipTSURFKiogTkFWSUdBVElPTiBMQVlPVVQgLS0+XHJcbiAgICAgIDxhcHAtaGVhZGVyLXNpZGUgY2xhc3M9XCJ7e2xheW91dENvbmYuaXNNb2JpbGUgPyAnY3VzdG9tLWFwcC1oZWFkZXItbW9iaWxlJyA6ICdjdXN0b20tYXBwLWhlYWRlcid9fVwiIChvcGVuZWQpPVwiT3BlbmVkKCRldmVudClcIiBbbm90aWZpY1BhbmVsXT1cInNpZGVuYXZcIj5cclxuICAgICAgPC9hcHAtaGVhZGVyLXNpZGU+XHJcblxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtci0xXCIgKm5nSWY9XCIhZGFzaGJvYXJkUGFnZVwiPlxyXG4gICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSAqbmdJZj1cInVzZXJTdG9yeVwiIHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcclxuICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXHJcbiAgICAgICAgICBbaXNVc2VyU3Rvcmllc1BhZ2VdPWZhbHNlICh1cGRhdGVBdXRvTG9nKT1cIkxvZ0FjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXVzZXJTdG9yeVwiPlxyXG4gICAgICAgICAgWW91IGFyZSBub3Qgc3RhcnRlZCBhbnkgdXNlcnN0b3J5IHlldCEgUGxlYXNlIHN0YXJ0IHdvcmshIVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0wNVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJjYXJldC1zaXplXCIgc3R5bGU9XCJjb2xvcjojM2RhOGI1XCIgaWNvbj1cImNhcmV0LWRvd25cIiBbc2F0UG9wb3ZlckFuY2hvckZvcl09XCJyZWNlbnRVc2VyU3RvcnlcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cInJlY2VudFVzZXJTdG9yeS50b2dnbGUoKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c2F0LXBvcG92ZXIgI3JlY2VudFVzZXJTdG9yeSBoYXNCYWNrZHJvcCAgYmFja2Ryb3BDbGFzcz1cInVzLXBvcG92ZXJcIj4gXHJcbiAgICAgICAgICAgIDxtYXQtY2FyZD5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cclxuICAgICAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5IHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcclxuICAgICAgICAgICAgICBbdXNlclN0b3J5XT1cInVzZXJTdG9yeVwiIFtpc1N1YlRhc2tzUGFnZV09ZmFsc2UgW2lzTG9hZGluZ109XCIoYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luYylcIlxyXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cclxuICAgICAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgPC9zYXQtcG9wb3Zlcj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0c2lkZS1jb250ZW50LWhvbGRcIiBbcGVyZmVjdFNjcm9sbGJhcl09XCJzY3JvbGxDb25maWdcIiBbZGlzYWJsZWRdPVwiIWxheW91dENvbmYudG9wYmFyRml4ZWRcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnYmx1ci1vbi1vcGVuZWQnOiBkaXNwbGF5fVwiIFtuZ0NsYXNzXT1cInsnc2hvdy1pbi1kYXNoYm9hcmQnOmRhc2hib2FyZFBhZ2V9XCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm1yLTFcIiAqbmdJZj1cIiFkYXNoYm9hcmRQYWdlXCIgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6ICc5MHB4J31cIiBcclxuICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogdXNlclN0b3J5ID8gJ2JlaWdlJyA6ICdub25lJyB9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6OTBweCAhaW1wb3J0YW50XCI+XHJcbiAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5IGZ4RmxleD1cIjkwXCIgKm5nSWY9XCJ1c2VyU3RvcnlcIiBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXHJcbiAgICAgICAgICBbdXNlclN0b3J5XT1cInVzZXJTdG9yeVwiIFtpc1N1YlRhc2tzUGFnZV09ZmFsc2UgW2lzTG9hZGluZ109XCIoYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luYylcIlxyXG4gICAgICAgICAgW2lzVXNlclN0b3JpZXNQYWdlXT1mYWxzZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XHJcbiAgICAgICAgPG1hdC1jYXJkICpuZ0lmPVwiIXVzZXJTdG9yeVwiIHN0eWxlPVwicGFkZGluZzogMTBweDtsZWZ0OiAtNzVweDtcIj5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgIFlvdSBhcmUgbm90IHN0YXJ0ZWQgYW55IHt7IHVzZXJzdG9yeSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319IHlldCEgUGxlYXNlIHN0YXJ0IHdvcmshIVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTA1XCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cImNhcmV0LXNpemVcIiBzdHlsZT1cImNvbG9yOiMzZGE4YjVcIiBpY29uPVwiY2FyZXQtZG93blwiIFtzYXRQb3BvdmVyQW5jaG9yRm9yXT1cInJlY2VudFVzZXJTdG9yeVwiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L21hdC1jYXJkPlxyXG4gICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luY1wiPlxyXG4gICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj4gLS0+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGZ4RmxleCBjbGFzcz1cIm1sLTA1XCIgKm5nSWY9XCJ1c2VyU3RvcnlcIj5cclxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcclxuICAgICAgICAgICAgIChjbGljayk9XCJyZWNlbnRVc2VyU3RvcnkudG9nZ2xlKClcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNhdC1wb3BvdmVyICNyZWNlbnRVc2VyU3RvcnkgaGFzQmFja2Ryb3AgIGJhY2tkcm9wQ2xhc3M9XCJ1cy1wb3BvdmVyXCI+IFxyXG4gICAgICAgICAgICA8bWF0LWNhcmQ+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB1c2VyU3Rvcnkgb2YgKHVzZXJTdG9yaWVzJCB8IGFzeW5jIHwgc2xpY2U6MDo1KVwiIHN0eWxlPVwibWluLXdpZHRoOiAxMDAwcHg7XCIgY2xhc3M9XCJ2aWV3LXVzXCI+XHJcbiAgICAgICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXHJcbiAgICAgICAgICAgICAgW3VzZXJTdG9yeV09XCJ1c2VyU3RvcnlcIiBbaXNTdWJUYXNrc1BhZ2VdPWZhbHNlIFtpc0xvYWRpbmddPVwiKGFueU9wZXJhdGlvbkluUHJvZ3Jlc3NGb3JBdXRvTG9nZ2luZyR8YXN5bmMpXCJcclxuICAgICAgICAgICAgICBbaXNVc2VyU3Rvcmllc1BhZ2VdPXRydWUgKHVwZGF0ZUF1dG9Mb2cpPVwiTG9nQWN0aW9uKCRldmVudClcIiBbaXNTaG93XT1cImZhbHNlXCIgKGNsb3NlKT1cInJlY2VudFVzZXJTdG9yeS5jbG9zZSgpXCI+XHJcbiAgICAgICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1jYXJkPlxyXG4gICAgICAgIDwvc2F0LXBvcG92ZXI+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8IS0tIFZpZXcgTG9hZGVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LWxvYWRlclwiICpuZ0lmPVwiaXNNb2R1bGVMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG91YmxlLWJvdW5jZTEgbWF0LWJnLWFjY2VudFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG91YmxlLWJvdW5jZTIgbWF0LWJnLXByaW1hcnlcIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gVmlldyBvdXRsZXQgLS0+XHJcbiAgICAgICAgPGRpdiBpZD1cImJ0cmFrLXByZWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmVsb2FkaW5nLXRleHRcIj5cclxuICAgICAgICAgICAge3sgJ0xPQURJTkdQTEVBU0VXQUlUJyB8IHRyYW5zbGF0ZSB9fSAoe3t0b3RhbExvYWRpbmdUaW1lfX0ge3sgJ1NFQ09ORFMnIHwgdHJhbnNsYXRlIH19KVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBpZD1cImJ0cmFrLWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFZpZXcgb3ZlcmxheSBmb3IgbW9iaWxlIG5hdmlnYXRpb24gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1iYWNrZHJvcFwiIFtuZ0NsYXNzXT1cInsndmlzaWJsZSc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlICE9PSAnY2xvc2VkJyAmJiBsYXlvdXRDb25mLmlzTW9iaWxlfVwiXHJcbiAgICAgIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiPjwvZGl2PlxyXG5cclxuICAgIDwhLS0gTm90aWZpY2FhdGlvbiBiYXIgLS0+XHJcbiAgICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgbW9kZT1cInNpZGVcIiBvcGVuZWQgY2xhc3M9XCJleGFtcGxlLXNpZGVuYXZcIiBbZml4ZWRJblZpZXdwb3J0XT1cInRydWVcIiBbZml4ZWRUb3BHYXBdPVwibGF5b3V0Q29uZi5pc01vYmlsZSA/IDQ1IDogODhcIlxyXG4gICAgICBbZml4ZWRCb3R0b21HYXBdPVwiMFwiIGNsYXNzPVwic2lkZS1uYXYtY29sb3IgY3VzdG9tLWFwcC1uYXZcIiBpZD1cInN0eWxlLTFcIj5cclxuICAgICAgPGFwcC1zaWRlYmFyPjwvYXBwLXNpZGViYXI+XHJcbiAgICA8L21hdC1zaWRlbmF2PlxyXG4gIDwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
1
+ import { Component, HostListener } from "@angular/core";
2
+ import { NavigationEnd, RouteConfigLoadStart, RouteConfigLoadEnd, ResolveStart, ResolveEnd, NavigationStart, NavigationCancel, NavigationError, } from "@angular/router";
3
+ // import PerfectScrollbar from 'perfect-scrollbar';
4
+ import { Subject } from "rxjs";
5
+ import { takeUntil, tap } from "rxjs/operators";
6
+ import { filter } from "rxjs/operators";
7
+ import { UserDetailsFetchedAfterLogin, AuthenticationActionTypes } from "../../store/actions/authentication.actions";
8
+ import { ofType } from "@ngrx/effects";
9
+ import { SoftLabelConfigurationModel } from "../../models/softlabels-model";
10
+ import '../../../globaldependencies/helpers/fontawesome-icons';
11
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
12
+ import { SPINNER } from 'ngx-ui-loader';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/router";
15
+ import * as i2 from "@ngx-translate/core";
16
+ import * as i3 from "../../services/layout.service";
17
+ import * as i4 from "@ngrx/store";
18
+ import * as i5 from "ngx-cookie-service";
19
+ import * as i6 from "@ngrx/effects";
20
+ import * as i7 from "@angular/common";
21
+ import * as i8 from "../../services/common-used.service";
22
+ import * as i9 from "pubnub-angular2";
23
+ import * as i10 from "../../services/signalr.service";
24
+ import * as i11 from "@angular/cdk/bidi";
25
+ import * as i12 from "ngx-ui-loader";
26
+ import * as i13 from "@angular/material/sidenav";
27
+ import * as i14 from "@angular/flex-layout/extended";
28
+ import * as i15 from "ngx-perfect-scrollbar";
29
+ import * as i16 from "../header-side/header-side.component";
30
+ import * as i17 from "../sidenav/side-bar.component";
31
+ import * as i18 from "../header-top/header-top.component";
32
+ import * as i19 from "../sidebar-top/sidebar-top.component";
33
+ function AdminLayoutComponent_app_header_top_1_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelement(0, "app-header-top", 13);
35
+ } if (rf & 2) {
36
+ i0.ɵɵnextContext();
37
+ const _r5 = i0.ɵɵreference(13);
38
+ i0.ɵɵproperty("notificPanel", _r5);
39
+ } }
40
+ function AdminLayoutComponent_app_sidebar_top_4_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelement(0, "app-sidebar-top");
42
+ } }
43
+ function AdminLayoutComponent_div_8_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 14);
45
+ i0.ɵɵelementStart(1, "div", 15);
46
+ i0.ɵɵelement(2, "div", 16);
47
+ i0.ɵɵelement(3, "div", 17);
48
+ i0.ɵɵelementEnd();
49
+ i0.ɵɵelementEnd();
50
+ } }
51
+ function AdminLayoutComponent_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵelement(0, "div", 21);
53
+ } }
54
+ function AdminLayoutComponent_div_9_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 18);
56
+ i0.ɵɵelementStart(1, "span", 19);
57
+ i0.ɵɵtext(2);
58
+ i0.ɵɵpipe(3, "translate");
59
+ i0.ɵɵpipe(4, "translate");
60
+ i0.ɵɵelementEnd();
61
+ i0.ɵɵtemplate(5, AdminLayoutComponent_div_9_div_5_Template, 1, 0, "div", 20);
62
+ i0.ɵɵelementEnd();
63
+ } if (rf & 2) {
64
+ const ctx_r3 = i0.ɵɵnextContext();
65
+ i0.ɵɵadvance(2);
66
+ i0.ɵɵtextInterpolate3(" ", i0.ɵɵpipeBind1(3, 4, "LOADINGPLEASEWAIT"), " (", ctx_r3.totalLoadingTime, " ", i0.ɵɵpipeBind1(4, 6, "SECONDS"), ") ");
67
+ i0.ɵɵadvance(3);
68
+ i0.ɵɵproperty("ngIf", ctx_r3.loading);
69
+ } }
70
+ function AdminLayoutComponent_div_10_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "div");
72
+ i0.ɵɵelement(1, "router-outlet");
73
+ i0.ɵɵelementEnd();
74
+ } }
75
+ const _c0 = function (a0, a1, a2, a3, a4, a5, a6, a7) { return { "navigation-top": a0, "sidebar-full": a1, "sidebar-compact": a2, "sidebar-compact-big": a3, "layout-intransition": a4, "sidebar-opened": a5, "sidebar-closed": a6, "fixed-topbar": a7 }; };
76
+ const _c1 = function (a0) { return { "blur-on-opened": a0 }; };
77
+ const _c2 = function (a0) { return { "show-in-dashboard": a0 }; };
78
+ const _c3 = function (a0) { return { "visible": a0 }; };
79
+ export class AdminLayoutComponent {
80
+ constructor(router, translate, layout, store, cookieService, actionUpdates$, location, commonService, pubnub, signalr) {
81
+ this.router = router;
82
+ this.translate = translate;
83
+ this.layout = layout;
84
+ this.store = store;
85
+ this.cookieService = cookieService;
86
+ this.actionUpdates$ = actionUpdates$;
87
+ this.location = location;
88
+ this.commonService = commonService;
89
+ this.pubnub = pubnub;
90
+ this.signalr = signalr;
91
+ this.isModuleLoading = false;
92
+ // private sidebarPS: PerfectScrollbar;
93
+ // private bodyPS: PerfectScrollbar;
94
+ // private headerFixedBodyPS: PerfectScrollbar;
95
+ this.scrollConfig = {};
96
+ this.layoutConf = {};
97
+ this.ngDestroyed$ = new Subject();
98
+ this.userstory = 'userstory';
99
+ this.loading = false;
100
+ this.totalLoadingTime = 0;
101
+ this.spinnerType = SPINNER.circle;
102
+ // let conId = sessionStorage.getItem('conectionId');
103
+ // if(!conId) {
104
+ this.signalr.initializeSignalRConnection();
105
+ // }
106
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
107
+ let companySettings = localStorage.getItem(LocalStorageProperties.CompanySettings);
108
+ if (!companySettings || companySettings == 'null' || companySettings == "undefined") {
109
+ pubnub.init({
110
+ publishKey: environment.publishKey,
111
+ subscribeKey: environment.subscribeKey
112
+ });
113
+ }
114
+ else {
115
+ const comSet = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
116
+ var publishKey = comSet.find(i => i.key == "PubnubPublishKey");
117
+ var subscribeKey = comSet.find(i => i.key == "PubnubSubscribeKey");
118
+ if ((publishKey && publishKey.value) && (subscribeKey && subscribeKey.value)) {
119
+ pubnub.init({
120
+ publishKey: publishKey.value,
121
+ subscribeKey: subscribeKey.value
122
+ });
123
+ }
124
+ else {
125
+ pubnub.init({
126
+ publishKey: environment.publishKey,
127
+ subscribeKey: environment.subscribeKey
128
+ });
129
+ }
130
+ }
131
+ // Close sidenav after route change in mobile
132
+ this.routerEventSub = router.events
133
+ .pipe(filter(event => event instanceof NavigationEnd))
134
+ .subscribe((routeChange) => {
135
+ this.layout.adjustLayout({ route: routeChange.url });
136
+ });
137
+ // Translator init
138
+ let currentCulture = this.cookieService.get(LocalStorageProperties.CurrentCulture);
139
+ if (currentCulture === 'null' || currentCulture === 'undefined') {
140
+ currentCulture = 'en';
141
+ }
142
+ translate.use(currentCulture);
143
+ this.router.events.subscribe((event) => {
144
+ switch (true) {
145
+ case event instanceof NavigationStart: {
146
+ this.loading = true;
147
+ this.totalLoadingTime = 0;
148
+ this.startTimer();
149
+ break;
150
+ }
151
+ case event instanceof NavigationEnd: {
152
+ this.loading = false;
153
+ clearInterval(this.interval);
154
+ break;
155
+ }
156
+ case event instanceof NavigationCancel:
157
+ case event instanceof NavigationError: {
158
+ this.loading = false;
159
+ break;
160
+ }
161
+ default: {
162
+ break;
163
+ }
164
+ }
165
+ });
166
+ router.events.subscribe(val => {
167
+ if (location.path() != "") {
168
+ if (location.path().includes('/dashboard-management/dashboard/')) {
169
+ this.dashboardPage = true;
170
+ this.bgcolor = 'none';
171
+ }
172
+ else {
173
+ this.dashboardPage = false;
174
+ this.bgcolor = 'beige';
175
+ }
176
+ }
177
+ });
178
+ // if (this.cookieService.check(LocalStorageProperties.UserModel)) {
179
+ // let data = JSON.parse(this.cookieService.get(LocalStorageProperties.UserModel));
180
+ // if (data && data != 'null' && data != 'undefined')
181
+ // this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
182
+ // }
183
+ if ((localStorage.getItem(LocalStorageProperties.UserModel) != null && localStorage.getItem(LocalStorageProperties.UserModel) != undefined)
184
+ && !localStorage.hasOwnProperty(LocalStorageProperties.UserRoleFeatures)) {
185
+ let data = JSON.parse(localStorage.getItem(LocalStorageProperties.UserModel));
186
+ this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
187
+ }
188
+ this.actionUpdates$
189
+ .pipe(takeUntil(this.ngDestroyed$), ofType(AuthenticationActionTypes.ClearDemoDataCompleted), tap((result) => {
190
+ if (result && result.companyId) {
191
+ this.getSoftLabels();
192
+ }
193
+ })).subscribe();
194
+ }
195
+ ngOnInit() {
196
+ this.getSoftLabelConfigurations();
197
+ this.layoutConf = this.layout.layoutConf;
198
+ // this.layout.adjustLayout();
199
+ // FOR MODULE LOADER FLAG
200
+ this.moduleLoaderSub = this.router.events.subscribe(event => {
201
+ if (event instanceof RouteConfigLoadStart ||
202
+ event instanceof ResolveStart) {
203
+ this.isModuleLoading = false;
204
+ }
205
+ if (event instanceof RouteConfigLoadEnd || event instanceof ResolveEnd) {
206
+ this.isModuleLoading = false;
207
+ }
208
+ });
209
+ }
210
+ onResize(event) {
211
+ this.layout.adjustLayout(event);
212
+ }
213
+ Opened(event) {
214
+ this.display = event;
215
+ }
216
+ getSoftLabelConfigurations() {
217
+ this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
218
+ }
219
+ getSoftLabels() {
220
+ let model = new SoftLabelConfigurationModel();
221
+ model.searchText = null;
222
+ this.commonService.getSoftLabels(model).subscribe((response) => {
223
+ if (response.success) {
224
+ let data = response.data;
225
+ if (data) {
226
+ localStorage.setItem('SoftLabels', JSON.stringify(data));
227
+ }
228
+ }
229
+ });
230
+ }
231
+ ngAfterViewInit() {
232
+ // this.layoutConfSub = this.layout.layoutConf$.subscribe(change => {
233
+ // // this.initBodyPS(change)
234
+ // })
235
+ }
236
+ // initBodyPS(layoutConf:any = {}) {
237
+ // if(layoutConf.navigationPos === 'side' && layoutConf.topbarFixed) {
238
+ // if (this.bodyPS) this.bodyPS.destroy();
239
+ // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
240
+ // this.headerFixedBodyPS = new PerfectScrollbar('.rightside-content-hold', {
241
+ // suppressScrollX: true
242
+ // });
243
+ // this.scrollToTop('.rightside-content-hold');
244
+ // } else {
245
+ // if (this.bodyPS) this.bodyPS.destroy();
246
+ // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
247
+ // this.bodyPS = new PerfectScrollbar('.main-content-wrap', {
248
+ // suppressScrollX: true
249
+ // });
250
+ // this.scrollToTop('.main-content-wrap');
251
+ // }
252
+ // }
253
+ scrollToTop(selector) {
254
+ if (document) {
255
+ let element = document.querySelector(selector);
256
+ element.scrollTop = 0;
257
+ }
258
+ }
259
+ ngOnDestroy() {
260
+ if (this.moduleLoaderSub) {
261
+ this.moduleLoaderSub.unsubscribe();
262
+ }
263
+ if (this.layoutConfSub) {
264
+ this.layoutConfSub.unsubscribe();
265
+ }
266
+ if (this.routerEventSub) {
267
+ this.routerEventSub.unsubscribe();
268
+ }
269
+ if (this.sub) {
270
+ this.sub.unsubscribe();
271
+ }
272
+ }
273
+ closeSidebar() {
274
+ this.layout.publishLayoutChange({
275
+ sidebarStyle: "closed"
276
+ });
277
+ }
278
+ startTimer() {
279
+ this.interval = setInterval(() => {
280
+ this.totalLoadingTime++;
281
+ }, 1000);
282
+ }
283
+ }
284
+ AdminLayoutComponent.ɵfac = function AdminLayoutComponent_Factory(t) { return new (t || AdminLayoutComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.LayoutService), i0.ɵɵdirectiveInject(i4.Store), i0.ɵɵdirectiveInject(i5.CookieService), i0.ɵɵdirectiveInject(i6.Actions), i0.ɵɵdirectiveInject(i7.Location), i0.ɵɵdirectiveInject(i8.CommonService), i0.ɵɵdirectiveInject(i9.PubNubAngular), i0.ɵɵdirectiveInject(i10.SignalrService)); };
285
+ AdminLayoutComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminLayoutComponent, selectors: [["app-admin-layout"]], hostBindings: function AdminLayoutComponent_HostBindings(rf, ctx) { if (rf & 1) {
286
+ i0.ɵɵlistener("resize", function AdminLayoutComponent_resize_HostBindingHandler($event) { return ctx.onResize($event); }, false, i0.ɵɵresolveWindow);
287
+ } }, decls: 15, vars: 38, consts: [[1, "app-admin-wrap", 3, "dir"], [3, "notificPanel", 4, "ngIf"], ["fgsSize", "180", "color", "primary", 3, "fgsType"], [1, "app-admin-container", "app-side-nav-container", "mat-drawer-transition", 3, "dir", "ngClass"], [4, "ngIf"], [1, "main-content-wrap", 3, "perfectScrollbar", "disabled"], [3, "notificPanel", "opened"], [1, "rightside-content-hold", 3, "perfectScrollbar", "disabled", "ngClass"], ["class", "view-loader", 4, "ngIf"], ["id", "btrak-preloader", 4, "ngIf"], [1, "sidebar-backdrop", 3, "ngClass", "click"], ["mode", "side", "opened", "", "id", "style-1", 1, "side-nav-color", "custom-app-nav", 3, "fixedInViewport", "fixedTopGap", "fixedBottomGap"], ["sidenav", ""], [3, "notificPanel"], [1, "view-loader"], [1, "spinner"], [1, "double-bounce1", "mat-bg-accent"], [1, "double-bounce2", "mat-bg-primary"], ["id", "btrak-preloader"], [1, "preloading-text"], ["id", "btrak-loader", 4, "ngIf"], ["id", "btrak-loader"]], template: function AdminLayoutComponent_Template(rf, ctx) { if (rf & 1) {
288
+ i0.ɵɵelementStart(0, "div", 0);
289
+ i0.ɵɵtemplate(1, AdminLayoutComponent_app_header_top_1_Template, 1, 1, "app-header-top", 1);
290
+ i0.ɵɵelement(2, "ngx-ui-loader", 2);
291
+ i0.ɵɵelementStart(3, "mat-sidenav-container", 3);
292
+ i0.ɵɵtemplate(4, AdminLayoutComponent_app_sidebar_top_4_Template, 1, 0, "app-sidebar-top", 4);
293
+ i0.ɵɵelementStart(5, "div", 5);
294
+ i0.ɵɵelementStart(6, "app-header-side", 6);
295
+ i0.ɵɵlistener("opened", function AdminLayoutComponent_Template_app_header_side_opened_6_listener($event) { return ctx.Opened($event); });
296
+ i0.ɵɵelementEnd();
297
+ i0.ɵɵelementStart(7, "div", 7);
298
+ i0.ɵɵtemplate(8, AdminLayoutComponent_div_8_Template, 4, 0, "div", 8);
299
+ i0.ɵɵtemplate(9, AdminLayoutComponent_div_9_Template, 6, 8, "div", 9);
300
+ i0.ɵɵtemplate(10, AdminLayoutComponent_div_10_Template, 2, 0, "div", 4);
301
+ i0.ɵɵelementEnd();
302
+ i0.ɵɵelementEnd();
303
+ i0.ɵɵelementStart(11, "div", 10);
304
+ i0.ɵɵlistener("click", function AdminLayoutComponent_Template_div_click_11_listener() { return ctx.closeSidebar(); });
305
+ i0.ɵɵelementEnd();
306
+ i0.ɵɵelementStart(12, "mat-sidenav", 11, 12);
307
+ i0.ɵɵelement(14, "app-sidebar");
308
+ i0.ɵɵelementEnd();
309
+ i0.ɵɵelementEnd();
310
+ i0.ɵɵelementEnd();
311
+ } if (rf & 2) {
312
+ const _r5 = i0.ɵɵreference(13);
313
+ i0.ɵɵproperty("dir", ctx.layoutConf.dir);
314
+ i0.ɵɵadvance(1);
315
+ i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top");
316
+ i0.ɵɵadvance(1);
317
+ i0.ɵɵproperty("fgsType", ctx.spinnerType);
318
+ i0.ɵɵadvance(1);
319
+ i0.ɵɵproperty("dir", ctx.layoutConf.dir)("ngClass", i0.ɵɵpureFunction8(23, _c0, ctx.layoutConf.navigationPos === "top", ctx.layoutConf.sidebarStyle === "full", ctx.layoutConf.sidebarStyle === "compact" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "compact-big" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.layoutInTransition, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "closed", ctx.layoutConf.topbarFixed && ctx.layoutConf.navigationPos === "side"));
320
+ i0.ɵɵadvance(1);
321
+ i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top" && ctx.layoutConf.isMobile);
322
+ i0.ɵɵadvance(1);
323
+ i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", ctx.layoutConf.topbarFixed);
324
+ i0.ɵɵadvance(1);
325
+ i0.ɵɵclassMap(ctx.layoutConf.isMobile ? "custom-app-header-mobile" : "custom-app-header");
326
+ i0.ɵɵproperty("notificPanel", _r5);
327
+ i0.ɵɵadvance(1);
328
+ i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", !ctx.layoutConf.topbarFixed)("ngClass", i0.ɵɵpureFunction1(32, _c1, ctx.display))("ngClass", i0.ɵɵpureFunction1(34, _c2, ctx.dashboardPage));
329
+ i0.ɵɵadvance(1);
330
+ i0.ɵɵproperty("ngIf", ctx.isModuleLoading);
331
+ i0.ɵɵadvance(1);
332
+ i0.ɵɵproperty("ngIf", ctx.loading);
333
+ i0.ɵɵadvance(1);
334
+ i0.ɵɵproperty("ngIf", !ctx.loading);
335
+ i0.ɵɵadvance(1);
336
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(36, _c3, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.isMobile));
337
+ i0.ɵɵadvance(1);
338
+ i0.ɵɵproperty("fixedInViewport", true)("fixedTopGap", ctx.layoutConf.isMobile ? 45 : 88)("fixedBottomGap", 0);
339
+ } }, directives: [i11.Dir, i7.NgIf, i12.ɵb, i13.MatSidenavContainer, i7.NgClass, i14.DefaultClassDirective, i15.PerfectScrollbarDirective, i16.HeaderSideComponent, i13.MatSidenav, i17.SideBarComponent, i18.HeaderTopComponent, i19.SidebarTopComponent, i1.RouterOutlet], pipes: [i2.TranslatePipe], encapsulation: 2 });
340
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminLayoutComponent, [{
341
+ type: Component,
342
+ args: [{
343
+ selector: "app-admin-layout",
344
+ templateUrl: "./admin-layout.template.html"
345
+ }]
346
+ }], function () { return [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.LayoutService }, { type: i4.Store }, { type: i5.CookieService }, { type: i6.Actions }, { type: i7.Location }, { type: i8.CommonService }, { type: i9.PubNubAngular }, { type: i10.SignalrService }]; }, { onResize: [{
347
+ type: HostListener,
348
+ args: ["window:resize", ['$event']]
349
+ }] }); })();
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvYWRtaW4tbGF5b3V0L2FkbWluLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2FkbWluLWxheW91dC9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFVLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUt4TCxvREFBb0Q7QUFDcEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQTZCLE1BQU0sNENBQTRDLENBQUM7QUFFaEosT0FBTyxFQUFXLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkzRSxPQUFPLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtE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Z0RBVUc7UUFPRCw2RkFBcUc7UUFHckcsOEJBQXFHO1FBR25HLDBDQUF1SjtRQUFuRCxrSEFBVSxrQkFBYyxJQUFDO1FBQzdILGlCQUFrQjtRQTBCbEIsOEJBQzBGO1FBa0N4RixxRUFLTTtRQUVOLHFFQU1NO1FBQ04sdUVBRU07UUFDUixpQkFBTTtRQUNSLGlCQUFNO1FBRU4sZ0NBQzJCO1FBQXpCLCtGQUFTLGtCQUFjLElBQUM7UUFBQyxpQkFBTTtRQUdqQyw0Q0FDMEU7UUFDeEUsK0JBQTJCO1FBQzdCLGlCQUFjO1FBQ2hCLGlCQUF3QjtRQUMxQixpQkFBTTs7O1FBekhzQix3Q0FBc0I7UUFHL0IsZUFBd0M7UUFBeEMsNkRBQXdDO1FBRTVCLGVBQXVCO1FBQXZCLHlDQUF1QjtRQUU3QixlQUFzQjtRQUF0Qix3Q0FBc0IsaWhCQUFBO1FBaUJ6QixlQUErRDtRQUEvRCx3RkFBK0Q7UUFHbEQsZUFBaUM7UUFBakMsbURBQWlDLHdDQUFBO1FBRzdDLGVBQWtGO1FBQWxGLHlGQUFrRjtRQUEyQixrQ0FBd0I7UUEyQmxILGVBQWlDO1FBQWpDLG1EQUFpQyx5Q0FBQSxxREFBQSwyREFBQTtRQW1DekMsZUFBcUI7UUFBckIsMENBQXFCO1FBT3BCLGVBQWE7UUFBYixrQ0FBYTtRQU9sQyxlQUFjO1FBQWQsbUNBQWM7UUFNTSxlQUFvRjtRQUFwRiwwSEFBb0Y7UUFJakQsZUFBd0I7UUFBeEIsc0NBQXdCLGtEQUFBLHFCQUFBOzt1RkRyRmhGLG9CQUFvQjtjQUxoQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLDhCQUE4QjthQUM1Qzt1U0E4S0MsUUFBUTtrQkFGUCxZQUFZO21CQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCwgUm91dGVDb25maWdMb2FkU3RhcnQsIFJvdXRlQ29uZmlnTG9hZEVuZCwgUmVzb2x2ZVN0YXJ0LCBSZXNvbHZlRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FcnJvciwgRXZlbnQsIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdlwiO1xuaW1wb3J0IHsgTWVkaWFDaGFuZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvZmxleC1sYXlvdXRcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuLy8gaW1wb3J0IFBlcmZlY3RTY3JvbGxiYXIgZnJvbSAncGVyZmVjdC1zY3JvbGxiYXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLCBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLCBVc2VySW5pdGlhbERldGFpbHNGZXRjaGVkIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcbmltcG9ydCB7IEFjdGlvbnMsIG9mVHlwZSB9IGZyb20gXCJAbmdyeC9lZmZlY3RzXCI7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc29mdGxhYmVscy1tb2RlbFwiXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclN0b3J5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeSc7XG5pbXBvcnQgKiBhcyBTaGFyZWRNb2R1bGVTdGF0ZSBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcbmltcG9ydCAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvZm9udGF3ZXNvbWUtaWNvbnMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb25zdGFudHMvbG9jYWxzdG9yYWdlLXByb3BlcnRpZXMnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi11c2VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHViTnViQW5ndWxhciB9IGZyb20gJ3B1Ym51Yi1hbmd1bGFyMic7XG5pbXBvcnQgeyBTUElOTkVSIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XG5pbXBvcnQgeyBTaWduYWxyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC1hZG1pbi1sYXlvdXRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbFwiXG59KVxuXG5leHBvcnQgY2xhc3MgQWRtaW5MYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBpc01vZHVsZUxvYWRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtb2R1bGVMb2FkZXJTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBsYXlvdXRDb25mU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcm91dGVyRXZlbnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtZWRpYVN1YjogU3Vic2NyaXB0aW9uO1xuICBzb2Z0TGFiZWxzJDogT2JzZXJ2YWJsZTxTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWxbXT47XG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xuICAvLyBwcml2YXRlIHNpZGViYXJQUzogUGVyZmVjdFNjcm9sbGJhcjtcblxuICAvLyBwcml2YXRlIGJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcbiAgLy8gcHJpdmF0ZSBoZWFkZXJGaXhlZEJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcbiAgcHVibGljIHNjcm9sbENvbmZpZyA9IHt9O1xuICBwdWJsaWMgbGF5b3V0Q29uZjogYW55ID0ge307XG4gIGRpc3BsYXk6IGJvb2xlYW47XG4gIHVzZXJTdG9yaWVzJDogT2JzZXJ2YWJsZTxVc2VyU3RvcnlbXT47XG4gIHNob3c6IGJvb2xlYW47XG4gIHVzZXJTdG9yaWVzOiBVc2VyU3RvcnlbXTtcbiAgdXNlclN0b3J5OiBVc2VyU3Rvcnk7XG4gIGFueU9wZXJhdGlvbkluUHJvZ3Jlc3NGb3JBdXRvTG9nZ2luZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBuZ0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xuICBkYXNoYm9hcmRQYWdlOiBib29sZWFuO1xuICBiZ2NvbG9yOiBhbnk7XG4gIHByaXZhdGUgc3ViOiBTdWJzY3JpcHRpb247XG4gIHVzZXJzdG9yeSA9ICd1c2Vyc3RvcnknO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHRvdGFsTG9hZGluZ1RpbWU6IG51bWJlciA9IDA7XG4gIGludGVydmFsO1xuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIuY2lyY2xlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5b3V0OiBMYXlvdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPFNoYXJlZE1vZHVsZVN0YXRlLlN0YXRlPixcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25VcGRhdGVzJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwdWJudWI6IFB1Yk51YkFuZ3VsYXIsXG4gICAgcHJpdmF0ZSBzaWduYWxyOiBTaWduYWxyU2VydmljZSxcbiAgKSB7XG4gICAgLy8gbGV0IGNvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY29uZWN0aW9uSWQnKTtcbiAgICAvLyBpZighY29uSWQpIHtcbiAgICAgIHRoaXMuc2lnbmFsci5pbml0aWFsaXplU2lnbmFsUkNvbm5lY3Rpb24oKTtcbiAgICAvLyB9XG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XG4gICAgbGV0IGNvbXBhbnlTZXR0aW5ncyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVNldHRpbmdzKTtcbiAgICBpZiAoIWNvbXBhbnlTZXR0aW5ncyB8fCBjb21wYW55U2V0dGluZ3MgPT0gJ251bGwnIHx8IGNvbXBhbnlTZXR0aW5ncyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBwdWJudWIuaW5pdCh7XG4gICAgICAgIHB1Ymxpc2hLZXk6IGVudmlyb25tZW50LnB1Ymxpc2hLZXksXG4gICAgICAgIHN1YnNjcmliZUtleTogZW52aXJvbm1lbnQuc3Vic2NyaWJlS2V5XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tU2V0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncykpO1xuICAgICAgdmFyIHB1Ymxpc2hLZXkgPSBjb21TZXQuZmluZChpID0+IGkua2V5ID09IFwiUHVibnViUHVibGlzaEtleVwiKTtcbiAgICAgIHZhciBzdWJzY3JpYmVLZXkgPSBjb21TZXQuZmluZChpID0+IGkua2V5ID09IFwiUHVibnViU3Vic2NyaWJlS2V5XCIpXG4gICAgICBpZiAoKHB1Ymxpc2hLZXkgJiYgcHVibGlzaEtleS52YWx1ZSkgJiYgKHN1YnNjcmliZUtleSAmJiBzdWJzY3JpYmVLZXkudmFsdWUpKSB7XG4gICAgICAgIHB1Ym51Yi5pbml0KHtcbiAgICAgICAgICBwdWJsaXNoS2V5OiBwdWJsaXNoS2V5LnZhbHVlLFxuICAgICAgICAgIHN1YnNjcmliZUtleTogc3Vic2NyaWJlS2V5LnZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVibnViLmluaXQoe1xuICAgICAgICAgIHB1Ymxpc2hLZXk6IGVudmlyb25tZW50LnB1Ymxpc2hLZXksXG4gICAgICAgICAgc3Vic2NyaWJlS2V5OiBlbnZpcm9ubWVudC5zdWJzY3JpYmVLZXlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8vIENsb3NlIHNpZGVuYXYgYWZ0ZXIgcm91dGUgY2hhbmdlIGluIG1vYmlsZVxuICAgIHRoaXMucm91dGVyRXZlbnRTdWIgPSByb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJvdXRlQ2hhbmdlOiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dCh7IHJvdXRlOiByb3V0ZUNoYW5nZS51cmwgfSk7XG4gICAgICB9KTtcblxuICAgIC8vIFRyYW5zbGF0b3IgaW5pdFxuICAgIGxldCBjdXJyZW50Q3VsdHVyZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50Q3VsdHVyZSk7XG5cbiAgICBpZiAoY3VycmVudEN1bHR1cmUgPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGN1cnJlbnRDdWx0dXJlID0gJ2VuJztcbiAgICB9XG4gICAgdHJhbnNsYXRlLnVzZShjdXJyZW50Q3VsdHVyZSk7XG5cblxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQ6IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG90YWxMb2FkaW5nVGltZSA9IDA7XG4gICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDoge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWw6XG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3I6IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICBpZiAobG9jYXRpb24ucGF0aCgpICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uLnBhdGgoKS5pbmNsdWRlcygnL2Rhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC8nKSkge1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5iZ2NvbG9yID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFnZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYmdjb2xvciA9ICdiZWlnZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpKSB7XG4gICAgLy8gICBsZXQgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xuICAgIC8vICAgaWYgKGRhdGEgJiYgZGF0YSAhPSAnbnVsbCcgJiYgZGF0YSAhPSAndW5kZWZpbmVkJylcbiAgICAvLyAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpbihkYXRhKSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gbnVsbCAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gdW5kZWZpbmVkKVxuICAgICAgJiYgIWxvY2FsU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSb2xlRmVhdHVyZXMpKSB7XG4gICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4oZGF0YSkpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxuICAgICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5DbGVhckRlbW9EYXRhQ29tcGxldGVkKSxcbiAgICAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNvbXBhbnlJZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRTb2Z0TGFiZWxzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ2V0U29mdExhYmVsQ29uZmlndXJhdGlvbnMoKTtcbiAgICB0aGlzLmxheW91dENvbmYgPSB0aGlzLmxheW91dC5sYXlvdXRDb25mO1xuICAgIC8vIHRoaXMubGF5b3V0LmFkanVzdExheW91dCgpO1xuXG4gICAgLy8gRk9SIE1PRFVMRSBMT0FERVIgRkxBR1xuICAgIHRoaXMubW9kdWxlTG9hZGVyU3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUm91dGVDb25maWdMb2FkU3RhcnQgfHxcbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlU3RhcnRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmlzTW9kdWxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgUm91dGVDb25maWdMb2FkRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZUVuZCkge1xuICAgICAgICB0aGlzLmlzTW9kdWxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgWyckZXZlbnQnXSlcblxuICBvblJlc2l6ZShldmVudCkge1xuICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dChldmVudCk7XG4gIH1cblxuICBPcGVuZWQoZXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXkgPSBldmVudDtcbiAgfVxuXG4gIGdldFNvZnRMYWJlbENvbmZpZ3VyYXRpb25zKCkge1xuICAgIHRoaXMuc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NvZnRMYWJlbHMnKSk7XG4gIH1cblxuICBnZXRTb2Z0TGFiZWxzKCkge1xuICAgIGxldCBtb2RlbCA9IG5ldyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwoKTtcbiAgICBtb2RlbC5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U29mdExhYmVscyhtb2RlbCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBsZXQgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NvZnRMYWJlbHMnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyB0aGlzLmxheW91dENvbmZTdWIgPSB0aGlzLmxheW91dC5sYXlvdXRDb25mJC5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAvLyAgIC8vIHRoaXMuaW5pdEJvZHlQUyhjaGFuZ2UpXG4gICAgLy8gfSlcbiAgfVxuXG4gIC8vIGluaXRCb2R5UFMobGF5b3V0Q29uZjphbnkgPSB7fSkge1xuICAvLyAgIGlmKGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnICYmIGxheW91dENvbmYudG9wYmFyRml4ZWQpIHtcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgaWYgKHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMpIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgdGhpcy5oZWFkZXJGaXhlZEJvZHlQUyA9IG5ldyBQZXJmZWN0U2Nyb2xsYmFyKCcucmlnaHRzaWRlLWNvbnRlbnQtaG9sZCcsIHtcbiAgLy8gICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlXG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHRoaXMuc2Nyb2xsVG9Ub3AoJy5yaWdodHNpZGUtY29udGVudC1ob2xkJyk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgaWYgKHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMpIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgdGhpcy5ib2R5UFMgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcignLm1haW4tY29udGVudC13cmFwJywge1xuICAvLyAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWVcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgdGhpcy5zY3JvbGxUb1RvcCgnLm1haW4tY29udGVudC13cmFwJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIHNjcm9sbFRvVG9wKHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgICBpZiAoZG9jdW1lbnQpIHtcbiAgICAgIGxldCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5tb2R1bGVMb2FkZXJTdWIpIHtcbiAgICAgIHRoaXMubW9kdWxlTG9hZGVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxheW91dENvbmZTdWIpIHtcbiAgICAgIHRoaXMubGF5b3V0Q29uZlN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3V0ZXJFdmVudFN1Yikge1xuICAgICAgdGhpcy5yb3V0ZXJFdmVudFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIGNsb3NlU2lkZWJhcigpIHtcbiAgICB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKHtcbiAgICAgIHNpZGViYXJTdHlsZTogXCJjbG9zZWRcIlxuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRUaW1lcigpIHtcbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy50b3RhbExvYWRpbmdUaW1lKys7XG4gICAgfSwgMTAwMClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC1hZG1pbi13cmFwXCIgW2Rpcl09J2xheW91dENvbmYuZGlyJz5cbiAgPCEtLSBIZWFkZXIgZm9yIHRvcCBuYXZpZ2F0aW9uIGxheW91dCAtLT5cbiAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxuICA8YXBwLWhlYWRlci10b3AgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICd0b3AnXCIgW25vdGlmaWNQYW5lbF09XCJzaWRlbmF2XCI+XG4gIDwvYXBwLWhlYWRlci10b3A+XG4gIDxuZ3gtdWktbG9hZGVyIGZnc1NpemU9XCIxODBcIiBbZmdzVHlwZV09XCJzcGlubmVyVHlwZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbmd4LXVpLWxvYWRlcj5cbiAgPCEtLSBNYWluIENvbnRhaW5lciAtLT5cbiAgPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBbZGlyXT0nbGF5b3V0Q29uZi5kaXInIGNsYXNzPVwiYXBwLWFkbWluLWNvbnRhaW5lciBhcHAtc2lkZS1uYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItdHJhbnNpdGlvblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICduYXZpZ2F0aW9uLXRvcCc6IGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3RvcCcsXG4gICAgJ3NpZGViYXItZnVsbCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnZnVsbCcsXG4gICAgJ3NpZGViYXItY29tcGFjdCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnY29tcGFjdCcgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZScsXG4gICAgJ3NpZGViYXItY29tcGFjdC1iaWcnOiBsYXlvdXRDb25mLnNpZGViYXJTdHlsZSA9PT0gJ2NvbXBhY3QtYmlnJyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcbiAgICAnbGF5b3V0LWludHJhbnNpdGlvbic6IGxheW91dENvbmYubGF5b3V0SW5UcmFuc2l0aW9uLFxuICAgICdzaWRlYmFyLW9wZW5lZCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlICE9PSAnY2xvc2VkJyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcbiAgICAnc2lkZWJhci1jbG9zZWQnOiBsYXlvdXRDb25mLnNpZGViYXJTdHlsZSA9PT0gJ2Nsb3NlZCcsXG4gICAgJ2ZpeGVkLXRvcGJhcic6IGxheW91dENvbmYudG9wYmFyRml4ZWQgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZSdcbiAgfVwiPlxuICAgIDwhLS0gU0lERUJBUiAtLT5cbiAgICA8IS0tIE9OTFkgUkVRVUlSRUQgRk9SICoqU0lERSoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxuICAgIDwhLS0gPGFwcC1zaWRlYmFyLXNpZGUgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJ1wiPjwvYXBwLXNpZGViYXItc2lkZT4gLS0+XG5cbiAgICA8IS0tIFRvcCBuYXZpZ2F0aW9uIGxheW91dCAobmF2aWdhdGlvbiBmb3IgbW9iaWxlIHNjcmVlbikgLS0+XG4gICAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTU9CSUxFIExBWU9VVCAtLT5cbiAgICA8YXBwLXNpZGViYXItdG9wICpuZ0lmPVwibGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAndG9wJyAmJiBsYXlvdXRDb25mLmlzTW9iaWxlXCI+PC9hcHAtc2lkZWJhci10b3A+XG5cbiAgICA8IS0tIEFwcCBjb250ZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQtd3JhcFwiIFtwZXJmZWN0U2Nyb2xsYmFyXT1cInNjcm9sbENvbmZpZ1wiIFtkaXNhYmxlZF09XCJsYXlvdXRDb25mLnRvcGJhckZpeGVkXCI+XG4gICAgICA8IS0tIEhlYWRlciBmb3Igc2lkZSBuYXZpZ2F0aW9uIGxheW91dCAtLT5cbiAgICAgIDwhLS0gT05MWSBSRVFVSVJFRCBGT1IgKipTSURFKiogTkFWSUdBVElPTiBMQVlPVVQgLS0+XG4gICAgICA8YXBwLWhlYWRlci1zaWRlIGNsYXNzPVwie3tsYXlvdXRDb25mLmlzTW9iaWxlID8gJ2N1c3RvbS1hcHAtaGVhZGVyLW1vYmlsZScgOiAnY3VzdG9tLWFwcC1oZWFkZXInfX1cIiAob3BlbmVkKT1cIk9wZW5lZCgkZXZlbnQpXCIgW25vdGlmaWNQYW5lbF09XCJzaWRlbmF2XCI+XG4gICAgICA8L2FwcC1oZWFkZXItc2lkZT5cblxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXItMVwiICpuZ0lmPVwiIWRhc2hib2FyZFBhZ2VcIj5cbiAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5ICpuZ0lmPVwidXNlclN0b3J5XCIgc3R5bGU9XCJ3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtiYWNrZ3JvdW5kLWNvbG9yOiBiZWlnZTtcIlxuICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgW2lzVXNlclN0b3JpZXNQYWdlXT1mYWxzZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgICA8L2djLXVzZXJzdG9yeS1zdW1tYXJ5PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXVzZXJTdG9yeVwiPlxuICAgICAgICAgIFlvdSBhcmUgbm90IHN0YXJ0ZWQgYW55IHVzZXJzdG9yeSB5ZXQhIFBsZWFzZSBzdGFydCB3b3JrISFcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0wNVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhdC1wb3BvdmVyICNyZWNlbnRVc2VyU3RvcnkgaGFzQmFja2Ryb3AgIGJhY2tkcm9wQ2xhc3M9XCJ1cy1wb3BvdmVyXCI+IFxuICAgICAgICAgICAgPG1hdC1jYXJkPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cbiAgICAgICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXG4gICAgICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cbiAgICAgICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvc2F0LXBvcG92ZXI+XG4gICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodHNpZGUtY29udGVudC1ob2xkXCIgW3BlcmZlY3RTY3JvbGxiYXJdPVwic2Nyb2xsQ29uZmlnXCIgW2Rpc2FibGVkXT1cIiFsYXlvdXRDb25mLnRvcGJhckZpeGVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydibHVyLW9uLW9wZW5lZCc6IGRpc3BsYXl9XCIgW25nQ2xhc3NdPVwieydzaG93LWluLWRhc2hib2FyZCc6ZGFzaGJvYXJkUGFnZX1cIj5cbiAgICAgICAgPCEtLSA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm1yLTFcIiAqbmdJZj1cIiFkYXNoYm9hcmRQYWdlXCIgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6ICc5MHB4J31cIiBcbiAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IHVzZXJTdG9yeSA/ICdiZWlnZScgOiAnbm9uZScgfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjkwcHggIWltcG9ydGFudFwiPlxuICAgICAgICA8Z2MtdXNlcnN0b3J5LXN1bW1hcnkgZnhGbGV4PVwiOTBcIiAqbmdJZj1cInVzZXJTdG9yeVwiIHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcbiAgICAgICAgICBbdXNlclN0b3J5XT1cInVzZXJTdG9yeVwiIFtpc1N1YlRhc2tzUGFnZV09ZmFsc2UgW2lzTG9hZGluZ109XCIoYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luYylcIlxuICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09ZmFsc2UgKHVwZGF0ZUF1dG9Mb2cpPVwiTG9nQWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cbiAgICAgICAgPG1hdC1jYXJkICpuZ0lmPVwiIXVzZXJTdG9yeVwiIHN0eWxlPVwicGFkZGluZzogMTBweDtsZWZ0OiAtNzVweDtcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgWW91IGFyZSBub3Qgc3RhcnRlZCBhbnkge3sgdXNlcnN0b3J5IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX0geWV0ISBQbGVhc2Ugc3RhcnQgd29yayEhXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0wNVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luY1wiPlxuICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxuICAgICAgICA8IS0tIDxkaXYgZnhGbGV4IGNsYXNzPVwibWwtMDVcIiAqbmdJZj1cInVzZXJTdG9yeVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhdC1wb3BvdmVyICNyZWNlbnRVc2VyU3RvcnkgaGFzQmFja2Ryb3AgIGJhY2tkcm9wQ2xhc3M9XCJ1cy1wb3BvdmVyXCI+IFxuICAgICAgICAgICAgPG1hdC1jYXJkPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cbiAgICAgICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXG4gICAgICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cbiAgICAgICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvc2F0LXBvcG92ZXI+XG4gICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwhLS0gVmlldyBMb2FkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LWxvYWRlclwiICpuZ0lmPVwiaXNNb2R1bGVMb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMSBtYXQtYmctYWNjZW50XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG91YmxlLWJvdW5jZTIgbWF0LWJnLXByaW1hcnlcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVmlldyBvdXRsZXQgLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJidHJhay1wcmVsb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWxvYWRpbmctdGV4dFwiPlxuICAgICAgICAgICAge3sgJ0xPQURJTkdQTEVBU0VXQUlUJyB8IHRyYW5zbGF0ZSB9fSAoe3t0b3RhbExvYWRpbmdUaW1lfX0ge3sgJ1NFQ09ORFMnIHwgdHJhbnNsYXRlIH19KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGlkPVwiYnRyYWstbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBWaWV3IG92ZXJsYXkgZm9yIG1vYmlsZSBuYXZpZ2F0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWJhY2tkcm9wXCIgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgIT09ICdjbG9zZWQnICYmIGxheW91dENvbmYuaXNNb2JpbGV9XCJcbiAgICAgIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiPjwvZGl2PlxuXG4gICAgPCEtLSBOb3RpZmljYWF0aW9uIGJhciAtLT5cbiAgICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgbW9kZT1cInNpZGVcIiBvcGVuZWQgY2xhc3M9XCJleGFtcGxlLXNpZGVuYXZcIiBbZml4ZWRJblZpZXdwb3J0XT1cInRydWVcIiBbZml4ZWRUb3BHYXBdPVwibGF5b3V0Q29uZi5pc01vYmlsZSA/IDQ1IDogODhcIlxuICAgICAgW2ZpeGVkQm90dG9tR2FwXT1cIjBcIiBjbGFzcz1cInNpZGUtbmF2LWNvbG9yIGN1c3RvbS1hcHAtbmF2XCIgaWQ9XCJzdHlsZS0xXCI+XG4gICAgICA8YXBwLXNpZGViYXI+PC9hcHAtc2lkZWJhcj5cbiAgICA8L21hdC1zaWRlbmF2PlxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==