movi-player 0.3.0 → 0.3.2

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 (61) hide show
  1. package/AGENTS.md +2 -0
  2. package/README.md +54 -7
  3. package/dist/core/MoviPlayer.d.ts +77 -1
  4. package/dist/core/MoviPlayer.d.ts.map +1 -1
  5. package/dist/core/MoviPlayer.js +667 -121
  6. package/dist/core/MoviPlayer.js.map +1 -1
  7. package/dist/core/PlayerState.js +1 -1
  8. package/dist/core/PlayerState.js.map +1 -1
  9. package/dist/decode/VideoDecoder.d.ts.map +1 -1
  10. package/dist/decode/VideoDecoder.js +6 -2
  11. package/dist/decode/VideoDecoder.js.map +1 -1
  12. package/dist/demuxer.cjs +315 -129
  13. package/dist/demuxer.js +377 -191
  14. package/dist/element.cjs +58309 -16596
  15. package/dist/element.js +59520 -17807
  16. package/dist/index.cjs +58309 -16596
  17. package/dist/index.js +59520 -17807
  18. package/dist/player.cjs +56818 -15360
  19. package/dist/player.js +57818 -16360
  20. package/dist/render/DASHPlayerWrapper.d.ts +65 -0
  21. package/dist/render/DASHPlayerWrapper.d.ts.map +1 -0
  22. package/dist/render/DASHPlayerWrapper.js +540 -0
  23. package/dist/render/DASHPlayerWrapper.js.map +1 -0
  24. package/dist/render/HLSPlayerWrapper.d.ts.map +1 -1
  25. package/dist/render/HLSPlayerWrapper.js +47 -11
  26. package/dist/render/HLSPlayerWrapper.js.map +1 -1
  27. package/dist/render/MoviElement.d.ts +97 -0
  28. package/dist/render/MoviElement.d.ts.map +1 -1
  29. package/dist/render/MoviElement.js +852 -152
  30. package/dist/render/MoviElement.js.map +1 -1
  31. package/dist/render/ShakaPlayerWrapper.d.ts +111 -0
  32. package/dist/render/ShakaPlayerWrapper.d.ts.map +1 -0
  33. package/dist/render/ShakaPlayerWrapper.js +956 -0
  34. package/dist/render/ShakaPlayerWrapper.js.map +1 -0
  35. package/dist/source/DashFallback.d.ts +32 -0
  36. package/dist/source/DashFallback.d.ts.map +1 -0
  37. package/dist/source/DashFallback.js +142 -0
  38. package/dist/source/DashFallback.js.map +1 -0
  39. package/dist/source/DashManifest.d.ts +34 -0
  40. package/dist/source/DashManifest.d.ts.map +1 -0
  41. package/dist/source/DashManifest.js +194 -0
  42. package/dist/source/DashManifest.js.map +1 -0
  43. package/dist/source/DashSegmentSource.d.ts +32 -0
  44. package/dist/source/DashSegmentSource.d.ts.map +1 -0
  45. package/dist/source/DashSegmentSource.js +86 -0
  46. package/dist/source/DashSegmentSource.js.map +1 -0
  47. package/dist/source/HttpSource.d.ts +64 -0
  48. package/dist/source/HttpSource.d.ts.map +1 -1
  49. package/dist/source/HttpSource.js +444 -57
  50. package/dist/source/HttpSource.js.map +1 -1
  51. package/dist/source/ThumbnailHttpSource.d.ts +13 -0
  52. package/dist/source/ThumbnailHttpSource.d.ts.map +1 -1
  53. package/dist/source/ThumbnailHttpSource.js +70 -8
  54. package/dist/source/ThumbnailHttpSource.js.map +1 -1
  55. package/dist/source/index.d.ts +2 -0
  56. package/dist/source/index.d.ts.map +1 -1
  57. package/dist/source/index.js +1 -0
  58. package/dist/source/index.js.map +1 -1
  59. package/dist/types.d.ts +10 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +16 -6
