@sunbird-cb/toc 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -0
  2. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -0
  3. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -0
  4. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -0
  5. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -0
  6. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -0
  7. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -0
  8. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -0
  9. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -0
  10. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -0
  11. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -0
  12. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -0
  13. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -0
  14. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -0
  15. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -0
  16. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -0
  17. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -0
  18. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -0
  19. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -0
  20. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -0
  21. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -0
  22. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -0
  23. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -0
  24. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -0
  25. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -0
  26. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -0
  27. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +223 -0
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +591 -0
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -0
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -0
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -0
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -0
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -0
  34. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -0
  35. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -0
  36. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -0
  37. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -0
  38. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -0
  39. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -0
  40. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -0
  41. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -0
  42. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -0
  43. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -0
  44. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -0
  45. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -0
  46. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -0
  47. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -0
  48. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -0
  49. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -0
  50. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -0
  51. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -0
  52. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +73 -0
  53. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -0
  54. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -0
  55. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -0
  56. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -0
  57. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -0
  58. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -0
  59. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -0
  60. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -0
  61. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -0
  62. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -0
  63. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -0
  64. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -0
  65. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -0
  66. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -0
  67. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -0
  68. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -0
  69. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -0
  70. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -0
  71. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -0
  72. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -0
  73. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -0
  74. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -0
  75. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -0
  76. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -0
  77. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -0
  78. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -0
  79. package/esm2022/lib/_collection-api.mjs +57 -0
  80. package/esm2022/lib/_constants/widget-content.constants.mjs +19 -0
  81. package/esm2022/lib/_directives/tooltip.directive.mjs +68 -0
  82. package/esm2022/lib/_models/common.model.mjs +2 -0
  83. package/esm2022/lib/_models/error.model.mjs +2 -0
  84. package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -0
  85. package/esm2022/lib/_services/rating.service.mjs +89 -0
  86. package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -0
  87. package/esm2022/lib/_services/viewer-route-util.mjs +103 -0
  88. package/esm2022/lib/_services/widget-content.model.mjs +246 -0
  89. package/esm2022/lib/_services/widget-content.service.mjs +589 -0
  90. package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -0
  91. package/esm2022/lib/app-toc-lib.module.mjs +499 -0
  92. package/esm2022/lib/collection.config.mjs +161 -0
  93. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -0
  94. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -0
  95. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -0
  96. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -0
  97. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -0
  98. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -0
  99. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -0
  100. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -0
  101. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -0
  102. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2796 -0
  103. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -0
  104. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -0
  105. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -0
  106. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -0
  107. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -0
  108. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -0
  109. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -0
  110. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -0
  111. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -0
  112. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -0
  113. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -0
  114. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -0
  115. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -0
  116. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -0
  117. package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -0
  118. package/esm2022/lib/models/app-toc.model.mjs +38 -0
  119. package/esm2022/lib/models/auto-complete.model.mjs +2 -0
  120. package/esm2022/lib/models/card-content.model.mjs +13 -0
  121. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -0
  122. package/esm2022/lib/models/discussion-forum.model.mjs +14 -0
  123. package/esm2022/lib/models/goal.model.mjs +2 -0
  124. package/esm2022/lib/models/meta-tag.model.mjs +8 -0
  125. package/esm2022/lib/models/playlist.model.mjs +2 -0
  126. package/esm2022/lib/models/profile-revamp.model.mjs +2 -0
  127. package/esm2022/lib/models/rating.model.mjs +2 -0
  128. package/esm2022/lib/models/user-profile.model.mjs +21 -0
  129. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -0
  130. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -0
  131. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -0
  132. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -0
  133. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -0
  134. package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -0
  135. package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -0
  136. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -0
  137. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -0
  138. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -0
  139. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -0
  140. package/esm2022/lib/services/access-control.service.mjs +56 -0
  141. package/esm2022/lib/services/action.service.mjs +23 -0
  142. package/esm2022/lib/services/app-toc-v2.service.mjs +47 -0
  143. package/esm2022/lib/services/app-toc.service.mjs +1001 -0
  144. package/esm2022/lib/services/certificate.service.mjs +69 -0
  145. package/esm2022/lib/services/discuss-utils.service.mjs +58 -0
  146. package/esm2022/lib/services/editor.service.mjs +34 -0
  147. package/esm2022/lib/services/load-check.service.mjs +21 -0
  148. package/esm2022/lib/services/loader.service.mjs +33 -0
  149. package/esm2022/lib/services/mobile-apps.service.mjs +67 -0
  150. package/esm2022/lib/services/netcore.service.mjs +56 -0
  151. package/esm2022/lib/services/nps-grid.service.mjs +31 -0
  152. package/esm2022/lib/services/otp.service.mjs +43 -0
  153. package/esm2022/lib/services/profile-v2.service.mjs +43 -0
  154. package/esm2022/lib/services/reset-ratings.service.mjs +19 -0
  155. package/esm2022/lib/services/resource-download-helper.service.mjs +64 -0
  156. package/esm2022/lib/services/timer.service.mjs +23 -0
  157. package/esm2022/lib/services/title-tag.service.mjs +71 -0
  158. package/esm2022/lib/services/user-profile.service.mjs +55 -0
  159. package/esm2022/lib/services/viewer-data.service.mjs +64 -0
  160. package/esm2022/lib/services/viewer-util.service.mjs +500 -0
  161. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -0
  162. package/esm2022/lib/share-toc/share-toc.module.mjs +119 -0
  163. package/esm2022/public-api.mjs +56 -0
  164. package/esm2022/sunbird-cb-toc.mjs +5 -0
  165. package/fesm2022/sunbird-cb-toc.mjs +23517 -0
  166. package/fesm2022/sunbird-cb-toc.mjs.map +1 -0
  167. package/index.d.ts +6 -0
  168. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -0
  169. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
  170. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -0
  171. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
  172. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -0
  173. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
  174. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -0
  175. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
  176. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -0
  177. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
  178. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -0
  179. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
  180. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -0
  181. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
  182. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -0
  183. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
  184. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -0
  185. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
  186. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -0
  187. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
  188. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -0
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
  190. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -0
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
  192. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -0
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
  194. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -0
  195. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
  196. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -0
  197. package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
  198. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -0
  199. package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
  200. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -0
  201. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
  202. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -0
  203. package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
  204. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -0
  205. package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
  206. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -0
  207. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
  208. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -0
  209. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
  210. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -0
  211. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
  212. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -0
  213. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
  214. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -0
  215. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
  216. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -0
  217. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
  218. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -0
  219. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
  220. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -0
  221. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
  222. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +92 -0
  223. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
  224. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -0
  225. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
  226. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -0
  227. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
  228. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -0
  229. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
  230. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -0
  231. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
  232. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -0
  233. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
  234. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -0
  235. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
  236. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -0
  237. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
  238. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -0
  239. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
  240. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -0
  241. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
  242. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -0
  243. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
  244. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -0
  245. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
  246. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -0
  247. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
  248. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -0
  249. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
  250. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -0
  251. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
  252. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -0
  253. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
  254. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -0
  255. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
  256. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -0
  257. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
  258. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -0
  259. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
  260. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -0
  261. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
  262. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -0
  263. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
  264. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -0
  265. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
  266. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -0
  267. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
  268. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -0
  269. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
  270. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +17 -0
  271. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
  272. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -0
  273. package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
  274. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -0
  275. package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
  276. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -0
  277. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
  278. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -0
  279. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
  280. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -0
  281. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
  282. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -0
  283. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
  284. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -0
  285. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
  286. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -0
  287. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
  288. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -0
  289. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
  290. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -0
  291. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
  292. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -0
  293. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
  294. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -0
  295. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
  296. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -0
  297. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
  298. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -0
  299. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
  300. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -0
  301. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
  302. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -0
  303. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
  304. package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -0
  305. package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
  306. package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -0
  307. package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
  308. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -0
  309. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
  310. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -0
  311. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
  312. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -0
  313. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
  314. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -0
  315. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
  316. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -0
  317. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
  318. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -0
  319. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
  320. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -0
  321. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
  322. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -0
  323. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
  324. package/lib/_collection-api.d.ts +35 -0
  325. package/lib/_collection-api.d.ts.map +1 -0
  326. package/lib/_constants/widget-content.constants.d.ts +8 -0
  327. package/lib/_constants/widget-content.constants.d.ts.map +1 -0
  328. package/lib/_directives/tooltip.directive.d.ts +18 -0
  329. package/lib/_directives/tooltip.directive.d.ts.map +1 -0
  330. package/lib/_models/common.model.d.ts +4 -0
  331. package/lib/_models/common.model.d.ts.map +1 -0
  332. package/lib/_models/error.model.d.ts +6 -0
  333. package/lib/_models/error.model.d.ts.map +1 -0
  334. package/lib/_pipes/highlight.pipe.d.ts +11 -0
  335. package/lib/_pipes/highlight.pipe.d.ts.map +1 -0
  336. package/lib/_services/rating.service.d.ts +19 -0
  337. package/lib/_services/rating.service.d.ts.map +1 -0
  338. package/lib/_services/samuhik-charcha.service.d.ts +14 -0
  339. package/lib/_services/samuhik-charcha.service.d.ts.map +1 -0
  340. package/lib/_services/viewer-route-util.d.ts +9 -0
  341. package/lib/_services/viewer-route-util.d.ts.map +1 -0
  342. package/lib/_services/widget-content.model.d.ts +515 -0
  343. package/lib/_services/widget-content.model.d.ts.map +1 -0
  344. package/lib/_services/widget-content.service.d.ts +101 -0
  345. package/lib/_services/widget-content.service.d.ts.map +1 -0
  346. package/lib/_shared/translate-loader.factory.d.ts +8 -0
  347. package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
  348. package/lib/app-toc-lib.module.d.ts +89 -0
  349. package/lib/app-toc-lib.module.d.ts.map +1 -0
  350. package/lib/collection.config.d.ts +160 -0
  351. package/lib/collection.config.d.ts.map +1 -0
  352. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -0
  353. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
  354. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -0
  355. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
  356. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -0
  357. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
  358. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -0
  359. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
  360. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -0
  361. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
  362. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -0
  363. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
  364. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -0
  365. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
  366. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -0
  367. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
  368. package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -0
  369. package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  370. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +386 -0
  371. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
  372. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -0
  373. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
  374. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -0
  375. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
  376. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -0
  377. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
  378. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -0
  379. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
  380. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -0
  381. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
  382. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -0
  383. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
  384. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -0
  385. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
  386. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -0
  387. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
  388. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -0
  389. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
  390. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -0
  391. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
  392. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -0
  393. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
  394. package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -0
  395. package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
  396. package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -0
  397. package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
  398. package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -0
  399. package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
  400. package/lib/models/app-toc-analytics.model.d.ts +153 -0
  401. package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
  402. package/lib/models/app-toc.model.d.ts +85 -0
  403. package/lib/models/app-toc.model.d.ts.map +1 -0
  404. package/lib/models/auto-complete.model.d.ts +28 -0
  405. package/lib/models/auto-complete.model.d.ts.map +1 -0
  406. package/lib/models/card-content.model.d.ts +20 -0
  407. package/lib/models/card-content.model.d.ts.map +1 -0
  408. package/lib/models/content-strip-with-tabs.model.d.ts +45 -0
  409. package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
  410. package/lib/models/discussion-forum.model.d.ts +41 -0
  411. package/lib/models/discussion-forum.model.d.ts.map +1 -0
  412. package/lib/models/goal.model.d.ts +23 -0
  413. package/lib/models/goal.model.d.ts.map +1 -0
  414. package/lib/models/meta-tag.model.d.ts +7 -0
  415. package/lib/models/meta-tag.model.d.ts.map +1 -0
  416. package/lib/models/playlist.model.d.ts +24 -0
  417. package/lib/models/playlist.model.d.ts.map +1 -0
  418. package/lib/models/profile-revamp.model.d.ts +15 -0
  419. package/lib/models/profile-revamp.model.d.ts.map +1 -0
  420. package/lib/models/rating.model.d.ts +18 -0
  421. package/lib/models/rating.model.d.ts.map +1 -0
  422. package/lib/models/user-profile.model.d.ts +38 -0
  423. package/lib/models/user-profile.model.d.ts.map +1 -0
  424. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -0
  425. package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
  426. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -0
  427. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
  428. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -0
  429. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
  430. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -0
  431. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
  432. package/lib/resolvers/app-toc-resolver.service.d.ts +17 -0
  433. package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
  434. package/lib/resolvers/config-resolver.service.d.ts +12 -0
  435. package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
  436. package/lib/resolvers/profile-resolver.service.d.ts +12 -0
  437. package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
  438. package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -0
  439. package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
  440. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -0
  441. package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  442. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -0
  443. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
  444. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -0
  445. package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
  446. package/lib/services/access-control.service.d.ts +30 -0
  447. package/lib/services/access-control.service.d.ts.map +1 -0
  448. package/lib/services/action.service.d.ts +10 -0
  449. package/lib/services/action.service.d.ts.map +1 -0
  450. package/lib/services/app-toc-v2.service.d.ts +8 -0
  451. package/lib/services/app-toc-v2.service.d.ts.map +1 -0
  452. package/lib/services/app-toc.service.d.ts +131 -0
  453. package/lib/services/app-toc.service.d.ts.map +1 -0
  454. package/lib/services/certificate.service.d.ts +43 -0
  455. package/lib/services/certificate.service.d.ts.map +1 -0
  456. package/lib/services/discuss-utils.service.d.ts +34 -0
  457. package/lib/services/discuss-utils.service.d.ts.map +1 -0
  458. package/lib/services/editor.service.d.ts +18 -0
  459. package/lib/services/editor.service.d.ts.map +1 -0
  460. package/lib/services/load-check.service.d.ts +9 -0
  461. package/lib/services/load-check.service.d.ts.map +1 -0
  462. package/lib/services/loader.service.d.ts +17 -0
  463. package/lib/services/loader.service.d.ts.map +1 -0
  464. package/lib/services/mobile-apps.service.d.ts +39 -0
  465. package/lib/services/mobile-apps.service.d.ts.map +1 -0
  466. package/lib/services/netcore.service.d.ts +34 -0
  467. package/lib/services/netcore.service.d.ts.map +1 -0
  468. package/lib/services/nps-grid.service.d.ts +16 -0
  469. package/lib/services/nps-grid.service.d.ts.map +1 -0
  470. package/lib/services/otp.service.d.ts +21 -0
  471. package/lib/services/otp.service.d.ts.map +1 -0
  472. package/lib/services/profile-v2.service.d.ts +21 -0
  473. package/lib/services/profile-v2.service.d.ts.map +1 -0
  474. package/lib/services/reset-ratings.service.d.ts +9 -0
  475. package/lib/services/reset-ratings.service.d.ts.map +1 -0
  476. package/lib/services/resource-download-helper.service.d.ts +30 -0
  477. package/lib/services/resource-download-helper.service.d.ts.map +1 -0
  478. package/lib/services/timer.service.d.ts +10 -0
  479. package/lib/services/timer.service.d.ts.map +1 -0
  480. package/lib/services/title-tag.service.d.ts +22 -0
  481. package/lib/services/title-tag.service.d.ts.map +1 -0
  482. package/lib/services/user-profile.service.d.ts +25 -0
  483. package/lib/services/user-profile.service.d.ts.map +1 -0
  484. package/lib/services/viewer-data.service.d.ts +59 -0
  485. package/lib/services/viewer-data.service.d.ts.map +1 -0
  486. package/lib/services/viewer-util.service.d.ts +63 -0
  487. package/lib/services/viewer-util.service.d.ts.map +1 -0
  488. package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -0
  489. package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
  490. package/lib/share-toc/share-toc.module.d.ts +33 -0
  491. package/lib/share-toc/share-toc.module.d.ts.map +1 -0
  492. package/package.json +36 -0
  493. package/public-api.d.ts +44 -0
  494. package/public-api.d.ts.map +1 -0
  495. package/sunbird-cb-toc.d.ts.map +1 -0
