angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21

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 (321) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +24 -12
  4. package/abstractions/grid/grid.d.ts +50 -0
  5. package/abstractions/index.d.ts +2 -7
  6. package/abstractions/text/text.d.ts +10 -5
  7. package/abstractions/text-3d/text-3d.d.ts +51 -41
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +31 -12
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +180 -0
  19. package/esm2022/abstractions/index.mjs +3 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -124
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
  22. package/esm2022/cameras/camera/camera-content.mjs +6 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +105 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
  31. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  32. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
  33. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
  34. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
  35. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
  36. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
  37. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
  38. package/esm2022/gizmos/index.mjs +4 -0
  39. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +29 -29
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  43. package/esm2022/materials/index.mjs +2 -1
  44. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  45. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  46. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +102 -99
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  48. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  49. package/esm2022/materials/point-material/point-material.mjs +50 -0
  50. package/esm2022/misc/animations/animations.mjs +36 -32
  51. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  52. package/esm2022/misc/caustics/caustics.mjs +387 -0
  53. package/esm2022/misc/decal/decal.mjs +187 -0
  54. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  55. package/esm2022/misc/example/example.mjs +160 -0
  56. package/esm2022/misc/fbo/fbo.mjs +35 -35
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +304 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +142 -0
  61. package/esm2022/misc/shadow/shadow.mjs +111 -0
  62. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  63. package/esm2022/misc/trail/trail.mjs +209 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  65. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  66. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  67. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  68. package/esm2022/modifiers/index.mjs +2 -0
  69. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  70. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  71. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  72. package/esm2022/performances/index.mjs +8 -0
  73. package/esm2022/performances/instances/instances.mjs +220 -0
  74. package/esm2022/performances/instances/position-mesh.mjs +52 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +326 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
  81. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  82. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  86. package/esm2022/shaders/index.mjs +6 -3
  87. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  88. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
  89. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  91. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  92. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  93. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  96. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  97. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  98. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  101. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  102. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  103. package/esm2022/staging/bounds/bounds.mjs +144 -143
  104. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  105. package/esm2022/staging/center/center.mjs +129 -112
  106. package/esm2022/staging/cloud/cloud.mjs +118 -124
  107. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  108. package/esm2022/staging/environment/assets.mjs +12 -12
  109. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  110. package/esm2022/staging/environment/environment-ground.mjs +17 -19
  111. package/esm2022/staging/environment/environment-input.mjs +98 -85
  112. package/esm2022/staging/environment/environment-map.mjs +33 -33
  113. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  114. package/esm2022/staging/environment/environment.mjs +34 -51
  115. package/esm2022/staging/environment/utils.mjs +37 -15
  116. package/esm2022/staging/float/float.mjs +70 -58
  117. package/esm2022/staging/index.mjs +7 -3
  118. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  119. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  120. package/esm2022/staging/sky/sky.mjs +85 -80
  121. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  122. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  123. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  126. package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
  127. package/esm2022/staging/stage/stage.mjs +305 -290
  128. package/esm2022/staging/stars/stars.mjs +101 -102
  129. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  130. package/esm2022/staging/wireframe/wireframe.mjs +228 -0
  131. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  132. package/esm2022/utils/content/content.mjs +15 -0
  133. package/esm2022/utils/index.mjs +2 -0
  134. package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
  135. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  136. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +104 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +121 -117
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +662 -592
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2214 -105
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +956 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +549 -252
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/gizmos/README.md +3 -0
  159. package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
  160. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  164. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  166. package/gizmos/index.d.ts +3 -0
  167. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  168. package/loaders/loader/loader.d.ts +19 -17
  169. package/loaders/progress/progress.d.ts +1 -1
  170. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  171. package/materials/index.d.ts +1 -0
  172. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  173. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  174. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  175. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  176. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  177. package/materials/point-material/point-material.d.ts +24 -0
  178. package/metadata.json +1 -0
  179. package/misc/animations/animations.d.ts +6 -4
  180. package/misc/caustics/caustics.d.ts +87 -0
  181. package/misc/decal/decal.d.ts +49 -0
  182. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  183. package/misc/example/example.d.ts +81 -0
  184. package/misc/fbo/fbo.d.ts +2 -2
  185. package/misc/html/html-wrapper.d.ts +559 -0
  186. package/misc/html/html.d.ts +214 -0
  187. package/misc/index.d.ts +9 -0
  188. package/misc/sampler/sampler.d.ts +67 -0
  189. package/misc/shadow/shadow.d.ts +37 -0
  190. package/misc/stats-gl/stats-gl.d.ts +24 -0
  191. package/misc/trail/trail.d.ts +57 -0
  192. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  193. package/misc/trail-texture/trail-texture.d.ts +50 -0
  194. package/modifiers/README.md +3 -0
  195. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  196. package/modifiers/index.d.ts +1 -0
  197. package/package.json +31 -16
  198. package/performances/README.md +3 -0
  199. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  200. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  201. package/performances/index.d.ts +7 -0
  202. package/performances/instances/instances.d.ts +79 -0
  203. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  204. package/performances/points/points-input.d.ts +32 -0
  205. package/performances/points/points.d.ts +92 -0
  206. package/performances/points/position-point.d.ts +11 -0
  207. package/performances/segments/segment-object.d.ts +7 -0
  208. package/performances/segments/segments.d.ts +124 -0
  209. package/shaders/grid-material/grid-material.d.ts +37 -0
  210. package/shaders/index.d.ts +5 -2
  211. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
  212. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  213. package/shaders/shader-material/shader-material.d.ts +2 -2
  214. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  215. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  216. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  217. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  218. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  219. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  220. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  221. package/staging/backdrop/backdrop.d.ts +30 -0
  222. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  223. package/staging/bounds/bounds.d.ts +100 -24
  224. package/staging/camera-shake/camera-shake.d.ts +30 -19
  225. package/staging/center/center.d.ts +43 -35
  226. package/staging/cloud/cloud.d.ts +26 -23
  227. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  228. package/staging/environment/assets.d.ts +9 -9
  229. package/staging/environment/environment-cube.d.ts +9 -5
  230. package/staging/environment/environment-ground.d.ts +7 -7
  231. package/staging/environment/environment-input.d.ts +37 -37
  232. package/staging/environment/environment-map.d.ts +10 -5
  233. package/staging/environment/environment-portal.d.ts +10 -5
  234. package/staging/environment/environment.d.ts +0 -4
  235. package/staging/environment/utils.d.ts +2 -2
  236. package/staging/float/float.d.ts +14 -10
  237. package/staging/index.d.ts +6 -2
  238. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  239. package/staging/normal-texture/normal-texture.d.ts +16 -0
  240. package/staging/sky/sky.d.ts +28 -21
  241. package/staging/sparkles/sparkles.d.ts +36 -22
  242. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  243. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  244. package/staging/spot-light/spot-light-input.d.ts +25 -25
  245. package/staging/spot-light/spot-light.d.ts +31 -15
  246. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  247. package/staging/stage/stage.d.ts +89 -65
  248. package/staging/stars/stars.d.ts +28 -17
  249. package/staging/wireframe/wireframe-input.d.ts +65 -0
  250. package/staging/wireframe/wireframe.d.ts +28 -0
  251. package/utils/README.md +3 -0
  252. package/utils/content/content.d.ts +8 -0
  253. package/utils/index.d.ts +1 -0
  254. package/web-types.json +1 -0
  255. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  256. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  257. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  258. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  259. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  262. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  263. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  264. package/abstractions/line/line-input.d.ts +0 -42
  265. package/abstractions/line/line.d.ts +0 -35
  266. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  267. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  268. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  269. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  270. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  271. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  277. package/esm2022/abstractions/line/line-input.mjs +0 -113
  278. package/esm2022/abstractions/line/line.mjs +0 -165
  279. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  280. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  281. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  282. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  283. package/esm2022/performance/detailed/detailed.mjs +0 -61
  284. package/esm2022/performance/index.mjs +0 -7
  285. package/esm2022/performance/instances/instance.mjs +0 -48
  286. package/esm2022/performance/instances/instances.mjs +0 -189
  287. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  288. package/esm2022/performance/stats/stats.mjs +0 -79
  289. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  290. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  291. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  292. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  293. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  294. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  295. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  296. package/performance/README.md +0 -3
  297. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  298. package/performance/detailed/detailed.d.ts +0 -20
  299. package/performance/index.d.ts +0 -6
  300. package/performance/instances/instance.d.ts +0 -9
  301. package/performance/instances/instances.d.ts +0 -35
  302. package/performance/stats/stats.d.ts +0 -18
  303. package/plugin/generators.json +0 -19
  304. package/plugin/libs/plugin/README.md +0 -11
  305. package/plugin/package.json +0 -9
  306. package/plugin/src/generators/init/compat.d.ts +0 -2
  307. package/plugin/src/generators/init/compat.js +0 -6
  308. package/plugin/src/generators/init/compat.js.map +0 -1
  309. package/plugin/src/generators/init/init.d.ts +0 -4
  310. package/plugin/src/generators/init/init.js +0 -22
  311. package/plugin/src/generators/init/init.js.map +0 -1
  312. package/plugin/src/generators/init/schema.json +0 -6
  313. package/plugin/src/index.d.ts +0 -1
  314. package/plugin/src/index.js +0 -6
  315. package/plugin/src/index.js.map +0 -1
  316. package/staging/caustics/caustisc.d.ts +0 -70
  317. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  318. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  319. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  320. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  321. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,62 +1,56 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, Input } from '@angular/core';
3
- import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtSignalStore, NgtStore } from 'angular-three';
2
+ import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, Input } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, NgtKey, signalStore, } from 'angular-three';
4
4
  import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
5
- import { MeshBVH, SAH } from 'three-mesh-bvh';
5
+ import { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';
6
6
  import * as i0 from "@angular/core";
7
7
  extend({ MeshRefractionMaterial });
8
8
  const isCubeTexture = (def) => def && def.isCubeTexture;
9
- class NgtsMeshRefractionMaterial extends NgtSignalStore {
9
+ export class NgtsMeshRefractionMaterial {
10
10
  /** Environment map */
11
- set envMap(envMap) {
12
- this.set({ envMap });
11
+ set _envMap(envMap) {
12
+ this.inputs.set({ envMap });
13
13
  }
14
14
  /** Number of ray-cast bounces, it can be expensive to have too many, 2 */
15
- set bounces(bounces) {
16
- this.set({ bounces });
15
+ set _bounces(bounces) {
16
+ this.inputs.set({ bounces });
17
17
  }
18
18
  /** Refraction index, 2.4 */
19
- set ior(ior) {
20
- this.set({ ior });
19
+ set _ior(ior) {
20
+ this.inputs.set({ ior });
21
21
  }
22
22
  /** Fresnel (strip light), 0 */
23
- set fresnel(fresnel) {
24
- this.set({ fresnel });
23
+ set _fresnel(fresnel) {
24
+ this.inputs.set({ fresnel });
25
25
  }
26
26
  /** RGB shift intensity, can be expensive, 0 */
27
- set aberrationStrength(aberrationStrength) {
28
- this.set({ aberrationStrength });
27
+ set _aberrationStrength(aberrationStrength) {
28
+ this.inputs.set({ aberrationStrength });
29
29
  }
30
30
  /** Color, white */
31
- set color(color) {
32
- this.set({ color });
31
+ set _color(color) {
32
+ this.inputs.set({ color });
33
33
  }
34
34
  /** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */
35
- set fastChroma(fastChroma) {
36
- this.set({ fastChroma });
35
+ set _fastChroma(fastChroma) {
36
+ this.inputs.set({ fastChroma });
37
37
  }
38
- #store;
39
- #size;
40
- #envMap;
41
38
  constructor() {
42
- super({ aberrationStrength: 0, fastChroma: true });
39
+ this.inputs = signalStore({ aberrationStrength: 0, fastChroma: true });
43
40
  this.materialRef = injectNgtRef();
44
- this.refractionEnvMap = this.select('envMap');
45
- this.refractionBounces = this.select('bounces');
46
- this.refractionIor = this.select('ior');
47
- this.refractionFresnel = this.select('fresnel');
48
- this.refractionAberrationStrength = this.select('aberrationStrength');
49
- this.refractionColor = this.select('color');
50
- this.refractionFastChroma = this.select('fastChroma');
51
- this.#store = inject(NgtStore);
52
- this.#size = this.#store.select('size');
53
- this.#envMap = this.select('envMap');
41
+ this.envMap = this.inputs.select('envMap');
42
+ this.bounces = this.inputs.select('bounces');
43
+ this.ior = this.inputs.select('ior');
44
+ this.fresnel = this.inputs.select('fresnel');
45
+ this.aberrationStrength = this.inputs.select('aberrationStrength');
46
+ this.color = this.inputs.select('color');
47
+ this.fastChroma = this.inputs.select('fastChroma');
48
+ this.store = injectNgtStore();
49
+ this.size = this.store.select('size');
54
50
  this.defines = computed(() => {
55
- const envMap = this.#envMap();
51
+ const [envMap, aberrationStrength, fastChroma] = [this.envMap(), this.aberrationStrength(), this.fastChroma()];
56
52
  if (!envMap)
57
53
  return null;
58
- const aberrationStrength = this.refractionAberrationStrength();
59
- const fastChroma = this.refractionFastChroma();
60
54
  const temp = {};
61
55
  // Sampler2D and SamplerCube need different defines
62
56
  const isCubeMap = isCubeTexture(envMap);
@@ -78,91 +72,100 @@ class NgtsMeshRefractionMaterial extends NgtSignalStore {
78
72
  temp['FAST_CHROMA'] = '';
79
73
  return temp;
80
74
  });
81
- this.resolution = computed(() => [this.#size().width, this.#size().height]);
75
+ this.resolution = computed(() => [this.size().width, this.size().height]);
82
76
  injectBeforeRender(({ camera }) => {
83
- if (this.materialRef.nativeElement) {
84
- this.materialRef.nativeElement.viewMatrixInverse = camera.matrixWorld;
85
- this.materialRef.nativeElement.projectionMatrixInverse = camera.projectionMatrixInverse;
77
+ const material = this.materialRef.nativeElement;
78
+ if (material) {
79
+ material.viewMatrixInverse = camera.matrixWorld;
80
+ material.projectionMatrixInverse = camera.projectionMatrixInverse;
86
81
  }
87
82
  });
88
- this.#setupGeometry();
83
+ this.setupGeometry();
89
84
  }
90
- #setupGeometry() {
85
+ setupGeometry() {
91
86
  effect(() => {
92
87
  const material = this.materialRef.nativeElement;
93
88
  if (!material)
94
89
  return;
95
- const geometry = getLocalState(material).parent()?.geometry;
90
+ const geometry = getLocalState(material).parent?.()?.geometry;
96
91
  if (geometry) {
97
- material.bvh.updateFrom(new MeshBVH(geometry.toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
92
+ material.bvh = new MeshBVHUniformStruct();
93
+ material.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
98
94
  }
99
95
  });
100
96
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
103
- <ngt-mesh-refraction-material
104
- *ngIf="defines() as defines"
105
- [ref]="materialRef"
106
- [defines]="defines"
107
- [resolution]="resolution()"
108
- [aberrationStrength]="refractionAberrationStrength()"
109
- [envMap]="refractionEnvMap()"
110
- [bounces]="refractionBounces()"
111
- [ior]="refractionIor()"
112
- [fresnel]="refractionFresnel()"
113
- [color]="refractionColor()"
114
- [fastChroma]="refractionFastChroma()"
115
- ngtCompound
116
- attach="material"
117
- >
118
- <ng-content />
119
- </ngt-mesh-refraction-material>
120
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", _envMap: ["envMap", "_envMap"], _bounces: ["bounces", "_bounces"], _ior: ["ior", "_ior"], _fresnel: ["fresnel", "_fresnel"], _aberrationStrength: ["aberrationStrength", "_aberrationStrength"], _color: ["color", "_color"], _fastChroma: ["fastChroma", "_fastChroma"] }, ngImport: i0, template: `
99
+ <ngt-mesh-refraction-material
100
+ *ngIf="defines() as defines"
101
+ [key]="defines"
102
+ [ref]="materialRef"
103
+ [defines]="defines"
104
+ [resolution]="resolution()"
105
+ [aberrationStrength]="aberrationStrength()"
106
+ [envMap]="envMap()"
107
+ [bounces]="bounces()"
108
+ [ior]="ior()"
109
+ [fresnel]="fresnel()"
110
+ [color]="color()"
111
+ [fastChroma]="fastChroma()"
112
+ ngtCompound
113
+ attach="material"
114
+ >
115
+ <ng-content />
116
+ </ngt-mesh-refraction-material>
117
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
121
118
  }
122
- export { NgtsMeshRefractionMaterial };
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
124
120
  type: Component,
125
121
  args: [{
126
122
  selector: 'ngts-mesh-refraction-material',
127
123
  standalone: true,
128
124
  template: `
129
- <ngt-mesh-refraction-material
130
- *ngIf="defines() as defines"
131
- [ref]="materialRef"
132
- [defines]="defines"
133
- [resolution]="resolution()"
134
- [aberrationStrength]="refractionAberrationStrength()"
135
- [envMap]="refractionEnvMap()"
136
- [bounces]="refractionBounces()"
137
- [ior]="refractionIor()"
138
- [fresnel]="refractionFresnel()"
139
- [color]="refractionColor()"
140
- [fastChroma]="refractionFastChroma()"
141
- ngtCompound
142
- attach="material"
143
- >
144
- <ng-content />
145
- </ngt-mesh-refraction-material>
146
- `,
147
- imports: [NgIf],
125
+ <ngt-mesh-refraction-material
126
+ *ngIf="defines() as defines"
127
+ [key]="defines"
128
+ [ref]="materialRef"
129
+ [defines]="defines"
130
+ [resolution]="resolution()"
131
+ [aberrationStrength]="aberrationStrength()"
132
+ [envMap]="envMap()"
133
+ [bounces]="bounces()"
134
+ [ior]="ior()"
135
+ [fresnel]="fresnel()"
136
+ [color]="color()"
137
+ [fastChroma]="fastChroma()"
138
+ ngtCompound
139
+ attach="material"
140
+ >
141
+ <ng-content />
142
+ </ngt-mesh-refraction-material>
143
+ `,
144
+ imports: [NgIf, NgtKey],
148
145
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
149
146
  }]
150
147
  }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
151
148
  type: Input
152
- }], envMap: [{
149
+ }], _envMap: [{
153
150
  type: Input,
154
- args: [{ required: true }]
155
- }], bounces: [{
156
- type: Input
157
- }], ior: [{
158
- type: Input
159
- }], fresnel: [{
160
- type: Input
161
- }], aberrationStrength: [{
162
- type: Input
163
- }], color: [{
164
- type: Input
165
- }], fastChroma: [{
166
- type: Input
151
+ args: [{ required: true, alias: 'envMap' }]
152
+ }], _bounces: [{
153
+ type: Input,
154
+ args: [{ alias: 'bounces' }]
155
+ }], _ior: [{
156
+ type: Input,
157
+ args: [{ alias: 'ior' }]
158
+ }], _fresnel: [{
159
+ type: Input,
160
+ args: [{ alias: 'fresnel' }]
161
+ }], _aberrationStrength: [{
162
+ type: Input,
163
+ args: [{ alias: 'aberrationStrength' }]
164
+ }], _color: [{
165
+ type: Input,
166
+ args: [{ alias: 'color' }]
167
+ }], _fastChroma: [{
168
+ type: Input,
169
+ args: [{ alias: 'fastChroma' }]
167
170
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFOUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0QkFBNEI7SUFDNUIs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SU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgZWZmZWN0LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0UmVmLCBOZ3RTaWduYWxTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBNZXNoQlZILCBTQUggfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZSB7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgYm91bmNlczogbnVtYmVyO1xuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBpb3I6IG51bWJlcjtcbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgZnJlc25lbDogbnVtYmVyO1xuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgZmFzdENocm9tYTogYm9vbGVhbjtcbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuICAgICAgICAgICAgW2FiZXJyYXRpb25TdHJlbmd0aF09XCJyZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJyZWZyYWN0aW9uRW52TWFwKClcIlxuICAgICAgICAgICAgW2JvdW5jZXNdPVwicmVmcmFjdGlvbkJvdW5jZXMoKVwiXG4gICAgICAgICAgICBbaW9yXT1cInJlZnJhY3Rpb25Jb3IoKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJyZWZyYWN0aW9uRnJlc25lbCgpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJyZWZyYWN0aW9uQ29sb3IoKVwiXG4gICAgICAgICAgICBbZmFzdENocm9tYV09XCJyZWZyYWN0aW9uRmFzdENocm9tYSgpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBlbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgQElucHV0KCkgc2V0IGJvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYm91bmNlcyB9KTtcbiAgICB9XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIEBJbnB1dCgpIHNldCBpb3IoaW9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpb3IgfSk7XG4gICAgfVxuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJlc25lbChmcmVzbmVsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmVzbmVsIH0pO1xuICAgIH1cbiAgICAvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBhYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG4gICAgfVxuICAgIC8qKiBDb2xvciwgd2hpdGUgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFzdENocm9tYShmYXN0Q2hyb21hOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFzdENocm9tYSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZyYWN0aW9uRW52TWFwID0gdGhpcy5zZWxlY3QoJ2Vudk1hcCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Cb3VuY2VzID0gdGhpcy5zZWxlY3QoJ2JvdW5jZXMnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uSW9yID0gdGhpcy5zZWxlY3QoJ2lvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GcmVzbmVsID0gdGhpcy5zZWxlY3QoJ2ZyZXNuZWwnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Db2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GYXN0Q2hyb21hID0gdGhpcy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNlbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG5cbiAgICByZWFkb25seSBkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZNYXAgPSB0aGlzLiNlbnZNYXAoKTtcbiAgICAgICAgaWYgKCFlbnZNYXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMucmVmcmFjdGlvbkFiZXJyYXRpb25TdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBmYXN0Q2hyb21hID0gdGhpcy5yZWZyYWN0aW9uRmFzdENocm9tYSgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLiNzaXplKCkud2lkdGgsIHRoaXMuI3NpemUoKS5oZWlnaHRdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpIS52aWV3TWF0cml4SW52ZXJzZSA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgICNzZXR1cEdlb21ldHJ5KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudCgpPy5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVzaEJWSChnZW9tZXRyeS50b05vbkluZGV4ZWQoKSwgeyBsYXp5R2VuZXJhdGlvbjogZmFsc2UsIHN0cmF0ZWd5OiBTQUggfSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQ04sTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxNQUFNLEVBQ04sV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR3BFLE1BQU0sQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQTRCbkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFzQyxFQUE0QixFQUFFLENBQzFGLEdBQUcsSUFBSyxHQUF5QixDQUFDLGFBQWEsQ0FBQztBQTRCakQsTUFBTSxPQUFPLDBCQUEwQjtJQUl0QyxzQkFBc0I7SUFDdEIsSUFBZ0QsT0FBTyxDQUFDLE1BQXlDO1FBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsMEVBQTBFO0lBQzFFLElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJ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QyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFJVCxRQUFRO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFJRSxJQUFJO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFJVSxRQUFRO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFJaUIsbUJBQW1CO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO2dCQUlQLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlXLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRleHRlbmQsXG5cdGdldExvY2FsU3RhdGUsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0Tmd0S2V5LFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RTaGFkZXJNYXRlcmlhbCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgTWVzaEJWSCwgTWVzaEJWSFVuaWZvcm1TdHJ1Y3QsIFNBSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcbmltcG9ydCB0eXBlIHsgTmd0c01lc2hUcmFubWlzc2lvbk1hdGVyaWFsU3RhdGUgfSBmcm9tICcuLi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbC9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsU3RhdGUgPSB7XG5cdC8qKiBFbnZpcm9ubWVudCBtYXAgKi9cblx0ZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmU7XG5cdC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG5cdGJvdW5jZXM6IG51bWJlcjtcblx0LyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuXHRpb3I6IG51bWJlcjtcblx0LyoqIEZyZXNuZWwgKHN0cmlwIGxpZ2h0KSwgMCAqL1xuXHRmcmVzbmVsOiBudW1iZXI7XG5cdC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG5cdGFiZXJyYXRpb25TdHJlbmd0aDogbnVtYmVyO1xuXHQvKiogQ29sb3IsIHdoaXRlICovXG5cdGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHQvKiogSWYgdGhpcyBpcyBvbiBpdCB1c2VzIGZld2VyIHJheSBjYXN0cyBmb3IgdGhlIFJHQiBzaGlmdCBzYWNyaWZpY2luZyBwaHlzaWNhbCBhY2N1cmFjeSwgdHJ1ZSAqL1xuXHRmYXN0Q2hyb21hOiBib29sZWFuO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3Qtc2hhZGVyLW1hdGVyaWFsXG5cdFx0ICovXG5cdFx0J25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJzogTmd0c01lc2hUcmFubWlzc2lvbk1hdGVyaWFsU3RhdGUgJiBOZ3RTaGFkZXJNYXRlcmlhbDtcblx0fVxufVxuXG5jb25zdCBpc0N1YmVUZXh0dXJlID0gKGRlZjogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlKTogZGVmIGlzIFRIUkVFLkN1YmVUZXh0dXJlID0+XG5cdGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWxcblx0XHRcdCpuZ0lmPVwiZGVmaW5lcygpIGFzIGRlZmluZXNcIlxuXHRcdFx0W2tleV09XCJkZWZpbmVzXCJcblx0XHRcdFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuXHRcdFx0W2RlZmluZXNdPVwiZGVmaW5lc1wiXG5cdFx0XHRbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuXHRcdFx0W2FiZXJyYXRpb25TdHJlbmd0aF09XCJhYmVycmF0aW9uU3RyZW5ndGgoKVwiXG5cdFx0XHRbZW52TWFwXT1cImVudk1hcCgpXCJcblx0XHRcdFtib3VuY2VzXT1cImJvdW5jZXMoKVwiXG5cdFx0XHRbaW9yXT1cImlvcigpXCJcblx0XHRcdFtmcmVzbmVsXT1cImZyZXNuZWwoKVwiXG5cdFx0XHRbY29sb3JdPVwiY29sb3IoKVwiXG5cdFx0XHRbZmFzdENocm9tYV09XCJmYXN0Q2hyb21hKClcIlxuXHRcdFx0bmd0Q29tcG91bmRcblx0XHRcdGF0dGFjaD1cIm1hdGVyaWFsXCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cblx0YCxcblx0aW1wb3J0czogW05nSWYsIE5ndEtleV0sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWwge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsU3RhdGU+KHsgYWJlcnJhdGlvblN0cmVuZ3RoOiAwLCBmYXN0Q2hyb21hOiB0cnVlIH0pO1xuXG5cdEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG5cdC8qKiBFbnZpcm9ubWVudCBtYXAgKi9cblx0QElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAnZW52TWFwJyB9KSBzZXQgX2Vudk1hcChlbnZNYXA6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGVudk1hcCB9KTtcblx0fVxuXHQvKiogTnVtYmVyIG9mIHJheS1jYXN0IGJvdW5jZXMsIGl0IGNhbiBiZSBleHBlbnNpdmUgdG8gaGF2ZSB0b28gbWFueSwgMiAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2JvdW5jZXMnIH0pIHNldCBfYm91bmNlcyhib3VuY2VzOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBib3VuY2VzIH0pO1xuXHR9XG5cdC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cblx0QElucHV0KHsgYWxpYXM6ICdpb3InIH0pIHNldCBfaW9yKGlvcjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgaW9yIH0pO1xuXHR9XG5cdC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdmcmVzbmVsJyB9KSBzZXQgX2ZyZXNuZWwoZnJlc25lbDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZnJlc25lbCB9KTtcblx0fVxuXHQvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2FiZXJyYXRpb25TdHJlbmd0aCcgfSkgc2V0IF9hYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG5cdH1cblx0LyoqIENvbG9yLCB3aGl0ZSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yJyB9KSBzZXQgX2NvbG9yKGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3IgfSk7XG5cdH1cblx0LyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cblx0QElucHV0KHsgYWxpYXM6ICdmYXN0Q2hyb21hJyB9KSBzZXQgX2Zhc3RDaHJvbWEoZmFzdENocm9tYTogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZhc3RDaHJvbWEgfSk7XG5cdH1cblxuXHRlbnZNYXAgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2Vudk1hcCcpO1xuXHRib3VuY2VzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdib3VuY2VzJyk7XG5cdGlvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnaW9yJyk7XG5cdGZyZXNuZWwgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2ZyZXNuZWwnKTtcblx0YWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdhYmVycmF0aW9uU3RyZW5ndGgnKTtcblx0Y29sb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yJyk7XG5cdGZhc3RDaHJvbWEgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtlbnZNYXAsIGFiZXJyYXRpb25TdHJlbmd0aCwgZmFzdENocm9tYV0gPSBbdGhpcy5lbnZNYXAoKSwgdGhpcy5hYmVycmF0aW9uU3RyZW5ndGgoKSwgdGhpcy5mYXN0Q2hyb21hKCldO1xuXHRcdGlmICghZW52TWFwKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXHRcdC8vIFNhbXBsZXIyRCBhbmQgU2FtcGxlckN1YmUgbmVlZCBkaWZmZXJlbnQgZGVmaW5lc1xuXHRcdGNvbnN0IGlzQ3ViZU1hcCA9IGlzQ3ViZVRleHR1cmUoZW52TWFwKTtcblx0XHRjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG5cdFx0Y29uc3QgY3ViZVNpemUgPSB3IC8gNDtcblx0XHRjb25zdCBfbG9kTWF4ID0gTWF0aC5mbG9vcihNYXRoLmxvZzIoY3ViZVNpemUpKTtcblx0XHRjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcblx0XHRjb25zdCB3aWR0aCA9IDMgKiBNYXRoLm1heChfY3ViZVNpemUsIDE2ICogNyk7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gNCAqIF9jdWJlU2l6ZTtcblx0XHRpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG5cdFx0dGVtcFsnQ1VCRVVWX1RFWEVMX1dJRFRIJ10gPSBgJHsxLjAgLyB3aWR0aH1gO1xuXHRcdHRlbXBbJ0NVQkVVVl9URVhFTF9IRUlHSFQnXSA9IGAkezEuMCAvIGhlaWdodH1gO1xuXHRcdHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcblx0XHQvLyBBZGQgZGVmaW5lcyBmcm9tIGNocm9tYXRpYyBhYmVycmF0aW9uXG5cdFx0aWYgKGFiZXJyYXRpb25TdHJlbmd0aCA+IDApIHRlbXBbJ0NIUk9NQVRJQ19BQkVSUkFUSU9OUyddID0gJyc7XG5cdFx0aWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcblx0XHRyZXR1cm4gdGVtcDtcblx0fSk7XG5cdHJlc29sdXRpb24gPSBjb21wdXRlZCgoKSA9PiBbdGhpcy5zaXplKCkud2lkdGgsIHRoaXMuc2l6ZSgpLmhlaWdodF0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBjYW1lcmEgfSkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAobWF0ZXJpYWwpIHtcblx0XHRcdFx0KG1hdGVyaWFsIGFzIGFueSkudmlld01hdHJpeEludmVyc2UgPSBjYW1lcmEubWF0cml4V29ybGQ7XG5cdFx0XHRcdChtYXRlcmlhbCBhcyBhbnkpLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuc2V0dXBHZW9tZXRyeSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXR1cEdlb21ldHJ5KCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCkucGFyZW50Py4oKT8uZ2VvbWV0cnk7XG5cdFx0XHRpZiAoZ2VvbWV0cnkpIHtcblx0XHRcdFx0KG1hdGVyaWFsIGFzIGFueSkuYnZoID0gbmV3IE1lc2hCVkhVbmlmb3JtU3RydWN0KCk7XG5cdFx0XHRcdChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuXHRcdFx0XHRcdG5ldyBNZXNoQlZIKGdlb21ldHJ5LmNsb25lKCkudG9Ob25JbmRleGVkKCksIHsgbGF6eUdlbmVyYXRpb246IGZhbHNlLCBzdHJhdGVneTogU0FIIH0gYXMgYW55KSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19