supervision 0.2.5 → 0.2.6

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 (166) hide show
  1. package/dist/depth-preview-probe-DG7McQEN.js +314 -0
  2. package/dist/depth-preview-probe-DG7McQEN.js.map +1 -0
  3. package/dist/depth-preview-track-BvgwNEE9.js +612 -0
  4. package/dist/depth-preview-track-BvgwNEE9.js.map +1 -0
  5. package/dist/detections/chunked-detection-frame-source.d.ts.map +1 -1
  6. package/dist/index.d.ts +4 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +9504 -4719
  9. package/dist/index.js.map +1 -1
  10. package/dist/mask-preparation.worker.js +658 -21
  11. package/dist/mask-preparation.worker.js.map +1 -1
  12. package/dist/media/decoder-deadline.d.ts +18 -0
  13. package/dist/media/decoder-deadline.d.ts.map +1 -0
  14. package/dist/media/depth-preview-probe.d.ts +65 -0
  15. package/dist/media/depth-preview-probe.d.ts.map +1 -0
  16. package/dist/media/depth-preview-track.d.ts +96 -0
  17. package/dist/media/depth-preview-track.d.ts.map +1 -0
  18. package/dist/media/media-normalization.d.ts.map +1 -1
  19. package/dist/media/media-source.d.ts +7 -0
  20. package/dist/media/media-source.d.ts.map +1 -1
  21. package/dist/media/mediabunny-frame-clock.d.ts +7 -0
  22. package/dist/media/mediabunny-frame-clock.d.ts.map +1 -0
  23. package/dist/media/mediabunny-media-source.d.ts +3 -0
  24. package/dist/media/mediabunny-media-source.d.ts.map +1 -1
  25. package/dist/media/track-frame-index.d.ts +14 -0
  26. package/dist/media/track-frame-index.d.ts.map +1 -0
  27. package/dist/media/video-engine-media-source.d.ts.map +1 -1
  28. package/dist/media/video-engine-media-source.js +1 -1
  29. package/dist/render-preparation/depth/clip-preview.d.ts +41 -0
  30. package/dist/render-preparation/depth/clip-preview.d.ts.map +1 -0
  31. package/dist/render-preparation/depth/clip-timing.d.ts +18 -0
  32. package/dist/render-preparation/depth/clip-timing.d.ts.map +1 -0
  33. package/dist/render-preparation/depth/clip.d.ts +14 -0
  34. package/dist/render-preparation/depth/clip.d.ts.map +1 -0
  35. package/dist/render-preparation/depth/exact-at-rest.d.ts +44 -0
  36. package/dist/render-preparation/depth/exact-at-rest.d.ts.map +1 -0
  37. package/dist/render-preparation/depth/exact-playback.d.ts +40 -0
  38. package/dist/render-preparation/depth/exact-playback.d.ts.map +1 -0
  39. package/dist/render-preparation/depth/files.d.ts +55 -0
  40. package/dist/render-preparation/depth/files.d.ts.map +1 -0
  41. package/dist/render-preparation/depth/frame-decode.d.ts +20 -0
  42. package/dist/render-preparation/depth/frame-decode.d.ts.map +1 -0
  43. package/dist/render-preparation/depth/frame-preparer.d.ts +51 -0
  44. package/dist/render-preparation/depth/frame-preparer.d.ts.map +1 -0
  45. package/dist/render-preparation/depth/frame-window.d.ts +146 -0
  46. package/dist/render-preparation/depth/frame-window.d.ts.map +1 -0
  47. package/dist/render-preparation/depth/options.d.ts +37 -0
  48. package/dist/render-preparation/depth/options.d.ts.map +1 -0
  49. package/dist/render-preparation/depth/png16.d.ts +40 -0
  50. package/dist/render-preparation/depth/png16.d.ts.map +1 -0
  51. package/dist/render-preparation/depth/preview-luma-copier.d.ts +12 -0
  52. package/dist/render-preparation/depth/preview-luma-copier.d.ts.map +1 -0
  53. package/dist/render-preparation/depth/preview-luma.d.ts +48 -0
  54. package/dist/render-preparation/depth/preview-luma.d.ts.map +1 -0
  55. package/dist/render-preparation/depth/source.d.ts +123 -0
  56. package/dist/render-preparation/depth/source.d.ts.map +1 -0
  57. package/dist/render-preparation/depth/worker-protocol.d.ts +76 -0
  58. package/dist/render-preparation/depth/worker-protocol.d.ts.map +1 -0
  59. package/dist/render-preparation/playhead-motion.d.ts +67 -0
  60. package/dist/render-preparation/playhead-motion.d.ts.map +1 -0
  61. package/dist/render-preparation/prepared-render-window.d.ts +12 -0
  62. package/dist/render-preparation/prepared-render-window.d.ts.map +1 -1
  63. package/dist/renderers/depth-textures.d.ts +79 -0
  64. package/dist/renderers/depth-textures.d.ts.map +1 -0
  65. package/dist/renderers/id-mask-stroke-coverage.d.ts +3 -0
  66. package/dist/renderers/id-mask-stroke-coverage.d.ts.map +1 -0
  67. package/dist/renderers/media-renderer-core.d.ts.map +1 -1
  68. package/dist/renderers/media-renderer-scene.d.ts +14 -1
  69. package/dist/renderers/media-renderer-scene.d.ts.map +1 -1
  70. package/dist/renderers/pixi-batch-texture-bindings.d.ts +9 -0
  71. package/dist/renderers/pixi-batch-texture-bindings.d.ts.map +1 -0
  72. package/dist/renderers/pixi-depth-layer.d.ts +76 -0
  73. package/dist/renderers/pixi-depth-layer.d.ts.map +1 -0
  74. package/dist/renderers/pixi-depth-shader.d.ts +76 -0
  75. package/dist/renderers/pixi-depth-shader.d.ts.map +1 -0
  76. package/dist/renderers/pixi-focus-layer.d.ts +1 -0
  77. package/dist/renderers/pixi-focus-layer.d.ts.map +1 -1
  78. package/dist/renderers/pixi-frame-present.d.ts +1 -0
  79. package/dist/renderers/pixi-frame-present.d.ts.map +1 -1
  80. package/dist/renderers/pixi-id-mask-shader.d.ts +1 -0
  81. package/dist/renderers/pixi-id-mask-shader.d.ts.map +1 -1
  82. package/dist/renderers/pixi-interaction-layer.d.ts +1 -1
  83. package/dist/renderers/pixi-interaction-layer.d.ts.map +1 -1
  84. package/dist/renderers/pixi-interaction-presentation-layer.d.ts +1 -0
  85. package/dist/renderers/pixi-interaction-presentation-layer.d.ts.map +1 -1
  86. package/dist/renderers/pixi-mask-halo.d.ts +1 -0
  87. package/dist/renderers/pixi-mask-halo.d.ts.map +1 -1
  88. package/dist/renderers/pixi-mask-layer.d.ts +4 -0
  89. package/dist/renderers/pixi-mask-layer.d.ts.map +1 -1
  90. package/dist/renderers/pixi-media-scene.d.ts.map +1 -1
  91. package/dist/renderers/pixi-region-coverage-mask.d.ts +1 -0
  92. package/dist/renderers/pixi-region-coverage-mask.d.ts.map +1 -1
  93. package/dist/renderers/pixi-region-layer.d.ts +1 -0
  94. package/dist/renderers/pixi-region-layer.d.ts.map +1 -1
  95. package/dist/renderers/pixi-scene-layer-slot.d.ts +1 -0
  96. package/dist/renderers/pixi-scene-layer-slot.d.ts.map +1 -1
  97. package/dist/renderers/prepared-annotation-window.d.ts +1 -0
  98. package/dist/renderers/prepared-annotation-window.d.ts.map +1 -1
  99. package/dist/renderers/render-preparation-report.d.ts +23 -0
  100. package/dist/renderers/render-preparation-report.d.ts.map +1 -0
  101. package/dist/sessions/media-session-defaults.d.ts.map +1 -1
  102. package/dist/sessions/media-session-state.d.ts.map +1 -1
  103. package/dist/sessions/media-session.d.ts.map +1 -1
  104. package/dist/tracking.worker.js +64 -0
  105. package/dist/tracking.worker.js.map +1 -1
  106. package/dist/types/media-depth.d.ts +55 -0
  107. package/dist/types/media-depth.d.ts.map +1 -0
  108. package/dist/types/media-renderer.d.ts +19 -0
  109. package/dist/types/media-renderer.d.ts.map +1 -1
  110. package/dist/types/media-session.d.ts +19 -0
  111. package/dist/types/media-session.d.ts.map +1 -1
  112. package/dist/types/render-preparation.d.ts +105 -3
  113. package/dist/types/render-preparation.d.ts.map +1 -1
  114. package/dist/{video-engine-media-source-DR-x1UfK.js → video-engine-media-source-DOFsuGS4.js} +35 -29
  115. package/dist/video-engine-media-source-DOFsuGS4.js.map +1 -0
  116. package/dist/web-video-engine/analysis.js +6 -43
  117. package/dist/web-video-engine/cache-budget.d.ts +4 -7
  118. package/dist/web-video-engine/constants.d.ts +3 -4
  119. package/dist/web-video-engine/create-scrub-cursor.d.ts +1 -0
  120. package/dist/web-video-engine/decode-resolution-fynpRIAG.js +109 -0
  121. package/dist/web-video-engine/decode-scheduler.d.ts +1 -0
  122. package/dist/web-video-engine/engine-core.d.ts +4 -2
  123. package/dist/web-video-engine/engine.js +8 -6
  124. package/dist/web-video-engine/engine.worker.js +164 -66
  125. package/dist/web-video-engine/frame-cache.d.ts +9 -0
  126. package/dist/web-video-engine/frame-index.d.ts +1 -0
  127. package/dist/web-video-engine/frame-index.js +97 -0
  128. package/dist/web-video-engine/{frame-timeline-DreEwsRY.js → frame-timeline-CYgzzmpA.js} +1 -109
  129. package/dist/web-video-engine/frame-timeline-reader.d.ts +21 -0
  130. package/dist/web-video-engine/video-engine.d.ts +9 -4
  131. package/node_modules/supervision-js-core/THIRD_PARTY_NOTICES.md +132 -0
  132. package/node_modules/supervision-js-core/dist/detections/buffered-detection-timeline.d.ts.map +1 -1
  133. package/node_modules/supervision-js-core/dist/index.d.ts +7 -2
  134. package/node_modules/supervision-js-core/dist/index.d.ts.map +1 -1
  135. package/node_modules/supervision-js-core/dist/index.js +1128 -59
  136. package/node_modules/supervision-js-core/dist/index.js.map +1 -1
  137. package/node_modules/supervision-js-core/dist/interactions/annotation-editing-engine.d.ts.map +1 -1
  138. package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts +2 -2
  139. package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts.map +1 -1
  140. package/node_modules/supervision-js-core/dist/styles/annotation-renderer-presentation.d.ts.map +1 -1
  141. package/node_modules/supervision-js-core/dist/styles/annotation-renderer-registry.d.ts.map +1 -1
  142. package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts +50 -3
  143. package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts.map +1 -1
  144. package/node_modules/supervision-js-core/dist/types/depth-map.d.ts +203 -0
  145. package/node_modules/supervision-js-core/dist/types/depth-map.d.ts.map +1 -0
  146. package/node_modules/supervision-js-core/dist/types/editing.d.ts +2 -0
  147. package/node_modules/supervision-js-core/dist/types/editing.d.ts.map +1 -1
  148. package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts +3 -0
  149. package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts.map +1 -1
  150. package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts +91 -0
  151. package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts.map +1 -0
  152. package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts +30 -0
  153. package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts.map +1 -0
  154. package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts +16 -0
  155. package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts.map +1 -0
  156. package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts +23 -0
  157. package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts.map +1 -0
  158. package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts +14 -0
  159. package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts.map +1 -0
  160. package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts +21 -0
  161. package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts.map +1 -1
  162. package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts +3 -7
  163. package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts.map +1 -1
  164. package/node_modules/supervision-js-core/package.json +2 -1
  165. package/package.json +6 -1
  166. package/dist/video-engine-media-source-DR-x1UfK.js.map +0 -1
