@sunbird-cb/utils-v2 0.0.2 → 0.0.3-ang-17-20

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 (305) hide show
  1. package/fesm2022/sunbird-cb-utils-v2.mjs +6072 -0
  2. package/fesm2022/sunbird-cb-utils-v2.mjs.map +1 -0
  3. package/index.d.ts +3247 -0
  4. package/package.json +26 -25
  5. package/sunbird-cb-utils-v2-0.0.3-ang-17-20.tgz +0 -0
  6. package/bundles/sunbird-cb-utils-v2.umd.js +0 -7069
  7. package/bundles/sunbird-cb-utils-v2.umd.js.map +0 -1
  8. package/bundles/sunbird-cb-utils-v2.umd.min.js +0 -2
  9. package/bundles/sunbird-cb-utils-v2.umd.min.js.map +0 -1
  10. package/esm2015/lib/components/image-crop/image-crop.component.js +0 -195
  11. package/esm2015/lib/components/image-crop/image-crop.module.js +0 -27
  12. package/esm2015/lib/constants/features.enum.js +0 -555
  13. package/esm2015/lib/constants/instances.enum.js +0 -5
  14. package/esm2015/lib/constants/misc.constants.js +0 -1
  15. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -87
  16. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -15
  17. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +0 -38
  18. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -15
  19. package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +0 -92
  20. package/esm2015/lib/directives/image-responsive/image-responsive.module.js +0 -15
  21. package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +0 -68
  22. package/esm2015/lib/directives/in-view-port/in-view-port.module.js +0 -15
  23. package/esm2015/lib/directives/navigation/navigation.directive.js +0 -39
  24. package/esm2015/lib/directives/navigation/navigation.module.js +0 -15
  25. package/esm2015/lib/directives/permission/permission.directive.js +0 -11
  26. package/esm2015/lib/directives/permission/permission.module.js +0 -15
  27. package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +0 -9
  28. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -99
  29. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -19
  30. package/esm2015/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.component.js +0 -194
  31. package/esm2015/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.module.js +0 -19
  32. package/esm2015/lib/helpers/logout/logout.component.js +0 -90
  33. package/esm2015/lib/helpers/logout/logout.module.js +0 -20
  34. package/esm2015/lib/models/profile-v3.models.js +0 -104
  35. package/esm2015/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.module.js +0 -15
  36. package/esm2015/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.pipe.js +0 -94
  37. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -13
  38. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +0 -59
  39. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -15
  40. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +0 -33
  41. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -15
  42. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +0 -43
  43. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -15
  44. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +0 -79
  45. package/esm2015/lib/pipes/pipe-email/pipe-email.module.js +0 -15
  46. package/esm2015/lib/pipes/pipe-email/pipe-email.pipe.js +0 -12
  47. package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +0 -15
  48. package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +0 -16
  49. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -15
  50. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +0 -38
  51. package/esm2015/lib/pipes/pipe-filter-v2/pipe-filter-v2.module.js +0 -15
  52. package/esm2015/lib/pipes/pipe-filter-v2/pipe-filter-v2.pipe.js +0 -21
  53. package/esm2015/lib/pipes/pipe-filter-v3/pipe-filter-v3.module.js +0 -15
  54. package/esm2015/lib/pipes/pipe-filter-v3/pipe-filter-v3.pipe.js +0 -23
  55. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -15
  56. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +0 -12
  57. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -15
  58. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +0 -25
  59. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -15
  60. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +0 -17
  61. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -15
  62. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +0 -27
  63. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -15
  64. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +0 -16
  65. package/esm2015/lib/pipes/pipe-ordinal/pipe-ordinal.module.js +0 -15
  66. package/esm2015/lib/pipes/pipe-ordinal/pipe-ordinal.pipe.js +0 -17
  67. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -15
  68. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +0 -18
  69. package/esm2015/lib/pipes/pipe-public-URL/pipe-public-URL.module.js +0 -15
  70. package/esm2015/lib/pipes/pipe-public-URL/pipe-public-URL.pipe.js +0 -23
  71. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -15
  72. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +0 -16
  73. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -15
  74. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +0 -35
  75. package/esm2015/lib/resolvers/explore-detail.resolver.js +0 -89
  76. package/esm2015/lib/resolvers/marketing-offering.resolve.js +0 -40
  77. package/esm2015/lib/resolvers/module-name.resolver.js +0 -38
  78. package/esm2015/lib/resolvers/page-name.resolver.js +0 -32
  79. package/esm2015/lib/resolvers/page.constant.js +0 -4
  80. package/esm2015/lib/resolvers/page.model.js +0 -48
  81. package/esm2015/lib/resolvers/page.resolver.js +0 -90
  82. package/esm2015/lib/resolvers/resolver.model.js +0 -6
  83. package/esm2015/lib/services/auth-keycloak.service.js +0 -266
  84. package/esm2015/lib/services/auth-microsoft.service.js +0 -196
  85. package/esm2015/lib/services/card-content.model.js +0 -31
  86. package/esm2015/lib/services/configurations.model.js +0 -548
  87. package/esm2015/lib/services/configurations.service.js +0 -140
  88. package/esm2015/lib/services/content-strip-multiple.model.js +0 -75
  89. package/esm2015/lib/services/event.model.js +0 -258
  90. package/esm2015/lib/services/event.service.js +0 -211
  91. package/esm2015/lib/services/logger.service.js +0 -55
  92. package/esm2015/lib/services/ms-office.model.js +0 -8
  93. package/esm2015/lib/services/multilingual-translations.service.js +0 -136
  94. package/esm2015/lib/services/nps-grid.service.js +0 -45
  95. package/esm2015/lib/services/subapplication-respond.service.js +0 -214
  96. package/esm2015/lib/services/telemetry.service.js +0 -621
  97. package/esm2015/lib/services/user-preference.model.js +0 -38
  98. package/esm2015/lib/services/user-preference.service.js +0 -90
  99. package/esm2015/lib/services/utility.service.js +0 -145
  100. package/esm2015/lib/services/value.service.js +0 -31
  101. package/esm2015/lib/services/widget-content.model.js +0 -373
  102. package/esm2015/lib/services/widget-content.service.js +0 -192
  103. package/esm2015/lib/services/widget-resolver.model.js +0 -57
  104. package/esm2015/lib/services/widget-search.model.js +0 -126
  105. package/esm2015/public-api.js +0 -84
  106. package/esm2015/sunbird-cb-utils-v2.js +0 -10
  107. package/esm5/lib/components/image-crop/image-crop.component.js +0 -200
  108. package/esm5/lib/components/image-crop/image-crop.module.js +0 -31
  109. package/esm5/lib/constants/features.enum.js +0 -555
  110. package/esm5/lib/constants/instances.enum.js +0 -5
  111. package/esm5/lib/constants/misc.constants.js +0 -1
  112. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -105
  113. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -19
  114. package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +0 -40
  115. package/esm5/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -19
  116. package/esm5/lib/directives/image-responsive/image-responsive.directive.js +0 -95
  117. package/esm5/lib/directives/image-responsive/image-responsive.module.js +0 -19
  118. package/esm5/lib/directives/in-view-port/in-view-port.directive.js +0 -73
  119. package/esm5/lib/directives/in-view-port/in-view-port.module.js +0 -19
  120. package/esm5/lib/directives/navigation/navigation.directive.js +0 -41
  121. package/esm5/lib/directives/navigation/navigation.module.js +0 -19
  122. package/esm5/lib/directives/permission/permission.directive.js +0 -14
  123. package/esm5/lib/directives/permission/permission.module.js +0 -19
  124. package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +0 -9
  125. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -103
  126. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -23
  127. package/esm5/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.component.js +0 -199
  128. package/esm5/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.module.js +0 -23
  129. package/esm5/lib/helpers/logout/logout.component.js +0 -96
  130. package/esm5/lib/helpers/logout/logout.module.js +0 -24
  131. package/esm5/lib/models/profile-v3.models.js +0 -104
  132. package/esm5/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.module.js +0 -19
  133. package/esm5/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.pipe.js +0 -96
  134. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -17
  135. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +0 -63
  136. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -19
  137. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +0 -37
  138. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -19
  139. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +0 -45
  140. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -19
  141. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +0 -83
  142. package/esm5/lib/pipes/pipe-email/pipe-email.module.js +0 -19
  143. package/esm5/lib/pipes/pipe-email/pipe-email.pipe.js +0 -16
  144. package/esm5/lib/pipes/pipe-filter/pipe-filter.module.js +0 -19
  145. package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +0 -20
  146. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -19
  147. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +0 -46
  148. package/esm5/lib/pipes/pipe-filter-v2/pipe-filter-v2.module.js +0 -19
  149. package/esm5/lib/pipes/pipe-filter-v2/pipe-filter-v2.pipe.js +0 -25
  150. package/esm5/lib/pipes/pipe-filter-v3/pipe-filter-v3.module.js +0 -19
  151. package/esm5/lib/pipes/pipe-filter-v3/pipe-filter-v3.pipe.js +0 -31
  152. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -19
  153. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +0 -16
  154. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -19
  155. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +0 -30
  156. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -19
  157. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +0 -21
  158. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -19
  159. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +0 -31
  160. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -19
  161. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +0 -18
  162. package/esm5/lib/pipes/pipe-ordinal/pipe-ordinal.module.js +0 -19
  163. package/esm5/lib/pipes/pipe-ordinal/pipe-ordinal.pipe.js +0 -21
  164. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -19
  165. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +0 -34
  166. package/esm5/lib/pipes/pipe-public-URL/pipe-public-URL.module.js +0 -19
  167. package/esm5/lib/pipes/pipe-public-URL/pipe-public-URL.pipe.js +0 -25
  168. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -19
  169. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +0 -20
  170. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -19
  171. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +0 -38
  172. package/esm5/lib/resolvers/explore-detail.resolver.js +0 -93
  173. package/esm5/lib/resolvers/marketing-offering.resolve.js +0 -43
  174. package/esm5/lib/resolvers/module-name.resolver.js +0 -40
  175. package/esm5/lib/resolvers/page-name.resolver.js +0 -35
  176. package/esm5/lib/resolvers/page.constant.js +0 -4
  177. package/esm5/lib/resolvers/page.model.js +0 -48
  178. package/esm5/lib/resolvers/page.resolver.js +0 -98
  179. package/esm5/lib/resolvers/resolver.model.js +0 -6
  180. package/esm5/lib/services/auth-keycloak.service.js +0 -347
  181. package/esm5/lib/services/auth-microsoft.service.js +0 -251
  182. package/esm5/lib/services/card-content.model.js +0 -31
  183. package/esm5/lib/services/configurations.model.js +0 -548
  184. package/esm5/lib/services/configurations.service.js +0 -142
  185. package/esm5/lib/services/content-strip-multiple.model.js +0 -75
  186. package/esm5/lib/services/event.model.js +0 -258
  187. package/esm5/lib/services/event.service.js +0 -215
  188. package/esm5/lib/services/logger.service.js +0 -73
  189. package/esm5/lib/services/ms-office.model.js +0 -8
  190. package/esm5/lib/services/multilingual-translations.service.js +0 -138
  191. package/esm5/lib/services/nps-grid.service.js +0 -47
  192. package/esm5/lib/services/subapplication-respond.service.js +0 -219
  193. package/esm5/lib/services/telemetry.service.js +0 -670
  194. package/esm5/lib/services/user-preference.model.js +0 -38
  195. package/esm5/lib/services/user-preference.service.js +0 -109
  196. package/esm5/lib/services/utility.service.js +0 -178
  197. package/esm5/lib/services/value.service.js +0 -33
  198. package/esm5/lib/services/widget-content.model.js +0 -373
  199. package/esm5/lib/services/widget-content.service.js +0 -214
  200. package/esm5/lib/services/widget-resolver.model.js +0 -57
  201. package/esm5/lib/services/widget-search.model.js +0 -126
  202. package/esm5/public-api.js +0 -84
  203. package/esm5/sunbird-cb-utils-v2.js +0 -10
  204. package/fesm2015/sunbird-cb-utils-v2.js +0 -6281
  205. package/fesm2015/sunbird-cb-utils-v2.js.map +0 -1
  206. package/fesm5/sunbird-cb-utils-v2.js +0 -6776
  207. package/fesm5/sunbird-cb-utils-v2.js.map +0 -1
  208. package/lib/components/image-crop/image-crop.component.d.ts +0 -56
  209. package/lib/components/image-crop/image-crop.module.d.ts +0 -2
  210. package/lib/constants/features.enum.d.ts +0 -553
  211. package/lib/constants/instances.enum.d.ts +0 -3
  212. package/lib/constants/misc.constants.d.ts +0 -2
  213. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +0 -18
  214. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts +0 -2
  215. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +0 -9
  216. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts +0 -2
  217. package/lib/directives/image-responsive/image-responsive.directive.d.ts +0 -17
  218. package/lib/directives/image-responsive/image-responsive.module.d.ts +0 -2
  219. package/lib/directives/in-view-port/in-view-port.directive.d.ts +0 -11
  220. package/lib/directives/in-view-port/in-view-port.module.d.ts +0 -2
  221. package/lib/directives/navigation/navigation.directive.d.ts +0 -9
  222. package/lib/directives/navigation/navigation.module.d.ts +0 -2
  223. package/lib/directives/permission/permission.directive.d.ts +0 -3
  224. package/lib/directives/permission/permission.module.d.ts +0 -2
  225. package/lib/helpers/functions/getStringifiedQueryParams.d.ts +0 -3
  226. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +0 -18
  227. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +0 -2
  228. package/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.component.d.ts +0 -36
  229. package/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.module.d.ts +0 -2
  230. package/lib/helpers/logout/logout.component.d.ts +0 -20
  231. package/lib/helpers/logout/logout.module.d.ts +0 -2
  232. package/lib/models/profile-v3.models.d.ts +0 -91
  233. package/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.module.d.ts +0 -2
  234. package/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.pipe.d.ts +0 -6
  235. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts +0 -2
  236. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +0 -10
  237. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts +0 -2
  238. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +0 -4
  239. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts +0 -2
  240. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +0 -13
  241. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +0 -2
  242. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +0 -6
  243. package/lib/pipes/pipe-email/pipe-email.module.d.ts +0 -2
  244. package/lib/pipes/pipe-email/pipe-email.pipe.d.ts +0 -4
  245. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts +0 -2
  246. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +0 -4
  247. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts +0 -2
  248. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +0 -4
  249. package/lib/pipes/pipe-filter-v2/pipe-filter-v2.module.d.ts +0 -2
  250. package/lib/pipes/pipe-filter-v2/pipe-filter-v2.pipe.d.ts +0 -4
  251. package/lib/pipes/pipe-filter-v3/pipe-filter-v3.module.d.ts +0 -2
  252. package/lib/pipes/pipe-filter-v3/pipe-filter-v3.pipe.d.ts +0 -4
  253. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts +0 -2
  254. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +0 -4
  255. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts +0 -2
  256. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +0 -4
  257. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts +0 -2
  258. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +0 -4
  259. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts +0 -2
  260. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +0 -9
  261. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts +0 -2
  262. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +0 -9
  263. package/lib/pipes/pipe-ordinal/pipe-ordinal.module.d.ts +0 -2
  264. package/lib/pipes/pipe-ordinal/pipe-ordinal.pipe.d.ts +0 -4
  265. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts +0 -2
  266. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +0 -4
  267. package/lib/pipes/pipe-public-URL/pipe-public-URL.module.d.ts +0 -2
  268. package/lib/pipes/pipe-public-URL/pipe-public-URL.pipe.d.ts +0 -6
  269. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts +0 -2
  270. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +0 -4
  271. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts +0 -2
  272. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +0 -7
  273. package/lib/resolvers/explore-detail.resolver.d.ts +0 -16
  274. package/lib/resolvers/marketing-offering.resolve.d.ts +0 -10
  275. package/lib/resolvers/module-name.resolver.d.ts +0 -6
  276. package/lib/resolvers/page-name.resolver.d.ts +0 -5
  277. package/lib/resolvers/page.constant.d.ts +0 -1
  278. package/lib/resolvers/page.model.d.ts +0 -41
  279. package/lib/resolvers/page.resolver.d.ts +0 -17
  280. package/lib/resolvers/resolver.model.d.ts +0 -4
  281. package/lib/services/auth-keycloak.service.d.ts +0 -31
  282. package/lib/services/auth-microsoft.service.d.ts +0 -30
  283. package/lib/services/card-content.model.d.ts +0 -29
  284. package/lib/services/configurations.model.d.ts +0 -521
  285. package/lib/services/configurations.service.d.ts +0 -73
  286. package/lib/services/content-strip-multiple.model.d.ts +0 -79
  287. package/lib/services/event.model.d.ts +0 -221
  288. package/lib/services/event.service.d.ts +0 -30
  289. package/lib/services/logger.service.d.ts +0 -15
  290. package/lib/services/ms-office.model.d.ts +0 -6
  291. package/lib/services/multilingual-translations.service.d.ts +0 -20
  292. package/lib/services/nps-grid.service.d.ts +0 -12
  293. package/lib/services/subapplication-respond.service.d.ts +0 -23
  294. package/lib/services/telemetry.service.d.ts +0 -56
  295. package/lib/services/user-preference.model.d.ts +0 -34
  296. package/lib/services/user-preference.service.d.ts +0 -11
  297. package/lib/services/utility.service.d.ts +0 -31
  298. package/lib/services/value.service.d.ts +0 -8
  299. package/lib/services/widget-content.model.d.ts +0 -344
  300. package/lib/services/widget-content.service.d.ts +0 -47
  301. package/lib/services/widget-resolver.model.d.ts +0 -48
  302. package/lib/services/widget-search.model.d.ts +0 -114
  303. package/public-api.d.ts +0 -83
  304. package/sunbird-cb-utils-v2.d.ts +0 -9
  305. package/sunbird-cb-utils-v2.metadata.json +0 -1
