@rocketshow/designer 1.32.0 → 1.33.0

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 (339) hide show
  1. package/esm2022/lib/array-sort-pipe.mjs +30 -0
  2. package/esm2022/lib/designer.component.mjs +605 -0
  3. package/esm2022/lib/designer.module.mjs +183 -0
  4. package/esm2022/lib/designer.service.mjs +14 -0
  5. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -0
  6. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
  7. package/esm2022/lib/effect/effect.component.mjs +174 -0
  8. package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
  9. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
  10. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
  11. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
  12. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
  13. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
  14. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
  15. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +160 -0
  16. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
  17. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
  18. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
  19. package/esm2022/lib/fixture/fixture.component.mjs +138 -0
  20. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
  21. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +589 -0
  22. package/esm2022/lib/intro/intro.component.mjs +95 -0
  23. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
  24. package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
  25. package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
  26. package/esm2022/lib/models/cached-fixture.mjs +6 -0
  27. package/esm2022/lib/models/color.mjs +8 -0
  28. package/esm2022/lib/models/composition.mjs +46 -0
  29. package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
  30. package/esm2022/lib/models/effect-curve.mjs +69 -0
  31. package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
  32. package/esm2022/lib/models/effect.mjs +12 -0
  33. package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
  34. package/esm2022/lib/models/fixture-capability.mjs +84 -0
  35. package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
  36. package/esm2022/lib/models/fixture-channel.mjs +24 -0
  37. package/esm2022/lib/models/fixture-mode.mjs +14 -0
  38. package/esm2022/lib/models/fixture-profile.mjs +70 -0
  39. package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
  40. package/esm2022/lib/models/fixture-wheel.mjs +15 -0
  41. package/esm2022/lib/models/fixture.mjs +40 -0
  42. package/esm2022/lib/models/preset-region-scene.mjs +8 -0
  43. package/esm2022/lib/models/preset.mjs +56 -0
  44. package/esm2022/lib/models/project.mjs +68 -0
  45. package/esm2022/lib/models/scene-playback-region.mjs +11 -0
  46. package/esm2022/lib/models/scene.mjs +27 -0
  47. package/esm2022/lib/models/universe.mjs +11 -0
  48. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
  49. package/esm2022/lib/preset/preset.component.mjs +131 -0
  50. package/esm2022/lib/preview/models/color-changer-3d.mjs +167 -0
  51. package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
  52. package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
  53. package/esm2022/lib/preview/preview.component.mjs +212 -0
  54. package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
  55. package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
  56. package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
  57. package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
  58. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
  59. package/esm2022/lib/scene/scene.component.mjs +110 -0
  60. package/esm2022/lib/services/animation.service.mjs +16 -0
  61. package/esm2022/lib/services/config.service.mjs +27 -0
  62. package/esm2022/lib/services/effect.service.mjs +14 -0
  63. package/esm2022/lib/services/error-dialog.service.mjs +39 -0
  64. package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
  65. package/esm2022/lib/services/fixture.service.mjs +431 -0
  66. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
  67. package/esm2022/lib/services/intro.service.mjs +140 -0
  68. package/esm2022/lib/services/preset.service.mjs +400 -0
  69. package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
  70. package/esm2022/lib/services/preview.service.mjs +496 -0
  71. package/esm2022/lib/services/project-load.service.mjs +149 -0
  72. package/esm2022/lib/services/project.service.mjs +97 -0
  73. package/esm2022/lib/services/scene.service.mjs +164 -0
  74. package/esm2022/lib/services/timeline.service.mjs +726 -0
  75. package/esm2022/lib/services/universe.service.mjs +23 -0
  76. package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
  77. package/esm2022/lib/services/user.service.mjs +89 -0
  78. package/esm2022/lib/services/uuid.service.mjs +23 -0
  79. package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
  80. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +334 -0
  81. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
  82. package/esm2022/lib/timeline/timeline.component.mjs +418 -0
  83. package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
  84. package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
  85. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
  86. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
  87. package/esm2022/public_api.mjs +7 -0
  88. package/esm2022/rocketshow-designer.mjs +5 -0
  89. package/fesm2022/rocketshow-designer.mjs +10626 -0
  90. package/fesm2022/rocketshow-designer.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/lib/array-sort-pipe.d.ts +3 -0
  93. package/lib/designer.component.d.ts +15 -12
  94. package/lib/designer.module.d.ts +54 -0
  95. package/lib/designer.service.d.ts +3 -0
  96. package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
  97. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
  98. package/lib/effect/effect.component.d.ts +3 -0
  99. package/lib/error-dialog/error-dialog.component.d.ts +3 -0
  100. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
  101. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
  102. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
  103. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
  104. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
  105. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
  106. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
  107. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
  108. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
  109. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
  110. package/lib/fixture/fixture.component.d.ts +3 -0
  111. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
  112. package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
  113. package/lib/intro/intro.component.d.ts +3 -0
  114. package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
  115. package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
  116. package/lib/preset/preset.component.d.ts +3 -0
  117. package/lib/preview/preview.component.d.ts +4 -4
  118. package/lib/project/project-browser/project-browser.component.d.ts +3 -0
  119. package/lib/project/project-import/project-import.component.d.ts +3 -0
  120. package/lib/project/project-save/project-save.component.d.ts +3 -0
  121. package/lib/project/project-share/project-share.component.d.ts +3 -0
  122. package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
  123. package/lib/scene/scene.component.d.ts +3 -0
  124. package/lib/services/animation.service.d.ts +3 -0
  125. package/lib/services/config.service.d.ts +3 -0
  126. package/lib/services/effect.service.d.ts +3 -0
  127. package/lib/services/error-dialog.service.d.ts +3 -0
  128. package/lib/services/fixture-pool.service.d.ts +3 -0
  129. package/lib/services/fixture.service.d.ts +3 -0
  130. package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
  131. package/lib/services/intro.service.d.ts +3 -0
  132. package/lib/services/preset.service.d.ts +3 -0
  133. package/lib/services/preview-mesh.service.d.ts +3 -0
  134. package/lib/services/preview.service.d.ts +4 -0
  135. package/lib/services/project-load.service.d.ts +3 -0
  136. package/lib/services/project.service.d.ts +3 -0
  137. package/lib/services/scene.service.d.ts +3 -0
  138. package/lib/services/timeline.service.d.ts +4 -1
  139. package/lib/services/universe.service.d.ts +3 -0
  140. package/lib/services/user-ensure-login.service.d.ts +3 -0
  141. package/lib/services/user.service.d.ts +3 -0
  142. package/lib/services/uuid.service.d.ts +3 -0
  143. package/lib/services/warning-dialog.service.d.ts +3 -0
  144. package/lib/timeline/composition-settings/composition-settings.component.d.ts +3 -0
  145. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
  146. package/lib/timeline/timeline.component.d.ts +3 -0
  147. package/lib/user/user-login/user-login.component.d.ts +3 -0
  148. package/lib/user/user-register/user-register.component.d.ts +3 -0
  149. package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
  150. package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
  151. package/package.json +20 -22
  152. package/rocketshow-designer-1.33.0.tgz +0 -0
  153. package/bundles/rocketshow-designer.umd.js +0 -9966
  154. package/bundles/rocketshow-designer.umd.js.map +0 -1
  155. package/bundles/rocketshow-designer.umd.min.js +0 -17
  156. package/bundles/rocketshow-designer.umd.min.js.map +0 -1
  157. package/esm2015/lib/array-sort-pipe.js +0 -28
  158. package/esm2015/lib/designer.component.js +0 -411
  159. package/esm2015/lib/designer.module.js +0 -117
  160. package/esm2015/lib/designer.service.js +0 -16
  161. package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
  162. package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
  163. package/esm2015/lib/effect/effect.component.js +0 -73
  164. package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
  165. package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
  166. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
  167. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
  168. package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
  169. package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
  170. package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
  171. package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
  172. package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
  173. package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
  174. package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
  175. package/esm2015/lib/fixture/fixture.component.js +0 -70
  176. package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
  177. package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
  178. package/esm2015/lib/intro/intro.component.js +0 -25
  179. package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
  180. package/esm2015/lib/models/cached-fixture-capability.js +0 -9
  181. package/esm2015/lib/models/cached-fixture-channel.js +0 -7
  182. package/esm2015/lib/models/cached-fixture.js +0 -6
  183. package/esm2015/lib/models/color.js +0 -8
  184. package/esm2015/lib/models/composition.js +0 -46
  185. package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
  186. package/esm2015/lib/models/effect-curve.js +0 -69
  187. package/esm2015/lib/models/effect-pan-tilt.js +0 -19
  188. package/esm2015/lib/models/effect.js +0 -12
  189. package/esm2015/lib/models/fixture-capability-value.js +0 -15
  190. package/esm2015/lib/models/fixture-capability.js +0 -84
  191. package/esm2015/lib/models/fixture-channel-value.js +0 -11
  192. package/esm2015/lib/models/fixture-channel.js +0 -24
  193. package/esm2015/lib/models/fixture-mode.js +0 -14
  194. package/esm2015/lib/models/fixture-profile.js +0 -70
  195. package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
  196. package/esm2015/lib/models/fixture-wheel.js +0 -15
  197. package/esm2015/lib/models/fixture.js +0 -40
  198. package/esm2015/lib/models/preset-region-scene.js +0 -8
  199. package/esm2015/lib/models/preset.js +0 -56
  200. package/esm2015/lib/models/project.js +0 -68
  201. package/esm2015/lib/models/scene-playback-region.js +0 -11
  202. package/esm2015/lib/models/scene.js +0 -27
  203. package/esm2015/lib/models/universe.js +0 -11
  204. package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
  205. package/esm2015/lib/preset/preset.component.js +0 -85
  206. package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
  207. package/esm2015/lib/preview/models/fixture-3d.js +0 -150
  208. package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
  209. package/esm2015/lib/preview/preview.component.js +0 -242
  210. package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
  211. package/esm2015/lib/project/project-import/project-import.component.js +0 -89
  212. package/esm2015/lib/project/project-save/project-save.component.js +0 -105
  213. package/esm2015/lib/project/project-share/project-share.component.js +0 -43
  214. package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
  215. package/esm2015/lib/scene/scene.component.js +0 -56
  216. package/esm2015/lib/services/animation.service.js +0 -17
  217. package/esm2015/lib/services/config.service.js +0 -28
  218. package/esm2015/lib/services/effect.service.js +0 -16
  219. package/esm2015/lib/services/error-dialog.service.js +0 -44
  220. package/esm2015/lib/services/fixture-pool.service.js +0 -34
  221. package/esm2015/lib/services/fixture.service.js +0 -443
  222. package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
  223. package/esm2015/lib/services/intro.service.js +0 -144
  224. package/esm2015/lib/services/preset.service.js +0 -416
  225. package/esm2015/lib/services/preview-mesh.service.js +0 -58
  226. package/esm2015/lib/services/preview.service.js +0 -500
  227. package/esm2015/lib/services/project-load.service.js +0 -171
  228. package/esm2015/lib/services/project.service.js +0 -113
  229. package/esm2015/lib/services/scene.service.js +0 -174
  230. package/esm2015/lib/services/timeline.service.js +0 -738
  231. package/esm2015/lib/services/universe.service.js +0 -24
  232. package/esm2015/lib/services/user-ensure-login.service.js +0 -44
  233. package/esm2015/lib/services/user.service.js +0 -93
  234. package/esm2015/lib/services/uuid.service.js +0 -25
  235. package/esm2015/lib/services/warning-dialog.service.js +0 -43
  236. package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
  237. package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
  238. package/esm2015/lib/timeline/timeline.component.js +0 -239
  239. package/esm2015/lib/user/user-login/user-login.component.js +0 -64
  240. package/esm2015/lib/user/user-register/user-register.component.js +0 -89
  241. package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
  242. package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
  243. package/esm2015/public_api.js +0 -7
  244. package/esm2015/rocketshow-designer.js +0 -61
  245. package/esm5/lib/array-sort-pipe.js +0 -31
  246. package/esm5/lib/designer.component.js +0 -468
  247. package/esm5/lib/designer.module.js +0 -120
  248. package/esm5/lib/designer.service.js +0 -17
  249. package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
  250. package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
  251. package/esm5/lib/effect/effect.component.js +0 -75
  252. package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
  253. package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
  254. package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
  255. package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
  256. package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
  257. package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
  258. package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
  259. package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
  260. package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
  261. package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
  262. package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
  263. package/esm5/lib/fixture/fixture.component.js +0 -71
  264. package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
  265. package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
  266. package/esm5/lib/intro/intro.component.js +0 -26
  267. package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
  268. package/esm5/lib/models/cached-fixture-capability.js +0 -11
  269. package/esm5/lib/models/cached-fixture-channel.js +0 -9
  270. package/esm5/lib/models/cached-fixture.js +0 -8
  271. package/esm5/lib/models/color.js +0 -10
  272. package/esm5/lib/models/composition.js +0 -60
  273. package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
  274. package/esm5/lib/models/effect-curve.js +0 -95
  275. package/esm5/lib/models/effect-pan-tilt.js +0 -24
  276. package/esm5/lib/models/effect.js +0 -14
  277. package/esm5/lib/models/fixture-capability-value.js +0 -17
  278. package/esm5/lib/models/fixture-capability.js +0 -86
  279. package/esm5/lib/models/fixture-channel-value.js +0 -13
  280. package/esm5/lib/models/fixture-channel.js +0 -38
  281. package/esm5/lib/models/fixture-mode.js +0 -16
  282. package/esm5/lib/models/fixture-profile.js +0 -114
  283. package/esm5/lib/models/fixture-wheel-slot.js +0 -28
  284. package/esm5/lib/models/fixture-wheel.js +0 -29
  285. package/esm5/lib/models/fixture.js +0 -42
  286. package/esm5/lib/models/preset-region-scene.js +0 -10
  287. package/esm5/lib/models/preset.js +0 -90
  288. package/esm5/lib/models/project.js +0 -122
  289. package/esm5/lib/models/scene-playback-region.js +0 -13
  290. package/esm5/lib/models/scene.js +0 -29
  291. package/esm5/lib/models/universe.js +0 -13
  292. package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
  293. package/esm5/lib/preset/preset.component.js +0 -86
  294. package/esm5/lib/preview/models/color-changer-3d.js +0 -194
  295. package/esm5/lib/preview/models/fixture-3d.js +0 -196
  296. package/esm5/lib/preview/models/moving-head-3d.js +0 -250
  297. package/esm5/lib/preview/preview.component.js +0 -280
  298. package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
  299. package/esm5/lib/project/project-import/project-import.component.js +0 -88
  300. package/esm5/lib/project/project-save/project-save.component.js +0 -120
  301. package/esm5/lib/project/project-share/project-share.component.js +0 -44
  302. package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
  303. package/esm5/lib/scene/scene.component.js +0 -57
  304. package/esm5/lib/services/animation.service.js +0 -18
  305. package/esm5/lib/services/config.service.js +0 -29
  306. package/esm5/lib/services/effect.service.js +0 -17
  307. package/esm5/lib/services/error-dialog.service.js +0 -46
  308. package/esm5/lib/services/fixture-pool.service.js +0 -36
  309. package/esm5/lib/services/fixture.service.js +0 -643
  310. package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
  311. package/esm5/lib/services/intro.service.js +0 -145
  312. package/esm5/lib/services/preset.service.js +0 -637
  313. package/esm5/lib/services/preview-mesh.service.js +0 -61
  314. package/esm5/lib/services/preview.service.js +0 -754
  315. package/esm5/lib/services/project-load.service.js +0 -185
  316. package/esm5/lib/services/project.service.js +0 -127
  317. package/esm5/lib/services/scene.service.js +0 -251
  318. package/esm5/lib/services/timeline.service.js +0 -845
  319. package/esm5/lib/services/universe.service.js +0 -36
  320. package/esm5/lib/services/user-ensure-login.service.js +0 -45
  321. package/esm5/lib/services/user.service.js +0 -95
  322. package/esm5/lib/services/uuid.service.js +0 -26
  323. package/esm5/lib/services/warning-dialog.service.js +0 -45
  324. package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
  325. package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
  326. package/esm5/lib/timeline/timeline.component.js +0 -243
  327. package/esm5/lib/user/user-login/user-login.component.js +0 -66
  328. package/esm5/lib/user/user-register/user-register.component.js +0 -91
  329. package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
  330. package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
  331. package/esm5/public_api.js +0 -7
  332. package/esm5/rocketshow-designer.js +0 -61
  333. package/fesm2015/rocketshow-designer.js +0 -7945
  334. package/fesm2015/rocketshow-designer.js.map +0 -1
  335. package/fesm5/rocketshow-designer.js +0 -9690
  336. package/fesm5/rocketshow-designer.js.map +0 -1
  337. package/rocketshow-designer-1.32.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -1,233 +0,0 @@
