@thetradeengineorg1/snova-shell-module 0.0.1

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 (288) hide show
  1. package/README.md +24 -0
  2. package/bundles/thetradeengineorg1-snova-shell-module.umd.js +13896 -0
  3. package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -0
  4. package/esm2015/lib/globaldependencies/components/componentbase.js +538 -0
  5. package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -0
  6. package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -0
  7. package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -0
  8. package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -0
  9. package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -0
  10. package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -0
  11. package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -0
  12. package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -0
  13. package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -0
  14. package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -0
  15. package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -0
  16. package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -0
  17. package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -0
  18. package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -0
  19. package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -0
  20. package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -0
  21. package/esm2015/lib/shell-components/components/Payments/account.component.js +50 -0
  22. package/esm2015/lib/shell-components/components/Payments/company-information.js +262 -0
  23. package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +138 -0
  24. package/esm2015/lib/shell-components/components/Payments/document.component.js +57 -0
  25. package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +32 -0
  26. package/esm2015/lib/shell-components/components/Payments/product-service.component.js +143 -0
  27. package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +152 -0
  28. package/esm2015/lib/shell-components/components/Payments/transactions.component.js +60 -0
  29. package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +250 -0
  30. package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +89 -0
  31. package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +90 -0
  32. package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +357 -0
  33. package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +85 -0
  34. package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +83 -0
  35. package/esm2015/lib/shell-components/components/header-side/header-side.component.js +1642 -0
  36. package/esm2015/lib/shell-components/components/header-top/header-top.component.js +93 -0
  37. package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +26 -0
  38. package/esm2015/lib/shell-components/components/menu/menu.component.js +2478 -0
  39. package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -0
  40. package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +73 -0
  41. package/esm2015/lib/shell-components/components/notifications/notifications.component.js +449 -0
  42. package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +33 -0
  43. package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +81 -0
  44. package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +43 -0
  45. package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +71 -0
  46. package/esm2015/lib/shell-components/constants/api-urls.js +1052 -0
  47. package/esm2015/lib/shell-components/constants/available-languages.js +25 -0
  48. package/esm2015/lib/shell-components/constants/channel-names.js +38 -0
  49. package/esm2015/lib/shell-components/constants/menu-categories.js +6 -0
  50. package/esm2015/lib/shell-components/constants/notification-routes.js +6 -0
  51. package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -0
  52. package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -0
  53. package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -0
  54. package/esm2015/lib/shell-components/models/AppNotification.js +17 -0
  55. package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -0
  56. package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -0
  57. package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -0
  58. package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -0
  59. package/esm2015/lib/shell-components/models/IBadge.js +2 -0
  60. package/esm2015/lib/shell-components/models/IChildItem.js +2 -0
  61. package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -0
  62. package/esm2015/lib/shell-components/models/IMenuItem.js +2 -0
  63. package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -0
  64. package/esm2015/lib/shell-components/models/IntroModel.js +3 -0
  65. package/esm2015/lib/shell-components/models/MessageDetails.js +3 -0
  66. package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -0
  67. package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -0
  68. package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -0
  69. package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -0
  70. package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -0
  71. package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -0
  72. package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -0
  73. package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -0
  74. package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -0
  75. package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -0
  76. package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -0
  77. package/esm2015/lib/shell-components/models/companieslist.model.js +3 -0
  78. package/esm2015/lib/shell-components/models/company-model.js +7 -0
  79. package/esm2015/lib/shell-components/models/company-payment-model.js +3 -0
  80. package/esm2015/lib/shell-components/models/dragedWidget.js +3 -0
  81. package/esm2015/lib/shell-components/models/employee-List.js +3 -0
  82. package/esm2015/lib/shell-components/models/employee.js +4 -0
  83. package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -0
  84. package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -0
  85. package/esm2015/lib/shell-components/models/export-data.module.js +8 -0
  86. package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -0
  87. package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -0
  88. package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -0
  89. package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -0
  90. package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -0
  91. package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -0
  92. package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -0
  93. package/esm2015/lib/shell-components/models/project.js +3 -0
  94. package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -0
  95. package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -0
  96. package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -0
  97. package/esm2015/lib/shell-components/models/softlabels-model.js +7 -0
  98. package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -0
  99. package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -0
  100. package/esm2015/lib/shell-components/models/store-model.js +3 -0
  101. package/esm2015/lib/shell-components/models/store-search-model.js +4 -0
  102. package/esm2015/lib/shell-components/models/themes.model.js +3 -0
  103. package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -0
  104. package/esm2015/lib/shell-components/models/user.js +8 -0
  105. package/esm2015/lib/shell-components/models/userStory.js +3 -0
  106. package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -0
  107. package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -0
  108. package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -0
  109. package/esm2015/lib/shell-components/models/validation.model.js +2 -0
  110. package/esm2015/lib/shell-components/models/widgetlist.js +6 -0
  111. package/esm2015/lib/shell-components/models/workspaceList.js +3 -0
  112. package/esm2015/lib/shell-components/services/authentication.service.js +96 -0
  113. package/esm2015/lib/shell-components/services/chat.service.js +67 -0
  114. package/esm2015/lib/shell-components/services/common-used.service.js +263 -0
  115. package/esm2015/lib/shell-components/services/feature.service.js +101 -0
  116. package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -0
  117. package/esm2015/lib/shell-components/services/layout.service.js +68 -0
  118. package/esm2015/lib/shell-components/services/payment.service.js +103 -0
  119. package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -0
  120. package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -0
  121. package/esm2015/lib/shell-components/services/signalr.service.js +113 -0
  122. package/esm2015/lib/shell-components/services/theme.service.js +161 -0
  123. package/esm2015/lib/shell-components/shell.module.js +436 -0
  124. package/esm2015/lib/shell-components/shell.routing.js +16 -0
  125. package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -0
  126. package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -0
  127. package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -0
  128. package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -0
  129. package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -0
  130. package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -0
  131. package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -0
  132. package/esm2015/lib/shell-components/store/effects/index.js +13 -0
  133. package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -0
  134. package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -0
  135. package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -0
  136. package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -0
  137. package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -0
  138. package/esm2015/lib/shell-components/store/reducers/index.js +80 -0
  139. package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -0
  140. package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -0
  141. package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -0
  142. package/esm2015/public-api.js +90 -0
  143. package/esm2015/store/reducers/index.js +47 -0
  144. package/esm2015/thetradeengineorg1-snova-shell-module.js +5 -0
  145. package/fesm2015/thetradeengineorg1-snova-shell-module.js +12808 -0
  146. package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -0
  147. package/lib/globaldependencies/components/componentbase.d.ts +455 -0
  148. package/lib/globaldependencies/constants/feature-ids.d.ts +448 -0
  149. package/lib/globaldependencies/constants/localstorage-properties.d.ts +37 -0
  150. package/lib/globaldependencies/helpers/dom.helper.d.ts +7 -0
  151. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +1 -0
  152. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +9 -0
  153. package/lib/globaldependencies/helpers/window.helper.d.ts +12 -0
  154. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +11 -0
  155. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +8 -0
  156. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +8 -0
  157. package/lib/globaldependencies/pipes/orderby-pipe.d.ts +9 -0
  158. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +8 -0
  159. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +11 -0
  160. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +8 -0
  161. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +8 -0
  162. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +8 -0
  163. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +8 -0
  164. package/lib/shell-components/components/Payments/account.component.d.ts +14 -0
  165. package/lib/shell-components/components/Payments/company-information.d.ts +62 -0
  166. package/lib/shell-components/components/Payments/company-plans.component.d.ts +47 -0
  167. package/lib/shell-components/components/Payments/document.component.d.ts +20 -0
  168. package/lib/shell-components/components/Payments/payment-method.component.d.ts +15 -0
  169. package/lib/shell-components/components/Payments/product-service.component.d.ts +48 -0
  170. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +37 -0
  171. package/lib/shell-components/components/Payments/transactions.component.d.ts +28 -0
  172. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +67 -0
  173. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +32 -0
  174. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +32 -0
  175. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +60 -0
  176. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +33 -0
  177. package/lib/shell-components/components/feed-time/feed-time.component.d.ts +27 -0
  178. package/lib/shell-components/components/header-side/header-side.component.d.ts +216 -0
  179. package/lib/shell-components/components/header-top/header-top.component.d.ts +40 -0
  180. package/lib/shell-components/components/lives/lives-welcome-page.d.ts +14 -0
  181. package/lib/shell-components/components/menu/menu.component.d.ts +220 -0
  182. package/lib/shell-components/components/menu/searchTask.enum.d.ts +8 -0
  183. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +27 -0
  184. package/lib/shell-components/components/notifications/notifications.component.d.ts +53 -0
  185. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +10 -0
  186. package/lib/shell-components/components/sidenav/side-bar.component.d.ts +23 -0
  187. package/lib/shell-components/components/sidenav/sidenav.component.d.ts +17 -0
  188. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +25 -0
  189. package/lib/shell-components/constants/api-urls.d.ts +1051 -0
  190. package/lib/shell-components/constants/available-languages.d.ts +7 -0
  191. package/lib/shell-components/constants/channel-names.d.ts +37 -0
  192. package/lib/shell-components/constants/menu-categories.d.ts +5 -0
  193. package/lib/shell-components/constants/notification-routes.d.ts +5 -0
  194. package/lib/shell-components/constants/notification-type-ids.d.ts +41 -0
  195. package/lib/shell-components/enum/recentSearchType.enum.d.ts +11 -0
  196. package/lib/shell-components/models/AppMenuItemModel.d.ts +12 -0
  197. package/lib/shell-components/models/AppNotification.d.ts +12 -0
  198. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +10 -0
  199. package/lib/shell-components/models/ChannelUpdateModel.d.ts +47 -0
  200. package/lib/shell-components/models/EmployeeStatusModel.d.ts +11 -0
  201. package/lib/shell-components/models/IAdjust-screen-options.d.ts +4 -0
  202. package/lib/shell-components/models/IBadge.d.ts +4 -0
  203. package/lib/shell-components/models/IChildItem.d.ts +7 -0
  204. package/lib/shell-components/models/ILayout-change-options.d.ts +4 -0
  205. package/lib/shell-components/models/IMenuItem.d.ts +14 -0
  206. package/lib/shell-components/models/IlayoutConf.d.ts +10 -0
  207. package/lib/shell-components/models/IntroModel.d.ts +3 -0
  208. package/lib/shell-components/models/MessageDetails.d.ts +55 -0
  209. package/lib/shell-components/models/MessageTypingDetails.d.ts +9 -0
  210. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +8 -0
  211. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +8 -0
  212. package/lib/shell-components/models/NotificationsOutPutModel.d.ts +41 -0
  213. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +10 -0
  214. package/lib/shell-components/models/RecentSearchModel.d.ts +14 -0
  215. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +9 -0
  216. package/lib/shell-components/models/ReportSubmittedNotification.d.ts +10 -0
  217. package/lib/shell-components/models/RoleUpdatedNotification.d.ts +7 -0
  218. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +8 -0
  219. package/lib/shell-components/models/archiveUserStoryModel.d.ts +7 -0
  220. package/lib/shell-components/models/companieslist.model.d.ts +8 -0
  221. package/lib/shell-components/models/company-model.d.ts +31 -0
  222. package/lib/shell-components/models/company-payment-model.d.ts +18 -0
  223. package/lib/shell-components/models/dragedWidget.d.ts +16 -0
  224. package/lib/shell-components/models/employee-List.d.ts +8 -0
  225. package/lib/shell-components/models/employee.d.ts +60 -0
  226. package/lib/shell-components/models/entityRoleFeature.d.ts +9 -0
  227. package/lib/shell-components/models/export-configuration-model.d.ts +8 -0
  228. package/lib/shell-components/models/export-data.module.d.ts +6 -0
  229. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +8 -0
  230. package/lib/shell-components/models/import-configuration-model.d.ts +3 -0
  231. package/lib/shell-components/models/initialStatusofUsers.d.ts +5 -0
  232. package/lib/shell-components/models/invoiceOutput-model.d.ts +9 -0
  233. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +7 -0
  234. package/lib/shell-components/models/multiChartsScheduling.d.ts +9 -0
  235. package/lib/shell-components/models/parkUserStoryInputModel.d.ts +7 -0
  236. package/lib/shell-components/models/project.d.ts +28 -0
  237. package/lib/shell-components/models/recentSearchApiModel.d.ts +6 -0
  238. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +10 -0
  239. package/lib/shell-components/models/shellModulesInfo.d.ts +16 -0
  240. package/lib/shell-components/models/softlabels-model.d.ts +66 -0
  241. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +7 -0
  242. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +7 -0
  243. package/lib/shell-components/models/store-model.d.ts +13 -0
  244. package/lib/shell-components/models/store-search-model.d.ts +7 -0
  245. package/lib/shell-components/models/themes.model.d.ts +9 -0
  246. package/lib/shell-components/models/timesheetenabledisable.d.ts +16 -0
  247. package/lib/shell-components/models/user.d.ts +40 -0
  248. package/lib/shell-components/models/userStory.d.ts +188 -0
  249. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +6 -0
  250. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +6 -0
  251. package/lib/shell-components/models/userstory-custom-fields.model.d.ts +6 -0
  252. package/lib/shell-components/models/validation.model.d.ts +5 -0
  253. package/lib/shell-components/models/widgetlist.d.ts +28 -0
  254. package/lib/shell-components/models/workspaceList.d.ts +19 -0
  255. package/lib/shell-components/services/authentication.service.d.ts +18 -0
  256. package/lib/shell-components/services/chat.service.d.ts +16 -0
  257. package/lib/shell-components/services/common-used.service.d.ts +45 -0
  258. package/lib/shell-components/services/feature.service.d.ts +19 -0
  259. package/lib/shell-components/services/google-analytics.service.d.ts +9 -0
  260. package/lib/shell-components/services/layout.service.d.ts +23 -0
  261. package/lib/shell-components/services/payment.service.d.ts +19 -0
  262. package/lib/shell-components/services/recentSearch.service.d.ts +16 -0
  263. package/lib/shell-components/services/shell.modules.service.d.ts +9 -0
  264. package/lib/shell-components/services/signalr.service.d.ts +25 -0
  265. package/lib/shell-components/services/theme.service.d.ts +14 -0
  266. package/lib/shell-components/shell.module.d.ts +117 -0
  267. package/lib/shell-components/shell.routing.d.ts +2 -0
  268. package/lib/shell-components/store/actions/authentication.actions.d.ts +327 -0
  269. package/lib/shell-components/store/actions/chat.actions.d.ts +399 -0
  270. package/lib/shell-components/store/actions/menuitems.actions.d.ts +51 -0
  271. package/lib/shell-components/store/actions/notification-validator.action.d.ts +25 -0
  272. package/lib/shell-components/store/actions/notifications.actions.d.ts +116 -0
  273. package/lib/shell-components/store/effects/authentication.effects.d.ts +54 -0
  274. package/lib/shell-components/store/effects/chat.effects.d.ts +30 -0
  275. package/lib/shell-components/store/effects/index.d.ts +1 -0
  276. package/lib/shell-components/store/effects/menuitems.effects.d.ts +17 -0
  277. package/lib/shell-components/store/effects/notification-validator.effects.d.ts +21 -0
  278. package/lib/shell-components/store/effects/notifications.effects.d.ts +23 -0
  279. package/lib/shell-components/store/reducers/authentication.reducers.d.ts +30 -0
  280. package/lib/shell-components/store/reducers/chat.reducers.d.ts +17 -0
  281. package/lib/shell-components/store/reducers/index.d.ts +59 -0
  282. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +11 -0
  283. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +5 -0
  284. package/lib/shell-components/store/reducers/notifications.reducers.d.ts +10 -0
  285. package/package.json +22 -0
  286. package/public-api.d.ts +80 -0
  287. package/store/reducers/index.d.ts +24 -0
  288. package/thetradeengineorg1-snova-shell-module.d.ts +5 -0
