angular-three-soba 2.0.0-beta.9 → 2.1.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 (425) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +279 -2
  3. package/abstractions/index.d.ts +13 -6
  4. package/abstractions/lib/billboard.d.ts +19 -0
  5. package/abstractions/lib/catmull-rom-line.d.ts +617 -0
  6. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  7. package/abstractions/lib/edges.d.ts +800 -0
  8. package/abstractions/lib/gradient-texture.d.ts +24 -0
  9. package/abstractions/lib/grid.d.ts +315 -0
  10. package/abstractions/lib/helper.d.ts +25 -0
  11. package/abstractions/lib/line.d.ts +41 -0
  12. package/abstractions/lib/prism-geometry.d.ts +32 -0
  13. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  14. package/abstractions/lib/rounded-box.d.ts +41 -0
  15. package/abstractions/lib/text-3d.d.ts +314 -0
  16. package/abstractions/lib/text.d.ts +54 -0
  17. package/cameras/README.md +91 -2
  18. package/cameras/index.d.ts +4 -4
  19. package/cameras/lib/camera-content.d.ts +10 -0
  20. package/cameras/lib/cube-camera.d.ts +38 -0
  21. package/cameras/lib/orthographic-camera.d.ts +40 -0
  22. package/cameras/lib/perspective-camera.d.ts +36 -0
  23. package/controls/README.md +96 -2
  24. package/controls/index.d.ts +4 -1
  25. package/controls/lib/camera-controls.d.ts +31 -0
  26. package/controls/lib/orbit-controls.d.ts +38 -0
  27. package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
  28. package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
  29. package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
  30. package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
  31. package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
  32. package/controls/lib/scroll-controls.d.ts +78 -0
  33. package/esm2022/abstractions/index.mjs +14 -7
  34. package/esm2022/abstractions/lib/billboard.mjs +69 -0
  35. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  36. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  37. package/esm2022/abstractions/lib/edges.mjs +70 -0
  38. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  39. package/esm2022/abstractions/lib/grid.mjs +103 -0
  40. package/esm2022/abstractions/lib/helper.mjs +76 -0
  41. package/esm2022/abstractions/lib/line.mjs +126 -0
  42. package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
  43. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  44. package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
  45. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  46. package/esm2022/abstractions/lib/text.mjs +91 -0
  47. package/esm2022/cameras/index.mjs +5 -5
  48. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  49. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  50. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  51. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  52. package/esm2022/controls/index.mjs +5 -2
  53. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  54. package/esm2022/controls/lib/orbit-controls.mjs +132 -0
  55. package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
  56. package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
  57. package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
  58. package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
  59. package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
  60. package/esm2022/controls/lib/scroll-controls.mjs +268 -0
  61. package/esm2022/loaders/index.mjs +6 -5
  62. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  63. package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
  64. package/esm2022/loaders/lib/loader.mjs +109 -0
  65. package/esm2022/loaders/lib/progress.mjs +51 -0
  66. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  67. package/esm2022/materials/index.mjs +8 -7
  68. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  69. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  70. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  71. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  72. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  73. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  74. package/esm2022/materials/lib/point-material.mjs +33 -0
  75. package/esm2022/misc/index.mjs +14 -14
  76. package/esm2022/misc/lib/animations.mjs +71 -0
  77. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  78. package/esm2022/misc/lib/computed-attribute.mjs +55 -0
  79. package/esm2022/misc/lib/constants.mjs +5 -0
  80. package/esm2022/misc/lib/decal.mjs +139 -0
  81. package/esm2022/misc/lib/deprecated.mjs +15 -0
  82. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  83. package/esm2022/misc/lib/fbo.mjs +86 -0
  84. package/esm2022/misc/lib/html/html-content.mjs +327 -0
  85. package/esm2022/misc/lib/html/html.mjs +129 -0
  86. package/esm2022/misc/lib/html/utils.mjs +74 -0
  87. package/esm2022/misc/lib/intersect.mjs +52 -0
  88. package/esm2022/misc/lib/sampler.mjs +122 -0
  89. package/esm2022/misc/lib/scale-factor.mjs +29 -0
  90. package/esm2022/performances/index.mjs +7 -6
  91. package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
  92. package/esm2022/performances/lib/adaptive-events.mjs +28 -0
  93. package/esm2022/performances/lib/detailed.mjs +57 -0
  94. package/esm2022/performances/lib/instances/instances.mjs +183 -0
  95. package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
  96. package/esm2022/performances/lib/points/points.mjs +278 -0
  97. package/esm2022/performances/lib/points/position-point.mjs +53 -0
  98. package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
  99. package/esm2022/performances/lib/segments/segments.mjs +129 -0
  100. package/esm2022/shaders/index.mjs +4 -18
  101. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  102. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  103. package/esm2022/shaders/lib/point-material.mjs +24 -0
  104. package/esm2022/staging/index.mjs +20 -22
  105. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  106. package/esm2022/staging/lib/backdrop.mjs +73 -0
  107. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  108. package/esm2022/staging/lib/bounds.mjs +286 -0
  109. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  110. package/esm2022/staging/lib/caustics.mjs +188 -0
  111. package/esm2022/staging/lib/center.mjs +118 -0
  112. package/esm2022/staging/lib/contact-shadows.mjs +214 -0
  113. package/esm2022/staging/lib/environment.mjs +481 -0
  114. package/esm2022/staging/lib/float.mjs +70 -0
  115. package/esm2022/staging/lib/lightformer.mjs +107 -0
  116. package/esm2022/staging/lib/mask.mjs +78 -0
  117. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  118. package/esm2022/staging/lib/normal-texture.mjs +81 -0
  119. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  120. package/esm2022/staging/lib/render-texture.mjs +203 -0
  121. package/esm2022/staging/lib/sky.mjs +86 -0
  122. package/esm2022/staging/lib/spot-light.mjs +453 -0
  123. package/esm2022/staging/lib/stage.mjs +236 -0
  124. package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
  125. package/esm2022/stats/index.mjs +2 -0
  126. package/esm2022/stats/lib/stats.mjs +63 -0
  127. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  128. package/esm2022/vanilla-exports/index.mjs +3 -0
  129. package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
  130. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  131. package/fesm2022/angular-three-soba-cameras.mjs +261 -308
  132. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  133. package/fesm2022/angular-three-soba-controls.mjs +1776 -109
  134. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  135. package/fesm2022/angular-three-soba-loaders.mjs +191 -145
  136. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  137. package/fesm2022/angular-three-soba-materials.mjs +527 -748
  138. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  139. package/fesm2022/angular-three-soba-misc.mjs +783 -1935
  140. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  141. package/fesm2022/angular-three-soba-performances.mjs +591 -475
  142. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  143. package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
  144. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  145. package/fesm2022/angular-three-soba-staging.mjs +2421 -3521
  146. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  147. package/fesm2022/angular-three-soba-stats.mjs +70 -0
  148. package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  150. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  151. package/loaders/README.md +130 -2
  152. package/loaders/index.d.ts +5 -4
  153. package/loaders/lib/font-loader.d.ts +27 -0
  154. package/loaders/lib/gltf-loader.d.ts +24 -0
  155. package/loaders/lib/loader.d.ts +29 -0
  156. package/loaders/lib/progress.d.ts +9 -0
  157. package/loaders/lib/texture-loader.d.ts +13 -0
  158. package/materials/README.md +160 -2
  159. package/materials/index.d.ts +7 -6
  160. package/materials/lib/custom-shader-material.d.ts +20 -0
  161. package/materials/lib/mesh-distort-material.d.ts +17 -0
  162. package/materials/lib/mesh-reflector-material.d.ts +51 -0
  163. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  164. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  165. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  166. package/materials/lib/point-material.d.ts +11 -0
  167. package/metadata.json +1 -1
  168. package/misc/README.md +217 -2
  169. package/misc/index.d.ts +13 -13
  170. package/misc/lib/animations.d.ts +17 -0
  171. package/misc/lib/computed-attribute.d.ts +64 -0
  172. package/misc/lib/constants.d.ts +1 -0
  173. package/misc/lib/decal.d.ts +27 -0
  174. package/misc/lib/deprecated.d.ts +14 -0
  175. package/misc/lib/depth-buffer.d.ts +8 -0
  176. package/misc/lib/fbo.d.ts +46 -0
  177. package/misc/lib/html/html-content.d.ts +47 -0
  178. package/misc/lib/html/html.d.ts +30 -0
  179. package/misc/lib/html/utils.d.ts +14 -0
  180. package/misc/lib/intersect.d.ts +13 -0
  181. package/misc/lib/sampler.d.ts +73 -0
  182. package/misc/lib/scale-factor.d.ts +3 -0
  183. package/package.json +90 -50
  184. package/performances/index.d.ts +6 -5
  185. package/performances/lib/adaptive-dpr.d.ts +7 -0
  186. package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
  187. package/performances/lib/detailed.d.ts +17 -0
  188. package/performances/lib/instances/instances.d.ts +122 -0
  189. package/performances/lib/instances/position-mesh.d.ts +20 -0
  190. package/performances/lib/points/points.d.ts +224 -0
  191. package/performances/lib/points/position-point.d.ts +21 -0
  192. package/performances/lib/segments/segment-object.d.ts +17 -0
  193. package/performances/lib/segments/segments.d.ts +97 -0
  194. package/shaders/index.d.ts +3 -17
  195. package/shaders/lib/grid-material.d.ts +69 -0
  196. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  197. package/shaders/lib/point-material.d.ts +14 -0
  198. package/staging/README.md +473 -2
  199. package/staging/index.d.ts +19 -21
  200. package/staging/lib/accumulative-shadows.d.ts +75 -0
  201. package/staging/lib/backdrop.d.ts +22 -0
  202. package/staging/lib/bb-anchor.d.ts +17 -0
  203. package/staging/lib/bounds.d.ts +47 -0
  204. package/staging/lib/camera-shake.d.ts +29 -0
  205. package/staging/lib/caustics.d.ts +53 -0
  206. package/staging/lib/center.d.ts +390 -0
  207. package/staging/lib/contact-shadows.d.ts +55 -0
  208. package/staging/lib/environment.d.ts +132 -0
  209. package/staging/lib/float.d.ts +20 -0
  210. package/staging/lib/lightformer.d.ts +310 -0
  211. package/staging/lib/mask.d.ts +30 -0
  212. package/staging/lib/matcap-texture.d.ts +32 -0
  213. package/staging/lib/normal-texture.d.ts +37 -0
  214. package/staging/lib/randomized-lights.d.ts +54 -0
  215. package/staging/lib/render-texture.d.ts +64 -0
  216. package/staging/lib/sky.d.ts +32 -0
  217. package/staging/lib/spot-light.d.ts +119 -0
  218. package/staging/lib/stage.d.ts +352 -0
  219. package/stats/README.md +3 -0
  220. package/stats/index.d.ts +1 -0
  221. package/stats/lib/stats.d.ts +14 -0
  222. package/vanilla-exports/README.md +3 -0
  223. package/vanilla-exports/index.d.ts +27 -0
  224. package/web-types.json +1 -1
  225. package/abstractions/billboard/billboard.d.ts +0 -28
  226. package/abstractions/detailed/detailed.d.ts +0 -26
  227. package/abstractions/edges/edges.d.ts +0 -34
  228. package/abstractions/grid/grid.d.ts +0 -50
  229. package/abstractions/text/text.d.ts +0 -82
  230. package/abstractions/text-3d/text-3d.d.ts +0 -81
  231. package/assets/distort.vert.glsl +0 -1
  232. package/cameras/camera/camera-content.d.ts +0 -13
  233. package/cameras/camera/camera.d.ts +0 -26
  234. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  235. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  236. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  237. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  238. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  239. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  240. package/esm2022/abstractions/edges/edges.mjs +0 -88
  241. package/esm2022/abstractions/grid/grid.mjs +0 -180
  242. package/esm2022/abstractions/text/text.mjs +0 -274
  243. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
  244. package/esm2022/cameras/camera/camera-content.mjs +0 -20
  245. package/esm2022/cameras/camera/camera.mjs +0 -77
  246. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  247. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  248. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  249. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
  250. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  251. package/esm2022/loaders/loader/loader.mjs +0 -138
  252. package/esm2022/loaders/progress/progress.mjs +0 -45
  253. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  254. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  255. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  256. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  257. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  258. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  259. package/esm2022/materials/point-material/point-material.mjs +0 -46
  260. package/esm2022/misc/animations/animations.mjs +0 -59
  261. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  262. package/esm2022/misc/caustics/caustics.mjs +0 -387
  263. package/esm2022/misc/decal/decal.mjs +0 -187
  264. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  265. package/esm2022/misc/example/example.mjs +0 -160
  266. package/esm2022/misc/fbo/fbo.mjs +0 -47
  267. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  268. package/esm2022/misc/html/html.mjs +0 -304
  269. package/esm2022/misc/sampler/sampler.mjs +0 -142
  270. package/esm2022/misc/shadow/shadow.mjs +0 -111
  271. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  272. package/esm2022/misc/trail/trail.mjs +0 -209
  273. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  274. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  275. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  276. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  277. package/esm2022/modifiers/index.mjs +0 -2
  278. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  279. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  280. package/esm2022/performances/points/points-input.mjs +0 -64
  281. package/esm2022/performances/points/points.mjs +0 -329
  282. package/esm2022/performances/points/position-point.mjs +0 -54
  283. package/esm2022/performances/segments/segment-object.mjs +0 -9
  284. package/esm2022/performances/segments/segments.mjs +0 -182
  285. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  286. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  287. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  288. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  289. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  290. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  291. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  292. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  293. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  294. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  295. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  296. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  297. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  298. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  299. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  300. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  301. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  302. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  303. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  304. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  305. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  306. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
  307. package/esm2022/staging/bounds/bounds.mjs +0 -308
  308. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  309. package/esm2022/staging/center/center.mjs +0 -163
  310. package/esm2022/staging/cloud/cloud.mjs +0 -158
  311. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  312. package/esm2022/staging/environment/assets.mjs +0 -13
  313. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  314. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  315. package/esm2022/staging/environment/environment-input.mjs +0 -119
  316. package/esm2022/staging/environment/environment-map.mjs +0 -53
  317. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  318. package/esm2022/staging/environment/environment.mjs +0 -61
  319. package/esm2022/staging/environment/utils.mjs +0 -105
  320. package/esm2022/staging/float/float.mjs +0 -94
  321. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  322. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  323. package/esm2022/staging/sky/sky.mjs +0 -119
  324. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  325. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  326. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  327. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  328. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  329. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  330. package/esm2022/staging/stage/stage.mjs +0 -388
  331. package/esm2022/staging/stars/stars.mjs +0 -147
  332. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  333. package/esm2022/staging/wireframe/wireframe.mjs +0 -224
  334. package/esm2022/utils/content/content.mjs +0 -15
  335. package/esm2022/utils/index.mjs +0 -2
  336. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  337. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  338. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  339. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  340. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  341. package/loaders/loader/loader.d.ts +0 -33
  342. package/loaders/progress/progress.d.ts +0 -9
  343. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  344. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  345. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  346. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  347. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  348. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  349. package/materials/point-material/point-material.d.ts +0 -24
  350. package/misc/animations/animations.d.ts +0 -15
  351. package/misc/caustics/caustics.d.ts +0 -87
  352. package/misc/decal/decal.d.ts +0 -49
  353. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  354. package/misc/example/example.d.ts +0 -81
  355. package/misc/fbo/fbo.d.ts +0 -17
  356. package/misc/html/html-wrapper.d.ts +0 -559
  357. package/misc/html/html.d.ts +0 -214
  358. package/misc/sampler/sampler.d.ts +0 -67
  359. package/misc/shadow/shadow.d.ts +0 -37
  360. package/misc/stats-gl/stats-gl.d.ts +0 -24
  361. package/misc/trail/trail.d.ts +0 -57
  362. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  363. package/misc/trail-texture/trail-texture.d.ts +0 -50
  364. package/modifiers/README.md +0 -3
  365. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  366. package/modifiers/index.d.ts +0 -1
  367. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  368. package/performances/points/points-input.d.ts +0 -32
  369. package/performances/points/points.d.ts +0 -92
  370. package/performances/points/position-point.d.ts +0 -11
  371. package/performances/segments/segment-object.d.ts +0 -7
  372. package/performances/segments/segments.d.ts +0 -124
  373. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  374. package/shaders/caustics/caustics-material.d.ts +0 -4
  375. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  376. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  377. package/shaders/discard-material/discard-material.d.ts +0 -3
  378. package/shaders/grid-material/grid-material.d.ts +0 -37
  379. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  380. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  381. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  382. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  383. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  384. package/shaders/shader-material/shader-material.d.ts +0 -6
  385. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  386. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  387. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  388. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  389. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  390. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  391. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  392. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  393. package/staging/backdrop/backdrop.d.ts +0 -30
  394. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  395. package/staging/bounds/bounds.d.ts +0 -134
  396. package/staging/camera-shake/camera-shake.d.ts +0 -43
  397. package/staging/center/center.d.ts +0 -70
  398. package/staging/cloud/cloud.d.ts +0 -51
  399. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  400. package/staging/environment/assets.d.ts +0 -13
  401. package/staging/environment/environment-cube.d.ts +0 -15
  402. package/staging/environment/environment-ground.d.ts +0 -13
  403. package/staging/environment/environment-input.d.ts +0 -68
  404. package/staging/environment/environment-map.d.ts +0 -16
  405. package/staging/environment/environment-portal.d.ts +0 -18
  406. package/staging/environment/environment.d.ts +0 -8
  407. package/staging/environment/utils.d.ts +0 -7
  408. package/staging/float/float.d.ts +0 -31
  409. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  410. package/staging/normal-texture/normal-texture.d.ts +0 -16
  411. package/staging/sky/sky.d.ts +0 -48
  412. package/staging/sparkles/sparkles.d.ts +0 -63
  413. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  414. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  415. package/staging/spot-light/spot-light-input.d.ts +0 -38
  416. package/staging/spot-light/spot-light.d.ts +0 -39
  417. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  418. package/staging/stage/stage.d.ts +0 -130
  419. package/staging/stars/stars.d.ts +0 -45
  420. package/staging/wireframe/wireframe-input.d.ts +0 -65
  421. package/staging/wireframe/wireframe.d.ts +0 -28
  422. package/utils/README.md +0 -3
  423. package/utils/content/content.d.ts +0 -8
  424. package/utils/index.d.ts +0 -1
  425. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -0,0 +1,264 @@