1
- import { forkJoin } from 'rxjs';
2
- import { map } from 'rxjs/operators';
3
- import * as THREE from 'three';
4
- import { FixtureCapabilityType } from '../../models/fixture-capability';
5
- import { Fixture3d } from './fixture-3d';
6
- export class MovingHead3d extends Fixture3d {
7
- constructor(fixtureService, previewMeshService, fixture, scene) {
8
- super(fixtureService, fixture, scene);
9
- this.pointLightMaxIntensity = 2;
10
- this.spotLightLightMaxIntensity = 10;
11
- this.headGroup = new THREE.Object3D();
12
- this.spotlightGroup = new THREE.Object3D();
13
- this.armGroup = new THREE.Object3D();
14
- this.objectGroup = new THREE.Object3D();
15
- forkJoin([
16
- previewMeshService.getMesh('moving_head_socket'),
17
- previewMeshService.getMesh('moving_head_arm'),
18
- previewMeshService.getMesh('moving_head_head'),
19
- ])
20
- .pipe(map(([socket, arm, head]) => {
21
- this.socket = socket;
22
- this.arm = arm;
23
- this.head = head;
24
- this.createObjects();
25
- }))
26
- .subscribe();
27
- }
28
- atmosphereMat() {
29
- const vertexShader = [
30
- 'varying vec3 vVertexWorldPosition;',
31
- 'varying vec3 vVertexNormal;',
32
- 'void main(){',
33
- ' vVertexNormal = normalize(normalMatrix * normal);',
34
- ' vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',
35
- ' // set gl_Position',
36
- ' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
37
- '}',
38
- ].join('\n');
39
- const fragmentShader = [
40
- 'uniform vec3 glowColor;',
41
- 'uniform float coeficient;',
42
- 'uniform float power;',
43
- 'uniform float opacity;',
44
- 'varying vec3 vVertexNormal;',
45
- 'varying vec3 vVertexWorldPosition;',
46
- 'void main(){',
47
- ' vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',
48
- ' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',
49
- ' viewCameraToVertex = normalize(viewCameraToVertex);',
50
- ' float intensity = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
51
- ' gl_FragColor = vec4(glowColor, intensity * opacity);',
52
- '}',
53
- ].join('\n');
54
- // create custom material from the shader code above
55
- // that is within specially labeled script tags
56
- const material = new THREE.ShaderMaterial({
57
- uniforms: {
58
- coeficient: {
59
- type: 'f',
60
- value: 0.3,
61
- },
62
- power: {
63
- type: 'f',
64
- value: 1.3,
65
- },
66
- opacity: {
67
- type: 'f',
68
- value: 1.0,
69
- },
70
- glowColor: {
71
- type: 'c',
72
- value: new THREE.Color('white'),
73
- },
74
- },
75
- vertexShader,
76
- fragmentShader,
77
- // blending: THREE.AdditiveBlending,
78
- transparent: true,
79
- depthWrite: false,
80
- });
81
- return material;
82
- }
83
- createSpotLightBeam() {
84
- if (this.spotLightBeam) {
85
- this.spotlightGroup.remove(this.spotLightBeam);
86
- }
87
- // TODO update the correct angle from the profile
88
- const beamAngleDegrees = 14;
89
- const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);
90
- geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
91
- geometry.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
92
- // var zrak_mat = new THREE.MeshBasicMaterial({ color: 0xffffff, blending: THREE.AdditiveBlending, opacity: 0.1 });
93
- this.atmosphereMaterial = this.atmosphereMat();
94
- this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
95
- this.spotLightBeam.position.set(0, -0.02, 0);
96
- this.spotlightGroup.add(this.spotLightBeam);
97
- this.spotLightBeam.rotation.x = Math.PI / 2;
98
- }
99
- createObjects() {
100
- this.material = new THREE.MeshLambertMaterial({
101
- color: 0x0d0d0d,
102
- emissive: 0x0d0d0d,
103
- });
104
- this.socket.material = this.material;
105
- this.arm.material = this.material;
106
- this.head.material = this.material;
107
- // Add the head
108
- this.head.scale.multiplyScalar(0.9);
109
- this.head.position.set(-0.1, 0, 0);
110
- const headPivotGroup = new THREE.Object3D();
111
- headPivotGroup.add(this.head);
112
- this.headGroup.add(headPivotGroup);
113
- // Add the spotlight
114
- this.spotLight = new THREE.SpotLight(0xffffff, 1);
115
- this.spotLight.angle = 0.244;
116
- this.spotLight.penumbra = 0.5;
117
- this.spotLight.decay = 2;
118
- this.spotLight.distance = 60000;
119
- this.spotLight.castShadow = false;
120
- this.spotLight.intensity = 10;
121
- this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
122
- // scene.add(this.spotLightHelper);
123
- const spotLightTarget = new THREE.Object3D();
124
- this.spotLight.target = spotLightTarget;
125
- this.spotlightGroup.add(this.spotLight);
126
- this.spotlightGroup.add(spotLightTarget);
127
- this.spotLight.position.set(0, -1.4, 0);
128
- spotLightTarget.position.set(0, -10, 0);
129
- // Add the point light for the surrounding light
130
- this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);
131
- this.spotlightGroup.add(this.pointLight);
132
- this.pointLight.position.set(0, -1.4, 0);
133
- // Add the light beam
134
- this.createSpotLightBeam();
135
- this.headGroup.add(this.spotlightGroup);
136
- // Add the arm
137
- this.armGroup.add(this.headGroup);
138
- this.headGroup.position.set(0, -0.6, 0);
139
- this.armGroup.add(this.arm);
140
- // Add the socket
141
- this.objectGroup.add(this.armGroup);
142
- this.objectGroup.add(this.socket);
143
- this.socket.position.set(0, 1.2, 0);
144
- // A moving head has about 32 cm in width
145
- this.objectGroup.scale.multiplyScalar(9);
146
- this.scene.add(this.objectGroup);
147
- this.isLoaded = true;
148
- }
149
- getObject() {
150
- return this.objectGroup;
151
- }
152
- updatePreview(channelValues, masterDimmerValue) {
153
- super.updatePreview(channelValues, masterDimmerValue);
154
- if (!this.isLoaded) {
155
- return;
156
- }
157
- // Apply default settings
158
- let panStart = 0;
159
- let panEnd = 255;
160
- let tiltStart = 0;
161
- let tiltEnd = 255;
162
- this.pan = 0;
163
- this.tilt = 0;
164
- // Apply the known property values
165
- for (const channelValue of channelValues) {
166
- const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);
167
- const capability = this.getCapabilityInValue(channel, channelValue.value);
168
- if (capability) {
169
- switch (capability.capability.type) {
170
- case FixtureCapabilityType.Pan: {
171
- panStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;
172
- panEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 540;
173
- this.pan = channelValue.value / channel.maxValue;
174
- break;
175
- }
176
- case FixtureCapabilityType.Tilt: {
177
- tiltStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;
178
- tiltEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 2700;
179
- this.tilt = channelValue.value / channel.maxValue;
180
- break;
181
- }
182
- }
183
- }
184
- }
185
- this.updatePosition(this.objectGroup);
186
- // calculate the y/x rotation in radiants based on pan/tilt (0-1) respecting the max pan/tilt
187
- this.armGroup.rotation.y = THREE.Math.degToRad(panEnd * this.pan + panStart) - THREE.Math.degToRad(panEnd / 2);
188
- this.headGroup.rotation.x = THREE.Math.degToRad(tiltEnd * this.tilt + tiltStart) - THREE.Math.degToRad(tiltEnd / 2);
189
- // Update the angle (only on change, because it's expensive)
190
- // TODO update the correct angle from the profile
191
- const beamAngleDregrees = 14;
192
- if (this.lastBeamAngleDegrees !== beamAngleDregrees) {
193
- this.spotLight.angle = THREE.Math.degToRad(beamAngleDregrees);
194
- this.createSpotLightBeam();
195
- this.lastBeamAngleDegrees = beamAngleDregrees;
196
- }
197
- // Update the material
198
- if (this.lastSelected !== this.isSelected) {
199
- if (this.isSelected) {
200
- this.socket.material = this.selectedMaterial;
201
- this.arm.material = this.selectedMaterial;
202
- this.head.material = this.selectedMaterial;
203
- }
204
- else {
205
- this.socket.material = this.material;
206
- this.arm.material = this.material;
207
- this.head.material = this.material;
208
- }
209
- this.lastSelected = this.isSelected;
210
- }
211
- // Update the light helpers
212
- this.spotLightHelper.update();
213
- // Apply the colors
214
- const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
215
- this.pointLight.color = color;
216
- this.spotLight.color = color;
217
- this.spotLightBeam.material.uniforms.glowColor.value = color;
218
- // Apply the dimmer value
219
- // Take the color into account for the beam (don't show a black beam)
220
- const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
221
- this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);
222
- this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;
223
- this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
224
- // this.spotLightBeam.material.uniforms.viewVector.value =
225
- // new THREE.Vector3().subVectors(this.camera.position, this.spotLightBeam.position);
226
- }
227
- destroy() {
228
- this.scene.remove(this.objectGroup);
229
- this.material.dispose();
230
- this.atmosphereMaterial.dispose();
231
- }
232
- }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLWhlYWQtM2QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9wcmV2aWV3L21vZGVscy9tb3ZpbmctaGVhZC0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUl4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE1BQU0sT0FBTyxZQUFhLFNBQVEsU0FBUztJQWdMekMsWUFBWSxjQUE4QixFQUFFLGtCQUFzQyxFQUFFLE9BQXNCLEVBQUUsS0FBVTtRQUNwSCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQWhMdkIsMkJBQXNCLEdBQVcsQ0FBQyxDQUFDO1FBQ25DLCtCQUEwQixHQUFXLEVBQUUsQ0FBQztRQVNqRCxjQUFTLEdBQW1CLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pELG1CQUFjLEdBQW1CLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RELGFBQVEsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsZ0JBQVcsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFxS3pELFFBQVEsQ0FBQztZQUNQLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUNoRCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDN0Msa0JBQWtCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1NBQy9DLENBQUM7YUFDQyxJQUFJLENB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LENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUV0RSx5QkFBeUI7UUFDekIscUVBQXFFO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRFLDBEQUEwRDtRQUMxRCx5RkFBeUY7SUFDM0YsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmV2aWV3TWVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmV2aWV3LW1lc2guc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlM2QgfSBmcm9tICcuL2ZpeHR1cmUtM2QnO1xuXG5leHBvcnQgY2xhc3MgTW92aW5nSGVhZDNkIGV4dGVuZHMgRml4dHVyZTNkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2ludExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwb3RMaWdodExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAxMDtcblxuICBwcml2YXRlIHBhbjogbnVtYmVyO1xuICBwcml2YXRlIHRpbHQ6IG51bWJlcjtcblxuICBwcml2YXRlIHNvY2tldDogVEhSRUUuTWVzaDtcbiAgcHJpdmF0ZSBhcm06IFRIUkVFLk1lc2g7XG4gIHByaXZhdGUgaGVhZDogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIGhlYWRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90bGlnaHRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBhcm1Hcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBvYmplY3RHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90TGlnaHQ6IFRIUkVFLlNwb3RMaWdodDtcbiAgcHJpdmF0ZSBzcG90TGlnaHRIZWxwZXI6IFRIUkVFLlNwb3RMaWdodEhlbHBlcjtcbiAgcHJpdmF0ZSBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgcG9pbnRMaWdodDogVEhSRUUuUG9pbnRMaWdodDtcblxuICBwcml2YXRlIGxhc3RCZWFtQW5nbGVEZWdyZWVzOiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgbWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBwcml2YXRlIGF0bW9zcGhlcmVNYXRlcmlhbDogVEhSRUUuU2hhZGVyTWF0ZXJpYWw7XG5cbiAgcHJpdmF0ZSBhdG1vc3BoZXJlTWF0KCkge1xuICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IFtcbiAgICAgICd2YXJ5aW5nIHZlYzNcdHZWZXJ0ZXhXb3JsZFBvc2l0aW9uOycsXG4gICAgICAndmFyeWluZyB2ZWMzXHR2VmVydGV4Tm9ybWFsOycsXG5cbiAgICAgICd2b2lkIG1haW4oKXsnLFxuICAgICAgJ1x0dlZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZShub3JtYWxNYXRyaXggKiBub3JtYWwpOycsXG5cbiAgICAgICdcdHZWZXJ0ZXhXb3JsZFBvc2l0aW9uID0gKG1vZGVsTWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6OycsXG5cbiAgICAgICdcdC8vIHNldCBnbF9Qb3NpdGlvbicsXG4gICAgICAnXHRnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsnLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG4gICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBbXG4gICAgICAndW5pZm9ybSB2ZWMzXHRnbG93Q29sb3I7JyxcbiAgICAgICd1bmlmb3JtIGZsb2F0XHRjb2VmaWNpZW50OycsXG4gICAgICAndW5pZm9ybSBmbG9hdFx0cG93ZXI7JyxcbiAgICAgICd1bmlmb3JtIGZsb2F0XHRvcGFjaXR5OycsXG5cbiAgICAgICd2YXJ5aW5nIHZlYzNcdHZWZXJ0ZXhOb3JtYWw7JyxcbiAgICAgICd2YXJ5aW5nIHZlYzNcdHZWZXJ0ZXhXb3JsZFBvc2l0aW9uOycsXG5cbiAgICAgICd2b2lkIG1haW4oKXsnLFxuICAgICAgJ1x0dmVjMyB3b3JsZENhbWVyYVRvVmVydGV4PSB2VmVydGV4V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uOycsXG4gICAgICAnXHR2ZWMzIHZpZXdDYW1lcmFUb1ZlcnRleFx0PSAodmlld01hdHJpeCAqIHZlYzQod29ybGRDYW1lcmFUb1ZlcnRleCwgMC4wKSkueHl6OycsXG4gICAgICAnXHR2aWV3Q2FtZXJhVG9WZXJ0ZXhcdD0gbm9ybWFsaXplKHZpZXdDYW1lcmFUb1ZlcnRleCk7JyxcbiAgICAgICdcdGZsb2F0IGludGVuc2l0eVx0XHQ9IHBvdyhjb2VmaWNpZW50ICsgZG90KHZWZXJ0ZXhOb3JtYWwsIHZpZXdDYW1lcmFUb1ZlcnRleCksIHBvd2VyKTsnLFxuICAgICAgJ1x0Z2xfRnJhZ0NvbG9yXHRcdD0gdmVjNChnbG93Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpOycsXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIC8vIGNyZWF0ZSBjdXN0b20gbWF0ZXJpYWwgZnJvbSB0aGUgc2hhZGVyIGNvZGUgYWJvdmVcbiAgICAvLyB0aGF0IGlzIHdpdGhpbiBzcGVjaWFsbHkgbGFiZWxlZCBzY3JpcHQgdGFnc1xuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcbiAgICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIGNvZWZpY2llbnQ6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDAuMyxcbiAgICAgICAgfSxcbiAgICAgICAgcG93ZXI6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDEuMyxcbiAgICAgICAgfSxcbiAgICAgICAgb3BhY2l0eToge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogMS4wLFxuICAgICAgICB9LFxuICAgICAgICBnbG93Q29sb3I6IHtcbiAgICAgICAgICB0eXBlOiAnYycsXG4gICAgICAgICAgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcignd2hpdGUnKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXIsXG4gICAgICBmcmFnbWVudFNoYWRlcixcbiAgICAgIC8vIGJsZW5kaW5nOiBUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nLFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRlcmlhbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3BvdExpZ2h0QmVhbSgpIHtcbiAgICBpZiAodGhpcy5zcG90TGlnaHRCZWFtKSB7XG4gICAgICB0aGlzLnNwb3RsaWdodEdyb3VwLnJlbW92ZSh0aGlzLnNwb3RMaWdodEJlYW0pO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBjb3JyZWN0IGFuZ2xlIGZyb20gdGhlIHByb2ZpbGVcbiAgICBjb25zdCBiZWFtQW5nbGVEZWdyZWVzID0gMTQ7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSgwLjEsIGJlYW1BbmdsZURlZ3JlZXMgKiAxLjIsIDEwMCwgNjQsIDIwLCBmYWxzZSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXgobmV3IFRIUkVFLk1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oMCwgLWdlb21ldHJ5LnBhcmFtZXRlcnMuaGVpZ2h0IC8gMiwgMCkpO1xuICAgIGdlb21ldHJ5LmFwcGx5TWF0cml4KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblxuICAgIC8vIHZhciB6cmFrX21hdCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7IGNvbG9yOiAweGZmZmZmZiwgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsIG9wYWNpdHk6IDAuMSB9KTtcblxuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsID0gdGhpcy5hdG1vc3BoZXJlTWF0KCk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24uc2V0KDAsIC0wLjAyLCAwKTtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHRoaXMuc3BvdExpZ2h0QmVhbSk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2JqZWN0cygpIHtcbiAgICAodGhpcy5tYXRlcmlhbCBhcyBhbnkpID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4MGQwZDBkLFxuICAgICAgZW1pc3NpdmU6IDB4MGQwZDBkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zb2NrZXQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgIHRoaXMuYXJtLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICB0aGlzLmhlYWQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG4gICAgLy8gQWRkIHRoZSBoZWFkXG4gICAgdGhpcy5oZWFkLnNjYWxlLm11bHRpcGx5U2NhbGFyKDAuOSk7XG4gICAgdGhpcy5oZWFkLnBvc2l0aW9uLnNldCgtMC4xLCAwLCAwKTtcbiAgICBjb25zdCBoZWFkUGl2b3RHcm91cCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIGhlYWRQaXZvdEdyb3VwLmFkZCh0aGlzLmhlYWQpO1xuICAgIHRoaXMuaGVhZEdyb3VwLmFkZChoZWFkUGl2b3RHcm91cCk7XG5cbiAgICAvLyBBZGQgdGhlIHNwb3RsaWdodFxuICAgIHRoaXMuc3BvdExpZ2h0ID0gbmV3IFRIUkVFLlNwb3RMaWdodCgweGZmZmZmZiwgMSk7XG4gICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSAwLjI0NDtcbiAgICB0aGlzLnNwb3RMaWdodC5wZW51bWJyYSA9IDAuNTtcbiAgICB0aGlzLnNwb3RMaWdodC5kZWNheSA9IDI7XG4gICAgdGhpcy5zcG90TGlnaHQuZGlzdGFuY2UgPSA2MDAwMDtcbiAgICB0aGlzLnNwb3RMaWdodC5jYXN0U2hhZG93ID0gZmFsc2U7XG4gICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gMTA7XG5cbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlciA9IG5ldyBUSFJFRS5TcG90TGlnaHRIZWxwZXIodGhpcy5zcG90TGlnaHQpO1xuICAgIC8vIHNjZW5lLmFkZCh0aGlzLnNwb3RMaWdodEhlbHBlcik7XG5cbiAgICBjb25zdCBzcG90TGlnaHRUYXJnZXQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICB0aGlzLnNwb3RMaWdodC50YXJnZXQgPSBzcG90TGlnaHRUYXJnZXQ7XG5cbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodCk7XG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQoc3BvdExpZ2h0VGFyZ2V0KTtcbiAgICB0aGlzLnNwb3RMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG4gICAgc3BvdExpZ2h0VGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAtMTAsIDApO1xuXG4gICAgLy8gQWRkIHRoZSBwb2ludCBsaWdodCBmb3IgdGhlIHN1cnJvdW5kaW5nIGxpZ2h0XG4gICAgdGhpcy5wb2ludExpZ2h0ID0gbmV3IFRIUkVFLlBvaW50TGlnaHQoMHhmZmZmZmYsIDIsIDEwMDApO1xuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHRoaXMucG9pbnRMaWdodCk7XG4gICAgdGhpcy5wb2ludExpZ2h0LnBvc2l0aW9uLnNldCgwLCAtMS40LCAwKTtcblxuICAgIC8vIEFkZCB0aGUgbGlnaHQgYmVhbVxuICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuXG4gICAgdGhpcy5oZWFkR3JvdXAuYWRkKHRoaXMuc3BvdGxpZ2h0R3JvdXApO1xuXG4gICAgLy8gQWRkIHRoZSBhcm1cbiAgICB0aGlzLmFybUdyb3VwLmFkZCh0aGlzLmhlYWRHcm91cCk7XG4gICAgdGhpcy5oZWFkR3JvdXAucG9zaXRpb24uc2V0KDAsIC0wLjYsIDApO1xuICAgIHRoaXMuYXJtR3JvdXAuYWRkKHRoaXMuYXJtKTtcblxuICAgIC8vIEFkZCB0aGUgc29ja2V0XG4gICAgdGhpcy5vYmplY3RHcm91cC5hZGQodGhpcy5hcm1Hcm91cCk7XG4gICAgdGhpcy5vYmplY3RHcm91cC5hZGQodGhpcy5zb2NrZXQpO1xuICAgIHRoaXMuc29ja2V0LnBvc2l0aW9uLnNldCgwLCAxLjIsIDApO1xuXG4gICAgLy8gQSBtb3ZpbmcgaGVhZCBoYXMgYWJvdXQgMzIgY20gaW4gd2lkdGhcbiAgICB0aGlzLm9iamVjdEdyb3VwLnNjYWxlLm11bHRpcGx5U2NhbGFyKDkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmVTZXJ2aWNlOiBGaXh0dXJlU2VydmljZSwgcHJldmlld01lc2hTZXJ2aWNlOiBQcmV2aWV3TWVzaFNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICBzdXBlcihmaXh0dXJlU2VydmljZSwgZml4dHVyZSwgc2NlbmUpO1xuXG4gICAgZm9ya0pvaW4oW1xuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX3NvY2tldCcpLFxuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX2FybScpLFxuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX2hlYWQnKSxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW3NvY2tldCwgYXJtLCBoZWFkXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgIHRoaXMuYXJtID0gYXJtO1xuICAgICAgICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG5cbiAgICAgICAgICB0aGlzLmNyZWF0ZU9iamVjdHMoKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPYmplY3QoKTogVEhSRUUuT2JqZWN0M0Qge1xuICAgIHJldHVybiB0aGlzLm9iamVjdEdyb3VwO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByZXZpZXcoY2hhbm5lbFZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLCBtYXN0ZXJEaW1tZXJWYWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzLCBtYXN0ZXJEaW1tZXJWYWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuaXNMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgbGV0IHBhblN0YXJ0ID0gMDtcbiAgICBsZXQgcGFuRW5kID0gMjU1O1xuXG4gICAgbGV0IHRpbHRTdGFydCA9IDA7XG4gICAgbGV0IHRpbHRFbmQgPSAyNTU7XG5cbiAgICB0aGlzLnBhbiA9IDA7XG4gICAgdGhpcy50aWx0ID0gMDtcblxuICAgIC8vIEFwcGx5IHRoZSBrbm93biBwcm9wZXJ0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG4gICAgICBpZiAoY2FwYWJpbGl0eSkge1xuICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuOiB7XG4gICAgICAgICAgICBwYW5TdGFydCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVTdGFydCkgfHwgMDtcbiAgICAgICAgICAgIHBhbkVuZCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVFbmQpIHx8IDU0MDtcbiAgICAgICAgICAgIHRoaXMucGFuID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5UaWx0OiB7XG4gICAgICAgICAgICB0aWx0U3RhcnQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlU3RhcnQpIHx8IDA7XG4gICAgICAgICAgICB0aWx0RW5kID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZUVuZCkgfHwgMjcwMDtcbiAgICAgICAgICAgIHRoaXMudGlsdCA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRoaXMub2JqZWN0R3JvdXApO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSB5L3ggcm90YXRpb24gaW4gcmFkaWFudHMgYmFzZWQgb24gcGFuL3RpbHQgKDAtMSkgcmVzcGVjdGluZyB0aGUgbWF4IHBhbi90aWx0XG4gICAgdGhpcy5hcm1Hcm91cC5yb3RhdGlvbi55ID0gVEhSRUUuTWF0aC5kZWdUb1JhZChwYW5FbmQgKiB0aGlzLnBhbiArIHBhblN0YXJ0KSAtIFRIUkVFLk1hdGguZGVnVG9SYWQocGFuRW5kIC8gMik7XG4gICAgdGhpcy5oZWFkR3JvdXAucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQodGlsdEVuZCAqIHRoaXMudGlsdCArIHRpbHRTdGFydCkgLSBUSFJFRS5NYXRoLmRlZ1RvUmFkKHRpbHRFbmQgLyAyKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgYW5nbGUgKG9ubHkgb24gY2hhbmdlLCBiZWNhdXNlIGl0J3MgZXhwZW5zaXZlKVxuICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBjb3JyZWN0IGFuZ2xlIGZyb20gdGhlIHByb2ZpbGVcbiAgICBjb25zdCBiZWFtQW5nbGVEcmVncmVlcyA9IDE0O1xuICAgIGlmICh0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzICE9PSBiZWFtQW5nbGVEcmVncmVlcykge1xuICAgICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKGJlYW1BbmdsZURyZWdyZWVzKTtcbiAgICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuICAgICAgdGhpcy5sYXN0QmVhbUFuZ2xlRGVncmVlcyA9IGJlYW1BbmdsZURyZWdyZWVzO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgbWF0ZXJpYWxcbiAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWQgIT09IHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNvY2tldC5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLnNlbGVjdGVkTWF0ZXJpYWw7XG4gICAgICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgICB0aGlzLmhlYWQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpZ2h0IGhlbHBlcnNcbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlci51cGRhdGUoKTtcblxuICAgIC8vIEFwcGx5IHRoZSBjb2xvcnNcbiAgICBjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigncmdiKCcgKyB0aGlzLmNvbG9yUmVkICsgJywgJyArIHRoaXMuY29sb3JHcmVlbiArICcsICcgKyB0aGlzLmNvbG9yQmx1ZSArICcpJyk7XG5cbiAgICB0aGlzLnBvaW50TGlnaHQuY29sb3IgPSBjb2xvcjtcblxuICAgIHRoaXMuc3BvdExpZ2h0LmNvbG9yID0gY29sb3I7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLmdsb3dDb2xvci52YWx1ZSA9IGNvbG9yO1xuXG4gICAgLy8gQXBwbHkgdGhlIGRpbW1lciB2YWx1ZVxuICAgIC8vIFRha2UgdGhlIGNvbG9yIGludG8gYWNjb3VudCBmb3IgdGhlIGJlYW0gKGRvbid0IHNob3cgYSBibGFjayBiZWFtKVxuICAgIGNvbnN0IGludGVuc2l0eUNvbG9yID0gTWF0aC5tYXgodGhpcy5jb2xvclJlZCwgdGhpcy5jb2xvckdyZWVuLCB0aGlzLmNvbG9yQmx1ZSk7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpO1xuXG4gICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5zcG90TGlnaHRMaWdodE1heEludGVuc2l0eSAqIHRoaXMuZGltbWVyO1xuICAgIHRoaXMucG9pbnRMaWdodC5pbnRlbnNpdHkgPSB0aGlzLnBvaW50TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcblxuICAgIC8vIHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbC51bmlmb3Jtcy52aWV3VmVjdG9yLnZhbHVlID1cbiAgICAvLyAgICAgbmV3IFRIUkVFLlZlY3RvcjMoKS5zdWJWZWN0b3JzKHRoaXMuY2FtZXJhLnBvc2l0aW9uLCB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24pO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnNjZW5lLnJlbW92ZSh0aGlzLm9iamVjdEdyb3VwKTtcbiAgICB0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmF0bW9zcGhlcmVNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,242 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
3
- import * as THREE from 'three';
4
- import STATS from 'three/examples/js/libs/stats.min';
5
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
6
- import { FixtureCategory } from '../models/fixture-profile';
7
- import { FixtureService } from '../services/fixture.service';
8
- import { PreviewMeshService } from '../services/preview-mesh.service';
9
- import { PreviewService } from '../services/preview.service';
10
- import { ProjectService } from '../services/project.service';
11
- import { TimelineService } from '../services/timeline.service';
12
- import { Positioning } from './../models/fixture';
13
- import { AnimationService } from './../services/animation.service';
14
- import { ColorChanger3d } from './models/color-changer-3d';
15
- import { MovingHead3d } from './models/moving-head-3d';
16
- let PreviewComponent = class PreviewComponent {
17
- constructor(fixtureService, previewMeshService, animationService, previewService, timelineService, projectService) {
18
- this.fixtureService = fixtureService;
19
- this.previewMeshService = previewMeshService;
20
- this.animationService = animationService;
21
- this.previewService = previewService;
22
- this.timelineService = timelineService;
23
- this.projectService = projectService;
24
- this.stats = STATS();
25
- // private rendererStats = new THREEx.RendererStats();
26
- this.fixtures3d = [];
27
- this.previewService.doUpdateFixtureSetup.subscribe(() => {
28
- // synchronize the 3d-fixtures to the project fixtures
29
- this.syncFixtures();
30
- });
31
- }
32
- syncFixtures() {
33
- // remove all fixtures
34
- for (const fixture3d of this.fixtures3d) {
35
- fixture3d.destroy();
36
- }
37
- this.fixtures3d = [];
38
- // add all fixtures from the project
39
- for (const fixture of this.fixtureService.cachedFixtures) {
40
- switch (fixture.profile.categories[0]) {
41
- case FixtureCategory['Moving Head']:
42
- this.fixtures3d.push(new MovingHead3d(this.fixtureService, this.previewMeshService, fixture, this.scene));
43
- break;
44
- case FixtureCategory['Color Changer']:
45
- this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewMeshService, fixture, this.scene));
46
- break;
47
- case FixtureCategory['Blinder']:
48
- this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewMeshService, fixture, this.scene));
49
- break;
50
- }
51
- }
52
- }
53
- get canvas() {
54
- return this.canvasRef.nativeElement;
55
- }
56
- render() {
57
- this.renderer.render(this.scene, this.camera);
58
- }
59
- updateStagePosition(positioning, xMin, xMax, yMin, yMax, zMin, zMax) {
60
- let positionCount = 0; // Number of fixtures in the same position
61
- let positionIndex = 1;
62
- this.projectService.project.fixtures.forEach((element, index) => {
63
- if (element.positioning === positioning) {
64
- positionCount++;
65
- }
66
- });
67
- this.projectService.project.fixtures.forEach((element, index) => {
68
- if (element.positioning === positioning) {
69
- element.positionX = xMin + ((xMax - xMin) / (positionCount + 1)) * positionIndex;
70
- element.positionY = yMin + ((yMax - yMin) / (positionCount + 1)) * positionIndex;
71
- element.positionZ = zMin + ((zMax - zMin) / (positionCount + 1)) * positionIndex;
72
- positionIndex++;
73
- }
74
- });
75
- }
76
- animate(timeMillis) {
77
- this.stats.begin();
78
- if (this.timelineService.playState === 'playing') {
79
- // Overwrite the current time with the playing time, if we're in playback mode
80
- timeMillis = this.timelineService.waveSurfer.getCurrentTime() * 1000;
81
- }
82
- this.animationService.timeMillis = timeMillis;
83
- // Update the controls
84
- if (this.controls) {
85
- this.controls.update();
86
- }
87
- // Update the positions
88
- this.updateStagePosition(Positioning.topFront, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageDepthCm / 2 - 70, this.projectService.project.stageDepthCm / 2 - 70);
89
- this.updateStagePosition(Positioning.bottomFront, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageDepthCm / 2 - 70, this.projectService.project.stageDepthCm / 2 - 70);
90
- this.updateStagePosition(Positioning.topBack, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, -this.projectService.project.stageDepthCm / 2 + 70, -this.projectService.project.stageDepthCm / 2 + 70);
91
- this.updateStagePosition(Positioning.bottomBack, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageFloorHeightCm, -this.projectService.project.stageDepthCm / 2 + 70, -this.projectService.project.stageDepthCm / 2 + 70);
92
- // Update all fixtures and apply the preview properties, if available
93
- // TODO Update the fixtures only e.g. 40 times per second according to the "real" refresh rate of the DMX interface?
94
- const presets = this.previewService.getPresets(timeMillis);
95
- const calculatedFixtures = this.previewService.getChannelValues(timeMillis, presets);
96
- for (const fixture3d of this.fixtures3d) {
97
- // Update the fixture properties
98
- fixture3d.updatePreview(calculatedFixtures.get(fixture3d.fixture) || [], this.projectService.project.masterDimmerValue);
99
- // Select the fixture, if required
100
- if (this.fixtureService.settingsSelection) {
101
- fixture3d.isSelected = this.fixtureService.settingsFixtureIsSelected(fixture3d.fixture.fixture);
102
- }
103
- else {
104
- fixture3d.isSelected = this.previewService.fixtureIsSelected(fixture3d.fixture.fixture.uuid, presets);
105
- }
106
- }
107
- // TODO enable for monitoring the DMX universes
108
- this.previewService.setUniverseValues(calculatedFixtures, this.projectService.project.masterDimmerValue);
109
- // Update the statistics
110
- // this.rendererStats.update(this.renderer);
111
- // Render the scene
112
- this.render();
113
- this.stats.end();
114
- requestAnimationFrame(this.animate.bind(this));
115
- }
116
- getAspectRatio() {
117
- const height = this.canvas.clientHeight;
118
- if (height === 0) {
119
- return 0;
120
- }
121
- return this.canvas.clientWidth / this.canvas.clientHeight;
122
- }
123
- onResize() {
124
- this.camera.aspect = this.getAspectRatio();
125
- this.camera.updateProjectionMatrix();
126
- this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);
127
- }
128
- setupRenderer() {
129
- this.renderer = new THREE.WebGLRenderer({ antialias: true });
130
- this.canvas.appendChild(this.renderer.domElement);
131
- this.renderer.setPixelRatio(devicePixelRatio);
132
- this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);
133
- this.renderer.shadowMap.enabled = false;
134
- this.renderer.gammaInput = true;
135
- this.renderer.gammaOutput = true;
136
- }
137
- setupCamera() {
138
- this.camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 10000);
139
- this.camera.position.set(-600, 80, 700);
140
- }
141
- setupControls() {
142
- this.controls = new OrbitControls(this.camera, this.renderer.domElement);
143
- this.controls.enableKeys = false;
144
- this.controls.rotateSpeed = 0.05;
145
- this.controls.zoomSpeed = 1.2;
146
- this.controls.enableDamping = true;
147
- this.controls.dampingFactor = 0.25;
148
- this.controls.screenSpacePanning = false;
149
- this.controls.minDistance = 700;
150
- // this.controls.zoom = 1000;
151
- this.controls.maxDistance = 2000;
152
- this.controls.maxPolarAngle = Math.PI / 2;
153
- this.controls.target = new THREE.Vector3(0, 200, 0);
154
- // this.controls.rotation = 100;
155
- }
156
- setupFloor() {
157
- const width = 4000;
158
- const height = 1;
159
- const geometry = new THREE.BoxGeometry(width, height, width);
160
- const material = new THREE.MeshStandardMaterial({ color: 0x0d0d0d });
161
- const floor = new THREE.Mesh(geometry.clone(), material);
162
- floor.receiveShadow = false;
163
- floor.castShadow = false;
164
- floor.position.set(0, -height / 2, 0);
165
- this.scene.add(floor);
166
- }
167
- setupStats() {
168
- // this.rendererStats.domElement.style.position = 'absolute';
169
- // this.rendererStats.domElement.style.left = '0px';
170
- // this.rendererStats.domElement.style.bottom = '0px';
171
- // this.canvas.appendChild(this.rendererStats.domElement);
172
- this.stats.domElement.style.position = 'absolute';
173
- this.stats.domElement.style.left = '0px';
174
- this.canvas.appendChild(this.stats.domElement);
175
- }
176
- setupScene() {
177
- // Create a new scene
178
- this.scene = new THREE.Scene();
179
- this.previewService.scene = this.scene;
180
- // Add a little bit of ambient light
181
- const ambient = new THREE.AmbientLight(0xffffff, 0.8);
182
- this.scene.add(ambient);
183
- // Add a floor
184
- this.setupFloor();
185
- // Create the stage dimensions
186
- this.previewService.updateStage();
187
- // TODO refine. background light in a color of the fixtures?
188
- const lights = [];
189
- lights[0] = new THREE.PointLight(0xffffff, 0.5, 0);
190
- lights[1] = new THREE.PointLight(0xffffff, 0.5, 0);
191
- lights[2] = new THREE.PointLight(0xffffff, 0.5, 0);
192
- lights[0].position.set(0, 2000, 0);
193
- lights[1].position.set(1000, 2000, 1000);
194
- lights[2].position.set(-1000, -2000, -1000);
195
- this.scene.add(lights[0]);
196
- this.scene.add(lights[1]);
197
- this.scene.add(lights[2]);
198
- // Create the stats
199
- this.setupStats();
200
- }
201
- ngAfterViewInit() {
202
- this.setupRenderer();
203
- this.setupCamera();
204
- this.setupControls();
205
- this.setupScene();
206
- this.onResize();
207
- this.animate(null);
208
- }
209
- };
210
- PreviewComponent.ctorParameters = () => [
211
- { type: FixtureService },
212
- { type: PreviewMeshService },
213
- { type: AnimationService },
214
- { type: PreviewService },
215
- { type: TimelineService },
216
- { type: ProjectService }
217
- ];
218
- __decorate([
219
- ViewChild('canvas'),
220
- __metadata("design:type", ElementRef)
221
- ], PreviewComponent.prototype, "canvasRef", void 0);
222
- __decorate([
223
- HostListener('window:resize'),
224
- __metadata("design:type", Function),
225
- __metadata("design:paramtypes", []),
226
- __metadata("design:returntype", void 0)
227
- ], PreviewComponent.prototype, "onResize", null);
228
- PreviewComponent = __decorate([
229
- Component({
230
- selector: 'lib-app-preview',
231
- template: "<div class=\"h-100\" #canvas style=\"overflow: hidden\"></div>\n",
232
- styles: [""]
233
- }),
234
- __metadata("design:paramtypes", [FixtureService,
235
- PreviewMeshService,
236
- AnimationService,
237
- PreviewService,
238
- TimelineService,
239
- ProjectService])
240
- ], PreviewComponent);
241
- export { PreviewComponent };
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9wcmV2aWV3L3ByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU92RCxJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFnQjtJQWMzQixZQUNVLGNBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFMOUIsbUJBQWMs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Q0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YsQ0FBQTs7WUFsUjJCLGNBQWM7WUFDVixrQkFBa0I7WUFDcEIsZ0JBQWdCO1lBQ2xCLGNBQWM7WUFDYixlQUFlO1lBQ2hCLGNBQWM7O0FBUnhDO0lBREMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs4QkFDRCxVQUFVO21EQUFDO0FBNEs5QjtJQURDLFlBQVksQ0FBQyxlQUFlLENBQUM7Ozs7Z0RBSzdCO0FBNUxVLGdCQUFnQjtJQUw1QixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLDRFQUF1Qzs7S0FFeEMsQ0FBQztxQ0FnQjBCLGNBQWM7UUFDVixrQkFBa0I7UUFDcEIsZ0JBQWdCO1FBQ2xCLGNBQWM7UUFDYixlQUFlO1FBQ2hCLGNBQWM7R0FwQjdCLGdCQUFnQixDQWlTNUI7U0FqU1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IFNUQVRTIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzL2xpYnMvc3RhdHMubWluJztcbmltcG9ydCB7IE9yYml0Q29udHJvbHMgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vY29udHJvbHMvT3JiaXRDb250cm9scyc7XG5pbXBvcnQgeyBGaXh0dXJlQ2F0ZWdvcnkgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdNZXNoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ByZXZpZXctbWVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJldmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRpbWVsaW5lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RpbWVsaW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmcgfSBmcm9tICcuLy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbG9yQ2hhbmdlcjNkIH0gZnJvbSAnLi9tb2RlbHMvY29sb3ItY2hhbmdlci0zZCc7XG5pbXBvcnQgeyBGaXh0dXJlM2QgfSBmcm9tICcuL21vZGVscy9maXh0dXJlLTNkJztcbmltcG9ydCB7IE1vdmluZ0hlYWQzZCB9IGZyb20gJy4vbW9kZWxzL21vdmluZy1oZWFkLTNkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1wcmV2aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcmV2aWV3LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlbmRlcmVyOiBUSFJFRS5XZWJHTFJlbmRlcmVyO1xuICBwcml2YXRlIHNjZW5lOiBUSFJFRS5TY2VuZTtcbiAgcHJpdmF0ZSBjYW1lcmE6IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xuICBwdWJsaWMgY29udHJvbHM6IE9yYml0Q29udHJvbHM7XG5cbiAgcHJpdmF0ZSBzdGF0czogYW55ID0gU1RBVFMoKTtcbiAgLy8gcHJpdmF0ZSByZW5kZXJlclN0YXRzID0gbmV3IFRIUkVFeC5SZW5kZXJlclN0YXRzKCk7XG5cbiAgcHJpdmF0ZSBmaXh0dXJlczNkOiBGaXh0dXJlM2RbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpXG4gIHByaXZhdGUgY2FudmFzUmVmOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJldmlld01lc2hTZXJ2aWNlOiBQcmV2aWV3TWVzaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBUaW1lbGluZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wcmV2aWV3U2VydmljZS5kb1VwZGF0ZUZpeHR1cmVTZXR1cC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgLy8gc3luY2hyb25pemUgdGhlIDNkLWZpeHR1cmVzIHRvIHRoZSBwcm9qZWN0IGZpeHR1cmVzXG4gICAgICB0aGlzLnN5bmNGaXh0dXJlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jRml4dHVyZXMoKSB7XG4gICAgLy8gcmVtb3ZlIGFsbCBmaXh0dXJlc1xuICAgIGZvciAoY29uc3QgZml4dHVyZTNkIG9mIHRoaXMuZml4dHVyZXMzZCkge1xuICAgICAgZml4dHVyZTNkLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5maXh0dXJlczNkID0gW107XG5cbiAgICAvLyBhZGQgYWxsIGZpeHR1cmVzIGZyb20gdGhlIHByb2plY3RcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcykge1xuICAgICAgc3dpdGNoIChmaXh0dXJlLnByb2ZpbGUuY2F0ZWdvcmllc1swXSkge1xuICAgICAgICBjYXNlIEZpeHR1cmVDYXRlZ29yeVsnTW92aW5nIEhlYWQnXTpcbiAgICAgICAgICB0aGlzLmZpeHR1cmVzM2QucHVzaChuZXcgTW92aW5nSGVhZDNkKHRoaXMuZml4dHVyZVNlcnZpY2UsIHRoaXMucHJldmlld01lc2hTZXJ2aWNlLCBmaXh0dXJlLCB0aGlzLnNjZW5lKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRml4dHVyZUNhdGVnb3J5WydDb2xvciBDaGFuZ2VyJ106XG4gICAgICAgICAgdGhpcy5maXh0dXJlczNkLnB1c2gobmV3IENvbG9yQ2hhbmdlcjNkKHRoaXMuZml4dHVyZVNlcnZpY2UsIHRoaXMucHJldmlld01lc2hTZXJ2aWNlLCBmaXh0dXJlLCB0aGlzLnNjZW5lKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRml4dHVyZUNhdGVnb3J5WydCbGluZGVyJ106XG4gICAgICAgICAgdGhpcy5maXh0dXJlczNkLnB1c2gobmV3IENvbG9yQ2hhbmdlcjNkKHRoaXMuZml4dHVyZVNlcnZpY2UsIHRoaXMucHJldmlld01lc2hTZXJ2aWNlLCBmaXh0dXJlLCB0aGlzLnNjZW5lKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKCkge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhZ2VQb3NpdGlvbihcbiAgICBwb3NpdGlvbmluZzogUG9zaXRpb25pbmcsXG4gICAgeE1pbjogbnVtYmVyLFxuICAgIHhNYXg6IG51bWJlcixcbiAgICB5TWluOiBudW1iZXIsXG4gICAgeU1heDogbnVtYmVyLFxuICAgIHpNaW46IG51bWJlcixcbiAgICB6TWF4OiBudW1iZXJcbiAgKSB7XG4gICAgbGV0IHBvc2l0aW9uQ291bnQgPSAwOyAvLyBOdW1iZXIgb2YgZml4dHVyZXMgaW4gdGhlIHNhbWUgcG9zaXRpb25cbiAgICBsZXQgcG9zaXRpb25JbmRleCA9IDE7XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnBvc2l0aW9uaW5nID09PSBwb3NpdGlvbmluZykge1xuICAgICAgICBwb3NpdGlvbkNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnBvc2l0aW9uaW5nID09PSBwb3NpdGlvbmluZykge1xuICAgICAgICBlbGVtZW50LnBvc2l0aW9uWCA9IHhNaW4gKyAoKHhNYXggLSB4TWluKSAvIChwb3NpdGlvbkNvdW50ICsgMSkpICogcG9zaXRpb25JbmRleDtcbiAgICAgICAgZWxlbWVudC5wb3NpdGlvblkgPSB5TWluICsgKCh5TWF4IC0geU1pbikgLyAocG9zaXRpb25Db3VudCArIDEpKSAqIHBvc2l0aW9uSW5kZXg7XG4gICAgICAgIGVsZW1lbnQucG9zaXRpb25aID0gek1pbiArICgoek1heCAtIHpNaW4pIC8gKHBvc2l0aW9uQ291bnQgKyAxKSkgKiBwb3NpdGlvbkluZGV4O1xuXG4gICAgICAgIHBvc2l0aW9uSW5kZXgrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYW5pbWF0ZSh0aW1lTWlsbGlzOiBudW1iZXIpIHtcbiAgICB0aGlzLnN0YXRzLmJlZ2luKCk7XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgY3VycmVudCB0aW1lIHdpdGggdGhlIHBsYXlpbmcgdGltZSwgaWYgd2UncmUgaW4gcGxheWJhY2sgbW9kZVxuICAgICAgdGltZU1pbGxpcyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLndhdmVTdXJmZXIuZ2V0Q3VycmVudFRpbWUoKSAqIDEwMDA7XG4gICAgfVxuXG4gICAgdGhpcy5hbmltYXRpb25TZXJ2aWNlLnRpbWVNaWxsaXMgPSB0aW1lTWlsbGlzO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb250cm9sc1xuICAgIGlmICh0aGlzLmNvbnRyb2xzKSB7XG4gICAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zXG4gICAgdGhpcy51cGRhdGVTdGFnZVBvc2l0aW9uKFxuICAgICAgUG9zaXRpb25pbmcudG9wRnJvbnQsXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gNzAsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIDcwXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVN0YWdlUG9zaXRpb24oXG4gICAgICBQb3NpdGlvbmluZy5ib3R0b21Gcm9udCxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIDcwLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgLSA3MFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVTdGFnZVBvc2l0aW9uKFxuICAgICAgUG9zaXRpb25pbmcudG9wQmFjayxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyICsgNzAsXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyA3MFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVTdGFnZVBvc2l0aW9uKFxuICAgICAgUG9zaXRpb25pbmcuYm90dG9tQmFjayxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyA3MCxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIDcwXG4gICAgKTtcblxuICAgIC8vIFVwZGF0ZSBhbGwgZml4dHVyZXMgYW5kIGFwcGx5IHRoZSBwcmV2aWV3IHByb3BlcnRpZXMsIGlmIGF2YWlsYWJsZVxuICAgIC8vIFRPRE8gVXBkYXRlIHRoZSBmaXh0dXJlcyBvbmx5IGUuZy4gNDAgdGltZXMgcGVyIHNlY29uZCBhY2NvcmRpbmcgdG8gdGhlIFwicmVhbFwiIHJlZnJlc2ggcmF0ZSBvZiB0aGUgRE1YIGludGVyZmFjZT9cbiAgICBjb25zdCBwcmVzZXRzID0gdGhpcy5wcmV2aWV3U2VydmljZS5nZXRQcmVzZXRzKHRpbWVNaWxsaXMpO1xuXG4gICAgY29uc3QgY2FsY3VsYXRlZEZpeHR1cmVzID0gdGhpcy5wcmV2aWV3U2VydmljZS5nZXRDaGFubmVsVmFsdWVzKHRpbWVNaWxsaXMsIHByZXNldHMpO1xuXG4gICAgZm9yIChjb25zdCBmaXh0dXJlM2Qgb2YgdGhpcy5maXh0dXJlczNkKSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIGZpeHR1cmUgcHJvcGVydGllc1xuICAgICAgZml4dHVyZTNkLnVwZGF0ZVByZXZpZXcoY2FsY3VsYXRlZEZpeHR1cmVzLmdldChmaXh0dXJlM2QuZml4dHVyZSkgfHwgW10sIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5tYXN0ZXJEaW1tZXJWYWx1ZSk7XG5cbiAgICAgIC8vIFNlbGVjdCB0aGUgZml4dHVyZSwgaWYgcmVxdWlyZWRcbiAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uKSB7XG4gICAgICAgIGZpeHR1cmUzZC5pc1NlbGVjdGVkID0gdGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc0ZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUzZC5maXh0dXJlLmZpeHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4dHVyZTNkLmlzU2VsZWN0ZWQgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUzZC5maXh0dXJlLmZpeHR1cmUudXVpZCwgcHJlc2V0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETyBlbmFibGUgZm9yIG1vbml0b3JpbmcgdGhlIERNWCB1bml2ZXJzZXNcbiAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLnNldFVuaXZlcnNlVmFsdWVzKGNhbGN1bGF0ZWRGaXh0dXJlcywgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0Lm1hc3RlckRpbW1lclZhbHVlKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGlzdGljc1xuICAgIC8vIHRoaXMucmVuZGVyZXJTdGF0cy51cGRhdGUodGhpcy5yZW5kZXJlcik7XG5cbiAgICAvLyBSZW5kZXIgdGhlIHNjZW5lXG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHRoaXMuc3RhdHMuZW5kKCk7XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3BlY3RSYXRpbygpOiBudW1iZXIge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FudmFzLmNsaWVudEhlaWdodDtcblxuICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAvIHRoaXMuY2FudmFzLmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwdWJsaWMgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jYW1lcmEuYXNwZWN0ID0gdGhpcy5nZXRBc3BlY3RSYXRpbygpO1xuICAgIHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFNpemUodGhpcy5jYW52YXMuY2xpZW50V2lkdGgsIHRoaXMuY2FudmFzLmNsaWVudEhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVuZGVyZXIoKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHsgYW50aWFsaWFzOiB0cnVlIH0pO1xuICAgIHRoaXMuY2FudmFzLmFwcGVuZENoaWxkKHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGRldmljZVBpeGVsUmF0aW8pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCwgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXJlci5nYW1tYUlucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmVyLmdhbW1hT3V0cHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBDYW1lcmEoKSB7XG4gICAgdGhpcy5jYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoMzUsIHdpbmRvdy5pbm5lcldpZHRoIC8gd2luZG93LmlubmVySGVpZ2h0LCAxLCAxMDAwMCk7XG4gICAgdGhpcy5jYW1lcmEucG9zaXRpb24uc2V0KC02MDAsIDgwLCA3MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENvbnRyb2xzKCkge1xuICAgIHRoaXMuY29udHJvbHMgPSBuZXcgT3JiaXRDb250cm9scyh0aGlzLmNhbWVyYSwgdGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcbiAgICB0aGlzLmNvbnRyb2xzLmVuYWJsZUtleXMgPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRyb2xzLnJvdGF0ZVNwZWVkID0gMC4wNTtcbiAgICB0aGlzLmNvbnRyb2xzLnpvb21TcGVlZCA9IDEuMjtcbiAgICB0aGlzLmNvbnRyb2xzLmVuYWJsZURhbXBpbmcgPSB0cnVlO1xuICAgIHRoaXMuY29udHJvbHMuZGFtcGluZ0ZhY3RvciA9IDAuMjU7XG4gICAgdGhpcy5jb250cm9scy5zY3JlZW5TcGFjZVBhbm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRyb2xzLm1pbkRpc3RhbmNlID0gNzAwO1xuICAgIC8vIHRoaXMuY29udHJvbHMuem9vbSA9IDEwMDA7XG4gICAgdGhpcy5jb250cm9scy5tYXhEaXN0YW5jZSA9IDIwMDA7XG4gICAgdGhpcy5jb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAvIDI7XG4gICAgdGhpcy5jb250cm9scy50YXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAyMDAsIDApO1xuICAgIC8vIHRoaXMuY29udHJvbHMucm90YXRpb24gPSAxMDA7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRmxvb3IoKSB7XG4gICAgY29uc3Qgd2lkdGggPSA0MDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3aWR0aCwgaGVpZ2h0LCB3aWR0aCk7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoeyBjb2xvcjogMHgwZDBkMGQgfSk7XG5cbiAgICBjb25zdCBmbG9vciA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LmNsb25lKCksIG1hdGVyaWFsKTtcbiAgICBmbG9vci5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XG4gICAgZmxvb3IuY2FzdFNoYWRvdyA9IGZhbHNlO1xuICAgIGZsb29yLnBvc2l0aW9uLnNldCgwLCAtaGVpZ2h0IC8gMiwgMCk7XG4gICAgdGhpcy5zY2VuZS5hZGQoZmxvb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN0YXRzKCkge1xuICAgIC8vIHRoaXMucmVuZGVyZXJTdGF0cy5kb21FbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAvLyB0aGlzLnJlbmRlcmVyU3RhdHMuZG9tRWxlbWVudC5zdHlsZS5sZWZ0ID0gJzBweCc7XG4gICAgLy8gdGhpcy5yZW5kZXJlclN0YXRzLmRvbUVsZW1lbnQuc3R5bGUuYm90dG9tID0gJzBweCc7XG4gICAgLy8gdGhpcy5jYW52YXMuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlclN0YXRzLmRvbUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zdGF0cy5kb21FbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICB0aGlzLnN0YXRzLmRvbUVsZW1lbnQuc3R5bGUubGVmdCA9ICcwcHgnO1xuICAgIHRoaXMuY2FudmFzLmFwcGVuZENoaWxkKHRoaXMuc3RhdHMuZG9tRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwU2NlbmUoKSB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IHNjZW5lXG4gICAgdGhpcy5zY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpO1xuXG4gICAgdGhpcy5wcmV2aWV3U2VydmljZS5zY2VuZSA9IHRoaXMuc2NlbmU7XG5cbiAgICAvLyBBZGQgYSBsaXR0bGUgYml0IG9mIGFtYmllbnQgbGlnaHRcbiAgICBjb25zdCBhbWJpZW50ID0gbmV3IFRIUkVFLkFtYmllbnRMaWdodCgweGZmZmZmZiwgMC44KTtcbiAgICB0aGlzLnNjZW5lLmFkZChhbWJpZW50KTtcblxuICAgIC8vIEFkZCBhIGZsb29yXG4gICAgdGhpcy5zZXR1cEZsb29yKCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YWdlIGRpbWVuc2lvbnNcbiAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLnVwZGF0ZVN0YWdlKCk7XG5cbiAgICAvLyBUT0RPIHJlZmluZS4gYmFja2dyb3VuZCBsaWdodCBpbiBhIGNvbG9yIG9mIHRoZSBmaXh0dXJlcz9cbiAgICBjb25zdCBsaWdodHMgPSBbXTtcbiAgICBsaWdodHNbMF0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMC41LCAwKTtcbiAgICBsaWdodHNbMV0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMC41LCAwKTtcbiAgICBsaWdodHNbMl0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMC41LCAwKTtcblxuICAgIGxpZ2h0c1swXS5wb3NpdGlvbi5zZXQoMCwgMjAwMCwgMCk7XG4gICAgbGlnaHRzWzFdLnBvc2l0aW9uLnNldCgxMDAwLCAyMDAwLCAxMDAwKTtcbiAgICBsaWdodHNbMl0ucG9zaXRpb24uc2V0KC0xMDAwLCAtMjAwMCwgLTEwMDApO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHRzWzBdKTtcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodHNbMV0pO1xuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0c1syXSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YXRzXG4gICAgdGhpcy5zZXR1cFN0YXRzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cFJlbmRlcmVyKCk7XG4gICAgdGhpcy5zZXR1cENhbWVyYSgpO1xuICAgIHRoaXMuc2V0dXBDb250cm9scygpO1xuICAgIHRoaXMuc2V0dXBTY2VuZSgpO1xuXG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIHRoaXMuYW5pbWF0ZShudWxsKTtcbiAgfVxufVxuIl19