@@ -0,0 +1,503 @@
1
+ import { __decorate } from "tslib";
2
+ import { Inject, Injectable } from "@angular/core";
3
+ import { Effect, ofType } from "@ngrx/effects";
4
+ import { of, pipe } from "rxjs";
5
+ import { catchError, map, switchMap, tap } from "rxjs/operators";
6
+ import { AuthenticationActionTypes, CompanyWorkItemStartFunctionalityRequiredSuccess, AuthenticationFailed, ClearDemoDataCompleted, ClearDemoDataFailed, EntityReolesByUserIdFetchCompleted, EntityRoleDetailsFetched, EntityRolesByUserIdFetchFailed, EntityRolesByUserIdFetchTriggered, GetCompanyThemeCompleted, GetCompanyThemeFailed, InitializeAfterLoginData, RoleDetailsFetched, RolesFetchFailed, UserDetailsFetched, GetUserStoreIdCompleted, GetUserStoreIdFailed, ExceptionHandled, GetCompanySettingsTriggered, GetCompanySettingsCompleted, GetCompanySettingsFailed, UserDetailsFetchedAfterLogin, UserInitialDetailsFetchedCompleted } from "../actions/authentication.actions";
7
+ import { ShowExceptionMessages, ShowValidationMessages } from "../actions/notification-validator.action";
8
+ import { WINDOW } from '../../../globaldependencies/helpers/window.helper';
9
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
10
+ import { CompanysettingsModel } from '../../models/company-model';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@ngrx/effects";
13
+ import * as i2 from "../../services/authentication.service";
14
+ import * as i3 from "../../services/common-used.service";
15
+ import * as i4 from "../../services/feature.service";
16
+ import * as i5 from "ngx-cookie-service";
17
+ import * as i6 from "ngx-toastr";
18
+ /** @dynamic */
19
+ export class AuthenticationEffects {
20
+ constructor(actions$, authenticationService, userService, commonService, featureService, cookieService, toastr, window) {
21
+ this.actions$ = actions$;
22
+ this.authenticationService = authenticationService;
23
+ this.userService = userService;
24
+ this.commonService = commonService;
25
+ this.featureService = featureService;
26
+ this.cookieService = cookieService;
27
+ this.toastr = toastr;
28
+ this.window = window;
29
+ this.authenticate$ = this.actions$.pipe(ofType(AuthenticationActionTypes.AuthenticateUser), switchMap((action) => {
30
+ return this.authenticationService
31
+ .login(action.userName, action.password)
32
+ .pipe(map((userToken) => {
33
+ this.logInData = userToken.data;
34
+ console.log(this.window.location.hostname);
35
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
36
+ this.cookieService.set(LocalStorageProperties.CurrentUser, userToken.data.authToken, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
37
+ // this.cookieService.set(LocalStorageProperties.DefaultDashboard, JSON.stringify(userToken.data.defaultDashboardId), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
38
+ this.cookieService.set(LocalStorageProperties.CompanyDetails, JSON.stringify(userToken.data.companyDetails), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
39
+ localStorage.setItem(LocalStorageProperties.RoleFeatures, JSON.stringify(userToken.data.roleFeatures));
40
+ localStorage.setItem(LocalStorageProperties.SoftLabels, JSON.stringify(userToken.data.softLabels));
41
+ this.cookieService.set(LocalStorageProperties.FromLogIn, JSON.stringify(true), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
42
+ // return new Authenticated(
43
+ // action.userName,
44
+ // JSON.stringify(userToken.data.authToken)
45
+ // );
46
+ this.cookieService.set(LocalStorageProperties.CurrentUserId, userToken.data.usersModel.id, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
47
+ this.cookieService.set(LocalStorageProperties.CompanyName, userToken.data.usersModel.companyName, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
48
+ this.cookieService.set(LocalStorageProperties.CompanyId, userToken.data.usersModel.companyId, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
49
+ return new UserDetailsFetched(userToken.data.usersModel);
50
+ }), catchError((error) => of(new AuthenticationFailed(error))));
51
+ }));
52
+ this.authenticateNewUser$ = this.actions$.pipe(ofType(AuthenticationActionTypes.AuthenticateNewUser), switchMap((action) => {
53
+ return this.authenticationService
54
+ .loginNewUser(action.userName)
55
+ .pipe(map((userToken) => {
56
+ this.logInData = userToken.data;
57
+ console.log(this.window.location.hostname);
58
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
59
+ this.cookieService.set(LocalStorageProperties.CurrentUser, userToken.data.authToken, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
60
+ this.cookieService.set(LocalStorageProperties.DefaultDashboard, JSON.stringify(userToken.data.defaultDashboardId), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
61
+ this.cookieService.set(LocalStorageProperties.CompanyDetails, JSON.stringify(userToken.data.companyDetails), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
62
+ localStorage.setItem(LocalStorageProperties.RoleFeatures, JSON.stringify(userToken.data.roleFeatures));
63
+ localStorage.setItem(LocalStorageProperties.SoftLabels, JSON.stringify(userToken.data.softLabels));
64
+ this.cookieService.set(LocalStorageProperties.FromLogIn, JSON.stringify(true), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
65
+ // return new Authenticated(
66
+ // action.userName,
67
+ // JSON.stringify(userToken.data.authToken)
68
+ // );
69
+ this.cookieService.set(LocalStorageProperties.CurrentUserId, userToken.data.usersModel.id, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
70
+ this.cookieService.set(LocalStorageProperties.CompanyName, userToken.data.usersModel.companyName, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
71
+ this.cookieService.set(LocalStorageProperties.CompanyId, userToken.data.usersModel.companyId, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
72
+ return new UserDetailsFetched(userToken.data.usersModel);
73
+ }), catchError((error) => of(new AuthenticationFailed(error))));
74
+ }));
75
+ this.authenticated$ = this.actions$.pipe(ofType(AuthenticationActionTypes.Authenticated), switchMap((action) => {
76
+ return this.userService.getLoggedInUser().pipe(map((userRecord) => {
77
+ console.log(this.window.location.hostname);
78
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
79
+ this.cookieService.set(LocalStorageProperties.CurrentUserId, userRecord.data.id, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
80
+ this.cookieService.set(LocalStorageProperties.CompanyName, userRecord.data.companyName, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
81
+ this.cookieService.set(LocalStorageProperties.CompanyId, userRecord.data.companyId, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
82
+ return new UserDetailsFetched(userRecord.data);
83
+ }));
84
+ }));
85
+ this.companyWorkItemStartFunctionalityRequired$ = this.actions$.pipe(ofType(AuthenticationActionTypes.CompanyWorkItemStartFunctionalityRequired), switchMap((action) => {
86
+ return this.userService.getCompanyWorkItemStartFunctionalityRequired().pipe(map((record) => {
87
+ console.log(this.window.location.hostname);
88
+ return new CompanyWorkItemStartFunctionalityRequiredSuccess(record.data);
89
+ }));
90
+ }));
91
+ // @Effect()
92
+ // UserDetailsFetching$: Observable<Action> = this.actions$.pipe(
93
+ // ofType<UserDetailsFetching>(AuthenticationActionTypes.UserDetailsFetching),
94
+ // pipe(
95
+ // map((action: any) => {
96
+ // //var configurations = new SoftLabelConfigurationModel();
97
+ // //return new GetsoftLabelsTriggered(configurations);
98
+ // return new UserDetailsFetched(action.loginData.UsersModel);
99
+ // })
100
+ // )
101
+ // );
102
+ this.authenticateSignedOff$ = this.actions$.pipe(ofType(AuthenticationActionTypes.SignedOff), tap((action) => {
103
+ this.cookieService.delete(LocalStorageProperties.CurrentUser);
104
+ }));
105
+ this.initializeRolesAfterLoginData$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetched), pipe(map(() => {
106
+ var roles = JSON.parse(localStorage.getItem(LocalStorageProperties.RoleFeatures));
107
+ return new RoleDetailsFetched(roles);
108
+ })));
109
+ // @Effect()
110
+ // initializeSoftLabelsAfterLoginData$: Observable<Action> = this.actions$.pipe(
111
+ // ofType<UserDetailsFetched>(
112
+ // AuthenticationActionTypes.UserDetailsFetched
113
+ // ),
114
+ // pipe(
115
+ // map(() => {
116
+ // var softLabels = JSON.parse(localStorage.getItem(LocalStorageProperties.SoftLabels));
117
+ // return new GetsoftLabelsCompleted(softLabels);
118
+ // })
119
+ // )
120
+ // );
121
+ this.initializeRolesAfterLoginDataForUser$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetchedAfterLogin), pipe(map(() => {
122
+ var roles = JSON.parse(localStorage.getItem(LocalStorageProperties.RoleFeatures));
123
+ return new RoleDetailsFetched(roles);
124
+ })));
125
+ this.initializeLoginDataForUserCompany$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetchedAfterCompanyLogin), pipe(map((action) => {
126
+ return new UserDetailsFetchedAfterLogin(action.userModel);
127
+ })));
128
+ this.initializeLoginDataForUser$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetchedAfterLogin), switchMap(() => {
129
+ return this.commonService.getUserInitialData()
130
+ .pipe(map((res) => {
131
+ console.log(res.data);
132
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
133
+ let data = res.data;
134
+ localStorage.setItem(LocalStorageProperties.UserRoleFeatures, JSON.stringify(data.entityFeatures));
135
+ this.cookieService.set(LocalStorageProperties.AddOrEditCustomAppIsRequired, data.addOrEditCustomAppIsRequired, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
136
+ return new UserInitialDetailsFetchedCompleted(res.data.timeSheetButtonDetails);
137
+ }));
138
+ }));
139
+ this.fetchUserTimeSheetButtonDetails$ = this.actions$.pipe(ofType(AuthenticationActionTypes.FetchTimeSheetButtonDetails), switchMap(() => {
140
+ return this.commonService.getTimeSheetEnabledInformation()
141
+ .pipe(map((res) => {
142
+ return new UserInitialDetailsFetchedCompleted(res);
143
+ }));
144
+ }));
145
+ // @Effect()
146
+ // initializeCompanySettingsLoginDataForUserCompleted: Observable<Action> = this.actions$.pipe(
147
+ // ofType<UserInitialDetailsFetchedCompleted>(
148
+ // AuthenticationActionTypes.UserInitialDetailsFetchedCompleted
149
+ // ),
150
+ // pipe(
151
+ // map((res: any) => {
152
+ // return new GetCompanySettingsCompleted(res.companySettings);
153
+ // })
154
+ // )
155
+ // );
156
+ // @Effect()
157
+ // initializeEntityRoleFeaturesLoginDataForUserCompleted: Observable<Action> = this.actions$.pipe(
158
+ // ofType<UserInitialDetailsFetchedCompleted>(
159
+ // AuthenticationActionTypes.UserInitialDetailsFetchedCompleted
160
+ // ),
161
+ // pipe(
162
+ // map((res: any) => {
163
+ // return new EntityReolesByUserIdFetchCompleted(res.entityFeatures);
164
+ // })
165
+ // )
166
+ // );
167
+ // @Effect()
168
+ // initializeSoftLabelsAfterLoginDataForUser$: Observable<Action> = this.actions$.pipe(
169
+ // ofType<UserDetailsFetchedAfterLogin>(
170
+ // AuthenticationActionTypes.UserDetailsFetchedAfterLogin
171
+ // ),
172
+ // pipe(
173
+ // map(() => {
174
+ // var softLabels = JSON.parse(localStorage.getItem(LocalStorageProperties.SoftLabels));
175
+ // return new GetsoftLabelsCompleted(softLabels);
176
+ // })
177
+ // )
178
+ // );
179
+ // @Effect()
180
+ // initializeAfterGettingSoftLabels$: Observable<Action> = this.actions$.pipe(
181
+ // ofType<UserDetailsFetched>(
182
+ // AuthenticationActionTypes.UserDetailsFetched
183
+ // ),
184
+ // pipe(
185
+ // map((action: any) => {
186
+ // var fromLogIn = JSON.parse(localStorage.getItem('FromLogIn'));
187
+ // if(fromLogIn) {
188
+ // return new GetsoftLabelsCompleted(this.logInData.softLabels);
189
+ // } else {
190
+ // var configurations = new SoftLabelConfigurationModel();
191
+ // return new GetsoftLabelsTriggered(configurations);
192
+ // }
193
+ // })
194
+ // )
195
+ // );
196
+ // @Effect()
197
+ // initializeAfterGettingRoleFeatures$: Observable<Action> = this.actions$.pipe(
198
+ // ofType<UserDetailsFetching>(
199
+ // AuthenticationActionTypes.UserDetailsFetched
200
+ // ),
201
+ // pipe(
202
+ // map((action: any) => {
203
+ // // var roles = localStorage.getItem('Roles');
204
+ // var fromLogIn = JSON.parse(localStorage.getItem('FromLogIn'));
205
+ // if(fromLogIn) {
206
+ // return new RoleDetailsFetched(this.logInData.roleFeatures);
207
+ // } else {
208
+ // return new RoleDetailsFetchOnReload();
209
+ // }
210
+ // })
211
+ // )
212
+ // );
213
+ // @Effect()
214
+ // initializeThemeAfterLogin$: Observable<Action> = this.actions$.pipe(
215
+ // ofType<UserDetailsFetched>(
216
+ // AuthenticationActionTypes.UserDetailsFetched
217
+ // ),
218
+ // pipe(
219
+ // map(() => {
220
+ // return new GetCompanyThemeTriggered();
221
+ // })
222
+ // )
223
+ // );
224
+ this.gettingRoleDetailsAfterInitializeLoginData$ = this.actions$.pipe(ofType(AuthenticationActionTypes.EntityRolesFetchTriggered), switchMap((action) => {
225
+ return this.featureService.getAllPermittedEntityRoleFeatures(action.projectId).pipe(map((roleFeatures) => {
226
+ if (roleFeatures.success) {
227
+ localStorage.setItem(LocalStorageProperties.EntityRoleFeatures, JSON.stringify(roleFeatures.data));
228
+ return new EntityRoleDetailsFetched(roleFeatures.data);
229
+ }
230
+ else {
231
+ this.validationMessages = roleFeatures.apiResponseMessages;
232
+ return new RolesFetchFailed(roleFeatures.apiResponseMessages);
233
+ }
234
+ }));
235
+ }));
236
+ this.companySettingsTriggered$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetched), pipe(map(() => {
237
+ var companySettingsModel = new CompanysettingsModel();
238
+ companySettingsModel.isArchived = false;
239
+ return new GetCompanySettingsTriggered(companySettingsModel);
240
+ })));
241
+ this.entityRolesTRiggered$ = this.actions$.pipe(ofType(AuthenticationActionTypes.UserDetailsFetched), pipe(map(() => {
242
+ return new EntityRolesByUserIdFetchTriggered("null", "null", false);
243
+ })));
244
+ // @Effect()
245
+ // companySettingsTriggeredAfterLogin$: Observable<Action> = this.actions$.pipe(
246
+ // ofType<UserDetailsFetchedAfterLogin>(
247
+ // AuthenticationActionTypes.UserDetailsFetchedAfterLogin
248
+ // ),
249
+ // pipe(
250
+ // map(() => {
251
+ // var companySettingsModel = new CompanysettingsModel();
252
+ // companySettingsModel.isArchived = false;
253
+ // return new GetCompanySettingsTriggered(companySettingsModel);
254
+ // })
255
+ // )
256
+ // );
257
+ // @Effect()
258
+ // entityRolesTRiggeredAfterLogin$: Observable<Action> = this.actions$.pipe(
259
+ // ofType<UserDetailsFetchedAfterLogin>(
260
+ // AuthenticationActionTypes.UserDetailsFetchedAfterLogin
261
+ // ),
262
+ // pipe(
263
+ // map(() => {
264
+ // return new EntityRolesByUserIdFetchTriggered("null", "null", false);
265
+ // })
266
+ // )
267
+ // );
268
+ this.loadCompanySettings$ = this.actions$.pipe(ofType(AuthenticationActionTypes.GetCompanySettingsTriggered), switchMap((action) => {
269
+ return this.userService.getAllCompanySettingsDetails(action.companySettingsModel).pipe(map((roleFeatures) => {
270
+ if (roleFeatures.success) {
271
+ localStorage.setItem(LocalStorageProperties.CompanySettings, JSON.stringify(roleFeatures.data));
272
+ return new GetCompanySettingsCompleted(roleFeatures.data);
273
+ }
274
+ else {
275
+ return new GetCompanySettingsFailed(roleFeatures.apiResponseMessages);
276
+ }
277
+ }));
278
+ }));
279
+ this.gettingRoleDetailsByUserIdAfterInitializeLoginData$ = this.actions$.pipe(ofType(AuthenticationActionTypes.EntityRolesByUserIdFetchTriggered), switchMap(action => {
280
+ if (action.requiredType == 'goal') {
281
+ this.goalId = action.projectId;
282
+ this.userStoryId = null;
283
+ this.sprintId = null;
284
+ }
285
+ else if (action.requiredType == 'userStory') {
286
+ this.userStoryId = action.projectId;
287
+ this.goalId = null;
288
+ this.sprintId = null;
289
+ }
290
+ else if (action.requiredType == 'sprint') {
291
+ this.sprintId = action.projectId;
292
+ this.goalId = null;
293
+ this.userStoryId = null;
294
+ }
295
+ else {
296
+ this.userStoryId = null;
297
+ this.goalId = null;
298
+ this.sprintId = null;
299
+ }
300
+ this.isSprintType = action.isSprintType;
301
+ return this.featureService.getAllPermittedEntityRoleFeaturesByUserId().pipe(map((roleFeatures) => {
302
+ if (roleFeatures.success) {
303
+ localStorage.setItem(LocalStorageProperties.UserRoleFeatures, JSON.stringify(roleFeatures.data));
304
+ return new EntityReolesByUserIdFetchCompleted(roleFeatures.data);
305
+ }
306
+ else {
307
+ this.validationMessages = roleFeatures.apiResponseMessages;
308
+ return new EntityRolesByUserIdFetchFailed(roleFeatures.apiResponseMessages);
309
+ }
310
+ }), catchError(err => {
311
+ return of(new ExceptionHandled(err));
312
+ }));
313
+ }));
314
+ this.initializeAfterLoginData2$ = this.actions$.pipe(ofType(AuthenticationActionTypes.InitializeAfterLoginData), switchMap((action) => {
315
+ return this.userService.getLoggedInUser().pipe(map((userRecord) => {
316
+ console.log(this.window.location.hostname);
317
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
318
+ this.cookieService.set(LocalStorageProperties.CurrentUserId, userRecord.data.id, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
319
+ this.cookieService.set(LocalStorageProperties.CompanyName, userRecord.data.companyName, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
320
+ this.cookieService.set(LocalStorageProperties.CompanyId, userRecord.data.companyId, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
321
+ return new UserDetailsFetched(userRecord.data);
322
+ }));
323
+ }));
324
+ this.showValidationMessagesFoRoleFeatures$ = this.actions$.pipe(ofType(AuthenticationActionTypes.RolesFetchFailed), pipe(map(() => {
325
+ for (let i = 0; i < this.validationMessages.length; i++) {
326
+ return new ShowExceptionMessages({
327
+ message: this.validationMessages[i].message // TODO: Change to proper toast message
328
+ });
329
+ }
330
+ })));
331
+ this.showValidationMessagesForEntityRoles$ = this.actions$.pipe(ofType(AuthenticationActionTypes.EntityRolesByUserIdFetchFailed), switchMap((searchAction) => {
332
+ return of(new ShowValidationMessages({
333
+ validationMessages: searchAction.validationMessages
334
+ }));
335
+ }));
336
+ this.showValidationMessagesForCompanySettings$ = this.actions$.pipe(ofType(AuthenticationActionTypes.GetCompanySettingsFailed), switchMap((searchAction) => {
337
+ return of(new ShowValidationMessages({
338
+ validationMessages: searchAction.validationMessages
339
+ }));
340
+ }));
341
+ this.demoDataClearEventTriggred$ = this.actions$.pipe(ofType(AuthenticationActionTypes.ClearDemoDataTriggred), switchMap((action) => {
342
+ return this.featureService.clearDemoData().pipe(map((response) => {
343
+ if (response.success) {
344
+ this.toastr.success("Demo data cleared successfully");
345
+ return new ClearDemoDataCompleted(response.data);
346
+ }
347
+ else {
348
+ this.validationMessages = response.apiResponseMessages;
349
+ this.toastr.error(this.validationMessages[0].message);
350
+ return new ClearDemoDataFailed(response.apiResponseMessages);
351
+ }
352
+ }));
353
+ }));
354
+ this.getThemeColor$ = this.actions$.pipe(ofType(AuthenticationActionTypes.GetCompanyThemeTriggered), switchMap(action => {
355
+ return this.authenticationService.getThemes().pipe(map((response) => {
356
+ if (response.success) {
357
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
358
+ this.cookieService.set(LocalStorageProperties.CompanyTheme, JSON.stringify(response.data), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
359
+ return new GetCompanyThemeCompleted(response.data);
360
+ }
361
+ else {
362
+ return new GetCompanyThemeFailed(response.apiResponseMessages);
363
+ }
364
+ }));
365
+ }));
366
+ this.demoDataClearEventSuccessful$ = this.actions$.pipe(ofType(AuthenticationActionTypes.ClearDemoDataCompleted), pipe(map(() => {
367
+ return new InitializeAfterLoginData();
368
+ })));
369
+ // @Effect()
370
+ // loadGoalAndUserStoryData$: Observable<
371
+ // Action
372
+ // > = this.actions$.pipe(
373
+ // ofType<EntityReolesByUserIdFetchCompleted>(
374
+ // AuthenticationActionTypes.EntityReolesByUserIdFetchCompleted
375
+ // ),
376
+ // pipe(
377
+ // map(() => {
378
+ // if (this.goalId) {
379
+ // return new GetUniqueGoalByIdTriggered(this.goalId);
380
+ // }
381
+ // else if (this.userStoryId) {
382
+ // if (this.isSprintType) {
383
+ // return new GetUniqueSprintWorkItemByIdTriggered(this.userStoryId);
384
+ // } else {
385
+ // return new GetUniqueUserStoryByIdTriggered(this.userStoryId);
386
+ // }
387
+ // } else if (this.sprintId) {
388
+ // return new GetUniqueSprintsByIdTriggered(this.sprintId);
389
+ // }
390
+ // else {
391
+ // return new ArchiveUnArchiveGoalCompleted();
392
+ // }
393
+ // })
394
+ // )
395
+ // );
396
+ this.getUserStoreIdDetails$ = this.actions$.pipe(ofType(AuthenticationActionTypes.GetUserStoreIdTriggered), switchMap(searchAction => {
397
+ return this.userService
398
+ .getStores(searchAction.searchUserStoreDetailsModel)
399
+ .pipe(map((storeData) => {
400
+ if (storeData.success === true)
401
+ return new GetUserStoreIdCompleted(storeData.data[0]);
402
+ else
403
+ return new GetUserStoreIdFailed(storeData.apiResponseMessages);
404
+ }), catchError(error => {
405
+ return of(new ExceptionHandled(error));
406
+ }));
407
+ }));
408
+ this.showValidationMessagesForGetUserStoreId$ = this.actions$.pipe(ofType(AuthenticationActionTypes.GetUserStoreIdFailed), switchMap(searchAction => {
409
+ return of(new ShowValidationMessages({
410
+ validationMessages: searchAction.validationMessages,
411
+ }));
412
+ }));
413
+ this.exceptionHandled$ = this.actions$.pipe(ofType(AuthenticationActionTypes.ExceptionHandled), switchMap(searchAction => {
414
+ return of(new ShowExceptionMessages({
415
+ message: searchAction.errorMessage, // TODO: Change to proper toast message
416
+ }));
417
+ }));
418
+ }
419
+ }
420
+ AuthenticationEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: AuthenticationEffects, deps: [{ token: i1.Actions }, { token: i2.AuthenticationService }, { token: i3.CommonService }, { token: i3.CommonService }, { token: i4.MenuItemService }, { token: i5.CookieService }, { token: i6.ToastrService }, { token: WINDOW }], target: i0.ɵɵFactoryTarget.Injectable });
421
+ AuthenticationEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: AuthenticationEffects });
422
+ __decorate([
423
+ Effect()
424
+ ], AuthenticationEffects.prototype, "authenticate$", void 0);
425
+ __decorate([
426
+ Effect()
427
+ ], AuthenticationEffects.prototype, "authenticateNewUser$", void 0);
428
+ __decorate([
429
+ Effect()
430
+ ], AuthenticationEffects.prototype, "authenticated$", void 0);
431
+ __decorate([
432
+ Effect()
433
+ ], AuthenticationEffects.prototype, "companyWorkItemStartFunctionalityRequired$", void 0);
434
+ __decorate([
435
+ Effect({ dispatch: false })
436
+ ], AuthenticationEffects.prototype, "authenticateSignedOff$", void 0);
437
+ __decorate([
438
+ Effect()
439
+ ], AuthenticationEffects.prototype, "initializeRolesAfterLoginData$", void 0);
440
+ __decorate([
441
+ Effect()
442
+ ], AuthenticationEffects.prototype, "initializeRolesAfterLoginDataForUser$", void 0);
443
+ __decorate([
444
+ Effect()
445
+ ], AuthenticationEffects.prototype, "initializeLoginDataForUserCompany$", void 0);
446
+ __decorate([
447
+ Effect()
448
+ ], AuthenticationEffects.prototype, "initializeLoginDataForUser$", void 0);
449
+ __decorate([
450
+ Effect()
451
+ ], AuthenticationEffects.prototype, "fetchUserTimeSheetButtonDetails$", void 0);
452
+ __decorate([
453
+ Effect()
454
+ ], AuthenticationEffects.prototype, "gettingRoleDetailsAfterInitializeLoginData$", void 0);
455
+ __decorate([
456
+ Effect()
457
+ ], AuthenticationEffects.prototype, "companySettingsTriggered$", void 0);
458
+ __decorate([
459
+ Effect()
460
+ ], AuthenticationEffects.prototype, "entityRolesTRiggered$", void 0);
461
+ __decorate([
462
+ Effect()
463
+ ], AuthenticationEffects.prototype, "loadCompanySettings$", void 0);
464
+ __decorate([
465
+ Effect()
466
+ ], AuthenticationEffects.prototype, "gettingRoleDetailsByUserIdAfterInitializeLoginData$", void 0);
467
+ __decorate([
468
+ Effect()
469
+ ], AuthenticationEffects.prototype, "initializeAfterLoginData2$", void 0);
470
+ __decorate([
471
+ Effect()
472
+ ], AuthenticationEffects.prototype, "showValidationMessagesFoRoleFeatures$", void 0);
473
+ __decorate([
474
+ Effect()
475
+ ], AuthenticationEffects.prototype, "showValidationMessagesForEntityRoles$", void 0);
476
+ __decorate([
477
+ Effect()
478
+ ], AuthenticationEffects.prototype, "showValidationMessagesForCompanySettings$", void 0);
479
+ __decorate([
480
+ Effect()
481
+ ], AuthenticationEffects.prototype, "demoDataClearEventTriggred$", void 0);
482
+ __decorate([
483
+ Effect()
484
+ ], AuthenticationEffects.prototype, "getThemeColor$", void 0);
485
+ __decorate([
486
+ Effect()
487
+ ], AuthenticationEffects.prototype, "demoDataClearEventSuccessful$", void 0);
488
+ __decorate([
489
+ Effect()
490
+ ], AuthenticationEffects.prototype, "getUserStoreIdDetails$", void 0);
491
+ __decorate([
492
+ Effect()
493
+ ], AuthenticationEffects.prototype, "showValidationMessagesForGetUserStoreId$", void 0);
494
+ __decorate([
495
+ Effect()
496
+ ], AuthenticationEffects.prototype, "exceptionHandled$", void 0);
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: AuthenticationEffects, decorators: [{
498
+ type: Injectable
499
+ }], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.AuthenticationService }, { type: i3.CommonService }, { type: i3.CommonService }, { type: i4.MenuItemService }, { type: i5.CookieService }, { type: i6.ToastrService }, { type: Window, decorators: [{
500
+ type: Inject,
501
+ args: [WINDOW]
502
+ }] }]; }, propDecorators: { authenticate$: [], authenticateNewUser$: [], authenticated$: [], companyWorkItemStartFunctionalityRequired$: [], authenticateSignedOff$: [], initializeRolesAfterLoginData$: [], initializeRolesAfterLoginDataForUser$: [], initializeLoginDataForUserCompany$: [], initializeLoginDataForUser$: [], fetchUserTimeSheetButtonDetails$: [], gettingRoleDetailsAfterInitializeLoginData$: [], companySettingsTriggered$: [], entityRolesTRiggered$: [], loadCompanySettings$: [], gettingRoleDetailsByUserIdAfterInitializeLoginData$: [], initializeAfterLoginData2$: [], showValidationMessagesFoRoleFeatures$: [], showValidationMessagesForEntityRoles$: [], showValidationMessagesForCompanySettings$: [], demoDataClearEventTriggred$: [], getThemeColor$: [], demoDataClearEventSuccessful$: [], getUserStoreIdDetails$: [], showValidationMessagesForGetUserStoreId$: [], exceptionHandled$: [] } });
503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL3N0b3JlL2VmZmVjdHMvYXV0aGVudGljYXRpb24uZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFXLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFHTCx5QkFBeUIsRUFFekIsZ0RBQWdELEVBQ2hELG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLGtDQUFrQyxFQUNsQyx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLGlDQUFpQyxFQUVqQyx3QkFBd0IsRUFDeEIscUJBQXFCLEVBRXJCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFFbEIsZ0JBQWdCLEVBR2hCLGtCQUFrQixFQUVsQix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUVoQiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFHNUIsa0NBQWtDLEVBRW5DLE1BQU0sbUNBQW1DLENBQUM7QUFJM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFekcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzNFLE9BQU8sRUFB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R0Y7SUFEQyxNQUFNLEVBQUU7b0ZBYVA7QUFHRjtJQURDLE1BQU0sRUFBRTt3RkFhUDtBQUdGO0lBREMsTUFBTSxFQUFFOzBFQW1CUDtBQUdGO0lBREMsTUFBTSxFQUFFOzZEQW1CUDtBQUdGO0lBREMsTUFBTSxFQUFFOzRFQVlQO0FBZ0NGO0lBREMsTUFBTSxFQUFFO3FFQWlCUDtBQUdGO0lBREMsTUFBTSxFQUFFO3VGQVNQO0FBR0Y7SUFEQyxNQUFNLEVBQUU7Z0VBU1A7MkZBNW1CUyxxQkFBcUI7a0JBRmpDLFVBQVU7a1FBd25CeUIsTUFBTTswQkFBckMsTUFBTTsyQkFBQyxNQUFNOzRDQTltQmhCLGFBQWEsTUErQmIsb0JBQW9CLE1BK0JwQixjQUFjLE1BaUJkLDBDQUEwQyxNQTBCMUMsc0JBQXNCLE1BUXRCLDhCQUE4QixNQTBCOUIscUNBQXFDLE1BY3JDLGtDQUFrQyxNQVlsQywyQkFBMkIsTUFtQjNCLGdDQUFnQyxNQW9HaEMsMkNBQTJDLE1Bb0IzQyx5QkFBeUIsTUFjekIscUJBQXFCLE1Bc0NyQixvQkFBb0IsTUFtQnBCLG1EQUFtRCxNQTJDbkQsMEJBQTBCLE1Bb0IxQixxQ0FBcUMsTUFxQnJDLHFDQUFxQyxNQWVyQyx5Q0FBeUMsTUFlekMsMkJBQTJCLE1BcUIzQixjQUFjLE1BcUJkLDZCQUE2QixNQTJDN0Isc0JBQXNCLE1BbUJ0Qix3Q0FBd0MsTUFXeEMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aW9ucywgRWZmZWN0LCBvZlR5cGUgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHBpcGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7XHJcbiAgQXV0aGVudGljYXRlZCxcclxuICBBdXRoZW50aWNhdGVVc2VyLFxyXG4gIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMsXHJcbiAgQ29tcGFueVdvcmtJdGVtU3RhcnRGdW5jdGlvbmFsaXR5UmVxdWlyZWQsXHJcbiAgQ29tcGFueVdvcmtJdGVtU3RhcnRGdW5jdGlvbmFsaXR5UmVxdWlyZWRTdWNjZXNzLFxyXG4gIEF1dGhlbnRpY2F0aW9uRmFpbGVkLFxyXG4gIENsZWFyRGVtb0RhdGFDb21wbGV0ZWQsXHJcbiAgQ2xlYXJEZW1vRGF0YUZhaWxlZCxcclxuICBDbGVhckRlbW9EYXRhVHJpZ2dyZWQsXHJcbiAgRW50aXR5UmVvbGVzQnlVc2VySWRGZXRjaENvbXBsZXRlZCxcclxuICBFbnRpdHlSb2xlRGV0YWlsc0ZldGNoZWQsXHJcbiAgRW50aXR5Um9sZXNCeVVzZXJJZEZldGNoRmFpbGVkLFxyXG4gIEVudGl0eVJvbGVzQnlVc2VySWRGZXRjaFRyaWdnZXJlZCxcclxuICBFbnRpdHlSb2xlc0ZldGNoVHJpZ2dlcmVkLFxyXG4gIEdldENvbXBhbnlUaGVtZUNvbXBsZXRlZCxcclxuICBHZXRDb21wYW55VGhlbWVGYWlsZWQsXHJcbiAgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkLFxyXG4gIEluaXRpYWxpemVBZnRlckxvZ2luRGF0YSxcclxuICBSb2xlRGV0YWlsc0ZldGNoZWQsXHJcbiAgUm9sZURldGFpbHNGZXRjaE9uUmVsb2FkLFxyXG4gIFJvbGVzRmV0Y2hGYWlsZWQsXHJcbiAgU2lnbmVkT2ZmLFxyXG4gIFVzZXJEZXRhaWxzRmV0Y2hpbmcsXHJcbiAgVXNlckRldGFpbHNGZXRjaGVkLFxyXG4gIEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkLFxyXG4gIEdldFVzZXJTdG9yZUlkQ29tcGxldGVkLFxyXG4gIEdldFVzZXJTdG9yZUlkRmFpbGVkLFxyXG4gIEV4Y2VwdGlvbkhhbmRsZWQsXHJcbiAgQXV0aGVudGljYXRlTmV3VXNlcixcclxuICBHZXRDb21wYW55U2V0dGluZ3NUcmlnZ2VyZWQsXHJcbiAgR2V0Q29tcGFueVNldHRpbmdzQ29tcGxldGVkLFxyXG4gIEdldENvbXBhbnlTZXR0aW5nc0ZhaWxlZCxcclxuICBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLFxyXG4gIFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyQ29tcGFueUxvZ2luLFxyXG4gIFVzZXJJbml0aWFsRGV0YWlsc0ZldGNoZWQsXHJcbiAgVXNlckluaXRpYWxEZXRhaWxzRmV0Y2hlZENvbXBsZXRlZCxcclxuICBGZXRjaFRpbWVTaGVldEJ1dHRvbkRldGFpbHNcclxufSBmcm9tIFwiLi4vYWN0aW9ucy9hdXRoZW50aWNhdGlvbi5hY3Rpb25zXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1lbnVJdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2hvd0V4Y2VwdGlvbk1lc3NhZ2VzLCBTaG93VmFsaWRhdGlvbk1lc3NhZ2VzIH0gZnJvbSBcIi4uL2FjdGlvbnMvbm90aWZpY2F0aW9uLXZhbGlkYXRvci5hY3Rpb25cIjtcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9oZWxwZXJzL3dpbmRvdy5oZWxwZXInO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbnN0YW50cy9sb2NhbHN0b3JhZ2UtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24tdXNlZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcGFueXNldHRpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcGFueS1tb2RlbCc7XHJcblxyXG4vKiogQGR5bmFtaWMgKi9cclxuXHJcbkBJbmplY3RhYmxlKClcclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkVmZmVjdHMge1xyXG4gIHZhbGlkYXRpb25NZXNzYWdlczogYW55W107XHJcbiAgZ29hbElkOiBzdHJpbmc7XHJcbiAgdXNlclN0b3J5SWQ6IHN0cmluZztcclxuICBzcHJpbnRJZDogc3RyaW5nO1xyXG4gIGlzU3ByaW50VHlwZTogYm9vbGVhbjtcclxuICBsb2dJbkRhdGE6IGFueTtcclxuICBARWZmZWN0KClcclxuICBhdXRoZW50aWNhdGUkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgICBvZlR5cGU8QXV0aGVudGljYXRlVXNlcj4oQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5BdXRoZW50aWNhdGVVc2VyKSxcclxuICAgIHN3aXRjaE1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZVxyXG4gICAgICAgIC5sb2dpbihhY3Rpb24udXNlck5hbWUsIGFjdGlvbi5wYXNzd29yZClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIG1hcCgodXNlclRva2VuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dJbkRhdGEgPSB1c2VyVG9rZW4uZGF0YTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VyLCB1c2VyVG9rZW4uZGF0YS5hdXRoVG9rZW4sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueURldGFpbHMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLmNvbXBhbnlEZXRhaWxzKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Sb2xlRmVhdHVyZXMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnJvbGVGZWF0dXJlcykpO1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlNvZnRMYWJlbHMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnNvZnRMYWJlbHMpKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkZyb21Mb2dJbiwgSlNPTi5zdHJpbmdpZnkodHJ1ZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgQXV0aGVudGljYXRlZChcclxuICAgICAgICAgICAgLy8gICBhY3Rpb24udXNlck5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEuYXV0aFRva2VuKVxyXG4gICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCwgdXNlclRva2VuLmRhdGEudXNlcnNNb2RlbC5pZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlOYW1lLCB1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbnlOYW1lLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueUlkLCB1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbnlJZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyRGV0YWlsc0ZldGNoZWQodXNlclRva2VuLmRhdGEudXNlcnNNb2RlbCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiBvZihuZXcgQXV0aGVudGljYXRpb25GYWlsZWQoZXJyb3IpKSlcclxuICAgICAgICApO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBhdXRoZW50aWNhdGVOZXdVc2VyJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEF1dGhlbnRpY2F0ZU5ld1VzZXI+KEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuQXV0aGVudGljYXRlTmV3VXNlciksXHJcbiAgICBzd2l0Y2hNYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2VcclxuICAgICAgICAubG9naW5OZXdVc2VyKGFjdGlvbi51c2VyTmFtZSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIG1hcCgodXNlclRva2VuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dJbkRhdGEgPSB1c2VyVG9rZW4uZGF0YTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VyLCB1c2VyVG9rZW4uZGF0YS5hdXRoVG9rZW4sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueURldGFpbHMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLmNvbXBhbnlEZXRhaWxzKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Sb2xlRmVhdHVyZXMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnJvbGVGZWF0dXJlcykpO1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlNvZnRMYWJlbHMsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnNvZnRMYWJlbHMpKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkZyb21Mb2dJbiwgSlNPTi5zdHJpbmdpZnkodHJ1ZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgQXV0aGVudGljYXRlZChcclxuICAgICAgICAgICAgLy8gICBhY3Rpb24udXNlck5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEuYXV0aFRva2VuKVxyXG4gICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCwgdXNlclRva2VuLmRhdGEudXNlcnNNb2RlbC5pZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlOYW1lLCB1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbnlOYW1lLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueUlkLCB1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbnlJZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyRGV0YWlsc0ZldGNoZWQodXNlclRva2VuLmRhdGEudXNlcnNNb2RlbCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiBvZihuZXcgQXV0aGVudGljYXRpb25GYWlsZWQoZXJyb3IpKSlcclxuICAgICAgICApO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBhdXRoZW50aWNhdGVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEF1dGhlbnRpY2F0ZWQ+KEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuQXV0aGVudGljYXRlZCksXHJcbiAgICBzd2l0Y2hNYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRMb2dnZWRJblVzZXIoKS5waXBlKFxyXG4gICAgICAgIG1hcCgodXNlclJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk7XHJcbiAgICAgICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkLCB1c2VyUmVjb3JkLmRhdGEuaWQsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU5hbWUsIHVzZXJSZWNvcmQuZGF0YS5jb21wYW55TmFtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQsIHVzZXJSZWNvcmQuZGF0YS5jb21wYW55SWQsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IFVzZXJEZXRhaWxzRmV0Y2hlZCh1c2VyUmVjb3JkLmRhdGEpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGNvbXBhbnlXb3JrSXRlbVN0YXJ0RnVuY3Rpb25hbGl0eVJlcXVpcmVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPENvbXBhbnlXb3JrSXRlbVN0YXJ0RnVuY3Rpb25hbGl0eVJlcXVpcmVkPihBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkNvbXBhbnlXb3JrSXRlbVN0YXJ0RnVuY3Rpb25hbGl0eVJlcXVpcmVkKSxcclxuICAgIHN3aXRjaE1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldENvbXBhbnlXb3JrSXRlbVN0YXJ0RnVuY3Rpb25hbGl0eVJlcXVpcmVkKCkucGlwZShcclxuICAgICAgICBtYXAoKHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBhbnlXb3JrSXRlbVN0YXJ0RnVuY3Rpb25hbGl0eVJlcXVpcmVkU3VjY2VzcyhyZWNvcmQuZGF0YSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0pXHJcbiAgKTtcclxuICBcclxuXHJcbiAgLy8gQEVmZmVjdCgpXHJcbiAgLy8gVXNlckRldGFpbHNGZXRjaGluZyQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAvLyAgIG9mVHlwZTxVc2VyRGV0YWlsc0ZldGNoaW5nPihBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hpbmcpLFxyXG4gIC8vICAgcGlwZShcclxuICAvLyAgICAgbWFwKChhY3Rpb246IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIC8vdmFyIGNvbmZpZ3VyYXRpb25zID0gbmV3IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gIC8vICAgICAgIC8vcmV0dXJuIG5ldyBHZXRzb2Z0TGFiZWxzVHJpZ2dlcmVkKGNvbmZpZ3VyYXRpb25zKTtcclxuICAvLyAgICAgICByZXR1cm4gbmV3IFVzZXJEZXRhaWxzRmV0Y2hlZChhY3Rpb24ubG9naW5EYXRhLlVzZXJzTW9kZWwpO1xyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIEBFZmZlY3QoeyBkaXNwYXRjaDogZmFsc2UgfSlcclxuICBhdXRoZW50aWNhdGVTaWduZWRPZmYkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgICBvZlR5cGU8U2lnbmVkT2ZmPihBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlNpZ25lZE9mZiksXHJcbiAgICB0YXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLmNvb2tpZVNlcnZpY2UuZGVsZXRlKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXIpO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBpbml0aWFsaXplUm9sZXNBZnRlckxvZ2luRGF0YSQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxVc2VyRGV0YWlsc0ZldGNoZWQ+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hlZFxyXG4gICAgKSxcclxuICAgIHBpcGUoXHJcbiAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvbGVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlJvbGVGZWF0dXJlcykpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUm9sZURldGFpbHNGZXRjaGVkKHJvbGVzKTtcclxuICAgICAgfSlcclxuICAgIClcclxuICApO1xyXG5cclxuICAvLyBARWZmZWN0KClcclxuICAvLyBpbml0aWFsaXplU29mdExhYmVsc0FmdGVyTG9naW5EYXRhJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gIC8vICAgb2ZUeXBlPFVzZXJEZXRhaWxzRmV0Y2hlZD4oXHJcbiAgLy8gICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkXHJcbiAgLy8gICApLFxyXG4gIC8vICAgcGlwZShcclxuICAvLyAgICAgbWFwKCgpID0+IHtcclxuICAvLyAgICAgICB2YXIgc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Tb2Z0TGFiZWxzKSk7XHJcbiAgLy8gICAgICAgcmV0dXJuIG5ldyBHZXRzb2Z0TGFiZWxzQ29tcGxldGVkKHNvZnRMYWJlbHMpO1xyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGluaXRpYWxpemVSb2xlc0FmdGVyTG9naW5EYXRhRm9yVXNlciQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICB2YXIgcm9sZXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuUm9sZUZlYXR1cmVzKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSb2xlRGV0YWlsc0ZldGNoZWQocm9sZXMpO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcblxyXG5cclxuICBARWZmZWN0KClcclxuICBpbml0aWFsaXplTG9naW5EYXRhRm9yVXNlckNvbXBhbnkkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgICBvZlR5cGU8VXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJDb21wYW55TG9naW4+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyQ29tcGFueUxvZ2luXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4oYWN0aW9uLnVzZXJNb2RlbCk7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgKTtcclxuICBcclxuICBARWZmZWN0KClcclxuICBpbml0aWFsaXplTG9naW5EYXRhRm9yVXNlciQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luXHJcbiAgICApLFxyXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5nZXRVc2VySW5pdGlhbERhdGEoKVxyXG4gICAgICAgIC5waXBlKG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKTtcclxuICAgICAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlclJvbGVGZWF0dXJlcywgSlNPTi5zdHJpbmdpZnkoZGF0YS5lbnRpdHlGZWF0dXJlcykpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkFkZE9yRWRpdEN1c3RvbUFwcElzUmVxdWlyZWQsIGRhdGEuYWRkT3JFZGl0Q3VzdG9tQXBwSXNSZXF1aXJlZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHJldHVybiBuZXcgVXNlckluaXRpYWxEZXRhaWxzRmV0Y2hlZENvbXBsZXRlZChyZXMuZGF0YS50aW1lU2hlZXRCdXR0b25EZXRhaWxzKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgZmV0Y2hVc2VyVGltZVNoZWV0QnV0dG9uRGV0YWlscyQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxGZXRjaFRpbWVTaGVldEJ1dHRvbkRldGFpbHM+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkZldGNoVGltZVNoZWV0QnV0dG9uRGV0YWlsc1xyXG4gICAgKSxcclxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIHJldHVybiAgdGhpcy5jb21tb25TZXJ2aWNlLmdldFRpbWVTaGVldEVuYWJsZWRJbmZvcm1hdGlvbigpXHJcbiAgICAgICAgLnBpcGUobWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFVzZXJJbml0aWFsRGV0YWlsc0ZldGNoZWRDb21wbGV0ZWQocmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgLy8gQEVmZmVjdCgpXHJcbiAgLy8gaW5pdGlhbGl6ZUNvbXBhbnlTZXR0aW5nc0xvZ2luRGF0YUZvclVzZXJDb21wbGV0ZWQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAvLyAgIG9mVHlwZTxVc2VySW5pdGlhbERldGFpbHNGZXRjaGVkQ29tcGxldGVkPihcclxuICAvLyAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VySW5pdGlhbERldGFpbHNGZXRjaGVkQ29tcGxldGVkXHJcbiAgLy8gICApLFxyXG4gIC8vICAgcGlwZShcclxuICAvLyAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVNldHRpbmdzQ29tcGxldGVkKHJlcy5jb21wYW55U2V0dGluZ3MpO1xyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIC8vIEBFZmZlY3QoKVxyXG4gIC8vIGluaXRpYWxpemVFbnRpdHlSb2xlRmVhdHVyZXNMb2dpbkRhdGFGb3JVc2VyQ29tcGxldGVkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgLy8gICBvZlR5cGU8VXNlckluaXRpYWxEZXRhaWxzRmV0Y2hlZENvbXBsZXRlZD4oXHJcbiAgLy8gICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckluaXRpYWxEZXRhaWxzRmV0Y2hlZENvbXBsZXRlZFxyXG4gIC8vICAgKSxcclxuICAvLyAgIHBpcGUoXHJcbiAgLy8gICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlb2xlc0J5VXNlcklkRmV0Y2hDb21wbGV0ZWQocmVzLmVudGl0eUZlYXR1cmVzKTtcclxuICAvLyAgICAgfSlcclxuICAvLyAgIClcclxuICAvLyApO1xyXG5cclxuXHJcbiAgLy8gQEVmZmVjdCgpXHJcbiAgLy8gaW5pdGlhbGl6ZVNvZnRMYWJlbHNBZnRlckxvZ2luRGF0YUZvclVzZXIkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgLy8gICBvZlR5cGU8VXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpbj4oXHJcbiAgLy8gICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpblxyXG4gIC8vICAgKSxcclxuICAvLyAgIHBpcGUoXHJcbiAgLy8gICAgIG1hcCgoKSA9PiB7XHJcbiAgLy8gICAgICAgdmFyIHNvZnRMYWJlbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuU29mdExhYmVscykpO1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgR2V0c29mdExhYmVsc0NvbXBsZXRlZChzb2Z0TGFiZWxzKTtcclxuICAvLyAgICAgfSlcclxuICAvLyAgIClcclxuICAvLyApO1xyXG5cclxuICAvLyBARWZmZWN0KClcclxuICAvLyBpbml0aWFsaXplQWZ0ZXJHZXR0aW5nU29mdExhYmVscyQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAvLyAgIG9mVHlwZTxVc2VyRGV0YWlsc0ZldGNoZWQ+KFxyXG4gIC8vICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hlZFxyXG4gIC8vICAgKSxcclxuICAvLyAgIHBpcGUoXHJcbiAgLy8gICAgIG1hcCgoYWN0aW9uOiBhbnkpID0+IHsgICAgICAgIFxyXG4gIC8vICAgICAgIHZhciBmcm9tTG9nSW4gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdGcm9tTG9nSW4nKSk7XHJcbiAgLy8gICAgICAgaWYoZnJvbUxvZ0luKSB7XHJcbiAgLy8gICAgICAgICByZXR1cm4gbmV3IEdldHNvZnRMYWJlbHNDb21wbGV0ZWQodGhpcy5sb2dJbkRhdGEuc29mdExhYmVscyk7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHZhciBjb25maWd1cmF0aW9ucyA9IG5ldyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwoKTtcclxuICAvLyAgICAgICAgICByZXR1cm4gbmV3IEdldHNvZnRMYWJlbHNUcmlnZ2VyZWQoY29uZmlndXJhdGlvbnMpO1xyXG4gIC8vICAgICAgIH0gICAgICAgIFxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIC8vIEBFZmZlY3QoKVxyXG4gIC8vIGluaXRpYWxpemVBZnRlckdldHRpbmdSb2xlRmVhdHVyZXMkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgLy8gICBvZlR5cGU8VXNlckRldGFpbHNGZXRjaGluZz4oXHJcbiAgLy8gICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkXHJcbiAgLy8gICApLFxyXG4gIC8vICAgcGlwZShcclxuICAvLyAgICAgbWFwKChhY3Rpb246IGFueSkgPT4ge1xyXG4gIC8vICAgICAgLy8gdmFyIHJvbGVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1JvbGVzJyk7XHJcbiAgLy8gICAgICB2YXIgZnJvbUxvZ0luID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnRnJvbUxvZ0luJykpO1xyXG4gIC8vICAgICAgIGlmKGZyb21Mb2dJbikge1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgUm9sZURldGFpbHNGZXRjaGVkKHRoaXMubG9nSW5EYXRhLnJvbGVGZWF0dXJlcyk7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHJldHVybiBuZXcgUm9sZURldGFpbHNGZXRjaE9uUmVsb2FkKCk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIC8vIEBFZmZlY3QoKVxyXG4gIC8vIGluaXRpYWxpemVUaGVtZUFmdGVyTG9naW4kOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgLy8gICBvZlR5cGU8VXNlckRldGFpbHNGZXRjaGVkPihcclxuICAvLyAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VyRGV0YWlsc0ZldGNoZWRcclxuICAvLyAgICksXHJcbiAgLy8gICBwaXBlKFxyXG4gIC8vICAgICBtYXAoKCkgPT4ge1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkKCk7XHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICApXHJcbiAgLy8gKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgZ2V0dGluZ1JvbGVEZXRhaWxzQWZ0ZXJJbml0aWFsaXplTG9naW5EYXRhJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEVudGl0eVJvbGVzRmV0Y2hUcmlnZ2VyZWQ+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkVudGl0eVJvbGVzRmV0Y2hUcmlnZ2VyZWRcclxuICAgICksXHJcbiAgICBzd2l0Y2hNYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mZWF0dXJlU2VydmljZS5nZXRBbGxQZXJtaXR0ZWRFbnRpdHlSb2xlRmVhdHVyZXMoYWN0aW9uLnByb2plY3RJZCkucGlwZShcclxuICAgICAgICBtYXAoKHJvbGVGZWF0dXJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocm9sZUZlYXR1cmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnRpdHlSb2xlRmVhdHVyZXMsIEpTT04uc3RyaW5naWZ5KHJvbGVGZWF0dXJlcy5kYXRhKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRW50aXR5Um9sZURldGFpbHNGZXRjaGVkKHJvbGVGZWF0dXJlcy5kYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gcm9sZUZlYXR1cmVzLmFwaVJlc3BvbnNlTWVzc2FnZXM7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUm9sZXNGZXRjaEZhaWxlZChyb2xlRmVhdHVyZXMuYXBpUmVzcG9uc2VNZXNzYWdlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgY29tcGFueVNldHRpbmdzVHJpZ2dlcmVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPFVzZXJEZXRhaWxzRmV0Y2hlZD4oXHJcbiAgICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICB2YXIgY29tcGFueVNldHRpbmdzTW9kZWwgPSBuZXcgQ29tcGFueXNldHRpbmdzTW9kZWwoKTtcclxuICAgICAgICBjb21wYW55U2V0dGluZ3NNb2RlbC5pc0FyY2hpdmVkID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBHZXRDb21wYW55U2V0dGluZ3NUcmlnZ2VyZWQoY29tcGFueVNldHRpbmdzTW9kZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGVudGl0eVJvbGVzVFJpZ2dlcmVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPFVzZXJEZXRhaWxzRmV0Y2hlZD4oXHJcbiAgICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJvbGVzQnlVc2VySWRGZXRjaFRyaWdnZXJlZChcIm51bGxcIiwgXCJudWxsXCIsIGZhbHNlKTtcclxuICAgICAgfSlcclxuICAgIClcclxuICApO1xyXG5cclxuICAvLyBARWZmZWN0KClcclxuICAvLyBjb21wYW55U2V0dGluZ3NUcmlnZ2VyZWRBZnRlckxvZ2luJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gIC8vICAgb2ZUeXBlPFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4+KFxyXG4gIC8vICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW5cclxuICAvLyAgICksXHJcbiAgLy8gICBwaXBlKFxyXG4gIC8vICAgICBtYXAoKCkgPT4ge1xyXG4gIC8vICAgICAgIHZhciBjb21wYW55U2V0dGluZ3NNb2RlbCA9IG5ldyBDb21wYW55c2V0dGluZ3NNb2RlbCgpO1xyXG4gIC8vICAgICAgIGNvbXBhbnlTZXR0aW5nc01vZGVsLmlzQXJjaGl2ZWQgPSBmYWxzZTtcclxuICAvLyAgICAgICByZXR1cm4gbmV3IEdldENvbXBhbnlTZXR0aW5nc1RyaWdnZXJlZChjb21wYW55U2V0dGluZ3NNb2RlbCk7XHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICApXHJcbiAgLy8gKTtcclxuXHJcbiAgLy8gQEVmZmVjdCgpXHJcbiAgLy8gZW50aXR5Um9sZXNUUmlnZ2VyZWRBZnRlckxvZ2luJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gIC8vICAgb2ZUeXBlPFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4+KFxyXG4gIC8vICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLlVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW5cclxuICAvLyAgICksXHJcbiAgLy8gICBwaXBlKFxyXG4gIC8vICAgICBtYXAoKCkgPT4ge1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgRW50aXR5Um9sZXNCeVVzZXJJZEZldGNoVHJpZ2dlcmVkKFwibnVsbFwiLCBcIm51bGxcIiwgZmFsc2UpO1xyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgKVxyXG4gIC8vICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGxvYWRDb21wYW55U2V0dGluZ3MkOiBPYnNlcnZhYmxlPEFjdGlvbj4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgICBvZlR5cGU8R2V0Q29tcGFueVNldHRpbmdzVHJpZ2dlcmVkPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5HZXRDb21wYW55U2V0dGluZ3NUcmlnZ2VyZWRcclxuICAgICksXHJcbiAgICBzd2l0Y2hNYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRBbGxDb21wYW55U2V0dGluZ3NEZXRhaWxzKGFjdGlvbi5jb21wYW55U2V0dGluZ3NNb2RlbCkucGlwZShcclxuICAgICAgICBtYXAoKHJvbGVGZWF0dXJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocm9sZUZlYXR1cmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MsIEpTT04uc3RyaW5naWZ5KHJvbGVGZWF0dXJlcy5kYXRhKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVNldHRpbmdzQ29tcGxldGVkKHJvbGVGZWF0dXJlcy5kYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVNldHRpbmdzRmFpbGVkKHJvbGVGZWF0dXJlcy5hcGlSZXNwb25zZU1lc3NhZ2VzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBnZXR0aW5nUm9sZURldGFpbHNCeVVzZXJJZEFmdGVySW5pdGlhbGl6ZUxvZ2luRGF0YSQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxFbnRpdHlSb2xlc0J5VXNlcklkRmV0Y2hUcmlnZ2VyZWQ+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkVudGl0eVJvbGVzQnlVc2VySWRGZXRjaFRyaWdnZXJlZFxyXG4gICAgKSxcclxuICAgIHN3aXRjaE1hcChhY3Rpb24gPT4ge1xyXG4gICAgICBpZiAoYWN0aW9uLnJlcXVpcmVkVHlwZSA9PSAnZ29hbCcpIHtcclxuICAgICAgICB0aGlzLmdvYWxJZCA9IGFjdGlvbi5wcm9qZWN0SWQ7XHJcbiAgICAgICAgdGhpcy51c2VyU3RvcnlJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcHJpbnRJZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWN0aW9uLnJlcXVpcmVkVHlwZSA9PSAndXNlclN0b3J5Jykge1xyXG4gICAgICAgIHRoaXMudXNlclN0b3J5SWQgPSBhY3Rpb24ucHJvamVjdElkO1xyXG4gICAgICAgIHRoaXMuZ29hbElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwcmludElkID0gbnVsbDtcclxuICAgICAgfSBlbHNlIGlmIChhY3Rpb24ucmVxdWlyZWRUeXBlID09ICdzcHJpbnQnKSB7XHJcbiAgICAgICAgdGhpcy5zcHJpbnRJZCA9IGFjdGlvbi5wcm9qZWN0SWQ7XHJcbiAgICAgICAgdGhpcy5nb2FsSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlclN0b3J5SWQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXNlclN0b3J5SWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ29hbElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwcmludElkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzU3ByaW50VHlwZSA9IGFjdGlvbi5pc1NwcmludFR5cGU7XHJcbiAgICAgIHJldHVybiB0aGlzLmZlYXR1cmVTZXJ2aWNlLmdldEFsbFBlcm1pdHRlZEVudGl0eVJvbGVGZWF0dXJlc0J5VXNlcklkKCkucGlwZShcclxuICAgICAgICBtYXAoKHJvbGVGZWF0dXJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocm9sZUZlYXR1cmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUm9sZUZlYXR1cmVzLCBKU09OLnN0cmluZ2lmeShyb2xlRmVhdHVyZXMuZGF0YSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVudGl0eVJlb2xlc0J5VXNlcklkRmV0Y2hDb21wbGV0ZWQocm9sZUZlYXR1cmVzLmRhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSByb2xlRmVhdHVyZXMuYXBpUmVzcG9uc2VNZXNzYWdlcztcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbnRpdHlSb2xlc0J5VXNlcklkRmV0Y2hGYWlsZWQocm9sZUZlYXR1cmVzLmFwaVJlc3BvbnNlTWVzc2FnZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHJldHVybiBvZihuZXcgRXhjZXB0aW9uSGFuZGxlZChlcnIpKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBpbml0aWFsaXplQWZ0ZXJMb2dpbkRhdGEyJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEluaXRpYWxpemVBZnRlckxvZ2luRGF0YT4oXHJcbiAgICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuSW5pdGlhbGl6ZUFmdGVyTG9naW5EYXRhXHJcbiAgICApLFxyXG4gICAgc3dpdGNoTWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0TG9nZ2VkSW5Vc2VyKCkucGlwZShcclxuICAgICAgICBtYXAoKHVzZXJSZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gICAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCwgdXNlclJlY29yZC5kYXRhLmlkLCBudWxsLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlOYW1lLCB1c2VyUmVjb3JkLmRhdGEuY29tcGFueU5hbWUsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueUlkLCB1c2VyUmVjb3JkLmRhdGEuY29tcGFueUlkLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBVc2VyRGV0YWlsc0ZldGNoZWQodXNlclJlY29yZC5kYXRhKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBzaG93VmFsaWRhdGlvbk1lc3NhZ2VzRm9Sb2xlRmVhdHVyZXMkOiBPYnNlcnZhYmxlPFxyXG4gICAgQWN0aW9uXHJcbiAgPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxSb2xlc0ZldGNoRmFpbGVkPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Sb2xlc0ZldGNoRmFpbGVkXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG93RXhjZXB0aW9uTWVzc2FnZXMoe1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgLy8gVE9ETzogQ2hhbmdlIHRvIHByb3BlciB0b2FzdCBtZXNzYWdlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgKVxyXG4gICAgKVxyXG4gICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIHNob3dWYWxpZGF0aW9uTWVzc2FnZXNGb3JFbnRpdHlSb2xlcyQ6IE9ic2VydmFibGU8XHJcbiAgICBBY3Rpb25cclxuICA+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEVudGl0eVJvbGVzQnlVc2VySWRGZXRjaEZhaWxlZD4oXHJcbiAgICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuRW50aXR5Um9sZXNCeVVzZXJJZEZldGNoRmFpbGVkXHJcbiAgICApLFxyXG4gICAgc3dpdGNoTWFwKChzZWFyY2hBY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIG9mKG5ldyBTaG93VmFsaWRhdGlvbk1lc3NhZ2VzKHtcclxuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IHNlYXJjaEFjdGlvbi52YWxpZGF0aW9uTWVzc2FnZXNcclxuICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBzaG93VmFsaWRhdGlvbk1lc3NhZ2VzRm9yQ29tcGFueVNldHRpbmdzJDogT2JzZXJ2YWJsZTxcclxuICAgIEFjdGlvblxyXG4gID4gPSB0aGlzLmFjdGlvbnMkLnBpcGUoXHJcbiAgICBvZlR5cGU8R2V0Q29tcGFueVNldHRpbmdzRmFpbGVkPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5HZXRDb21wYW55U2V0dGluZ3NGYWlsZWRcclxuICAgICksXHJcbiAgICBzd2l0Y2hNYXAoKHNlYXJjaEFjdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gb2YobmV3IFNob3dWYWxpZGF0aW9uTWVzc2FnZXMoe1xyXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlczogc2VhcmNoQWN0aW9uLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGRlbW9EYXRhQ2xlYXJFdmVudFRyaWdncmVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPENsZWFyRGVtb0RhdGFUcmlnZ3JlZD4oXHJcbiAgICAgIEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuQ2xlYXJEZW1vRGF0YVRyaWdncmVkXHJcbiAgICApLFxyXG4gICAgc3dpdGNoTWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZVNlcnZpY2UuY2xlYXJEZW1vRGF0YSgpLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiRGVtbyBkYXRhIGNsZWFyZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENsZWFyRGVtb0RhdGFDb21wbGV0ZWQocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IHJlc3BvbnNlLmFwaVJlc3BvbnNlTWVzc2FnZXM7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENsZWFyRGVtb0RhdGFGYWlsZWQocmVzcG9uc2UuYXBpUmVzcG9uc2VNZXNzYWdlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgZ2V0VGhlbWVDb2xvciQ6IE9ic2VydmFibGU8QWN0aW9uPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxHZXRDb21wYW55VGhlbWVUcmlnZ2VyZWQ+KFxyXG4gICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkdldENvbXBhbnlUaGVtZVRyaWdnZXJlZCxcclxuICAgICksXHJcbiAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmdldFRoZW1lcygpLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlUaGVtZSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVRoZW1lQ29tcGxldGVkKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2V0Q29tcGFueVRoZW1lRmFpbGVkKHJlc3BvbnNlLmFwaVJlc3BvbnNlTWVzc2FnZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIEBFZmZlY3QoKVxyXG4gIGRlbW9EYXRhQ2xlYXJFdmVudFN1Y2Nlc3NmdWwkOiBPYnNlcnZhYmxlPFxyXG4gICAgQWN0aW9uXHJcbiAgPiA9IHRoaXMuYWN0aW9ucyQucGlwZShcclxuICAgIG9mVHlwZTxDbGVhckRlbW9EYXRhQ29tcGxldGVkPihcclxuICAgICAgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5DbGVhckRlbW9EYXRhQ29tcGxldGVkXHJcbiAgICApLFxyXG4gICAgcGlwZShcclxuICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IEluaXRpYWxpemVBZnRlckxvZ2luRGF0YSgpO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICk7XHJcblxyXG4gIC8vIEBFZmZlY3QoKVxyXG4gIC8vIGxvYWRHb2FsQW5kVXNlclN0b3J5RGF0YSQ6IE9ic2VydmFibGU8XHJcbiAgLy8gICBBY3Rpb25cclxuICAvLyA+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gIC8vICAgb2ZUeXBlPEVudGl0eVJlb2xlc0J5VXNlcklkRmV0Y2hDb21wbGV0ZWQ+KFxyXG4gIC8vICAgICBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkVudGl0eVJlb2xlc0J5VXNlcklkRmV0Y2hDb21wbGV0ZWRcclxuICAvLyAgICksXHJcbiAgLy8gICBwaXBlKFxyXG4gIC8vICAgICBtYXAoKCkgPT4ge1xyXG4gIC8vICAgICAgIGlmICh0aGlzLmdvYWxJZCkge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIG5ldyBHZXRVbmlxdWVHb2FsQnlJZFRyaWdnZXJlZCh0aGlzLmdvYWxJZCk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGVsc2UgaWYgKHRoaXMudXNlclN0b3J5SWQpIHtcclxuICAvLyAgICAgICAgIGlmICh0aGlzLmlzU3ByaW50VHlwZSkge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gbmV3IEdldFVuaXF1ZVNwcmludFdvcmtJdGVtQnlJZFRyaWdnZXJlZCh0aGlzLnVzZXJTdG9yeUlkKTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybiBuZXcgR2V0VW5pcXVlVXNlclN0b3J5QnlJZFRyaWdnZXJlZCh0aGlzLnVzZXJTdG9yeUlkKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3ByaW50SWQpIHtcclxuICAvLyAgICAgICAgIHJldHVybiBuZXcgR2V0VW5pcXVlU3ByaW50c0J5SWRUcmlnZ2VyZWQodGhpcy5zcHJpbnRJZCk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGVsc2Uge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIG5ldyBBcmNoaXZlVW5BcmNoaXZlR29hbENvbXBsZXRlZCgpO1xyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICApXHJcbiAgLy8gKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgZ2V0VXNlclN0b3JlSWREZXRhaWxzJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkPihBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkKSxcclxuICAgIHN3aXRjaE1hcChzZWFyY2hBY3Rpb24gPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgIC5nZXRTdG9yZXMoc2VhcmNoQWN0aW9uLnNlYXJjaFVzZXJTdG9yZURldGFpbHNNb2RlbClcclxuICAgICAgICAucGlwZShtYXAoKHN0b3JlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoc3RvcmVEYXRhLnN1Y2Nlc3MgPT09IHRydWUpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2V0VXNlclN0b3JlSWRDb21wbGV0ZWQoc3RvcmVEYXRhLmRhdGFbMF0pO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEdldFVzZXJTdG9yZUlkRmFpbGVkKHN0b3JlRGF0YS5hcGlSZXNwb25zZU1lc3NhZ2VzKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEV4Y2VwdGlvbkhhbmRsZWQoZXJyb3IpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgQEVmZmVjdCgpXHJcbiAgc2hvd1ZhbGlkYXRpb25NZXNzYWdlc0ZvckdldFVzZXJTdG9yZUlkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEdldFVzZXJTdG9yZUlkRmFpbGVkPihBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLkdldFVzZXJTdG9yZUlkRmFpbGVkKSxcclxuICAgIHN3aXRjaE1hcChzZWFyY2hBY3Rpb24gPT4ge1xyXG4gICAgICByZXR1cm4gb2YobmV3IFNob3dWYWxpZGF0aW9uTWVzc2FnZXMoe1xyXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlczogc2VhcmNoQWN0aW9uLnZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBARWZmZWN0KClcclxuICBleGNlcHRpb25IYW5kbGVkJDogT2JzZXJ2YWJsZTxBY3Rpb24+ID0gdGhpcy5hY3Rpb25zJC5waXBlKFxyXG4gICAgb2ZUeXBlPEV4Y2VwdGlvbkhhbmRsZWQ+KEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuRXhjZXB0aW9uSGFuZGxlZCksXHJcbiAgICBzd2l0Y2hNYXAoc2VhcmNoQWN0aW9uID0+IHtcclxuICAgICAgcmV0dXJuIG9mKG5ldyBTaG93RXhjZXB0aW9uTWVzc2FnZXMoe1xyXG4gICAgICAgIG1lc3NhZ2U6IHNlYXJjaEFjdGlvbi5lcnJvck1lc3NhZ2UsIC8vIFRPRE86IENoYW5nZSB0byBwcm9wZXIgdG9hc3QgbWVzc2FnZVxyXG4gICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucyxcclxuICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmZWF0dXJlU2VydmljZTogTWVudUl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFdJTkRPVykgcHJpdmF0ZSB3aW5kb3c6IFdpbmRvd1xyXG4gICkgeyB9XHJcbn1cclxuIl19