@@ -0,0 +1,183 @@
1
+ import { Component, Inject, ViewChild } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import { ConfirmationDialogComponent } from '@sunbird-cb/consumption';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "../../../../services/app-toc.service";
7
+ import * as i3 from "@sunbird-cb/utils-v2";
8
+ import * as i4 from "@angular/platform-browser";
9
+ import * as i5 from "@angular/material/dialog";
10
+ import * as i6 from "@angular/material/legacy-dialog";
11
+ import * as i7 from "@angular/material/legacy-snack-bar";
12
+ import * as i8 from "@angular/common";
13
+ import * as i9 from "@angular/material/icon";
14
+ import * as i10 from "@angular/material/progress-spinner";
15
+ import * as i11 from "@ngx-translate/core";
16
+ export class AssignmentViewerComponent {
17
+ constructor(router, tocSvc, configSvc, sanitizer, dialogRef, data, dialogLegacy, snackBar) {
18
+ this.router = router;
19
+ this.tocSvc = tocSvc;
20
+ this.configSvc = configSvc;
21
+ this.sanitizer = sanitizer;
22
+ this.dialogRef = dialogRef;
23
+ this.data = data;
24
+ this.dialogLegacy = dialogLegacy;
25
+ this.snackBar = snackBar;
26
+ this.documentUrl = '';
27
+ this.documentType = '';
28
+ this.loading = true;
29
+ this.error = false;
30
+ this.errorMessage = '';
31
+ this.safeSrc = null;
32
+ this.height = '750px';
33
+ this.width = '80%';
34
+ }
35
+ ngOnInit() {
36
+ // this.documentUrl = 'https://portal.dev.karmayogibharat.net/content-store/content/do_1144038388811530241163/artifact/do_1144038388811530241163_1758281114109_leave-policy_ver-4.1.docx1758281113936.pdf'
37
+ // this.documentUrl = 'https://portal.dev.karmayogibharat.net/content-store/content/do_1144038206161797121162/artifact/do_1144038206161797121162_1758278884521_sravan.resume1758278884414.docx'
38
+ this.documentUrl = this.data.url;
39
+ if (this.documentUrl.toLowerCase().endsWith('.pdf')) {
40
+ this.documentType = 'pdf';
41
+ }
42
+ else if (this.documentUrl.toLowerCase().endsWith('.docx')) {
43
+ this.documentType = 'docx';
44
+ }
45
+ else if (this.documentUrl.toLowerCase().endsWith('.doc')) {
46
+ this.documentType = 'doc';
47
+ }
48
+ this.processDocumentUrl();
49
+ }
50
+ processDocumentUrl() {
51
+ try {
52
+ if (this.documentType === 'pdf') {
53
+ const pdfUrlWithParams = this.documentUrl + '#toolbar=0&navpanes=0&scrollbar=0';
54
+ this.safeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(pdfUrlWithParams);
55
+ }
56
+ else if (['doc', 'docx'].includes(this.documentType)) {
57
+ setTimeout(() => {
58
+ const googleDocsUrl = `https://docs.google.com/viewer?url=${encodeURIComponent(this.documentUrl)}&embedded=true&chrome=false&disablePopouts=true&hideControls=1&nocache=${Date.now()}`;
59
+ this.safeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(googleDocsUrl);
60
+ console.log('Google Docs viewer URL:', googleDocsUrl);
61
+ }, 1000);
62
+ }
63
+ this.loading = false;
64
+ }
65
+ catch (err) {
66
+ this.error = true;
67
+ this.loading = false;
68
+ this.errorMessage = err instanceof Error ? err.message : 'Error loading document';
69
+ console.error('Document viewer error:', err);
70
+ }
71
+ }
72
+ onIframeLoad() {
73
+ this.loading = false;
74
+ }
75
+ onIframeError() {
76
+ this.loading = false;
77
+ this.error = true;
78
+ this.errorMessage = 'Failed to load the document';
79
+ }
80
+ ngAfterViewInit() {
81
+ if (this.docIframe && this.docIframe.nativeElement) {
82
+ try {
83
+ const iframeDoc = this.docIframe.nativeElement.contentDocument ||
84
+ this.docIframe.nativeElement.contentWindow.document;
85
+ const style = iframeDoc.createElement('style');
86
+ style.textContent = `
87
+ .Header, #BrandBar, #CommandBar, .CommandBar, .TabContainer, .MenuBar {
88
+ display: none !important;
89
+ }
90
+ `;
91
+ iframeDoc.head.appendChild(style);
92
+ }
93
+ catch (e) {
94
+ console.log('Cannot access iframe content due to security restrictions');
95
+ }
96
+ }
97
+ }
98
+ handleClose() {
99
+ this.submitAssignmentAsDraft();
100
+ }
101
+ submitAssignmentAsDraft() {
102
+ const payload = {
103
+ submitUrl: this.documentUrl,
104
+ formId: this.data.assessment.formId,
105
+ };
106
+ this.tocSvc.submitDraftAssignment(payload).subscribe((res) => {
107
+ if (res && res.responseCode && res.responseCode === 'OK') {
108
+ this.openSnackbar('Assignment saved as a draft');
109
+ this.dialogRef.close();
110
+ }
111
+ }, error => {
112
+ this.dialogRef.close();
113
+ console.error('Error submitting assignment', error);
114
+ });
115
+ }
116
+ submitAssignment() {
117
+ const payload = {
118
+ submitUrl: this.documentUrl,
119
+ formId: this.data.assessment.formId,
120
+ };
121
+ this.tocSvc.submitAssignment(payload).subscribe((res) => {
122
+ if (res && res.responseCode && res.responseCode === 'OK') {
123
+ this.openSnackbar('Assignment Submitted Successfully');
124
+ this.dialogRef.close();
125
+ }
126
+ }, error => {
127
+ this.dialogRef.close();
128
+ console.error('Error submitting assignment', error);
129
+ });
130
+ }
131
+ handleSubmitAssignment() {
132
+ const dialgoData = {
133
+ description: 'Are you sure you want to submit your assignment? Once submitted, you won’t be able to make any changes',
134
+ iconName: 'info_circle',
135
+ type: 'warning',
136
+ buttonsPositionClass: 'justify-center items-center',
137
+ buttons: [
138
+ {
139
+ classes: 'btn-out-line',
140
+ text: 'Discard',
141
+ response: false
142
+ },
143
+ {
144
+ classes: 'succes-button',
145
+ text: 'Submit',
146
+ response: true
147
+ }
148
+ ]
149
+ };
150
+ const dialogRef = this.dialogLegacy.open(ConfirmationDialogComponent, {
151
+ data: dialgoData,
152
+ disableClose: true,
153
+ width: '400px',
154
+ maxWidth: '90vw'
155
+ });
156
+ dialogRef.afterClosed().subscribe((result) => {
157
+ if (result) {
158
+ this.submitAssignment();
159
+ }
160
+ else {
161
+ this.dialogRef.close();
162
+ }
163
+ });
164
+ }
165
+ openSnackbar(primaryMsg, duration = 5000) {
166
+ this.snackBar.open(primaryMsg, 'X', {
167
+ duration,
168
+ });
169
+ }
170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerComponent, deps: [{ token: i1.Router }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.MatLegacyDialog }, { token: i7.MatLegacySnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AssignmentViewerComponent, selector: "ws-widget-app-assignment-viewer", viewQueries: [{ propertyName: "docIframe", first: true, predicate: ["docIframe"], descendants: true }], ngImport: i0, template: "<div class=\"document-viewer-container\">\n <!-- Loading spinner -->\n <div *ngIf=\"loading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n\n <!-- Error message -->\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n <p class=\"error-url\">URL: {{ documentUrl }}</p>\n </div>\n\n\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"loading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"!loading && !error\">\n <div *ngIf=\"!error\" class=\"iframe-container pb-4\" [ngStyle]=\"{ 'height': height, 'width': '100%' }\">\n <iframe *ngIf=\"safeSrc\" [src]=\"safeSrc\" [ngStyle]=\"{ 'width': '100%', 'height': '100%' }\" frameborder=\"1\"\n (load)=\"onIframeLoad()\" (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n </div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:8px}.error-container .error-url{font-size:14px;color:#0009;word-break:break-all;max-width:100%}.iframe-container{width:800px}.iframe-container iframe{border:none;width:800px;height:100%}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
172
+ }
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerComponent, decorators: [{
174
+ type: Component,
175
+ args: [{ selector: 'ws-widget-app-assignment-viewer', template: "<div class=\"document-viewer-container\">\n <!-- Loading spinner -->\n <div *ngIf=\"loading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n\n <!-- Error message -->\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n <p class=\"error-url\">URL: {{ documentUrl }}</p>\n </div>\n\n\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"loading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"!loading && !error\">\n <div *ngIf=\"!error\" class=\"iframe-container pb-4\" [ngStyle]=\"{ 'height': height, 'width': '100%' }\">\n <iframe *ngIf=\"safeSrc\" [src]=\"safeSrc\" [ngStyle]=\"{ 'width': '100%', 'height': '100%' }\" frameborder=\"1\"\n (load)=\"onIframeLoad()\" (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n </div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:8px}.error-container .error-url{font-size:14px;color:#0009;word-break:break-all;max-width:100%}.iframe-container{width:800px}.iframe-container iframe{border:none;width:800px;height:100%}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"] }]
176
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
177
+ type: Inject,
178
+ args: [MAT_DIALOG_DATA]
179
+ }] }, { type: i6.MatLegacyDialog }, { type: i7.MatLegacySnackBar }]; }, propDecorators: { docIframe: [{
180
+ type: ViewChild,
181
+ args: ['docIframe']
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlci9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFBO0FBS3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFBOzs7Ozs7Ozs7Ozs7O0FBVXJFLE1BQU0sT0FBTyx5QkFBeUI7SUFVcEMsWUFBbUIsTUFBYyxFQUN4QixNQUFxQixFQUNyQixTQUFnQyxFQUMvQixTQUF1QixFQUN4QixTQUFrRCxFQUN6QixJQUFTLEVBQ2pDLFlBQTZCLEVBQzdCLFFBQTJCO1FBUGxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUMvQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXlDO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FB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U0FDRixDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEUsSUFBSSxFQUFFLFVBQVU7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLE9BQU87WUFDZCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUE7UUFFRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7YUFDeEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0E3SlUseUJBQXlCLGtLQWUxQixlQUFlO21HQWZkLHlCQUF5QiwrS0NoQnRDLCtyREF1Q1E7OzRGRHZCSyx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0UsaUNBQWlDOzswQkFvQnhDLE1BQU07MkJBQUMsZUFBZTswR0FSRCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLXdpZGdldC1hcHAtYXNzaWdubWVudC12aWV3ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBBc3NpZ25tZW50Vmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZG9jdW1lbnRVcmwgPSAnJ1xuICBkb2N1bWVudFR5cGUgPSAnJ1xuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZVxuICBlcnJvcjogYm9vbGVhbiA9IGZhbHNlXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJydcbiAgc2FmZVNyYzogU2FmZVJlc291cmNlVXJsIHwgbnVsbCA9IG51bGxcbiAgQFZpZXdDaGlsZCgnZG9jSWZyYW1lJykgZG9jSWZyYW1lOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkXG4gIGhlaWdodDogc3RyaW5nID0gJzc1MHB4J1xuICB3aWR0aDogc3RyaW5nID0gJzgwJSdcbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHVibGljIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFzc2lnbm1lbnRWaWV3ZXJDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZGlhbG9nTGVnYWN5OiBNYXRMZWdhY3lEaWFsb2csXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0TGVnYWN5U25hY2tCYXIsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gdGhpcy5kb2N1bWVudFVybCA9ICdodHRwczovL3BvcnRhbC5kZXYua2FybWF5b2dpYmhhcmF0Lm5ldC9jb250ZW50LXN0b3JlL2NvbnRlbnQvZG9fMTE0NDAzODM4ODgxMTUzMDI0MTE2My9hcnRpZmFjdC9kb18xMTQ0MDM4Mzg4ODExNTMwMjQxMTYzXzE3NTgyODExMTQxMDlfbGVhdmUtcG9saWN5X3Zlci00LjEuZG9jeDE3NTgyODExMTM5MzYucGRmJ1xuICAgIC8vIHRoaXMuZG9jdW1lbnRVcmwgPSAnaHR0cHM6Ly9wb3J0YWwuZGV2Lmthcm1heW9naWJoYXJhdC5uZXQvY29udGVudC1zdG9yZS9jb250ZW50L2RvXzExNDQwMzgyMDYxNjE3OTcxMjExNjIvYXJ0aWZhY3QvZG9fMTE0NDAzODIwNjE2MTc5NzEyMTE2Ml8xNzU4Mjc4ODg0NTIxX3NyYXZhbi5yZXN1bWUxNzU4Mjc4ODg0NDE0LmRvY3gnXG4gICAgdGhpcy5kb2N1bWVudFVybCA9IHRoaXMuZGF0YS51cmxcbiAgICBpZiAodGhpcy5kb2N1bWVudFVybC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcucGRmJykpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0gJ3BkZidcbiAgICB9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnRVcmwudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmRvY3gnKSkge1xuICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSAnZG9jeCdcbiAgICB9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnRVcmwudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmRvYycpKSB7XG4gICAgICB0aGlzLmRvY3VtZW50VHlwZSA9ICdkb2MnXG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50VXJsKClcbiAgfVxuXG4gIHByb2Nlc3NEb2N1bWVudFVybCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRUeXBlID09PSAncGRmJykge1xuICAgICAgICBjb25zdCBwZGZVcmxXaXRoUGFyYW1zID0gdGhpcy5kb2N1bWVudFVybCArICcjdG9vbGJhcj0wJm5hdnBhbmVzPTAmc2Nyb2xsYmFyPTAnXG4gICAgICAgIHRoaXMuc2FmZVNyYyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChwZGZVcmxXaXRoUGFyYW1zKVxuICAgICAgfSBlbHNlIGlmIChbJ2RvYycsICdkb2N4J10uaW5jbHVkZXModGhpcy5kb2N1bWVudFR5cGUpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdvb2dsZURvY3NVcmwgPSBgaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vdmlld2VyP3VybD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRvY3VtZW50VXJsKX0mZW1iZWRkZWQ9dHJ1ZSZjaHJvbWU9ZmFsc2UmZGlzYWJsZVBvcG91dHM9dHJ1ZSZoaWRlQ29udHJvbHM9MSZub2NhY2hlPSR7RGF0ZS5ub3coKX1gXG4gICAgICAgICAgdGhpcy5zYWZlU3JjID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGdvb2dsZURvY3NVcmwpXG4gICAgICAgICAgY29uc29sZS5sb2coJ0dvb2dsZSBEb2NzIHZpZXdlciBVUkw6JywgZ29vZ2xlRG9jc1VybClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9yID0gdHJ1ZVxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdFcnJvciBsb2FkaW5nIGRvY3VtZW50J1xuICAgICAgY29uc29sZS5lcnJvcignRG9jdW1lbnQgdmlld2VyIGVycm9yOicsIGVycilcbiAgICB9XG4gIH1cblxuICBvbklmcmFtZUxvYWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgfVxuXG4gIG9uSWZyYW1lRXJyb3IoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICB0aGlzLmVycm9yID0gdHJ1ZVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBsb2FkIHRoZSBkb2N1bWVudCdcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuZG9jSWZyYW1lICYmIHRoaXMuZG9jSWZyYW1lLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlmcmFtZURvYyA9IHRoaXMuZG9jSWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50IHx8XG4gICAgICAgICAgdGhpcy5kb2NJZnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG4gICAgICAgIGNvbnN0IHN0eWxlID0gaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgICAgICAgLkhlYWRlciwgI0JyYW5kQmFyLCAjQ29tbWFuZEJhciwgLkNvbW1hbmRCYXIsIC5UYWJDb250YWluZXIsIC5NZW51QmFyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgIGBcbiAgICAgICAgaWZyYW1lRG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgYWNjZXNzIGlmcmFtZSBjb250ZW50IGR1ZSB0byBzZWN1cml0eSByZXN0cmljdGlvbnMnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsb3NlKCkge1xuICAgIHRoaXMuc3VibWl0QXNzaWdubWVudEFzRHJhZnQoKVxuICB9XG5cbiAgc3VibWl0QXNzaWdubWVudEFzRHJhZnQoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHN1Ym1pdFVybDogdGhpcy5kb2N1bWVudFVybCxcbiAgICAgIGZvcm1JZDogdGhpcy5kYXRhLmFzc2Vzc21lbnQuZm9ybUlkLFxuICAgIH1cbiAgICB0aGlzLnRvY1N2Yy5zdWJtaXREcmFmdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Fzc2lnbm1lbnQgc2F2ZWQgYXMgYSBkcmFmdCcpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdWJtaXR0aW5nIGFzc2lnbm1lbnQnLCBlcnJvcilcbiAgICB9KVxuICB9XG5cbiAgc3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgc3VibWl0VXJsOiB0aGlzLmRvY3VtZW50VXJsLFxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Fzc2lnbm1lbnQgU3VibWl0dGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdWJtaXR0aW5nIGFzc2lnbm1lbnQnLCBlcnJvcilcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlU3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBkaWFsZ29EYXRhID0ge1xuICAgICAgZGVzY3JpcHRpb246ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3VibWl0IHlvdXIgYXNzaWdubWVudD8gT25jZSBzdWJtaXR0ZWQsIHlvdSB3b27igJl0IGJlIGFibGUgdG8gbWFrZSBhbnkgY2hhbmdlcycsXG4gICAgICBpY29uTmFtZTogJ2luZm9fY2lyY2xlJyxcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgIGJ1dHRvbnNQb3NpdGlvbkNsYXNzOiAnanVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdidG4tb3V0LWxpbmUnLFxuICAgICAgICAgIHRleHQ6ICdEaXNjYXJkJyxcbiAgICAgICAgICByZXNwb25zZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uJyxcbiAgICAgICAgICB0ZXh0OiAnU3VibWl0JyxcbiAgICAgICAgICByZXNwb25zZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nTGVnYWN5Lm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkaWFsZ29EYXRhLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnXG4gICAgfSlcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkb2N1bWVudC12aWV3ZXItY29udGFpbmVyXCI+XG4gIDwhLS0gTG9hZGluZyBzcGlubmVyIC0tPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI0MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgPHAgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIGRvY3VtZW50Li4uPC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICA8cCBjbGFzcz1cImVycm9yLXVybFwiPlVSTDoge3sgZG9jdW1lbnRVcmwgfX08L3A+XG4gIDwvZGl2PlxuXG5cbiAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1kaXZcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IGNhbGMoMTAwdmggLSAxMDdweCk7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdC10aXRsZSBmb250LWJvbGQgcC01IG1iLTUgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGRpdj5Qb3N0IEFzc2lnbm1lbnQgUHJldmlldzwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNFwiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImRpc2NhcmQtYnRuIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImhhbmRsZUNsb3NlKClcIj5cbiAgICAgICAgICAgIHt7ICd1c2VyQXNzaWdubWVudHMuZGlzY2FyZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzdWJtaXQtYnRuIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdEFzc2lnbm1lbnQoKVwiPlxuICAgICAgICAgICAge3sgJ3VzZXJBc3NpZ25tZW50cy5zdWJtaXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyc1wiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI0MFwiIGNsYXNzPVwiYmx1ZS1zcGlubmVyIG0tYXV0b1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhZXJyb3JcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFlcnJvclwiIGNsYXNzPVwiaWZyYW1lLWNvbnRhaW5lciAgcGItNFwiIFtuZ1N0eWxlXT1cInsgJ2hlaWdodCc6IGhlaWdodCwgJ3dpZHRoJzogJzEwMCUnIH1cIj5cbiAgICAgICAgICA8aWZyYW1lICpuZ0lmPVwic2FmZVNyY1wiIFtzcmNdPVwic2FmZVNyY1wiIFtuZ1N0eWxlXT1cInsgJ3dpZHRoJzogJzEwMCUnLCAnaGVpZ2h0JzogJzEwMCUnIH1cIiBmcmFtZWJvcmRlcj1cIjFcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JZnJhbWVMb2FkKClcIiAoZXJyb3IpPVwib25JZnJhbWVFcnJvcigpXCI+XG4gICAgICAgICAgPC9pZnJhbWU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiJdfQ==
@@ -0,0 +1,327 @@
1
+ // app-toc-assignment-viewerV2.component.ts
2
+ import { Component, Inject } from '@angular/core';
3
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
+ import { ConfirmationDialogComponent } from '@sunbird-cb/consumption';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "../../../../services/app-toc.service";
8
+ import * as i3 from "@sunbird-cb/utils-v2";
9
+ import * as i4 from "@angular/platform-browser";
10
+ import * as i5 from "@angular/material/dialog";
11
+ import * as i6 from "@angular/material/legacy-dialog";
12
+ import * as i7 from "@angular/material/legacy-snack-bar";
13
+ import * as i8 from "@angular/common";
14
+ import * as i9 from "@angular/material/icon";
15
+ import * as i10 from "@angular/material/progress-spinner";
16
+ import * as i11 from "@ngx-translate/core";
17
+ export class AssignmentViewerV2Component {
18
+ constructor(router, tocSvc, configSvc, sanitizer, dialogRef, data, dialogLegacy, snackBar) {
19
+ this.router = router;
20
+ this.tocSvc = tocSvc;
21
+ this.configSvc = configSvc;
22
+ this.sanitizer = sanitizer;
23
+ this.dialogRef = dialogRef;
24
+ this.data = data;
25
+ this.dialogLegacy = dialogLegacy;
26
+ this.snackBar = snackBar;
27
+ // Properties for file preview
28
+ this.safeSrc = null;
29
+ this.fileBlob = null;
30
+ this.fileUrl = '';
31
+ this.fileType = '';
32
+ this.fileName = '';
33
+ this.isLoading = false;
34
+ this.error = false;
35
+ this.errorMessage = '';
36
+ this.showPdfViewer = false;
37
+ this.showDownloadOption = false;
38
+ this.documentNotSupported = false;
39
+ }
40
+ ngOnInit() {
41
+ if (this.data.url) {
42
+ const urlParts = this.data.url.split('/');
43
+ this.fileName = urlParts[urlParts.length - 1];
44
+ this.fileName = this.fileName.split('?')[0];
45
+ this.fileName = decodeURIComponent(this.fileName);
46
+ this.fileType = this.getFileType(this.fileName);
47
+ this.readFile();
48
+ }
49
+ }
50
+ readFile() {
51
+ if (!this.data.contentId) {
52
+ this.handleError('Content ID is missing');
53
+ return;
54
+ }
55
+ if (!this.data.batchId) {
56
+ this.handleError('Batch ID is missing');
57
+ return;
58
+ }
59
+ if (!this.data.assessment?.id) {
60
+ this.handleError('Assignment ID is missing');
61
+ return;
62
+ }
63
+ if (!this.fileName) {
64
+ this.handleError('File name is missing');
65
+ return;
66
+ }
67
+ this.isLoading = true;
68
+ this.error = false;
69
+ this.tocSvc.readAssignmentFile(this.data.contentId, this.data.batchId, this.data.assessment.formId, this.fileName).subscribe({
70
+ next: (res) => {
71
+ if (res) {
72
+ this.processFileData(res);
73
+ }
74
+ else {
75
+ this.handleError('No file data received');
76
+ }
77
+ },
78
+ error: (error) => {
79
+ this.handleError(`Failed to load file: ${error.message || 'Unknown error'}`);
80
+ }
81
+ });
82
+ }
83
+ handleSubmitAssignment() {
84
+ const dialgoData = {
85
+ description: 'Are you sure you want to submit your assignment? Once submitted, you won’t be able to make any changes',
86
+ iconName: 'info_circle',
87
+ type: 'warning',
88
+ buttonsPositionClass: 'justify-center items-center',
89
+ buttons: [
90
+ {
91
+ classes: 'btn-out-line',
92
+ text: 'Discard',
93
+ response: false
94
+ },
95
+ {
96
+ classes: 'succes-button',
97
+ text: 'Submit',
98
+ response: true
99
+ }
100
+ ]
101
+ };
102
+ const dialogRef = this.dialogLegacy.open(ConfirmationDialogComponent, {
103
+ data: dialgoData,
104
+ disableClose: true,
105
+ width: '400px',
106
+ maxWidth: '90vw'
107
+ });
108
+ dialogRef.afterClosed().subscribe((result) => {
109
+ if (result) {
110
+ this.submitAssignment();
111
+ }
112
+ else {
113
+ this.dialogRef.close();
114
+ }
115
+ });
116
+ }
117
+ submitAssignment() {
118
+ const payload = {
119
+ submitUrl: this.data.url,
120
+ formId: this.data.assessment.formId,
121
+ };
122
+ this.tocSvc.submitAssignment(payload).subscribe((res) => {
123
+ if (res && res.responseCode && res.responseCode === 'OK') {
124
+ this.openSnackbar('Assignment Submitted Successfully');
125
+ this.dialogRef.close();
126
+ this.notifyAssignmentSubmission();
127
+ }
128
+ }, error => {
129
+ this.dialogRef.close();
130
+ console.error('Error submitting assignment', error);
131
+ });
132
+ }
133
+ async notifyAssignmentSubmission() {
134
+ const payload = {
135
+ courseId: this.data.contentId,
136
+ batchId: this.data.batchId,
137
+ assignmentTitle: this.data.assessment.title,
138
+ instructorId: this.data.assessment.createdBy,
139
+ };
140
+ this.tocSvc.notifyAssignmentSubmission(payload).subscribe((res) => {
141
+ if (res && res.responseCode && res.responseCode === 'OK') {
142
+ console.log('Notified assignment submission');
143
+ }
144
+ }, error => {
145
+ console.error('Error notifying assignment submission', error);
146
+ });
147
+ }
148
+ processFileData(fileData) {
149
+ try {
150
+ let blobData;
151
+ if (fileData instanceof Blob) {
152
+ const correctMimeType = this.getMimeType();
153
+ if (fileData.type !== correctMimeType && fileData.type.includes('multipart/form-data')) {
154
+ blobData = new Blob([fileData], { type: correctMimeType });
155
+ }
156
+ else {
157
+ blobData = fileData;
158
+ }
159
+ }
160
+ else if (fileData instanceof ArrayBuffer) {
161
+ blobData = new Blob([fileData], { type: this.getMimeType() });
162
+ }
163
+ else if (typeof fileData === 'string') {
164
+ // Check if it's base64
165
+ if (fileData.startsWith('data:')) {
166
+ // Data URL format
167
+ const response = fetch(fileData);
168
+ response.then(res => res.blob()).then(blob => {
169
+ this.fileBlob = blob;
170
+ this.createFileUrl();
171
+ this.setupViewer();
172
+ });
173
+ return;
174
+ }
175
+ else {
176
+ // Plain base64
177
+ const byteCharacters = atob(fileData);
178
+ const byteNumbers = new Array(byteCharacters.length);
179
+ for (let i = 0; i < byteCharacters.length; i++) {
180
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
181
+ }
182
+ const byteArray = new Uint8Array(byteNumbers);
183
+ blobData = new Blob([byteArray], { type: this.getMimeType() });
184
+ }
185
+ }
186
+ else {
187
+ blobData = new Blob([JSON.stringify(fileData)], { type: this.getMimeType() });
188
+ }
189
+ if (blobData.size === 0) {
190
+ throw new Error('Blob is empty (size: 0)');
191
+ }
192
+ this.fileBlob = blobData;
193
+ this.createFileUrl();
194
+ this.setupViewer();
195
+ }
196
+ catch (error) {
197
+ this.handleError(`Failed to process file data: ${error}`);
198
+ }
199
+ }
200
+ createFileUrl() {
201
+ if (this.fileBlob) {
202
+ // Clean up previous URL
203
+ if (this.fileUrl) {
204
+ URL.revokeObjectURL(this.fileUrl);
205
+ }
206
+ // Create new object URL
207
+ this.fileUrl = URL.createObjectURL(this.fileBlob);
208
+ }
209
+ else {
210
+ console.log('No file blob available to create URL');
211
+ }
212
+ }
213
+ setupViewer() {
214
+ this.isLoading = false;
215
+ if (!this.fileUrl) {
216
+ this.handleError('No file URL available');
217
+ return;
218
+ }
219
+ if (this.fileType === 'pdf') {
220
+ this.setupPdfViewer();
221
+ }
222
+ else {
223
+ this.documentNotSupported = true;
224
+ this.showDownloadOption = true;
225
+ }
226
+ }
227
+ setupPdfViewer() {
228
+ try {
229
+ // Try direct PDF viewer first
230
+ const pdfUrlWithParams = this.fileUrl + '#toolbar=0&navpanes=0&scrollbar=0';
231
+ this.safeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(pdfUrlWithParams);
232
+ this.showPdfViewer = true;
233
+ }
234
+ catch (error) {
235
+ console.error('Error setting up PDF viewer:', error);
236
+ this.handleError('Failed to setup PDF viewer');
237
+ }
238
+ }
239
+ getFileType(fileName) {
240
+ const extension = fileName.split('.').pop()?.toLowerCase();
241
+ if (extension === 'pdf') {
242
+ return 'pdf';
243
+ }
244
+ return 'unknown';
245
+ }
246
+ getMimeType() {
247
+ if (this.fileType === 'pdf') {
248
+ return 'application/pdf';
249
+ }
250
+ return 'application/octet-stream';
251
+ }
252
+ handleError(message) {
253
+ this.isLoading = false;
254
+ this.error = true;
255
+ this.errorMessage = message;
256
+ this.snackBar.open(message, 'Close', { duration: 5000 });
257
+ }
258
+ // Public methods for template
259
+ downloadFile() {
260
+ if (this.fileBlob) {
261
+ const url = URL.createObjectURL(this.fileBlob);
262
+ const a = document.createElement('a');
263
+ a.href = url;
264
+ a.download = this.fileName;
265
+ document.body.appendChild(a);
266
+ a.click();
267
+ document.body.removeChild(a);
268
+ URL.revokeObjectURL(url);
269
+ }
270
+ }
271
+ onIframeLoad() {
272
+ console.log('Iframe loaded successfully');
273
+ }
274
+ onIframeError() {
275
+ console.error('Iframe failed to load');
276
+ this.handleError('Failed to load document in viewer');
277
+ }
278
+ handleClose() {
279
+ this.submitAssignmentAsDraft();
280
+ }
281
+ openSnackbar(primaryMsg, duration = 5000) {
282
+ this.snackBar.open(primaryMsg, 'X', {
283
+ duration,
284
+ });
285
+ }
286
+ submitAssignmentAsDraft() {
287
+ const payload = {
288
+ submitUrl: this.data.url,
289
+ formId: this.data.assessment.formId,
290
+ };
291
+ this.tocSvc.submitDraftAssignment(payload).subscribe((res) => {
292
+ if (res && res.responseCode && res.responseCode === 'OK') {
293
+ this.openSnackbar('Assignment saved as a draft');
294
+ this.dialogRef.close();
295
+ }
296
+ }, error => {
297
+ this.dialogRef.close();
298
+ console.error('Error submitting assignment', error);
299
+ });
300
+ }
301
+ closeDialog() {
302
+ if (this.fileUrl) {
303
+ URL.revokeObjectURL(this.fileUrl);
304
+ }
305
+ this.dialogRef.close();
306
+ }
307
+ retryLoad() {
308
+ this.error = false;
309
+ this.errorMessage = '';
310
+ this.readFile();
311
+ }
312
+ ngOnDestroy() {
313
+ if (this.fileUrl) {
314
+ URL.revokeObjectURL(this.fileUrl);
315
+ }
316
+ }
317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, deps: [{ token: i1.Router }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.MatLegacyDialog }, { token: i7.MatLegacySnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
318
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AssignmentViewerV2Component, selector: "ws-widget-app-assignment-viewerV2", ngImport: i0, template: "<div class=\"document-viewer-container\">\n <div *ngIf=\"isLoading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n </div>\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"isLoading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\n (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
319
+ }
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, decorators: [{
321
+ type: Component,
322
+ args: [{ selector: 'ws-widget-app-assignment-viewerV2', template: "<div class=\"document-viewer-container\">\n <div *ngIf=\"isLoading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n </div>\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"isLoading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\n (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"] }]
323
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
324
+ type: Inject,
325
+ args: [MAT_DIALOG_DATA]
326
+ }] }, { type: i6.MatLegacyDialog }, { type: i7.MatLegacySnackBar }]; } });
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFPeEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUE7Ozs7Ozs7Ozs7Ozs7QUFNckUsTUFBTSxPQUFPLDJCQUEyQjtJQWV0QyxZQUNTLE1BQWMsRUFDZCxNQUFxQixFQUNyQixTQUFnQyxFQUMvQixTQUF1QixFQUN4QixTQUFvRCxFQUMzQixJQUFTLEVBQ2pDLFlBQTZCLEVBQzdCLFFBQTJCO1FBUDVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFyQnJDLDhCQUE4QjtRQUM5QixZQUFPLEdBQTJCLElBQUksQ0FBQztRQUN2QyxhQUFRLEdBQWdCLElBQUksQ0FBQztRQUM3QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDdkIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztJQVd6QixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQy9DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtTQUNoQjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUMxQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzdDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN6QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDLFNBQVMsQ0FBQztZQUNWLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsRUFBRTtvQkFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMzQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixNQUFNLFVBQVUsR0FBRztZQUNqQixXQUFXLEVBQUUsd0dBQXdHO1lBQ3JILFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLElBQUksRUFBRSxTQUFTO1lBQ2Ysb0JBQW9CLEVBQUUsNkJBQTZCO1lBQ25ELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPLEVBQUUsY0FBYztvQkFDdkIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxlQUFlO29CQUN4QixJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUUsSUFBSTtpQkFDZjthQUNGO1NBQ0YsQ0FBQTtRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BFLElBQUksRUFBRSxVQUFVO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFBO1FBRUYsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ2hELElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLE9BQU8sR0FBRztZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07U0FDcEMsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDM0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO2dCQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUN0QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTthQUNsQztRQUNILENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNyRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxLQUFLLENBQUMsMEJBQTBCO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQzFCLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQzNDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1NBQzdDLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7Z0JBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTthQUM5QztRQUNILENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDL0QsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR08sZUFBZSxDQUFDLFFBQWE7UUFDbkMsSUFBSTtZQUNGLElBQUksUUFBYyxDQUFDO1lBRW5CLElBQUksUUFBUSxZQUFZLElBQUksRUFBRTtnQkFDNUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7b0JBQ3RGLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7aUJBQzVEO3FCQUFNO29CQUNMLFFBQVEsR0FBRyxRQUFRLENBQUM7aUJBQ3JCO2FBQ0Y7aUJBQU0sSUFBSSxRQUFRLFlBQVksV0FBVyxFQUFFO2dCQUMxQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQy9EO2lCQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUN2Qyx1QkFBdUI7Z0JBQ3ZCLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFFaEMsa0JBQWtCO29CQUNsQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTztpQkFDUjtxQkFBTTtvQkFDTCxlQUFlO29CQUNmLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDOUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQy9DO29CQUNELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM5QyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRTthQUNGO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUVwQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQix3QkFBd0I7WUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNuQztZQUVELHdCQUF3QjtZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUk7WUFDRiw4QkFBOEI7WUFDOUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG1DQUFtQyxDQUFBO1lBQzNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsUUFBZ0I7UUFDbEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUUzRCxJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxpQkFBaUIsQ0FBQztTQUMxQjtRQUNELE9BQU8sMEJBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFlO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLE9BQU8sR0FBRztZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07U0FDcEMsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ3ZCO1FBQ0gsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3JELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzsrR0F2VVUsMkJBQTJCLGtLQXFCNUIsZUFBZTttR0FyQmQsMkJBQTJCLHlFQ2Z4QywrK0NBZ0NNOzs0RkRqQk8sMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLG1DQUFtQzs7MEJBeUIxQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtYXBwLWFzc2lnbm1lbnQtdmlld2VyVjInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRWaWV3ZXJWMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvLyBQcm9wZXJ0aWVzIGZvciBmaWxlIHByZXZpZXdcbiAgc2FmZVNyYzogU2FmZVJlc291cmNlVXJsIHwgbnVsbCA9IG51bGw7XG4gIGZpbGVCbG9iOiBCbG9iIHwgbnVsbCA9IG51bGw7XG4gIGZpbGVVcmw6IHN0cmluZyA9ICcnO1xuICBmaWxlVHlwZTogc3RyaW5nID0gJyc7XG4gIGZpbGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNob3dQZGZWaWV3ZXIgPSBmYWxzZTtcbiAgc2hvd0Rvd25sb2FkT3B0aW9uID0gZmFsc2U7XG4gIGRvY3VtZW50Tm90U3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHVibGljIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFzc2lnbm1lbnRWaWV3ZXJWMkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBkaWFsb2dMZWdhY3k6IE1hdExlZ2FjeURpYWxvZyxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRMZWdhY3lTbmFja0JhcixcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5kYXRhLnVybCkge1xuICAgICAgY29uc3QgdXJsUGFydHMgPSB0aGlzLmRhdGEudXJsLnNwbGl0KCcvJyk7XG4gICAgICB0aGlzLmZpbGVOYW1lID0gdXJsUGFydHNbdXJsUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZS5zcGxpdCgnPycpWzBdO1xuICAgICAgdGhpcy5maWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmZpbGVOYW1lKTtcbiAgICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKHRoaXMuZmlsZU5hbWUpXG4gICAgICB0aGlzLnJlYWRGaWxlKClcbiAgICB9XG4gIH1cblxuICByZWFkRmlsZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5jb250ZW50SWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0NvbnRlbnQgSUQgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGF0YS5iYXRjaElkKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdCYXRjaCBJRCBpcyBtaXNzaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhLmFzc2Vzc21lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdBc3NpZ25tZW50IElEIGlzIG1pc3NpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbGVOYW1lKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdGaWxlIG5hbWUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG5cbiAgICB0aGlzLnRvY1N2Yy5yZWFkQXNzaWdubWVudEZpbGUoXG4gICAgICB0aGlzLmRhdGEuY29udGVudElkLFxuICAgICAgdGhpcy5kYXRhLmJhdGNoSWQsXG4gICAgICB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgICB0aGlzLmZpbGVOYW1lXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlRGF0YShyZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ05vIGZpbGUgZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGBGYWlsZWQgdG8gbG9hZCBmaWxlOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBkaWFsZ29EYXRhID0ge1xuICAgICAgZGVzY3JpcHRpb246ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3VibWl0IHlvdXIgYXNzaWdubWVudD8gT25jZSBzdWJtaXR0ZWQsIHlvdSB3b27igJl0IGJlIGFibGUgdG8gbWFrZSBhbnkgY2hhbmdlcycsXG4gICAgICBpY29uTmFtZTogJ2luZm9fY2lyY2xlJyxcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgIGJ1dHRvbnNQb3NpdGlvbkNsYXNzOiAnanVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdidG4tb3V0LWxpbmUnLFxuICAgICAgICAgIHRleHQ6ICdEaXNjYXJkJyxcbiAgICAgICAgICByZXNwb25zZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uJyxcbiAgICAgICAgICB0ZXh0OiAnU3VibWl0JyxcbiAgICAgICAgICByZXNwb25zZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nTGVnYWN5Lm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkaWFsZ29EYXRhLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnXG4gICAgfSlcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgc3VibWl0VXJsOiB0aGlzLmRhdGEudXJsLFxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Fzc2lnbm1lbnQgU3VibWl0dGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgdGhpcy5ub3RpZnlBc3NpZ25tZW50U3VibWlzc2lvbigpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3VibWl0dGluZyBhc3NpZ25tZW50JywgZXJyb3IpXG4gICAgfSlcbiAgfVxuICBhc3luYyBub3RpZnlBc3NpZ25tZW50U3VibWlzc2lvbigpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY291cnNlSWQ6IHRoaXMuZGF0YS5jb250ZW50SWQsXG4gICAgICBiYXRjaElkOiB0aGlzLmRhdGEuYmF0Y2hJZCxcbiAgICAgIGFzc2lnbm1lbnRUaXRsZTogdGhpcy5kYXRhLmFzc2Vzc21lbnQudGl0bGUsXG4gICAgICBpbnN0cnVjdG9ySWQ6IHRoaXMuZGF0YS5hc3Nlc3NtZW50LmNyZWF0ZWRCeSxcbiAgICB9XG4gICAgdGhpcy50b2NTdmMubm90aWZ5QXNzaWdubWVudFN1Ym1pc3Npb24ocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vdGlmaWVkIGFzc2lnbm1lbnQgc3VibWlzc2lvbicpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igbm90aWZ5aW5nIGFzc2lnbm1lbnQgc3VibWlzc2lvbicsIGVycm9yKVxuICAgIH0pXG4gIH1cblxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbGVEYXRhKGZpbGVEYXRhOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JEYXRhOiBCbG9iO1xuXG4gICAgICBpZiAoZmlsZURhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RNaW1lVHlwZSA9IHRoaXMuZ2V0TWltZVR5cGUoKTtcbiAgICAgICAgaWYgKGZpbGVEYXRhLnR5cGUgIT09IGNvcnJlY3RNaW1lVHlwZSAmJiBmaWxlRGF0YS50eXBlLmluY2x1ZGVzKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtmaWxlRGF0YV0sIHsgdHlwZTogY29ycmVjdE1pbWVUeXBlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2JEYXRhID0gZmlsZURhdGE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlsZURhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtmaWxlRGF0YV0sIHsgdHlwZTogdGhpcy5nZXRNaW1lVHlwZSgpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsZURhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYmFzZTY0XG4gICAgICAgIGlmIChmaWxlRGF0YS5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG5cbiAgICAgICAgICAvLyBEYXRhIFVSTCBmb3JtYXRcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoKGZpbGVEYXRhKTtcbiAgICAgICAgICByZXNwb25zZS50aGVuKHJlcyA9PiByZXMuYmxvYigpKS50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWxlQmxvYiA9IGJsb2I7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGVVcmwoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBWaWV3ZXIoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGxhaW4gYmFzZTY0XG4gICAgICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGZpbGVEYXRhKTtcbiAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgICAgIGJsb2JEYXRhID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogdGhpcy5nZXRNaW1lVHlwZSgpIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShmaWxlRGF0YSldLCB7IHR5cGU6IHRoaXMuZ2V0TWltZVR5cGUoKSB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChibG9iRGF0YS5zaXplID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmxvYiBpcyBlbXB0eSAoc2l6ZTogMCknKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxlQmxvYiA9IGJsb2JEYXRhO1xuICAgICAgdGhpcy5jcmVhdGVGaWxlVXJsKCk7XG4gICAgICB0aGlzLnNldHVwVmlld2VyKCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBkYXRhOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsZVVybCgpIHtcbiAgICBpZiAodGhpcy5maWxlQmxvYikge1xuICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgVVJMXG4gICAgICBpZiAodGhpcy5maWxlVXJsKSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5maWxlVXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3QgVVJMXG4gICAgICB0aGlzLmZpbGVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUJsb2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gZmlsZSBibG9iIGF2YWlsYWJsZSB0byBjcmVhdGUgVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZpZXdlcigpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmZpbGVVcmwpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ05vIGZpbGUgVVJMIGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbGVUeXBlID09PSAncGRmJykge1xuICAgICAgdGhpcy5zZXR1cFBkZlZpZXdlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvY3VtZW50Tm90U3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUGRmVmlld2VyKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgZGlyZWN0IFBERiB2aWV3ZXIgZmlyc3RcbiAgICAgIGNvbnN0IHBkZlVybFdpdGhQYXJhbXMgPSB0aGlzLmZpbGVVcmwgKyAnI3Rvb2xiYXI9MCZuYXZwYW5lcz0wJnNjcm9sbGJhcj0wJ1xuICAgICAgdGhpcy5zYWZlU3JjID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHBkZlVybFdpdGhQYXJhbXMpO1xuICAgICAgdGhpcy5zaG93UGRmVmlld2VyID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2V0dGluZyB1cCBQREYgdmlld2VyOicsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBQREYgdmlld2VyJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlVHlwZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gJ3BkZicpIHtcbiAgICAgIHJldHVybiAncGRmJztcbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWxlVHlwZSA9PT0gJ3BkZicpIHtcbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcbiAgICB9XG4gICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ0Nsb3NlJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2RzIGZvciB0ZW1wbGF0ZVxuICBkb3dubG9hZEZpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmlsZUJsb2IpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlQmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgYS5kb3dubG9hZCA9IHRoaXMuZmlsZU5hbWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgYS5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICB9XG4gIH1cblxuICBvbklmcmFtZUxvYWQoKSB7XG4gICAgY29uc29sZS5sb2coJ0lmcmFtZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIH1cblxuICBvbklmcmFtZUVycm9yKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0lmcmFtZSBmYWlsZWQgdG8gbG9hZCcpO1xuICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGRvY3VtZW50IGluIHZpZXdlcicpO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2UoKSB7XG4gICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpXG4gIH1cblxuICBvcGVuU25hY2tiYXIocHJpbWFyeU1zZzogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCkge1xuICAgIHRoaXMuc25hY2tCYXIub3BlbihwcmltYXJ5TXNnLCAnWCcsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0pXG4gIH1cblxuICBzdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgc3VibWl0VXJsOiB0aGlzLmRhdGEudXJsLFxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdERyYWZ0QXNzaWdubWVudChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5yZXNwb25zZUNvZGUgJiYgcmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignQXNzaWdubWVudCBzYXZlZCBhcyBhIGRyYWZ0JylcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgfVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgYXNzaWdubWVudCcsIGVycm9yKVxuICAgIH0pXG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICBpZiAodGhpcy5maWxlVXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZmlsZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICByZXRyeUxvYWQoKSB7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZWFkRmlsZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZmlsZVVybCkge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLmZpbGVVcmwpO1xuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJkb2N1bWVudC12aWV3ZXItY29udGFpbmVyXCI+XG4gIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNDBcIj48L21hdC1zcGlubmVyPlxuICAgIDxwIGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyBkb2N1bWVudC4uLjwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnQtZGl2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTA3cHgpO1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnQtdGl0bGUgZm9udC1ib2xkIHAtNSBtYi01IGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXY+UG9zdCBBc3NpZ25tZW50IFByZXZpZXc8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTRcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJkaXNjYXJkLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVDbG9zZSgpXCI+XG4gICAgICAgICAgICB7eyAndXNlckFzc2lnbm1lbnRzLmRpc2NhcmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVTdWJtaXRBc3NpZ25tZW50KClcIj5cbiAgICAgICAgICAgIHt7ICd1c2VyQXNzaWdubWVudHMuc3VibWl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRlcnNcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI0MFwiIGNsYXNzPVwiYmx1ZS1zcGlubmVyIG0tYXV0b1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGRmVmlld2VyICYmICFpc0xvYWRpbmcgJiYgIWVycm9yXCIgY2xhc3M9XCJpZnJhbWUtY29udGFpbmVyIHBsLTRcIj5cbiAgICAgICAgPGlmcmFtZSB0aXRsZT1cIlBERiBEb2N1bWVudCBWaWV3ZXJcIiBbc3JjXT1cInNhZmVTcmNcIiBoZWlnaHQ9XCI2MDBweFwiIHN0eWxlPVwiYm9yZGVyOiBub25lO1wiIChsb2FkKT1cIm9uSWZyYW1lTG9hZCgpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JZnJhbWVFcnJvcigpXCI+XG4gICAgICAgIDwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19