1
+ import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, input, signal, viewChild, } from '@angular/core';
2
+ import { extend, injectStore } from 'angular-three';
3
+ import { NgtsLine } from 'angular-three-soba/abstractions';
4
+ import { NgtsHTML, NgtsHTMLContent } from 'angular-three-soba/misc';
5
+ import { DoubleSide, Group, Matrix4, Plane, Ray, Vector3 } from 'three';
6
+ import { NgtsPivotControls } from './pivot-controls';
7
+ import * as i0 from "@angular/core";
8
+ const clickDir = new Vector3();
9
+ const intersectionDir = new Vector3();
10
+ function toDegrees(radians) {
11
+ return (radians * 180) / Math.PI;
12
+ }
13
+ function toRadians(degrees) {
14
+ return (degrees * Math.PI) / 180;
15
+ }
16
+ function calculateAngle(clickPoint, intersectionPoint, origin, e1, e2) {
17
+ clickDir.copy(clickPoint).sub(origin);
18
+ intersectionDir.copy(intersectionPoint).sub(origin);
19
+ const dote1e1 = e1.dot(e1);
20
+ const dote2e2 = e2.dot(e2);
21
+ const uClick = clickDir.dot(e1) / dote1e1;
22
+ const vClick = clickDir.dot(e2) / dote2e2;
23
+ const uIntersection = intersectionDir.dot(e1) / dote1e1;
24
+ const vIntersection = intersectionDir.dot(e2) / dote2e2;
25
+ const angleClick = Math.atan2(vClick, uClick);
26
+ const angleIntersection = Math.atan2(vIntersection, uIntersection);
27
+ return angleIntersection - angleClick;
28
+ }
29
+ function fmod(num, denom) {
30
+ let k = Math.floor(num / denom);
31
+ k = k < 0 ? k + 1 : k;
32
+ return num - k * denom;
33
+ }
34
+ function minimizeAngle(angle) {
35
+ let result = fmod(angle, 2 * Math.PI);
36
+ if (Math.abs(result) < 1e-6) {
37
+ return 0.0;
38
+ }
39
+ if (result < 0.0) {
40
+ result += 2 * Math.PI;
41
+ }
42
+ return result;
43
+ }
44
+ const rotMatrix = new Matrix4();
45
+ const posNew = new Vector3();
46
+ const ray = new Ray();
47
+ const intersection = new Vector3();
48
+ export class NgtsAxisRotator {
49
+ constructor() {
50
+ this.DoubleSide = DoubleSide;
51
+ this.dir1 = input.required();
52
+ this.dir2 = input.required();
53
+ this.axis = input.required();
54
+ this.groupRef = viewChild.required('group');
55
+ this.annotationRef = viewChild('annotation', { read: ElementRef });
56
+ this.pivotControls = inject(NgtsPivotControls);
57
+ this.store = injectStore();
58
+ this.controls = this.store.select('controls');
59
+ this.hovered = signal(false);
60
+ this.angle = 0;
61
+ this.angle0 = 0;
62
+ this.clickInfo = null;
63
+ this.matrixL = computed(() => {
64
+ const dir1N = this.dir1().clone().normalize();
65
+ const dir2N = this.dir2().clone().normalize();
66
+ return new Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));
67
+ });
68
+ this.r = computed(() => (this.pivotControls.fixed() ? 0.65 : this.pivotControls.scale() * 0.65));
69
+ this.arc = computed(() => {
70
+ const segments = 32;
71
+ const points = [];
72
+ for (let j = 0; j <= segments; j++) {
73
+ const angle = (j * (Math.PI / 2)) / segments;
74
+ points.push(new Vector3(Math.cos(angle) * this.r(), Math.sin(angle) * this.r(), 0));
75
+ }
76
+ return points;
77
+ });
78
+ extend({ Group });
79
+ }
80
+ onPointerDown(event) {
81
+ const [annotation, group, axis, controls] = [
82
+ this.annotationRef()?.nativeElement,
83
+ this.groupRef().nativeElement,
84
+ this.axis(),
85
+ this.controls(),
86
+ ];
87
+ if (annotation) {
88
+ annotation.innerText = `${toDegrees(this.angle).toFixed(0)}º`;
89
+ annotation.style.display = 'block';
90
+ }
91
+ event.stopPropagation();
92
+ const clickPoint = event.point.clone();
93
+ const origin = new Vector3().setFromMatrixPosition(group.matrixWorld);
94
+ const e1 = new Vector3().setFromMatrixColumn(group.matrixWorld, 0).normalize();
95
+ const e2 = new Vector3().setFromMatrixColumn(group.matrixWorld, 1).normalize();
96
+ const normal = new Vector3().setFromMatrixColumn(group.matrixWorld, 2).normalize();
97
+ const plane = new Plane().setFromNormalAndCoplanarPoint(normal, origin);
98
+ this.clickInfo = { clickPoint, origin, e1, e2, normal, plane };
99
+ this.pivotControls.onDragStart({ component: 'Rotator', axis, origin, directions: [e1, e2, normal] });
100
+ if (controls) {
101
+ controls.enabled = false;
102
+ }
103
+ // @ts-expect-error - setPointerCapture is not a function on PointerEvent
104
+ event.target.setPointerCapture(event.pointerId);
105
+ }
106
+ onPointerMove(event) {
107
+ event.stopPropagation();
108
+ if (!this.hovered())
109
+ this.hovered.set(true);
110
+ if (this.clickInfo) {
111
+ const { clickPoint, origin, e1, e2, normal, plane } = this.clickInfo;
112
+ const [rotationLimits, axis, annotation] = [
113
+ this.pivotControls.rotationLimits(),
114
+ this.axis(),
115
+ this.annotationRef()?.nativeElement,
116
+ ];
117
+ const [min, max] = rotationLimits?.[axis] || [undefined, undefined];
118
+ ray.copy(event.ray);
119
+ ray.intersectPlane(plane, intersection);
120
+ ray.direction.negate();
121
+ ray.intersectPlane(plane, intersection);
122
+ let deltaAngle = calculateAngle(clickPoint, intersection, origin, e1, e2);
123
+ let degrees = toDegrees(deltaAngle);
124
+ if (event.shiftKey) {
125
+ degrees = Math.round(degrees / 10) * 10;
126
+ deltaAngle = toRadians(degrees);
127
+ }
128
+ if (min !== undefined && max !== undefined && max - min < 2 * Math.PI) {
129
+ deltaAngle = minimizeAngle(deltaAngle);
130
+ deltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle;
131
+ deltaAngle = Math.round(deltaAngle / 10) * 10;
132
+ this.angle = this.angle0 + deltaAngle;
133
+ }
134
+ else {
135
+ this.angle = minimizeAngle(this.angle0 + deltaAngle);
136
+ this.angle = this.angle > Math.PI ? this.angle - 2 * Math.PI : this.angle;
137
+ }
138
+ if (annotation) {
139
+ degrees = toDegrees(this.angle);
140
+ annotation.innerText = `${degrees.toFixed(0)}º`;
141
+ }
142
+ rotMatrix.makeRotationAxis(normal, deltaAngle);
143
+ posNew.copy(origin).applyMatrix4(rotMatrix).sub(origin).negate();
144
+ rotMatrix.setPosition(posNew);
145
+ this.pivotControls.onDrag(rotMatrix);
146
+ }
147
+ }
148
+ onPointerUp(event) {
149
+ const [annotation, controls] = [this.annotationRef()?.nativeElement, this.controls()];
150
+ if (annotation) {
151
+ annotation.style.display = 'none';
152
+ }
153
+ event.stopPropagation();
154
+ this.clickInfo = null;
155
+ this.pivotControls.onDragEnd();
156
+ if (controls) {
157
+ controls.enabled = true;
158
+ }
159
+ // @ts-expect-error - releasePointerCapture is not a function on PointerEvent
160
+ event.target.releasePointerCapture(event.pointerId);
161
+ }
162
+ onPointerOut(event) {
163
+ event.stopPropagation();
164
+ this.hovered.set(false);
165
+ }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsAxisRotator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
167
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsAxisRotator, isStandalone: true, selector: "ngts-axis-rotator", inputs: { dir1: { classPropertyName: "dir1", publicName: "dir1", isSignal: true, isRequired: true, transformFunction: null }, dir2: { classPropertyName: "dir2", publicName: "dir2", isSignal: true, isRequired: true, transformFunction: null }, axis: { classPropertyName: "axis", publicName: "axis", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "annotationRef", first: true, predicate: ["annotation"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
168
+ <ngt-group
169
+ #group
170
+ [matrix]="matrixL()"
171
+ [matrixAutoUpdate]="false"
172
+ (pointerdown)="onPointerDown($any($event))"
173
+ (pointermove)="onPointerMove($any($event))"
174
+ (pointerup)="onPointerUp($any($event))"
175
+ (pointerout)="onPointerOut($any($event))"
176
+ >
177
+ @if (pivotControls.annotations()) {
178
+ <ngts-html [options]="{ position: [r(), r(), 0] }">
179
+ <div
180
+ #annotation
181
+ ngtsHTMLContent
182
+ style="display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap"
183
+ [class]="pivotControls.annotationsClass()"
184
+ ></div>
185
+ </ngts-html>
186
+ }
187
+
188
+ <ngts-line
189
+ [points]="arc()"
190
+ [options]="{ lineWidth: pivotControls.lineWidth() * 4, visible: false, userData: pivotControls.userData() }"
191
+ />
192
+
193
+ <ngts-line
194
+ [points]="arc()"
195
+ [options]="{
196
+ transparent: true,
197
+ raycast: null,
198
+ depthTest: pivotControls.depthTest(),
199
+ lineWidth: pivotControls.lineWidth(),
200
+ side: DoubleSide,
201
+ color: hovered() ? pivotControls.hoveredColor() : pivotControls.axisColors()[axis()],
202
+ opacity: pivotControls.opacity(),
203
+ polygonOffset: true,
204
+ polygonOffsetFactor: -10,
205
+ fog: false,
206
+ }"
207
+ />
208
+ </ngt-group>
209
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }, { kind: "component", type: NgtsHTML, selector: "ngts-html", inputs: ["options"] }, { kind: "component", type: NgtsHTMLContent, selector: "[ngtsHTMLContent]", inputs: ["ngtsHTMLContent"], outputs: ["occluded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsAxisRotator, decorators: [{
212
+ type: Component,
213
+ args: [{
214
+ selector: 'ngts-axis-rotator',
215
+ standalone: true,
216
+ template: `
217
+ <ngt-group
218
+ #group
219
+ [matrix]="matrixL()"
220
+ [matrixAutoUpdate]="false"
221
+ (pointerdown)="onPointerDown($any($event))"
222
+ (pointermove)="onPointerMove($any($event))"
223
+ (pointerup)="onPointerUp($any($event))"
224
+ (pointerout)="onPointerOut($any($event))"
225
+ >
226
+ @if (pivotControls.annotations()) {
227
+ <ngts-html [options]="{ position: [r(), r(), 0] }">
228
+ <div
229
+ #annotation
230
+ ngtsHTMLContent
231
+ style="display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap"
232
+ [class]="pivotControls.annotationsClass()"
233
+ ></div>
234
+ </ngts-html>
235
+ }
236
+
237
+ <ngts-line
238
+ [points]="arc()"
239
+ [options]="{ lineWidth: pivotControls.lineWidth() * 4, visible: false, userData: pivotControls.userData() }"
240
+ />
241
+
242
+ <ngts-line
243
+ [points]="arc()"
244
+ [options]="{
245
+ transparent: true,
246
+ raycast: null,
247
+ depthTest: pivotControls.depthTest(),
248
+ lineWidth: pivotControls.lineWidth(),
249
+ side: DoubleSide,
250
+ color: hovered() ? pivotControls.hoveredColor() : pivotControls.axisColors()[axis()],
251
+ opacity: pivotControls.opacity(),
252
+ polygonOffset: true,
253
+ polygonOffsetFactor: -10,
254
+ fog: false,
255
+ }"
256
+ />
257
+ </ngt-group>
258
+ `,
259
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
260
+ changeDetection: ChangeDetectionStrategy.OnPush,
261
+ imports: [NgtsLine, NgtsHTML, NgtsHTMLContent],
262
+ }]
263
+ }], ctorParameters: () => [] });
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpcy1yb3RhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2NvbnRyb2xzL3NyYy9saWIvcGl2b3QtY29udHJvbHMvYXhpcy1yb3RhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUVyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFdEMsU0FBUyxTQUFTLENBQUMsT0FBZTtJQUNqQyxPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE9BQWU7SUFDakMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFtQixFQUFFLGlCQUEwQixFQUFF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akMsZUFBZTtrQkFsRDNCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMENUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUM7aUJBQzlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdFNpZ25hbCxcblx0c2lnbmFsLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RTdG9yZSwgTmd0VGhyZWVFdmVudCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c0xpbmUgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zJztcbmltcG9ydCB7IE5ndHNIVE1MLCBOZ3RzSFRNTENvbnRlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBEb3VibGVTaWRlLCBHcm91cCwgTWF0cml4NCwgUGxhbmUsIFJheSwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNQaXZvdENvbnRyb2xzIH0gZnJvbSAnLi9waXZvdC1jb250cm9scyc7XG5cbmNvbnN0IGNsaWNrRGlyID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IGludGVyc2VjdGlvbkRpciA9IG5ldyBWZWN0b3IzKCk7XG5cbmZ1bmN0aW9uIHRvRGVncmVlcyhyYWRpYW5zOiBudW1iZXIpIHtcblx0cmV0dXJuIChyYWRpYW5zICogMTgwKSAvIE1hdGguUEk7XG59XG5cbmZ1bmN0aW9uIHRvUmFkaWFucyhkZWdyZWVzOiBudW1iZXIpIHtcblx0cmV0dXJuIChkZWdyZWVzICogTWF0aC5QSSkgLyAxODA7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUFuZ2xlKGNsaWNrUG9pbnQ6IFZlY3RvcjMsIGludGVyc2VjdGlvblBvaW50OiBWZWN0b3IzLCBvcmlnaW46IFZlY3RvcjMsIGUxOiBWZWN0b3IzLCBlMjogVmVjdG9yMykge1xuXHRjbGlja0Rpci5jb3B5KGNsaWNrUG9pbnQpLnN1YihvcmlnaW4pO1xuXHRpbnRlcnNlY3Rpb25EaXIuY29weShpbnRlcnNlY3Rpb25Qb2ludCkuc3ViKG9yaWdpbik7XG5cdGNvbnN0IGRvdGUxZTEgPSBlMS5kb3QoZTEpO1xuXHRjb25zdCBkb3RlMmUyID0gZTIuZG90KGUyKTtcblx0Y29uc3QgdUNsaWNrID0gY2xpY2tEaXIuZG90KGUxKSAvIGRvdGUxZTE7XG5cdGNvbnN0IHZDbGljayA9IGNsaWNrRGlyLmRvdChlMikgLyBkb3RlMmUyO1xuXHRjb25zdCB1SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uRGlyLmRvdChlMSkgLyBkb3RlMWUxO1xuXHRjb25zdCB2SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uRGlyLmRvdChlMikgLyBkb3RlMmUyO1xuXHRjb25zdCBhbmdsZUNsaWNrID0gTWF0aC5hdGFuMih2Q2xpY2ssIHVDbGljayk7XG5cdGNvbnN0IGFuZ2xlSW50ZXJzZWN0aW9uID0gTWF0aC5hdGFuMih2SW50ZXJzZWN0aW9uLCB1SW50ZXJzZWN0aW9uKTtcblx0cmV0dXJuIGFuZ2xlSW50ZXJzZWN0aW9uIC0gYW5nbGVDbGljaztcbn1cblxuZnVuY3Rpb24gZm1vZChudW06IG51bWJlciwgZGVub206IG51bWJlcikge1xuXHRsZXQgayA9IE1hdGguZmxvb3IobnVtIC8gZGVub20pO1xuXHRrID0gayA8IDAgPyBrICsgMSA6IGs7XG5cblx0cmV0dXJuIG51bSAtIGsgKiBkZW5vbTtcbn1cblxuZnVuY3Rpb24gbWluaW1pemVBbmdsZShhbmdsZTogbnVtYmVyKSB7XG5cdGxldCByZXN1bHQgPSBmbW9kKGFuZ2xlLCAyICogTWF0aC5QSSk7XG5cblx0aWYgKE1hdGguYWJzKHJlc3VsdCkgPCAxZS02KSB7XG5cdFx0cmV0dXJuIDAuMDtcblx0fVxuXG5cdGlmIChyZXN1bHQgPCAwLjApIHtcblx0XHRyZXN1bHQgKz0gMiAqIE1hdGguUEk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCByb3RNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgcG9zTmV3ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHJheSA9IG5ldyBSYXkoKTtcbmNvbnN0IGludGVyc2VjdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYXhpcy1yb3RhdG9yJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwXG5cdFx0XHQjZ3JvdXBcblx0XHRcdFttYXRyaXhdPVwibWF0cml4TCgpXCJcblx0XHRcdFttYXRyaXhBdXRvVXBkYXRlXT1cImZhbHNlXCJcblx0XHRcdChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRhbnkoJGV2ZW50KSlcIlxuXHRcdFx0KHBvaW50ZXJtb3ZlKT1cIm9uUG9pbnRlck1vdmUoJGFueSgkZXZlbnQpKVwiXG5cdFx0XHQocG9pbnRlcnVwKT1cIm9uUG9pbnRlclVwKCRhbnkoJGV2ZW50KSlcIlxuXHRcdFx0KHBvaW50ZXJvdXQpPVwib25Qb2ludGVyT3V0KCRhbnkoJGV2ZW50KSlcIlxuXHRcdD5cblx0XHRcdEBpZiAocGl2b3RDb250cm9scy5hbm5vdGF0aW9ucygpKSB7XG5cdFx0XHRcdDxuZ3RzLWh0bWwgW29wdGlvbnNdPVwieyBwb3NpdGlvbjogW3IoKSwgcigpLCAwXSB9XCI+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0I2Fubm90YXRpb25cblx0XHRcdFx0XHRcdG5ndHNIVE1MQ29udGVudFxuXHRcdFx0XHRcdFx0c3R5bGU9XCJkaXNwbGF5OiBub25lOyBiYWNrZ3JvdW5kOiAjMTUxNTIwOyBjb2xvcjogd2hpdGU7IHBhZGRpbmc6IDZweCA4cHg7IGJvcmRlci1yYWRpdXM6IDdweDsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiXG5cdFx0XHRcdFx0XHRbY2xhc3NdPVwicGl2b3RDb250cm9scy5hbm5vdGF0aW9uc0NsYXNzKClcIlxuXHRcdFx0XHRcdD48L2Rpdj5cblx0XHRcdFx0PC9uZ3RzLWh0bWw+XG5cdFx0XHR9XG5cblx0XHRcdDxuZ3RzLWxpbmVcblx0XHRcdFx0W3BvaW50c109XCJhcmMoKVwiXG5cdFx0XHRcdFtvcHRpb25zXT1cInsgbGluZVdpZHRoOiBwaXZvdENvbnRyb2xzLmxpbmVXaWR0aCgpICogNCwgdmlzaWJsZTogZmFsc2UsIHVzZXJEYXRhOiBwaXZvdENvbnRyb2xzLnVzZXJEYXRhKCkgfVwiXG5cdFx0XHQvPlxuXG5cdFx0XHQ8bmd0cy1saW5lXG5cdFx0XHRcdFtwb2ludHNdPVwiYXJjKClcIlxuXHRcdFx0XHRbb3B0aW9uc109XCJ7XG5cdFx0XHRcdFx0dHJhbnNwYXJlbnQ6IHRydWUsXG5cdFx0XHRcdFx0cmF5Y2FzdDogbnVsbCxcblx0XHRcdFx0XHRkZXB0aFRlc3Q6IHBpdm90Q29udHJvbHMuZGVwdGhUZXN0KCksXG5cdFx0XHRcdFx0bGluZVdpZHRoOiBwaXZvdENvbnRyb2xzLmxpbmVXaWR0aCgpLFxuXHRcdFx0XHRcdHNpZGU6IERvdWJsZVNpZGUsXG5cdFx0XHRcdFx0Y29sb3I6IGhvdmVyZWQoKSA/IHBpdm90Q29udHJvbHMuaG92ZXJlZENvbG9yKCkgOiBwaXZvdENvbnRyb2xzLmF4aXNDb2xvcnMoKVtheGlzKCldLFxuXHRcdFx0XHRcdG9wYWNpdHk6IHBpdm90Q29udHJvbHMub3BhY2l0eSgpLFxuXHRcdFx0XHRcdHBvbHlnb25PZmZzZXQ6IHRydWUsXG5cdFx0XHRcdFx0cG9seWdvbk9mZnNldEZhY3RvcjogLTEwLFxuXHRcdFx0XHRcdGZvZzogZmFsc2UsXG5cdFx0XHRcdH1cIlxuXHRcdFx0Lz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNMaW5lLCBOZ3RzSFRNTCwgTmd0c0hUTUxDb250ZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0F4aXNSb3RhdG9yIHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IERvdWJsZVNpZGUgPSBEb3VibGVTaWRlO1xuXG5cdGRpcjEgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzPigpO1xuXHRkaXIyID0gaW5wdXQucmVxdWlyZWQ8VmVjdG9yMz4oKTtcblx0YXhpcyA9IGlucHV0LnJlcXVpcmVkPDAgfCAxIHwgMj4oKTtcblxuXHRncm91cFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dyb3VwJyk7XG5cdGFubm90YXRpb25SZWYgPSB2aWV3Q2hpbGQ8dW5rbm93biwgRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdhbm5vdGF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuXG5cdHBpdm90Q29udHJvbHMgPSBpbmplY3QoTmd0c1Bpdm90Q29udHJvbHMpO1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBjb250cm9scyA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjb250cm9scycpIGFzIHVua25vd24gYXMgU2lnbmFsPHsgZW5hYmxlZDogYm9vbGVhbiB9PjtcblxuXHRob3ZlcmVkID0gc2lnbmFsKGZhbHNlKTtcblx0cHJpdmF0ZSBhbmdsZSA9IDA7XG5cdHByaXZhdGUgYW5nbGUwID0gMDtcblx0cHJpdmF0ZSBjbGlja0luZm86IHtcblx0XHRjbGlja1BvaW50OiBWZWN0b3IzO1xuXHRcdG9yaWdpbjogVmVjdG9yMztcblx0XHRlMTogVmVjdG9yMztcblx0XHRlMjogVmVjdG9yMztcblx0XHRub3JtYWw6IFZlY3RvcjM7XG5cdFx0cGxhbmU6IFBsYW5lO1xuXHR9IHwgbnVsbCA9IG51bGw7XG5cblx0bWF0cml4TCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBkaXIxTiA9IHRoaXMuZGlyMSgpLmNsb25lKCkubm9ybWFsaXplKCk7XG5cdFx0Y29uc3QgZGlyMk4gPSB0aGlzLmRpcjIoKS5jbG9uZSgpLm5vcm1hbGl6ZSgpO1xuXHRcdHJldHVybiBuZXcgTWF0cml4NCgpLm1ha2VCYXNpcyhkaXIxTiwgZGlyMk4sIGRpcjFOLmNsb25lKCkuY3Jvc3MoZGlyMk4pKTtcblx0fSk7XG5cdHIgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5waXZvdENvbnRyb2xzLmZpeGVkKCkgPyAwLjY1IDogdGhpcy5waXZvdENvbnRyb2xzLnNjYWxlKCkgKiAwLjY1KSk7XG5cdGFyYyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBzZWdtZW50cyA9IDMyO1xuXHRcdGNvbnN0IHBvaW50czogVmVjdG9yM1tdID0gW107XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPD0gc2VnbWVudHM7IGorKykge1xuXHRcdFx0Y29uc3QgYW5nbGUgPSAoaiAqIChNYXRoLlBJIC8gMikpIC8gc2VnbWVudHM7XG5cdFx0XHRwb2ludHMucHVzaChuZXcgVmVjdG9yMyhNYXRoLmNvcyhhbmdsZSkgKiB0aGlzLnIoKSwgTWF0aC5zaW4oYW5nbGUpICogdGhpcy5yKCksIDApKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvaW50cztcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cdH1cblxuXHRvblBvaW50ZXJEb3duKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pIHtcblx0XHRjb25zdCBbYW5ub3RhdGlvbiwgZ3JvdXAsIGF4aXMsIGNvbnRyb2xzXSA9IFtcblx0XHRcdHRoaXMuYW5ub3RhdGlvblJlZigpPy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0dGhpcy5ncm91cFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHR0aGlzLmF4aXMoKSxcblx0XHRcdHRoaXMuY29udHJvbHMoKSxcblx0XHRdO1xuXG5cdFx0aWYgKGFubm90YXRpb24pIHtcblx0XHRcdGFubm90YXRpb24uaW5uZXJUZXh0ID0gYCR7dG9EZWdyZWVzKHRoaXMuYW5nbGUpLnRvRml4ZWQoMCl9wrpgO1xuXHRcdFx0YW5ub3RhdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblx0XHR9XG5cblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRjb25zdCBjbGlja1BvaW50ID0gZXZlbnQucG9pbnQuY2xvbmUoKTtcblx0XHRjb25zdCBvcmlnaW4gPSBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhQb3NpdGlvbihncm91cC5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgZTEgPSBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhDb2x1bW4oZ3JvdXAubWF0cml4V29ybGQsIDApLm5vcm1hbGl6ZSgpO1xuXHRcdGNvbnN0IGUyID0gbmV3IFZlY3RvcjMoKS5zZXRGcm9tTWF0cml4Q29sdW1uKGdyb3VwLm1hdHJpeFdvcmxkLCAxKS5ub3JtYWxpemUoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhDb2x1bW4oZ3JvdXAubWF0cml4V29ybGQsIDIpLm5vcm1hbGl6ZSgpO1xuXHRcdGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKCkuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobm9ybWFsLCBvcmlnaW4pO1xuXHRcdHRoaXMuY2xpY2tJbmZvID0geyBjbGlja1BvaW50LCBvcmlnaW4sIGUxLCBlMiwgbm9ybWFsLCBwbGFuZSB9O1xuXHRcdHRoaXMucGl2b3RDb250cm9scy5vbkRyYWdTdGFydCh7IGNvbXBvbmVudDogJ1JvdGF0b3InLCBheGlzLCBvcmlnaW4sIGRpcmVjdGlvbnM6IFtlMSwgZTIsIG5vcm1hbF0gfSk7XG5cblx0XHRpZiAoY29udHJvbHMpIHtcblx0XHRcdGNvbnRyb2xzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gc2V0UG9pbnRlckNhcHR1cmUgaXMgbm90IGEgZnVuY3Rpb24gb24gUG9pbnRlckV2ZW50XG5cdFx0ZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG5cdH1cblxuXHRvblBvaW50ZXJNb3ZlKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRpZiAoIXRoaXMuaG92ZXJlZCgpKSB0aGlzLmhvdmVyZWQuc2V0KHRydWUpO1xuXHRcdGlmICh0aGlzLmNsaWNrSW5mbykge1xuXHRcdFx0Y29uc3QgeyBjbGlja1BvaW50LCBvcmlnaW4sIGUxLCBlMiwgbm9ybWFsLCBwbGFuZSB9ID0gdGhpcy5jbGlja0luZm87XG5cdFx0XHRjb25zdCBbcm90YXRpb25MaW1pdHMsIGF4aXMsIGFubm90YXRpb25dID0gW1xuXHRcdFx0XHR0aGlzLnBpdm90Q29udHJvbHMucm90YXRpb25MaW1pdHMoKSxcblx0XHRcdFx0dGhpcy5heGlzKCksXG5cdFx0XHRcdHRoaXMuYW5ub3RhdGlvblJlZigpPy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XTtcblxuXHRcdFx0Y29uc3QgW21pbiwgbWF4XSA9IHJvdGF0aW9uTGltaXRzPy5bYXhpc10gfHwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcblxuXHRcdFx0cmF5LmNvcHkoZXZlbnQucmF5KTtcblx0XHRcdHJheS5pbnRlcnNlY3RQbGFuZShwbGFuZSwgaW50ZXJzZWN0aW9uKTtcblx0XHRcdHJheS5kaXJlY3Rpb24ubmVnYXRlKCk7XG5cdFx0XHRyYXkuaW50ZXJzZWN0UGxhbmUocGxhbmUsIGludGVyc2VjdGlvbik7XG5cdFx0XHRsZXQgZGVsdGFBbmdsZSA9IGNhbGN1bGF0ZUFuZ2xlKGNsaWNrUG9pbnQsIGludGVyc2VjdGlvbiwgb3JpZ2luLCBlMSwgZTIpO1xuXHRcdFx0bGV0IGRlZ3JlZXMgPSB0b0RlZ3JlZXMoZGVsdGFBbmdsZSk7XG5cblx0XHRcdGlmIChldmVudC5zaGlmdEtleSkge1xuXHRcdFx0XHRkZWdyZWVzID0gTWF0aC5yb3VuZChkZWdyZWVzIC8gMTApICogMTA7XG5cdFx0XHRcdGRlbHRhQW5nbGUgPSB0b1JhZGlhbnMoZGVncmVlcyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBtYXggIT09IHVuZGVmaW5lZCAmJiBtYXggLSBtaW4gPCAyICogTWF0aC5QSSkge1xuXHRcdFx0XHRkZWx0YUFuZ2xlID0gbWluaW1pemVBbmdsZShkZWx0YUFuZ2xlKTtcblx0XHRcdFx0ZGVsdGFBbmdsZSA9IGRlbHRhQW5nbGUgPiBNYXRoLlBJID8gZGVsdGFBbmdsZSAtIDIgKiBNYXRoLlBJIDogZGVsdGFBbmdsZTtcblx0XHRcdFx0ZGVsdGFBbmdsZSA9IE1hdGgucm91bmQoZGVsdGFBbmdsZSAvIDEwKSAqIDEwO1xuXHRcdFx0XHR0aGlzLmFuZ2xlID0gdGhpcy5hbmdsZTAgKyBkZWx0YUFuZ2xlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hbmdsZSA9IG1pbmltaXplQW5nbGUodGhpcy5hbmdsZTAgKyBkZWx0YUFuZ2xlKTtcblx0XHRcdFx0dGhpcy5hbmdsZSA9IHRoaXMuYW5nbGUgPiBNYXRoLlBJID8gdGhpcy5hbmdsZSAtIDIgKiBNYXRoLlBJIDogdGhpcy5hbmdsZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFubm90YXRpb24pIHtcblx0XHRcdFx0ZGVncmVlcyA9IHRvRGVncmVlcyh0aGlzLmFuZ2xlKTtcblx0XHRcdFx0YW5ub3RhdGlvbi5pbm5lclRleHQgPSBgJHtkZWdyZWVzLnRvRml4ZWQoMCl9wrpgO1xuXHRcdFx0fVxuXG5cdFx0XHRyb3RNYXRyaXgubWFrZVJvdGF0aW9uQXhpcyhub3JtYWwsIGRlbHRhQW5nbGUpO1xuXHRcdFx0cG9zTmV3LmNvcHkob3JpZ2luKS5hcHBseU1hdHJpeDQocm90TWF0cml4KS5zdWIob3JpZ2luKS5uZWdhdGUoKTtcblx0XHRcdHJvdE1hdHJpeC5zZXRQb3NpdGlvbihwb3NOZXcpO1xuXHRcdFx0dGhpcy5waXZvdENvbnRyb2xzLm9uRHJhZyhyb3RNYXRyaXgpO1xuXHRcdH1cblx0fVxuXG5cdG9uUG9pbnRlclVwKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pIHtcblx0XHRjb25zdCBbYW5ub3RhdGlvbiwgY29udHJvbHNdID0gW3RoaXMuYW5ub3RhdGlvblJlZigpPy5uYXRpdmVFbGVtZW50LCB0aGlzLmNvbnRyb2xzKCldO1xuXHRcdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0XHRhbm5vdGF0aW9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0fVxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdHRoaXMuY2xpY2tJbmZvID0gbnVsbDtcblx0XHR0aGlzLnBpdm90Q29udHJvbHMub25EcmFnRW5kKCk7XG5cdFx0aWYgKGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9scy5lbmFibGVkID0gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSBpcyBub3QgYSBmdW5jdGlvbiBvbiBQb2ludGVyRXZlbnRcblx0XHRldmVudC50YXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG5cdH1cblxuXHRvblBvaW50ZXJPdXQoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pikge1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdHRoaXMuaG92ZXJlZC5zZXQoZmFsc2UpO1xuXHR9XG59XG4iXX0=