@@ -0,0 +1,314 @@
1
+ import { o as openDepthPreviewTrack, w as withinDecoderDeadline, D as DECODER_SUPPORT_MILLISECONDS } from './depth-preview-track-BvgwNEE9.js';
2
+ import 'supervision-js-core';
3
+ import './video-engine-media-source-DOFsuGS4.js';
4
+
5
+ /**
6
+ * Every 8-bit code from 0 to 255 as a flat 16x16 block of one 256x256 frame
7
+ * (code c at block row c >> 4, column c & 15), with neutral chroma, two
8
+ * frames. It is encoded the way a depth producer writes a full-range
9
+ * preview, only at a quantiser low enough that a flat block decodes exactly:
10
+ *
11
+ * ```sh
12
+ * ffmpeg -f rawvideo -pix_fmt yuv420p -s 256x256 -r 24 -i ramp.yuv \
13
+ * -c:v libx264 -preset medium -tune psnr -qp 2 -g 24 -keyint_min 24 \
14
+ * -sc_threshold 0 \
15
+ * -bsf:v "h264_metadata=video_full_range_flag=1,filter_units=remove_types=6" \
16
+ * -movflags +faststart -map_metadata -1 -fflags +bitexact \
17
+ * -flags:v +bitexact probe.mp4
18
+ * ```
19
+ *
20
+ * ffmpeg's own decoder returns every block exactly.
21
+ */
22
+ const PROBE_MP4_BASE64 = [
23
+ "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAL8bW9vdgAAAGxtdmhkAAAAAAAA",
24
+ "AAAAAAAAAAAD6AAAAFQAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA",
25
+ "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAkt0cmFrAAAAXHRr",
26
+ "aGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA",
27
+ "AAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAQAAAAEAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAA",
28
+ "AAEAAABUAAAAAAABAAAAAAHDbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAwAAAABABVxAAA",
29
+ "AAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABbm1pbmYA",
30
+ "AAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAA",
31
+ "AQAAAS5zdGJsAAAArnN0c2QAAAAAAAAAAQAAAJ5hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAA",
32
+ "AAAAAQABAABIAAAASAAAAAAAAAABDExhdmMgbGlieDI2NAAAAAAAAAAAAAAAAAAAAAAAAAAA",
33
+ "GP//AAAANGF2Y0MBZAAN/+EAGGdkAA2s2UEAhpsgAAADACAAAAYB4oUywAEABWjr4GPL/fj4",
34
+ "AAAAABRidHJ0AAAAAAAAjQAAAAAAAAAAGHN0dHMAAAAAAAAAAQAAAAIAAAIAAAAAFHN0c3MA",
35
+ "AAAAAAAAAQAAAAEAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAA",
36
+ "AAAAAAIAAAFoAAAAEAAAABRzdGNvAAAAAAAAAAEAAAMsAAAAPXVkdGEAAAA1bWV0YQAAAAAA",
37
+ "AAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAIaWxzdAAAAAhmcmVlAAABgG1k",
38
+ "YXQAAAFkZYiEAKv+99S3zLLwRH61UXVMoOUfJ2IoyzZhkK0M2aCbq+RlNHkN8HbZEszwr1Bo",
39
+ "EQabpJoiELEi/DUJIZR8VFdLAwnzJPmenpFznALFwOAa3CUmo3Wm8orkdX/5S83y+L4wR2WP",
40
+ "m8Tp9N/jcn8kKaHtW3x1rNMH7Gc3GMC5w8IZSZdG3nNwTS3OL2b/5ox9w1Tu5w7l9U7hwTtJ",
41
+ "zDO6fxrHDTqNAhwB7hjlAcy9s3lR97zTanfcTfaAMDPsy6uEnZx26jYjLoCg8G0iSNFqnWKu",
42
+ "pU4Quc/3qPD0hIbjaDTq1zXRYr2ZbIW+POv3MoI4ae2lsuhEcYK1wiS1GSCuMwtYU77ib+4u",
43
+ "Oy3qZpnBieWR67ec8BkQQAD3DHKA5l7ZvKj73meUXYDcJDcbQadWua6LFezLZC3x51+5ljHD",
44
+ "T20tl0IjjBWuESWoyQVxmFsSnfcTf3Fx2W9TNM4MTyyPXbznu4EAAAAMQZohbGv+1qVQAAXE",
45
+ ].join("");
46
+ /**
47
+ * The same 256 blocks written as a TV-range preview is: flagged limited
48
+ * range with BT.709 colour, from the same `ramp.yuv`:
49
+ *
50
+ * ```sh
51
+ * TV="-color_range tv -colorspace bt709 -color_primaries bt709 -color_trc bt709"
52
+ * ffmpeg -f rawvideo -pix_fmt yuv420p $TV -s 256x256 -r 24 -i ramp.yuv \
53
+ * -c:v libx264 -preset medium -tune psnr -qp 2 -g 24 -keyint_min 24 \
54
+ * -sc_threshold 0 $TV \
55
+ * -bsf:v "h264_metadata=video_full_range_flag=0,filter_units=remove_types=6" \
56
+ * -movflags +faststart -map_metadata -1 -fflags +bitexact \
57
+ * -flags:v +bitexact probe-tv.mp4
58
+ * ```
59
+ *
60
+ * ffmpeg's own decoder returns every block exactly, footroom and headroom
61
+ * included.
62
+ */
63
+ const TV_PROBE_MP4_BASE64 = [
64
+ "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAMSbW9vdgAAAGxtdmhkAAAAAAAA",
65
+ "AAAAAAAAAAAD6AAAAFQAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA",
66
+ "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAmF0cmFrAAAAXHRr",
67
+ "aGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA",
68
+ "AAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAQAAAAEAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAA",
69
+ "AAEAAABUAAAAAAABAAAAAAHZbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAwAAAABABVxAAA",
70
+ "AAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABhG1pbmYA",
71
+ "AAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAA",
72
+ "AQAAAURzdGJsAAAAxHN0c2QAAAAAAAAAAQAAALRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAA",
73
+ "AAAAAQABAABIAAAASAAAAAAAAAABDExhdmMgbGlieDI2NAAAAAAAAAAAAAAAAAAAAAAAAAAA",
74
+ "GP//AAAAN2F2Y0MBZAAN/+EAG2dkAA2s2UEAhpqAgICgAAADACAAAAYB4oUywAEABWjr4GPL",
75
+ "/fj4AAAAABNjb2xybmNseAABAAEAAQAAAAAUYnRydAAAAAAAAI0AAAAAAAAAABhzdHRzAAAA",
76
+ "AAAAAAEAAAACAAACAAAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEA",
77
+ "AAACAAAAAQAAABxzdHN6AAAAAAAAAAAAAAACAAABaAAAABAAAAAUc3RjbwAAAAAAAAABAAAD",
78
+ "QgAAAD11ZHRhAAAANW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAA",
79
+ "AAAACGlsc3QAAAAIZnJlZQAAAYBtZGF0AAABZGWIhACr/vfUt8yy8ER+tVF1TKDlHydiKMs2",
80
+ "YZCtDNmgm6vkZTR5DfB22RLM8K9QaBEGm6SaIhCxIvw1CSGUfFRXSwMJ8yT5np6Rc5wCxcDg",
81
+ "GtwlJqN1pvKK5HV/+UvN8vi+MEdlj5vE6fTf43J/JCmh7Vt8dazTB+xnNxjAucPCGUmXRt5z",
82
+ "cE0tzi9m/+aMfcNU7ucO5fVO4cE7Scwzun8axw06jQIcAe4Y5QHMvbN5Ufe802p33E32gDAz",
83
+ "7MurhJ2cduo2Iy6AoPBtIkjRap1irqVOELnP96jw9ISG42g06tc10WK9mWyFvjzr9zKCOGnt",
84
+ "pbLoRHGCtcIktRkgrjMLWFO+4m/uLjst6maZwYnlkeu3nPAZEEAA9wxygOZe2byo+95nlF2A",
85
+ "3CQ3G0GnVrmuixXsy2Qt8edfuZYxw09tLZdCI4wVrhElqMkFcZhbEp33E39xcdlvUzTODE8s",
86
+ "j12857uBAAAADEGaIWxr/talUAAFxA==",
87
+ ].join("");
88
+ const PROBE_SPECS = {
89
+ full: {
90
+ base64: PROBE_MP4_BASE64,
91
+ firstCode: 0,
92
+ lastCode: 255,
93
+ preferences: ["prefer-software", "prefer-hardware"],
94
+ },
95
+ tv: {
96
+ base64: TV_PROBE_MP4_BASE64,
97
+ firstCode: 16,
98
+ lastCode: 235,
99
+ preferences: ["prefer-hardware", "prefer-software"],
100
+ },
101
+ };
102
+ const PROBE_CODEC = "avc1.64000d";
103
+ const PROBE_SIZE = 256;
104
+ const PROBE_BLOCK_SIZE = 16;
105
+ const PROBE_BLOCKS_PER_ROW = 16;
106
+ /** Pixels this far inside a block are read, clear of any edge filtering. */
107
+ const PROBE_BLOCK_INSET = 4;
108
+ /**
109
+ * How long one decoder may take to return the probe's first frame. The clip
110
+ * is in memory, so this is decoder time alone; a decoder that works takes a
111
+ * few milliseconds.
112
+ */
113
+ const PROBE_DECODE_MILLISECONDS = 5000;
114
+ const pageDecodings = new Map();
115
+ /**
116
+ * Decodes a clip of known codes, written at the preview's levels, through
117
+ * each decoder the page offers in the same path a depth preview takes, and
118
+ * keeps the first that returns them as written, directly or through a
119
+ * table that undoes a conversion it makes. Without one, it picks the
120
+ * closest. Run once per page and level: the answer is a property of the
121
+ * browser, not of any one preview. Probes run one after another, so the
122
+ * page never holds two of their decoders.
123
+ */
124
+ function chooseDepthPreviewDecoding(levels = "full", open = openDepthPreviewTrack, isSupported = isProbeConfigSupported) {
125
+ let decoding = pageDecodings.get(levels);
126
+ if (!decoding) {
127
+ decoding = runProbes(levels, open, isSupported).catch((error) => {
128
+ pageDecodings.delete(levels);
129
+ throw error;
130
+ });
131
+ pageDecodings.set(levels, decoding);
132
+ }
133
+ return decoding;
134
+ }
135
+ function depthPreviewProbeBytes(levels = "full") {
136
+ const text = atob(PROBE_SPECS[levels].base64);
137
+ const bytes = new Uint8Array(text.length);
138
+ for (let index = 0; index < text.length; index += 1) {
139
+ bytes[index] = text.charCodeAt(index);
140
+ }
141
+ return bytes;
142
+ }
143
+ async function isProbeConfigSupported(preference) {
144
+ if (typeof VideoDecoder === "undefined")
145
+ return false;
146
+ const support = await withinDecoderDeadline(VideoDecoder.isConfigSupported({
147
+ codec: PROBE_CODEC,
148
+ codedHeight: PROBE_SIZE,
149
+ codedWidth: PROBE_SIZE,
150
+ hardwareAcceleration: preference,
151
+ }), DECODER_SUPPORT_MILLISECONDS, "VideoDecoder.isConfigSupported").catch(() => ({ supported: false }));
152
+ return support.supported === true;
153
+ }
154
+ async function runProbes(levels, open, isSupported) {
155
+ const verdicts = [];
156
+ for (const hardwareAcceleration of PROBE_SPECS[levels].preferences) {
157
+ const verdict = await probeDepthPreviewDecoder(hardwareAcceleration, levels, open, isSupported);
158
+ verdicts.push(verdict);
159
+ if (verdict.probe && assessProbe(verdict.probe, levels).residual === 0) {
160
+ break;
161
+ }
162
+ }
163
+ return resolveDepthPreviewDecoding(verdicts, levels);
164
+ }
165
+ async function probeDepthPreviewDecoder(hardwareAcceleration, levels = "full", open = openDepthPreviewTrack, isSupported = isProbeConfigSupported) {
166
+ if (!(await isSupported(hardwareAcceleration))) {
167
+ return { hardwareAcceleration, probe: null, supported: false };
168
+ }
169
+ try {
170
+ return {
171
+ hardwareAcceleration,
172
+ probe: await runProbe(open, hardwareAcceleration, levels),
173
+ supported: true,
174
+ };
175
+ }
176
+ catch (error) {
177
+ return {
178
+ error: String(error),
179
+ hardwareAcceleration,
180
+ probe: null,
181
+ supported: true,
182
+ };
183
+ }
184
+ }
185
+ /**
186
+ * Picks the decoder whose codes come back closest to the written ones, and
187
+ * a correction table when one makes them closer still; the first of equals
188
+ * wins, so the order probes ran in is the order of preference.
189
+ */
190
+ function resolveDepthPreviewDecoding(verdicts, levels = "full") {
191
+ let best = null;
192
+ for (const verdict of verdicts) {
193
+ if (!verdict.probe)
194
+ continue;
195
+ const { correction, residual } = assessProbe(verdict.probe, levels);
196
+ if (!best || residual < best.residual) {
197
+ best = { correction, residual, verdict };
198
+ }
199
+ }
200
+ if (!best) {
201
+ return {
202
+ correction: null,
203
+ hardwareAcceleration: "no-preference",
204
+ probe: null,
205
+ residualError: Number.NaN,
206
+ verdicts,
207
+ };
208
+ }
209
+ return {
210
+ correction: best.correction,
211
+ hardwareAcceleration: best.verdict.hardwareAcceleration,
212
+ probe: best.verdict.probe,
213
+ residualError: best.residual,
214
+ verdicts,
215
+ };
216
+ }
217
+ function assessProbe(probe, levels) {
218
+ if (probe.exact)
219
+ return { correction: null, residual: 0 };
220
+ const { firstCode, lastCode } = PROBE_SPECS[levels];
221
+ const table = createCodeCorrection(probe.decoded, firstCode, lastCode);
222
+ const residual = correctedError(probe.decoded, table, firstCode, lastCode);
223
+ return residual < probe.maxError
224
+ ? { correction: table, residual }
225
+ : { correction: null, residual: probe.maxError };
226
+ }
227
+ /**
228
+ * For each code a decoder can return, the written code from `firstCode` to
229
+ * `lastCode` it most likely came from: the one whose read-back value is
230
+ * nearest, the nearest written code on a tie.
231
+ */
232
+ function createCodeCorrection(decoded, firstCode = 0, lastCode = 255) {
233
+ const table = new Uint8Array(256);
234
+ for (let value = 0; value < 256; value += 1) {
235
+ let best = value;
236
+ let bestDistance = Number.POSITIVE_INFINITY;
237
+ for (let code = firstCode; code <= lastCode; code += 1) {
238
+ const distance = Math.abs(decoded[code] - value);
239
+ if (distance < bestDistance ||
240
+ (distance === bestDistance &&
241
+ Math.abs(code - value) < Math.abs(best - value))) {
242
+ best = code;
243
+ bestDistance = distance;
244
+ }
245
+ }
246
+ table[value] = best;
247
+ }
248
+ return table;
249
+ }
250
+ function correctedError(decoded, table, firstCode, lastCode) {
251
+ let error = 0;
252
+ for (let code = firstCode; code <= lastCode; code += 1) {
253
+ error = Math.max(error, Math.abs(table[decoded[code]] - code));
254
+ }
255
+ return error;
256
+ }
257
+ /**
258
+ * Only the decode gets a deadline: opening may wait on the network to load
259
+ * the demuxer, which is no decoder fault.
260
+ */
261
+ async function runProbe(open, hardwareAcceleration, levels) {
262
+ const track = await open(depthPreviewProbeBytes(levels), {
263
+ hardwareAcceleration,
264
+ });
265
+ try {
266
+ const frame = await withinDecoderDeadline(track.decode(0).next(), PROBE_DECODE_MILLISECONDS, `The ${hardwareAcceleration} decoder`);
267
+ if (!frame) {
268
+ throw new Error(`The ${hardwareAcceleration} decoder returned no frame of the probe, even flushed.`);
269
+ }
270
+ return {
271
+ ...readProbeFrame(frame.luma, frame.width, levels),
272
+ lumaPath: track.lumaPath(),
273
+ };
274
+ }
275
+ finally {
276
+ // Closing the decoder ends a decode still waiting past its deadline.
277
+ track.dispose();
278
+ }
279
+ }
280
+ function readProbeFrame(luma, width, levels = "full") {
281
+ const { firstCode, lastCode } = PROBE_SPECS[levels];
282
+ const decoded = new Uint8Array(256);
283
+ let mismatchedCodes = 0;
284
+ let maxError = 0;
285
+ for (let code = 0; code < 256; code += 1) {
286
+ const top = Math.floor(code / PROBE_BLOCKS_PER_ROW) * PROBE_BLOCK_SIZE;
287
+ const left = (code % PROBE_BLOCKS_PER_ROW) * PROBE_BLOCK_SIZE;
288
+ let sum = 0;
289
+ let count = 0;
290
+ for (let y = top + PROBE_BLOCK_INSET; y < top + PROBE_BLOCK_SIZE - PROBE_BLOCK_INSET; y += 1) {
291
+ for (let x = left + PROBE_BLOCK_INSET; x < left + PROBE_BLOCK_SIZE - PROBE_BLOCK_INSET; x += 1) {
292
+ sum += luma[y * width + x];
293
+ count += 1;
294
+ }
295
+ }
296
+ const value = Math.round(sum / count);
297
+ decoded[code] = value;
298
+ if (code < firstCode || code > lastCode)
299
+ continue;
300
+ if (value !== code)
301
+ mismatchedCodes += 1;
302
+ maxError = Math.max(maxError, Math.abs(value - code));
303
+ }
304
+ return {
305
+ decoded,
306
+ exact: mismatchedCodes === 0,
307
+ judgedCodes: lastCode - firstCode + 1,
308
+ maxError,
309
+ mismatchedCodes,
310
+ };
311
+ }
312
+
313
+ export { PROBE_DECODE_MILLISECONDS, chooseDepthPreviewDecoding, createCodeCorrection, depthPreviewProbeBytes };
314
+ //# sourceMappingURL=depth-preview-probe-DG7McQEN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-preview-probe-DG7McQEN.js","sources":["../src/media/depth-preview-probe.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAWA;;;;;;;;;;;;;;;;AAgBG;AACH,MAAM,gBAAgB,GAAG;IACvB,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;AAC3E,CAAA,CAAC,IAAI,CAAC,EAAE,CAAC;AAEV;;;;;;;;;;;;;;;;AAgBG;AACH,MAAM,mBAAmB,GAAG;IAC1B,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,kCAAkC;AACnC,CAAA,CAAC,IAAI,CAAC,EAAE,CAAC;AAsBV,MAAM,WAAW,GAAoD;AACnE,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE,gBAAgB;AACxB,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,WAAW,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;AACpD,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,MAAM,EAAE,mBAAmB;AAC3B,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,WAAW,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;AACpD,KAAA;CACF;AAED,MAAM,WAAW,GAAG,aAAa;AACjC,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,gBAAgB,GAAG,EAAE;AAC3B,MAAM,oBAAoB,GAAG,EAAE;AAC/B;AACA,MAAM,iBAAiB,GAAG,CAAC;AAC3B;;;;AAIG;AACI,MAAM,yBAAyB,GAAG;AA6CzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B;AAEH;;;;;;;;AAQG;AACG,SAAU,0BAA0B,CACxC,MAAA,GAA6B,MAAM,EACnC,IAAA,GAAkB,qBAAqB,EACvC,WAAA,GAEwB,sBAAsB,EAAA;IAE9C,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IAExC,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,KAAI;AACvE,YAAA,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5B,YAAA,MAAM,KAAK;AACb,QAAA,CAAC,CAAC;AACF,QAAA,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IACrC;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,sBAAsB,CACpC,MAAA,GAA6B,MAAM,EAAA;IAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAEzC,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;QACnD,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACvC;AAEA,IAAA,OAAO,KAAK;AACd;AAEA,eAAe,sBAAsB,CAAC,UAAgC,EAAA;IACpE,IAAI,OAAO,YAAY,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK;IAErD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CACzC,YAAY,CAAC,iBAAiB,CAAC;AAC7B,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,oBAAoB,EAAE,UAAU;AACjC,KAAA,CAAC,EACF,4BAA4B,EAC5B,gCAAgC,CACjC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAErC,IAAA,OAAO,OAAO,CAAC,SAAS,KAAK,IAAI;AACnC;AAEA,eAAe,SAAS,CACtB,MAA0B,EAC1B,IAAe,EACf,WAAmE,EAAA;IAEnE,MAAM,QAAQ,GAAiC,EAAE;IAEjD,KAAK,MAAM,oBAAoB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AAClE,QAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,oBAAoB,EACpB,MAAM,EACN,IAAI,EACJ,WAAW,CACZ;AAED,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACtB,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;YACtE;QACF;IACF;AAEA,IAAA,OAAO,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtD;AAEA,eAAe,wBAAwB,CACrC,oBAA0C,EAC1C,MAAA,GAA6B,MAAM,EACnC,IAAA,GAAkB,qBAAqB,EACvC,WAAA,GAEwB,sBAAsB,EAAA;IAE9C,IAAI,EAAE,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC,EAAE;QAC9C,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;IAChE;AAEA,IAAA,IAAI;QACF,OAAO;YACL,oBAAoB;YACpB,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,CAAC;AACzD,YAAA,SAAS,EAAE,IAAI;SAChB;IACH;IAAE,OAAO,KAAK,EAAE;QACd,OAAO;AACL,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB,oBAAoB;AACpB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,SAAS,EAAE,IAAI;SAChB;IACH;AACF;AAEA;;;;AAIG;AACH,SAAS,2BAA2B,CAClC,QAA+C,EAC/C,SAA6B,MAAM,EAAA;IAEnC,IAAI,IAAI,GAIG,IAAI;AAEf,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE;AAEpB,QAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;QAEnE,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YACrC,IAAI,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC1C;IACF;IAEA,IAAI,CAAC,IAAI,EAAE;QACT,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,oBAAoB,EAAE,eAAe;AACrC,YAAA,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,MAAM,CAAC,GAAG;YACzB,QAAQ;SACT;IACH;IAEA,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,QAAA,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;AACvD,QAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;QACzB,aAAa,EAAE,IAAI,CAAC,QAAQ;QAC5B,QAAQ;KACT;AACH;AAEA,SAAS,WAAW,CAClB,KAA4B,EAC5B,MAA0B,EAAA;IAE1B,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;IAEzD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;AACnD,IAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;AACtE,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;AAE1E,IAAA,OAAO,QAAQ,GAAG,KAAK,CAAC;AACtB,UAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;AAC/B,UAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;AACpD;AAEA;;;;AAIG;AACG,SAAU,oBAAoB,CAClC,OAAmB,EACnB,SAAS,GAAG,CAAC,EACb,QAAQ,GAAG,GAAG,EAAA;AAEd,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;AAEjC,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE;QAC3C,IAAI,IAAI,GAAG,KAAK;AAChB,QAAA,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB;AAE3C,QAAA,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE;AACtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAEhD,IACE,QAAQ,GAAG,YAAY;iBACtB,QAAQ,KAAK,YAAY;AACxB,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAClD;gBACA,IAAI,GAAG,IAAI;gBACX,YAAY,GAAG,QAAQ;YACzB;QACF;AACA,QAAA,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IACrB;AAEA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,cAAc,CACrB,OAAmB,EACnB,KAAiB,EACjB,SAAiB,EACjB,QAAgB,EAAA;IAEhB,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE;QACtD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;;AAGG;AACH,eAAe,QAAQ,CACrB,IAAe,EACf,oBAA0C,EAC1C,MAA0B,EAAA;IAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE;QACvD,oBAAoB;AACrB,KAAA,CAAC;AAEF,IAAA,IAAI;QACF,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EACtB,yBAAyB,EACzB,CAAA,IAAA,EAAO,oBAAoB,CAAA,QAAA,CAAU,CACtC;QAED,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACb,OAAO,oBAAoB,CAAA,sDAAA,CAAwD,CACpF;QACH;QAEA,OAAO;YACL,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;AAClD,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;SAC3B;IACH;YAAU;;QAER,KAAK,CAAC,OAAO,EAAE;IACjB;AACF;AAEA,SAAS,cAAc,CACrB,IAAgB,EAChB,KAAa,EACb,SAA6B,MAAM,EAAA;IAEnC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;AACnD,IAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;IACnC,IAAI,eAAe,GAAG,CAAC;IACvB,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,oBAAoB,CAAC,GAAG,gBAAgB;QACtE,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,oBAAoB,IAAI,gBAAgB;QAC7D,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,KAAK,GAAG,CAAC;AAEb,QAAA,KACE,IAAI,CAAC,GAAG,GAAG,GAAG,iBAAiB,EAC/B,CAAC,GAAG,GAAG,GAAG,gBAAgB,GAAG,iBAAiB,EAC9C,CAAC,IAAI,CAAC,EACN;AACA,YAAA,KACE,IAAI,CAAC,GAAG,IAAI,GAAG,iBAAiB,EAChC,CAAC,GAAG,IAAI,GAAG,gBAAgB,GAAG,iBAAiB,EAC/C,CAAC,IAAI,CAAC,EACN;gBACA,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC1B,KAAK,IAAI,CAAC;YACZ;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AAErC,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;AACrB,QAAA,IAAI,IAAI,GAAG,SAAS,IAAI,IAAI,GAAG,QAAQ;YAAE;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,eAAe,IAAI,CAAC;AACxC,QAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACvD;IAEA,OAAO;QACL,OAAO;QACP,KAAK,EAAE,eAAe,KAAK,CAAC;AAC5B,QAAA,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,CAAC;QACrC,QAAQ;QACR,eAAe;KAChB;AACH;;;;"}