@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
@@ -0,0 +1,605 @@
1
+ import { Component, HostListener, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import { BsModalService } from 'ngx-bootstrap/modal';
4
+ import { ToastrService } from 'ngx-toastr';
5
+ import { map } from 'rxjs/operators';
6
+ import Split from 'split.js';
7
+ import { PreviewComponent } from './preview/preview.component';
8
+ import { ProjectBrowserComponent } from './project/project-browser/project-browser.component';
9
+ import { ProjectImportComponent } from './project/project-import/project-import.component';
10
+ import { ProjectSaveComponent } from './project/project-save/project-save.component';
11
+ import { ProjectShareComponent } from './project/project-share/project-share.component';
12
+ import { ConfigService } from './services/config.service';
13
+ import { ErrorDialogService } from './services/error-dialog.service';
14
+ import { FixturePoolService } from './services/fixture-pool.service';
15
+ import { FixtureService } from './services/fixture.service';
16
+ import { HotkeyTargetExcludeService } from './services/hotkey-target-exclude.service';
17
+ import { IntroService } from './services/intro.service';
18
+ import { ProjectLoadService } from './services/project-load.service';
19
+ import { ProjectService } from './services/project.service';
20
+ import { TimelineService } from './services/timeline.service';
21
+ import { UserEnsureLoginService } from './services/user-ensure-login.service';
22
+ import { UserService } from './services/user.service';
23
+ import { WarningDialogService } from './services/warning-dialog.service';
24
+ import { TimelineComponent } from './timeline/timeline.component';
25
+ import { UserRegisterComponent } from './user/user-register/user-register.component';
26
+ import * as i0 from "@angular/core";
27
+ import * as i1 from "@ngx-translate/core";
28
+ import * as i2 from "./services/project.service";
29
+ import * as i3 from "./services/config.service";
30
+ import * as i4 from "./services/fixture-pool.service";
31
+ import * as i5 from "./services/hotkey-target-exclude.service";
32
+ import * as i6 from "ngx-bootstrap/modal";
33
+ import * as i7 from "./services/user.service";
34
+ import * as i8 from "./services/user-ensure-login.service";
35
+ import * as i9 from "ngx-toastr";
36
+ import * as i10 from "./services/project-load.service";
37
+ import * as i11 from "./services/warning-dialog.service";
38
+ import * as i12 from "./services/error-dialog.service";
39
+ import * as i13 from "./services/fixture.service";
40
+ import * as i14 from "./services/timeline.service";
41
+ import * as i15 from "./services/intro.service";
42
+ import * as i16 from "@angular/router";
43
+ import * as i17 from "@angular/common";
44
+ import * as i18 from "ngx-bootstrap/popover";
45
+ import * as i19 from "./preview/preview.component";
46
+ import * as i20 from "./scene/scene.component";
47
+ import * as i21 from "./timeline/timeline.component";
48
+ import * as i22 from "./fixture/fixture.component";
49
+ import * as i23 from "./fixture/fixture-capability/fixture-capability.component";
50
+ import * as i24 from "./fixture/fixture-settings/fixture-settings.component";
51
+ import * as i25 from "./effect/effect.component";
52
+ import * as i26 from "./preset/preset.component";
53
+ import * as i27 from "./master-dimmer/master-dimmer.component";
54
+ import * as i28 from "./fixture/fixture-channel/fixture-channel.component";
55
+ import * as i29 from "./intro/intro.component";
56
+ const _c0 = a0 => ({ height: a0 });
57
+ function DesignerComponent_li_52_Template(rf, ctx) { if (rf & 1) {
58
+ const _r1 = i0.ɵɵgetCurrentView();
59
+ i0.ɵɵelementStart(0, "li", 54)(1, "a", 55);
60
+ i0.ɵɵlistener("click", function DesignerComponent_li_52_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.projectShare(); return i0.ɵɵresetView(false); });
61
+ i0.ɵɵelement(2, "i", 56);
62
+ i0.ɵɵtext(3);
63
+ i0.ɵɵpipe(4, "translate");
64
+ i0.ɵɵelementEnd()();
65
+ } if (rf & 2) {
66
+ i0.ɵɵadvance(3);
67
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 1, "designer.navigation.project-share"), "");
68
+ } }
69
+ function DesignerComponent_li_53_Template(rf, ctx) { if (rf & 1) {
70
+ const _r3 = i0.ɵɵgetCurrentView();
71
+ i0.ɵɵelementStart(0, "li", 3)(1, "a", 14);
72
+ i0.ɵɵelement(2, "i", 57);
73
+ i0.ɵɵtext(3);
74
+ i0.ɵɵpipe(4, "translate");
75
+ i0.ɵɵelementEnd();
76
+ i0.ɵɵelementStart(5, "div", 58)(6, "a", 59);
77
+ i0.ɵɵlistener("click", function DesignerComponent_li_53_Template_a_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.switchLanguage("en"); return i0.ɵɵresetView(false); });
78
+ i0.ɵɵtext(7, "English");
79
+ i0.ɵɵelementEnd();
80
+ i0.ɵɵelementStart(8, "a", 59);
81
+ i0.ɵɵlistener("click", function DesignerComponent_li_53_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.switchLanguage("de"); return i0.ɵɵresetView(false); });
82
+ i0.ɵɵtext(9, "Deutsch");
83
+ i0.ɵɵelementEnd()()();
84
+ } if (rf & 2) {
85
+ i0.ɵɵadvance(3);
86
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 1, "designer.misc.language"), " ");
87
+ } }
88
+ function DesignerComponent_li_54_Template(rf, ctx) { if (rf & 1) {
89
+ const _r4 = i0.ɵɵgetCurrentView();
90
+ i0.ɵɵelementStart(0, "li", 60)(1, "a", 61);
91
+ i0.ɵɵlistener("click", function DesignerComponent_li_54_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.userRegister(); return i0.ɵɵresetView(false); });
92
+ i0.ɵɵelement(2, "i", 62);
93
+ i0.ɵɵtext(3);
94
+ i0.ɵɵpipe(4, "translate");
95
+ i0.ɵɵelementEnd()();
96
+ } if (rf & 2) {
97
+ i0.ɵɵadvance(3);
98
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 1, "designer.navigation.login"), "");
99
+ } }
100
+ function DesignerComponent_li_55_Template(rf, ctx) { if (rf & 1) {
101
+ const _r5 = i0.ɵɵgetCurrentView();
102
+ i0.ɵɵelementStart(0, "li", 3)(1, "a", 14);
103
+ i0.ɵɵelement(2, "i", 62);
104
+ i0.ɵɵtext(3);
105
+ i0.ɵɵelementEnd();
106
+ i0.ɵɵelementStart(4, "div", 58)(5, "a", 59);
107
+ i0.ɵɵlistener("click", function DesignerComponent_li_55_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.userService.logout(); return i0.ɵɵresetView(false); });
108
+ i0.ɵɵelement(6, "i", 63);
109
+ i0.ɵɵtext(7);
110
+ i0.ɵɵpipe(8, "translate");
111
+ i0.ɵɵelementEnd()()();
112
+ } if (rf & 2) {
113
+ const ctx_r1 = i0.ɵɵnextContext();
114
+ i0.ɵɵadvance(3);
115
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.userService.username, " ");
116
+ i0.ɵɵadvance(4);
117
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 2, "designer.navigation.logout"), "");
118
+ } }
119
+ export class DesignerComponent {
120
+ set menuHeightPx(value) {
121
+ this.configService.menuHeightPx = value;
122
+ this.configService.menuHeightChanged.next();
123
+ }
124
+ set externalCompositionsAvailable(value) {
125
+ this.timelineService.externalCompositionsAvailable = value;
126
+ }
127
+ set restUrl(value) {
128
+ this.configService.restUrl = value;
129
+ }
130
+ set enableMediaLibrary(value) {
131
+ this.configService.enableMediaLibrary = value;
132
+ }
133
+ set loginAvailable(value) {
134
+ this.configService.loginAvailable = value;
135
+ }
136
+ set shareAvailable(value) {
137
+ this.configService.shareAvailable = value;
138
+ }
139
+ set languageSwitch(value) {
140
+ this.configService.languageSwitch = value;
141
+ }
142
+ set newProjectTemplate(value) {
143
+ this.configService.newProjectTemplate = value;
144
+ }
145
+ set livePreview(value) {
146
+ this.configService.livePreview = value;
147
+ }
148
+ set localProfiles(value) {
149
+ this.configService.localProfiles = value;
150
+ }
151
+ set intro(value) {
152
+ this.configService.intro = value;
153
+ this.introService.refresh();
154
+ }
155
+ set uniqueProjectNames(value) {
156
+ this.configService.uniqueProjectNames = value;
157
+ }
158
+ constructor(translateService, projectService, configService, fixturePoolService, hotkeyTargetExcludeService, modalService, userService, userEnsureLoginService, toastrService, projectLoadService, warningDialogService, errorDialogService, fixtureService, timelineService, introService) {
159
+ this.translateService = translateService;
160
+ this.projectService = projectService;
161
+ this.configService = configService;
162
+ this.fixturePoolService = fixturePoolService;
163
+ this.hotkeyTargetExcludeService = hotkeyTargetExcludeService;
164
+ this.modalService = modalService;
165
+ this.userService = userService;
166
+ this.userEnsureLoginService = userEnsureLoginService;
167
+ this.toastrService = toastrService;
168
+ this.projectLoadService = projectLoadService;
169
+ this.warningDialogService = warningDialogService;
170
+ this.errorDialogService = errorDialogService;
171
+ this.fixtureService = fixtureService;
172
+ this.timelineService = timelineService;
173
+ this.introService = introService;
174
+ // the size of the menu used in the designer
175
+ this.designerMenuSizePx = 20;
176
+ this.splitGutterSizePx = 13;
177
+ this.totalMenuHeightPx = 0;
178
+ this.currentTab = 'properties';
179
+ this.configService.menuHeightChanged.subscribe(() => {
180
+ this.calcTotalMenuHeight();
181
+ });
182
+ }
183
+ ngOnInit() {
184
+ if (localStorage.getItem('language')) {
185
+ this.translateService.use(localStorage.getItem('language'));
186
+ }
187
+ else {
188
+ this.translateService.use('en');
189
+ }
190
+ this.calcTotalMenuHeight();
191
+ const urlParams = new URLSearchParams(window.location.search);
192
+ const projectId = urlParams.get('id');
193
+ const projectName = urlParams.get('name');
194
+ let shareToken = urlParams.get('token');
195
+ if (projectId) {
196
+ // load a project by query param ID
197
+ if (!shareToken) {
198
+ shareToken = '';
199
+ }
200
+ this.projectLoadService.load(Number.parseInt(projectId, 10), projectName, shareToken).subscribe(() => { }, (response) => {
201
+ let error = response && response.error ? response.error.error : 'unknown';
202
+ let msg = '';
203
+ if (error === 'no-permission') {
204
+ msg = 'designer.project.open-no-permission-error';
205
+ error = undefined;
206
+ }
207
+ else {
208
+ msg = 'designer.project.open-error';
209
+ }
210
+ this.errorDialogService.show(msg, error).subscribe(() => {
211
+ this.projectLoadService.new();
212
+ });
213
+ });
214
+ }
215
+ else if ((this.userService.isLoggedIn() || !this.configService.loginAvailable) &&
216
+ (this.userService.getAutoLoadProjectId() || this.userService.getAutoLoadProjectName())) {
217
+ // restore the last saved project
218
+ this.projectLoadService.load(this.userService.getAutoLoadProjectId(), this.userService.getAutoLoadProjectName()).subscribe(() => { }, (response) => {
219
+ const msg = 'designer.project.open-error';
220
+ const error = response && response.error ? response.error.error : 'unknown';
221
+ this.errorDialogService.show(msg, error).subscribe(() => {
222
+ this.projectLoadService.new();
223
+ });
224
+ });
225
+ }
226
+ else {
227
+ if (this.configService.newProjectTemplate) {
228
+ // load the new project template
229
+ this.projectLoadService.template();
230
+ }
231
+ else {
232
+ this.projectLoadService.new();
233
+ }
234
+ }
235
+ }
236
+ calcTotalMenuHeight() {
237
+ this.totalMenuHeightPx = this.designerMenuSizePx + this.splitGutterSizePx + this.configService.menuHeightPx;
238
+ }
239
+ onResize() {
240
+ if (this.previewComponent) {
241
+ this.previewComponent.onResize();
242
+ }
243
+ if (this.timelineComponent) {
244
+ this.timelineComponent.onResize();
245
+ }
246
+ }
247
+ ngAfterViewInit() {
248
+ // Set up the splitter
249
+ setTimeout(() => {
250
+ Split(['#row1', '#row2', '#row3'], {
251
+ sizes: [42, 38, 20],
252
+ direction: 'vertical',
253
+ cursor: 'row-resize',
254
+ snapOffset: 0,
255
+ gutterSize: this.splitGutterSizePx,
256
+ onDrag: this.onResize.bind(this),
257
+ });
258
+ Split(['#scenes', '#presets', '#preview'], {
259
+ sizes: [15, 15, 70],
260
+ snapOffset: 0,
261
+ gutterSize: this.splitGutterSizePx,
262
+ onDrag: this.onResize.bind(this),
263
+ });
264
+ Split(['#capabilities', '#fixtures', '#masterDimmer'], {
265
+ sizes: [74, 18, 8],
266
+ snapOffset: 0,
267
+ gutterSize: this.splitGutterSizePx,
268
+ onDrag: this.onResize.bind(this),
269
+ minSize: 50,
270
+ });
271
+ this.onResize();
272
+ });
273
+ }
274
+ openTab(tab) {
275
+ // open a side tab (e.g. effects, channels, settings, etc.)
276
+ if (tab === 'settings') {
277
+ this.fixtureService.settingsSelection = true;
278
+ }
279
+ else {
280
+ this.fixtureService.settingsSelection = false;
281
+ }
282
+ this.currentTab = tab;
283
+ }
284
+ openFixturePool() {
285
+ this.fixturePoolService.open();
286
+ }
287
+ projectNew() {
288
+ this.warningDialogService
289
+ .show('designer.misc.warning-proceed-unsaved')
290
+ .pipe(map((result) => {
291
+ if (result) {
292
+ this.projectLoadService.new();
293
+ }
294
+ }))
295
+ .subscribe();
296
+ }
297
+ projectOpen() {
298
+ this.warningDialogService
299
+ .show('designer.misc.warning-proceed-unsaved')
300
+ .pipe(map((result) => {
301
+ if (result) {
302
+ this.userEnsureLoginService.login().subscribe(() => {
303
+ this.modalService.show(ProjectBrowserComponent, { keyboard: true, ignoreBackdropClick: false });
304
+ });
305
+ }
306
+ }))
307
+ .subscribe();
308
+ }
309
+ projectSave() {
310
+ if (this.projectService.project.name) {
311
+ // this project has been saved before -> just save it again
312
+ this.projectService.save(this.projectService.project);
313
+ }
314
+ else {
315
+ // this project has not yet been saved -> show the save as-dialog
316
+ this.userEnsureLoginService.login().subscribe(() => {
317
+ this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });
318
+ });
319
+ }
320
+ }
321
+ projectSaveAs() {
322
+ this.userEnsureLoginService.login().subscribe(() => {
323
+ this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });
324
+ });
325
+ }
326
+ userRegister() {
327
+ this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false });
328
+ }
329
+ projectImport() {
330
+ this.warningDialogService
331
+ .show('designer.misc.warning-proceed-unsaved')
332
+ .pipe(map((result) => {
333
+ if (result) {
334
+ this.modalService.show(ProjectImportComponent, { keyboard: true, ignoreBackdropClick: false });
335
+ }
336
+ }))
337
+ .subscribe();
338
+ }
339
+ projectExport() {
340
+ const json = JSON.stringify(this.projectService.project, null, 2);
341
+ const element = document.createElement('a');
342
+ element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(json));
343
+ element.setAttribute('download', this.projectService.project.name + '.rsd');
344
+ element.style.display = 'none';
345
+ document.body.appendChild(element);
346
+ element.click();
347
+ document.body.removeChild(element);
348
+ }
349
+ projectShare() {
350
+ if (!this.projectService.project.id) {
351
+ // a save is required first
352
+ this.errorDialogService.show('designer.project.share-no-save').subscribe();
353
+ return;
354
+ }
355
+ // ignore backdrop click, because selecting the link text will also close the modal
356
+ this.modalService.show(ProjectShareComponent, { keyboard: true, ignoreBackdropClick: true });
357
+ }
358
+ handleKeyboardEvent(event) {
359
+ if (this.hotkeyTargetExcludeService.exclude(event)) {
360
+ return;
361
+ }
362
+ if (event.key === 'p') {
363
+ this.openFixturePool();
364
+ // prevent checkboxes being toggled, if in focus e.g.
365
+ event.stopPropagation();
366
+ event.preventDefault();
367
+ }
368
+ if ((event.ctrlKey || event.metaKey) && event.key === 'n') {
369
+ this.projectNew();
370
+ event.stopPropagation();
371
+ event.preventDefault();
372
+ }
373
+ if ((event.ctrlKey || event.metaKey) && event.key === 's') {
374
+ this.projectSave();
375
+ event.stopPropagation();
376
+ event.preventDefault();
377
+ }
378
+ if ((event.ctrlKey || event.metaKey) && event.key === 'o') {
379
+ this.projectOpen();
380
+ event.stopPropagation();
381
+ event.preventDefault();
382
+ }
383
+ }
384
+ switchLanguage(language) {
385
+ this.translateService.use(language);
386
+ localStorage.setItem('language', language);
387
+ }
388
+ static { this.ɵfac = function DesignerComponent_Factory(t) { return new (t || DesignerComponent)(i0.ɵɵdirectiveInject(i1.TranslateService), i0.ɵɵdirectiveInject(i2.ProjectService), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i4.FixturePoolService), i0.ɵɵdirectiveInject(i5.HotkeyTargetExcludeService), i0.ɵɵdirectiveInject(i6.BsModalService), i0.ɵɵdirectiveInject(i7.UserService), i0.ɵɵdirectiveInject(i8.UserEnsureLoginService), i0.ɵɵdirectiveInject(i9.ToastrService), i0.ɵɵdirectiveInject(i10.ProjectLoadService), i0.ɵɵdirectiveInject(i11.WarningDialogService), i0.ɵɵdirectiveInject(i12.ErrorDialogService), i0.ɵɵdirectiveInject(i13.FixtureService), i0.ɵɵdirectiveInject(i14.TimelineService), i0.ɵɵdirectiveInject(i15.IntroService)); }; }
389
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DesignerComponent, selectors: [["lib-designer"]], viewQuery: function DesignerComponent_Query(rf, ctx) { if (rf & 1) {
390
+ i0.ɵɵviewQuery(PreviewComponent, 5);
391
+ i0.ɵɵviewQuery(TimelineComponent, 5);
392
+ } if (rf & 2) {
393
+ let _t;
394
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.previewComponent = _t.first);
395
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timelineComponent = _t.first);
396
+ } }, hostBindings: function DesignerComponent_HostBindings(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵlistener("keydown", function DesignerComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
398
+ } }, inputs: { menuHeightPx: "menuHeightPx", externalCompositionsAvailable: "externalCompositionsAvailable", restUrl: "restUrl", enableMediaLibrary: "enableMediaLibrary", loginAvailable: "loginAvailable", shareAvailable: "shareAvailable", languageSwitch: "languageSwitch", newProjectTemplate: "newProjectTemplate", livePreview: "livePreview", localProfiles: "localProfiles", intro: "intro", uniqueProjectNames: "uniqueProjectNames" }, decls: 105, vars: 57, consts: [["id", "designer", 3, "ngStyle"], [1, "navbar", "navbar-expand-lg", "navbar-light", "bg-light", "border-secondary", 2, "border-bottom", "1px solid #444", "height", "20px", "z-index", "9999"], [1, "navbar-nav", "mr-auto"], [1, "nav-item", "dropdown"], ["href", "#", "id", "fileDropdown", "data-toggle", "dropdown", "aria-haspopup", "true", "aria-expanded", "false", 1, "nav-link", "dropdown-toggle"], ["aria-labelledby", "fileDropdown", 1, "dropdown-menu"], ["href", "#", 1, "dropdown-item", "d-none", "d-md-block", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-file-o"], ["href", "#", 1, "dropdown-item", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-folder-open-o"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-floppy-o"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-download"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-external-link"], [1, "nav-item", "dropdown", "d-none", "d-md-block"], ["href", "#", "id", "settingsDropdown", "data-toggle", "dropdown", "aria-haspopup", "true", "aria-expanded", "false", 1, "nav-link", "dropdown-toggle"], ["aria-labelledby", "settingsDropdown", 1, "dropdown-menu"], ["href", "https://rocketshow.net/support/", "target", "_blank", 1, "dropdown-item"], [1, "navbar-nav"], ["class", "nav-item d-none d-md-flex", "data-toggle", "collapse", 4, "ngIf"], ["class", "nav-item dropdown", 4, "ngIf"], ["class", "nav-item", "data-toggle", "collapse", 4, "ngIf"], [1, "h-100", "d-none", "d-md-block"], ["id", "row1", 1, "split", "split-vertical", "clearfix", "pt-3", "pl-3"], ["id", "scenes", 1, "split", "split-horizontal", "h-100"], ["id", "presets", 1, "split", "split-horizontal", "h-100"], ["id", "preview", 1, "split", "split-horizontal", "h-100", "pr-3"], [1, "card", "border-secondary", "h-100"], [1, "card-body", "p-0", "h-100"], [1, "h-100"], ["id", "row2", 1, "split", "split-vertical", "clearfix", "px-3", "d-flex", 2, "flex-direction", "row"], [1, "col", "col-auto", "p-0", 2, "margin-right", "-1px"], ["id", "v-pills-tab", "role", "tablist", "aria-orientation", "vertical", 1, "nav", "flex-column", "nav-pills"], ["id", "v-pills-capabilities-tab", "container", "body", "placement", "right", "triggers", "mouseenter:mouseleave", "data-toggle", "pill", "href", "#v-pills-capabilities", "role", "tab", "aria-controls", "v-pills-capabilities", "aria-selected", "true", 1, "nav-link", "px-3", "active", 3, "click", "popover"], ["aria-hidden", "true", 1, "fa", "fa-bolt", "fa-fw"], ["id", "v-pills-channels-tab", "container", "body", "placement", "right", "triggers", "mouseenter:mouseleave", "data-toggle", "pill", "href", "#v-pills-channels", "role", "tab", "aria-controls", "v-pills-channels", "aria-selected", "false", 1, "nav-link", "px-3", 3, "click", "popover"], ["aria-hidden", "true", 1, "fa", "fa-sliders", "fa-fw"], ["id", "v-pills-effects-tab", "container", "body", "placement", "right", "triggers", "mouseenter:mouseleave", "data-toggle", "pill", "href", "#v-pills-effects", "role", "tab", "aria-controls", "v-pills-effects", "aria-selected", "false", 1, "nav-link", "px-3", 3, "click", "popover"], ["aria-hidden", "true", 1, "fa", "fa-magic", "fa-fw"], ["id", "v-pills-settings-tab", "container", "body", "placement", "right", "triggers", "mouseenter:mouseleave", "data-toggle", "pill", "href", "#v-pills-settings", "role", "tab", "aria-controls", "v-pills-settings", "aria-selected", "false", 1, "nav-link", "px-3", 2, "border-top", "1px solid #444", 3, "click", "popover"], ["aria-hidden", "true", 1, "fa", "fa-cog", "fa-fw"], ["id", "capabilities", 1, "split", "split-horizontal", "h-100", 2, "padding-left", "1rem"], [1, "row", "h-100"], [1, "col", "pl-0", "h-100"], ["id", "v-pills-tabContent", 1, "tab-content", "h-100"], ["id", "v-pills-capabilities", "role", "tabpanel", 1, "tab-pane", "h-100", "show", "active"], ["id", "v-pills-channels", "role", "tabpanel", 1, "tab-pane", "h-100", "show"], ["id", "v-pills-effects", "role", "tabpanel", "aria-labelledby", "v-pills-profile-tab", 1, "tab-pane", "h-100"], ["id", "v-pills-settings", "role", "tabpanel", "aria-labelledby", "v-pills-home-tab", 1, "tab-pane", "h-100"], ["id", "fixtures", 1, "split", "split-horizontal", "h-100"], ["id", "masterDimmer", 1, "split", "split-horizontal", "h-100"], ["id", "row3", 1, "split", "split-vertical", "clearfix", "px-3", "pb-3", 2, "padding-bottom", "20px"], [1, "d-md-none", "p-3"], [1, "mt-3"], [1, "d-none", "d-md-flex"], ["data-toggle", "collapse", 1, "nav-item", "d-none", "d-md-flex"], ["routerLinkActive", "active", 1, "nav-link", "text-primary", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-share-alt"], ["aria-hidden", "true", 1, "fa", "fa-globe"], ["aria-labelledby", "settingsDropdown", 1, "dropdown-menu", "dropdown-menu-right"], ["href", "#", "target", "_blank", 1, "dropdown-item", 3, "click"], ["data-toggle", "collapse", 1, "nav-item"], ["routerLinkActive", "active", 1, "nav-link", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-user"], ["aria-hidden", "true", 1, "fa", "fa-sign-out"]], template: function DesignerComponent_Template(rf, ctx) { if (rf & 1) {
399
+ i0.ɵɵelementStart(0, "div", 0)(1, "nav", 1)(2, "ul", 2)(3, "li", 3)(4, "a", 4);
400
+ i0.ɵɵtext(5);
401
+ i0.ɵɵpipe(6, "translate");
402
+ i0.ɵɵelementEnd();
403
+ i0.ɵɵelementStart(7, "div", 5)(8, "a", 6);
404
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_8_listener() { ctx.projectNew(); return false; });
405
+ i0.ɵɵelement(9, "i", 7);
406
+ i0.ɵɵtext(10);
407
+ i0.ɵɵpipe(11, "translate");
408
+ i0.ɵɵelementEnd();
409
+ i0.ɵɵelementStart(12, "a", 8);
410
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_12_listener() { ctx.projectOpen(); return false; });
411
+ i0.ɵɵelement(13, "i", 9);
412
+ i0.ɵɵtext(14);
413
+ i0.ɵɵpipe(15, "translate");
414
+ i0.ɵɵelementEnd();
415
+ i0.ɵɵelementStart(16, "a", 6);
416
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_16_listener() { ctx.projectSave(); return false; });
417
+ i0.ɵɵelement(17, "i", 10);
418
+ i0.ɵɵtext(18);
419
+ i0.ɵɵpipe(19, "translate");
420
+ i0.ɵɵelementEnd();
421
+ i0.ɵɵelementStart(20, "a", 6);
422
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_20_listener() { ctx.projectSaveAs(); return false; });
423
+ i0.ɵɵelement(21, "i", 10);
424
+ i0.ɵɵtext(22);
425
+ i0.ɵɵpipe(23, "translate");
426
+ i0.ɵɵelementEnd();
427
+ i0.ɵɵelementStart(24, "a", 6);
428
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_24_listener() { ctx.projectImport(); return false; });
429
+ i0.ɵɵelement(25, "i", 11);
430
+ i0.ɵɵtext(26);
431
+ i0.ɵɵpipe(27, "translate");
432
+ i0.ɵɵelementEnd();
433
+ i0.ɵɵelementStart(28, "a", 6);
434
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_28_listener() { ctx.projectExport(); return false; });
435
+ i0.ɵɵelement(29, "i", 12);
436
+ i0.ɵɵtext(30);
437
+ i0.ɵɵpipe(31, "translate");
438
+ i0.ɵɵelementEnd()()();
439
+ i0.ɵɵelementStart(32, "li", 13)(33, "a", 14);
440
+ i0.ɵɵtext(34);
441
+ i0.ɵɵpipe(35, "translate");
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵelementStart(36, "div", 15)(37, "a", 8);
444
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_37_listener() { ctx.openFixturePool(); return false; });
445
+ i0.ɵɵtext(38);
446
+ i0.ɵɵpipe(39, "translate");
447
+ i0.ɵɵelementEnd()()();
448
+ i0.ɵɵelementStart(40, "li", 13)(41, "a", 14);
449
+ i0.ɵɵtext(42);
450
+ i0.ɵɵpipe(43, "translate");
451
+ i0.ɵɵelementEnd();
452
+ i0.ɵɵelementStart(44, "div", 15)(45, "a", 8);
453
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_45_listener() { ctx.introService.reset(); return false; });
454
+ i0.ɵɵtext(46);
455
+ i0.ɵɵpipe(47, "translate");
456
+ i0.ɵɵelementEnd();
457
+ i0.ɵɵelementStart(48, "a", 16);
458
+ i0.ɵɵtext(49);
459
+ i0.ɵɵpipe(50, "translate");
460
+ i0.ɵɵelementEnd()()()();
461
+ i0.ɵɵelementStart(51, "ul", 17);
462
+ i0.ɵɵtemplate(52, DesignerComponent_li_52_Template, 5, 3, "li", 18)(53, DesignerComponent_li_53_Template, 10, 3, "li", 19)(54, DesignerComponent_li_54_Template, 5, 3, "li", 20)(55, DesignerComponent_li_55_Template, 9, 4, "li", 19);
463
+ i0.ɵɵelementEnd()();
464
+ i0.ɵɵelementStart(56, "div", 21)(57, "div", 22)(58, "div", 23);
465
+ i0.ɵɵelement(59, "lib-app-scene");
466
+ i0.ɵɵelementEnd();
467
+ i0.ɵɵelementStart(60, "div", 24);
468
+ i0.ɵɵelement(61, "lib-app-preset");
469
+ i0.ɵɵelementEnd();
470
+ i0.ɵɵelementStart(62, "div", 25)(63, "div", 26)(64, "div", 27);
471
+ i0.ɵɵelement(65, "lib-app-preview", 28);
472
+ i0.ɵɵelementEnd()()()();
473
+ i0.ɵɵelementStart(66, "div", 29)(67, "div", 30)(68, "div", 31)(69, "a", 32);
474
+ i0.ɵɵpipe(70, "translate");
475
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_69_listener() { return ctx.openTab("capabilities"); });
476
+ i0.ɵɵelement(71, "i", 33);
477
+ i0.ɵɵelementEnd();
478
+ i0.ɵɵelementStart(72, "a", 34);
479
+ i0.ɵɵpipe(73, "translate");
480
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_72_listener() { return ctx.openTab("channels"); });
481
+ i0.ɵɵelement(74, "i", 35);
482
+ i0.ɵɵelementEnd();
483
+ i0.ɵɵelementStart(75, "a", 36);
484
+ i0.ɵɵpipe(76, "translate");
485
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_75_listener() { return ctx.openTab("effects"); });
486
+ i0.ɵɵelement(77, "i", 37);
487
+ i0.ɵɵelementEnd();
488
+ i0.ɵɵelementStart(78, "a", 38);
489
+ i0.ɵɵpipe(79, "translate");
490
+ i0.ɵɵlistener("click", function DesignerComponent_Template_a_click_78_listener() { return ctx.openTab("settings"); });
491
+ i0.ɵɵelement(80, "i", 39);
492
+ i0.ɵɵelementEnd()()();
493
+ i0.ɵɵelementStart(81, "div", 40)(82, "div", 41)(83, "div", 42)(84, "div", 43)(85, "div", 44);
494
+ i0.ɵɵelement(86, "lib-app-fixture-capability");
495
+ i0.ɵɵelementEnd();
496
+ i0.ɵɵelementStart(87, "div", 45);
497
+ i0.ɵɵelement(88, "lib-app-fixture-channel");
498
+ i0.ɵɵelementEnd();
499
+ i0.ɵɵelementStart(89, "div", 46);
500
+ i0.ɵɵelement(90, "lib-app-effect");
501
+ i0.ɵɵelementEnd();
502
+ i0.ɵɵelementStart(91, "div", 47);
503
+ i0.ɵɵelement(92, "lib-app-fixture-settings");
504
+ i0.ɵɵelementEnd()()()()();
505
+ i0.ɵɵelementStart(93, "div", 48);
506
+ i0.ɵɵelement(94, "lib-app-fixture");
507
+ i0.ɵɵelementEnd();
508
+ i0.ɵɵelementStart(95, "div", 49);
509
+ i0.ɵɵelement(96, "lib-app-master-dimmer");
510
+ i0.ɵɵelementEnd()();
511
+ i0.ɵɵelementStart(97, "div", 50);
512
+ i0.ɵɵelement(98, "lib-app-timeline");
513
+ i0.ɵɵelementEnd()();
514
+ i0.ɵɵelementStart(99, "div", 51)(100, "div");
515
+ i0.ɵɵelement(101, "lib-app-master-dimmer");
516
+ i0.ɵɵelementEnd();
517
+ i0.ɵɵelementStart(102, "div", 52);
518
+ i0.ɵɵelement(103, "lib-app-scene");
519
+ i0.ɵɵelementEnd()()();
520
+ i0.ɵɵelement(104, "lib-app-intro", 53);
521
+ } if (rf & 2) {
522
+ i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(55, _c0, "calc(100% - " + ctx.totalMenuHeightPx + "px)"));
523
+ i0.ɵɵadvance(5);
524
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 23, "designer.navigation.project"), " ");
525
+ i0.ɵɵadvance(5);
526
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 25, "designer.navigation.project-new"), "");
527
+ i0.ɵɵadvance(4);
528
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 27, "designer.navigation.project-open"), "");
529
+ i0.ɵɵadvance(4);
530
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(19, 29, "designer.navigation.project-save"), "");
531
+ i0.ɵɵadvance(4);
532
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 31, "designer.navigation.project-save-as"), "");
533
+ i0.ɵɵadvance(4);
534
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(27, 33, "designer.navigation.project-import"), "");
535
+ i0.ɵɵadvance(4);
536
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(31, 35, "designer.navigation.project-export"), "");
537
+ i0.ɵɵadvance(4);
538
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(35, 37, "designer.navigation.settings"), " ");
539
+ i0.ɵɵadvance(4);
540
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(39, 39, "designer.navigation.fixture-pool"));
541
+ i0.ɵɵadvance(4);
542
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(43, 41, "designer.navigation.help"), " ");
543
+ i0.ɵɵadvance(4);
544
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(47, 43, "designer.navigation.reset-intro"));
545
+ i0.ɵɵadvance(3);
546
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(50, 45, "designer.navigation.support"));
547
+ i0.ɵɵadvance(3);
548
+ i0.ɵɵproperty("ngIf", ctx.configService.shareAvailable);
549
+ i0.ɵɵadvance();
550
+ i0.ɵɵproperty("ngIf", ctx.configService.languageSwitch);
551
+ i0.ɵɵadvance();
552
+ i0.ɵɵproperty("ngIf", ctx.configService.loginAvailable && !ctx.userService.isLoggedIn());
553
+ i0.ɵɵadvance();
554
+ i0.ɵɵproperty("ngIf", ctx.configService.loginAvailable && ctx.userService.isLoggedIn());
555
+ i0.ɵɵadvance(8);
556
+ i0.ɵɵclassProp("card-intro-active", ctx.introService.showStep("preview"));
557
+ i0.ɵɵadvance(6);
558
+ i0.ɵɵpropertyInterpolate("popover", i0.ɵɵpipeBind1(70, 47, "designer.misc.capabilities"));
559
+ i0.ɵɵadvance(3);
560
+ i0.ɵɵpropertyInterpolate("popover", i0.ɵɵpipeBind1(73, 49, "designer.misc.channels"));
561
+ i0.ɵɵadvance(3);
562
+ i0.ɵɵpropertyInterpolate("popover", i0.ɵɵpipeBind1(76, 51, "designer.misc.effects"));
563
+ i0.ɵɵadvance(3);
564
+ i0.ɵɵpropertyInterpolate("popover", i0.ɵɵpipeBind1(79, 53, "designer.misc.settings"));
565
+ } }, dependencies: [i16.RouterLinkActive, i17.NgIf, i17.NgStyle, i18.PopoverDirective, i19.PreviewComponent, i20.SceneComponent, i21.TimelineComponent, i22.FixtureComponent, i23.FixtureCapabilityComponent, i24.FixtureSettingsComponent, i25.EffectComponent, i26.PresetComponent, i27.MasterDimmerComponent, i28.FixtureChannelComponent, i29.IntroComponent, i1.TranslatePipe], styles: [".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:none}#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}#designer .card-header{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:\"\\f096\"}#designer input[type=checkbox].bigcheck:checked+span.bigcheck-target:after{content:\"\\f046\"}#designer .gutter.gutter-horizontal{cursor:ew-resize}#designer .gutter.gutter-vertical{cursor:ns-resize}#designer .split-horizontal,#designer .gutter.gutter-horizontal{float:left}#designer .split-vertical,#designer .gutter.gutter-horizontal{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-track,#designer .slider-track-low,#designer .slider-track-high,#designer .slider-selection{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-right .arrow:after,#designer .bs-popover-auto[x-placement^=right] .arrow:after{border-right-color:#fff}#designer .bs-popover-left .arrow:after,#designer .bs-popover-auto[x-placement^=left] .arrow:after{border-left-color:#fff}#designer .bs-popover-bottom .arrow:after,#designer .bs-popover-auto[x-placement^=bottom] .arrow:after{border-bottom-color:#fff}#designer .bs-popover-top .arrow:after,#designer .bs-popover-auto[x-placement^=top] .arrow:after{border-top-color:#fff}#designer .iro__wheel,#designer .iro__slider{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:#0000001a;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:before,#designer .wavesurfer-handle:after{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}\n"], encapsulation: 2 }); }
566
+ }
567
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DesignerComponent, [{
568
+ type: Component,
569
+ args: [{ selector: 'lib-designer', encapsulation: ViewEncapsulation.None, 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", styles: [".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:none}#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}#designer .card-header{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:\"\\f096\"}#designer input[type=checkbox].bigcheck:checked+span.bigcheck-target:after{content:\"\\f046\"}#designer .gutter.gutter-horizontal{cursor:ew-resize}#designer .gutter.gutter-vertical{cursor:ns-resize}#designer .split-horizontal,#designer .gutter.gutter-horizontal{float:left}#designer .split-vertical,#designer .gutter.gutter-horizontal{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-track,#designer .slider-track-low,#designer .slider-track-high,#designer .slider-selection{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-right .arrow:after,#designer .bs-popover-auto[x-placement^=right] .arrow:after{border-right-color:#fff}#designer .bs-popover-left .arrow:after,#designer .bs-popover-auto[x-placement^=left] .arrow:after{border-left-color:#fff}#designer .bs-popover-bottom .arrow:after,#designer .bs-popover-auto[x-placement^=bottom] .arrow:after{border-bottom-color:#fff}#designer .bs-popover-top .arrow:after,#designer .bs-popover-auto[x-placement^=top] .arrow:after{border-top-color:#fff}#designer .iro__wheel,#designer .iro__slider{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:#0000001a;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:before,#designer .wavesurfer-handle:after{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}\n"] }]
570
+ }], () => [{ type: i1.TranslateService }, { type: i2.ProjectService }, { type: i3.ConfigService }, { type: i4.FixturePoolService }, { type: i5.HotkeyTargetExcludeService }, { type: i6.BsModalService }, { type: i7.UserService }, { type: i8.UserEnsureLoginService }, { type: i9.ToastrService }, { type: i10.ProjectLoadService }, { type: i11.WarningDialogService }, { type: i12.ErrorDialogService }, { type: i13.FixtureService }, { type: i14.TimelineService }, { type: i15.IntroService }], { menuHeightPx: [{
571
+ type: Input
572
+ }], externalCompositionsAvailable: [{
573
+ type: Input
574
+ }], restUrl: [{
575
+ type: Input
576
+ }], enableMediaLibrary: [{
577
+ type: Input
578
+ }], loginAvailable: [{
579
+ type: Input
580
+ }], shareAvailable: [{
581
+ type: Input
582
+ }], languageSwitch: [{
583
+ type: Input
584
+ }], newProjectTemplate: [{
585
+ type: Input
586
+ }], livePreview: [{
587
+ type: Input
588
+ }], localProfiles: [{
589
+ type: Input
590
+ }], intro: [{
591
+ type: Input
592
+ }], uniqueProjectNames: [{
593
+ type: Input
594
+ }], previewComponent: [{
595
+ type: ViewChild,
596
+ args: [PreviewComponent]
597
+ }], timelineComponent: [{
598
+ type: ViewChild,
599
+ args: [TimelineComponent]
600
+ }], handleKeyboardEvent: [{
601
+ type: HostListener,
602
+ args: ['document:keydown', ['$event']]
603
+ }] }); })();
604
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DesignerComponent, { className: "DesignerComponent" }); })();
605
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNtRDdFLEFBREYsOEJBQWtHLFlBRTdGO0lBRDhCLGtKQUFTLHFCQUFjLHdCQUFHLEtBQUssS0FBRTtJQUMvRCx3QkFBa0Q7SUFBQyxZQUFxRDs7SUFFN0csQUFGNkcsaUJBQzFHLEVBQ0U7O0lBRm1ELGVBQXFEO0lBQXJELHlGQUFxRDs7OztJQUszRyxBQURGLDZCQUFtRSxZQUU5RDtJQUFBLHdCQUE4QztJQUMvQyxZQUNGOztJQUFBLGlCQUFJO0lBRUYsQUFERiwrQkFBa0YsWUFDVTtJQUF4RCxrSkFBUyxzQkFBZSxJQUFJLENBQUMsd0JBQUcsS0FBSyxLQUFFO0lBQWlCLHVCQUFPO0lBQUEsaUJBQUk7SUFDckcsNkJBQTBGO0lBQXhELGtKQUFTLHNCQUFlLElBQUksQ0FBQyx3QkFBRyxLQUFLLEtBQUU7SUFBaUIsdUJBQU87SUFFckcsQUFERSxBQURtRyxpQkFBSSxFQUNqRyxFQUNIOztJQU5ELGVBQ0Y7SUFERSwrRUFDRjs7OztJQVFBLEFBREYsOEJBQThHLFlBRXpHO0lBRGlCLGtKQUFTLHFCQUFjLHdCQUFHLEtBQUssS0FBRTtJQUNsRCx3QkFBNkM7SUFBQyxZQUE2Qzs7SUFFaEcsQUFGZ0csaUJBQzdGLEVBQ0U7O0lBRjhDLGVBQTZDO0lBQTdDLGlGQUE2Qzs7OztJQUs5RixBQURGLDZCQUErRixZQUUxRjtJQUFBLHdCQUE2QztJQUM5QyxZQUNGO0lBQUEsaUJBQUk7SUFFRixBQURGLCtCQUFrRixZQUU3RTtJQUQrQixrSkFBUywyQkFBb0Isd0JBQUcsS0FBSyxLQUFFO0lBQ3RFLHdCQUFpRDtJQUFDLFlBQThDOztJQUd2RyxBQURFLEFBRnFHLGlCQUNsRyxFQUNHLEVBQ0g7OztJQVBELGVBQ0Y7SUFERSw0REFDRjtJQUd1RCxlQUE4QztJQUE5QyxrRkFBOEM7O0FEeEU3RyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQ0ksNkJBQTZCLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFDSSxPQUFPLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELElBQ0ksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFDSSxjQUFjLENBQUMsS0FBYztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQ0ksY0FBYyxDQUFDLEtBQWM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUNJLGNBQWMsQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFDSSxrQkFBa0IsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUNJLFdBQVcsQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFDSSxhQUFhLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQ0ksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBaUJELFlBQ1UsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQy9CLGFBQTRCLEVBQzNCLGtCQUFzQyxFQUN0QywwQkFBc0QsRUFDdEQsWUFBNEIsRUFDN0IsV0FBd0IsRUFDdkIsc0JBQThDLEVBQzlDLGFBQTRCLEVBQzVCLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDMUMsa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLGVBQWdDLEVBQ2pDLFlBQTBCO1FBZHpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBOUJuQyw0Q0FBNEM7UUFDcEMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRXhCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUV4QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFN0IsZUFBVSxHQUFHLFlBQVksQ0FBQztRQXlCeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDN0YsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNSLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxLQUFLLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBRTFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFFYixJQUFJLEtBQUssS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxHQUFHLDJDQUEyQyxDQUFDO29CQUNsRCxLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUNwQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxHQUFHLDZCQUE2QixDQUFDO2dCQUN0QyxDQUFDO2dCQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ3RELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUNMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1lBQ3JFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUN0RixDQUFDO1lBQ0QsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FDeEgsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNSLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxHQUFHLEdBQUcsNkJBQTZCLENBQUM7Z0JBQzFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUU1RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQyxnQ0FBZ0M7Z0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUM5RyxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixzQkFBc0I7UUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixTQUFTLEVBQUUsVUFBVTtnQkFDckIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLFVBQVUsRUFBRSxDQUFDO2dCQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2pDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixVQUFVLEVBQUUsQ0FBQztnQkFDYixVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNqQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxFQUFFO2dCQUNyRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEIsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLDJEQUEyRDtRQUUzRCxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsSUFBSSxDQUFDLHVDQUF1QyxDQUFDO2FBQzdDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQUMsdUNBQXVDLENBQUM7YUFDN0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2xHLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04saUVBQWlFO1lBQ2pFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsSUFBSSxDQUFDLHVDQUF1QyxDQUFDO2FBQzdDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakcsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLCtCQUErQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekYsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzRSxPQUFPO1FBQ1QsQ0FBQztRQUVELG1GQUFtRjtRQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBR0QsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdkIscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO2tGQTNWVSxpQkFBaUI7b0VBQWpCLGlCQUFpQjsyQkF3RWpCLGdCQUFnQjsyQkFHaEIsaUJBQWlCOzs7Ozs7WUEzRWpCLGdHQUFBLCtCQUEyQixpQ0FBVjs7WUNuQnRCLEFBREYsQUFERixBQUxGLEFBRkYsOEJBQXNGLGFBS25GLFlBRWdDLFlBQ0MsV0FDcUc7WUFDL0gsWUFDRjs7WUFBQSxpQkFBSTtZQUVGLEFBREYsOEJBQTBELFdBRXJEO1lBRGlELGtGQUFTLGdCQUFZLFNBQUcsS0FBSyxJQUFFO1lBQ2hGLHVCQUFxRDtZQUFDLGFBQW1EOztZQUFBLGlCQUMzRztZQUNELDZCQUNHO1lBRCtCLG1GQUFTLGlCQUFhLFNBQUcsS0FBSyxJQUFFO1lBQy9ELHdCQUE0RDtZQUFDLGFBQW9EOztZQUFBLGlCQUNuSDtZQUNELDZCQUNHO1lBRGlELG1GQUFTLGlCQUFhLFNBQUcsS0FBSyxJQUFFO1lBQ2pGLHlCQUF1RDtZQUFDLGFBQW9EOztZQUFBLGlCQUM5RztZQUNELDZCQUNHO1lBRGlELG1GQUFTLG1CQUFlLFNBQUcsS0FBSyxJQUFFO1lBQ25GLHlCQUF1RDtZQUFDLGFBQXVEOztZQUFBLGlCQUNqSDtZQUNELDZCQUNHO1lBRGlELG1GQUFTLG1CQUFlLFNBQUcsS0FBSyxJQUFFO1lBQ25GLHlCQUF1RDtZQUFDLGFBQXNEOztZQUFBLGlCQUNoSDtZQUNELDZCQUNHO1lBRGlELG1GQUFTLG1CQUFlLFNBQUcsS0FBSyxJQUFFO1lBQ25GLHlCQUE0RDtZQUFDLGFBQXNEOztZQUcxSCxBQURFLEFBRndILGlCQUNySCxFQUNHLEVBQ0g7WUFFSCxBQURGLCtCQUFnRCxhQVE3QztZQUNDLGFBQ0Y7O1lBQUEsaUJBQUk7WUFFRixBQURGLGdDQUE4RCxZQUNXO1lBQXJDLG1GQUFTLHFCQUFpQixTQUFHLEtBQUssSUFBRTtZQUFDLGFBQW9EOztZQUcvSCxBQURFLEFBRjZILGlCQUFJLEVBRTNILEVBQ0g7WUFFSCxBQURGLCtCQUFnRCxhQVE3QztZQUNDLGFBQ0Y7O1lBQUEsaUJBQUk7WUFFRixBQURGLGdDQUE4RCxZQUNjO1lBQXhDLG1GQUFTLHdCQUFvQixTQUFHLEtBQUssSUFBRTtZQUFDLGFBQW1EOztZQUFBLGlCQUFJO1lBQ2pJLDhCQUFnRjtZQUFBLGFBRTlFOztZQUdSLEFBREUsQUFERSxBQURJLGlCQUFJLEVBQ0YsRUFDSCxFQUNGO1lBRUwsK0JBQXVCO1lBd0JyQixBQU5BLEFBWEEsQUFOQSxtRUFBa0csdURBTS9CLHNEQVcyQyxzREFNZjtZQVluRyxBQURFLGlCQUFLLEVBQ0Q7WUFNRixBQUZGLEFBREYsZ0NBQXFDLGVBQzRCLGVBRVA7WUFDcEQsaUNBQStCO1lBQ2pDLGlCQUFNO1lBR04sZ0NBQXVEO1lBQ3JELGtDQUFpQztZQUNuQyxpQkFBTTtZQUtGLEFBREYsQUFERixnQ0FBNEQsZUFDNEMsZUFDbkU7WUFDL0IsdUNBQWlEO1lBSXpELEFBREUsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRixFQUNGO1lBTUEsQUFERixBQURGLEFBRkYsZ0NBQTZGLGVBRWxDLGVBQzRDLGFBY2hHOztZQVhDLDBGQUFTLFlBQVEsY0FBYyxDQUFDLElBQUM7WUFZakMseUJBQW1EO1lBQ3JELGlCQUFJO1lBQ0osOEJBYUM7O1lBWEMsMEZBQVMsWUFBUSxVQUFVLENBQUMsSUFBQztZQVk3Qix5QkFBc0Q7WUFDeEQsaUJBQUk7WUFDSiw4QkFhQzs7WUFYQywwRkFBUyxZQUFRLFNBQVMsQ0FBQyxJQUFDO1lBWTVCLHlCQUFvRDtZQUN0RCxpQkFBSTtZQUNKLDhCQWNDOztZQVpDLDBGQUFTLFlBQVEsVUFBVSxDQUFDLElBQUM7WUFhN0IseUJBQWtEO1lBR3hELEFBREUsQUFERSxpQkFBSSxFQUNBLEVBQ0Y7WUFPRSxBQURGLEFBREYsQUFGRixBQURGLGdDQUF1RixlQUM5RCxlQUVPLGVBQzZCLGVBQzZCO1lBQ2hGLDhDQUF5RDtZQUMzRCxpQkFBTTtZQUNOLGdDQUF1RTtZQUNyRSwyQ0FBbUQ7WUFDckQsaUJBQU07WUFDTixnQ0FBdUc7WUFDckcsa0NBQWlDO1lBQ25DLGlCQUFNO1lBQ04sZ0NBQXFHO1lBQ25HLDRDQUFxRDtZQUsvRCxBQURFLEFBREUsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRixFQUNGLEVBQ0Y7WUFHTixnQ0FBd0Q7WUFDdEQsbUNBQW1DO1lBQ3JDLGlCQUFNO1lBR04sZ0NBQTREO1lBQzFELHlDQUErQztZQUVuRCxBQURFLGlCQUFNLEVBQ0Y7WUFHTixnQ0FBNEY7WUFDMUYsb0NBQXFDO1lBRXpDLEFBREUsaUJBQU0sRUFDRjtZQUlKLEFBREYsZ0NBQTJCLFlBQ3BCO1lBQ0gsMENBQStDO1lBQ2pELGlCQUFNO1lBRU4saUNBQWtCO1lBQ2hCLGtDQUErQjtZQUdyQyxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGO1lBRU4sc0NBQXdEOztZQTdQckMscUdBQWtFO1lBVTNFLGVBQ0Y7WUFERSxxRkFDRjtZQUcyRCxlQUFtRDtZQUFuRCx5RkFBbUQ7WUFHNUMsZUFBb0Q7WUFBcEQsMEZBQW9EO1lBR3pELGVBQW9EO1lBQXBELDBGQUFvRDtZQUdwRCxlQUF1RDtZQUF2RCw2RkFBdUQ7WUFHdkQsZUFBc0Q7WUFBdEQsNEZBQXNEO1lBR2pELGVBQXNEO1lBQXRELDRGQUFzRDtZQWF0SCxlQUNGO1lBREUsdUZBQ0Y7WUFFeUUsZUFBb0Q7WUFBcEQsZ0ZBQW9EO1lBYTNILGVBQ0Y7WUFERSxtRkFDRjtZQUU0RSxlQUFtRDtZQUFuRCwrRUFBbUQ7WUFDN0MsZUFFOUU7WUFGOEUsMkVBRTlFO1lBTUQsZUFBa0M7WUFBbEMsdURBQWtDO1lBTWxDLGNBQWtDO1lBQWxDLHVEQUFrQztZQVdsQyxjQUErRDtZQUEvRCx3RkFBK0Q7WUFNL0QsY0FBOEQ7WUFBOUQsdUZBQThEO1lBNkJ4QixlQUE0RDtZQUE1RCx5RUFBNEQ7WUFnQmpHLGVBQXdEO1lBQXhELHlGQUF3RDtZQWdCeEQsZUFBb0Q7WUFBcEQscUZBQW9EO1lBZ0JwRCxlQUFtRDtZQUFuRCxvRkFBbUQ7WUFnQm5ELGVBQW9EO1lBQXBELHFGQUFvRDs7O2lGRDlKbkQsaUJBQWlCO2NBTjdCLFNBQVM7MkJBQ0UsY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJOzZlQUlqQyxZQUFZO2tCQURmLEtBQUs7WUFPRiw2QkFBNkI7a0JBRGhDLEtBQUs7WUFNRixPQUFPO2tCQURWLEtBQUs7WUFNRixrQkFBa0I7a0JBRHJCLEtBQUs7WUFNRixjQUFjO2tCQURqQixLQUFLO1lBTUYsY0FBYztrQkFEakIsS0FBSztZQU1GLGNBQWM7a0JBRGpCLEtBQUs7WUFNRixrQkFBa0I7a0JBRHJCLEtBQUs7WUFNRixXQUFXO2tCQURkLEtBQUs7WUFNRixhQUFhO2tCQURoQixLQUFLO1lBTUYsS0FBSztrQkFEUixLQUFLO1lBT0Ysa0JBQWtCO2tCQURyQixLQUFLO1lBZU4sZ0JBQWdCO2tCQURmLFNBQVM7bUJBQUMsZ0JBQWdCO1lBSTNCLGlCQUFpQjtrQkFEaEIsU0FBUzttQkFBQyxpQkFBaUI7WUE2TzVCLG1CQUFtQjtrQkFEbEIsWUFBWTttQkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBdlRqQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBTcGxpdCBmcm9tICdzcGxpdC5qcyc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9wcmV2aWV3L3ByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3QtYnJvd3Nlci9wcm9qZWN0LWJyb3dzZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RJbXBvcnRDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1pbXBvcnQvcHJvamVjdC1pbXBvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RTYXZlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3Qtc2F2ZS9wcm9qZWN0LXNhdmUuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RTaGFyZUNvbXBvbmVudCB9IGZyb20gJy4vcHJvamVjdC9wcm9qZWN0LXNoYXJlL3Byb2plY3Qtc2hhcmUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXJyb3ItZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZVBvb2xTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maXh0dXJlLXBvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ob3RrZXktdGFyZ2V0LWV4Y2x1ZGUuc2VydmljZSc7XG5pbXBvcnQgeyBJbnRyb1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdExvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm9qZWN0LWxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRpbWVsaW5lU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRW5zdXJlTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLWVuc3VyZS1sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FybmluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3dhcm5pbmctZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVDb21wb25lbnQgfSBmcm9tICcuL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyUmVnaXN0ZXJDb21wb25lbnQgfSBmcm9tICcuL3VzZXIvdXNlci1yZWdpc3Rlci91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kZXNpZ25lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXNpZ25lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rlc2lnbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgc2V0IG1lbnVIZWlnaHRQeCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnVIZWlnaHRQeCA9IHZhbHVlO1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW51SGVpZ2h0Q2hhbmdlZC5uZXh0KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZXh0ZXJuYWxDb21wb3NpdGlvbnNBdmFpbGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRpbWVsaW5lU2VydmljZS5leHRlcm5hbENvbXBvc2l0aW9uc0F2YWlsYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlc3RVcmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5yZXN0VXJsID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZW5hYmxlTWVkaWFMaWJyYXJ5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmVuYWJsZU1lZGlhTGlicmFyeSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxvZ2luQXZhaWxhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxvZ2luQXZhaWxhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc2hhcmVBdmFpbGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2Uuc2hhcmVBdmFpbGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsYW5ndWFnZVN3aXRjaCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5sYW5ndWFnZVN3aXRjaCA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG5ld1Byb2plY3RUZW1wbGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5uZXdQcm9qZWN0VGVtcGxhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsaXZlUHJldmlldyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsUHJvZmlsZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubG9jYWxQcm9maWxlcyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGludHJvKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmludHJvID0gdmFsdWU7XG4gICAgdGhpcy5pbnRyb1NlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHVuaXF1ZVByb2plY3ROYW1lcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS51bmlxdWVQcm9qZWN0TmFtZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBtZW51IHVzZWQgaW4gdGhlIGRlc2lnbmVyXG4gIHByaXZhdGUgZGVzaWduZXJNZW51U2l6ZVB4ID0gMjA7XG5cbiAgcHJpdmF0ZSBzcGxpdEd1dHRlclNpemVQeCA9IDEzO1xuXG4gIHB1YmxpYyB0b3RhbE1lbnVIZWlnaHRQeCA9IDA7XG5cbiAgY3VycmVudFRhYiA9ICdwcm9wZXJ0aWVzJztcblxuICBAVmlld0NoaWxkKFByZXZpZXdDb21wb25lbnQpXG4gIHByZXZpZXdDb21wb25lbnQ6IFByZXZpZXdDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChUaW1lbGluZUNvbXBvbmVudClcbiAgdGltZWxpbmVDb21wb25lbnQ6IFRpbWVsaW5lQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGZpeHR1cmVQb29sU2VydmljZTogRml4dHVyZVBvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2U6IEhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlckVuc3VyZUxvZ2luU2VydmljZTogVXNlckVuc3VyZUxvZ2luU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0TG9hZFNlcnZpY2U6IFByb2plY3RMb2FkU2VydmljZSxcbiAgICBwcml2YXRlIHdhcm5pbmdEaWFsb2dTZXJ2aWNlOiBXYXJuaW5nRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yRGlhbG9nU2VydmljZTogRXJyb3JEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBUaW1lbGluZVNlcnZpY2UsXG4gICAgcHVibGljIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW51SGVpZ2h0Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjVG90YWxNZW51SGVpZ2h0KCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKCdlbicpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsY1RvdGFsTWVudUhlaWdodCgpO1xuXG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBjb25zdCBwcm9qZWN0SWQgPSB1cmxQYXJhbXMuZ2V0KCdpZCcpO1xuICAgIGNvbnN0IHByb2plY3ROYW1lID0gdXJsUGFyYW1zLmdldCgnbmFtZScpO1xuICAgIGxldCBzaGFyZVRva2VuID0gdXJsUGFyYW1zLmdldCgndG9rZW4nKTtcblxuICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgIC8vIGxvYWQgYSBwcm9qZWN0IGJ5IHF1ZXJ5IHBhcmFtIElEXG4gICAgICBpZiAoIXNoYXJlVG9rZW4pIHtcbiAgICAgICAgc2hhcmVUb2tlbiA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5sb2FkKE51bWJlci5wYXJzZUludChwcm9qZWN0SWQsIDEwKSwgcHJvamVjdE5hbWUsIHNoYXJlVG9rZW4pLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGxldCBlcnJvciA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yID8gcmVzcG9uc2UuZXJyb3IuZXJyb3IgOiAndW5rbm93bic7XG5cbiAgICAgICAgICBsZXQgbXNnID0gJyc7XG5cbiAgICAgICAgICBpZiAoZXJyb3IgPT09ICduby1wZXJtaXNzaW9uJykge1xuICAgICAgICAgICAgbXNnID0gJ2Rlc2lnbmVyLnByb2plY3Qub3Blbi1uby1wZXJtaXNzaW9uLWVycm9yJztcbiAgICAgICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSAnZGVzaWduZXIucHJvamVjdC5vcGVuLWVycm9yJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmVycm9yRGlhbG9nU2VydmljZS5zaG93KG1zZywgZXJyb3IpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5uZXcoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKHRoaXMudXNlclNlcnZpY2UuaXNMb2dnZWRJbigpIHx8ICF0aGlzLmNvbmZpZ1NlcnZpY2UubG9naW5BdmFpbGFibGUpICYmXG4gICAgICAodGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3RJZCgpIHx8IHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0TmFtZSgpKVxuICAgICkge1xuICAgICAgLy8gcmVzdG9yZSB0aGUgbGFzdCBzYXZlZCBwcm9qZWN0XG4gICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5sb2FkKHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0SWQoKSwgdGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3ROYW1lKCkpLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tZXJyb3InO1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IgPyByZXNwb25zZS5lcnJvci5lcnJvciA6ICd1bmtub3duJztcblxuICAgICAgICAgIHRoaXMuZXJyb3JEaWFsb2dTZXJ2aWNlLnNob3cobXNnLCBlcnJvcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLm5ld1Byb2plY3RUZW1wbGF0ZSkge1xuICAgICAgICAvLyBsb2FkIHRoZSBuZXcgcHJvamVjdCB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS50ZW1wbGF0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubmV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjVG90YWxNZW51SGVpZ2h0KCkge1xuICAgIHRoaXMudG90YWxNZW51SGVpZ2h0UHggPSB0aGlzLmRlc2lnbmVyTWVudVNpemVQeCArIHRoaXMuc3BsaXRHdXR0ZXJTaXplUHggKyB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodFB4O1xuICB9XG5cbiAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5wcmV2aWV3Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnByZXZpZXdDb21wb25lbnQub25SZXNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aW1lbGluZUNvbXBvbmVudCkge1xuICAgICAgdGhpcy50aW1lbGluZUNvbXBvbmVudC5vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXAgdGhlIHNwbGl0dGVyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBTcGxpdChbJyNyb3cxJywgJyNyb3cyJywgJyNyb3czJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs0MiwgMzgsIDIwXSxcbiAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLFxuICAgICAgICBjdXJzb3I6ICdyb3ctcmVzaXplJyxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjc2NlbmVzJywgJyNwcmVzZXRzJywgJyNwcmV2aWV3J10sIHtcbiAgICAgICAgc2l6ZXM6IFsxNSwgMTUsIDcwXSxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjY2FwYWJpbGl0aWVzJywgJyNmaXh0dXJlcycsICcjbWFzdGVyRGltbWVyJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs3NCwgMTgsIDhdLFxuICAgICAgICBzbmFwT2Zmc2V0OiAwLFxuICAgICAgICBndXR0ZXJTaXplOiB0aGlzLnNwbGl0R3V0dGVyU2l6ZVB4LFxuICAgICAgICBvbkRyYWc6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcbiAgICAgICAgbWluU2l6ZTogNTAsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblRhYih0YWI6IHN0cmluZykge1xuICAgIC8vIG9wZW4gYSBzaWRlIHRhYiAoZS5nLiBlZmZlY3RzLCBjaGFubmVscywgc2V0dGluZ3MsIGV0Yy4pXG5cbiAgICBpZiAodGFiID09PSAnc2V0dGluZ3MnKSB7XG4gICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgfVxuXG4gIG9wZW5GaXh0dXJlUG9vbCgpIHtcbiAgICB0aGlzLmZpeHR1cmVQb29sU2VydmljZS5vcGVuKCk7XG4gIH1cblxuICBwcm9qZWN0TmV3KCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb2plY3RPcGVuKCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckVuc3VyZUxvZ2luU2VydmljZS5sb2dpbigpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdEJyb3dzZXJDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvamVjdFNhdmUoKSB7XG4gICAgaWYgKHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5uYW1lKSB7XG4gICAgICAvLyB0aGlzIHByb2plY3QgaGFzIGJlZW4gc2F2ZWQgYmVmb3JlIC0+IGp1c3Qgc2F2ZSBpdCBhZ2FpblxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5zYXZlKHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgcHJvamVjdCBoYXMgbm90IHlldCBiZWVuIHNhdmVkIC0+IHNob3cgdGhlIHNhdmUgYXMtZGlhbG9nXG4gICAgICB0aGlzLnVzZXJFbnN1cmVMb2dpblNlcnZpY2UubG9naW4oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RTYXZlQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb2plY3RTYXZlQXMoKSB7XG4gICAgdGhpcy51c2VyRW5zdXJlTG9naW5TZXJ2aWNlLmxvZ2luKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNhdmVDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdXNlclJlZ2lzdGVyKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coVXNlclJlZ2lzdGVyQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHByb2plY3RJbXBvcnQoKSB7XG4gICAgdGhpcy53YXJuaW5nRGlhbG9nU2VydmljZVxuICAgICAgLnNob3coJ2Rlc2lnbmVyLm1pc2Mud2FybmluZy1wcm9jZWVkLXVuc2F2ZWQnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhQcm9qZWN0SW1wb3J0Q29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm9qZWN0RXhwb3J0KCkge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QsIG51bGwsIDIpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KGpzb24pKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QubmFtZSArICcucnNkJyk7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICBwcm9qZWN0U2hhcmUoKSB7XG4gICAgaWYgKCF0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuaWQpIHtcbiAgICAgIC8vIGEgc2F2ZSBpcyByZXF1aXJlZCBmaXJzdFxuICAgICAgdGhpcy5lcnJvckRpYWxvZ1NlcnZpY2Uuc2hvdygnZGVzaWduZXIucHJvamVjdC5zaGFyZS1uby1zYXZlJykuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGJhY2tkcm9wIGNsaWNrLCBiZWNhdXNlIHNlbGVjdGluZyB0aGUgbGluayB0ZXh0IHdpbGwgYWxzbyBjbG9zZSB0aGUgbW9kYWxcbiAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RTaGFyZUNvbXBvbmVudCwgeyBrZXlib2FyZDogdHJ1ZSwgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ob3RrZXlUYXJnZXRFeGNsdWRlU2VydmljZS5leGNsdWRlKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdwJykge1xuICAgICAgdGhpcy5vcGVuRml4dHVyZVBvb2woKTtcblxuICAgICAgLy8gcHJldmVudCBjaGVja2JveGVzIGJlaW5nIHRvZ2dsZWQsIGlmIGluIGZvY3VzIGUuZy5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnbicpIHtcbiAgICAgIHRoaXMucHJvamVjdE5ldygpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgdGhpcy5wcm9qZWN0U2F2ZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdvJykge1xuICAgICAgdGhpcy5wcm9qZWN0T3BlbigpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmd1YWdlKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFuZ3VhZ2UnLCBsYW5ndWFnZSk7XG4gIH1cbn1cbiIsIjwhLS0gV3JhcCB0aGUgd2hvbGUgY29tcG9uZW50IGluc2lkZSBhIGRpdiB0byBlbmNhcHN1bGF0ZSB0aGUgQ1NTIC0tPlxuXG48IS0tIDEwMCAlIGhlaWdodCBtaW51cyB0aGUgbWVudSBiYXIgYWJvdmUgYW5kIHRoZSBndXR0ZXIgc2l6ZSBvZiAxMyBweCAtLT5cbjwhLS0gPGRpdiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMzNweClcIj4gLS0+XG48ZGl2IGlkPVwiZGVzaWduZXJcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogJ2NhbGMoMTAwJSAtICcgKyB0b3RhbE1lbnVIZWlnaHRQeCArICdweCknIH1cIj5cbiAgPCEtLSBOYXZpZ2F0aW9uIC0tPlxuICA8bmF2XG4gICAgY2xhc3M9XCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBuYXZiYXItbGlnaHQgYmctbGlnaHQgYm9yZGVyLXNlY29uZGFyeVwiXG4gICAgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQ0NDsgaGVpZ2h0OiAyMHB4OyB6LWluZGV4OiA5OTk5XCJcbiAgPlxuICAgIDwhLS0gTWVudSBidXR0b25zIC0tPlxuICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXYgbXItYXV0b1wiPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd25cIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBocmVmPVwiI1wiIGlkPVwiZmlsZURyb3Bkb3duXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImZpbGVEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLW5vbmUgZC1tZC1ibG9ja1wiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInByb2plY3ROZXcoKTsgKGZhbHNlKVwiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1maWxlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3QtbmV3JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0T3BlbigpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWZvbGRlci1vcGVuLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3Qtb3BlbicgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtbm9uZSBkLW1kLWJsb2NrXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwicHJvamVjdFNhdmUoKTsgKGZhbHNlKVwiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1mbG9wcHktb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1zYXZlJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0U2F2ZUFzKCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZmxvcHB5LW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3Qtc2F2ZS1hcycgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtbm9uZSBkLW1kLWJsb2NrXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwicHJvamVjdEltcG9ydCgpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0LWltcG9ydCcgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtbm9uZSBkLW1kLWJsb2NrXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwicHJvamVjdEV4cG9ydCgpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWV4dGVybmFsLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3QtZXhwb3J0JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtYmxvY2tcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgIGlkPVwic2V0dGluZ3NEcm9wZG93blwiXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5zZXR0aW5ncycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cInNldHRpbmdzRHJvcGRvd25cIj5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJvcGVuRml4dHVyZVBvb2woKTsgKGZhbHNlKVwiPnt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLmZpeHR1cmUtcG9vbCcgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgICAgICAgPCEtLSA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPnt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnN0YWdlJyB8IHRyYW5zbGF0ZSB9fTwvYT4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGRyb3Bkb3duIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICBpZD1cInNldHRpbmdzRHJvcGRvd25cIlxuICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24uaGVscCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cInNldHRpbmdzRHJvcGRvd25cIj5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJpbnRyb1NlcnZpY2UucmVzZXQoKTsgKGZhbHNlKVwiPnt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnJlc2V0LWludHJvJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiaHR0cHM6Ly9yb2NrZXRzaG93Lm5ldC9zdXBwb3J0L1wiIHRhcmdldD1cIl9ibGFua1wiPnt7XG4gICAgICAgICAgICAnZGVzaWduZXIubmF2aWdhdGlvbi5zdXBwb3J0JyB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cblxuICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXZcIj5cbiAgICAgIDxsaSAqbmdJZj1cImNvbmZpZ1NlcnZpY2Uuc2hhcmVBdmFpbGFibGVcIiBjbGFzcz1cIm5hdi1pdGVtIGQtbm9uZSBkLW1kLWZsZXhcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCI+XG4gICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInByb2plY3RTaGFyZSgpOyAoZmFsc2UpXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXG4gICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtc2hhcmUtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0LXNoYXJlJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICA+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bGkgKm5nSWY9XCJjb25maWdTZXJ2aWNlLmxhbmd1YWdlU3dpdGNoXCIgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgaWQ9XCJzZXR0aW5nc0Ryb3Bkb3duXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1nbG9iZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubWlzYy5sYW5ndWFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3NEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInN3aXRjaExhbmd1YWdlKCdlbicpOyAoZmFsc2UpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RW5nbGlzaDwvYT5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJzd2l0Y2hMYW5ndWFnZSgnZGUnKTsgKGZhbHNlKVwiIHRhcmdldD1cIl9ibGFua1wiPkRldXRzY2g8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cblxuICAgICAgPGxpICpuZ0lmPVwiY29uZmlnU2VydmljZS5sb2dpbkF2YWlsYWJsZSAmJiAhdXNlclNlcnZpY2UuaXNMb2dnZWRJbigpXCIgY2xhc3M9XCJuYXYtaXRlbVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIChjbGljayk9XCJ1c2VyUmVnaXN0ZXIoKTsgKGZhbHNlKVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxuICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLXVzZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLmxvZ2luJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICA+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bGkgKm5nSWY9XCJjb25maWdTZXJ2aWNlLmxvZ2luQXZhaWxhYmxlICYmIHVzZXJTZXJ2aWNlLmlzTG9nZ2VkSW4oKVwiIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd25cIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBocmVmPVwiI1wiIGlkPVwic2V0dGluZ3NEcm9wZG93blwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICB7eyB1c2VyU2VydmljZS51c2VybmFtZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZXR0aW5nc0Ryb3Bkb3duXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwidXNlclNlcnZpY2UubG9nb3V0KCk7IChmYWxzZSlcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLmxvZ291dCcgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25hdj5cblxuICA8IS0tIFRoZSBtYWluIGNvbnRlbnQgZm9yIGxhcmdlciBzY3JlZW5zIC0tPlxuICA8ZGl2IGNsYXNzPVwiaC0xMDAgZC1ub25lIGQtbWQtYmxvY2tcIj5cbiAgICA8ZGl2IGlkPVwicm93MVwiIGNsYXNzPVwic3BsaXQgc3BsaXQtdmVydGljYWwgY2xlYXJmaXggcHQtMyBwbC0zXCI+XG4gICAgICA8IS0tIFNjZW5lcyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJzY2VuZXNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtc2NlbmU+PC9saWItYXBwLXNjZW5lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUHJlc2V0cyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJwcmVzZXRzXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC1ob3Jpem9udGFsIGgtMTAwXCI+XG4gICAgICAgIDxsaWItYXBwLXByZXNldD48L2xpYi1hcHAtcHJlc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gM0QgcHJldmlldyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJwcmV2aWV3XCIgY2xhc3M9XCJzcGxpdCBzcGxpdC1ob3Jpem9udGFsIGgtMTAwIHByLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiIFtjbGFzcy5jYXJkLWludHJvLWFjdGl2ZV09XCJpbnRyb1NlcnZpY2Uuc2hvd1N0ZXAoJ3ByZXZpZXcnKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8bGliLWFwcC1wcmV2aWV3IGNsYXNzPVwiaC0xMDBcIj48L2xpYi1hcHAtcHJldmlldz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJyb3cyXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC12ZXJ0aWNhbCBjbGVhcmZpeCBweC0zIGQtZmxleFwiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiPlxuICAgICAgPCEtLSBNZW51IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMXB4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgZmxleC1jb2x1bW4gbmF2LXBpbGxzXCIgaWQ9XCJ2LXBpbGxzLXRhYlwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1vcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtMyBhY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2NhcGFiaWxpdGllcycpXCJcbiAgICAgICAgICAgIGlkPVwidi1waWxscy1jYXBhYmlsaXRpZXMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jYXBhYmlsaXRpZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwidi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYm9sdCBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtM1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblRhYignY2hhbm5lbHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtY2hhbm5lbHMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jaGFubmVscycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXI6bW91c2VsZWF2ZVwiXG4gICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBpbGxcIlxuICAgICAgICAgICAgaHJlZj1cIiN2LXBpbGxzLWNoYW5uZWxzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtY2hhbm5lbHNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNsaWRlcnMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2VmZmVjdHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtZWZmZWN0cy10YWJcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdkZXNpZ25lci5taXNjLmVmZmVjdHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1lZmZlY3RzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtZWZmZWN0c1wiXG4gICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFnaWMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ3NldHRpbmdzJylcIlxuICAgICAgICAgICAgaWQ9XCJ2LXBpbGxzLXNldHRpbmdzLXRhYlwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgJ2Rlc2lnbmVyLm1pc2Muc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1zZXR0aW5nc1wiXG4gICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJ2LXBpbGxzLXNldHRpbmdzXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjNDQ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZyBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgaWQ9XCJjYXBhYmlsaXRpZXNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMXJlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGgtMTAwXCI+XG4gICAgICAgICAgPCEtLSBDb250ZW50IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBwbC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgaC0xMDBcIiBpZD1cInYtcGlsbHMtdGFiQ29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvdyBhY3RpdmVcIiBpZD1cInYtcGlsbHMtY2FwYWJpbGl0aWVzXCIgcm9sZT1cInRhYnBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5PjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHk+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvd1wiIGlkPVwidi1waWxscy1jaGFubmVsc1wiIHJvbGU9XCJ0YWJwYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2hhbm5lbD48L2xpYi1hcHAtZml4dHVyZS1jaGFubmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGgtMTAwXCIgaWQ9XCJ2LXBpbGxzLWVmZmVjdHNcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLXByb2ZpbGUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZWZmZWN0PjwvbGliLWFwcC1lZmZlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDBcIiBpZD1cInYtcGlsbHMtc2V0dGluZ3NcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLWhvbWUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz48L2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlc1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtaG9yaXpvbnRhbCBoLTEwMFwiPlxuICAgICAgICA8bGliLWFwcC1maXh0dXJlPjwvbGliLWFwcC1maXh0dXJlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTWFzdGVyIGRpbW1lciAtLT5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXJEaW1tZXJcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtbWFzdGVyLWRpbW1lcj48L2xpYi1hcHAtbWFzdGVyLWRpbW1lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lbGluZSAtLT5cbiAgICA8ZGl2IGlkPVwicm93M1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtdmVydGljYWwgY2xlYXJmaXggcHgtMyBwYi0zXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMjBweFwiPlxuICAgICAgPGxpYi1hcHAtdGltZWxpbmU+PC9saWItYXBwLXRpbWVsaW5lPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRoZSBjb21wb25lbnRzIGZvciBzbWFsbCBzY3JlZW5zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZC1tZC1ub25lIHAtM1wiPlxuICAgIDxkaXY+XG4gICAgICA8bGliLWFwcC1tYXN0ZXItZGltbWVyPjwvbGliLWFwcC1tYXN0ZXItZGltbWVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgIDxsaWItYXBwLXNjZW5lPjwvbGliLWFwcC1zY2VuZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGxpYi1hcHAtaW50cm8gY2xhc3M9XCJkLW5vbmUgZC1tZC1mbGV4XCI+PC9saWItYXBwLWludHJvPlxuIl19