@sunbird-cb/utils 1.0.19 → 1.0.21-ang-13-16

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 (409) hide show
  1. package/esm2022/lib/components/image-crop/image-crop.component.mjs +172 -0
  2. package/esm2022/lib/components/image-crop/image-crop.module.mjs +55 -0
  3. package/esm2022/lib/constants/features.enum.mjs +555 -0
  4. package/esm2022/lib/constants/instances.enum.mjs +5 -0
  5. package/esm2022/lib/constants/misc.constants.mjs +2 -0
  6. package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.mjs +87 -0
  7. package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.module.mjs +20 -0
  8. package/esm2022/lib/directives/default-thumbnail/default-thumbnail.directive.mjs +40 -0
  9. package/esm2022/lib/directives/default-thumbnail/default-thumbnail.module.mjs +20 -0
  10. package/esm2022/lib/directives/image-responsive/image-responsive.directive.mjs +86 -0
  11. package/esm2022/lib/directives/image-responsive/image-responsive.module.mjs +20 -0
  12. package/esm2022/lib/directives/in-view-port/in-view-port.directive.mjs +62 -0
  13. package/esm2022/lib/directives/in-view-port/in-view-port.module.mjs +20 -0
  14. package/esm2022/lib/directives/navigation/navigation.directive.mjs +43 -0
  15. package/esm2022/lib/directives/navigation/navigation.module.mjs +20 -0
  16. package/esm2022/lib/directives/permission/permission.directive.mjs +14 -0
  17. package/esm2022/lib/directives/permission/permission.module.mjs +20 -0
  18. package/esm2022/lib/helpers/functions/getStringifiedQueryParams.mjs +9 -0
  19. package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.component.mjs +96 -0
  20. package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.module.mjs +32 -0
  21. package/esm2022/lib/helpers/logout/logout.component.mjs +44 -0
  22. package/esm2022/lib/helpers/logout/logout.module.mjs +27 -0
  23. package/esm2022/lib/models/contentRating.model.mjs +2 -0
  24. package/esm2022/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.mjs +18 -0
  25. package/esm2022/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.mjs +57 -0
  26. package/esm2022/lib/pipes/pipe-count-transform/pipe-count-transform.module.mjs +20 -0
  27. package/esm2022/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.mjs +37 -0
  28. package/esm2022/lib/pipes/pipe-date-concat/pipe-date-concat.module.mjs +20 -0
  29. package/esm2022/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.mjs +36 -0
  30. package/esm2022/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.mjs +20 -0
  31. package/esm2022/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.mjs +64 -0
  32. package/esm2022/lib/pipes/pipe-filter/pipe-filter.module.mjs +20 -0
  33. package/esm2022/lib/pipes/pipe-filter/pipe-filter.pipe.mjs +20 -0
  34. package/esm2022/lib/pipes/pipe-filter-search/pipe-filter-search.module.mjs +20 -0
  35. package/esm2022/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.mjs +34 -0
  36. package/esm2022/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.mjs +20 -0
  37. package/esm2022/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.mjs +16 -0
  38. package/esm2022/lib/pipes/pipe-limit-to/pipe-limit-to.module.mjs +20 -0
  39. package/esm2022/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.mjs +29 -0
  40. package/esm2022/lib/pipes/pipe-list-filter/pipe-list-filter.module.mjs +20 -0
  41. package/esm2022/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.mjs +21 -0
  42. package/esm2022/lib/pipes/pipe-name-transform/pipe-name-transform.module.mjs +20 -0
  43. package/esm2022/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.mjs +29 -0
  44. package/esm2022/lib/pipes/pipe-order-by/pipe-order-by.module.mjs +20 -0
  45. package/esm2022/lib/pipes/pipe-order-by/pipe-order-by.pipe.mjs +17 -0
  46. package/esm2022/lib/pipes/pipe-partial-content/pipe-partial-content.module.mjs +20 -0
  47. package/esm2022/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.mjs +22 -0
  48. package/esm2022/lib/pipes/pipe-relative-time/pipe-relative-time.module.mjs +20 -0
  49. package/esm2022/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.mjs +21 -0
  50. package/esm2022/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.mjs +20 -0
  51. package/esm2022/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.mjs +33 -0
  52. package/esm2022/lib/resolvers/explore-detail.resolver.mjs +76 -0
  53. package/esm2022/lib/resolvers/marketing-offering.resolve.mjs +35 -0
  54. package/esm2022/lib/resolvers/page.constant.mjs +4 -0
  55. package/esm2022/lib/resolvers/page.model.mjs +2 -0
  56. package/esm2022/lib/resolvers/page.resolver.mjs +82 -0
  57. package/esm2022/lib/resolvers/resolver.model.mjs +2 -0
  58. package/esm2022/lib/services/auth-keycloak.service.mjs +52 -0
  59. package/esm2022/lib/services/auth-microsoft.service.mjs +173 -0
  60. package/esm2022/lib/services/card-content.model.mjs +11 -0
  61. package/esm2022/lib/services/configurations.model.mjs +2 -0
  62. package/esm2022/lib/services/configurations.service.mjs +65 -0
  63. package/esm2022/lib/services/content-strip-multiple.model.mjs +2 -0
  64. package/esm2022/lib/services/event.model.mjs +121 -0
  65. package/esm2022/lib/services/event.service.mjs +204 -0
  66. package/esm2022/lib/services/logger.service.mjs +45 -0
  67. package/esm2022/lib/services/ms-office.model.mjs +2 -0
  68. package/esm2022/lib/services/subapplication-respond.service.mjs +76 -0
  69. package/esm2022/lib/services/telemetry.service.mjs +502 -0
  70. package/esm2022/lib/services/user-preference.model.mjs +2 -0
  71. package/esm2022/lib/services/user-preference.service.mjs +92 -0
  72. package/esm2022/lib/services/utility.service.mjs +122 -0
  73. package/esm2022/lib/services/value.service.mjs +25 -0
  74. package/esm2022/lib/services/widget-content.model.mjs +107 -0
  75. package/esm2022/lib/services/widget-content.service.mjs +182 -0
  76. package/esm2022/lib/services/widget-resolver.model.mjs +2 -0
  77. package/esm2022/lib/services/widget-search.model.mjs +2 -0
  78. package/esm2022/public-api.mjs +74 -0
  79. package/esm2022/sunbird-cb-utils.mjs +2 -0
  80. package/fesm2022/sunbird-cb-utils.mjs +3902 -0
  81. package/fesm2022/sunbird-cb-utils.mjs.map +1 -0
  82. package/index.d.ts +3 -0
  83. package/lib/components/image-crop/image-crop.component.d.ts +6 -2
  84. package/lib/components/image-crop/image-crop.component.d.ts.map +1 -0
  85. package/lib/components/image-crop/image-crop.module.d.ts +15 -0
  86. package/lib/components/image-crop/image-crop.module.d.ts.map +1 -0
  87. package/lib/constants/features.enum.d.ts +1 -0
  88. package/lib/constants/features.enum.d.ts.map +1 -0
  89. package/lib/constants/instances.enum.d.ts +1 -0
  90. package/lib/constants/instances.enum.d.ts.map +1 -0
  91. package/lib/constants/misc.constants.d.ts +3 -2
  92. package/lib/constants/misc.constants.d.ts.map +1 -0
  93. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +7 -3
  94. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts.map +1 -0
  95. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts +7 -0
  96. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts.map +1 -0
  97. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +4 -0
  98. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts.map +1 -0
  99. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts +7 -0
  100. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts.map +1 -0
  101. package/lib/directives/image-responsive/image-responsive.directive.d.ts +4 -0
  102. package/lib/directives/image-responsive/image-responsive.directive.d.ts.map +1 -0
  103. package/lib/directives/image-responsive/image-responsive.module.d.ts +7 -0
  104. package/lib/directives/image-responsive/image-responsive.module.d.ts.map +1 -0
  105. package/lib/directives/in-view-port/in-view-port.directive.d.ts +4 -0
  106. package/lib/directives/in-view-port/in-view-port.directive.d.ts.map +1 -0
  107. package/lib/directives/in-view-port/in-view-port.module.d.ts +7 -0
  108. package/lib/directives/in-view-port/in-view-port.module.d.ts.map +1 -0
  109. package/lib/directives/navigation/navigation.directive.d.ts +4 -0
  110. package/lib/directives/navigation/navigation.directive.d.ts.map +1 -0
  111. package/lib/directives/navigation/navigation.module.d.ts +7 -0
  112. package/lib/directives/navigation/navigation.module.d.ts.map +1 -0
  113. package/lib/directives/permission/permission.directive.d.ts +4 -0
  114. package/lib/directives/permission/permission.directive.d.ts.map +1 -0
  115. package/lib/directives/permission/permission.module.d.ts +7 -0
  116. package/lib/directives/permission/permission.module.d.ts.map +1 -0
  117. package/lib/helpers/functions/getStringifiedQueryParams.d.ts +1 -0
  118. package/lib/helpers/functions/getStringifiedQueryParams.d.ts.map +1 -0
  119. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +4 -0
  120. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts.map +1 -0
  121. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +10 -0
  122. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts.map +1 -0
  123. package/lib/helpers/logout/logout.component.d.ts +6 -2
  124. package/lib/helpers/logout/logout.component.d.ts.map +1 -0
  125. package/lib/helpers/logout/logout.module.d.ts +9 -0
  126. package/lib/helpers/logout/logout.module.d.ts.map +1 -0
  127. package/lib/models/contentRating.model.d.ts +1 -0
  128. package/lib/models/contentRating.model.d.ts.map +1 -0
  129. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts +7 -0
  130. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts.map +1 -0
  131. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +4 -0
  132. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts.map +1 -0
  133. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts +7 -0
  134. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts.map +1 -0
  135. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +4 -0
  136. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts.map +1 -0
  137. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts +7 -0
  138. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts.map +1 -0
  139. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +4 -0
  140. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts.map +1 -0
  141. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +7 -0
  142. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts.map +1 -0
  143. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +4 -0
  144. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts.map +1 -0
  145. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts +7 -0
  146. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts.map +1 -0
  147. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +4 -0
  148. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts.map +1 -0
  149. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts +7 -0
  150. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts.map +1 -0
  151. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +4 -0
  152. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts.map +1 -0
  153. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts +7 -0
  154. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts.map +1 -0
  155. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +4 -0
  156. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts.map +1 -0
  157. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts +7 -0
  158. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts.map +1 -0
  159. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +4 -0
  160. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts.map +1 -0
  161. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts +7 -0
  162. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts.map +1 -0
  163. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +4 -0
  164. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts.map +1 -0
  165. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts +7 -0
  166. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts.map +1 -0
  167. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +4 -0
  168. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts.map +1 -0
  169. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts +7 -0
  170. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts.map +1 -0
  171. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +8 -4
  172. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts.map +1 -0
  173. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts +7 -0
  174. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts.map +1 -0
  175. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +4 -0
  176. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts.map +1 -0
  177. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts +7 -0
  178. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts.map +1 -0
  179. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +4 -0
  180. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts.map +1 -0
  181. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts +7 -0
  182. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts.map +1 -0
  183. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +4 -0
  184. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts.map +1 -0
  185. package/lib/resolvers/explore-detail.resolver.d.ts +6 -2
  186. package/lib/resolvers/explore-detail.resolver.d.ts.map +1 -0
  187. package/lib/resolvers/marketing-offering.resolve.d.ts +6 -2
  188. package/lib/resolvers/marketing-offering.resolve.d.ts.map +1 -0
  189. package/lib/resolvers/page.constant.d.ts +1 -0
  190. package/lib/resolvers/page.constant.d.ts.map +1 -0
  191. package/lib/resolvers/page.model.d.ts +2 -1
  192. package/lib/resolvers/page.model.d.ts.map +1 -0
  193. package/lib/resolvers/page.resolver.d.ts +6 -2
  194. package/lib/resolvers/page.resolver.d.ts.map +1 -0
  195. package/lib/resolvers/resolver.model.d.ts +1 -0
  196. package/lib/resolvers/resolver.model.d.ts.map +1 -0
  197. package/lib/services/auth-keycloak.service.d.ts +7 -23
  198. package/lib/services/auth-keycloak.service.d.ts.map +1 -0
  199. package/lib/services/auth-microsoft.service.d.ts +6 -2
  200. package/lib/services/auth-microsoft.service.d.ts.map +1 -0
  201. package/lib/services/card-content.model.d.ts +1 -0
  202. package/lib/services/card-content.model.d.ts.map +1 -0
  203. package/lib/services/configurations.model.d.ts +27 -24
  204. package/lib/services/configurations.model.d.ts.map +1 -0
  205. package/lib/services/configurations.service.d.ts +4 -0
  206. package/lib/services/configurations.service.d.ts.map +1 -0
  207. package/lib/services/content-strip-multiple.model.d.ts +8 -6
  208. package/lib/services/content-strip-multiple.model.d.ts.map +1 -0
  209. package/lib/services/event.model.d.ts +2 -1
  210. package/lib/services/event.model.d.ts.map +1 -0
  211. package/lib/services/event.service.d.ts +4 -0
  212. package/lib/services/event.service.d.ts.map +1 -0
  213. package/lib/services/logger.service.d.ts +8 -4
  214. package/lib/services/logger.service.d.ts.map +1 -0
  215. package/lib/services/ms-office.model.d.ts +1 -0
  216. package/lib/services/ms-office.model.d.ts.map +1 -0
  217. package/lib/services/subapplication-respond.service.d.ts +5 -10
  218. package/lib/services/subapplication-respond.service.d.ts.map +1 -0
  219. package/lib/services/telemetry.service.d.ts +6 -2
  220. package/lib/services/telemetry.service.d.ts.map +1 -0
  221. package/lib/services/user-preference.model.d.ts +1 -0
  222. package/lib/services/user-preference.model.d.ts.map +1 -0
  223. package/lib/services/user-preference.service.d.ts +4 -0
  224. package/lib/services/user-preference.service.d.ts.map +1 -0
  225. package/lib/services/utility.service.d.ts +11 -7
  226. package/lib/services/utility.service.d.ts.map +1 -0
  227. package/lib/services/value.service.d.ts +4 -0
  228. package/lib/services/value.service.d.ts.map +1 -0
  229. package/lib/services/widget-content.model.d.ts +21 -19
  230. package/lib/services/widget-content.model.d.ts.map +1 -0
  231. package/lib/services/widget-content.service.d.ts +4 -0
  232. package/lib/services/widget-content.service.d.ts.map +1 -0
  233. package/lib/services/widget-resolver.model.d.ts +2 -1
  234. package/lib/services/widget-resolver.model.d.ts.map +1 -0
  235. package/lib/services/widget-search.model.d.ts +1 -0
  236. package/lib/services/widget-search.model.d.ts.map +1 -0
  237. package/package.json +28 -25
  238. package/public-api.d.ts +7 -0
  239. package/public-api.d.ts.map +1 -0
  240. package/sunbird-cb-utils-1.0.21-ang-13-16.tgz +0 -0
  241. package/sunbird-cb-utils.d.ts.map +1 -0
  242. package/bundles/sunbird-cb-utils.umd.js +0 -5878
  243. package/bundles/sunbird-cb-utils.umd.js.map +0 -1
  244. package/bundles/sunbird-cb-utils.umd.min.js +0 -16
  245. package/bundles/sunbird-cb-utils.umd.min.js.map +0 -1
  246. package/esm2015/lib/components/image-crop/image-crop.component.js +0 -195
  247. package/esm2015/lib/components/image-crop/image-crop.module.js +0 -27
  248. package/esm2015/lib/constants/features.enum.js +0 -555
  249. package/esm2015/lib/constants/instances.enum.js +0 -5
  250. package/esm2015/lib/constants/misc.constants.js +0 -1
  251. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -87
  252. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -15
  253. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +0 -38
  254. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -15
  255. package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +0 -92
  256. package/esm2015/lib/directives/image-responsive/image-responsive.module.js +0 -15
  257. package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +0 -68
  258. package/esm2015/lib/directives/in-view-port/in-view-port.module.js +0 -15
  259. package/esm2015/lib/directives/navigation/navigation.directive.js +0 -39
  260. package/esm2015/lib/directives/navigation/navigation.module.js +0 -15
  261. package/esm2015/lib/directives/permission/permission.directive.js +0 -11
  262. package/esm2015/lib/directives/permission/permission.module.js +0 -15
  263. package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +0 -9
  264. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -99
  265. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -19
  266. package/esm2015/lib/helpers/logout/logout.component.js +0 -57
  267. package/esm2015/lib/helpers/logout/logout.module.js +0 -18
  268. package/esm2015/lib/models/contentRating.model.js +0 -12
  269. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -13
  270. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +0 -59
  271. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -15
  272. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +0 -33
  273. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -15
  274. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +0 -43
  275. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -15
  276. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +0 -60
  277. package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +0 -15
  278. package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +0 -16
  279. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -15
  280. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +0 -30
  281. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -15
  282. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +0 -12
  283. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -15
  284. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +0 -25
  285. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -15
  286. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +0 -17
  287. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -15
  288. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +0 -31
  289. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -15
  290. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +0 -16
  291. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -15
  292. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +0 -18
  293. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -15
  294. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +0 -17
  295. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -15
  296. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +0 -35
  297. package/esm2015/lib/resolvers/explore-detail.resolver.js +0 -89
  298. package/esm2015/lib/resolvers/marketing-offering.resolve.js +0 -40
  299. package/esm2015/lib/resolvers/page.constant.js +0 -4
  300. package/esm2015/lib/resolvers/page.model.js +0 -47
  301. package/esm2015/lib/resolvers/page.resolver.js +0 -90
  302. package/esm2015/lib/resolvers/resolver.model.js +0 -6
  303. package/esm2015/lib/services/auth-keycloak.service.js +0 -245
  304. package/esm2015/lib/services/auth-microsoft.service.js +0 -196
  305. package/esm2015/lib/services/card-content.model.js +0 -32
  306. package/esm2015/lib/services/configurations.model.js +0 -508
  307. package/esm2015/lib/services/configurations.service.js +0 -112
  308. package/esm2015/lib/services/content-strip-multiple.model.js +0 -75
  309. package/esm2015/lib/services/event.model.js +0 -229
  310. package/esm2015/lib/services/event.service.js +0 -212
  311. package/esm2015/lib/services/logger.service.js +0 -55
  312. package/esm2015/lib/services/ms-office.model.js +0 -8
  313. package/esm2015/lib/services/subapplication-respond.service.js +0 -225
  314. package/esm2015/lib/services/telemetry.service.js +0 -449
  315. package/esm2015/lib/services/user-preference.model.js +0 -38
  316. package/esm2015/lib/services/user-preference.service.js +0 -90
  317. package/esm2015/lib/services/utility.service.js +0 -145
  318. package/esm2015/lib/services/value.service.js +0 -31
  319. package/esm2015/lib/services/widget-content.model.js +0 -342
  320. package/esm2015/lib/services/widget-content.service.js +0 -192
  321. package/esm2015/lib/services/widget-resolver.model.js +0 -57
  322. package/esm2015/lib/services/widget-search.model.js +0 -126
  323. package/esm2015/public-api.js +0 -68
  324. package/esm2015/sunbird-cb-utils.js +0 -8
  325. package/esm5/lib/components/image-crop/image-crop.component.js +0 -200
  326. package/esm5/lib/components/image-crop/image-crop.module.js +0 -31
  327. package/esm5/lib/constants/features.enum.js +0 -555
  328. package/esm5/lib/constants/instances.enum.js +0 -5
  329. package/esm5/lib/constants/misc.constants.js +0 -1
  330. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -105
  331. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -19
  332. package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +0 -40
  333. package/esm5/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -19
  334. package/esm5/lib/directives/image-responsive/image-responsive.directive.js +0 -95
  335. package/esm5/lib/directives/image-responsive/image-responsive.module.js +0 -19
  336. package/esm5/lib/directives/in-view-port/in-view-port.directive.js +0 -73
  337. package/esm5/lib/directives/in-view-port/in-view-port.module.js +0 -19
  338. package/esm5/lib/directives/navigation/navigation.directive.js +0 -41
  339. package/esm5/lib/directives/navigation/navigation.module.js +0 -19
  340. package/esm5/lib/directives/permission/permission.directive.js +0 -14
  341. package/esm5/lib/directives/permission/permission.module.js +0 -19
  342. package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +0 -9
  343. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -103
  344. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -23
  345. package/esm5/lib/helpers/logout/logout.component.js +0 -63
  346. package/esm5/lib/helpers/logout/logout.module.js +0 -22
  347. package/esm5/lib/models/contentRating.model.js +0 -12
  348. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -17
  349. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +0 -63
  350. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -19
  351. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +0 -37
  352. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -19
  353. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +0 -45
  354. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -19
  355. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +0 -64
  356. package/esm5/lib/pipes/pipe-filter/pipe-filter.module.js +0 -19
  357. package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +0 -20
  358. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -19
  359. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +0 -38
  360. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -19
  361. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +0 -16
  362. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -19
  363. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +0 -30
  364. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -19
  365. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +0 -21
  366. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -19
  367. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +0 -35
  368. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -19
  369. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +0 -18
  370. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -19
  371. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +0 -34
  372. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -19
  373. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +0 -21
  374. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -19
  375. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +0 -38
  376. package/esm5/lib/resolvers/explore-detail.resolver.js +0 -93
  377. package/esm5/lib/resolvers/marketing-offering.resolve.js +0 -43
  378. package/esm5/lib/resolvers/page.constant.js +0 -4
  379. package/esm5/lib/resolvers/page.model.js +0 -47
  380. package/esm5/lib/resolvers/page.resolver.js +0 -98
  381. package/esm5/lib/resolvers/resolver.model.js +0 -6
  382. package/esm5/lib/services/auth-keycloak.service.js +0 -316
  383. package/esm5/lib/services/auth-microsoft.service.js +0 -251
  384. package/esm5/lib/services/card-content.model.js +0 -32
  385. package/esm5/lib/services/configurations.model.js +0 -508
  386. package/esm5/lib/services/configurations.service.js +0 -114
  387. package/esm5/lib/services/content-strip-multiple.model.js +0 -75
  388. package/esm5/lib/services/event.model.js +0 -229
  389. package/esm5/lib/services/event.service.js +0 -216
  390. package/esm5/lib/services/logger.service.js +0 -73
  391. package/esm5/lib/services/ms-office.model.js +0 -8
  392. package/esm5/lib/services/subapplication-respond.service.js +0 -230
  393. package/esm5/lib/services/telemetry.service.js +0 -484
  394. package/esm5/lib/services/user-preference.model.js +0 -38
  395. package/esm5/lib/services/user-preference.service.js +0 -109
  396. package/esm5/lib/services/utility.service.js +0 -178
  397. package/esm5/lib/services/value.service.js +0 -33
  398. package/esm5/lib/services/widget-content.model.js +0 -342
  399. package/esm5/lib/services/widget-content.service.js +0 -214
  400. package/esm5/lib/services/widget-resolver.model.js +0 -57
  401. package/esm5/lib/services/widget-search.model.js +0 -126
  402. package/esm5/public-api.js +0 -68
  403. package/esm5/sunbird-cb-utils.js +0 -8
  404. package/fesm2015/sunbird-cb-utils.js +0 -5182
  405. package/fesm2015/sunbird-cb-utils.js.map +0 -1
  406. package/fesm5/sunbird-cb-utils.js +0 -5605
  407. package/fesm5/sunbird-cb-utils.js.map +0 -1
  408. package/sunbird-cb-utils.d.ts +0 -7
  409. package/sunbird-cb-utils.metadata.json +0 -1
