@rocketshow/designer 1.31.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 -9947
  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.31.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -1,468 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Component, HostListener, Input, ViewChild, ViewEncapsulation } from '@angular/core';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { BsModalService } from 'ngx-bootstrap/modal';
5
- import { ToastrService } from 'ngx-toastr';
6
- import { map } from 'rxjs/operators';
7
- import Split from 'split.js';
8
- import { PreviewComponent } from './preview/preview.component';
9
- import { ProjectBrowserComponent } from './project/project-browser/project-browser.component';
10
- import { ProjectImportComponent } from './project/project-import/project-import.component';
11
- import { ProjectSaveComponent } from './project/project-save/project-save.component';
12
- import { ProjectShareComponent } from './project/project-share/project-share.component';
13
- import { ConfigService } from './services/config.service';
14
- import { ErrorDialogService } from './services/error-dialog.service';
15
- import { FixturePoolService } from './services/fixture-pool.service';
16
- import { FixtureService } from './services/fixture.service';
17
- import { HotkeyTargetExcludeService } from './services/hotkey-target-exclude.service';
18
- import { IntroService } from './services/intro.service';
19
- import { ProjectLoadService } from './services/project-load.service';
20
- import { ProjectService } from './services/project.service';
21
- import { TimelineService } from './services/timeline.service';
22
- import { UserEnsureLoginService } from './services/user-ensure-login.service';
23
- import { UserService } from './services/user.service';
24
- import { WarningDialogService } from './services/warning-dialog.service';
25
- import { TimelineComponent } from './timeline/timeline.component';
26
- import { UserRegisterComponent } from './user/user-register/user-register.component';
27
- var DesignerComponent = /** @class */ (function () {
28
- function DesignerComponent(translateService, projectService, configService, fixturePoolService, hotkeyTargetExcludeService, modalService, userService, userEnsureLoginService, toastrService, projectLoadService, warningDialogService, errorDialogService, fixtureService, timelineService, introService) {
29
- var _this = this;
30
- this.translateService = translateService;
31
- this.projectService = projectService;
32
- this.configService = configService;
33
- this.fixturePoolService = fixturePoolService;
34
- this.hotkeyTargetExcludeService = hotkeyTargetExcludeService;
35
- this.modalService = modalService;
36
- this.userService = userService;
37
- this.userEnsureLoginService = userEnsureLoginService;
38
- this.toastrService = toastrService;
39
- this.projectLoadService = projectLoadService;
40
- this.warningDialogService = warningDialogService;
41
- this.errorDialogService = errorDialogService;
42
- this.fixtureService = fixtureService;
43
- this.timelineService = timelineService;
44
- this.introService = introService;
45
- // the size of the menu used in the designer
46
- this.designerMenuSizePx = 20;
47
- this.splitGutterSizePx = 13;
48
- this.totalMenuHeightPx = 0;
49
- this.currentTab = 'properties';
50
- this.configService.menuHeightChanged.subscribe(function () {
51
- _this.calcTotalMenuHeight();
52
- });
53
- }
54
- Object.defineProperty(DesignerComponent.prototype, "menuHeightPx", {
55
- set: function (value) {
56
- this.configService.menuHeightPx = value;
57
- this.configService.menuHeightChanged.next();
58
- },
59
- enumerable: true,
60
- configurable: true
61
- });
62
- Object.defineProperty(DesignerComponent.prototype, "externalCompositionsAvailable", {
63
- set: function (value) {
64
- this.timelineService.externalCompositionsAvailable = value;
65
- },
66
- enumerable: true,
67
- configurable: true
68
- });
69
- Object.defineProperty(DesignerComponent.prototype, "restUrl", {
70
- set: function (value) {
71
- this.configService.restUrl = value;
72
- },
73
- enumerable: true,
74
- configurable: true
75
- });
76
- Object.defineProperty(DesignerComponent.prototype, "enableMediaLibrary", {
77
- set: function (value) {
78
- this.configService.enableMediaLibrary = value;
79
- },
80
- enumerable: true,
81
- configurable: true
82
- });
83
- Object.defineProperty(DesignerComponent.prototype, "loginAvailable", {
84
- set: function (value) {
85
- this.configService.loginAvailable = value;
86
- },
87
- enumerable: true,
88
- configurable: true
89
- });
90
- Object.defineProperty(DesignerComponent.prototype, "shareAvailable", {
91
- set: function (value) {
92
- this.configService.shareAvailable = value;
93
- },
94
- enumerable: true,
95
- configurable: true
96
- });
97
- Object.defineProperty(DesignerComponent.prototype, "languageSwitch", {
98
- set: function (value) {
99
- this.configService.languageSwitch = value;
100
- },
101
- enumerable: true,
102
- configurable: true
103
- });
104
- Object.defineProperty(DesignerComponent.prototype, "newProjectTemplate", {
105
- set: function (value) {
106
- this.configService.newProjectTemplate = value;
107
- },
108
- enumerable: true,
109
- configurable: true
110
- });
111
- Object.defineProperty(DesignerComponent.prototype, "livePreview", {
112
- set: function (value) {
113
- this.configService.livePreview = value;
114
- },
115
- enumerable: true,
116
- configurable: true
117
- });
118
- Object.defineProperty(DesignerComponent.prototype, "localProfiles", {
119
- set: function (value) {
120
- this.configService.localProfiles = value;
121
- },
122
- enumerable: true,
123
- configurable: true
124
- });
125
- Object.defineProperty(DesignerComponent.prototype, "intro", {
126
- set: function (value) {
127
- this.configService.intro = value;
128
- this.introService.refresh();
129
- },
130
- enumerable: true,
131
- configurable: true
132
- });
133
- Object.defineProperty(DesignerComponent.prototype, "uniqueProjectNames", {
134
- set: function (value) {
135
- this.configService.uniqueProjectNames = value;
136
- },
137
- enumerable: true,
138
- configurable: true
139
- });
140
- DesignerComponent.prototype.ngOnInit = function () {
141
- var _this = this;
142
- if (localStorage.getItem('language')) {
143
- this.translateService.use(localStorage.getItem('language'));
144
- }
145
- else {
146
- this.translateService.use('en');
147
- }
148
- this.calcTotalMenuHeight();
149
- var urlParams = new URLSearchParams(window.location.search);
150
- var projectId = urlParams.get('id');
151
- var projectName = urlParams.get('name');
152
- var shareToken = urlParams.get('token');
153
- if (projectId) {
154
- // load a project by query param ID
155
- if (!shareToken) {
156
- shareToken = '';
157
- }
158
- this.projectLoadService.load(Number.parseInt(projectId), projectName, shareToken).subscribe(function () { }, function (response) {
159
- var error = response && response.error ? response.error.error : 'unknown';
160
- var msg = '';
161
- if (error === 'no-permission') {
162
- msg = 'designer.project.open-no-permission-error';
163
- error = undefined;
164
- }
165
- else {
166
- msg = 'designer.project.open-error';
167
- }
168
- _this.errorDialogService.show(msg, error).subscribe(function () {
169
- _this.projectLoadService.new();
170
- });
171
- });
172
- }
173
- else if (this.userService.isLoggedIn() && (this.userService.getAutoLoadProjectId() || this.userService.getAutoLoadProjectName())) {
174
- // restore the last saved project
175
- this.projectLoadService.load(this.userService.getAutoLoadProjectId(), this.userService.getAutoLoadProjectName()).subscribe(function () { }, function (response) {
176
- var msg = 'designer.project.open-error';
177
- var error = response && response.error ? response.error.error : 'unknown';
178
- _this.errorDialogService.show(msg, error).subscribe(function () {
179
- _this.projectLoadService.new();
180
- });
181
- });
182
- }
183
- else {
184
- if (this.configService.newProjectTemplate) {
185
- // load the new project template
186
- this.projectLoadService.template();
187
- }
188
- else {
189
- this.projectLoadService.new();
190
- }
191
- }
192
- };
193
- DesignerComponent.prototype.calcTotalMenuHeight = function () {
194
- this.totalMenuHeightPx = this.designerMenuSizePx + this.splitGutterSizePx + this.configService.menuHeightPx;
195
- };
196
- DesignerComponent.prototype.onResize = function () {
197
- if (this.previewComponent) {
198
- this.previewComponent.onResize();
199
- }
200
- if (this.timelineComponent) {
201
- this.timelineComponent.onResize();
202
- }
203
- };
204
- DesignerComponent.prototype.ngAfterViewInit = function () {
205
- var _this = this;
206
- // Set up the splitter
207
- setTimeout(function () {
208
- Split(['#row1', '#row2', '#row3'], {
209
- sizes: [42, 38, 20],
210
- direction: 'vertical',
211
- cursor: 'row-resize',
212
- snapOffset: 0,
213
- gutterSize: _this.splitGutterSizePx,
214
- onDrag: _this.onResize.bind(_this),
215
- });
216
- Split(['#scenes', '#presets', '#preview'], {
217
- sizes: [15, 15, 70],
218
- snapOffset: 0,
219
- gutterSize: _this.splitGutterSizePx,
220
- onDrag: _this.onResize.bind(_this),
221
- });
222
- Split(['#capabilities', '#fixtures', '#masterDimmer'], {
223
- sizes: [74, 18, 8],
224
- snapOffset: 0,
225
- gutterSize: _this.splitGutterSizePx,
226
- onDrag: _this.onResize.bind(_this),
227
- minSize: 50,
228
- });
229
- _this.onResize();
230
- });
231
- };
232
- DesignerComponent.prototype.openTab = function (tab) {
233
- // open a side tab (e.g. effects, channels, settings, etc.)
234
- if (tab === 'settings') {
235
- this.fixtureService.settingsSelection = true;
236
- }
237
- else {
238
- this.fixtureService.settingsSelection = false;
239
- }
240
- this.currentTab = tab;
241
- };
242
- DesignerComponent.prototype.openFixturePool = function () {
243
- this.fixturePoolService.open();
244
- };
245
- DesignerComponent.prototype.projectNew = function () {
246
- var _this = this;
247
- this.warningDialogService
248
- .show('designer.misc.warning-proceed-unsaved')
249
- .pipe(map(function (result) {
250
- if (result) {
251
- _this.projectLoadService.new();
252
- }
253
- }))
254
- .subscribe();
255
- };
256
- DesignerComponent.prototype.projectOpen = function () {
257
- var _this = this;
258
- this.warningDialogService
259
- .show('designer.misc.warning-proceed-unsaved')
260
- .pipe(map(function (result) {
261
- if (result) {
262
- _this.userEnsureLoginService.login().subscribe(function () {
263
- _this.modalService.show(ProjectBrowserComponent, { keyboard: true, ignoreBackdropClick: false });
264
- });
265
- }
266
- }))
267
- .subscribe();
268
- };
269
- DesignerComponent.prototype.projectSave = function () {
270
- var _this = this;
271
- if (this.projectService.project.name) {
272
- // this project has been saved before -> just save it again
273
- this.projectService.save(this.projectService.project);
274
- }
275
- else {
276
- // this project has not yet been saved -> show the save as-dialog
277
- this.userEnsureLoginService.login().subscribe(function () {
278
- _this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });
279
- });
280
- }
281
- };
282
- DesignerComponent.prototype.projectSaveAs = function () {
283
- var _this = this;
284
- this.userEnsureLoginService.login().subscribe(function () {
285
- _this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });
286
- });
287
- };
288
- DesignerComponent.prototype.userRegister = function () {
289
- this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false });
290
- };
291
- DesignerComponent.prototype.projectImport = function () {
292
- var _this = this;
293
- this.warningDialogService
294
- .show('designer.misc.warning-proceed-unsaved')
295
- .pipe(map(function (result) {
296
- if (result) {
297
- _this.modalService.show(ProjectImportComponent, { keyboard: true, ignoreBackdropClick: false });
298
- }
299
- }))
300
- .subscribe();
301
- };
302
- DesignerComponent.prototype.projectExport = function () {
303
- var json = JSON.stringify(this.projectService.project, null, 2);
304
- var element = document.createElement('a');
305
- element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(json));
306
- element.setAttribute('download', this.projectService.project.name + '.rsd');
307
- element.style.display = 'none';
308
- document.body.appendChild(element);
309
- element.click();
310
- document.body.removeChild(element);
311
- };
312
- DesignerComponent.prototype.projectShare = function () {
313
- if (!this.projectService.project.id) {
314
- // a save is required first
315
- this.errorDialogService.show('designer.project.share-no-save').subscribe();
316
- return;
317
- }
318
- // ignore backdrop click, because selecting the link text will also close the modal
319
- this.modalService.show(ProjectShareComponent, { keyboard: true, ignoreBackdropClick: true });
320
- };
321
- DesignerComponent.prototype.handleKeyboardEvent = function (event) {
322
- if (this.hotkeyTargetExcludeService.exclude(event)) {
323
- return;
324
- }
325
- if (event.key === 'p') {
326
- this.openFixturePool();
327
- // prevent checkboxes being toggled, if in focus e.g.
328
- event.stopPropagation();
329
- event.preventDefault();
330
- }
331
- if ((event.ctrlKey || event.metaKey) && event.key === 'n') {
332
- this.projectNew();
333
- event.stopPropagation();
334
- event.preventDefault();
335
- }
336
- if ((event.ctrlKey || event.metaKey) && event.key === 's') {
337
- this.projectSave();
338
- event.stopPropagation();
339
- event.preventDefault();
340
- }
341
- if ((event.ctrlKey || event.metaKey) && event.key === 'o') {
342
- this.projectOpen();
343
- event.stopPropagation();
344
- event.preventDefault();
345
- }
346
- };
347
- DesignerComponent.prototype.switchLanguage = function (language) {
348
- this.translateService.use(language);
349
- localStorage.setItem('language', language);
350
- };
351
- DesignerComponent.ctorParameters = function () { return [
352
- { type: TranslateService },
353
- { type: ProjectService },
354
- { type: ConfigService },
355
- { type: FixturePoolService },
356
- { type: HotkeyTargetExcludeService },
357
- { type: BsModalService },
358
- { type: UserService },
359
- { type: UserEnsureLoginService },
360
- { type: ToastrService },
361
- { type: ProjectLoadService },
362
- { type: WarningDialogService },
363
- { type: ErrorDialogService },
364
- { type: FixtureService },
365
- { type: TimelineService },
366
- { type: IntroService }
367
- ]; };
368
- __decorate([
369
- Input(),
370
- __metadata("design:type", Number),
371
- __metadata("design:paramtypes", [Number])
372
- ], DesignerComponent.prototype, "menuHeightPx", null);
373
- __decorate([
374
- Input(),
375
- __metadata("design:type", Boolean),
376
- __metadata("design:paramtypes", [Boolean])
377
- ], DesignerComponent.prototype, "externalCompositionsAvailable", null);
378
- __decorate([
379
- Input(),
380
- __metadata("design:type", String),
381
- __metadata("design:paramtypes", [String])
382
- ], DesignerComponent.prototype, "restUrl", null);
383
- __decorate([
384
- Input(),
385
- __metadata("design:type", Boolean),
386
- __metadata("design:paramtypes", [Boolean])
387
- ], DesignerComponent.prototype, "enableMediaLibrary", null);
388
- __decorate([
389
- Input(),
390
- __metadata("design:type", Boolean),
391
- __metadata("design:paramtypes", [Boolean])
392
- ], DesignerComponent.prototype, "loginAvailable", null);
393
- __decorate([
394
- Input(),
395
- __metadata("design:type", Boolean),
396
- __metadata("design:paramtypes", [Boolean])
397
- ], DesignerComponent.prototype, "shareAvailable", null);
398
- __decorate([
399
- Input(),
400
- __metadata("design:type", Boolean),
401
- __metadata("design:paramtypes", [Boolean])
402
- ], DesignerComponent.prototype, "languageSwitch", null);
403
- __decorate([
404
- Input(),
405
- __metadata("design:type", Boolean),
406
- __metadata("design:paramtypes", [Boolean])
407
- ], DesignerComponent.prototype, "newProjectTemplate", null);
408
- __decorate([
409
- Input(),
410
- __metadata("design:type", Boolean),
411
- __metadata("design:paramtypes", [Boolean])
412
- ], DesignerComponent.prototype, "livePreview", null);
413
- __decorate([
414
- Input(),
415
- __metadata("design:type", Boolean),
416
- __metadata("design:paramtypes", [Boolean])
417
- ], DesignerComponent.prototype, "localProfiles", null);
418
- __decorate([
419
- Input(),
420
- __metadata("design:type", Boolean),
421
- __metadata("design:paramtypes", [Boolean])
422
- ], DesignerComponent.prototype, "intro", null);
423
- __decorate([
424
- Input(),
425
- __metadata("design:type", Boolean),
426
- __metadata("design:paramtypes", [Boolean])
427
- ], DesignerComponent.prototype, "uniqueProjectNames", null);
428
- __decorate([
429
- ViewChild(PreviewComponent),
430
- __metadata("design:type", PreviewComponent)
431
- ], DesignerComponent.prototype, "previewComponent", void 0);
432
- __decorate([
433
- ViewChild(TimelineComponent),
434
- __metadata("design:type", TimelineComponent)
435
- ], DesignerComponent.prototype, "timelineComponent", void 0);
436
- __decorate([
437
- HostListener('document:keydown', ['$event']),
438
- __metadata("design:type", Function),
439
- __metadata("design:paramtypes", [Object]),
440
- __metadata("design:returntype", void 0)
441
- ], DesignerComponent.prototype, "handleKeyboardEvent", null);
442
- DesignerComponent = __decorate([
443
- Component({
444
- selector: 'lib-designer',
445
- template: "<!-- Wrap the whole component inside a div to encapsulate the CSS -->\n\n<!-- 100 % height minus the menu bar above and the gutter size of 13 px -->\n<!-- <div style=\"height: calc(100% - 33px)\"> -->\n<div id=\"designer\" [ngStyle]=\"{ height: 'calc(100% - ' + totalMenuHeightPx + 'px)' }\">\n <!-- Navigation -->\n <nav\n class=\"navbar navbar-expand-lg navbar-light bg-light border-secondary\"\n style=\"border-bottom: 1px solid #444; height: 20px; z-index: 9999\"\n >\n <!-- Menu buttons -->\n <ul class=\"navbar-nav mr-auto\">\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"fileDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{ 'designer.navigation.project' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"fileDropdown\">\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectNew(); (false)\"\n ><i class=\"fa fa-fw fa-file-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-new' | translate }}</a\n >\n <a class=\"dropdown-item\" href=\"#\" (click)=\"projectOpen(); (false)\"\n ><i class=\"fa fa-fw fa-folder-open-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-open' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSave(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSaveAs(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save-as' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectImport(); (false)\"\n ><i class=\"fa fa-fw fa-download\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-import' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectExport(); (false)\"\n ><i class=\"fa fa-fw fa-external-link\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-export' | translate }}</a\n >\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.settings' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"openFixturePool(); (false)\">{{ 'designer.navigation.fixture-pool' | translate }}</a>\n <!-- <a class=\"dropdown-item\" href=\"#\">{{ 'designer.navigation.stage' | translate }}</a> -->\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.help' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"introService.reset(); (false)\">{{ 'designer.navigation.reset-intro' | translate }}</a>\n <a class=\"dropdown-item\" href=\"https://rocketshow.net/support/\" target=\"_blank\">{{\n 'designer.navigation.support' | translate\n }}</a>\n </div>\n </li>\n </ul>\n\n <ul class=\"navbar-nav\">\n <li *ngIf=\"configService.shareAvailable\" class=\"nav-item d-none d-md-flex\" data-toggle=\"collapse\">\n <a class=\"nav-link text-primary\" (click)=\"projectShare(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-share-alt\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-share' | translate }}</a\n >\n </li>\n\n <li *ngIf=\"configService.languageSwitch\" class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-globe\" aria-hidden=\"true\"></i>\n {{ 'designer.misc.language' | translate }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('en'); (false)\" target=\"_blank\">English</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('de'); (false)\" target=\"_blank\">Deutsch</a>\n </div>\n </li>\n\n <li *ngIf=\"configService.loginAvailable && !userService.isLoggedIn()\" class=\"nav-item\" data-toggle=\"collapse\">\n <a class=\"nav-link\" (click)=\"userRegister(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'designer.navigation.login' | translate }}</a\n >\n </li>\n\n <li *ngIf=\"configService.loginAvailable && userService.isLoggedIn()\" class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i>\n {{ userService.username }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"userService.logout(); (false)\" target=\"_blank\"\n ><i class=\"fa fa-sign-out\" aria-hidden=\"true\"></i> {{ 'designer.navigation.logout' | translate }}</a\n >\n </div>\n </li>\n </ul>\n </nav>\n\n <!-- The main content for larger screens -->\n <div class=\"h-100 d-none d-md-block\">\n <div id=\"row1\" class=\"split split-vertical clearfix pt-3 pl-3\">\n <!-- Scenes -->\n <div id=\"scenes\" class=\"split split-horizontal h-100\">\n <lib-app-scene></lib-app-scene>\n </div>\n\n <!-- Presets -->\n <div id=\"presets\" class=\"split split-horizontal h-100\">\n <lib-app-preset></lib-app-preset>\n </div>\n\n <!-- 3D preview -->\n <div id=\"preview\" class=\"split split-horizontal h-100 pr-3\">\n <div class=\"card border-secondary h-100\" [class.card-intro-active]=\"introService.showStep('preview')\">\n <div class=\"card-body p-0 h-100\">\n <lib-app-preview class=\"h-100\"></lib-app-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"row2\" class=\"split split-vertical clearfix px-3 d-flex\" style=\"flex-direction: row\">\n <!-- Menu for the capabilities, channels, effects and settings -->\n <div class=\"col col-auto p-0\" style=\"margin-right: -1px\">\n <div class=\"nav flex-column nav-pills\" id=\"v-pills-tab\" role=\"tablist\" aria-orientation=\"vertical\">\n <a\n class=\"nav-link px-3 active\"\n (click)=\"openTab('capabilities')\"\n id=\"v-pills-capabilities-tab\"\n popover=\"{{ 'designer.misc.capabilities' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-capabilities\"\n role=\"tab\"\n aria-controls=\"v-pills-capabilities\"\n aria-selected=\"true\"\n >\n <i class=\"fa fa-bolt fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('channels')\"\n id=\"v-pills-channels-tab\"\n popover=\"{{ 'designer.misc.channels' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-channels\"\n role=\"tab\"\n aria-controls=\"v-pills-channels\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-sliders fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('effects')\"\n id=\"v-pills-effects-tab\"\n popover=\"{{ 'designer.misc.effects' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effects\"\n role=\"tab\"\n aria-controls=\"v-pills-effects\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-magic fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('settings')\"\n id=\"v-pills-settings-tab\"\n popover=\"{{ 'designer.misc.settings' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-settings\"\n role=\"tab\"\n aria-controls=\"v-pills-settings\"\n aria-selected=\"false\"\n style=\"border-top: 1px solid #444\"\n >\n <i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n\n <div id=\"capabilities\" class=\"split split-horizontal h-100\" style=\"padding-left: 1rem\">\n <div class=\"row h-100\">\n <!-- Content for the capabilities, channels, effects and settings -->\n <div class=\"col pl-0 h-100\">\n <div class=\"tab-content h-100\" id=\"v-pills-tabContent\">\n <div class=\"tab-pane h-100 show active\" id=\"v-pills-capabilities\" role=\"tabpanel\">\n <lib-app-fixture-capability></lib-app-fixture-capability>\n </div>\n <div class=\"tab-pane h-100 show\" id=\"v-pills-channels\" role=\"tabpanel\">\n <lib-app-fixture-channel></lib-app-fixture-channel>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-effects\" role=\"tabpanel\" aria-labelledby=\"v-pills-profile-tab\">\n <lib-app-effect></lib-app-effect>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-settings\" role=\"tabpanel\" aria-labelledby=\"v-pills-home-tab\">\n <lib-app-fixture-settings></lib-app-fixture-settings>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Fixtures -->\n <div id=\"fixtures\" class=\"split split-horizontal h-100\">\n <lib-app-fixture></lib-app-fixture>\n </div>\n\n <!-- Master dimmer -->\n <div id=\"masterDimmer\" class=\"split split-horizontal h-100\">\n <lib-app-master-dimmer></lib-app-master-dimmer>\n </div>\n </div>\n\n <!-- Timeline -->\n <div id=\"row3\" class=\"split split-vertical clearfix px-3 pb-3\" style=\"padding-bottom: 20px\">\n <lib-app-timeline></lib-app-timeline>\n </div>\n </div>\n\n <!-- The components for small screens -->\n <div class=\"d-md-none p-3\">\n <div>\n <lib-app-master-dimmer></lib-app-master-dimmer>\n </div>\n\n <div class=\"mt-3\">\n <lib-app-scene></lib-app-scene>\n </div>\n </div>\n</div>\n\n<lib-app-intro class=\"d-none d-md-flex\"></lib-app-intro>\n",
446
- encapsulation: ViewEncapsulation.None,
447
- styles: ["@charset \"UTF-8\";.modal-full{max-width:unset!important;margin:1.75rem!important}.modal{z-index:10001}#designer .nav-link{cursor:pointer}#designer .dropdown-menu{z-index:100000}#designer .row{flex-wrap:unset}#designer .navbar-nav{flex-direction:row!important}#designer .navbar-expand-lg{flex-flow:row nowrap!important;justify-content:flex-start!important}#designer .navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem!important;padding-left:.5rem!important}#designer .list-group-item.active{color:#fff!important;background-color:#fd7e14!important;border-color:#fd7e14!important}#designer :focus{outline:0}#designer select{font-size:.8rem;cursor:pointer}#designer input{font-size:.7rem;background-color:transparent;color:#fff;border:1px solid}#designer input,#designer select{border-color:#dee2e6}#designer .list-group-item{padding:.3rem 1.25rem;border-left:none;border-right:none}#designer .nav-pills .nav-link.active,#designer .nav-pills .show>.nav-link{background-color:#444}#designer .nav a,#designer .panel-title .btn-link{color:#fff!important}#designer .accordion-toggle .btn,#designer .accordion-toggle button{padding:0}#designer .card-body{overflow:auto;padding:.8rem}#designer .card-header{margin-bottom:0;padding:.4rem}#designer .panel-body{background-color:#303030}#designer .list-group-item.active-light{background-color:#906542;border-color:#906542}#designer .inactive-list-item{opacity:.3}#designer span.bigcheck-target{font-family:FontAwesome}#designer input[type=checkbox].bigcheck{position:relative;left:-999em}#designer input[type=checkbox].bigcheck+span.bigcheck-target:after{content:\"\uF096\"}#designer input[type=checkbox].bigcheck:checked+span.bigcheck-target:after{content:\"\uF046\"}#designer .gutter.gutter-horizontal{cursor:ew-resize}#designer .gutter.gutter-vertical{cursor:ns-resize}#designer .gutter.gutter-horizontal,#designer .split-horizontal{float:left}#designer .gutter.gutter-horizontal,#designer .split-vertical{height:100%}#designer .split{overflow-y:hidden;overflow-x:hidden}#designer .panel{background-color:transparent}#designer .slider{cursor:pointer}#designer .slider-horizontal .slider-track{height:2px!important;margin-top:-2px!important}#designer .slider-vertical .slider-track{width:2px!important;margin-left:4px!important}#designer .slider-selection,#designer .slider-track,#designer .slider-track-high,#designer .slider-track-low{background-color:#fff!important;border-radius:0!important;background-image:none!important;box-shadow:none!important}#designer .slider-handle{width:13px!important;height:13px!important;background-color:#fff!important;background-image:none!important;border:1px solid #303030}#designer .slider-vertical .slider-handle{margin-left:4px!important}#designer .slider-horizontal .slider-handle{margin-top:2px!important}#designer .slider-input{width:35px;margin-left:8px;text-align:center}#designer .slider-input-readonly{width:35px;margin-left:8px;text-align:center;color:#a9a9a9;border-color:gray}#designer .capability-container{padding:0;height:0}#designer accordion-group>div{border:none!important}#designer .popover{background-color:#fff}#designer .popover-body{color:#000}#designer .bs-popover-auto[x-placement^=right] .arrow::after,#designer .bs-popover-right .arrow::after{border-right-color:#fff}#designer .bs-popover-auto[x-placement^=left] .arrow::after,#designer .bs-popover-left .arrow::after{border-left-color:#fff}#designer .bs-popover-auto[x-placement^=bottom] .arrow::after,#designer .bs-popover-bottom .arrow::after{border-bottom-color:#fff}#designer .bs-popover-auto[x-placement^=top] .arrow::after,#designer .bs-popover-top .arrow::after{border-top-color:#fff}#designer .iro__slider,#designer .iro__wheel{cursor:pointer}#designer .pan-tilt-grid path{fill:none;stroke:#fff;stroke-width:10px}#designer .pan-tilt-grid circle{fill:#4682b4;stroke:#fff;stroke-width:3px}#designer .capability{overflow:visible}#designer .capability-deactivated{opacity:.4}#designer .wavesurfer-region{z-index:5!important}#designer .wavesurfer-region[data-region-selected=true]{z-index:6!important}#designer .wavesurfer-region[data-region-preset=true]{height:50%!important;top:50%!important}#designer .wavesurfer-region[data-region-name]:after{content:attr(data-region-name);margin-left:20px}#designer .wavesurfer-handle{width:10px!important;max-width:10px!important;border:1px solid #ddd;background:rgba(0,0,0,.1);box-sizing:border-box;opacity:0;cursor:unset!important}#designer .wavesurfer-handle-end{margin-left:-10px}#designer .wavesurfer-region[data-region-selectable=true] .wavesurfer-handle{opacity:1;cursor:col-resize!important}#designer .wavesurfer-handle:after,#designer .wavesurfer-handle:before{content:\"\";display:block;position:absolute;z-index:1;border-top:1px solid #fff;border-bottom:1px solid #fff;height:4px;left:5%;right:5%;top:50%;transform:translateY(-50%)}#designer .wavesurfer-handle:before{margin-top:-3px}#designer timeline{overflow:scroll!important;overflow:-moz-scrollbars-none;-ms-overflow-style:none;scrollbar-width:none;cursor:s-resize}#designer timeline::-webkit-scrollbar{height:0!important}#designer cursor{top:-20px!important}#designer wave{border-right-color:#fd7e14!important;cursor:col-resize}"]
448
- }),
449
- __metadata("design:paramtypes", [TranslateService,
450
- ProjectService,
451
- ConfigService,
452
- FixturePoolService,
453
- HotkeyTargetExcludeService,
454
- BsModalService,
455
- UserService,
456
- UserEnsureLoginService,
457
- ToastrService,
458
- ProjectLoadService,
459
- WarningDialogService,
460
- ErrorDialogService,
461
- FixtureService,
462
- TimelineService,
463
- IntroService])
464
- ], DesignerComponent);
465
- return DesignerComponent;
466
- }());
467
- export { DesignerComponent };
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJvY2tldHNob3cvZGVzaWduZXIvIiwic291cmNlcyI6WyJsaWIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlB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O1FBREMsS0FBSyxFQUFFOzs7a0RBSVA7SUFHRDtRQURDLEtBQUssRUFBRTs7OytEQUdQO0lBWUQ7UUFEQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7a0NBQ1YsZ0JBQWdCOytEQUFDO0lBR25DO1FBREMsU0FBUyxDQUFDLGlCQUFpQixDQUFDO2tDQUNWLGlCQUFpQjtnRUFBQztJQXlPckM7UUFEQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OztnRUErQjVDO0lBblZVLGlCQUFpQjtRQU43QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsY0FBYztZQUN4Qiw0cVhBQXdDO1lBRXhDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOztTQUN0QyxDQUFDO3lDQWdGNEIsZ0JBQWdCO1lBQ2xCLGNBQWM7WUFDaEIsYUFBYTtZQUNQLGtCQUFrQjtZQUNWLDBCQUEwQjtZQUN4QyxjQUFjO1lBQ2hCLFdBQVc7WUFDQyxzQkFBc0I7WUFDL0IsYUFBYTtZQUNSLGtCQUFrQjtZQUNoQixvQkFBb0I7WUFDdEIsa0JBQWtCO1lBQ3RCLGNBQWM7WUFDYixlQUFlO1lBQ25CLFlBQVk7T0E3RnhCLGlCQUFpQixDQXlWN0I7SUFBRCx3QkFBQztDQUFBLEFBelZELElBeVZDO1NBelZZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFNwbGl0IGZyb20gJ3NwbGl0LmpzJztcbmltcG9ydCB7IFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdEJyb3dzZXJDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1icm93c2VyL3Byb2plY3QtYnJvd3Nlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdEltcG9ydENvbXBvbmVudCB9IGZyb20gJy4vcHJvamVjdC9wcm9qZWN0LWltcG9ydC9wcm9qZWN0LWltcG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdFNhdmVDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1zYXZlL3Byb2plY3Qtc2F2ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdFNoYXJlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3Qtc2hhcmUvcHJvamVjdC1zaGFyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lcnJvci1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlUG9vbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpeHR1cmUtcG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2hvdGtleS10YXJnZXQtZXhjbHVkZS5zZXJ2aWNlJztcbmltcG9ydCB7IEludHJvU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW50cm8uc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0TG9hZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Byb2plY3QtbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aW1lbGluZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJFbnN1cmVMb2dpblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItZW5zdXJlLWxvZ2luLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXYXJuaW5nRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvd2FybmluZy1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZUNvbXBvbmVudCB9IGZyb20gJy4vdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJSZWdpc3RlckNvbXBvbmVudCB9IGZyb20gJy4vdXNlci91c2VyLXJlZ2lzdGVyL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRlc2lnbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVzaWduZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKVxuICBzZXQgbWVudUhlaWdodFB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodFB4ID0gdmFsdWU7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnVIZWlnaHRDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBleHRlcm5hbENvbXBvc2l0aW9uc0F2YWlsYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLmV4dGVybmFsQ29tcG9zaXRpb25zQXZhaWxhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmVzdFVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlc3RVcmwgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBlbmFibGVNZWRpYUxpYnJhcnkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZW5hYmxlTWVkaWFMaWJyYXJ5ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbG9naW5BdmFpbGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubG9naW5BdmFpbGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzaGFyZUF2YWlsYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5zaGFyZUF2YWlsYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxhbmd1YWdlU3dpdGNoKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxhbmd1YWdlU3dpdGNoID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbmV3UHJvamVjdFRlbXBsYXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm5ld1Byb2plY3RUZW1wbGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxpdmVQcmV2aWV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbG9jYWxQcm9maWxlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5sb2NhbFByb2ZpbGVzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaW50cm8odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaW50cm8gPSB2YWx1ZTtcbiAgICB0aGlzLmludHJvU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdW5pcXVlUHJvamVjdE5hbWVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLnVuaXF1ZVByb2plY3ROYW1lcyA9IHZhbHVlO1xuICB9XG5cbiAgLy8gdGhlIHNpemUgb2YgdGhlIG1lbnUgdXNlZCBpbiB0aGUgZGVzaWduZXJcbiAgcHJpdmF0ZSBkZXNpZ25lck1lbnVTaXplUHggPSAyMDtcblxuICBwcml2YXRlIHNwbGl0R3V0dGVyU2l6ZVB4ID0gMTM7XG5cbiAgcHVibGljIHRvdGFsTWVudUhlaWdodFB4ID0gMDtcblxuICBjdXJyZW50VGFiID0gJ3Byb3BlcnRpZXMnO1xuXG4gIEBWaWV3Q2hpbGQoUHJldmlld0NvbXBvbmVudClcbiAgcHJldmlld0NvbXBvbmVudDogUHJldmlld0NvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKFRpbWVsaW5lQ29tcG9uZW50KVxuICB0aW1lbGluZUNvbXBvbmVudDogVGltZWxpbmVDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVBvb2xTZXJ2aWNlOiBGaXh0dXJlUG9vbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3RrZXlUYXJnZXRFeGNsdWRlU2VydmljZTogSG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyRW5zdXJlTG9naW5TZXJ2aWNlOiBVc2VyRW5zdXJlTG9naW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RMb2FkU2VydmljZTogUHJvamVjdExvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2FybmluZ0RpYWxvZ1NlcnZpY2U6IFdhcm5pbmdEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JEaWFsb2dTZXJ2aWNlOiBFcnJvckRpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aW1lbGluZVNlcnZpY2U6IFRpbWVsaW5lU2VydmljZSxcbiAgICBwdWJsaWMgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnVIZWlnaHRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNhbGNUb3RhbE1lbnVIZWlnaHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UoJ2VuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxjVG90YWxNZW51SGVpZ2h0KCk7XG5cbiAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IHByb2plY3RJZCA9IHVybFBhcmFtcy5nZXQoJ2lkJyk7XG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSB1cmxQYXJhbXMuZ2V0KCduYW1lJyk7XG4gICAgbGV0IHNoYXJlVG9rZW4gPSB1cmxQYXJhbXMuZ2V0KCd0b2tlbicpO1xuXG4gICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgLy8gbG9hZCBhIHByb2plY3QgYnkgcXVlcnkgcGFyYW0gSURcbiAgICAgIGlmICghc2hhcmVUb2tlbikge1xuICAgICAgICBzaGFyZVRva2VuID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLmxvYWQoTnVtYmVyLnBhcnNlSW50KHByb2plY3RJZCksIHByb2plY3ROYW1lLCBzaGFyZVRva2VuKS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBsZXQgZXJyb3IgPSByZXNwb25zZSAmJiByZXNwb25zZS5lcnJvciA/IHJlc3BvbnNlLmVycm9yLmVycm9yIDogJ3Vua25vd24nO1xuXG4gICAgICAgICAgbGV0IG1zZyA9ICcnO1xuXG4gICAgICAgICAgaWYgKGVycm9yID09PSAnbm8tcGVybWlzc2lvbicpIHtcbiAgICAgICAgICAgIG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tbm8tcGVybWlzc2lvbi1lcnJvcic7XG4gICAgICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbXNnID0gJ2Rlc2lnbmVyLnByb2plY3Qub3Blbi1lcnJvcic7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5lcnJvckRpYWxvZ1NlcnZpY2Uuc2hvdyhtc2csIGVycm9yKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubmV3KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmlzTG9nZ2VkSW4oKSAmJiAodGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3RJZCgpIHx8IHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0TmFtZSgpKSkge1xuICAgICAgLy8gcmVzdG9yZSB0aGUgbGFzdCBzYXZlZCBwcm9qZWN0XG4gICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5sb2FkKHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0SWQoKSwgdGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3ROYW1lKCkpLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tZXJyb3InO1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IgPyByZXNwb25zZS5lcnJvci5lcnJvciA6ICd1bmtub3duJztcblxuICAgICAgICAgIHRoaXMuZXJyb3JEaWFsb2dTZXJ2aWNlLnNob3cobXNnLCBlcnJvcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLm5ld1Byb2plY3RUZW1wbGF0ZSkge1xuICAgICAgICAvLyBsb2FkIHRoZSBuZXcgcHJvamVjdCB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS50ZW1wbGF0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubmV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjVG90YWxNZW51SGVpZ2h0KCkge1xuICAgIHRoaXMudG90YWxNZW51SGVpZ2h0UHggPSB0aGlzLmRlc2lnbmVyTWVudVNpemVQeCArIHRoaXMuc3BsaXRHdXR0ZXJTaXplUHggKyB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodFB4O1xuICB9XG5cbiAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5wcmV2aWV3Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnByZXZpZXdDb21wb25lbnQub25SZXNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aW1lbGluZUNvbXBvbmVudCkge1xuICAgICAgdGhpcy50aW1lbGluZUNvbXBvbmVudC5vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXAgdGhlIHNwbGl0dGVyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBTcGxpdChbJyNyb3cxJywgJyNyb3cyJywgJyNyb3czJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs0MiwgMzgsIDIwXSxcbiAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLFxuICAgICAgICBjdXJzb3I6ICdyb3ctcmVzaXplJyxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjc2NlbmVzJywgJyNwcmVzZXRzJywgJyNwcmV2aWV3J10sIHtcbiAgICAgICAgc2l6ZXM6IFsxNSwgMTUsIDcwXSxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjY2FwYWJpbGl0aWVzJywgJyNmaXh0dXJlcycsICcjbWFzdGVyRGltbWVyJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs3NCwgMTgsIDhdLFxuICAgICAgICBzbmFwT2Zmc2V0OiAwLFxuICAgICAgICBndXR0ZXJTaXplOiB0aGlzLnNwbGl0R3V0dGVyU2l6ZVB4LFxuICAgICAgICBvbkRyYWc6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcbiAgICAgICAgbWluU2l6ZTogNTAsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblRhYih0YWI6IHN0cmluZykge1xuICAgIC8vIG9wZW4gYSBzaWRlIHRhYiAoZS5nLiBlZmZlY3RzLCBjaGFubmVscywgc2V0dGluZ3MsIGV0Yy4pXG5cbiAgICBpZiAodGFiID09PSAnc2V0dGluZ3MnKSB7XG4gICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgfVxuXG4gIG9wZW5GaXh0dXJlUG9vbCgpIHtcbiAgICB0aGlzLmZpeHR1cmVQb29sU2VydmljZS5vcGVuKCk7XG4gIH1cblxuICBwcm9qZWN0TmV3KCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb2plY3RPcGVuKCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckVuc3VyZUxvZ2luU2VydmljZS5sb2dpbigpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdEJyb3dzZXJDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvamVjdFNhdmUoKSB7XG4gICAgaWYgKHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5uYW1lKSB7XG4gICAgICAvLyB0aGlzIHByb2plY3QgaGFzIGJlZW4gc2F2ZWQgYmVmb3JlIC0+IGp1c3Qgc2F2ZSBpdCBhZ2FpblxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5zYXZlKHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgcHJvamVjdCBoYXMgbm90IHlldCBiZWVuIHNhdmVkIC0+IHNob3cgdGhlIHNhdmUgYXMtZGlhbG9nXG4gICAgICB0aGlzLnVzZXJFbnN1cmVMb2dpblNlcnZpY2UubG9naW4oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RTYXZlQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb2plY3RTYXZlQXMoKSB7XG4gICAgdGhpcy51c2VyRW5zdXJlTG9naW5TZXJ2aWNlLmxvZ2luKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNhdmVDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdXNlclJlZ2lzdGVyKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coVXNlclJlZ2lzdGVyQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHByb2plY3RJbXBvcnQoKSB7XG4gICAgdGhpcy53YXJuaW5nRGlhbG9nU2VydmljZVxuICAgICAgLnNob3coJ2Rlc2lnbmVyLm1pc2Mud2FybmluZy1wcm9jZWVkLXVuc2F2ZWQnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhQcm9qZWN0SW1wb3J0Q29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm9qZWN0RXhwb3J0KCkge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QsIG51bGwsIDIpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KGpzb24pKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QubmFtZSArICcucnNkJyk7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICBwcm9qZWN0U2hhcmUoKSB7XG4gICAgaWYgKCF0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuaWQpIHtcbiAgICAgIC8vIGEgc2F2ZSBpcyByZXF1aXJlZCBmaXJzdFxuICAgICAgdGhpcy5lcnJvckRpYWxvZ1NlcnZpY2Uuc2hvdygnZGVzaWduZXIucHJvamVjdC5zaGFyZS1uby1zYXZlJykuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGJhY2tkcm9wIGNsaWNrLCBiZWNhdXNlIHNlbGVjdGluZyB0aGUgbGluayB0ZXh0IHdpbGwgYWxzbyBjbG9zZSB0aGUgbW9kYWxcbiAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RTaGFyZUNvbXBvbmVudCwgeyBrZXlib2FyZDogdHJ1ZSwgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ob3RrZXlUYXJnZXRFeGNsdWRlU2VydmljZS5leGNsdWRlKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdwJykge1xuICAgICAgdGhpcy5vcGVuRml4dHVyZVBvb2woKTtcblxuICAgICAgLy8gcHJldmVudCBjaGVja2JveGVzIGJlaW5nIHRvZ2dsZWQsIGlmIGluIGZvY3VzIGUuZy5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnbicpIHtcbiAgICAgIHRoaXMucHJvamVjdE5ldygpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgdGhpcy5wcm9qZWN0U2F2ZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdvJykge1xuICAgICAgdGhpcy5wcm9qZWN0T3BlbigpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmd1YWdlKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFuZ3VhZ2UnLCBsYW5ndWFnZSk7XG4gIH1cbn1cbiJdfQ==