@@ -1,670 +0,0 @@
1
- import * as tslib_1 from "tslib";
2
- import { Inject, Injectable } from '@angular/core';
3
- import { filter } from 'rxjs/operators';
4
- import { ConfigurationsService } from './configurations.service';
5
- import { WsEvents } from './event.model';
6
- import { EventService } from './event.service';
7
- import { LoggerService } from './logger.service';
8
- import { Router, NavigationStart } from '@angular/router';
9
- import { NPSGridService } from './nps-grid.service';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./configurations.service";
12
- import * as i2 from "./event.service";
13
- import * as i3 from "./logger.service";
14
- import * as i4 from "@angular/router";
15
- import * as i5 from "./nps-grid.service";
16
- var TelemetryService = (function () {
17
- function TelemetryService(configSvc, eventsSvc, environment, logger, router, npsSvc) {
18
- this.configSvc = configSvc;
19
- this.eventsSvc = eventsSvc;
20
- this.logger = logger;
21
- this.router = router;
22
- this.npsSvc = npsSvc;
23
- this.previousUrl = null;
24
- this.telemetryConfig = null;
25
- this.pData = null;
26
- this.contextCdata = [];
27
- this.isAnonymousTelemetry = true;
28
- this.telArray = [];
29
- this.externalApps = {
30
- RBCP: 'rbcp-web-ui',
31
- };
32
- this.environment = environment;
33
- var instanceConfig = this.configSvc.instanceConfig;
34
- this.navigationStart();
35
- this.initializeConfig(instanceConfig);
36
- this.addPlayerListener();
37
- this.addCustomEventListener();
38
- this.addInteractListener();
39
- this.addFeedbackListener();
40
- this.addTimeSpentListener();
41
- this.addSearchListener();
42
- this.addHearbeatListener();
43
- this.addCustomImpressionListener();
44
- this.addCustomListener();
45
- this.addCustomListenerForGetStart();
46
- this.addCustomListenerForPlatformRating();
47
- }
48
- TelemetryService.prototype.navigationStart = function () {
49
- var _this = this;
50
- this.router.events.subscribe((function (event) {
51
- if (event instanceof NavigationStart) {
52
- if (event.url.includes('/public/') || event.url.includes('&preview=true') || event.url.includes('/certs')) {
53
- _this.isAnonymousTelemetry = true;
54
- _this.updateTelemetryConfig();
55
- var instanceConfig = _this.configSvc.instanceConfig;
56
- _this.initializeConfig(instanceConfig);
57
- }
58
- }
59
- }));
60
- };
61
- Object.defineProperty(TelemetryService.prototype, "isAnonymousTelemetryRequired", {
62
- get: function () {
63
- return this.isAnonymousTelemetry;
64
- },
65
- enumerable: true,
66
- configurable: true
67
- });
68
- TelemetryService.prototype.updateTelemetryConfig = function () {
69
- if (this.configSvc.instanceConfig && this.configSvc.instanceConfig.telemetryConfig) {
70
- if (this.isAnonymousTelemetryRequired) {
71
- this.configSvc.instanceConfig.telemetryConfig.endpoint = this.configSvc.instanceConfig.telemetryConfig.publicEndpoint;
72
- }
73
- else {
74
- this.configSvc.instanceConfig.telemetryConfig.endpoint = this.configSvc.instanceConfig.telemetryConfig.protectedEndpoint;
75
- }
76
- }
77
- };
78
- TelemetryService.prototype.initializeConfig = function (instanceConfig) {
79
- if (instanceConfig) {
80
- this.telemetryConfig = instanceConfig.telemetryConfig;
81
- this.telemetryConfig = tslib_1.__assign({}, this.telemetryConfig, { pdata: tslib_1.__assign({}, this.telemetryConfig.pdata, { id: this.environment.name + "." + this.telemetryConfig.pdata.id }), uid: (this.configSvc.userProfile && this.configSvc.userProfile.userId) ?
82
- this.configSvc.userProfile.userId : '', channel: this.rootOrgId || this.telemetryConfig.channel, sid: this.getTelemetrySessionId });
83
- this.pData = this.telemetryConfig.pdata;
84
- }
85
- };
86
- Object.defineProperty(TelemetryService.prototype, "getTelemetrySessionId", {
87
- get: function () {
88
- return localStorage.getItem('telemetrySessionId') || '';
89
- },
90
- enumerable: true,
91
- configurable: true
92
- });
93
- Object.defineProperty(TelemetryService.prototype, "rootOrgId", {
94
- get: function () {
95
- if (this.configSvc && this.configSvc.userProfile && this.configSvc.userProfile.rootOrgId) {
96
- return this.configSvc.userProfile.rootOrgId;
97
- }
98
- return '';
99
- },
100
- enumerable: true,
101
- configurable: true
102
- });
103
- TelemetryService.prototype.triggerNPSUpdate = function (data) {
104
- this.telArray.push(data);
105
- if (this.telArray && this.telArray.length === 4) {
106
- if (localStorage.getItem('ratingformID')) {
107
- this.telArray = [];
108
- this.npsSvc.updateTelemetryData(true);
109
- }
110
- }
111
- };
112
- TelemetryService.prototype.start = function (edata, data, pageContext) {
113
- try {
114
- if (this.telemetryConfig) {
115
- $t.start(this.telemetryConfig, (pageContext && pageContext.pageId) ?
116
- pageContext.pageId
117
- : '', '1.0', {
118
- type: edata.type,
119
- mode: edata.mode,
120
- pageid: (pageContext && pageContext.pageId) ?
121
- pageContext.pageId
122
- : '',
123
- duration: 1,
124
- }, {
125
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)),
126
- object: tslib_1.__assign({}, (data) && data),
127
- });
128
- }
129
- else {
130
- this.logger.error('Error Initializing Telemetry. Config missing.');
131
- }
132
- }
133
- catch (e) {
134
- console.log('Error in telemetry start', e);
135
- }
136
- };
137
- TelemetryService.prototype.end = function (edata, data, pageContext) {
138
- try {
139
- $t.end({
140
- type: edata.type,
141
- mode: edata.mode,
142
- pageid: (pageContext && pageContext.pageId) ?
143
- pageContext.pageId
144
- : '',
145
- }, {
146
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)),
147
- object: tslib_1.__assign({}, (data) && data),
148
- });
149
- }
150
- catch (e) {
151
- console.log('Error in telemetry end', e);
152
- }
153
- };
154
- TelemetryService.prototype.audit = function (type, props, data) {
155
- try {
156
- $t.audit({
157
- type: type,
158
- props: props,
159
- state: data,
160
- prevstate: '',
161
- duration: '',
162
- }, {
163
- context: {
164
- pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
165
- },
166
- });
167
- }
168
- catch (e) {
169
- console.log('Error in telemetry audit', e);
170
- }
171
- };
172
- TelemetryService.prototype.heartbeat = function (type, id) {
173
- try {
174
- $t.heartbeat({
175
- id: id,
176
- type: type,
177
- });
178
- }
179
- catch (e) {
180
- console.log('Error in telemetry heartbeat', e);
181
- }
182
- };
183
- TelemetryService.prototype.impression = function (data, objectType) {
184
- this.triggerNPSUpdate(data);
185
- try {
186
- var page = this.getPageDetails();
187
- if (data && data.pageContext) {
188
- page.pageid = data.pageContext.pageId;
189
- page.module = data.pageContext.module;
190
- }
191
- var edata = {
192
- pageid: page.pageid,
193
- type: page.pageUrlParts[0],
194
- uri: page.pageUrl,
195
- };
196
- if (page.objectId) {
197
- var config = {
198
- context: {
199
- pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
200
- env: page.module || (this.telemetryConfig && this.telemetryConfig.env),
201
- },
202
- object: tslib_1.__assign({ id: page.objectId, type: objectType }, (data && data.object)),
203
- };
204
- if (!page.objectId || !objectType) {
205
- config.object = {};
206
- }
207
- $t.impression(edata, config);
208
- }
209
- else {
210
- $t.impression(edata, {
211
- context: {
212
- pdata: tslib_1.__assign({}, this.pData, { id: this.pData && this.pData.id }),
213
- env: page.module || '',
214
- },
215
- object: tslib_1.__assign({}, (data && data.object)),
216
- });
217
- }
218
- this.previousUrl = page.pageUrl;
219
- }
220
- catch (e) {
221
- console.log('Error in telemetry impression', e);
222
- }
223
- };
224
- TelemetryService.prototype.externalImpression = function (impressionData) {
225
- try {
226
- var page = this.getPageDetails();
227
- if (this.externalApps[impressionData.subApplicationName]) {
228
- var externalConfig = page.objectId ? {
229
- context: {
230
- pdata: tslib_1.__assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
231
- },
232
- object: {
233
- id: page.objectId,
234
- },
235
- } : {
236
- context: {
237
- pdata: tslib_1.__assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
238
- },
239
- };
240
- $t.impression(impressionData.data, externalConfig);
241
- }
242
- }
243
- catch (e) {
244
- console.log('Error in telemetry externalImpression', e);
245
- }
246
- };
247
- TelemetryService.prototype.addCustomListenerForPlatformRating = function () {
248
- var _this = this;
249
- this.eventsSvc.getPREvents$
250
- .pipe(filter((function (event) {
251
- return event &&
252
- event.eventType === WsEvents.WsEventType.Telemetry &&
253
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.PlatformRating &&
254
- event.data.mode &&
255
- event.data;
256
- })))
257
- .subscribe((function (event) {
258
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
259
- _this.start({
260
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
261
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
262
- }, {}, event.pageContext);
263
- }
264
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
265
- _this.end({
266
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
267
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
268
- }, event.data.object, event.pageContext);
269
- }
270
- if (event.data.state === WsEvents.EnumTelemetrySubType.Interact) {
271
- $t.interact({
272
- type: event.data.edata.type,
273
- subtype: event.data.edata.subType,
274
- id: (event.data.edata && event.data.edata.id) ?
275
- event.data.edata.id
276
- : '',
277
- pageid: event.pageContext && event.pageContext.pageId || '',
278
- }, {
279
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
280
- object: tslib_1.__assign({}, event.data.object),
281
- });
282
- }
283
- }));
284
- };
285
- TelemetryService.prototype.addCustomListenerForGetStart = function () {
286
- var _this = this;
287
- this.eventsSvc.getStartEvents$
288
- .pipe(filter((function (event) {
289
- return event &&
290
- event.eventType === WsEvents.WsEventType.Telemetry &&
291
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.GetStarted &&
292
- event.data.mode &&
293
- event.data;
294
- })))
295
- .subscribe((function (event) {
296
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
297
- _this.start({
298
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
299
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
300
- }, {}, event.pageContext);
301
- }
302
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
303
- _this.end({
304
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
305
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
306
- }, event.data.object, event.pageContext);
307
- }
308
- if (event.data.state === WsEvents.EnumTelemetrySubType.Interact) {
309
- $t.interact({
310
- type: event.data.edata.type,
311
- subtype: event.data.edata.subType,
312
- id: (event.data.edata && event.data.edata.id) ?
313
- event.data.edata.id
314
- : '',
315
- pageid: event.pageContext && event.pageContext.pageId || '',
316
- }, {
317
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
318
- object: tslib_1.__assign({}, event.data.object),
319
- });
320
- }
321
- }));
322
- };
323
- TelemetryService.prototype.addCustomListener = function () {
324
- var _this = this;
325
- this.eventsSvc.chatbotEvents$
326
- .pipe(filter((function (event) {
327
- return event &&
328
- event.eventType === WsEvents.WsEventType.Telemetry &&
329
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.Chatbot &&
330
- event.data.mode &&
331
- event.data;
332
- })))
333
- .subscribe((function (event) {
334
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
335
- _this.start({
336
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
337
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
338
- }, {}, event.pageContext);
339
- }
340
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
341
- _this.end({
342
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
343
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
344
- }, {}, event.pageContext);
345
- }
346
- if (event.data.state === WsEvents.EnumTelemetrySubType.Interact) {
347
- $t.interact({
348
- type: event.data.edata.type,
349
- subtype: event.data.edata.subType,
350
- id: (event.data.edata && event.data.edata.id) ?
351
- event.data.edata.id
352
- : '',
353
- pageid: event.pageContext && event.pageContext.pageId || '',
354
- }, {
355
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
356
- object: tslib_1.__assign({}, event.data.object),
357
- });
358
- }
359
- }));
360
- };
361
- TelemetryService.prototype.addCustomImpressionListener = function () {
362
- var _this = this;
363
- this.eventsSvc.events$
364
- .pipe(filter((function (event) {
365
- return event &&
366
- event.data &&
367
- event.eventType === WsEvents.WsEventType.Telemetry &&
368
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.Impression;
369
- })))
370
- .subscribe((function (event) {
371
- try {
372
- _this.impression(event.data);
373
- }
374
- catch (e) {
375
- console.log('Error in telemetry impression', e);
376
- }
377
- }));
378
- };
379
- TelemetryService.prototype.addTimeSpentListener = function () {
380
- var _this = this;
381
- this.eventsSvc.events$
382
- .pipe(filter((function (event) {
383
- return event &&
384
- event.eventType === WsEvents.WsEventType.Telemetry &&
385
- event.data.type === WsEvents.WsTimeSpentType.Page &&
386
- event.data.mode &&
387
- event.data;
388
- })))
389
- .subscribe((function (event) {
390
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
391
- _this.start({
392
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
393
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
394
- }, {}, event.pageContext);
395
- }
396
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
397
- _this.end({
398
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
399
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
400
- }, {}, event.pageContext);
401
- }
402
- }));
403
- };
404
- TelemetryService.prototype.addCustomEventListener = function () {
405
- var _this = this;
406
- this.eventsSvc.events$
407
- .pipe(filter((function (event) {
408
- return event &&
409
- event.eventType === WsEvents.WsEventType.Telemetry;
410
- })))
411
- .subscribe((function (event) {
412
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
413
- event.data.type !== WsEvents.WsTimeSpentType.Player) {
414
- _this.start({
415
- type: event.data.type,
416
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
417
- }, event.data.object, event.pageContext);
418
- }
419
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
420
- event.data.type !== WsEvents.WsTimeSpentType.Player) {
421
- _this.end({
422
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
423
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
424
- }, event.data.object, event.pageContext);
425
- }
426
- }));
427
- };
428
- TelemetryService.prototype.addPlayerListener = function () {
429
- var _this = this;
430
- this.eventsSvc.events$
431
- .pipe(filter((function (event) {
432
- return event &&
433
- event.eventType === WsEvents.WsEventType.Telemetry &&
434
- event.data.type === WsEvents.WsTimeSpentType.Player &&
435
- event.data.mode &&
436
- event.data;
437
- })))
438
- .subscribe((function (event) {
439
- var content = event.data.content;
440
- if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
441
- (!content ||
442
- (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
443
- (content.isIframeSupported || '').toLowerCase() === 'yes' ||
444
- (content.mimeType === 'application/pdf' || 'application/json'))) {
445
- _this.start({
446
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
447
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
448
- }, event.data.object, event.pageContext);
449
- }
450
- if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
451
- (!content ||
452
- (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
453
- (content.isIframeSupported || '').toLowerCase() === 'yes' ||
454
- (content.mimeType === 'application/pdf' || 'application/json'))) {
455
- _this.end({
456
- type: event.data.type || WsEvents.WsTimeSpentType.Player,
457
- mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
458
- }, event.data.object, event.pageContext);
459
- }
460
- }));
461
- };
462
- TelemetryService.prototype.addInteractListener = function () {
463
- var _this = this;
464
- var data = this.getPageDetails();
465
- this.triggerNPSUpdate(data.pageid);
466
- this.eventsSvc.events$
467
- .pipe(filter((function (event) {
468
- return event &&
469
- event.data &&
470
- event.eventType === WsEvents.WsEventType.Telemetry &&
471
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact;
472
- })))
473
- .subscribe((function (event) {
474
- var page = _this.getPageDetails();
475
- if (typeof event.from === 'string' && _this.externalApps[event.from]) {
476
- var externalConfig = {
477
- context: {
478
- pdata: tslib_1.__assign({}, _this.pData, { id: _this.externalApps[event.from] }),
479
- },
480
- };
481
- try {
482
- $t.interact(event.data, externalConfig);
483
- }
484
- catch (e) {
485
- console.log('Error in telemetry interact', e);
486
- }
487
- }
488
- else {
489
- try {
490
- $t.interact({
491
- type: event.data.edata.type,
492
- subtype: event.data.edata.subType,
493
- id: (event.data.edata && event.data.edata.id) ?
494
- event.data.edata.id
495
- : '',
496
- pageid: event.data.pageContext && event.data.pageContext.pageId || page.pageid,
497
- }, {
498
- context: tslib_1.__assign({ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
499
- object: tslib_1.__assign({}, event.data.object),
500
- });
501
- }
502
- catch (e) {
503
- console.log('Error in telemetry interact', e);
504
- }
505
- }
506
- }));
507
- };
508
- TelemetryService.prototype.addFeedbackListener = function () {
509
- var _this = this;
510
- this.eventsSvc.events$
511
- .pipe(filter((function (event) {
512
- return event &&
513
- event.data &&
514
- event.eventType === WsEvents.WsEventType.Telemetry &&
515
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback;
516
- })))
517
- .subscribe((function (event) {
518
- var page = _this.getPageDetails();
519
- try {
520
- $t.feedback({
521
- rating: event.data.object.rating || 0,
522
- commentid: event.data.object.commentid || '',
523
- commenttxt: event.data.object.commenttxt || '',
524
- pageid: page.pageid,
525
- }, {
526
- context: {
527
- pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
528
- },
529
- object: {
530
- id: event.data.object.contentId || event.data.object.id || '',
531
- type: event.data.edata.type || '',
532
- ver: "" + (event.data.object.version || '1') + '',
533
- rollup: {},
534
- },
535
- });
536
- }
537
- catch (e) {
538
- console.log('Error in telemetry interact', e);
539
- }
540
- }));
541
- };
542
- TelemetryService.prototype.addHearbeatListener = function () {
543
- var _this = this;
544
- this.eventsSvc.events$
545
- .pipe(filter((function (event) {
546
- return event &&
547
- event.data &&
548
- event.eventType === WsEvents.WsEventType.Telemetry &&
549
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat;
550
- })))
551
- .subscribe((function (event) {
552
- if (typeof event.from === 'string' && _this.externalApps[event.from]) {
553
- var externalConfig = {
554
- context: {
555
- pdata: tslib_1.__assign({}, _this.pData, { id: _this.externalApps[event.from] }),
556
- },
557
- };
558
- try {
559
- $t.heartbeat(event.data, externalConfig);
560
- }
561
- catch (e) {
562
- console.log('Error in telemetry heartbeat', e);
563
- }
564
- }
565
- else {
566
- try {
567
- $t.heartbeat({
568
- type: event.data.type,
569
- id: event.data.id,
570
- }, {
571
- context: {
572
- pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
573
- },
574
- });
575
- }
576
- catch (e) {
577
- console.log('Error in telemetry heartbeat', e);
578
- }
579
- }
580
- }));
581
- };
582
- TelemetryService.prototype.addSearchListener = function () {
583
- var _this = this;
584
- this.eventsSvc.events$
585
- .pipe(filter((function (event) {
586
- return event &&
587
- event.data &&
588
- event.eventType === WsEvents.WsEventType.Telemetry &&
589
- event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search;
590
- })))
591
- .subscribe((function (event) {
592
- try {
593
- $t.search({
594
- query: event.data.query,
595
- filters: event.data.filters,
596
- size: event.data.size,
597
- }, {
598
- context: {
599
- pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
600
- },
601
- });
602
- }
603
- catch (e) {
604
- console.log('Error in telemetry search', e);
605
- }
606
- }));
607
- };
608
- TelemetryService.prototype.getPageDetails = function () {
609
- var path = window.location.pathname.replace('/', '');
610
- var url = path + window.location.search;
611
- var moduleValue = '';
612
- if (path.includes('discussion-forum')) {
613
- moduleValue = 'Discuss';
614
- }
615
- return {
616
- pageid: path,
617
- pageUrl: url,
618
- pageUrlParts: path.split('/'),
619
- refferUrl: this.previousUrl,
620
- objectId: this.extractContentIdFromUrlParts(path.split('/')),
621
- module: moduleValue,
622
- };
623
- };
624
- TelemetryService.prototype.extractContentIdFromUrlParts = function (urlParts) {
625
- var tocIdx = urlParts.indexOf('toc');
626
- var viewerIdx = urlParts.indexOf('viewer');
627
- if (tocIdx === -1 && viewerIdx === -1) {
628
- return null;
629
- }
630
- if (tocIdx !== -1 && tocIdx < urlParts.length - 1) {
631
- return urlParts[tocIdx + 1];
632
- }
633
- if (viewerIdx !== -1 && viewerIdx < urlParts.length - 2) {
634
- return urlParts[viewerIdx + 2];
635
- }
636
- return null;
637
- };
638
- TelemetryService.decorators = [
639
- { type: Injectable, args: [{
640
- providedIn: 'root',
641
- },] }
642
- ];
643
- TelemetryService.ctorParameters = function () { return [
644
- { type: ConfigurationsService },
645
- { type: EventService },
646
- { type: undefined, decorators: [{ type: Inject, args: ['environment',] }] },
647
- { type: LoggerService },
648
- { type: Router },
649
- { type: NPSGridService }
650
- ]; };
651
- /** @nocollapse */ TelemetryService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function TelemetryService_Factory() { return new TelemetryService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.EventService), i0.ɵɵinject("environment"), i0.ɵɵinject(i3.LoggerService), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.NPSGridService)); }, token: TelemetryService, providedIn: "root" });
652
- return TelemetryService;
653
- }());
654
- export { TelemetryService };
655
- if (false) {
656
- TelemetryService.prototype.previousUrl;
657
- TelemetryService.prototype.telemetryConfig;
658
- TelemetryService.prototype.pData;
659
- TelemetryService.prototype.contextCdata;
660
- TelemetryService.prototype.isAnonymousTelemetry;
661
- TelemetryService.prototype.telArray;
662
- TelemetryService.prototype.externalApps;
663
- TelemetryService.prototype.environment;
664
- TelemetryService.prototype.configSvc;
665
- TelemetryService.prototype.eventsSvc;
666
- TelemetryService.prototype.logger;
667
- TelemetryService.prototype.router;
668
- TelemetryService.prototype.npsSvc;
669
- }
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy12Mi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBR3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTs7Ozs7OztBQUluRDtJQWNFLDBCQUNVLFNBQWdDLEVBQ2hDLFNBQXVCLEVBQ1IsV0FBZ0IsRUFFL0IsTUFBcUIsRUFDckIsTUFBYyxFQUNkLE1BQXNCO1FBTnRCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFHdkIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFqQmhDLGdCQUFXLEdBQWtCLElBQUksQ0FBQTtRQUNqQyxvQkFBZSxHQUE2QyxJQUFJLENBQUE7UUFDaEUsVUFBSyxHQUFRLElBQUksQ0FBQTtRQUNqQixpQkFBWSxHQUFHLEVBQUUsQ0FBQTtRQUNqQix5QkFBb0IsR0FBRyxJQUFJLENBQUE7UUFDM0IsYUFBUSxHQUFRLEVBQUUsQ0FBQTtR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QUVkLHFDQUF3QztJQUN4QyxxQ0FBK0I7SUFHL0Isa0NBQTZCO0lBQzdCLGtDQUFzQjtJQUN0QixrQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuLy8gaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBXc0V2ZW50cyB9IGZyb20gJy4vZXZlbnQubW9kZWwnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBOUFNHcmlkU2VydmljZSB9IGZyb20gJy4vbnBzLWdyaWQuc2VydmljZSdcclxuXHJcbmRlY2xhcmUgdmFyICR0OiBhbnlcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcclxuICBwcmV2aW91c1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICB0ZWxlbWV0cnlDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSVRlbGVtZXRyeUNvbmZpZyB8IG51bGwgPSBudWxsXHJcbiAgcERhdGE6IGFueSA9IG51bGxcclxuICBjb250ZXh0Q2RhdGEgPSBbXVxyXG4gIGlzQW5vbnltb3VzVGVsZW1ldHJ5ID0gdHJ1ZVxyXG4gIHRlbEFycmF5OiBhbnkgPSBbXVxyXG4gIGV4dGVybmFsQXBwczogYW55ID0ge1xyXG4gICAgUkJDUDogJ3JiY3Atd2ViLXVpJyxcclxuICB9XHJcbiAgZW52aXJvbm1lbnQ6IGFueVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRzU3ZjOiBFdmVudFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXHJcbiAgICAvLyBwcml2YXRlIGF1dGhTdmM6IEF1dGhLZXljbG9ha1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG5wc1N2YzogTlBTR3JpZFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0KClcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZyhpbnN0YW5jZUNvbmZpZylcclxuICAgIHRoaXMuYWRkUGxheWVyTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRDdXN0b21FdmVudExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkSW50ZXJhY3RMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEZlZWRiYWNrTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRUaW1lU3BlbnRMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZFNlYXJjaExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkSGVhcmJlYXRMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUltcHJlc3Npb25MaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUxpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkQ3VzdG9tTGlzdGVuZXJGb3JHZXRTdGFydCgpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUxpc3RlbmVyRm9yUGxhdGZvcm1SYXRpbmcoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uU3RhcnQoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xyXG4gICAgICAgIGlmIChldmVudC51cmwuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgZXZlbnQudXJsLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJykgfHwgZXZlbnQudXJsLmluY2x1ZGVzKCcvY2VydHMnKSkge1xyXG4gICAgICAgICAgdGhpcy5pc0Fub255bW91c1RlbGVtZXRyeSA9IHRydWVcclxuICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5Q29uZmlnKClcclxuICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZyhpbnN0YW5jZUNvbmZpZylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbm9ueW1vdXNUZWxlbWV0cnlSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzQW5vbnltb3VzVGVsZW1ldHJ5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeUNvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBbm9ueW1vdXNUZWxlbWV0cnlSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5lbmRwb2ludCA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5wdWJsaWNFbmRwb2ludFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5lbmRwb2ludCA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5wcm90ZWN0ZWRFbmRwb2ludFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVDb25maWcoaW5zdGFuY2VDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSUNvbmZpZyB8IG51bGwpIHtcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IGluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZ1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLnRlbGVtZXRyeUNvbmZpZyxcclxuICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEsXHJcbiAgICAgICAgICAvLyBwaWQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgICAgICBpZDogYCR7dGhpcy5lbnZpcm9ubWVudC5uYW1lfS4ke3RoaXMudGVsZW1ldHJ5Q29uZmlnLnBkYXRhLmlkfWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB1aWQ6ICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQpID9cclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQgOiAnJyxcclxuICAgICAgICAvLyBhdXRodG9rZW46IHRoaXMuYXV0aFN2Yy50b2tlbixcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGNoYW5uZWw6IHRoaXMucm9vdE9yZ0lkIHx8IHRoaXMudGVsZW1ldHJ5Q29uZmlnLmNoYW5uZWwsXHJcbiAgICAgICAgc2lkOiB0aGlzLmdldFRlbGVtZXRyeVNlc3Npb25JZCxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBEYXRhID0gdGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRUZWxlbWV0cnlTZXNzaW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsZW1ldHJ5U2Vzc2lvbklkJykgfHwgJydcclxuICB9XHJcblxyXG4gIGdldCByb290T3JnSWQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2YyAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTlBTVXBkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy50ZWxBcnJheS5wdXNoKGRhdGEpXHJcbiAgICBpZiAodGhpcy50ZWxBcnJheSAmJiB0aGlzLnRlbEFycmF5Lmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JhdGluZ2Zvcm1JRCcpKSB7XHJcbiAgICAgICAgdGhpcy50ZWxBcnJheSA9IFtdXHJcbiAgICAgICAgdGhpcy5ucHNTdmMudXBkYXRlVGVsZW1ldHJ5RGF0YSh0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydChlZGF0YTogYW55LCBkYXRhOiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgICAkdC5zdGFydChcclxuICAgICAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnLFxyXG4gICAgICAgICAgKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0LnBhZ2VJZCkgP1xyXG4gICAgICAgICAgICBwYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICcxLjAnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBpZCxcclxuICAgICAgICAgICAgdHlwZTogZWRhdGEudHlwZSxcclxuICAgICAgICAgICAgbW9kZTogZWRhdGEubW9kZSxcclxuICAgICAgICAgICAgcGFnZWlkOiAocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQucGFnZUlkKSA/XHJcbiAgICAgICAgICAgICAgcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIC4uLihwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogcGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgLi4uKGRhdGEpICYmIGRhdGEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBJbml0aWFsaXppbmcgVGVsZW1ldHJ5LiBDb25maWcgbWlzc2luZy4nKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IHN0YXJ0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuZChlZGF0YTogYW55LCBkYXRhOiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5lbmQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogZWRhdGEudHlwZSxcclxuICAgICAgICAgIG1vZGU6IGVkYXRhLm1vZGUsXHJcbiAgICAgICAgICBwYWdlaWQ6IChwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5wYWdlSWQpID9cclxuICAgICAgICAgICAgcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBwYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAuLi4oZGF0YSkgJiYgZGF0YSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBlbmQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaXQodHlwZTogc3RyaW5nLCBwcm9wczogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICR0LmF1ZGl0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBwcm9wcyxcclxuICAgICAgICAgIC8vIGRhdGEsXHJcbiAgICAgICAgICBzdGF0ZTogZGF0YSwgLy8gT3B0aW9uYWwuIEN1cnJlbnQgU3RhdGVcclxuICAgICAgICAgIHByZXZzdGF0ZTogJycsIC8vIE9wdGlvbmFsLiBQcmV2aW91cyBTdGF0ZVxyXG4gICAgICAgICAgZHVyYXRpb246ICcnLCAvLyBPcHRpb25hbC5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGF1ZGl0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhlYXJ0YmVhdCh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICR0LmhlYXJ0YmVhdCh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgLy8gbW9kZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICB9KVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBoZWFydGJlYXQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW1wcmVzc2lvbihkYXRhPzogYW55LCBvYmplY3RUeXBlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoZGF0YSlcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wYWdlQ29udGV4dCkge1xyXG4gICAgICAgIHBhZ2UucGFnZWlkID0gZGF0YS5wYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgICBwYWdlLm1vZHVsZSA9IGRhdGEucGFnZUNvbnRleHQubW9kdWxlXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZWRhdGEgPSB7XHJcbiAgICAgICAgcGFnZWlkOiBwYWdlLnBhZ2VpZCwgLy8gUmVxdWlyZWQuIFVuaXF1ZSBwYWdlIGlkXHJcbiAgICAgICAgdHlwZTogcGFnZS5wYWdlVXJsUGFydHNbMF0sIC8vIFJlcXVpcmVkLiBJbXByZXNzaW9uIHR5cGUgKGxpc3QsIGRldGFpbCwgdmlldywgZWRpdCwgd29ya2Zsb3csIHNlYXJjaClcclxuICAgICAgICB1cmk6IHBhZ2UucGFnZVVybCxcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFnZS5vYmplY3RJZCkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlIHx8ICh0aGlzLnRlbGVtZXRyeUNvbmZpZyAmJiB0aGlzLnRlbGVtZXRyeUNvbmZpZy5lbnYpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICBpZDogcGFnZS5vYmplY3RJZCxcclxuICAgICAgICAgICAgdHlwZTogb2JqZWN0VHlwZSxcclxuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGFib3ZlIGlkIGlmIHRoZSBkYXRhIGhhcyBvYmplY3QgaW4gaXQuXHJcbiAgICAgICAgICAgIC4uLihkYXRhICYmIGRhdGEub2JqZWN0KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGFnZS5vYmplY3RJZCB8fCAhb2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgY29uZmlnLm9iamVjdCA9IHt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICR0LmltcHJlc3Npb24oZWRhdGEsIGNvbmZpZylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkdC5pbXByZXNzaW9uKGVkYXRhLCB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YSAmJiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlIHx8ICcnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAuLi4oZGF0YSAmJiBkYXRhLm9iamVjdCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmV2aW91c1VybCA9IHBhZ2UucGFnZVVybFxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbXByZXNzaW9uJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dGVybmFsSW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YTogYW55KSB7XHJcbiAgICAvLyB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoaW1wcmVzc2lvbkRhdGEpXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSBwYWdlLm9iamVjdElkID8ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9IDoge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGltcHJlc3Npb25EYXRhLmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGV4dGVybmFsSW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgUGxhcnRmb3JtIHJhdGluZ1xyXG4gIGFkZEN1c3RvbUxpc3RlbmVyRm9yUGxhdGZvcm1SYXRpbmcoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5nZXRQUkV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlBsYXRmb3JtUmF0aW5nICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21MaXN0ZW5lckZvckdldFN0YXJ0KCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZ2V0U3RhcnRFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5HZXRTdGFydGVkICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21MaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmNoYXRib3RFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21JbXByZXNzaW9uTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUltcHJlc3Npb24pID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkltcHJlc3Npb24sXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2V2ZW50LmRhdGE6OicsIGV2ZW50LmRhdGEpXHJcbiAgICAgICAgICB0aGlzLmltcHJlc3Npb24oZXZlbnQuZGF0YSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkVGltZVNwZW50TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBhZ2UgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoKSB7XHJcblxyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeVxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkICYmXHJcbiAgICAgICAgICBldmVudC5kYXRhLnR5cGUgIT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQgJiZcclxuICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSAhPT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllclxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbiAgYWRkUGxheWVyTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllciAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBldmVudC5kYXRhLmNvbnRlbnRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ21heWJlJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8ICdhcHBsaWNhdGlvbi9qc29uJykpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkICYmXHJcbiAgICAgICAgICAoIWNvbnRlbnQgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50Lm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyB8fCAnYXBwbGljYXRpb24vanNvbicpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEludGVyYWN0TGlzdGVuZXIoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoZGF0YS5wYWdlaWQpXHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUludGVyYWN0KSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5pbnRlcmFjdChldmVudC5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW50ZXJhY3QnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBsZXQgaW50ZXJhY3RpZFxyXG4gICAgICAgICAgLy8gaWYgKGV2ZW50LmRhdGEuZWRhdGEudHlwZSA9PT0gJ2dvYWwnKSB7XHJcbiAgICAgICAgICAvLyAgIGludGVyYWN0aWQgPSBwYWdlLnBhZ2VVcmxQYXJ0c1s0XVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuZWRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQuZGF0YS5wYWdlQ29udGV4dCAmJiBldmVudC5kYXRhLnBhZ2VDb250ZXh0LnBhZ2VJZCB8fCBwYWdlLnBhZ2VpZCxcclxuICAgICAgICAgICAgICAgIC8vIHRhcmdldDogeyBwYWdlIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW50ZXJhY3QnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEZlZWRiYWNrTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUZlZWRiYWNrKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5GZWVkYmFjayxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgJHQuZmVlZGJhY2soXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICByYXRpbmc6IGV2ZW50LmRhdGEub2JqZWN0LnJhdGluZyB8fCAwLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnRpZDogZXZlbnQuZGF0YS5vYmplY3QuY29tbWVudGlkIHx8ICcnLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnR0eHQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbW1lbnR0eHQgfHwgJycsXHJcbiAgICAgICAgICAgICAgcGFnZWlkOiBwYWdlLnBhZ2VpZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbnRlbnRJZCB8fCBldmVudC5kYXRhLm9iamVjdC5pZCB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEuZWRhdGEudHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHZlcjogYCR7KGV2ZW50LmRhdGEub2JqZWN0LnZlcnNpb24gfHwgJzEnKX0keycnfWAsXHJcbiAgICAgICAgICAgICAgICByb2xsdXA6IHt9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRIZWFyYmVhdExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlIZWFydEJlYXQpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkhlYXJ0QmVhdCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZnJvbSA9PT0gJ3N0cmluZycgJiYgdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0pIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmhlYXJ0YmVhdChldmVudC5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaGVhcnRiZWF0KFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIHN1YnR5cGU6IGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAvLyBtaW1lVHlwZTogZXZlbnQuZGF0YS5taW1lVHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIG1vZGU6IGV2ZW50LmRhdGEubW9kZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBoZWFydGJlYXQnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZFNlYXJjaExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlTZWFyY2gpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlNlYXJjaCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAkdC5zZWFyY2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBxdWVyeTogZXZlbnQuZGF0YS5xdWVyeSxcclxuICAgICAgICAgICAgICBmaWx0ZXJzOiBldmVudC5kYXRhLmZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgc2l6ZTogZXZlbnQuZGF0YS5zaXplLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IHNlYXJjaCcsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZURldGFpbHMoKSB7XHJcbiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoJy8nLCAnJylcclxuICAgIGNvbnN0IHVybCA9IHBhdGggKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoXHJcbiAgICBsZXQgbW9kdWxlVmFsdWUgPSAnJ1xyXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoJ2Rpc2N1c3Npb24tZm9ydW0nKSkge1xyXG4gICAgICBtb2R1bGVWYWx1ZSA9ICdEaXNjdXNzJ1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFnZWlkOiBwYXRoLFxyXG4gICAgICBwYWdlVXJsOiB1cmwsXHJcbiAgICAgIHBhZ2VVcmxQYXJ0czogcGF0aC5zcGxpdCgnLycpLFxyXG4gICAgICByZWZmZXJVcmw6IHRoaXMucHJldmlvdXNVcmwsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHMocGF0aC5zcGxpdCgnLycpKSxcclxuICAgICAgbW9kdWxlOiBtb2R1bGVWYWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHModXJsUGFydHM6IHN0cmluZ1tdKSB7XHJcbiAgICAvLyBUT0RPOiBwaWNrIHRvYyBhbmQgdmlld2VyIHVybCBmcm9tIHNvbWUgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3QgdG9jSWR4ID0gdXJsUGFydHMuaW5kZXhPZigndG9jJylcclxuICAgIGNvbnN0IHZpZXdlcklkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3ZpZXdlcicpXHJcblxyXG4gICAgaWYgKHRvY0lkeCA9PT0gLTEgJiYgdmlld2VySWR4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b2NJZHggIT09IC0xICYmIHRvY0lkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3RvY0lkeCArIDFdIC8vIGUuZy4gdXJsIC9hcHAvdG9jLzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2aWV3ZXJJZHggIT09IC0xICYmIHZpZXdlcklkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3ZpZXdlcklkeCArIDJdIC8vIGUuZy4gdXJsIC9hcHAvdmlld2VyLzxjb250ZW50X3R5cGU+Lzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcbiJdfQ==