@hmcts/media-viewer 4.0.2 → 4.0.3

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 (223) hide show
  1. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +116 -0
  2. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +109 -0
  3. package/{esm2020 → esm2022}/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +5 -5
  4. package/esm2022/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
  5. package/esm2022/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
  6. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
  7. package/esm2022/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +118 -0
  8. package/esm2022/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +86 -0
  9. package/{esm2020 → esm2022}/lib/annotations/annotations.module.mjs +61 -61
  10. package/esm2022/lib/annotations/comment-set/comment/comment.component.mjs +177 -0
  11. package/esm2022/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
  12. package/esm2022/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
  13. package/{esm2020 → esm2022}/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +5 -5
  14. package/esm2022/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
  15. package/{esm2020 → esm2022}/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +5 -5
  16. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +54 -0
  17. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +68 -0
  18. package/esm2022/lib/annotations/comment-set/comment-set-render.service.mjs +54 -0
  19. package/esm2022/lib/annotations/comment-set/comment-set.component.mjs +123 -0
  20. package/esm2022/lib/annotations/comments-summary/comments-summary.component.mjs +120 -0
  21. package/{esm2020 → esm2022}/lib/annotations/pipes/date/date.pipe.mjs +4 -4
  22. package/esm2022/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
  23. package/{esm2020 → esm2022}/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/annotations/services/annotation-api/annotation-api.service.mjs +5 -5
  25. package/{esm2020 → esm2022}/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +5 -5
  26. package/{esm2020 → esm2022}/lib/annotations/services/tags/tags.services.mjs +5 -5
  27. package/esm2022/lib/annotations/tags/tags.component.mjs +53 -0
  28. package/{esm2020 → esm2022}/lib/bookmark/components/bookmark-icons.component.mjs +5 -5
  29. package/{esm2020 → esm2022}/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +5 -5
  30. package/esm2022/lib/icp/icp-follower.service.mjs +60 -0
  31. package/esm2022/lib/icp/icp-presenter.service.mjs +55 -0
  32. package/{esm2020 → esm2022}/lib/icp/icp-session-api.service.mjs +5 -5
  33. package/esm2022/lib/icp/icp-update.service.mjs +65 -0
  34. package/esm2022/lib/icp/icp.service.mjs +95 -0
  35. package/{esm2020 → esm2022}/lib/icp/participants-list/participants-list.component.mjs +5 -5
  36. package/esm2022/lib/icp/socket.service.mjs +118 -0
  37. package/esm2022/lib/media-viewer.component.mjs +244 -0
  38. package/{esm2020 → esm2022}/lib/media-viewer.module.mjs +55 -55
  39. package/{esm2020 → esm2022}/lib/print.service.mjs +4 -4
  40. package/esm2022/lib/redaction/components/redaction.component.mjs +91 -0
  41. package/{esm2020 → esm2022}/lib/redaction/services/redaction-api.service.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/shared/gov-uk-date/gov-uk-date.component.mjs +4 -4
  43. package/{esm2020 → esm2022}/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +7 -7
  44. package/{esm2020 → esm2022}/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +6 -6
  45. package/{esm2020 → esm2022}/lib/shared/gov-uk-label/gov-uk-label.component.mjs +7 -7
  46. package/{esm2020 → esm2022}/lib/shared/shared.module.mjs +19 -19
  47. package/esm2022/lib/shared/util/helpers/html-templates.helper.mjs +18 -0
  48. package/{esm2020 → esm2022}/lib/shared/util/services/number.helper.service.mjs +5 -5
  49. package/esm2022/lib/store/bookmarks-store-utils.mjs +49 -0
  50. package/esm2022/lib/store/effects/annotation.effects.mjs +51 -0
  51. package/{esm2020 → esm2022}/lib/store/effects/bookmarks.effects.mjs +5 -5
  52. package/{esm2020 → esm2022}/lib/store/effects/document.effects.mjs +5 -5
  53. package/{esm2020 → esm2022}/lib/store/effects/icp.effects.mjs +5 -5
  54. package/{esm2020 → esm2022}/lib/store/effects/redaction.effects.mjs +5 -5
  55. package/esm2022/lib/store/reducers/annotations.reducer.mjs +208 -0
  56. package/esm2022/lib/store/reducers/bookmarks.reducer.mjs +116 -0
  57. package/esm2022/lib/store/reducers/document.reducer.mjs +135 -0
  58. package/esm2022/lib/store/reducers/icp.reducer.mjs +56 -0
  59. package/esm2022/lib/store/reducers/redaction.reducer.mjs +116 -0
  60. package/esm2022/lib/store/reducers/tags.reducer.mjs +93 -0
  61. package/esm2022/lib/store/selectors/annotation.selectors.mjs +81 -0
  62. package/{esm2020 → esm2022}/lib/store/selectors/bookmark.selectors.mjs +1 -1
  63. package/{esm2020 → esm2022}/lib/store/selectors/redaction.selectors.mjs +1 -1
  64. package/esm2022/lib/store/store-utils.mjs +131 -0
  65. package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +44 -0
  66. package/{esm2020 → esm2022}/lib/toolbar/icp-event.service.mjs +1 -1
  67. package/{esm2020 → esm2022}/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +5 -5
  68. package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +189 -0
  69. package/esm2022/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +236 -0
  70. package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +68 -0
  71. package/esm2022/lib/toolbar/search-bar/search-bar.component.mjs +109 -0
  72. package/esm2022/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
  73. package/esm2022/lib/toolbar/toolbar-event.service.mjs +178 -0
  74. package/{esm2020 → esm2022}/lib/toolbar/toolbar.module.mjs +25 -25
  75. package/esm2022/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +82 -0
  76. package/{esm2020 → esm2022}/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +5 -5
  77. package/esm2022/lib/viewers/grab-n-drag.directive.mjs +57 -0
  78. package/esm2022/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
  79. package/esm2022/lib/viewers/multimedia-player/multimedia-player.component.mjs +59 -0
  80. package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +210 -0
  81. package/{esm2020 → esm2022}/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +5 -5
  82. package/esm2022/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +236 -0
  83. package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +352 -0
  84. package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
  85. package/{esm2020 → esm2022}/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +5 -5
  86. package/{esm2020 → esm2022}/lib/viewers/rotation-persist/rotation-api.service.mjs +5 -5
  87. package/esm2022/lib/viewers/rotation-persist/rotation-persist.directive.mjs +61 -0
  88. package/esm2022/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
  89. package/{esm2020 → esm2022}/lib/viewers/viewer-event.service.mjs +5 -5
  90. package/{esm2020 → esm2022}/lib/viewers/viewer-util.service.mjs +5 -5
  91. package/{fesm2020 → fesm2022}/hmcts-media-viewer.mjs +445 -445
  92. package/fesm2022/hmcts-media-viewer.mjs.map +1 -0
  93. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +1 -1
  94. package/lib/annotations/annotation-set/annotation-set.component.d.ts +1 -1
  95. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +1 -1
  96. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +1 -1
  97. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +1 -1
  98. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +1 -1
  99. package/lib/annotations/comment-set/comment/comment.component.d.ts +1 -1
  100. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +1 -1
  101. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +1 -1
  102. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +1 -1
  103. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +1 -1
  104. package/lib/annotations/comment-set/comment-set.component.d.ts +1 -1
  105. package/lib/annotations/comments-summary/comments-summary.component.d.ts +1 -1
  106. package/lib/annotations/tags/tags.component.d.ts +1 -1
  107. package/lib/bookmark/components/bookmark-icons.component.d.ts +1 -1
  108. package/lib/icp/socket.service.d.ts +6 -6
  109. package/lib/icp/socket.service.d.ts.map +1 -1
  110. package/lib/media-viewer.component.d.ts +1 -2
  111. package/lib/media-viewer.component.d.ts.map +1 -1
  112. package/lib/redaction/components/redaction.component.d.ts +1 -1
  113. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +1 -1
  114. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +1 -1
  115. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +1 -1
  116. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +1 -1
  117. package/lib/store/bookmarks-store-utils.d.ts.map +1 -1
  118. package/lib/toolbar/icp-event.service.d.ts +4 -4
  119. package/lib/toolbar/icp-event.service.d.ts.map +1 -1
  120. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +1 -1
  121. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +1 -1
  122. package/lib/toolbar/toolbar-event.service.d.ts +6 -6
  123. package/lib/toolbar/toolbar-event.service.d.ts.map +1 -1
  124. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +1 -1
  125. package/lib/viewers/grab-n-drag.directive.d.ts +1 -1
  126. package/lib/viewers/image-viewer/image-viewer.component.d.ts +1 -1
  127. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +1 -1
  128. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.d.ts.map +1 -1
  129. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +1 -1
  130. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +1 -1
  131. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +1 -1
  132. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +1 -1
  133. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +1 -1
  134. package/lib/viewers/viewer-event.service.d.ts +1 -1
  135. package/lib/viewers/viewer-event.service.d.ts.map +1 -1
  136. package/package.json +16 -23
  137. package/esm2020/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +0 -116
  138. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +0 -109
  139. package/esm2020/lib/annotations/annotation-set/annotation-set.component.mjs +0 -50
  140. package/esm2020/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +0 -94
  141. package/esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +0 -116
  142. package/esm2020/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +0 -118
  143. package/esm2020/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +0 -86
  144. package/esm2020/lib/annotations/comment-set/comment/comment.component.mjs +0 -177
  145. package/esm2020/lib/annotations/comment-set/comment/comment.service.mjs +0 -50
  146. package/esm2020/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +0 -47
  147. package/esm2020/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +0 -91
  148. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +0 -54
  149. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +0 -68
  150. package/esm2020/lib/annotations/comment-set/comment-set-render.service.mjs +0 -54
  151. package/esm2020/lib/annotations/comment-set/comment-set.component.mjs +0 -123
  152. package/esm2020/lib/annotations/comments-summary/comments-summary.component.mjs +0 -120
  153. package/esm2020/lib/annotations/pipes/filter/filter.pipe.mjs +0 -32
  154. package/esm2020/lib/annotations/tags/tags.component.mjs +0 -53
  155. package/esm2020/lib/icp/icp-follower.service.mjs +0 -60
  156. package/esm2020/lib/icp/icp-presenter.service.mjs +0 -55
  157. package/esm2020/lib/icp/icp-update.service.mjs +0 -65
  158. package/esm2020/lib/icp/icp.service.mjs +0 -95
  159. package/esm2020/lib/icp/socket.service.mjs +0 -118
  160. package/esm2020/lib/media-viewer.component.mjs +0 -245
  161. package/esm2020/lib/redaction/components/redaction.component.mjs +0 -91
  162. package/esm2020/lib/shared/util/helpers/html-templates.helper.mjs +0 -18
  163. package/esm2020/lib/store/bookmarks-store-utils.mjs +0 -49
  164. package/esm2020/lib/store/effects/annotation.effects.mjs +0 -51
  165. package/esm2020/lib/store/reducers/annotations.reducer.mjs +0 -208
  166. package/esm2020/lib/store/reducers/bookmarks.reducer.mjs +0 -116
  167. package/esm2020/lib/store/reducers/document.reducer.mjs +0 -135
  168. package/esm2020/lib/store/reducers/icp.reducer.mjs +0 -56
  169. package/esm2020/lib/store/reducers/redaction.reducer.mjs +0 -116
  170. package/esm2020/lib/store/reducers/tags.reducer.mjs +0 -93
  171. package/esm2020/lib/store/selectors/annotation.selectors.mjs +0 -81
  172. package/esm2020/lib/store/store-utils.mjs +0 -131
  173. package/esm2020/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +0 -44
  174. package/esm2020/lib/toolbar/main-toolbar/main-toolbar.component.mjs +0 -189
  175. package/esm2020/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +0 -236
  176. package/esm2020/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +0 -68
  177. package/esm2020/lib/toolbar/search-bar/search-bar.component.mjs +0 -109
  178. package/esm2020/lib/toolbar/toolbar-button-visibility.service.mjs +0 -94
  179. package/esm2020/lib/toolbar/toolbar-event.service.mjs +0 -178
  180. package/esm2020/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +0 -82
  181. package/esm2020/lib/viewers/grab-n-drag.directive.mjs +0 -57
  182. package/esm2020/lib/viewers/image-viewer/image-viewer.component.mjs +0 -166
  183. package/esm2020/lib/viewers/multimedia-player/multimedia-player.component.mjs +0 -59
  184. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +0 -209
  185. package/esm2020/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +0 -236
  186. package/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +0 -352
  187. package/esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +0 -49
  188. package/esm2020/lib/viewers/rotation-persist/rotation-persist.directive.mjs +0 -61
  189. package/esm2020/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +0 -49
  190. package/fesm2015/hmcts-media-viewer.mjs +0 -6953
  191. package/fesm2015/hmcts-media-viewer.mjs.map +0 -1
  192. package/fesm2020/hmcts-media-viewer.mjs.map +0 -1
  193. /package/{esm2020 → esm2022}/hmcts-media-viewer.mjs +0 -0
  194. /package/{esm2020 → esm2022}/lib/annotations/annotation-set/annotation-set.model.mjs +0 -0
  195. /package/{esm2020 → esm2022}/lib/annotations/annotation-set/annotation-view/annotation.model.mjs +0 -0
  196. /package/{esm2020 → esm2022}/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs +0 -0
  197. /package/{esm2020 → esm2022}/lib/annotations/comment-set/comment/comment.model.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lib/annotations/models/api-persisted.model.mjs +0 -0
  199. /package/{esm2020 → esm2022}/lib/annotations/models/event-select.model.mjs +0 -0
  200. /package/{esm2020 → esm2022}/lib/annotations/models/tags.model.mjs +0 -0
  201. /package/{esm2020 → esm2022}/lib/annotations/models/user.model.mjs +0 -0
  202. /package/{esm2020 → esm2022}/lib/icp/icp.events.mjs +0 -0
  203. /package/{esm2020 → esm2022}/lib/icp/icp.interfaces.mjs +0 -0
  204. /package/{esm2020 → esm2022}/lib/redaction/services/redaction.model.mjs +0 -0
  205. /package/{esm2020 → esm2022}/lib/store/actions/annotation.actions.mjs +0 -0
  206. /package/{esm2020 → esm2022}/lib/store/actions/bookmark.actions.mjs +0 -0
  207. /package/{esm2020 → esm2022}/lib/store/actions/document.actions.mjs +0 -0
  208. /package/{esm2020 → esm2022}/lib/store/actions/icp.actions.mjs +0 -0
  209. /package/{esm2020 → esm2022}/lib/store/actions/redaction.actions.mjs +0 -0
  210. /package/{esm2020 → esm2022}/lib/store/actions/tag.actions.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/store/effects/index.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/store/models/bookmarks.interface.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/store/models/filters.interface.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/store/reducers/reducers.mjs +0 -0
  215. /package/{esm2020 → esm2022}/lib/store/selectors/document.selectors.mjs +0 -0
  216. /package/{esm2020 → esm2022}/lib/store/selectors/icp.selectors.mjs +0 -0
  217. /package/{esm2020 → esm2022}/lib/store/selectors/tag.selectors.mjs +0 -0
  218. /package/{esm2020 → esm2022}/lib/toolbar/redaction-search-bar/redaction-search.model.mjs +0 -0
  219. /package/{esm2020 → esm2022}/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs +0 -0
  220. /package/{esm2020 → esm2022}/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs +0 -0
  221. /package/{esm2020 → esm2022}/lib/viewers/rotation-persist/rotation.model.mjs +0 -0
  222. /package/{esm2020 → esm2022}/lib/viewers/viewer-exception.model.mjs +0 -0
  223. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,236 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { asyncScheduler } from 'rxjs';