@@ -0,0 +1,502 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { filter } from 'rxjs/operators';
3
+ import { WsEvents } from './event.model';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./configurations.service";
6
+ import * as i2 from "./event.service";
7
+ import * as i3 from "./logger.service";
8
+ export class TelemetryService {
9
+ constructor(environment, configSvc, eventsSvc, logger) {
10
+ this.configSvc = configSvc;
11
+ this.eventsSvc = eventsSvc;
12
+ this.logger = logger;
13
+ this.previousUrl = null;
14
+ this.telemetryConfig = null;
15
+ this.pData = null;
16
+ this.contextCdata = [];
17
+ this.externalApps = {
18
+ RBCP: 'rbcp-web-ui',
19
+ };
20
+ this.environment = environment;
21
+ const instanceConfig = this.configSvc.instanceConfig;
22
+ if (instanceConfig) {
23
+ this.telemetryConfig = instanceConfig.telemetryConfig;
24
+ this.telemetryConfig = {
25
+ ...this.telemetryConfig,
26
+ pdata: {
27
+ ...this.telemetryConfig.pdata,
28
+ id: `${environment.name}.${this.telemetryConfig.pdata.id}`,
29
+ },
30
+ uid: this.configSvc.userProfile && this.configSvc.userProfile.userId,
31
+ channel: this.rootOrgId || this.telemetryConfig.channel,
32
+ sid: this.getTelemetrySessionId,
33
+ };
34
+ this.pData = this.telemetryConfig.pdata;
35
+ this.addPlayerListener();
36
+ this.addCustomEventListener();
37
+ this.addInteractListener();
38
+ this.addFeedbackListener();
39
+ this.addTimeSpentListener();
40
+ this.addSearchListener();
41
+ this.addHearbeatListener();
42
+ this.addCustomImpressionListener();
43
+ }
44
+ }
45
+ get getTelemetrySessionId() {
46
+ return localStorage.getItem('telemetrySessionId') || '';
47
+ }
48
+ get rootOrgId() {
49
+ if (this.configSvc && this.configSvc.userProfile && this.configSvc.userProfile.rootOrgId) {
50
+ return this.configSvc.userProfile.rootOrgId;
51
+ }
52
+ return '';
53
+ }
54
+ start(edata, data, pageContext) {
55
+ try {
56
+ if (this.telemetryConfig) {
57
+ $t.start(this.telemetryConfig, (pageContext && pageContext.pageId) ?
58
+ pageContext.pageId
59
+ : '', '1.0', {
60
+ type: edata.type,
61
+ mode: edata.mode,
62
+ pageid: (pageContext && pageContext.pageId) ?
63
+ pageContext.pageId
64
+ : '',
65
+ duration: 1,
66
+ }, {
67
+ context: {
68
+ pdata: {
69
+ ...this.pData,
70
+ id: this.pData.id,
71
+ },
72
+ ...(pageContext && pageContext.module ? { env: pageContext.module } : null),
73
+ },
74
+ object: {
75
+ ...(data) && data,
76
+ },
77
+ });
78
+ }
79
+ else {
80
+ this.logger.error('Error Initializing Telemetry. Config missing.');
81
+ }
82
+ }
83
+ catch (e) {
84
+ console.log('Error in telemetry start', e);
85
+ }
86
+ }
87
+ end(edata, data, pageContext) {
88
+ try {
89
+ $t.end({
90
+ type: edata.type,
91
+ mode: edata.mode,
92
+ pageid: (pageContext && pageContext.pageId) ?
93
+ pageContext.pageId
94
+ : '',
95
+ }, {
96
+ context: {
97
+ pdata: {
98
+ ...this.pData,
99
+ id: this.pData.id,
100
+ },
101
+ ...(pageContext && pageContext.module ? { env: pageContext.module } : null),
102
+ },
103
+ object: {
104
+ ...(data) && data,
105
+ },
106
+ });
107
+ }
108
+ catch (e) {
109
+ console.log('Error in telemetry end', e);
110
+ }
111
+ }
112
+ audit(type, props, data) {
113
+ try {
114
+ $t.audit({
115
+ type,
116
+ props,
117
+ state: data,
118
+ prevstate: '',
119
+ duration: '',
120
+ }, {
121
+ context: {
122
+ pdata: {
123
+ ...this.pData,
124
+ id: this.pData.id,
125
+ },
126
+ },
127
+ });
128
+ }
129
+ catch (e) {
130
+ console.log('Error in telemetry audit', e);
131
+ }
132
+ }
133
+ heartbeat(type, id) {
134
+ try {
135
+ $t.heartbeat({
136
+ id,
137
+ type,
138
+ });
139
+ }
140
+ catch (e) {
141
+ console.log('Error in telemetry heartbeat', e);
142
+ }
143
+ }
144
+ impression(data) {
145
+ try {
146
+ const page = this.getPageDetails();
147
+ if (data && data.pageContext) {
148
+ page.module = data.pageContext.module;
149
+ }
150
+ const edata = {
151
+ pageid: page.pageid,
152
+ type: page.pageUrlParts[0],
153
+ uri: page.pageUrl,
154
+ };
155
+ if (page.objectId) {
156
+ const config = {
157
+ context: {
158
+ pdata: {
159
+ ...this.pData,
160
+ id: this.pData.id,
161
+ },
162
+ env: page.module || (this.telemetryConfig && this.telemetryConfig.env),
163
+ },
164
+ object: {
165
+ id: page.objectId,
166
+ ...((data) ? data.object : {}),
167
+ },
168
+ };
169
+ $t.impression(edata, config);
170
+ }
171
+ else {
172
+ $t.impression(edata, {
173
+ context: {
174
+ pdata: {
175
+ ...this.pData,
176
+ id: this.pData.id,
177
+ },
178
+ env: page.module || '',
179
+ },
180
+ object: {
181
+ ...((data) ? data.object : {}),
182
+ },
183
+ });
184
+ }
185
+ this.previousUrl = page.pageUrl;
186
+ }
187
+ catch (e) {
188
+ console.log('Error in telemetry impression', e);
189
+ }
190
+ }
191
+ externalImpression(impressionData) {
192
+ try {
193
+ const page = this.getPageDetails();
194
+ if (this.externalApps[impressionData.subApplicationName]) {
195
+ const externalConfig = page.objectId ? {
196
+ context: {
197
+ pdata: {
198
+ ...this.pData,
199
+ id: this.externalApps[impressionData.subApplicationName],
200
+ },
201
+ },
202
+ object: {
203
+ id: page.objectId,
204
+ },
205
+ } : {
206
+ context: {
207
+ pdata: {
208
+ ...this.pData,
209
+ id: this.externalApps[impressionData.subApplicationName],
210
+ },
211
+ },
212
+ };
213
+ $t.impression(impressionData.data, externalConfig);
214
+ }
215
+ }
216
+ catch (e) {
217
+ console.log('Error in telemetry externalImpression', e);
218
+ }
219
+ }
220
+ addCustomImpressionListener() {
221
+ this.eventsSvc.events$
222
+ .pipe(filter((event) => event &&
223
+ event.data &&
224
+ event.eventType === WsEvents.WsEventType.Telemetry &&
225
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Impression))
226
+ .subscribe(event => {
227
+ try {
228
+ this.impression(event.data);
229
+ }
230
+ catch (e) {
231
+ console.log('Error in telemetry impression', e);
232
+ }
233
+ });
234
+ }
235
+ addTimeSpentListener() {
236
+ this.eventsSvc.events$
237
+ .pipe(filter(event => event &&
238
+ event.eventType === WsEvents.WsEventType.Telemetry &&
239
+ event.data.type === WsEvents.WsTimeSpentType.Page &&
240
+ event.data.mode &&
241
+ event.data))
242
+ .subscribe(event => {
243
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
244
+ this.start({
245
+ type: event.data.type || WsEvents.WsTimeSpentType.Player,
246
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
247
+ }, {}, event.pageContext);
248
+ }
249
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
250
+ this.end({
251
+ type: event.data.type || WsEvents.WsTimeSpentType.Player,
252
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
253
+ }, {}, event.pageContext);
254
+ }
255
+ });
256
+ }
257
+ addCustomEventListener() {
258
+ this.eventsSvc.events$
259
+ .pipe(filter(event => event &&
260
+ event.eventType === WsEvents.WsEventType.Telemetry))
261
+ .subscribe(event => {
262
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
263
+ event.data.type !== WsEvents.WsTimeSpentType.Player) {
264
+ this.start({
265
+ type: event.data.type,
266
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
267
+ }, event.data.object, event.pageContext);
268
+ }
269
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
270
+ event.data.type !== WsEvents.WsTimeSpentType.Player) {
271
+ this.end({
272
+ type: event.data.type || WsEvents.WsTimeSpentType.Player,
273
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
274
+ }, event.data.object, event.pageContext);
275
+ }
276
+ });
277
+ }
278
+ addPlayerListener() {
279
+ this.eventsSvc.events$
280
+ .pipe(filter(event => event &&
281
+ event.eventType === WsEvents.WsEventType.Telemetry &&
282
+ event.data.type === WsEvents.WsTimeSpentType.Player &&
283
+ event.data.mode &&
284
+ event.data))
285
+ .subscribe(event => {
286
+ const content = event.data.content;
287
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
288
+ (!content ||
289
+ (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
290
+ (content.isIframeSupported || '').toLowerCase() === 'yes' ||
291
+ (content.mimeType === 'application/pdf' || 'application/json'))) {
292
+ this.start({
293
+ type: event.data.type || WsEvents.WsTimeSpentType.Player,
294
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
295
+ }, event.data.object, event.pageContext);
296
+ }
297
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
298
+ (!content ||
299
+ (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
300
+ (content.isIframeSupported || '').toLowerCase() === 'yes' ||
301
+ (content.mimeType === 'application/pdf' || 'application/json'))) {
302
+ this.end({
303
+ type: event.data.type || WsEvents.WsTimeSpentType.Player,
304
+ mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
305
+ }, event.data.object, event.pageContext);
306
+ }
307
+ });
308
+ }
309
+ addInteractListener() {
310
+ this.eventsSvc.events$
311
+ .pipe(filter((event) => event &&
312
+ event.data &&
313
+ event.eventType === WsEvents.WsEventType.Telemetry &&
314
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact))
315
+ .subscribe(event => {
316
+ const page = this.getPageDetails();
317
+ if (typeof event.from === 'string' && this.externalApps[event.from]) {
318
+ const externalConfig = {
319
+ context: {
320
+ pdata: {
321
+ ...this.pData,
322
+ id: this.externalApps[event.from],
323
+ },
324
+ },
325
+ };
326
+ try {
327
+ $t.interact(event.data, externalConfig);
328
+ }
329
+ catch (e) {
330
+ console.log('Error in telemetry interact', e);
331
+ }
332
+ }
333
+ else {
334
+ try {
335
+ $t.interact({
336
+ type: event.data.edata.type,
337
+ subtype: event.data.edata.subType,
338
+ id: (event.data.edata && event.data.edata.id) ?
339
+ event.data.edata.id
340
+ : '',
341
+ pageid: event.data.pageContext && event.data.pageContext.pageId || page.pageid,
342
+ }, {
343
+ context: {
344
+ pdata: {
345
+ ...this.pData,
346
+ id: this.pData.id,
347
+ },
348
+ ...(event.data.pageContext && event.data.pageContext.module ? { env: event.data.pageContext.module } : null),
349
+ },
350
+ object: {
351
+ ...event.data.object,
352
+ },
353
+ });
354
+ }
355
+ catch (e) {
356
+ console.log('Error in telemetry interact', e);
357
+ }
358
+ }
359
+ });
360
+ }
361
+ addFeedbackListener() {
362
+ this.eventsSvc.events$
363
+ .pipe(filter((event) => event &&
364
+ event.data &&
365
+ event.eventType === WsEvents.WsEventType.Telemetry &&
366
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback))
367
+ .subscribe(event => {
368
+ const page = this.getPageDetails();
369
+ try {
370
+ $t.feedback({
371
+ rating: event.data.object.rating || 0,
372
+ commentid: event.data.object.commentid || '',
373
+ commenttxt: event.data.object.commenttxt || '',
374
+ pageid: page.pageid,
375
+ }, {
376
+ context: {
377
+ pdata: {
378
+ ...this.pData,
379
+ id: this.pData.id,
380
+ },
381
+ },
382
+ object: {
383
+ id: event.data.object.contentId || event.data.object.id || '',
384
+ type: event.data.edata.type || '',
385
+ ver: `${(event.data.object.version || '1')}${''}`,
386
+ rollup: {},
387
+ },
388
+ });
389
+ }
390
+ catch (e) {
391
+ console.log('Error in telemetry interact', e);
392
+ }
393
+ });
394
+ }
395
+ addHearbeatListener() {
396
+ this.eventsSvc.events$
397
+ .pipe(filter((event) => event &&
398
+ event.data &&
399
+ event.eventType === WsEvents.WsEventType.Telemetry &&
400
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat))
401
+ .subscribe(event => {
402
+ if (typeof event.from === 'string' && this.externalApps[event.from]) {
403
+ const externalConfig = {
404
+ context: {
405
+ pdata: {
406
+ ...this.pData,
407
+ id: this.externalApps[event.from],
408
+ },
409
+ },
410
+ };
411
+ try {
412
+ $t.heartbeat(event.data, externalConfig);
413
+ }
414
+ catch (e) {
415
+ console.log('Error in telemetry heartbeat', e);
416
+ }
417
+ }
418
+ else {
419
+ try {
420
+ $t.heartbeat({
421
+ type: event.data.type,
422
+ id: event.data.id,
423
+ }, {
424
+ context: {
425
+ pdata: {
426
+ ...this.pData,
427
+ id: this.pData.id,
428
+ },
429
+ },
430
+ });
431
+ }
432
+ catch (e) {
433
+ console.log('Error in telemetry heartbeat', e);
434
+ }
435
+ }
436
+ });
437
+ }
438
+ addSearchListener() {
439
+ this.eventsSvc.events$
440
+ .pipe(filter((event) => event &&
441
+ event.data &&
442
+ event.eventType === WsEvents.WsEventType.Telemetry &&
443
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search))
444
+ .subscribe(event => {
445
+ try {
446
+ $t.search({
447
+ query: event.data.query,
448
+ filters: event.data.filters,
449
+ size: event.data.size,
450
+ }, {
451
+ context: {
452
+ pdata: {
453
+ ...this.pData,
454
+ id: this.pData.id,
455
+ },
456
+ },
457
+ });
458
+ }
459
+ catch (e) {
460
+ console.log('Error in telemetry search', e);
461
+ }
462
+ });
463
+ }
464
+ getPageDetails() {
465
+ const path = window.location.pathname.replace('/', '');
466
+ const url = path + window.location.search;
467
+ return {
468
+ pageid: path,
469
+ pageUrl: url,
470
+ pageUrlParts: path.split('/'),
471
+ refferUrl: this.previousUrl,
472
+ objectId: this.extractContentIdFromUrlParts(path.split('/')),
473
+ module: '',
474
+ };
475
+ }
476
+ extractContentIdFromUrlParts(urlParts) {
477
+ const tocIdx = urlParts.indexOf('toc');
478
+ const viewerIdx = urlParts.indexOf('viewer');
479
+ if (tocIdx === -1 && viewerIdx === -1) {
480
+ return null;
481
+ }
482
+ if (tocIdx !== -1 && tocIdx < urlParts.length - 1) {
483
+ return urlParts[tocIdx + 1];
484
+ }
485
+ if (viewerIdx !== -1 && viewerIdx < urlParts.length - 2) {
486
+ return urlParts[viewerIdx + 2];
487
+ }
488
+ return null;
489
+ }
490
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, deps: [{ token: 'environment' }, { token: i1.ConfigurationsService }, { token: i2.EventService }, { token: i3.LoggerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
491
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, providedIn: 'root' }); }
492
+ }
493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, decorators: [{
494
+ type: Injectable,
495
+ args: [{
496
+ providedIn: 'root',
497
+ }]
498
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
499
+ type: Inject,
500
+ args: ['environment']
501
+ }] }, { type: i1.ConfigurationsService }, { type: i2.EventService }, { type: i3.LoggerService }]; } });
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdXRpbHMvc3JjL2xpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFJdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTs7Ozs7QUFVeEMsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUN5QixXQUFnQixFQUMvQixTQUFnQyxFQUNoQyxTQUF1QixFQUV2QixNQUFxQjtRQUhyQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBRXZCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFkL0IsZ0JBQVcsR0FBa0IsSUFBSSxDQUFBO1FBQ2pDLG9CQUFlLEdBQTZDLElBQUksQ0FBQTtRQUNoRSxVQUFLLEdBQVEsSUFBSSxDQUFBO1FBQ2pCLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBR2pCLGlCQUFZLEdBQVE7WUFDbEIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQTtRQVFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFBO1FBQ3BELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQTtZQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixHQUFHLElBQUksQ0FBQyxlQUFlO2dCQUN2QixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7b0JBRTdCLEVBQUUs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RUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM3QixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQTtJQUNILENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxRQUFrQjtRQUU3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFNUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQzVCO1FBRUQsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELE9BQU8sUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUMvQjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQzsrR0F2bUJVLGdCQUFnQixrQkFXakIsYUFBYTttSEFYWixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuLy8gaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBXc0V2ZW50cyB9IGZyb20gJy4vZXZlbnQubW9kZWwnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcblxyXG5kZWNsYXJlIHZhciAkdDogYW55XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XHJcbiAgcHJldmlvdXNVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgdGVsZW1ldHJ5Q29uZmlnOiBOc0luc3RhbmNlQ29uZmlnLklUZWxlbWV0cnlDb25maWcgfCBudWxsID0gbnVsbFxyXG4gIHBEYXRhOiBhbnkgPSBudWxsXHJcbiAgY29udGV4dENkYXRhID0gW11cclxuICBlbnZpcm9ubWVudDogYW55XHJcblxyXG4gIGV4dGVybmFsQXBwczogYW55ID0ge1xyXG4gICAgUkJDUDogJ3JiY3Atd2ViLXVpJyxcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudHNTdmM6IEV2ZW50U2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgYXV0aFN2YzogQXV0aEtleWNsb2FrU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XHJcbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXHJcbiAgICBpZiAoaW5zdGFuY2VDb25maWcpIHtcclxuICAgICAgdGhpcy50ZWxlbWV0cnlDb25maWcgPSBpbnN0YW5jZUNvbmZpZy50ZWxlbWV0cnlDb25maWdcclxuICAgICAgdGhpcy50ZWxlbWV0cnlDb25maWcgPSB7XHJcbiAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcsXHJcbiAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgIC4uLnRoaXMudGVsZW1ldHJ5Q29uZmlnLnBkYXRhLFxyXG4gICAgICAgICAgLy8gcGlkOiBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICAgICAgaWQ6IGAke2Vudmlyb25tZW50Lm5hbWV9LiR7dGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEuaWR9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVpZDogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkLFxyXG4gICAgICAgIC8vIGF1dGh0b2tlbjogdGhpcy5hdXRoU3ZjLnRva2VuLFxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY2hhbm5lbDogdGhpcy5yb290T3JnSWQgfHwgdGhpcy50ZWxlbWV0cnlDb25maWcuY2hhbm5lbCxcclxuICAgICAgICBzaWQ6IHRoaXMuZ2V0VGVsZW1ldHJ5U2Vzc2lvbklkLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucERhdGEgPSB0aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YVxyXG4gICAgICB0aGlzLmFkZFBsYXllckxpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRDdXN0b21FdmVudExpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRJbnRlcmFjdExpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRGZWVkYmFja0xpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRUaW1lU3BlbnRMaXN0ZW5lcigpXHJcbiAgICAgIHRoaXMuYWRkU2VhcmNoTGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZEhlYXJiZWF0TGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZEN1c3RvbUltcHJlc3Npb25MaXN0ZW5lcigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0VGVsZW1ldHJ5U2Vzc2lvbklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGVtZXRyeVNlc3Npb25JZCcpIHx8ICcnXHJcbiAgfVxyXG5cclxuICBnZXQgcm9vdE9yZ0lkKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWRcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgc3RhcnQoZWRhdGE6IGFueSwgZGF0YTogYW55LCBwYWdlQ29udGV4dD86IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5Q29uZmlnKSB7XHJcbiAgICAgICAgJHQuc3RhcnQoXHJcbiAgICAgICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyxcclxuICAgICAgICAgIChwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5wYWdlSWQpID9cclxuICAgICAgICAgICAgcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnMS4wJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaWQsXHJcbiAgICAgICAgICAgIHR5cGU6IGVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgIG1vZGU6IGVkYXRhLm1vZGUsXHJcbiAgICAgICAgICAgIHBhZ2VpZDogKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0LnBhZ2VJZCkgP1xyXG4gICAgICAgICAgICAgIHBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAuLi4ocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQubW9kdWxlID8geyBlbnY6IHBhZ2VDb250ZXh0Lm1vZHVsZSB9IDogbnVsbCksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgIC4uLihkYXRhKSAmJiBkYXRhLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgSW5pdGlhbGl6aW5nIFRlbGVtZXRyeS4gQ29uZmlnIG1pc3NpbmcuJylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBzdGFydCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmQoZWRhdGE6IGFueSwgZGF0YTogYW55LCBwYWdlQ29udGV4dD86IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuZW5kKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGU6IGVkYXRhLnR5cGUsXHJcbiAgICAgICAgICBtb2RlOiBlZGF0YS5tb2RlLFxyXG4gICAgICAgICAgcGFnZWlkOiAocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQucGFnZUlkKSA/XHJcbiAgICAgICAgICAgIHBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLihwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogcGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgLi4uKGRhdGEpICYmIGRhdGEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgZW5kJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1ZGl0KHR5cGU6IHN0cmluZywgcHJvcHM6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5hdWRpdChcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgcHJvcHMsXHJcbiAgICAgICAgICAvLyBkYXRhLFxyXG4gICAgICAgICAgc3RhdGU6IGRhdGEsIC8vIE9wdGlvbmFsLiBDdXJyZW50IFN0YXRlXHJcbiAgICAgICAgICBwcmV2c3RhdGU6ICcnLCAvLyBPcHRpb25hbC4gUHJldmlvdXMgU3RhdGVcclxuICAgICAgICAgIGR1cmF0aW9uOiAnJywgLy8gT3B0aW9uYWwuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBhdWRpdCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoZWFydGJlYXQodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5oZWFydGJlYXQoe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIC8vIG1vZGUsXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgfSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltcHJlc3Npb24oZGF0YT86IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLnBhZ2VDb250ZXh0KSB7XHJcbiAgICAgICAgLy8gcGFnZS5wYWdlaWQgPSBkYXRhLnBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICAgIHBhZ2UubW9kdWxlID0gZGF0YS5wYWdlQ29udGV4dC5tb2R1bGVcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlZGF0YSA9IHtcclxuICAgICAgICBwYWdlaWQ6IHBhZ2UucGFnZWlkLCAvLyBSZXF1aXJlZC4gVW5pcXVlIHBhZ2UgaWRcclxuICAgICAgICB0eXBlOiBwYWdlLnBhZ2VVcmxQYXJ0c1swXSwgLy8gUmVxdWlyZWQuIEltcHJlc3Npb24gdHlwZSAobGlzdCwgZGV0YWlsLCB2aWV3LCBlZGl0LCB3b3JrZmxvdywgc2VhcmNoKVxyXG4gICAgICAgIHVyaTogcGFnZS5wYWdlVXJsLFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYWdlLm9iamVjdElkKSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudjogcGFnZS5tb2R1bGUgfHwgKHRoaXMudGVsZW1ldHJ5Q29uZmlnICYmIHRoaXMudGVsZW1ldHJ5Q29uZmlnLmVudiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgb3ZlcnJpZGUgYWJvdmUgaWQgaWYgdGhlIGRhdGEgaGFzIG9iamVjdCBpbiBpdC5cclxuICAgICAgICAgICAgLi4uKChkYXRhKSA/IGRhdGEub2JqZWN0IDoge30pLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihlZGF0YSwgY29uZmlnKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICR0LmltcHJlc3Npb24oZWRhdGEsIHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlIHx8ICcnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAuLi4oKGRhdGEpID8gZGF0YS5vYmplY3QgOiB7fSksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmV2aW91c1VybCA9IHBhZ2UucGFnZVVybFxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbXByZXNzaW9uJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dGVybmFsSW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSBwYWdlLm9iamVjdElkID8ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9IDoge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGltcHJlc3Npb25EYXRhLmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGV4dGVybmFsSW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21JbXByZXNzaW9uTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUltcHJlc3Npb24pID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkltcHJlc3Npb24sXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2V2ZW50LmRhdGE6OicsIGV2ZW50LmRhdGEpXHJcbiAgICAgICAgICB0aGlzLmltcHJlc3Npb24oZXZlbnQuZGF0YSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkVGltZVNwZW50TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBhZ2UgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5XHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQgJiZcclxuICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSAhPT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllclxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSxcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCAmJlxyXG4gICAgICAgICAgZXZlbnQuZGF0YS50eXBlICE9PSBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuICBhZGRQbGF5ZXJMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlID09PSBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGVudDogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCA9IGV2ZW50LmRhdGEuY29udGVudFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCAmJlxyXG4gICAgICAgICAgKCFjb250ZW50IHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnbWF5YmUnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAneWVzJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgJ2FwcGxpY2F0aW9uL2pzb24nKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG5cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ21heWJlJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8ICdhcHBsaWNhdGlvbi9qc29uJykpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSW50ZXJhY3RMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3QpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZnJvbSA9PT0gJ3N0cmluZycgJiYgdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0pIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmludGVyYWN0KGV2ZW50LmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGxldCBpbnRlcmFjdGlkXHJcbiAgICAgICAgICAvLyBpZiAoZXZlbnQuZGF0YS5lZGF0YS50eXBlID09PSAnZ29hbCcpIHtcclxuICAgICAgICAgIC8vICAgaW50ZXJhY3RpZCA9IHBhZ2UucGFnZVVybFBhcnRzWzRdXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5pbnRlcmFjdChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBzdWJ0eXBlOiBldmVudC5kYXRhLmVkYXRhLnN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBvYmplY3Q6IGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgaWQ6IChldmVudC5kYXRhLmVkYXRhICYmIGV2ZW50LmRhdGEuZWRhdGEuaWQpID9cclxuICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5lZGF0YS5pZFxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgcGFnZWlkOiBldmVudC5kYXRhLnBhZ2VDb250ZXh0ICYmIGV2ZW50LmRhdGEucGFnZUNvbnRleHQucGFnZUlkIHx8IHBhZ2UucGFnZWlkLFxyXG4gICAgICAgICAgICAgICAgLy8gdGFyZ2V0OiB7IHBhZ2UgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAuLi4oZXZlbnQuZGF0YS5wYWdlQ29udGV4dCAmJiBldmVudC5kYXRhLnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5kYXRhLnBhZ2VDb250ZXh0Lm1vZHVsZSB9IDogbnVsbCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkRmVlZGJhY2tMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5RmVlZGJhY2spID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkZlZWRiYWNrLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAkdC5mZWVkYmFjayhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHJhdGluZzogZXZlbnQuZGF0YS5vYmplY3QucmF0aW5nIHx8IDAsXHJcbiAgICAgICAgICAgICAgY29tbWVudGlkOiBldmVudC5kYXRhLm9iamVjdC5jb21tZW50aWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgY29tbWVudHR4dDogZXZlbnQuZGF0YS5vYmplY3QuY29tbWVudHR4dCB8fCAnJyxcclxuICAgICAgICAgICAgICBwYWdlaWQ6IHBhZ2UucGFnZWlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBpZDogZXZlbnQuZGF0YS5vYmplY3QuY29udGVudElkIHx8IGV2ZW50LmRhdGEub2JqZWN0LmlkIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgdmVyOiBgJHsoZXZlbnQuZGF0YS5vYmplY3QudmVyc2lvbiB8fCAnMScpfSR7Jyd9YCxcclxuICAgICAgICAgICAgICAgIHJvbGx1cDoge30sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW50ZXJhY3QnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEhlYXJiZWF0TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUhlYXJ0QmVhdCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSGVhcnRCZWF0LFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5mcm9tID09PSAnc3RyaW5nJyAmJiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaGVhcnRiZWF0KGV2ZW50LmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBoZWFydGJlYXQnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5oZWFydGJlYXQoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgICAgLy8gc3VidHlwZTogZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgICBpZDogZXZlbnQuZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIC8vIG1pbWVUeXBlOiBldmVudC5kYXRhLm1pbWVUeXBlLFxyXG4gICAgICAgICAgICAgICAgLy8gbW9kZTogZXZlbnQuZGF0YS5tb2RlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkU2VhcmNoTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeVNlYXJjaCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuU2VhcmNoLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICR0LnNlYXJjaChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHF1ZXJ5OiBldmVudC5kYXRhLnF1ZXJ5LFxyXG4gICAgICAgICAgICAgIGZpbHRlcnM6IGV2ZW50LmRhdGEuZmlsdGVycyxcclxuICAgICAgICAgICAgICBzaXplOiBldmVudC5kYXRhLnNpemUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIClcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgc2VhcmNoJywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRQYWdlRGV0YWlscygpIHtcclxuICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgnLycsICcnKVxyXG4gICAgY29uc3QgdXJsID0gcGF0aCArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2hcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhZ2VpZDogcGF0aCxcclxuICAgICAgcGFnZVVybDogdXJsLFxyXG4gICAgICBwYWdlVXJsUGFydHM6IHBhdGguc3BsaXQoJy8nKSxcclxuICAgICAgcmVmZmVyVXJsOiB0aGlzLnByZXZpb3VzVXJsLFxyXG4gICAgICBvYmplY3RJZDogdGhpcy5leHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHBhdGguc3BsaXQoJy8nKSksXHJcbiAgICAgIG1vZHVsZTogJycsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHVybFBhcnRzOiBzdHJpbmdbXSkge1xyXG4gICAgLy8gVE9ETzogcGljayB0b2MgYW5kIHZpZXdlciB1cmwgZnJvbSBzb21lIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IHRvY0lkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3RvYycpXHJcbiAgICBjb25zdCB2aWV3ZXJJZHggPSB1cmxQYXJ0cy5pbmRleE9mKCd2aWV3ZXInKVxyXG5cclxuICAgIGlmICh0b2NJZHggPT09IC0xICYmIHZpZXdlcklkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9jSWR4ICE9PSAtMSAmJiB0b2NJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t0b2NJZHggKyAxXSAvLyBlLmcuIHVybCAvYXBwL3RvYy88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmlld2VySWR4ICE9PSAtMSAmJiB2aWV3ZXJJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAyKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t2aWV3ZXJJZHggKyAyXSAvLyBlLmcuIHVybCAvYXBwL3ZpZXdlci88Y29udGVudF90eXBlPi88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3V0aWxzL3NyYy9saWIvc2VydmljZXMvdXNlci1wcmVmZXJlbmNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElVc2VyUHJlZmVyZW5jZSB7XHJcbiAgc2VsZWN0ZWRUaGVtZTogc3RyaW5nXHJcbiAgc2VsZWN0ZWRGb250OiBzdHJpbmdcclxuICBzZWxlY3RlZExvY2FsZTogc3RyaW5nXHJcbiAgaXNEYXJrTW9kZTogYm9vbGVhblxyXG4gIGlzSW50cmFuZXRBbGxvd2VkPzogYm9vbGVhblxyXG4gIGlzUlRMOiBib29sZWFuXHJcbiAgY29sb3JQYWxsZXQ6IHN0cmluZ1tdXHJcbiAgZGVmYXVsdENhcmRUeXBlOiBzdHJpbmdcclxuICBwaW5uZWRBcHBzOiBzdHJpbmdcclxuICBzZWxlY3RlZExhbmdHcm91cD86IHN0cmluZ1xyXG4gIGNvbXBsZXRlZEFjdGl2aXR5OiBzdHJpbmdbXVxyXG4gIGNvbXBsZXRlZFRvdXI/OiBib29sZWFuXHJcbiAgcHJvZmlsZVNldHRpbmdzOiBzdHJpbmdbXVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9maWxlIHtcclxuICBzaG93UHJvZmlsZVBpY3R1cmU6IGJvb2xlYW5cclxuICBzaG93VXNlckludGVyZXN0OiBib29sZWFuXHJcbiAgc2hvd0tiRm9sbG93ZWQ6IGJvb2xlYW5cclxuICBzaG93UGxheWxpc3Q6IGJvb2xlYW5cclxuICBzaG93QXV0aG9yZWRCeU1lOiBib29sZWFuXHJcbiAgc2hvd1Jldmlld2VkQnlNZTogYm9vbGVhblxyXG4gIHNob3dCYWRnZURldGFpbHM6IGJvb2xlYW5cclxuICBzaG93QmxvZ3M6IGJvb2xlYW5cclxuICBzaG93UW5BOiBib29sZWFuXHJcbiAgLy8gc2hvd0xlYXJuaW5nVGltZTogYm9vbGVhblxyXG4gIC8vIHNob3dMZWFybmluZ1BvaW50czogYm9vbGVhblxyXG4gIC8vIHNob3dMYXN0Vmlld2VkOiBib29sZWFuXHJcbiAgLy8gc2hvd0dvYWxzOiBib29sZWFuXHJcbiAgLy8gc2hvd1RvcGljc0ZvbGxvd2VkOiBib29sZWFuXHJcbiAgLy8gc2hvd0Fzc2Vzc21lbnREZXRhaWxzOiBib29sZWFuXHJcbiAgLy8gc2hvd0NlcnRpZmljYXRpb25EZXRhaWxzOiBib29sZWFuXHJcbiAgLy8gc2hvd1VzZXJTa2lsbHM6IGJvb2xlYW5cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQb3J0YWxVcmxzIHtcclxuICBpZ290OiBzdHJpbmcsXHJcbiAgc3B2OiBzdHJpbmcsXHJcbiAgbWRvOiBzdHJpbmcsXHJcbiAgY2JjOiBzdHJpbmcsXHJcbiAgY2JwOiBzdHJpbmcsXHJcbiAgZnJhYzogc3RyaW5nXHJcbn1cclxuIl19