@@ -0,0 +1,65 @@
1
+ import { EventEmitter } from "../events/EventEmitter";
2
+ import { PlayerEventMap, PlayerState, PlayerConfig, VideoTrack } from "../types";
3
+ import { TrackManager } from "../core/TrackManager";
4
+ /**
5
+ * MPEG-DASH wrapper, mirroring HLSPlayerWrapper. dash.js attaches to a hidden
6
+ * <video> element (MSE under the hood); we draw its frames to the shared canvas
7
+ * via requestVideoFrameCallback, exactly like the HLS path. Only the streaming
8
+ * bits — manifest load, quality/representation switching, stats — are dash.js
9
+ * specific; everything that touches the <video> element is identical to HLS.
10
+ */
11
+ export declare class DASHPlayerWrapper extends EventEmitter<PlayerEventMap> {
12
+ private config;
13
+ private dash;
14
+ private videoElement;
15
+ private canvasRenderer;
16
+ private state;
17
+ trackManager: TrackManager;
18
+ private frameCallbackId;
19
+ private _framesRendered;
20
+ private representations;
21
+ constructor(config: PlayerConfig);
22
+ private setupEventHandlers;
23
+ private setState;
24
+ private startFrameLoop;
25
+ private stopFrameLoop;
26
+ private renderFrame;
27
+ load(): Promise<void>;
28
+ /** Build the quality track list from the manifest's video representations. */
29
+ private updateTracks;
30
+ play(): Promise<void>;
31
+ pause(): void;
32
+ seek(time: number): Promise<void>;
33
+ getState(): PlayerState;
34
+ getDuration(): number;
35
+ getCurrentTime(): number;
36
+ setVolume(volume: number): void;
37
+ setMuted(muted: boolean): void;
38
+ setPlaybackRate(rate: number): void;
39
+ getVolume(): number;
40
+ isMuted(): boolean;
41
+ getPlaybackRate(): number;
42
+ setSubtitleOverlay(_element: HTMLElement): void;
43
+ setHDREnabled(enabled: boolean): void;
44
+ /**
45
+ * Setup Encrypted Media Extensions (EME) for Widevine/FairPlay DRM.
46
+ * Identical to the HLS path — it operates on the <video> element, so DASH +
47
+ * a license server URL works the same way.
48
+ */
49
+ private setupEME;
50
+ getVideoElement(): HTMLVideoElement;
51
+ getBufferEndTime(): number;
52
+ resizeCanvas(width: number, height: number): void;
53
+ getVideoTracks(): VideoTrack[];
54
+ selectVideoTrack(id: number): void;
55
+ getAudioTracks(): never[];
56
+ selectAudioTrack(_id: number): boolean;
57
+ getSubtitleTracks(): never[];
58
+ selectSubtitleTrack(_id: number | null): Promise<boolean>;
59
+ setFitMode(mode: any): void;
60
+ getStats(): Record<string, string | number | boolean>;
61
+ getNetworkSpeed(): number;
62
+ isFileSource(): boolean;
63
+ destroy(): void;
64
+ }
65
+ //# sourceMappingURL=DASHPlayerWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DASHPlayerWrapper.d.ts","sourceRoot":"","sources":["../../src/render/DASHPlayerWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EAEZ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,cAAc,CAAC;IACjE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,KAAK,CAAuB;IAC7B,YAAY,EAAE,YAAY,CAAC;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAa;IAGpC,OAAO,CAAC,eAAe,CAAwB;gBAEnC,MAAM,EAAE,YAAY;IAuDhC,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAab,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4E3B,8EAA8E;IAC9E,OAAO,CAAC,YAAY;IA+Ed,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,IAAI,IAAI;IAIP,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,IAAI,WAAW;IAIvB,WAAW,IAAI,MAAM;IAIrB,cAAc,IAAI,MAAM;IAIxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,MAAM;IAIzB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI/C,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMrC;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAoEhB,eAAe,IAAI,gBAAgB;IAInC,gBAAgB,IAAI,MAAM;IAS1B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMjD,cAAc,IAAI,UAAU,EAAE;IAM9B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMlC,cAAc;IAGd,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGtC,iBAAiB;IAGjB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,UAAU,CAAC,IAAI,EAAE,GAAG;IAUpB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IA2ErD,eAAe,IAAI,MAAM;IAMzB,YAAY,IAAI,OAAO;IAIvB,OAAO,IAAI,IAAI;CAmBhB"}
@@ -0,0 +1,540 @@
1
+ import { MediaPlayer } from "dashjs";
2
+ import { EventEmitter } from "../events/EventEmitter";
3
+ import { CanvasRenderer } from "./CanvasRenderer";
4
+ import { TrackManager } from "../core/TrackManager";
5
+ import { Logger } from "../utils/Logger";
6
+ const TAG = "DASHPlayerWrapper";
7
+ /**
8
+ * MPEG-DASH wrapper, mirroring HLSPlayerWrapper. dash.js attaches to a hidden
9
+ * <video> element (MSE under the hood); we draw its frames to the shared canvas
10
+ * via requestVideoFrameCallback, exactly like the HLS path. Only the streaming
11
+ * bits — manifest load, quality/representation switching, stats — are dash.js
12
+ * specific; everything that touches the <video> element is identical to HLS.
13
+ */
14
+ export class DASHPlayerWrapper extends EventEmitter {
15
+ config;
16
+ dash = null;
17
+ videoElement;
18
+ canvasRenderer = null;
19
+ state = "idle";
20
+ trackManager;
21
+ frameCallbackId = null;
22
+ _framesRendered = 0;
23
+ // Representations from the manifest, indexed to match the VideoTrack ids we
24
+ // hand the TrackManager (track id === array index; -1 is Auto/ABR).
25
+ representations = [];
26
+ constructor(config) {
27
+ super();
28
+ this.config = config;
29
+ this.trackManager = new TrackManager();
30
+ this.videoElement = document.createElement("video");
31
+ this.videoElement.crossOrigin = "anonymous";
32
+ this.videoElement.playsInline = true;
33
+ this.videoElement.style.display = "none"; // Hidden; canvas renderer draws frames
34
+ // Preserve pitch when changing playback speed
35
+ this.videoElement.preservesPitch = true;
36
+ this.videoElement.mozPreservesPitch = true; // Firefox
37
+ this.videoElement.webkitPreservesPitch = true; // Safari/older Chrome
38
+ // DRM mode: use native video element directly (no canvas) — canvas can't
39
+ // access DRM-protected frames (browser blocks VideoFrame copy).
40
+ if (!config.drm && config.renderer === "canvas" && config.canvas) {
41
+ this.canvasRenderer = new CanvasRenderer(config.canvas);
42
+ }
43
+ this.setupEventHandlers();
44
+ // Drive dash.js quality from the TrackManager (mirrors HLS).
45
+ this.trackManager.on("videoTrackChange", (track) => {
46
+ if (!this.dash)
47
+ return;
48
+ const id = track ? track.id : -1;
49
+ // Auto (-1) → enable ABR.
50
+ if (id === -1) {
51
+ this.dash.updateSettings({
52
+ streaming: { abr: { autoSwitchBitrate: { video: true } } },
53
+ });
54
+ Logger.info(TAG, "Switched to Auto Quality (ABR)");
55
+ return;
56
+ }
57
+ const rep = this.representations[id];
58
+ if (!rep)
59
+ return;
60
+ // Manual selection: pin ABR off, then switch. forceReplace flushes the
61
+ // buffer for an immediate switch when paused; a smooth (next-segment)
62
+ // switch while playing avoids a stall.
63
+ this.dash.updateSettings({
64
+ streaming: { abr: { autoSwitchBitrate: { video: false } } },
65
+ });
66
+ this.dash.setRepresentationForTypeById("video", rep.id, this.state !== "playing");
67
+ Logger.info(TAG, `Requesting representation ${rep.id} (${rep.height}p)`);
68
+ });
69
+ }
70
+ setupEventHandlers() {
71
+ this.videoElement.addEventListener("play", () => this.setState("playing"));
72
+ this.videoElement.addEventListener("playing", () => this.setState("playing"));
73
+ this.videoElement.addEventListener("pause", () => {
74
+ if (this.state !== "ended")
75
+ this.setState("paused");
76
+ });
77
+ this.videoElement.addEventListener("ended", () => this.setState("ended"));
78
+ this.videoElement.addEventListener("seeking", () => this.setState("seeking"));
79
+ this.videoElement.addEventListener("seeked", () => {
80
+ if (this.videoElement.paused)
81
+ this.setState("paused");
82
+ else
83
+ this.setState("playing");
84
+ });
85
+ this.videoElement.addEventListener("waiting", () => this.setState("buffering"));
86
+ this.videoElement.addEventListener("timeupdate", () => {
87
+ this.emit("timeUpdate", this.videoElement.currentTime);
88
+ });
89
+ this.videoElement.addEventListener("durationchange", () => {
90
+ this.emit("durationChange", this.videoElement.duration);
91
+ });
92
+ this.videoElement.addEventListener("error", (_e) => {
93
+ const error = this.videoElement.error;
94
+ this.emit("error", new Error(error?.message || "Video element error"));
95
+ this.setState("error");
96
+ });
97
+ }
98
+ setState(newState) {
99
+ if (this.state !== newState) {
100
+ this.state = newState;
101
+ this.emit("stateChange", newState);
102
+ if (newState === "playing" && this.canvasRenderer) {
103
+ this.startFrameLoop();
104
+ }
105
+ else if (newState !== "seeking" && newState !== "buffering") {
106
+ if (newState === "paused" ||
107
+ newState === "ended" ||
108
+ newState === "error" ||
109
+ newState === "idle") {
110
+ this.stopFrameLoop();
111
+ }
112
+ }
113
+ }
114
+ }
115
+ startFrameLoop() {
116
+ if (this.frameCallbackId !== null)
117
+ return;
118
+ this.frameCallbackId = this.videoElement.requestVideoFrameCallback((_now, _metadata) => {
119
+ this.renderFrame();
120
+ this.frameCallbackId = null;
121
+ if (this.state === "playing" ||
122
+ this.state === "seeking" ||
123
+ this.state === "buffering") {
124
+ this.startFrameLoop();
125
+ }
126
+ });
127
+ }
128
+ stopFrameLoop() {
129
+ if (this.frameCallbackId !== null) {
130
+ this.videoElement.cancelVideoFrameCallback(this.frameCallbackId);
131
+ this.frameCallbackId = null;
132
+ }
133
+ }
134
+ renderFrame() {
135
+ if (!this.canvasRenderer)
136
+ return;
137
+ try {
138
+ const frame = new VideoFrame(this.videoElement);
139
+ this.canvasRenderer.render(frame);
140
+ frame.close();
141
+ this._framesRendered++;
142
+ }
143
+ catch (e) {
144
+ Logger.warn(TAG, "Failed to create VideoFrame", e);
145
+ }
146
+ }
147
+ async load() {
148
+ this.setState("loading");
149
+ this.emit("loadStart", undefined);
150
+ const source = this.config.source;
151
+ const url = source && source.type === "url" ? source.url : null;
152
+ if (!url) {
153
+ throw new Error("DASH source must be a URL");
154
+ }
155
+ if (this.config.drm) {
156
+ Logger.info(TAG, "DRM mode enabled — using native video element (no canvas)");
157
+ if (this.config.licenseUrl) {
158
+ this.setupEME(this.config.licenseUrl, this.config.licenseHeaders);
159
+ }
160
+ }
161
+ this.dash = MediaPlayer().create();
162
+ // Custom media headers on every request dash.js makes (manifest + segments).
163
+ // Must be registered before initialize() so the manifest fetch carries them.
164
+ const mediaHeaders = this.config.headers;
165
+ if (mediaHeaders) {
166
+ this.dash.addRequestInterceptor((request) => {
167
+ request.headers = { ...(request.headers || {}), ...mediaHeaders };
168
+ return Promise.resolve(request);
169
+ });
170
+ }
171
+ // autoplay=false — MoviPlayer/MoviElement decide when to play().
172
+ this.dash.initialize(this.videoElement, url, false);
173
+ return new Promise((resolve, reject) => {
174
+ let settled = false;
175
+ this.dash.on(MediaPlayer.events.STREAM_INITIALIZED, () => {
176
+ const count = this.updateTracks();
177
+ Logger.info(TAG, `DASH manifest parsed. Found ${count} representations`);
178
+ this.setState("ready");
179
+ this.emit("loadEnd", undefined);
180
+ settled = true;
181
+ resolve();
182
+ });
183
+ // ABR / quality switches change the active rendition without changing
184
+ // the track list — re-fire tracksChange so the gear-badge UI repaints.
185
+ this.dash.on(MediaPlayer.events.QUALITY_CHANGE_RENDERED, () => {
186
+ this.trackManager.emit("tracksChange", this.trackManager.getTracks());
187
+ });
188
+ this.dash.on(MediaPlayer.events.ERROR, (e) => {
189
+ const detail = e?.error?.message ||
190
+ (typeof e?.error === "string" ? e.error : e?.error?.code) ||
191
+ "DASH playback error";
192
+ Logger.error(TAG, `DASH error: ${detail}`);
193
+ const err = new Error(String(detail));
194
+ if (!settled) {
195
+ // Pre-load failure: reject ONLY — don't emit. dash.js is a fallback
196
+ // behind Shaka, so MoviPlayer is still working through the chain and
197
+ // surfaces the final (correctly-classified) error itself. Emitting
198
+ // here flashes the error overlay mid-fallback — and a manifest 403
199
+ // gets misread as a decode failure, briefly showing an irrelevant
200
+ // "Try Software Decoding" button. Mirrors ShakaPlayerWrapper, which
201
+ // throws without emitting.
202
+ settled = true;
203
+ reject(err);
204
+ }
205
+ else {
206
+ // Post-load runtime error — surface to listeners as usual.
207
+ this.emit("error", err);
208
+ this.setState("error");
209
+ }
210
+ });
211
+ });
212
+ }
213
+ /** Build the quality track list from the manifest's video representations. */
214
+ updateTracks() {
215
+ if (!this.dash)
216
+ return 0;
217
+ this.representations = this.dash.getRepresentationsByType("video") ?? [];
218
+ const reps = this.representations;
219
+ const tracks = [];
220
+ // Auto / ABR track.
221
+ const autoTrack = {
222
+ id: -1,
223
+ type: "video",
224
+ codec: "auto",
225
+ width: 0,
226
+ height: 0,
227
+ frameRate: 0,
228
+ label: "Auto",
229
+ };
230
+ tracks.push(autoTrack);
231
+ // Disambiguate same-resolution renditions with their bitrate.
232
+ const heightCount = new Map();
233
+ reps.forEach((r) => heightCount.set(r.height, (heightCount.get(r.height) || 0) + 1));
234
+ reps.forEach((r, index) => {
235
+ const hasDuplicates = (heightCount.get(r.height) || 0) > 1;
236
+ const label = hasDuplicates
237
+ ? `${r.height}p · ${(r.bandwidth / 1000).toFixed(0)} kbps`
238
+ : `${r.height}p`;
239
+ const videoTrack = {
240
+ id: index,
241
+ type: "video",
242
+ codec: r.codecs ?? "",
243
+ bitRate: r.bandwidth,
244
+ width: r.width,
245
+ height: r.height,
246
+ frameRate: r.frameRate,
247
+ label,
248
+ };
249
+ tracks.push(videoTrack);
250
+ });
251
+ this.trackManager.setTracks(tracks);
252
+ this.trackManager.selectVideoTrack(-1); // default Auto
253
+ if (this.canvasRenderer && reps.length > 0) {
254
+ // Size the canvas from the highest rendition; fall back to the <video>
255
+ // element's real dimensions if the manifest lacks width/height.
256
+ const top = reps.reduce((a, b) => (b.height > a.height ? b : a), reps[0]);
257
+ const applyDims = (w, h) => {
258
+ if (!this.canvasRenderer || w <= 0 || h <= 0)
259
+ return;
260
+ this.canvasRenderer.configure(w, h);
261
+ const canvas = this.canvasRenderer.getCanvas();
262
+ const parent = canvas instanceof HTMLCanvasElement ? canvas.parentElement : null;
263
+ const cw = parent?.clientWidth || w;
264
+ const ch = parent?.clientHeight || h;
265
+ if (cw > 0 && ch > 0) {
266
+ this.canvasRenderer.resize(cw, ch);
267
+ }
268
+ };
269
+ if (top.width > 0 && top.height > 0) {
270
+ applyDims(top.width, top.height);
271
+ }
272
+ else {
273
+ const onMeta = () => {
274
+ this.videoElement.removeEventListener("loadedmetadata", onMeta);
275
+ applyDims(this.videoElement.videoWidth, this.videoElement.videoHeight);
276
+ };
277
+ if (this.videoElement.videoWidth > 0 && this.videoElement.videoHeight > 0) {
278
+ applyDims(this.videoElement.videoWidth, this.videoElement.videoHeight);
279
+ }
280
+ else {
281
+ this.videoElement.addEventListener("loadedmetadata", onMeta);
282
+ }
283
+ }
284
+ }
285
+ return reps.length;
286
+ }
287
+ async play() {
288
+ await this.videoElement.play();
289
+ }
290
+ pause() {
291
+ this.videoElement.pause();
292
+ }
293
+ async seek(time) {
294
+ this.videoElement.currentTime = time;
295
+ }
296
+ getState() {
297
+ return this.state;
298
+ }
299
+ getDuration() {
300
+ return this.videoElement.duration;
301
+ }
302
+ getCurrentTime() {
303
+ return this.videoElement.currentTime;
304
+ }
305
+ setVolume(volume) {
306
+ this.videoElement.volume = volume;
307
+ }
308
+ setMuted(muted) {
309
+ this.videoElement.muted = muted;
310
+ }
311
+ setPlaybackRate(rate) {
312
+ this.videoElement.playbackRate = rate;
313
+ }
314
+ getVolume() {
315
+ return this.videoElement.volume;
316
+ }
317
+ isMuted() {
318
+ return this.videoElement.muted;
319
+ }
320
+ getPlaybackRate() {
321
+ return this.videoElement.playbackRate;
322
+ }
323
+ setSubtitleOverlay(_element) {
324
+ // Pending
325
+ }
326
+ setHDREnabled(enabled) {
327
+ if (this.canvasRenderer) {
328
+ this.canvasRenderer.setHDREnabled(enabled);
329
+ }
330
+ }
331
+ /**
332
+ * Setup Encrypted Media Extensions (EME) for Widevine/FairPlay DRM.
333
+ * Identical to the HLS path — it operates on the <video> element, so DASH +
334
+ * a license server URL works the same way.
335
+ */
336
+ setupEME(licenseUrl, headers) {
337
+ const video = this.videoElement;
338
+ video.addEventListener("encrypted", async (event) => {
339
+ Logger.info(TAG, `EME: encrypted event — initDataType=${event.initDataType}`);
340
+ try {
341
+ const config = [{
342
+ initDataTypes: [event.initDataType],
343
+ videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }],
344
+ audioCapabilities: [{ contentType: 'audio/mp4; codecs="mp4a.40.2"' }],
345
+ }];
346
+ // Try key systems in order: Widevine, PlayReady (Edge), FairPlay (Safari).
347
+ const keySystems = [
348
+ "com.widevine.alpha",
349
+ "com.microsoft.playready",
350
+ "com.apple.fps.1_0",
351
+ ];
352
+ let keySystem = "";
353
+ let access = null;
354
+ for (const ks of keySystems) {
355
+ try {
356
+ access = await navigator.requestMediaKeySystemAccess(ks, config);
357
+ keySystem = ks;
358
+ break;
359
+ }
360
+ catch {
361
+ /* not supported — try the next key system */
362
+ }
363
+ }
364
+ if (!access) {
365
+ throw new Error("No supported DRM key system (Widevine/PlayReady/FairPlay)");
366
+ }
367
+ Logger.info(TAG, `EME: Using ${keySystem}`);
368
+ const keys = await access.createMediaKeys();
369
+ await video.setMediaKeys(keys);
370
+ const session = keys.createSession();
371
+ session.addEventListener("message", async (e) => {
372
+ const response = await fetch(licenseUrl, {
373
+ method: "POST",
374
+ body: e.message,
375
+ headers: {
376
+ "Content-Type": "application/octet-stream",
377
+ ...headers,
378
+ },
379
+ });
380
+ if (!response.ok) {
381
+ Logger.error(TAG, `EME: License request failed (HTTP ${response.status})`);
382
+ this.emit("error", new Error(`DRM license request failed (HTTP ${response.status})`));
383
+ return;
384
+ }
385
+ const license = await response.arrayBuffer();
386
+ await session.update(new Uint8Array(license));
387
+ Logger.info(TAG, "EME: License acquired, playback authorized");
388
+ });
389
+ await session.generateRequest(event.initDataType, event.initData);
390
+ }
391
+ catch (err) {
392
+ Logger.error(TAG, "EME: DRM setup failed", err);
393
+ this.emit("error", new Error(`DRM not supported or license server unreachable`));
394
+ }
395
+ });
396
+ }
397
+ getVideoElement() {
398
+ return this.videoElement;
399
+ }
400
+ getBufferEndTime() {
401
+ if (this.videoElement.buffered.length) {
402
+ return this.videoElement.buffered.end(this.videoElement.buffered.length - 1);
403
+ }
404
+ return 0;
405
+ }
406
+ resizeCanvas(width, height) {
407
+ if (this.canvasRenderer) {
408
+ this.canvasRenderer.resize(width, height);
409
+ }
410
+ }
411
+ getVideoTracks() {
412
+ return this.trackManager
413
+ .getTracks()
414
+ .filter((t) => t.type === "video");
415
+ }
416
+ selectVideoTrack(id) {
417
+ if (!this.dash)
418
+ return;
419
+ // The trackManager event handler performs the dash.js switch.
420
+ this.trackManager.selectVideoTrack(id);
421
+ }
422
+ getAudioTracks() {
423
+ return [];
424
+ }
425
+ selectAudioTrack(_id) {
426
+ return false;
427
+ }
428
+ getSubtitleTracks() {
429
+ return [];
430
+ }
431
+ selectSubtitleTrack(_id) {
432
+ return Promise.resolve(false);
433
+ }
434
+ setFitMode(mode) {
435
+ if (this.canvasRenderer) {
436
+ this.canvasRenderer.setFitMode(mode);
437
+ }
438
+ else {
439
+ if (mode === "contain")
440
+ this.videoElement.style.objectFit = "contain";
441
+ else if (mode === "cover")
442
+ this.videoElement.style.objectFit = "cover";
443
+ else if (mode === "fill")
444
+ this.videoElement.style.objectFit = "fill";
445
+ }
446
+ }
447
+ getStats() {
448
+ const stats = {};
449
+ const active = this.dash?.getCurrentRepresentationForType?.("video") ?? null;
450
+ const w = active?.width || this.videoElement.videoWidth || 0;
451
+ const h = active?.height || this.videoElement.videoHeight || 0;
452
+ // --- Video ---
453
+ if (w && h) {
454
+ stats["Video Codec"] = active?.codecs ?? "N/A";
455
+ stats["Resolution"] = `${w}x${h}`;
456
+ const eff = Math.max(h, Math.round((w * 9) / 16));
457
+ stats["Quality"] = eff >= 8640 ? "16K" : eff >= 4320 ? "8K" : eff >= 2160 ? "4K" : eff >= 1440 ? "2K" : eff >= 1080 ? "1080p" : eff >= 720 ? "720p" : eff >= 480 ? "480p" : "SD";
458
+ if (active?.frameRate)
459
+ stats["Frame Rate"] = `${active.frameRate} fps`;
460
+ stats["Video Bitrate"] = active?.bandwidth
461
+ ? `${(active.bandwidth / 1000).toFixed(0)} kbps`
462
+ : "N/A";
463
+ }
464
+ // --- Decoder ---
465
+ if (this.canvasRenderer) {
466
+ const rStats = this.canvasRenderer.getStats();
467
+ stats["Video Decoder"] = "Hardware (Native)";
468
+ stats["Renderer"] = "Canvas";
469
+ stats["Color Space"] = rStats.colorSpace || "N/A";
470
+ }
471
+ else {
472
+ stats["Video Decoder"] = "Hardware (Native)";
473
+ stats["Renderer"] = "HTML5 Video";
474
+ }
475
+ // --- Playback ---
476
+ stats["Playback State"] = this.state;
477
+ stats["Playback Rate"] = `${this.videoElement.playbackRate}x`;
478
+ // --- Frames ---
479
+ const quality = this.videoElement.getVideoPlaybackQuality?.();
480
+ if (quality) {
481
+ stats["Frames Decoded"] = quality.totalVideoFrames;
482
+ stats["Frames Dropped"] = quality.droppedVideoFrames;
483
+ }
484
+ if (this.canvasRenderer) {
485
+ stats["Frames Rendered"] = this._framesRendered;
486
+ }
487
+ // --- Buffer ---
488
+ if (this.videoElement.buffered.length > 0) {
489
+ const buffEnd = this.videoElement.buffered.end(this.videoElement.buffered.length - 1);
490
+ const ahead = buffEnd - this.videoElement.currentTime;
491
+ stats["Buffer Ahead"] = `${ahead.toFixed(1)}s`;
492
+ }
493
+ // --- DASH specific ---
494
+ const reps = this.representations;
495
+ if (reps.length > 1) {
496
+ const activeLabel = active ? `${active.height}p` : "N/A";
497
+ const autoOn = this.dash?.getSettings?.()?.streaming?.abr?.autoSwitchBitrate?.video !== false;
498
+ stats["DASH Quality"] = autoOn ? `Auto (${activeLabel})` : activeLabel;
499
+ const heights = reps.map((r) => r.height);
500
+ stats["Available Levels"] = `${reps.length} (${Math.min(...heights)}p–${Math.max(...heights)}p)`;
501
+ }
502
+ const tp = this.dash?.getAverageThroughput?.("video");
503
+ if (tp && tp > 0) {
504
+ stats["Bandwidth Estimate"] = `${(tp / 1000).toFixed(0)} kbps`;
505
+ }
506
+ // Memory usage (Chrome only)
507
+ const mem = performance.memory;
508
+ if (mem) {
509
+ stats["Memory Used"] = `${(mem.usedJSHeapSize / 1048576).toFixed(0)} MB`;
510
+ }
511
+ return stats;
512
+ }
513
+ getNetworkSpeed() {
514
+ // dash.js throughput is in bits/s → bytes/s.
515
+ const tp = this.dash?.getAverageThroughput?.("video");
516
+ return tp && tp > 0 ? tp / 8 : 0;
517
+ }
518
+ isFileSource() {
519
+ return false;
520
+ }
521
+ destroy() {
522
+ this.stopFrameLoop();
523
+ if (this.dash) {
524
+ try {
525
+ this.dash.destroy();
526
+ }
527
+ catch {
528
+ /* dash.js can throw if already torn down */
529
+ }
530
+ this.dash = null;
531
+ }
532
+ this.videoElement.removeAttribute("src");
533
+ this.videoElement.load();
534
+ if (this.videoElement.parentNode) {
535
+ this.videoElement.parentNode.removeChild(this.videoElement);
536
+ }
537
+ this.removeAllListeners();
538
+ }
539
+ }
540
+ //# sourceMappingURL=DASHPlayerWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DASHPlayerWrapper.js","sourceRoot":"","sources":["../../src/render/DASHPlayerWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,YAA4B;IACzD,MAAM,CAAe;IACrB,IAAI,GAA4B,IAAI,CAAC;IACrC,YAAY,CAAmB;IAC/B,cAAc,GAA0B,IAAI,CAAC;IAC7C,KAAK,GAAgB,MAAM,CAAC;IAC7B,YAAY,CAAe;IAC1B,eAAe,GAAkB,IAAI,CAAC;IACtC,eAAe,GAAW,CAAC,CAAC;IACpC,4EAA4E;IAC5E,oEAAoE;IAC5D,eAAe,GAAqB,EAAE,CAAC;IAE/C,YAAY,MAAoB;QAC9B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAEvC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,uCAAuC;QAEjF,8CAA8C;QAC7C,IAAI,CAAC,YAAoB,CAAC,cAAc,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,YAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,UAAU;QAC9D,IAAI,CAAC,YAAoB,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC,sBAAsB;QAE9E,yEAAyE;QACzE,gEAAgE;QAChE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,6DAA6D;QAC7D,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAwB,EAAE,EAAE;YACpE,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO;YACvB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjC,0BAA0B;YAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;oBACvB,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;iBAC3D,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,uEAAuE;YACvE,sEAAsE;YACtE,uCAAuC;YACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACvB,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;aAC5D,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,4BAA4B,CACpC,OAAO,EACP,GAAG,CAAC,EAAE,EACN,IAAI,CAAC,KAAK,KAAK,SAAS,CACzB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,6BAA6B,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/C,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;gBACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC3B,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,QAAqB;QACpC,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAEnC,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClD,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;iBAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC9D,IACE,QAAQ,KAAK,QAAQ;oBACrB,QAAQ,KAAK,OAAO;oBACpB,QAAQ,KAAK,OAAO;oBACpB,QAAQ,KAAK,MAAM,EACnB,CAAC;oBACD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO;QAE1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAChE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IACE,IAAI,CAAC,KAAK,KAAK,SAAS;gBACxB,IAAI,CAAC,KAAK,KAAK,SAAS;gBACxB,IAAI,CAAC,KAAK,KAAK,WAAW,EAC1B,CAAC;gBACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,6BAA6B,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,2DAA2D,CAAC,CAAC;YAC9E,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC;QAEnC,6EAA6E;QAC7E,6EAA6E;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,IAAI,YAAY,EAAE,CAAC;YAChB,IAAI,CAAC,IAAY,CAAC,qBAAqB,CAAC,CAAC,OAAY,EAAE,EAAE;gBACxD,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;gBAClE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEpD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,KAAK,kBAAkB,CAAC,CAAC;gBACzE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAChC,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,sEAAsE;YACtE,uEAAuE;YACvE,IAAI,CAAC,IAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBAC7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAM,EAAE,EAAE;gBACjD,MAAM,MAAM,GACV,CAAC,EAAE,KAAK,EAAE,OAAO;oBACjB,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;oBACzD,qBAAqB,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,MAAM,EAAE,CAAC,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,oEAAoE;oBACpE,qEAAqE;oBACrE,mEAAmE;oBACnE,mEAAmE;oBACnE,kEAAkE;oBAClE,oEAAoE;oBACpE,2BAA2B;oBAC3B,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IACtE,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;QAElC,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,oBAAoB;QACpB,MAAM,SAAS,GAAe;YAC5B,EAAE,EAAE,CAAC,CAAC;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,MAAM;SACd,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvB,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAErF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACxB,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,aAAa;gBACzB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;gBAC1D,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAEnB,MAAM,UAAU,GAAe;gBAC7B,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;gBACrB,OAAO,EAAE,CAAC,CAAC,SAAS;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,KAAK;aACN,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QAEvD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBACrD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,YAAY,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjF,MAAM,EAAE,GAAG,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC;gBACpC,MAAM,EAAE,GAAG,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC;gBACrC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBAChE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBACzE,CAAC,CAAC;gBACF,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAC1E,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,QAAqB;QACtC,UAAU;IACZ,CAAC;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAC,UAAkB,EAAE,OAAgC;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAEhC,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,uCAAuC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YAE9E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAkC,CAAC;wBAC7C,aAAa,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;wBACnC,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;wBACvE,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;qBACtE,CAAC,CAAC;gBAEH,2EAA2E;gBAC3E,MAAM,UAAU,GAAG;oBACjB,oBAAoB;oBACpB,yBAAyB;oBACzB,mBAAmB;iBACpB,CAAC;gBACF,IAAI,SAAS,GAAG,EAAE,CAAC;gBACnB,IAAI,MAAM,GAAgC,IAAI,CAAC;gBAC/C,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,GAAG,MAAM,SAAS,CAAC,2BAA2B,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;wBACjE,SAAS,GAAG,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;oBAAC,MAAM,CAAC;wBACP,6CAA6C;oBAC/C,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC/E,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,SAAS,EAAE,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC5C,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;wBACvC,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,CAAC,CAAC,OAAO;wBACf,OAAO,EAAE;4BACP,cAAc,EAAE,0BAA0B;4BAC1C,GAAG,OAAO;yBACX;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,qCAAqC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;wBAC3E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACtF,OAAO;oBACT,CAAC;oBAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,4CAA4C,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAS,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CACtC,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,MAAc;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY;aACrB,SAAS,EAAE;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAiB,CAAC;IACvD,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,8DAA8D;QAC9D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,gBAAgB,CAAC,GAAW;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,iBAAiB;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,mBAAmB,CAAC,GAAkB;QACpC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,IAAS;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;iBACjE,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;iBAClE,IAAI,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QACvE,CAAC;IACH,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAA8C,EAAE,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,+BAA+B,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QAC7E,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;QAE/D,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC;YAC/C,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClD,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjL,IAAI,MAAM,EAAE,SAAS;gBAAE,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,MAAM,CAAC;YACvE,KAAK,CAAC,eAAe,CAAC,GAAG,MAAM,EAAE,SAAS;gBACxC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;gBAChD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,KAAK,CAAC,eAAe,CAAC,GAAG,mBAAmB,CAAC;YAC7C,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC7B,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,CAAC,GAAG,mBAAmB,CAAC;YAC7C,KAAK,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;QACpC,CAAC;QAED,mBAAmB;QACnB,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC;QAE9D,iBAAiB;QACjB,MAAM,OAAO,GAAI,IAAI,CAAC,YAAoB,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACvE,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACnD,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,KAAK,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QAClD,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtF,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YACtD,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YACzD,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,KAAK,KAAK,CAAC;YACjF,KAAK,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;YACvE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1C,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACnG,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,oBAAoB,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,CAAC;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAI,WAAmB,CAAC,MAAM,CAAC;QACxC,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3E,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe;QACb,6CAA6C;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"HLSPlayerWrapper.d.ts","sourceRoot":"","sources":["../../src/render/HLSPlayerWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EAEZ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,cAAc,CAAC;IAChE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,KAAK,CAAuB;IAC7B,YAAY,EAAE,YAAY,CAAC;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAa;gBAExB,MAAM,EAAE,YAAY;IA+DhC,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAab,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAwHb,UAAU;IA0BxB,OAAO,CAAC,YAAY;IAoFd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,IAAI,IAAI;IAIP,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,IAAI,WAAW;IAIvB,WAAW,IAAI,MAAM;IAIrB,cAAc,IAAI,MAAM;IAIxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,MAAM;IAIzB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI/C,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMrC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IA0DhB,eAAe,IAAI,gBAAgB;IAInC,gBAAgB,IAAI,MAAM;IAS1B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMjD,cAAc,IAAI,UAAU,EAAE;IAM9B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOlC,cAAc;IAGd,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGtC,iBAAiB;IAGjB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,UAAU,CAAC,IAAI,EAAE,GAAG;IAUpB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IA6FrD,eAAe,IAAI,MAAM;IAQzB,YAAY,IAAI,OAAO;IAIvB,OAAO,IAAI,IAAI;IAiBf,OAAO,CAAC,aAAa,CAA0B;CAChD"}
1
+ {"version":3,"file":"HLSPlayerWrapper.d.ts","sourceRoot":"","sources":["../../src/render/HLSPlayerWrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EAEZ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,cAAc,CAAC;IAChE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,KAAK,CAAuB;IAC7B,YAAY,EAAE,YAAY,CAAC;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAa;gBAExB,MAAM,EAAE,YAAY;IA+DhC,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAab,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiJb,UAAU;IA0BxB,OAAO,CAAC,YAAY;IAoFd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,IAAI,IAAI;IAIP,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,IAAI,WAAW;IAIvB,WAAW,IAAI,MAAM;IAIrB,cAAc,IAAI,MAAM;IAIxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,MAAM;IAIzB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI/C,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMrC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAqEhB,eAAe,IAAI,gBAAgB;IAInC,gBAAgB,IAAI,MAAM;IAS1B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMjD,cAAc,IAAI,UAAU,EAAE;IAM9B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOlC,cAAc;IAGd,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGtC,iBAAiB;IAGjB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,UAAU,CAAC,IAAI,EAAE,GAAG;IAUpB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IA6FrD,eAAe,IAAI,MAAM;IAQzB,YAAY,IAAI,OAAO;IAIvB,OAAO,IAAI,IAAI;IAiBf,OAAO,CAAC,aAAa,CAA0B;CAChD"}