3
+ import { filter, tap, throttleTime } from 'rxjs/operators';
4
+ import { select } from '@ngrx/store';
5
+ import { ResponseType, ViewerException } from '../viewer-exception.model';
6
+ import * as fromDocumentActions from '../../store/actions/document.actions';
7
+ import { PdfPositionUpdate } from '../../store/actions/document.actions';
8
+ import * as fromTagActions from '../../store/actions/tag.actions';
9
+ import { SetCaseId } from '../../store/actions/icp.actions';
10
+ import * as fromDocumentsSelector from '../../store/selectors/document.selectors';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@ngrx/store";
13
+ import * as i2 from "./pdf-js/pdf-js-wrapper.provider";
14
+ import * as i3 from "../../print.service";
15
+ import * as i4 from "../../toolbar/toolbar-event.service";
16
+ import * as i5 from "../viewer-event.service";
17
+ import * as i6 from "../../icp/icp.service";
18
+ import * as i7 from "../../toolbar/toolbar-button-visibility.service";
19
+ import * as i8 from "@angular/common";
20
+ import * as i9 from "../../toolbar/redaction-search-bar/redaction-search-bar.component";
21
+ import * as i10 from "../../annotations/comment-set/comment-set.component";
22
+ import * as i11 from "../../annotations/comment-set/comment-set-header/comment-set-header.component";
23
+ import * as i12 from "../../annotations/annotation-set/metadata-layer/metadata-layer.component";
24
+ import * as i13 from "./side-bar/side-bar.component";
25
+ import * as i14 from "../grab-n-drag.directive";
26
+ import * as i15 from "../../annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive";
27
+ import * as i16 from "../../redaction/components/redaction.component";
28
+ import * as i17 from "../../bookmark/components/bookmark-icons.component";
29
+ import * as i18 from "../../icp/participants-list/participants-list.component";
30
+ import * as i19 from "rpx-xui-translation";
31
+ export class PdfViewerComponent {
32
+ constructor(store, icpStore, pdfJsWrapperFactory, printService, toolbarEvents, viewerEvents, icpService, toolbarButtons) {
33
+ this.store = store;
34
+ this.icpStore = icpStore;
35
+ this.pdfJsWrapperFactory = pdfJsWrapperFactory;
36
+ this.printService = printService;
37
+ this.toolbarEvents = toolbarEvents;
38
+ this.viewerEvents = viewerEvents;
39
+ this.icpService = icpService;
40
+ this.toolbarButtons = toolbarButtons;
41
+ this.mediaLoadStatus = new EventEmitter();
42
+ this.pdfViewerException = new EventEmitter();
43
+ this.documentTitle = new EventEmitter();
44
+ this.pageHeights = [];
45
+ this.rotation = 0;
46
+ this.zoom = 1;
47
+ this.loadingDocument = false;
48
+ this.hasDifferentPageSize = false;
49
+ this.enableGrabNDrag = false;
50
+ this.highlightMode = toolbarEvents.highlightModeSubject.pipe(tap(() => {
51
+ this.store.dispatch(new fromTagActions.ClearFilterTags());
52
+ }));
53
+ this.drawMode = toolbarEvents.drawModeSubject;
54
+ }
55
+ async ngAfterContentInit() {
56
+ this.pdfWrapper.documentLoadProgress.subscribe(v => this.onDocumentLoadProgress(v));
57
+ this.pdfWrapper.documentLoaded.subscribe(() => this.onDocumentLoaded());
58
+ this.pdfWrapper.documentLoadFailed.subscribe((error) => this.onDocumentLoadFailed(error));
59
+ this.pdfWrapper.outlineLoaded.subscribe(outline => this.documentOutline = outline);
60
+ this.pdfWrapper.pageRendered.subscribe((event) => this.updatePages(event));
61
+ this.$subscription = this.toolbarEvents.printSubject
62
+ .subscribe(() => this.printService.printDocumentNatively(this.url));
63
+ this.$subscription.add(this.toolbarEvents.downloadSubject.subscribe(() => this.pdfWrapper.downloadFile(this.downloadUrl || this.url, this.downloadFileName)));
64
+ this.$subscription.add(this.toolbarEvents.rotateSubject.subscribe(rotate => this.rotateDocument(rotate)));
65
+ this.$subscription.add(this.toolbarEvents.zoomSubject.subscribe(zoom => this.setZoom(zoom)));
66
+ this.$subscription.add(this.toolbarEvents.stepZoomSubject.subscribe(zoom => this.stepZoom(zoom)));
67
+ this.$subscription.add(this.toolbarEvents.searchSubject.subscribe(search => this.pdfWrapper.search(search)));
68
+ this.$subscription.add(this.toolbarEvents.setCurrentPageSubject.subscribe(pageNumber => this.pdfWrapper.setPageNumber(pageNumber)));
69
+ this.$subscription.add(this.toolbarEvents.changePageByDeltaSubject.subscribe(pageNumber => this.pdfWrapper.changePageNumber(pageNumber)));
70
+ this.$subscription.add(this.toolbarEvents.grabNDrag.subscribe(grabNDrag => this.enableGrabNDrag = grabNDrag));
71
+ this.$subscription.add(this.toolbarEvents.commentsPanelVisible.subscribe(toggle => {
72
+ this.showCommentsPanel = toggle;
73
+ }));
74
+ this.$subscription.add(this.viewerEvents.navigationEvent.subscribe(dest => this.goToDestination(dest)));
75
+ this.$subscription.add(this.toolbarEvents.icp.participantsListVisible.subscribe(toggle => this.showIcpParticipantsList = toggle));
76
+ this.$subscription.add(this.pdfWrapper.positionUpdated.asObservable()
77
+ .pipe(throttleTime(500, asyncScheduler, { leading: true, trailing: true }))
78
+ .subscribe(event => this.store.dispatch(new PdfPositionUpdate(event.location))));
79
+ }
80
+ async ngOnChanges(changes) {
81
+ if (!this.pdfWrapper) {
82
+ this.pdfWrapper = this.pdfJsWrapperFactory.create(this.viewerContainer);
83
+ }
84
+ if (changes.url && this.pdfWrapper) {
85
+ await this.loadDocument();
86
+ if (this.enableRedactions) {
87
+ this.toolbarEvents.redactionMode.pipe(filter(value => !!value))
88
+ .subscribe(() => this.resetRotation());
89
+ }
90
+ }
91
+ if (changes.caseId) {
92
+ this.icpStore.dispatch(new SetCaseId(this.caseId));
93
+ }
94
+ }
95
+ resetRotation() {
96
+ if (this.hasDifferentPageSize) {
97
+ this.pdfWrapper.resetRotation(0);
98
+ this.rotation = 0;
99
+ }
100
+ }
101
+ ngOnDestroy() {
102
+ this.$subscription.unsubscribe();
103
+ }
104
+ async loadDocument() {
105
+ this.initDocumentProgress();
106
+ await this.pdfWrapper.loadDocument(this.url);
107
+ this.documentTitle.emit(this.pdfWrapper.getCurrentPDFTitle());
108
+ this.setPageHeights();
109
+ this.$subscription.add(this.store.pipe(select(fromDocumentsSelector.getPageDifference))
110
+ .subscribe(hasDifferentPageSie => this.hasDifferentPageSize = hasDifferentPageSie));
111
+ }
112
+ onDocumentLoadProgress(progress) {
113
+ if (progress.total) {
114
+ this.loadingDocumentProgress = Math.min(100, Math.ceil(progress.loaded / progress.total * 100));
115
+ }
116
+ }
117
+ onDocumentLoaded() {
118
+ this.loadingDocument = false;
119
+ this.mediaLoadStatus.emit(ResponseType.SUCCESS);
120
+ }
121
+ onDocumentLoadFailed(error) {
122
+ this.loadingDocument = false;
123
+ this.viewerException = new ViewerException(error.name, { message: error.message });
124
+ this.errorMessage = `Could not load the document "${this.url}"`;
125
+ this.mediaLoadStatus.emit(ResponseType.FAILURE);
126
+ this.pdfViewerException.emit(this.viewerException);
127
+ }
128
+ updatePages(event) {
129
+ if (this.enableAnnotations) {
130
+ this.store.dispatch(new fromDocumentActions.AddPages(event));
131
+ }
132
+ }
133
+ set searchBarHidden(hidden) {
134
+ if (this.pdfWrapper && hidden) {
135
+ this.pdfWrapper.clearSearch();
136
+ }
137
+ }
138
+ toggleCommentsSummary() {
139
+ this.toolbarEvents.toggleCommentsSummary(!this.toolbarEvents.showCommentSummary.getValue());
140
+ }
141
+ rotateDocument(rotation) {
142
+ const pageNumber = this.pdfWrapper.getPageNumber();
143
+ this.pdfWrapper.rotate(rotation);
144
+ this.pdfWrapper.setPageNumber(pageNumber);
145
+ this.rotation = (this.rotation + rotation) % 360;
146
+ this.setPageHeights();
147
+ }
148
+ initDocumentProgress() {
149
+ this.loadingDocument = true;
150
+ this.loadingDocumentProgress = null;
151
+ this.errorMessage = null;
152
+ }
153
+ setZoom(zoomFactor) {
154
+ if (!isNaN(zoomFactor)) {
155
+ this.pdfWrapper.setZoom(zoomFactor);
156
+ this.zoom = this.calculateZoomValue(zoomFactor);
157
+ this.setPageHeights();
158
+ }
159
+ }
160
+ stepZoom(zoomFactor) {
161
+ if (!isNaN(zoomFactor)) {
162
+ this.pdfWrapper.stepZoom(zoomFactor);
163
+ this.zoom = this.calculateZoomValue(this.zoom, zoomFactor);
164
+ this.setPageHeights();
165
+ }
166
+ }
167
+ setPageHeights() {
168
+ this.pageHeights = [];
169
+ const pdfViewerChildren = this.pdfViewer.nativeElement.children;
170
+ for (let i = 0; i < pdfViewerChildren.length; i++) {
171
+ this.pageHeights.push(pdfViewerChildren[i].clientHeight);
172
+ }
173
+ }
174
+ calculateZoomValue(zoomValue, increment = 0) {
175
+ const newZoomValue = zoomValue + increment;
176
+ if (newZoomValue > 5) {
177
+ return 5;
178
+ }
179
+ if (newZoomValue < 0.1) {
180
+ return 0.1;
181
+ }
182
+ return +newZoomValue.toFixed(2);
183
+ }
184
+ goToDestination(destination) {
185
+ const currentRotation = this.rotation;
186
+ this.rotateDocument(360 - this.rotation);
187
+ this.pdfWrapper.navigateTo(destination);
188
+ setTimeout(() => {
189
+ this.rotateDocument(currentRotation);
190
+ }, 10);
191
+ }
192
+ getCurrentPageNumber() {
193
+ return this.pdfWrapper.getPageNumber();
194
+ }
195
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: PdfViewerComponent, deps: [{ token: i1.Store }, { token: i1.Store }, { token: i2.PdfJsWrapperFactory }, { token: i3.PrintService }, { token: i4.ToolbarEventService }, { token: i5.ViewerEventService }, { token: i6.IcpService }, { token: i7.ToolbarButtonVisibilityService }], target: i0.ɵɵFactoryTarget.Component }); }
196
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: PdfViewerComponent, selector: "mv-pdf-viewer", inputs: { downloadUrl: "downloadUrl", url: "url", downloadFileName: "downloadFileName", enableAnnotations: "enableAnnotations", enableRedactions: "enableRedactions", enableICP: "enableICP", annotationSet: "annotationSet", enableRedactSearch: "enableRedactSearch", height: "height", caseId: "caseId", searchBarHidden: "searchBarHidden" }, outputs: { mediaLoadStatus: "mediaLoadStatus", pdfViewerException: "pdfViewerException", documentTitle: "documentTitle" }, viewQueries: [{ propertyName: "viewerContainer", first: true, predicate: ["viewerContainer"], descendants: true, static: true }, { propertyName: "pdfViewer", first: true, predicate: ["pdfViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mv-side-bar\n *ngIf=\"toolbarEvents.sidebarOpen\"\n id=\"sidebarContainer\"\n [url]=\"url\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [outline]=\"documentOutline\"\n [annotationsEnabled]=\"enableAnnotations\"\n [currentPageNumber]=\"getCurrentPageNumber()\"\n>\n</mv-side-bar>\n<mv-comment-set-header\n *ngIf=\"enableAnnotations\"\n [ngClass]=\"{ 'show-comments-panel': showCommentsPanel }\"\n [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n (showCommentSummaryDialog)=\"toggleCommentsSummary()\"\n>\n</mv-comment-set-header>\n<mv-participants-list></mv-participants-list>\n<div\n class=\"pdfContainer\"\n [ngStyle]=\"{ height: height }\"\n [ngClass]=\"{ pdfContainer: true, hidden: errorMessage }\"\n>\n <mv-redaction-search-bar></mv-redaction-search-bar>\n <div\n #viewerContainer\n mvGrabNDrag\n [dragX]=\"viewerContainer\"\n [dragEnabled]=\"enableGrabNDrag\"\n id=\"viewerContainer\"\n class=\"viewer-container\"\n [class.annotations]=\"enableAnnotations\"\n [class.show-comments-panel]=\"\n (showCommentsPanel || showIcpParticipantsList) &&\n (toolbarEvents.redactionMode | async) !== true\n \"\n [class.grabNDrag]=\"enableGrabNDrag\"\n >\n <div\n #pdfViewer\n class=\"pdfViewer\"\n mvCreateTextHighlight\n [ngClass]=\"{\n hidden: loadingDocument,\n highlightMode: highlightMode | async,\n drawMode: drawMode | async\n }\"\n ></div>\n <mv-redactions\n *ngIf=\"toolbarEvents.redactionMode | async; else annotationTemplate\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n ></mv-redactions>\n <ng-template #annotationTemplate>\n <mv-metadata-layer\n *ngIf=\"enableAnnotations && annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n >\n </mv-metadata-layer>\n <mv-bookmark-icons [zoom]=\"zoom\" [rotate]=\"rotation\"> </mv-bookmark-icons>\n </ng-template>\n </div>\n <mv-comment-set\n [contentScrollTop]=\"viewerContainer.scrollTop\"\n *ngIf=\"\n enableAnnotations &&\n annotationSet &&\n (toolbarEvents.redactionMode | async) !== true\n \"\n [annotationSet]=\"annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [height]=\"pdfViewer.offsetHeight\"\n [pageHeights]=\"pageHeights\"\n >\n </mv-comment-set>\n <div class=\"loadingMessage\" *ngIf=\"loadingDocument\">\n <h3 class=\"govuk-heading-m\">\n {{ \"Loading...\" | rpxTranslate}}{{\n loadingDocumentProgress ? loadingDocumentProgress + \"%\" : \"\"\n }}\n </h3>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.RedactionSearchBarComponent, selector: "mv-redaction-search-bar" }, { kind: "component", type: i10.CommentSetComponent, selector: "mv-comment-set", inputs: ["annotationSet", "zoom", "rotate", "height", "pageHeights", "contentScrollTop"] }, { kind: "component", type: i11.CommentSetHeaderComponent, selector: "mv-comment-set-header", inputs: ["showCommentSummary"], outputs: ["showCommentSummaryDialog"] }, { kind: "component", type: i12.MetadataLayerComponent, selector: "mv-metadata-layer", inputs: ["zoom", "rotate"] }, { kind: "component", type: i13.SideBarComponent, selector: "mv-side-bar", inputs: ["annotationsEnabled", "outline", "url", "zoom", "rotate", "currentPageNumber"] }, { kind: "directive", type: i14.GrabNDragDirective, selector: "[mvGrabNDrag]", inputs: ["dragEnabled", "dragX"] }, { kind: "directive", type: i15.HighlightCreateDirective, selector: "[mvCreateTextHighlight]" }, { kind: "component", type: i16.RedactionComponent, selector: "mv-redactions", inputs: ["zoom", "rotate"] }, { kind: "component", type: i17.BookmarkIconsComponent, selector: "mv-bookmark-icons", inputs: ["zoom", "rotate"] }, { kind: "component", type: i18.ParticipantsListComponent, selector: "mv-participants-list" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i19.RpxTranslatePipe, name: "rpxTranslate" }], encapsulation: i0.ViewEncapsulation.None }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: PdfViewerComponent, decorators: [{
199
+ type: Component,
200
+ args: [{ selector: 'mv-pdf-viewer', encapsulation: ViewEncapsulation.None, template: "<mv-side-bar\n *ngIf=\"toolbarEvents.sidebarOpen\"\n id=\"sidebarContainer\"\n [url]=\"url\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [outline]=\"documentOutline\"\n [annotationsEnabled]=\"enableAnnotations\"\n [currentPageNumber]=\"getCurrentPageNumber()\"\n>\n</mv-side-bar>\n<mv-comment-set-header\n *ngIf=\"enableAnnotations\"\n [ngClass]=\"{ 'show-comments-panel': showCommentsPanel }\"\n [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n (showCommentSummaryDialog)=\"toggleCommentsSummary()\"\n>\n</mv-comment-set-header>\n<mv-participants-list></mv-participants-list>\n<div\n class=\"pdfContainer\"\n [ngStyle]=\"{ height: height }\"\n [ngClass]=\"{ pdfContainer: true, hidden: errorMessage }\"\n>\n <mv-redaction-search-bar></mv-redaction-search-bar>\n <div\n #viewerContainer\n mvGrabNDrag\n [dragX]=\"viewerContainer\"\n [dragEnabled]=\"enableGrabNDrag\"\n id=\"viewerContainer\"\n class=\"viewer-container\"\n [class.annotations]=\"enableAnnotations\"\n [class.show-comments-panel]=\"\n (showCommentsPanel || showIcpParticipantsList) &&\n (toolbarEvents.redactionMode | async) !== true\n \"\n [class.grabNDrag]=\"enableGrabNDrag\"\n >\n <div\n #pdfViewer\n class=\"pdfViewer\"\n mvCreateTextHighlight\n [ngClass]=\"{\n hidden: loadingDocument,\n highlightMode: highlightMode | async,\n drawMode: drawMode | async\n }\"\n ></div>\n <mv-redactions\n *ngIf=\"toolbarEvents.redactionMode | async; else annotationTemplate\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n ></mv-redactions>\n <ng-template #annotationTemplate>\n <mv-metadata-layer\n *ngIf=\"enableAnnotations && annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n >\n </mv-metadata-layer>\n <mv-bookmark-icons [zoom]=\"zoom\" [rotate]=\"rotation\"> </mv-bookmark-icons>\n </ng-template>\n </div>\n <mv-comment-set\n [contentScrollTop]=\"viewerContainer.scrollTop\"\n *ngIf=\"\n enableAnnotations &&\n annotationSet &&\n (toolbarEvents.redactionMode | async) !== true\n \"\n [annotationSet]=\"annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [height]=\"pdfViewer.offsetHeight\"\n [pageHeights]=\"pageHeights\"\n >\n </mv-comment-set>\n <div class=\"loadingMessage\" *ngIf=\"loadingDocument\">\n <h3 class=\"govuk-heading-m\">\n {{ \"Loading...\" | rpxTranslate}}{{\n loadingDocumentProgress ? loadingDocumentProgress + \"%\" : \"\"\n }}\n </h3>\n </div>\n</div>\n" }]
201
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i1.Store }, { type: i2.PdfJsWrapperFactory }, { type: i3.PrintService }, { type: i4.ToolbarEventService }, { type: i5.ViewerEventService }, { type: i6.IcpService }, { type: i7.ToolbarButtonVisibilityService }], propDecorators: { mediaLoadStatus: [{
202
+ type: Output
203
+ }], pdfViewerException: [{
204
+ type: Output
205
+ }], documentTitle: [{
206
+ type: Output
207
+ }], downloadUrl: [{
208
+ type: Input
209
+ }], url: [{
210
+ type: Input
211
+ }], downloadFileName: [{
212
+ type: Input
213
+ }], enableAnnotations: [{
214
+ type: Input
215
+ }], enableRedactions: [{
216
+ type: Input
217
+ }], enableICP: [{
218
+ type: Input
219
+ }], annotationSet: [{
220
+ type: Input
221
+ }], enableRedactSearch: [{
222
+ type: Input
223
+ }], height: [{
224
+ type: Input
225
+ }], caseId: [{
226
+ type: Input
227
+ }], viewerContainer: [{
228
+ type: ViewChild,
229
+ args: ['viewerContainer', { static: true }]
230
+ }], pdfViewer: [{
231
+ type: ViewChild,
232
+ args: ['pdfViewer', { static: false }]
233
+ }], searchBarHidden: [{
234
+ type: Input
235
+ }] } });
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBNkMsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQU81QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzFFLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEtBQUssY0FBYyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEtBQUsscUJBQXFCLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVsRixNQUFNLE9BQU8sa0JBQWtCO0lBMEM3QixZQUNVLEtBQTBDLEVBQzFDLFFBQXlCLEVBQ2hCLG1CQUF3QyxFQUN4QyxZQUEwQixFQUMzQixhQUFrQyxFQUNqQyxZ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RUFBRSxJQUFJLEVBQUU7Z0JBQ0gsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTRIckMsZUFBZTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IERvY3VtZW50TG9hZFByb2dyZXNzLCBQYWdlRXZlbnQsIFBkZkpzV3JhcHBlciB9IGZyb20gJy4vcGRmLWpzL3BkZi1qcy13cmFwcGVyJztcbmltcG9ydCB7IFBkZkpzV3JhcHBlckZhY3RvcnkgfSBmcm9tICcuL3BkZi1qcy9wZGYtanMtd3JhcHBlci5wcm92aWRlcic7XG5pbXBvcnQgeyBBbm5vdGF0aW9uU2V0IH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1zZXQubW9kZWwnO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW50U2VydmljZSB9IGZyb20gJy4uLy4uL3ByaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2VUeXBlLCBWaWV3ZXJFeGNlcHRpb24gfSBmcm9tICcuLi92aWV3ZXItZXhjZXB0aW9uLm1vZGVsJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1idXR0b24tdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1lbnRTZXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9ucy9jb21tZW50LXNldC9jb21tZW50LXNldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3V0bGluZSB9IGZyb20gJy4vc2lkZS1iYXIvb3V0bGluZS1pdGVtL291dGxpbmUubW9kZWwnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIGZyb21Eb2N1bWVudEFjdGlvbnMgZnJvbSAnLi4vLi4vc3RvcmUvYWN0aW9ucy9kb2N1bWVudC5hY3Rpb25zJztcbmltcG9ydCB7IFBkZlBvc2l0aW9uVXBkYXRlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWN0aW9ucy9kb2N1bWVudC5hY3Rpb25zJztcbmltcG9ydCAqIGFzIGZyb21UYWdBY3Rpb25zIGZyb20gJy4uLy4uL3N0b3JlL2FjdGlvbnMvdGFnLmFjdGlvbnMnO1xuaW1wb3J0IHsgU2V0Q2FzZUlkIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWN0aW9ucy9pY3AuYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBmcm9tRG9jdW1lbnRzU2VsZWN0b3IgZnJvbSAnLi4vLi4vc3RvcmUvc2VsZWN0b3JzL2RvY3VtZW50LnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBJY3BTdGF0ZSB9IGZyb20gJy4uLy4uL2ljcC9pY3AuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBWaWV3ZXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBJY3BTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaWNwL2ljcC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtcGRmLXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQZGZWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQE91dHB1dCgpIG1lZGlhTG9hZFN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzcG9uc2VUeXBlPigpO1xuICBAT3V0cHV0KCkgcGRmVmlld2VyRXhjZXB0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxWaWV3ZXJFeGNlcHRpb24+KCk7XG4gIEBPdXRwdXQoKSBkb2N1bWVudFRpdGxlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQElucHV0KCkgZG93bmxvYWRVcmw6IHN0cmluZztcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRvd25sb2FkRmlsZU5hbWU6IHN0cmluZztcblxuICBASW5wdXQoKSBlbmFibGVBbm5vdGF0aW9uczogYm9vbGVhbjtcbiAgQElucHV0KCkgZW5hYmxlUmVkYWN0aW9uczogYm9vbGVhbjtcbiAgQElucHV0KCkgZW5hYmxlSUNQOiBib29sZWFuO1xuICBASW5wdXQoKSBhbm5vdGF0aW9uU2V0OiBBbm5vdGF0aW9uU2V0IHwgbnVsbDtcbiAgQElucHV0KCkgZW5hYmxlUmVkYWN0U2VhcmNoOiBBbm5vdGF0aW9uU2V0IHwgbnVsbDtcblxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZztcbiAgcGFnZUhlaWdodHMgPSBbXTtcbiAgcm90YXRpb24gPSAwO1xuICB6b29tID0gMTtcblxuICBASW5wdXQoKSBjYXNlSWQ6IHN0cmluZztcblxuICBoaWdobGlnaHRNb2RlOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBkcmF3TW9kZTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGRvY3VtZW50T3V0bGluZTogT3V0bGluZVtdO1xuICBsb2FkaW5nRG9jdW1lbnQgPSBmYWxzZTtcbiAgbG9hZGluZ0RvY3VtZW50UHJvZ3Jlc3M6IG51bWJlcjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGhhc0RpZmZlcmVudFBhZ2VTaXplID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndmlld2VyQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgdmlld2VyQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncGRmVmlld2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBkZlZpZXdlcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBwZGZXcmFwcGVyOiBQZGZKc1dyYXBwZXI7XG4gIHByaXZhdGUgJHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHZpZXdlckV4Y2VwdGlvbjogVmlld2VyRXhjZXB0aW9uO1xuICBzaG93Q29tbWVudHNQYW5lbDogYm9vbGVhbjtcbiAgc2hvd0ljcFBhcnRpY2lwYW50c0xpc3Q6IGJvb2xlYW47XG4gIGVuYWJsZUdyYWJORHJhZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGZyb21TdG9yZS5Bbm5vdGF0aW9uU2V0U3RhdGU+LFxuICAgIHByaXZhdGUgaWNwU3RvcmU6IFN0b3JlPEljcFN0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBkZkpzV3JhcHBlckZhY3Rvcnk6IFBkZkpzV3JhcHBlckZhY3RvcnksXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmludFNlcnZpY2U6IFByaW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlckV2ZW50czogVmlld2VyRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaWNwU2VydmljZTogSWNwU2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5oaWdobGlnaHRNb2RlID0gdG9vbGJhckV2ZW50cy5oaWdobGlnaHRNb2RlU3ViamVjdC5waXBlKHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tVGFnQWN0aW9ucy5DbGVhckZpbHRlclRhZ3MoKSk7XG4gICAgfSkpO1xuICAgIHRoaXMuZHJhd01vZGUgPSB0b29sYmFyRXZlbnRzLmRyYXdNb2RlU3ViamVjdDtcbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBkZldyYXBwZXIuZG9jdW1lbnRMb2FkUHJvZ3Jlc3Muc3Vic2NyaWJlKHYgPT4gdGhpcy5vbkRvY3VtZW50TG9hZFByb2dyZXNzKHYpKTtcbiAgICB0aGlzLnBkZldyYXBwZXIuZG9jdW1lbnRMb2FkZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Eb2N1bWVudExvYWRlZCgpKTtcbiAgICB0aGlzLnBkZldyYXBwZXIuZG9jdW1lbnRMb2FkRmFpbGVkLnN1YnNjcmliZSgoZXJyb3IpID0+IHRoaXMub25Eb2N1bWVudExvYWRGYWlsZWQoZXJyb3IpKTtcbiAgICB0aGlzLnBkZldyYXBwZXIub3V0bGluZUxvYWRlZC5zdWJzY3JpYmUob3V0bGluZSA9PiB0aGlzLmRvY3VtZW50T3V0bGluZSA9IG91dGxpbmUpO1xuICAgIHRoaXMucGRmV3JhcHBlci5wYWdlUmVuZGVyZWQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy51cGRhdGVQYWdlcyhldmVudCkpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbiA9IHRoaXMudG9vbGJhckV2ZW50cy5wcmludFN1YmplY3RcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcmludFNlcnZpY2UucHJpbnREb2N1bWVudE5hdGl2ZWx5KHRoaXMudXJsKSk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRvb2xiYXJFdmVudHMuZG93bmxvYWRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PlxuICAgICAgdGhpcy5wZGZXcmFwcGVyLmRvd25sb2FkRmlsZSh0aGlzLmRvd25sb2FkVXJsIHx8IHRoaXMudXJsLCB0aGlzLmRvd25sb2FkRmlsZU5hbWUpXG4gICAgKSk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRvb2xiYXJFdmVudHMucm90YXRlU3ViamVjdC5zdWJzY3JpYmUocm90YXRlID0+IHRoaXMucm90YXRlRG9jdW1lbnQocm90YXRlKSkpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQodGhpcy50b29sYmFyRXZlbnRzLnpvb21TdWJqZWN0LnN1YnNjcmliZSh6b29tID0+IHRoaXMuc2V0Wm9vbSh6b29tKSkpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQodGhpcy50b29sYmFyRXZlbnRzLnN0ZXBab29tU3ViamVjdC5zdWJzY3JpYmUoem9vbSA9PiB0aGlzLnN0ZXBab29tKHpvb20pKSk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoU3ViamVjdC5zdWJzY3JpYmUoc2VhcmNoID0+IHRoaXMucGRmV3JhcHBlci5zZWFyY2goc2VhcmNoKSkpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0Q3VycmVudFBhZ2VTdWJqZWN0LnN1YnNjcmliZShwYWdlTnVtYmVyID0+IHRoaXMucGRmV3JhcHBlci5zZXRQYWdlTnVtYmVyKHBhZ2VOdW1iZXIpKVxuICAgICk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5jaGFuZ2VQYWdlQnlEZWx0YVN1YmplY3Quc3Vic2NyaWJlKHBhZ2VOdW1iZXIgPT4gdGhpcy5wZGZXcmFwcGVyLmNoYW5nZVBhZ2VOdW1iZXIocGFnZU51bWJlcikpXG4gICAgKTtcbiAgICB0aGlzLiRzdWJzY3JpcHRpb24uYWRkKHRoaXMudG9vbGJhckV2ZW50cy5ncmFiTkRyYWcuc3Vic2NyaWJlKGdyYWJORHJhZyA9PiB0aGlzLmVuYWJsZUdyYWJORHJhZyA9IGdyYWJORHJhZykpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQodGhpcy50b29sYmFyRXZlbnRzLmNvbW1lbnRzUGFuZWxWaXNpYmxlLnN1YnNjcmliZSh0b2dnbGUgPT4ge1xuICAgICAgdGhpcy5zaG93Q29tbWVudHNQYW5lbCA9IHRvZ2dsZTtcbiAgICB9KVxuICAgICk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnZpZXdlckV2ZW50cy5uYXZpZ2F0aW9uRXZlbnQuc3Vic2NyaWJlKGRlc3QgPT4gdGhpcy5nb1RvRGVzdGluYXRpb24oZGVzdCkpKTtcbiAgICB0aGlzLiRzdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLmljcC5wYXJ0aWNpcGFudHNMaXN0VmlzaWJsZS5zdWJzY3JpYmUodG9nZ2xlID0+IHRoaXMuc2hvd0ljcFBhcnRpY2lwYW50c0xpc3QgPSB0b2dnbGUpXG4gICAgKTtcbiAgICB0aGlzLiRzdWJzY3JpcHRpb24uYWRkKHRoaXMucGRmV3JhcHBlci5wb3NpdGlvblVwZGF0ZWQuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKHRocm90dGxlVGltZSg1MDAsIGFzeW5jU2NoZWR1bGVyLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBQZGZQb3NpdGlvblVwZGF0ZShldmVudC5sb2NhdGlvbikpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCF0aGlzLnBkZldyYXBwZXIpIHtcbiAgICAgIHRoaXMucGRmV3JhcHBlciA9IHRoaXMucGRmSnNXcmFwcGVyRmFjdG9yeS5jcmVhdGUodGhpcy52aWV3ZXJDb250YWluZXIpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy51cmwgJiYgdGhpcy5wZGZXcmFwcGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudCgpO1xuICAgICAgaWYgKHRoaXMuZW5hYmxlUmVkYWN0aW9ucykge1xuICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0aW9uTW9kZS5waXBlKGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRSb3RhdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuY2FzZUlkKSB7XG4gICAgICB0aGlzLmljcFN0b3JlLmRpc3BhdGNoKG5ldyBTZXRDYXNlSWQodGhpcy5jYXNlSWQpKTtcbiAgICB9XG4gIH1cblxuICByZXNldFJvdGF0aW9uKCkge1xuICAgIGlmICh0aGlzLmhhc0RpZmZlcmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBkZldyYXBwZXIucmVzZXRSb3RhdGlvbigwKTtcbiAgICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRG9jdW1lbnQoKSB7XG4gICAgdGhpcy5pbml0RG9jdW1lbnRQcm9ncmVzcygpO1xuICAgIGF3YWl0IHRoaXMucGRmV3JhcHBlci5sb2FkRG9jdW1lbnQodGhpcy51cmwpO1xuICAgIHRoaXMuZG9jdW1lbnRUaXRsZS5lbWl0KHRoaXMucGRmV3JhcHBlci5nZXRDdXJyZW50UERGVGl0bGUoKSk7XG4gICAgdGhpcy5zZXRQYWdlSGVpZ2h0cygpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tRG9jdW1lbnRzU2VsZWN0b3IuZ2V0UGFnZURpZmZlcmVuY2UpKVxuICAgICAgLnN1YnNjcmliZShoYXNEaWZmZXJlbnRQYWdlU2llID0+IHRoaXMuaGFzRGlmZmVyZW50UGFnZVNpemUgPSBoYXNEaWZmZXJlbnRQYWdlU2llKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRG9jdW1lbnRMb2FkUHJvZ3Jlc3MocHJvZ3Jlc3M6IERvY3VtZW50TG9hZFByb2dyZXNzKSB7XG4gICAgaWYgKHByb2dyZXNzLnRvdGFsKSB7XG4gICAgICB0aGlzLmxvYWRpbmdEb2N1bWVudFByb2dyZXNzID0gTWF0aC5taW4oMTAwLCBNYXRoLmNlaWwocHJvZ3Jlc3MubG9hZGVkIC8gcHJvZ3Jlc3MudG90YWwgKiAxMDApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRG9jdW1lbnRMb2FkZWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nRG9jdW1lbnQgPSBmYWxzZTtcbiAgICB0aGlzLm1lZGlhTG9hZFN0YXR1cy5lbWl0KFJlc3BvbnNlVHlwZS5TVUNDRVNTKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Eb2N1bWVudExvYWRGYWlsZWQoZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nRG9jdW1lbnQgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdlckV4Y2VwdGlvbiA9IG5ldyBWaWV3ZXJFeGNlcHRpb24oZXJyb3IubmFtZSwgeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gYENvdWxkIG5vdCBsb2FkIHRoZSBkb2N1bWVudCBcIiR7dGhpcy51cmx9XCJgO1xuXG4gICAgdGhpcy5tZWRpYUxvYWRTdGF0dXMuZW1pdChSZXNwb25zZVR5cGUuRkFJTFVSRSk7XG4gICAgdGhpcy5wZGZWaWV3ZXJFeGNlcHRpb24uZW1pdCh0aGlzLnZpZXdlckV4Y2VwdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2VzKGV2ZW50OiBQYWdlRXZlbnRbXSkge1xuICAgIGlmICh0aGlzLmVuYWJsZUFubm90YXRpb25zKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tRG9jdW1lbnRBY3Rpb25zLkFkZFBhZ2VzKGV2ZW50KSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHNlYXJjaEJhckhpZGRlbihoaWRkZW46IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5wZGZXcmFwcGVyICYmIGhpZGRlbikge1xuICAgICAgdGhpcy5wZGZXcmFwcGVyLmNsZWFyU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29tbWVudHNTdW1tYXJ5KCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1N1bW1hcnkoIXRoaXMudG9vbGJhckV2ZW50cy5zaG93Q29tbWVudFN1bW1hcnkuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHJvdGF0ZURvY3VtZW50KHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYWdlTnVtYmVyID0gdGhpcy5wZGZXcmFwcGVyLmdldFBhZ2VOdW1iZXIoKTtcbiAgICB0aGlzLnBkZldyYXBwZXIucm90YXRlKHJvdGF0aW9uKTtcbiAgICB0aGlzLnBkZldyYXBwZXIuc2V0UGFnZU51bWJlcihwYWdlTnVtYmVyKTtcbiAgICB0aGlzLnJvdGF0aW9uID0gKHRoaXMucm90YXRpb24gKyByb3RhdGlvbikgJSAzNjA7XG5cbiAgICB0aGlzLnNldFBhZ2VIZWlnaHRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREb2N1bWVudFByb2dyZXNzKCkge1xuICAgIHRoaXMubG9hZGluZ0RvY3VtZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdEb2N1bWVudFByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldFpvb20oem9vbUZhY3RvcjogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih6b29tRmFjdG9yKSkge1xuICAgICAgdGhpcy5wZGZXcmFwcGVyLnNldFpvb20oem9vbUZhY3Rvcik7XG4gICAgICB0aGlzLnpvb20gPSB0aGlzLmNhbGN1bGF0ZVpvb21WYWx1ZSh6b29tRmFjdG9yKTtcbiAgICAgIHRoaXMuc2V0UGFnZUhlaWdodHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0ZXBab29tKHpvb21GYWN0b3I6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4oem9vbUZhY3RvcikpIHtcbiAgICAgIHRoaXMucGRmV3JhcHBlci5zdGVwWm9vbSh6b29tRmFjdG9yKTtcbiAgICAgIHRoaXMuem9vbSA9IHRoaXMuY2FsY3VsYXRlWm9vbVZhbHVlKHRoaXMuem9vbSwgem9vbUZhY3Rvcik7XG4gICAgICB0aGlzLnNldFBhZ2VIZWlnaHRzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnZUhlaWdodHMoKSB7XG4gICAgdGhpcy5wYWdlSGVpZ2h0cyA9IFtdO1xuICAgIGNvbnN0IHBkZlZpZXdlckNoaWxkcmVuID0gdGhpcy5wZGZWaWV3ZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBkZlZpZXdlckNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VIZWlnaHRzLnB1c2gocGRmVmlld2VyQ2hpbGRyZW5baV0uY2xpZW50SGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVab29tVmFsdWUoem9vbVZhbHVlLCBpbmNyZW1lbnQgPSAwKSB7XG4gICAgY29uc3QgbmV3Wm9vbVZhbHVlID0gem9vbVZhbHVlICsgaW5jcmVtZW50O1xuICAgIGlmIChuZXdab29tVmFsdWUgPiA1KSB7XG4gICAgICByZXR1cm4gNTtcbiAgICB9XG4gICAgaWYgKG5ld1pvb21WYWx1ZSA8IDAuMSkge1xuICAgICAgcmV0dXJuIDAuMTtcbiAgICB9XG4gICAgcmV0dXJuICtuZXdab29tVmFsdWUudG9GaXhlZCgyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ29Ub0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uOiBhbnlbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRSb3RhdGlvbiA9IHRoaXMucm90YXRpb247XG4gICAgdGhpcy5yb3RhdGVEb2N1bWVudCgzNjAgLSB0aGlzLnJvdGF0aW9uKTtcbiAgICB0aGlzLnBkZldyYXBwZXIubmF2aWdhdGVUbyhkZXN0aW5hdGlvbik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJvdGF0ZURvY3VtZW50KGN1cnJlbnRSb3RhdGlvbik7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wZGZXcmFwcGVyLmdldFBhZ2VOdW1iZXIoKTtcbiAgfVxufVxuIiwiPG12LXNpZGUtYmFyXG4gICpuZ0lmPVwidG9vbGJhckV2ZW50cy5zaWRlYmFyT3BlblwiXG4gIGlkPVwic2lkZWJhckNvbnRhaW5lclwiXG4gIFt1cmxdPVwidXJsXCJcbiAgW3pvb21dPVwiem9vbVwiXG4gIFtyb3RhdGVdPVwicm90YXRpb25cIlxuICBbb3V0bGluZV09XCJkb2N1bWVudE91dGxpbmVcIlxuICBbYW5ub3RhdGlvbnNFbmFibGVkXT1cImVuYWJsZUFubm90YXRpb25zXCJcbiAgW2N1cnJlbnRQYWdlTnVtYmVyXT1cImdldEN1cnJlbnRQYWdlTnVtYmVyKClcIlxuPlxuPC9tdi1zaWRlLWJhcj5cbjxtdi1jb21tZW50LXNldC1oZWFkZXJcbiAgKm5nSWY9XCJlbmFibGVBbm5vdGF0aW9uc1wiXG4gIFtuZ0NsYXNzXT1cInsgJ3Nob3ctY29tbWVudHMtcGFuZWwnOiBzaG93Q29tbWVudHNQYW5lbCB9XCJcbiAgW3Nob3dDb21tZW50U3VtbWFyeV09XCJ0b29sYmFyQnV0dG9ucy5zaG93Q29tbWVudFN1bW1hcnlcIlxuICAoc2hvd0NvbW1lbnRTdW1tYXJ5RGlhbG9nKT1cInRvZ2dsZUNvbW1lbnRzU3VtbWFyeSgpXCJcbj5cbjwvbXYtY29tbWVudC1zZXQtaGVhZGVyPlxuPG12LXBhcnRpY2lwYW50cy1saXN0PjwvbXYtcGFydGljaXBhbnRzLWxpc3Q+XG48ZGl2XG4gIGNsYXNzPVwicGRmQ29udGFpbmVyXCJcbiAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCB9XCJcbiAgW25nQ2xhc3NdPVwieyBwZGZDb250YWluZXI6IHRydWUsIGhpZGRlbjogZXJyb3JNZXNzYWdlIH1cIlxuPlxuICA8bXYtcmVkYWN0aW9uLXNlYXJjaC1iYXI+PC9tdi1yZWRhY3Rpb24tc2VhcmNoLWJhcj5cbiAgPGRpdlxuICAgICN2aWV3ZXJDb250YWluZXJcbiAgICBtdkdyYWJORHJhZ1xuICAgIFtkcmFnWF09XCJ2aWV3ZXJDb250YWluZXJcIlxuICAgIFtkcmFnRW5hYmxlZF09XCJlbmFibGVHcmFiTkRyYWdcIlxuICAgIGlkPVwidmlld2VyQ29udGFpbmVyXCJcbiAgICBjbGFzcz1cInZpZXdlci1jb250YWluZXJcIlxuICAgIFtjbGFzcy5hbm5vdGF0aW9uc109XCJlbmFibGVBbm5vdGF0aW9uc1wiXG4gICAgW2NsYXNzLnNob3ctY29tbWVudHMtcGFuZWxdPVwiXG4gICAgICAoc2hvd0NvbW1lbnRzUGFuZWwgfHwgc2hvd0ljcFBhcnRpY2lwYW50c0xpc3QpICYmXG4gICAgICAodG9vbGJhckV2ZW50cy5yZWRhY3Rpb25Nb2RlIHwgYXN5bmMpICE9PSB0cnVlXG4gICAgXCJcbiAgICBbY2xhc3MuZ3JhYk5EcmFnXT1cImVuYWJsZUdyYWJORHJhZ1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICAjcGRmVmlld2VyXG4gICAgICBjbGFzcz1cInBkZlZpZXdlclwiXG4gICAgICBtdkNyZWF0ZVRleHRIaWdobGlnaHRcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgaGlkZGVuOiBsb2FkaW5nRG9jdW1lbnQsXG4gICAgICAgIGhpZ2hsaWdodE1vZGU6IGhpZ2hsaWdodE1vZGUgfCBhc3luYyxcbiAgICAgICAgZHJhd01vZGU6IGRyYXdNb2RlIHwgYXN5bmNcbiAgICAgIH1cIlxuICAgID48L2Rpdj5cbiAgICA8bXYtcmVkYWN0aW9uc1xuICAgICAgKm5nSWY9XCJ0b29sYmFyRXZlbnRzLnJlZGFjdGlvbk1vZGUgfCBhc3luYzsgZWxzZSBhbm5vdGF0aW9uVGVtcGxhdGVcIlxuICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICBbcm90YXRlXT1cInJvdGF0aW9uXCJcbiAgICA+PC9tdi1yZWRhY3Rpb25zPlxuICAgIDxuZy10ZW1wbGF0ZSAjYW5ub3RhdGlvblRlbXBsYXRlPlxuICAgICAgPG12LW1ldGFkYXRhLWxheWVyXG4gICAgICAgICpuZ0lmPVwiZW5hYmxlQW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvblNldFwiXG4gICAgICAgIFt6b29tXT1cInpvb21cIlxuICAgICAgICBbcm90YXRlXT1cInJvdGF0aW9uXCJcbiAgICAgID5cbiAgICAgIDwvbXYtbWV0YWRhdGEtbGF5ZXI+XG4gICAgICA8bXYtYm9va21hcmstaWNvbnMgW3pvb21dPVwiem9vbVwiIFtyb3RhdGVdPVwicm90YXRpb25cIj4gPC9tdi1ib29rbWFyay1pY29ucz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPG12LWNvbW1lbnQtc2V0XG4gICAgW2NvbnRlbnRTY3JvbGxUb3BdPVwidmlld2VyQ29udGFpbmVyLnNjcm9sbFRvcFwiXG4gICAgKm5nSWY9XCJcbiAgICAgIGVuYWJsZUFubm90YXRpb25zICYmXG4gICAgICBhbm5vdGF0aW9uU2V0ICYmXG4gICAgICAodG9vbGJhckV2ZW50cy5yZWRhY3Rpb25Nb2RlIHwgYXN5bmMpICE9PSB0cnVlXG4gICAgXCJcbiAgICBbYW5ub3RhdGlvblNldF09XCJhbm5vdGF0aW9uU2V0XCJcbiAgICBbem9vbV09XCJ6b29tXCJcbiAgICBbcm90YXRlXT1cInJvdGF0aW9uXCJcbiAgICBbaGVpZ2h0XT1cInBkZlZpZXdlci5vZmZzZXRIZWlnaHRcIlxuICAgIFtwYWdlSGVpZ2h0c109XCJwYWdlSGVpZ2h0c1wiXG4gID5cbiAgPC9tdi1jb21tZW50LXNldD5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmdNZXNzYWdlXCIgKm5nSWY9XCJsb2FkaW5nRG9jdW1lbnRcIj5cbiAgICA8aDMgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLW1cIj5cbiAgICAgIHt7IFwiTG9hZGluZy4uLlwiIHwgcnB4VHJhbnNsYXRlfX17e1xuICAgICAgICBsb2FkaW5nRG9jdW1lbnRQcm9ncmVzcyA/IGxvYWRpbmdEb2N1bWVudFByb2dyZXNzICsgXCIlXCIgOiBcIlwiXG4gICAgICB9fVxuICAgIDwvaDM+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=