@ix_waterford/lib 1.0.5 → 1.0.7
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.
- package/dist/{static/js/async → async}/reactPlayerDash.js +3 -4
- package/dist/async/reactPlayerDash.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerHls.js +3 -4
- package/dist/async/reactPlayerHls.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerMux.js +3 -4
- package/dist/async/reactPlayerMux.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerPreview.js +6 -7
- package/dist/async/reactPlayerPreview.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerSpotify.js +3 -4
- package/dist/async/reactPlayerSpotify.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerTiktok.js +3 -4
- package/dist/async/reactPlayerTiktok.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerTwitch.js +3 -4
- package/dist/async/reactPlayerTwitch.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerVimeo.js +3 -4
- package/dist/async/reactPlayerVimeo.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerWistia.js +3 -4
- package/dist/async/reactPlayerWistia.js.map +1 -0
- package/dist/{static/js/async → async}/reactPlayerYouTube.js +3 -4
- package/dist/async/reactPlayerYouTube.js.map +1 -0
- package/dist/{static/js/async → async}/vendors-node_modules_custom-media-element_dist_custom-media-element_js-node_modules_media-tra-835023.js +1 -2
- package/dist/async/vendors-node_modules_custom-media-element_dist_custom-media-element_js-node_modules_media-tra-835023.js.map +1 -0
- package/dist/{static/js/async → async}/vendors-node_modules_dashjs_dist_modern_esm_dash_all_min_js.js +1 -2
- package/dist/async/vendors-node_modules_dashjs_dist_modern_esm_dash_all_min_js.js.map +1 -0
- package/dist/{static/js/async → async}/vendors-node_modules_hls_js_dist_hls_mjs.js +1 -2
- package/dist/async/vendors-node_modules_hls_js_dist_hls_mjs.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/{static/js/index.js → index.js} +360 -364
- package/dist/index.js.map +1 -0
- package/dist/lib-react.js +1462 -0
- package/dist/lib-react.js.map +1 -0
- package/dist/vendors-node_modules_rspack_core_dist_cssExtractHmr_js-node_modules_dayjs_plugin_utc_js-node_-5eb95d.js +53062 -0
- package/dist/vendors-node_modules_rspack_core_dist_cssExtractHmr_js-node_modules_dayjs_plugin_utc_js-node_-5eb95d.js.map +1 -0
- package/package.json +5 -5
- package/dist/static/js/async/reactPlayerDash.js.map +0 -1
- package/dist/static/js/async/reactPlayerHls.js.map +0 -1
- package/dist/static/js/async/reactPlayerMux.js.map +0 -1
- package/dist/static/js/async/reactPlayerPreview.js.map +0 -1
- package/dist/static/js/async/reactPlayerSpotify.js.map +0 -1
- package/dist/static/js/async/reactPlayerTiktok.js.map +0 -1
- package/dist/static/js/async/reactPlayerTwitch.js.map +0 -1
- package/dist/static/js/async/reactPlayerVimeo.js.map +0 -1
- package/dist/static/js/async/reactPlayerWistia.js.map +0 -1
- package/dist/static/js/async/reactPlayerYouTube.js.map +0 -1
- package/dist/static/js/async/vendors-node_modules_custom-media-element_dist_custom-media-element_js-node_modules_media-tra-835023.js.map +0 -1
- package/dist/static/js/async/vendors-node_modules_dashjs_dist_modern_esm_dash_all_min_js.js.map +0 -1
- package/dist/static/js/async/vendors-node_modules_hls_js_dist_hls_mjs.js.map +0 -1
- package/dist/static/js/index.js.map +0 -1
- package/dist/static/js/lib-react.js +0 -3235
- package/dist/static/js/lib-react.js.map +0 -1
- package/dist/static/js/vendors-node_modules_rspack_core_dist_cssExtractHmr_js-node_modules_dayjs_plugin_utc_js-node_-897cfa.js +0 -113737
- package/dist/static/js/vendors-node_modules_rspack_core_dist_cssExtractHmr_js-node_modules_dayjs_plugin_utc_js-node_-897cfa.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async/reactPlayerMux.js","sources":["/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/mux-player-react/dist/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/mux-player/dist/base.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/mux-player/dist/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/mux-video/dist/base.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/mux-video/dist/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@mux/playback-core/dist/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/castable-video/castable-mixin.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/castable-video/castable-remote-playback.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/castable-video/castable-utils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/constants.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/experimental/index.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/index.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/labels/labels.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/lang/en.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-airplay-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-captions-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-cast-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-chrome-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-chrome-dialog.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-chrome-range.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-container.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-control-bar.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-controller.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-duration-display.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-error-dialog.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-fullscreen-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-gesture-receiver.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-live-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-loading-indicator.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-mute-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-pip-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-play-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-playback-rate-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-poster-image.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-preview-chapter-display.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-preview-thumbnail.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-preview-time-display.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-seek-backward-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-seek-forward-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-store/media-store.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-store/request-map.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-store/state-mediator.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-store/util.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-text-display.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-theme-element.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-time-display.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-time-range.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-tooltip.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/media-volume-range.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/index.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-audio-track-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-audio-track-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-captions-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-captions-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-chrome-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-chrome-menu-item.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-chrome-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-context-menu-item.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-context-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-playback-rate-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-playback-rate-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-rendition-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-rendition-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-settings-menu-button.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-settings-menu-item.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/menu/media-settings-menu.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/anchor-utils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/attribute-token-list.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/captions.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/element-utils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/events.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/fullscreen-api.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/i18n.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/platform-tests.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/range-animation.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/resize-observer.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/server-safe-globals.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/template-parts.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/template-processor.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/time.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/media-chrome/dist/utils/utils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/mux-embed/dist/mux.mjs"],"sourcesContent":["\"use client\";import m,{useState as pe,useRef as Ee}from\"react\";import{MaxResolution as Le,MinResolution as Ae,RenditionOrder as Ie,generatePlayerInitTime as Me}from\"@mux/playback-core\";import{MediaError as Ke}from\"@mux/mux-player\";import X from\"react\";var M=parseInt(X.version)>=19,E={className:\"class\",classname:\"class\",htmlFor:\"for\",crossOrigin:\"crossorigin\",viewBox:\"viewBox\",playsInline:\"playsinline\",autoPlay:\"autoplay\",playbackRate:\"playbackrate\"},B=e=>e==null,ee=(e,t)=>B(t)?!1:e in t,te=e=>e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`),ne=(e,t)=>{if(!(!M&&typeof t==\"boolean\"&&!t)){if(ee(e,E))return E[e];if(typeof t!=\"undefined\")return/[A-Z]/.test(e)?te(e):e}};var ae=(e,t)=>!M&&typeof e==\"boolean\"?\"\":e,P=(e={})=>{let{ref:t,...n}=e;return Object.entries(n).reduce((o,[a,l])=>{let i=ne(a,l);if(!i)return o;let c=ae(l,a);return o[i]=c,o},{})};import*as d from\"react\";function x(e,t){if(typeof e==\"function\")return e(t);e!=null&&(e.current=t)}function re(...e){return t=>{let n=!1,o=e.map(a=>{let l=x(a,t);return!n&&typeof l==\"function\"&&(n=!0),l});if(n)return()=>{for(let a=0;a<o.length;a++){let l=o[a];typeof l==\"function\"?l():x(e[a],null)}}}}function f(...e){return d.useCallback(re(...e),e)}import{useEffect as le}from\"react\";var oe=Object.prototype.hasOwnProperty,ue=(e,t)=>{if(Object.is(e,t))return!0;if(typeof e!=\"object\"||e===null||typeof t!=\"object\"||t===null)return!1;if(Array.isArray(e))return!Array.isArray(t)||e.length!==t.length?!1:e.some((a,l)=>t[l]===a);let n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let a=0;a<n.length;a++)if(!oe.call(t,n[a])||!Object.is(e[n[a]],t[n[a]]))return!1;return!0},p=(e,t,n)=>!ue(t,e[n]),se=(e,t,n)=>{e[n]=t},ie=(e,t,n,o=se,a=p)=>le(()=>{let l=n==null?void 0:n.current;l&&a(l,t,e)&&o(l,t,e)},[n==null?void 0:n.current,t]),u=ie;var ye=()=>{try{return\"3.8.0\"}catch{}return\"UNKNOWN\"},me=ye(),g=()=>me;import{useEffect as ce}from\"react\";var r=(e,t,n)=>ce(()=>{let o=t==null?void 0:t.current;if(!o||!n)return;let a=e,l=n;return o.addEventListener(a,l),()=>{o.removeEventListener(a,l)}},[t==null?void 0:t.current,n,e]);var Pe=m.forwardRef(({children:e,...t},n)=>m.createElement(\"mux-player\",{suppressHydrationWarning:!0,...P(t),ref:n},e)),xe=(e,t)=>{let{onAbort:n,onCanPlay:o,onCanPlayThrough:a,onEmptied:l,onLoadStart:i,onLoadedData:c,onLoadedMetadata:v,onProgress:R,onDurationChange:T,onVolumeChange:h,onRateChange:b,onResize:C,onWaiting:k,onPlay:O,onPlaying:S,onTimeUpdate:w,onPause:N,onSeeking:L,onSeeked:A,onStalled:I,onSuspend:_,onEnded:K,onError:H,onCuePointChange:D,onChapterChange:V,metadata:W,tokens:U,paused:z,playbackId:F,playbackRates:G,currentTime:Z,themeProps:j,extraSourceParams:q,castCustomData:J,_hlsConfig:Y,...$}=t;return u(\"tokens\",U,e),u(\"playbackId\",F,e),u(\"playbackRates\",G,e),u(\"metadata\",W,e),u(\"extraSourceParams\",q,e),u(\"_hlsConfig\",Y,e),u(\"themeProps\",j,e),u(\"castCustomData\",J,e),u(\"paused\",z,e,(s,y)=>{y!=null&&(y?s.pause():s.play())},(s,y,Q)=>s.hasAttribute(\"autoplay\")&&!s.hasPlayed?!1:p(s,y,Q)),u(\"currentTime\",Z,e,(s,y)=>{y!=null&&(s.currentTime=y)}),r(\"abort\",e,n),r(\"canplay\",e,o),r(\"canplaythrough\",e,a),r(\"emptied\",e,l),r(\"loadstart\",e,i),r(\"loadeddata\",e,c),r(\"loadedmetadata\",e,v),r(\"progress\",e,R),r(\"durationchange\",e,T),r(\"volumechange\",e,h),r(\"ratechange\",e,b),r(\"resize\",e,C),r(\"waiting\",e,k),r(\"play\",e,O),r(\"playing\",e,S),r(\"timeupdate\",e,w),r(\"pause\",e,N),r(\"seeking\",e,L),r(\"seeked\",e,A),r(\"stalled\",e,I),r(\"suspend\",e,_),r(\"ended\",e,K),r(\"error\",e,H),r(\"cuepointchange\",e,D),r(\"chapterchange\",e,V),[$]},de=g(),fe=\"mux-player-react\",ge=m.forwardRef((e,t)=>{var i;let n=Ee(null),o=f(n,t),[a]=xe(n,e),[l]=pe((i=e.playerInitTime)!=null?i:Me());return m.createElement(Pe,{ref:o,defaultHiddenCaptions:e.defaultHiddenCaptions,playerSoftwareName:fe,playerSoftwareVersion:de,playerInitTime:l,...a})}),ze=ge;export{Le as MaxResolution,Ke as MediaError,Ae as MinResolution,Ie as RenditionOrder,ze as default,Me as generatePlayerInitTime,fe as playerSoftwareName,de as playerSoftwareVersion};\n//# sourceMappingURL=index.mjs.map\n","var Je=t=>{throw TypeError(t)};var he=(t,a,e)=>a.has(t)||Je(\"Cannot \"+e);var u=(t,a,e)=>(he(t,a,\"read from private field\"),e?e.call(t):a.get(t)),E=(t,a,e)=>a.has(t)?Je(\"Cannot add the same private member more than once\"):a instanceof WeakSet?a.add(t):a.set(t,e),C=(t,a,e,i)=>(he(t,a,\"write to private field\"),i?i.call(t,e):a.set(t,e),e),p=(t,a,e)=>(he(t,a,\"access private method\"),e);var F=class{addEventListener(){}removeEventListener(){}dispatchEvent(a){return!0}};if(typeof DocumentFragment==\"undefined\"){class t extends F{}globalThis.DocumentFragment=t}var G=class extends F{},ge=class extends F{},Ut={get(t){},define(t,a,e){},getName(t){return null},upgrade(t){},whenDefined(t){return Promise.resolve(G)}},j,fe=class{constructor(a,e={}){E(this,j);C(this,j,e==null?void 0:e.detail)}get detail(){return u(this,j)}initCustomEvent(){}};j=new WeakMap;function Vt(t,a){return new G}var et={document:{createElement:Vt},DocumentFragment,customElements:Ut,CustomEvent:fe,EventTarget:F,HTMLElement:G,HTMLVideoElement:ge},tt=typeof window==\"undefined\"||typeof globalThis.customElements==\"undefined\",k=tt?et:globalThis,P=tt?et.document:globalThis.document;import{MediaController as ha,MediaErrorDialog as St}from\"media-chrome\";import{Attributes as Oe}from\"media-chrome/dist/media-container.js\";import{MediaStateChangeEvents as kt,MediaUIAttributes as ce,MediaUIEvents as _t}from\"media-chrome/dist/constants.js\";import\"media-chrome/dist/experimental/index.js\";import{MediaError as be,Attributes as s}from\"@mux/mux-video/base\";import{StreamTypes as O,PlaybackTypes as pe,addTextTrack as ga,removeTextTrack as fa,CmcdTypeValues as Rt,i18n as B,parseJwt as Le,MuxJWTAud as Me,generatePlayerInitTime as ya}from\"@mux/playback-core\";import{i18n as Ft}from\"@mux/playback-core\";import{StreamTypes as Ee,parseJwt as it}from\"@mux/playback-core\";function at(t){let a=\"\";return Object.entries(t).forEach(([e,i])=>{i!=null&&(a+=`${re(e)}: ${i}; `)}),a?a.trim():void 0}function re(t){return t.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase()}function oe(t){return t.replace(/[-_]([a-z])/g,(a,e)=>e.toUpperCase())}function y(t){if(t==null)return;let a=+t;return Number.isNaN(a)?void 0:a}function ye(t){let a=Bt(t).toString();return a?\"?\"+a:\"\"}function Bt(t){let a={};for(let e in t)t[e]!=null&&(a[e]=t[e]);return new URLSearchParams(a)}var ve=(t,a)=>!t||!a?!1:t.contains(a)?!0:ve(t,a.getRootNode().host);var rt=\"mux.com\",Ht=()=>{try{return\"3.8.0\"}catch{}return\"UNKNOWN\"},Kt=Ht(),se=()=>Kt,ot=(t,{token:a,customDomain:e=rt,thumbnailTime:i,programTime:r}={})=>{var l;let n=a==null?i:void 0,{aud:d}=(l=it(a))!=null?l:{};if(!(a&&d!==\"t\"))return`https://image.${e}/${t}/thumbnail.webp${ye({token:a,time:n,program_time:r})}`},nt=(t,{token:a,customDomain:e=rt,programStartTime:i,programEndTime:r}={})=>{var d;let{aud:n}=(d=it(a))!=null?d:{};if(!(a&&n!==\"s\"))return`https://image.${e}/${t}/storyboard.vtt${ye({token:a,format:\"webp\",program_start_time:i,program_end_time:r})}`},z=t=>{if(t){if([Ee.LIVE,Ee.ON_DEMAND].includes(t))return t;if(t!=null&&t.includes(\"live\"))return Ee.LIVE}};var $t={crossorigin:\"crossOrigin\",playsinline:\"playsInline\"};function st(t){var a;return(a=$t[t])!=null?a:oe(t)}var D,U,v,ne=class{constructor(a,e){E(this,D);E(this,U);E(this,v,[]);C(this,D,a),C(this,U,e)}[Symbol.iterator](){return u(this,v).values()}get length(){return u(this,v).length}get value(){var a;return(a=u(this,v).join(\" \"))!=null?a:\"\"}set value(a){var e;a!==this.value&&(C(this,v,[]),this.add(...(e=a==null?void 0:a.split(\" \"))!=null?e:[]))}toString(){return this.value}item(a){return u(this,v)[a]}values(){return u(this,v).values()}keys(){return u(this,v).keys()}forEach(a){u(this,v).forEach(a)}add(...a){var e,i;a.forEach(r=>{this.contains(r)||u(this,v).push(r)}),!(this.value===\"\"&&!((e=u(this,D))!=null&&e.hasAttribute(`${u(this,U)}`)))&&((i=u(this,D))==null||i.setAttribute(`${u(this,U)}`,`${this.value}`))}remove(...a){var e;a.forEach(i=>{u(this,v).splice(u(this,v).indexOf(i),1)}),(e=u(this,D))==null||e.setAttribute(`${u(this,U)}`,`${this.value}`)}contains(a){return u(this,v).includes(a)}toggle(a,e){return typeof e!=\"undefined\"?e?(this.add(a),!0):(this.remove(a),!1):this.contains(a)?(this.remove(a),!1):(this.add(a),!0)}replace(a,e){this.remove(a),this.add(e)}};D=new WeakMap,U=new WeakMap,v=new WeakMap;var dt=`[mux-player ${se()}]`;function x(...t){console.warn(dt,...t)}function T(...t){console.error(dt,...t)}function Te(t){var e;let a=(e=t.message)!=null?e:\"\";t.context&&(a+=` ${t.context}`),t.file&&(a+=` ${Ft(\"Read more: \")}\nhttps://github.com/muxinc/elements/blob/main/errors/${t.file}`),x(a)}var g={AUTOPLAY:\"autoplay\",CROSSORIGIN:\"crossorigin\",LOOP:\"loop\",MUTED:\"muted\",PLAYSINLINE:\"playsinline\",PRELOAD:\"preload\"},N={VOLUME:\"volume\",PLAYBACKRATE:\"playbackrate\",MUTED:\"muted\"},Ha={...g,...N},ut=Object.freeze({length:0,start(t){let a=t>>>0;if(a>=this.length)throw new DOMException(`Failed to execute 'start' on 'TimeRanges': The index provided (${a}) is greater than or equal to the maximum bound (${this.length}).`);return 0},end(t){let a=t>>>0;if(a>=this.length)throw new DOMException(`Failed to execute 'end' on 'TimeRanges': The index provided (${a}) is greater than or equal to the maximum bound (${this.length}).`);return 0}}),Yt=Object.values(g).filter(t=>g.PLAYSINLINE!==t),Wt=Object.values(N),Zt=[...Yt,...Wt],Ae=class extends k.HTMLElement{static get observedAttributes(){return Zt}constructor(){super()}attributeChangedCallback(a,e,i){var r,n;switch(a){case N.MUTED:{this.media&&(this.media.muted=i!=null,this.media.defaultMuted=i!=null);return}case N.VOLUME:{let d=(r=y(i))!=null?r:1;this.media&&(this.media.volume=d);return}case N.PLAYBACKRATE:{let d=(n=y(i))!=null?n:1;this.media&&(this.media.playbackRate=d,this.media.defaultPlaybackRate=d);return}}}play(){var a,e;return(e=(a=this.media)==null?void 0:a.play())!=null?e:Promise.reject()}pause(){var a;(a=this.media)==null||a.pause()}load(){var a;(a=this.media)==null||a.load()}get media(){var a;return(a=this.shadowRoot)==null?void 0:a.querySelector(\"mux-video\")}get audioTracks(){return this.media.audioTracks}get videoTracks(){return this.media.videoTracks}get audioRenditions(){return this.media.audioRenditions}get videoRenditions(){return this.media.videoRenditions}get paused(){var a,e;return(e=(a=this.media)==null?void 0:a.paused)!=null?e:!0}get duration(){var a,e;return(e=(a=this.media)==null?void 0:a.duration)!=null?e:NaN}get ended(){var a,e;return(e=(a=this.media)==null?void 0:a.ended)!=null?e:!1}get buffered(){var a,e;return(e=(a=this.media)==null?void 0:a.buffered)!=null?e:ut}get seekable(){var a,e;return(e=(a=this.media)==null?void 0:a.seekable)!=null?e:ut}get readyState(){var a,e;return(e=(a=this.media)==null?void 0:a.readyState)!=null?e:0}get videoWidth(){var a,e;return(e=(a=this.media)==null?void 0:a.videoWidth)!=null?e:0}get videoHeight(){var a,e;return(e=(a=this.media)==null?void 0:a.videoHeight)!=null?e:0}get currentSrc(){var a,e;return(e=(a=this.media)==null?void 0:a.currentSrc)!=null?e:\"\"}get currentTime(){var a,e;return(e=(a=this.media)==null?void 0:a.currentTime)!=null?e:0}set currentTime(a){this.media&&(this.media.currentTime=Number(a))}get volume(){var a,e;return(e=(a=this.media)==null?void 0:a.volume)!=null?e:1}set volume(a){this.media&&(this.media.volume=Number(a))}get playbackRate(){var a,e;return(e=(a=this.media)==null?void 0:a.playbackRate)!=null?e:1}set playbackRate(a){this.media&&(this.media.playbackRate=Number(a))}get defaultPlaybackRate(){var a;return(a=y(this.getAttribute(N.PLAYBACKRATE)))!=null?a:1}set defaultPlaybackRate(a){a!=null?this.setAttribute(N.PLAYBACKRATE,`${a}`):this.removeAttribute(N.PLAYBACKRATE)}get crossOrigin(){return X(this,g.CROSSORIGIN)}set crossOrigin(a){this.setAttribute(g.CROSSORIGIN,`${a}`)}get autoplay(){return X(this,g.AUTOPLAY)!=null}set autoplay(a){a?this.setAttribute(g.AUTOPLAY,typeof a==\"string\"?a:\"\"):this.removeAttribute(g.AUTOPLAY)}get loop(){return X(this,g.LOOP)!=null}set loop(a){a?this.setAttribute(g.LOOP,\"\"):this.removeAttribute(g.LOOP)}get muted(){var a,e;return(e=(a=this.media)==null?void 0:a.muted)!=null?e:!1}set muted(a){this.media&&(this.media.muted=!!a)}get defaultMuted(){return X(this,g.MUTED)!=null}set defaultMuted(a){a?this.setAttribute(g.MUTED,\"\"):this.removeAttribute(g.MUTED)}get playsInline(){return X(this,g.PLAYSINLINE)!=null}set playsInline(a){T(\"playsInline is set to true by default and is not currently supported as a setter.\")}get preload(){return this.media?this.media.preload:this.getAttribute(\"preload\")}set preload(a){[\"\",\"none\",\"metadata\",\"auto\"].includes(a)?this.setAttribute(g.PRELOAD,a):this.removeAttribute(g.PRELOAD)}};function X(t,a){return t.media?t.media.getAttribute(a):t.getAttribute(a)}var Ce=Ae;import\"media-chrome/dist/media-theme-element.js\";var mt=`:host {\n --media-control-display: var(--controls);\n --media-loading-indicator-display: var(--loading-indicator);\n --media-dialog-display: var(--dialog);\n --media-play-button-display: var(--play-button);\n --media-live-button-display: var(--live-button);\n --media-seek-backward-button-display: var(--seek-backward-button);\n --media-seek-forward-button-display: var(--seek-forward-button);\n --media-mute-button-display: var(--mute-button);\n --media-captions-button-display: var(--captions-button);\n --media-captions-menu-button-display: var(--captions-menu-button, var(--media-captions-button-display));\n --media-rendition-menu-button-display: var(--rendition-menu-button);\n --media-audio-track-menu-button-display: var(--audio-track-menu-button);\n --media-airplay-button-display: var(--airplay-button);\n --media-pip-button-display: var(--pip-button);\n --media-fullscreen-button-display: var(--fullscreen-button);\n --media-cast-button-display: var(--cast-button, var(--_cast-button-drm-display));\n --media-playback-rate-button-display: var(--playback-rate-button);\n --media-playback-rate-menu-button-display: var(--playback-rate-menu-button);\n --media-volume-range-display: var(--volume-range);\n --media-time-range-display: var(--time-range);\n --media-time-display-display: var(--time-display);\n --media-duration-display-display: var(--duration-display);\n --media-title-display-display: var(--title-display);\n\n display: inline-block;\n line-height: 0;\n width: 100%;\n}\n\na {\n color: #fff;\n font-size: 0.9em;\n text-decoration: underline;\n}\n\nmedia-theme {\n display: inline-block;\n line-height: 0;\n width: 100%;\n height: 100%;\n direction: ltr;\n}\n\nmedia-poster-image {\n display: inline-block;\n line-height: 0;\n width: 100%;\n height: 100%;\n}\n\nmedia-poster-image:not([src]):not([placeholdersrc]) {\n display: none;\n}\n\n::part(top),\n[part~='top'] {\n --media-control-display: var(--controls, var(--top-controls));\n --media-play-button-display: var(--play-button, var(--top-play-button));\n --media-live-button-display: var(--live-button, var(--top-live-button));\n --media-seek-backward-button-display: var(--seek-backward-button, var(--top-seek-backward-button));\n --media-seek-forward-button-display: var(--seek-forward-button, var(--top-seek-forward-button));\n --media-mute-button-display: var(--mute-button, var(--top-mute-button));\n --media-captions-button-display: var(--captions-button, var(--top-captions-button));\n --media-captions-menu-button-display: var(\n --captions-menu-button,\n var(--media-captions-button-display, var(--top-captions-menu-button))\n );\n --media-rendition-menu-button-display: var(--rendition-menu-button, var(--top-rendition-menu-button));\n --media-audio-track-menu-button-display: var(--audio-track-menu-button, var(--top-audio-track-menu-button));\n --media-airplay-button-display: var(--airplay-button, var(--top-airplay-button));\n --media-pip-button-display: var(--pip-button, var(--top-pip-button));\n --media-fullscreen-button-display: var(--fullscreen-button, var(--top-fullscreen-button));\n --media-cast-button-display: var(--cast-button, var(--top-cast-button, var(--_cast-button-drm-display)));\n --media-playback-rate-button-display: var(--playback-rate-button, var(--top-playback-rate-button));\n --media-playback-rate-menu-button-display: var(\n --captions-menu-button,\n var(--media-playback-rate-button-display, var(--top-playback-rate-menu-button))\n );\n --media-volume-range-display: var(--volume-range, var(--top-volume-range));\n --media-time-range-display: var(--time-range, var(--top-time-range));\n --media-time-display-display: var(--time-display, var(--top-time-display));\n --media-duration-display-display: var(--duration-display, var(--top-duration-display));\n --media-title-display-display: var(--title-display, var(--top-title-display));\n}\n\n::part(center),\n[part~='center'] {\n --media-control-display: var(--controls, var(--center-controls));\n --media-play-button-display: var(--play-button, var(--center-play-button));\n --media-live-button-display: var(--live-button, var(--center-live-button));\n --media-seek-backward-button-display: var(--seek-backward-button, var(--center-seek-backward-button));\n --media-seek-forward-button-display: var(--seek-forward-button, var(--center-seek-forward-button));\n --media-mute-button-display: var(--mute-button, var(--center-mute-button));\n --media-captions-button-display: var(--captions-button, var(--center-captions-button));\n --media-captions-menu-button-display: var(\n --captions-menu-button,\n var(--media-captions-button-display, var(--center-captions-menu-button))\n );\n --media-rendition-menu-button-display: var(--rendition-menu-button, var(--center-rendition-menu-button));\n --media-audio-track-menu-button-display: var(--audio-track-menu-button, var(--center-audio-track-menu-button));\n --media-airplay-button-display: var(--airplay-button, var(--center-airplay-button));\n --media-pip-button-display: var(--pip-button, var(--center-pip-button));\n --media-fullscreen-button-display: var(--fullscreen-button, var(--center-fullscreen-button));\n --media-cast-button-display: var(--cast-button, var(--center-cast-button, var(--_cast-button-drm-display)));\n --media-playback-rate-button-display: var(--playback-rate-button, var(--center-playback-rate-button));\n --media-playback-rate-menu-button-display: var(\n --playback-rate-menu-button,\n var(--media-playback-rate-button-display, var(--center-playback-rate-menu-button))\n );\n --media-volume-range-display: var(--volume-range, var(--center-volume-range));\n --media-time-range-display: var(--time-range, var(--center-time-range));\n --media-time-display-display: var(--time-display, var(--center-time-display));\n --media-duration-display-display: var(--duration-display, var(--center-duration-display));\n}\n\n::part(bottom),\n[part~='bottom'] {\n --media-control-display: var(--controls, var(--bottom-controls));\n --media-play-button-display: var(--play-button, var(--bottom-play-button));\n --media-live-button-display: var(--live-button, var(--bottom-live-button));\n --media-seek-backward-button-display: var(--seek-backward-button, var(--bottom-seek-backward-button));\n --media-seek-forward-button-display: var(--seek-forward-button, var(--bottom-seek-forward-button));\n --media-mute-button-display: var(--mute-button, var(--bottom-mute-button));\n --media-captions-button-display: var(--captions-button, var(--bottom-captions-button));\n --media-captions-menu-button-display: var(\n --captions-menu-button,\n var(--media-captions-button-display, var(--bottom-captions-menu-button))\n );\n --media-rendition-menu-button-display: var(--rendition-menu-button, var(--bottom-rendition-menu-button));\n --media-audio-track-menu-button-display: var(--audio-track-menu-button, var(--bottom-audio-track-menu-button));\n --media-airplay-button-display: var(--airplay-button, var(--bottom-airplay-button));\n --media-pip-button-display: var(--pip-button, var(--bottom-pip-button));\n --media-fullscreen-button-display: var(--fullscreen-button, var(--bottom-fullscreen-button));\n --media-cast-button-display: var(--cast-button, var(--bottom-cast-button, var(--_cast-button-drm-display)));\n --media-playback-rate-button-display: var(--playback-rate-button, var(--bottom-playback-rate-button));\n --media-playback-rate-menu-button-display: var(\n --playback-rate-menu-button,\n var(--media-playback-rate-button-display, var(--bottom-playback-rate-menu-button))\n );\n --media-volume-range-display: var(--volume-range, var(--bottom-volume-range));\n --media-time-range-display: var(--time-range, var(--bottom-time-range));\n --media-time-display-display: var(--time-display, var(--bottom-time-display));\n --media-duration-display-display: var(--duration-display, var(--bottom-duration-display));\n --media-title-display-display: var(--title-display, var(--bottom-title-display));\n}\n\n:host([no-tooltips]) {\n --media-tooltip-display: none;\n}\n`;import{TemplateInstance as jt,ChildNodePart as le,AttrPart as ue}from\"media-chrome/dist/media-theme-element.js\";var q=new WeakMap,_e=class t{constructor(a,e){this.element=a;this.type=e;this.element.addEventListener(this.type,this);let i=q.get(this.element);i&&i.set(this.type,this)}set(a){if(typeof a==\"function\")this.handleEvent=a.bind(this.element);else if(typeof a==\"object\"&&typeof a.handleEvent==\"function\")this.handleEvent=a.handleEvent.bind(a);else{this.element.removeEventListener(this.type,this);let e=q.get(this.element);e&&e.delete(this.type)}}static for(a){q.has(a.element)||q.set(a.element,new Map);let e=a.attributeName.slice(2),i=q.get(a.element);return i&&i.has(e)?i.get(e):new t(a.element,e)}};function zt(t,a){return t instanceof ue&&t.attributeName.startsWith(\"on\")?(_e.for(t).set(a),t.element.removeAttributeNS(t.attributeNamespace,t.attributeName),!0):!1}function Xt(t,a){return a instanceof de&&t instanceof le?(a.renderInto(t),!0):!1}function qt(t,a){return a instanceof DocumentFragment&&t instanceof le?(a.childNodes.length&&t.replace(...a.childNodes),!0):!1}function Qt(t,a){if(t instanceof ue){let e=t.attributeNamespace,i=t.element.getAttributeNS(e,t.attributeName);return String(a)!==i&&(t.value=String(a)),!0}return t.value=String(a),!0}function Jt(t,a){if(t instanceof ue&&a instanceof Element){let e=t.element;return e[t.attributeName]!==a&&(t.element.removeAttributeNS(t.attributeNamespace,t.attributeName),e[t.attributeName]=a),!0}return!1}function ea(t,a){if(typeof a==\"boolean\"&&t instanceof ue){let e=t.attributeNamespace,i=t.element.hasAttributeNS(e,t.attributeName);return a!==i&&(t.booleanValue=a),!0}return!1}function ta(t,a){return a===!1&&t instanceof le?(t.replace(\"\"),!0):!1}function aa(t,a){Jt(t,a)||ea(t,a)||zt(t,a)||ta(t,a)||Xt(t,a)||qt(t,a)||Qt(t,a)}var ke=new Map,ct=new WeakMap,pt=new WeakMap,de=class{constructor(a,e,i){this.strings=a;this.values=e;this.processor=i;this.stringsKey=this.strings.join(\"\u0001\")}get template(){if(ke.has(this.stringsKey))return ke.get(this.stringsKey);{let a=P.createElement(\"template\"),e=this.strings.length-1;return a.innerHTML=this.strings.reduce((i,r,n)=>i+r+(n<e?`{{ ${n} }}`:\"\"),\"\"),ke.set(this.stringsKey,a),a}}renderInto(a){var r;let e=this.template;if(ct.get(a)!==e){ct.set(a,e);let n=new jt(e,this.values,this.processor);pt.set(a,n),a instanceof le?a.replace(...n.children):a.appendChild(n);return}let i=pt.get(a);(r=i==null?void 0:i.update)==null||r.call(i,this.values)}},ia={processCallback(t,a,e){var i;if(e){for(let[r,n]of a)if(r in e){let d=(i=e[r])!=null?i:\"\";aa(n,d)}}}};function Q(t,...a){return new de(t,a,ia)}function bt(t,a){t.renderInto(a)}import{StreamTypes as ra,toMuxVideoURL as ht}from\"@mux/playback-core\";var oa=t=>{let{tokens:a}=t;return a.drm?\":host(:not([cast-receiver])) { --_cast-button-drm-display: none; }\":\"\"},gt=t=>Q`\n <style>\n ${oa(t)}\n ${mt}\n </style>\n ${la(t)}\n`,na=t=>{let a=t.hotKeys?`${t.hotKeys}`:\"\";return z(t.streamType)===\"live\"&&(a+=\" noarrowleft noarrowright\"),a},sa={TOP:\"top\",CENTER:\"center\",BOTTOM:\"bottom\",LAYER:\"layer\",MEDIA_LAYER:\"media-layer\",POSTER_LAYER:\"poster-layer\",VERTICAL_LAYER:\"vertical-layer\",CENTERED_LAYER:\"centered-layer\",GESTURE_LAYER:\"gesture-layer\",CONTROLLER_LAYER:\"controller\",BUTTON:\"button\",RANGE:\"range\",DISPLAY:\"display\",CONTROL_BAR:\"control-bar\",MENU_BUTTON:\"menu-button\",MENU:\"menu\",OPTION:\"option\",POSTER:\"poster\",LIVE:\"live\",PLAY:\"play\",PRE_PLAY:\"pre-play\",SEEK_BACKWARD:\"seek-backward\",SEEK_FORWARD:\"seek-forward\",MUTE:\"mute\",CAPTIONS:\"captions\",AIRPLAY:\"airplay\",PIP:\"pip\",FULLSCREEN:\"fullscreen\",CAST:\"cast\",PLAYBACK_RATE:\"playback-rate\",VOLUME:\"volume\",TIME:\"time\",TITLE:\"title\",AUDIO_TRACK:\"audio-track\",RENDITION:\"rendition\"},da=Object.values(sa).join(\", \"),la=t=>{var a,e,i,r,n,d,l,b,S,Y,_,A,R,$,h,ie,W,Z,Ie,Pe,De,Ue,Ve,Be,He,Ke,$e,Fe,Ye,We,Ze,Ge,je,ze,Xe,qe,Qe;return Q`\n <media-theme\n template=\"${t.themeTemplate||!1}\"\n defaultstreamtype=\"${(a=t.defaultStreamType)!=null?a:!1}\"\n hotkeys=\"${na(t)||!1}\"\n nohotkeys=\"${t.noHotKeys||!t.hasSrc||!1}\"\n noautoseektolive=\"${!!((e=t.streamType)!=null&&e.includes(ra.LIVE))&&t.targetLiveWindow!==0}\"\n novolumepref=\"${t.novolumepref||!1}\"\n nomutedpref=\"${t.nomutedpref||!1}\"\n disabled=\"${!t.hasSrc||t.isDialogOpen}\"\n audio=\"${(i=t.audio)!=null?i:!1}\"\n style=\"${(r=at({\"--media-primary-color\":t.primaryColor,\"--media-secondary-color\":t.secondaryColor,\"--media-accent-color\":t.accentColor}))!=null?r:!1}\"\n defaultsubtitles=\"${!t.defaultHiddenCaptions}\"\n forwardseekoffset=\"${(n=t.forwardSeekOffset)!=null?n:!1}\"\n backwardseekoffset=\"${(d=t.backwardSeekOffset)!=null?d:!1}\"\n playbackrates=\"${(l=t.playbackRates)!=null?l:!1}\"\n defaultshowremainingtime=\"${(b=t.defaultShowRemainingTime)!=null?b:!1}\"\n defaultduration=\"${(S=t.defaultDuration)!=null?S:!1}\"\n hideduration=\"${(Y=t.hideDuration)!=null?Y:!1}\"\n title=\"${(_=t.title)!=null?_:!1}\"\n videotitle=\"${(A=t.videoTitle)!=null?A:!1}\"\n proudlydisplaymuxbadge=\"${(R=t.proudlyDisplayMuxBadge)!=null?R:!1}\"\n exportparts=\"${da}\"\n onclose=\"${t.onCloseErrorDialog}\"\n onfocusin=\"${t.onFocusInErrorDialog}\"\n >\n <mux-video\n slot=\"media\"\n inert=\"${($=t.noHotKeys)!=null?$:!1}\"\n target-live-window=\"${(h=t.targetLiveWindow)!=null?h:!1}\"\n stream-type=\"${(ie=z(t.streamType))!=null?ie:!1}\"\n crossorigin=\"${(W=t.crossOrigin)!=null?W:\"\"}\"\n playsinline\n autoplay=\"${(Z=t.autoplay)!=null?Z:!1}\"\n muted=\"${(Ie=t.muted)!=null?Ie:!1}\"\n loop=\"${(Pe=t.loop)!=null?Pe:!1}\"\n preload=\"${(De=t.preload)!=null?De:!1}\"\n debug=\"${(Ue=t.debug)!=null?Ue:!1}\"\n prefer-cmcd=\"${(Ve=t.preferCmcd)!=null?Ve:!1}\"\n disable-tracking=\"${(Be=t.disableTracking)!=null?Be:!1}\"\n disable-cookies=\"${(He=t.disableCookies)!=null?He:!1}\"\n prefer-playback=\"${(Ke=t.preferPlayback)!=null?Ke:!1}\"\n start-time=\"${t.startTime!=null?t.startTime:!1}\"\n beacon-collection-domain=\"${($e=t.beaconCollectionDomain)!=null?$e:!1}\"\n player-init-time=\"${(Fe=t.playerInitTime)!=null?Fe:!1}\"\n player-software-name=\"${(Ye=t.playerSoftwareName)!=null?Ye:!1}\"\n player-software-version=\"${(We=t.playerSoftwareVersion)!=null?We:!1}\"\n env-key=\"${(Ze=t.envKey)!=null?Ze:!1}\"\n custom-domain=\"${(Ge=t.customDomain)!=null?Ge:!1}\"\n src=\"${t.src?t.src:t.playbackId?ht(t):!1}\"\n cast-src=\"${t.src?t.src:t.playbackId?ht(t):!1}\"\n cast-receiver=\"${(je=t.castReceiver)!=null?je:!1}\"\n drm-token=\"${(Xe=(ze=t.tokens)==null?void 0:ze.drm)!=null?Xe:!1}\"\n exportparts=\"video\"\n disable-pseudo-ended=\"${(qe=t.disablePseudoEnded)!=null?qe:!1}\"\n >\n ${t.storyboard?Q`<track label=\"thumbnails\" default kind=\"metadata\" src=\"${t.storyboard}\" />`:Q``}\n <slot></slot>\n </mux-video>\n <slot name=\"poster\" slot=\"poster\">\n <media-poster-image\n part=\"poster\"\n exportparts=\"poster, img\"\n src=\"${t.poster?t.poster:!1}\"\n placeholdersrc=\"${(Qe=t.placeholder)!=null?Qe:!1}\"\n ></media-poster-image>\n </slot>\n </media-theme>\n`};import{errorCategoryToTokenNameOrPrefix as ft,i18n as f,MediaError as L,MuxErrorCategory as yt,MuxErrorCode as c}from\"@mux/playback-core\";var vt=t=>t.charAt(0).toUpperCase()+t.slice(1),ua=(t,a=!1)=>{var e,i;if(t.muxCode){let r=vt((e=t.errorCategory)!=null?e:\"video\"),n=ft((i=t.errorCategory)!=null?i:yt.VIDEO);if(t.muxCode===c.NETWORK_OFFLINE)return f(\"Your device appears to be offline\",a);if(t.muxCode===c.NETWORK_TOKEN_EXPIRED)return f(\"{category} URL has expired\",a).format({category:r});if([c.NETWORK_TOKEN_SUB_MISMATCH,c.NETWORK_TOKEN_AUD_MISMATCH,c.NETWORK_TOKEN_AUD_MISSING,c.NETWORK_TOKEN_MALFORMED].includes(t.muxCode))return f(\"{category} URL is formatted incorrectly\",a).format({category:r});if(t.muxCode===c.NETWORK_TOKEN_MISSING)return f(\"Invalid {categoryName} URL\",a).format({categoryName:n});if(t.muxCode===c.NETWORK_NOT_FOUND)return f(\"{category} does not exist\",a).format({category:r});if(t.muxCode===c.NETWORK_NOT_READY){let d=t.streamType===\"live\"?\"Live stream\":\"Video\";return f(\"{mediaType} is not currently available\",a).format({mediaType:d})}}if(t.code){if(t.code===L.MEDIA_ERR_NETWORK)return f(\"Network Error\",a);if(t.code===L.MEDIA_ERR_DECODE)return f(\"Media Error\",a);if(t.code===L.MEDIA_ERR_SRC_NOT_SUPPORTED)return f(\"Source Not Supported\",a)}return f(\"Error\",a)},ma=(t,a=!1)=>{var e,i;if(t.muxCode){let r=vt((e=t.errorCategory)!=null?e:\"video\"),n=ft((i=t.errorCategory)!=null?i:yt.VIDEO);return t.muxCode===c.NETWORK_OFFLINE?f(\"Check your internet connection and try reloading this video.\",a):t.muxCode===c.NETWORK_TOKEN_EXPIRED?f(\"The video\\u2019s secured {tokenNamePrefix}-token has expired.\",a).format({tokenNamePrefix:n}):t.muxCode===c.NETWORK_TOKEN_SUB_MISMATCH?f(\"The video\\u2019s playback ID does not match the one encoded in the {tokenNamePrefix}-token.\",a).format({tokenNamePrefix:n}):t.muxCode===c.NETWORK_TOKEN_MALFORMED?f(\"{category} URL is formatted incorrectly\",a).format({category:r}):[c.NETWORK_TOKEN_AUD_MISMATCH,c.NETWORK_TOKEN_AUD_MISSING].includes(t.muxCode)?f(\"The {tokenNamePrefix}-token is formatted with incorrect information.\",a).format({tokenNamePrefix:n}):[c.NETWORK_TOKEN_MISSING,c.NETWORK_INVALID_URL].includes(t.muxCode)?f(\"The video URL or {tokenNamePrefix}-token are formatted with incorrect or incomplete information.\",a).format({tokenNamePrefix:n}):t.muxCode===c.NETWORK_NOT_FOUND?\"\":t.message}return t.code&&(t.code===L.MEDIA_ERR_NETWORK||t.code===L.MEDIA_ERR_DECODE||t.code===L.MEDIA_ERR_SRC_NOT_SUPPORTED),t.message},Et=(t,a=!1)=>{let e=ua(t,a).toString(),i=ma(t,a).toString();return{title:e,message:i}},ca=t=>{if(t.muxCode){if(t.muxCode===c.NETWORK_TOKEN_EXPIRED)return\"403-expired-token.md\";if(t.muxCode===c.NETWORK_TOKEN_MALFORMED)return\"403-malformatted-token.md\";if([c.NETWORK_TOKEN_AUD_MISMATCH,c.NETWORK_TOKEN_AUD_MISSING].includes(t.muxCode))return\"403-incorrect-aud-value.md\";if(t.muxCode===c.NETWORK_TOKEN_SUB_MISMATCH)return\"403-playback-id-mismatch.md\";if(t.muxCode===c.NETWORK_TOKEN_MISSING)return\"missing-signed-tokens.md\";if(t.muxCode===c.NETWORK_NOT_FOUND)return\"404-not-found.md\";if(t.muxCode===c.NETWORK_NOT_READY)return\"412-not-playable.md\"}if(t.code){if(t.code===L.MEDIA_ERR_NETWORK)return\"\";if(t.code===L.MEDIA_ERR_DECODE)return\"media-decode-error.md\";if(t.code===L.MEDIA_ERR_SRC_NOT_SUPPORTED)return\"media-src-not-supported.md\"}return\"\"},Re=(t,a)=>{let e=ca(t);return{message:t.message,context:t.context,file:e}};var Tt=`<template id=\"media-theme-gerwig\">\n <style>\n @keyframes pre-play-hide {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n\n 30% {\n transform: scale(0.7);\n }\n\n 100% {\n transform: scale(1.5);\n opacity: 0;\n }\n }\n\n :host {\n --_primary-color: var(--media-primary-color, #fff);\n --_secondary-color: var(--media-secondary-color, transparent);\n --_accent-color: var(--media-accent-color, #fa50b5);\n --_text-color: var(--media-text-color, #000);\n\n --media-icon-color: var(--_primary-color);\n --media-control-background: var(--_secondary-color);\n --media-control-hover-background: var(--_accent-color);\n --media-time-buffered-color: rgba(255, 255, 255, 0.4);\n --media-preview-time-text-shadow: none;\n --media-control-height: 14px;\n --media-control-padding: 6px;\n --media-tooltip-container-margin: 6px;\n --media-tooltip-distance: 18px;\n\n color: var(--_primary-color);\n display: inline-block;\n width: 100%;\n height: 100%;\n }\n\n :host([audio]) {\n --_secondary-color: var(--media-secondary-color, black);\n --media-preview-time-text-shadow: none;\n }\n\n :host([audio]) ::slotted([slot='media']) {\n height: 0px;\n }\n\n :host([audio]) media-loading-indicator {\n display: none;\n }\n\n :host([audio]) media-controller {\n background: transparent;\n }\n\n :host([audio]) media-controller::part(vertical-layer) {\n background: transparent;\n }\n\n :host([audio]) media-control-bar {\n width: 100%;\n background-color: var(--media-control-background);\n }\n\n /*\n * 0.433s is the transition duration for VTT Regions.\n * Borrowed here, so the captions don't move too fast.\n */\n media-controller {\n --media-webkit-text-track-transform: translateY(0) scale(0.98);\n --media-webkit-text-track-transition: transform 0.433s ease-out 0.3s;\n }\n media-controller:is([mediapaused], :not([userinactive])) {\n --media-webkit-text-track-transform: translateY(-50px) scale(0.98);\n --media-webkit-text-track-transition: transform 0.15s ease;\n }\n\n /*\n * CSS specific to iOS devices.\n * See: https://stackoverflow.com/questions/30102792/css-media-query-to-target-only-ios-devices/60220757#60220757\n */\n @supports (-webkit-touch-callout: none) {\n /* Disable subtitle adjusting for iOS Safari */\n media-controller[mediaisfullscreen] {\n --media-webkit-text-track-transform: unset;\n --media-webkit-text-track-transition: unset;\n }\n }\n\n media-time-range {\n --media-box-padding-left: 6px;\n --media-box-padding-right: 6px;\n --media-range-bar-color: var(--_accent-color);\n --media-time-range-buffered-color: var(--_primary-color);\n --media-range-track-color: transparent;\n --media-range-track-background: rgba(255, 255, 255, 0.4);\n --media-range-thumb-background: radial-gradient(\n circle,\n #000 0%,\n #000 25%,\n var(--_accent-color) 25%,\n var(--_accent-color)\n );\n --media-range-thumb-width: 12px;\n --media-range-thumb-height: 12px;\n --media-range-thumb-transform: scale(0);\n --media-range-thumb-transition: transform 0.3s;\n --media-range-thumb-opacity: 1;\n --media-preview-background: var(--_primary-color);\n --media-box-arrow-background: var(--_primary-color);\n --media-preview-thumbnail-border: 5px solid var(--_primary-color);\n --media-preview-border-radius: 5px;\n --media-text-color: var(--_text-color);\n --media-control-hover-background: transparent;\n --media-preview-chapter-text-shadow: none;\n color: var(--_accent-color);\n padding: 0 6px;\n }\n\n :host([audio]) media-time-range {\n --media-preview-time-padding: 1.5px 6px;\n --media-preview-box-margin: 0 0 -5px;\n }\n\n media-time-range:hover {\n --media-range-thumb-transform: scale(1);\n }\n\n media-preview-thumbnail {\n border-bottom-width: 0;\n }\n\n [part~='menu'] {\n border-radius: 2px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n bottom: 50px;\n padding: 2.5px 10px;\n }\n\n [part~='menu']::part(indicator) {\n fill: var(--_accent-color);\n }\n\n [part~='menu']::part(menu-item) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n padding: 6px 10px;\n min-height: 34px;\n }\n\n [part~='menu']::part(checked) {\n font-weight: 700;\n }\n\n media-captions-menu,\n media-rendition-menu,\n media-audio-track-menu,\n media-playback-rate-menu {\n position: absolute; /* ensure they don't take up space in DOM on load */\n --media-menu-background: var(--_primary-color);\n --media-menu-item-checked-background: transparent;\n --media-text-color: var(--_text-color);\n --media-menu-item-hover-background: transparent;\n --media-menu-item-hover-outline: var(--_accent-color) solid 1px;\n }\n\n media-rendition-menu {\n min-width: 140px;\n }\n\n /* The icon is a circle so make it 16px high instead of 14px for more balance. */\n media-audio-track-menu-button {\n --media-control-padding: 5px;\n --media-control-height: 16px;\n }\n\n media-playback-rate-menu-button {\n --media-control-padding: 6px 3px;\n min-width: 4.4ch;\n }\n\n media-playback-rate-menu {\n --media-menu-flex-direction: row;\n --media-menu-item-checked-background: var(--_accent-color);\n --media-menu-item-checked-indicator-display: none;\n margin-right: 6px;\n padding: 0;\n --media-menu-gap: 0.25em;\n }\n\n media-playback-rate-menu[part~='menu']::part(menu-item) {\n padding: 6px 6px 6px 8px;\n }\n\n media-playback-rate-menu[part~='menu']::part(checked) {\n color: #fff;\n }\n\n :host(:not([audio])) media-time-range {\n /* Adding px is required here for calc() */\n --media-range-padding: 0px;\n background: transparent;\n z-index: 10;\n height: 10px;\n bottom: -3px;\n width: 100%;\n }\n\n media-control-bar :is([role='button'], [role='switch'], button) {\n line-height: 0;\n }\n\n media-control-bar :is([part*='button'], [part*='range'], [part*='display']) {\n border-radius: 3px;\n }\n\n .spacer {\n flex-grow: 1;\n background-color: var(--media-control-background, rgba(20, 20, 30, 0.7));\n }\n\n media-control-bar[slot~='top-chrome'] {\n min-height: 42px;\n pointer-events: none;\n }\n\n media-control-bar {\n --gradient-steps:\n hsl(0 0% 0% / 0) 0%, hsl(0 0% 0% / 0.013) 8.1%, hsl(0 0% 0% / 0.049) 15.5%, hsl(0 0% 0% / 0.104) 22.5%,\n hsl(0 0% 0% / 0.175) 29%, hsl(0 0% 0% / 0.259) 35.3%, hsl(0 0% 0% / 0.352) 41.2%, hsl(0 0% 0% / 0.45) 47.1%,\n hsl(0 0% 0% / 0.55) 52.9%, hsl(0 0% 0% / 0.648) 58.8%, hsl(0 0% 0% / 0.741) 64.7%, hsl(0 0% 0% / 0.825) 71%,\n hsl(0 0% 0% / 0.896) 77.5%, hsl(0 0% 0% / 0.951) 84.5%, hsl(0 0% 0% / 0.987) 91.9%, hsl(0 0% 0%) 100%;\n }\n\n :host([title]) media-control-bar[slot='top-chrome']::before,\n :host([videotitle]) media-control-bar[slot='top-chrome']::before {\n content: '';\n position: absolute;\n width: 100%;\n padding-bottom: min(100px, 25%);\n background: linear-gradient(to top, var(--gradient-steps));\n opacity: 0.8;\n pointer-events: none;\n }\n\n :host(:not([audio])) media-control-bar[part~='bottom']::before {\n content: '';\n position: absolute;\n width: 100%;\n bottom: 0;\n left: 0;\n padding-bottom: min(100px, 25%);\n background: linear-gradient(to bottom, var(--gradient-steps));\n opacity: 0.8;\n z-index: 1;\n pointer-events: none;\n }\n\n media-control-bar[part~='bottom'] > * {\n z-index: 20;\n }\n\n media-control-bar[part~='bottom'] {\n padding: 6px 6px;\n }\n\n media-control-bar[slot~='top-chrome'] > * {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n position: relative;\n }\n\n media-controller::part(vertical-layer) {\n transition: background-color 1s;\n }\n\n media-controller:is([mediapaused], :not([userinactive]))::part(vertical-layer) {\n background-color: var(--controls-backdrop-color, var(--controls, transparent));\n transition: background-color 0.25s;\n }\n\n .center-controls {\n --media-button-icon-width: 100%;\n --media-button-icon-height: auto;\n --media-tooltip-display: none;\n pointer-events: none;\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: center;\n justify-content: center;\n paint-order: stroke;\n stroke: rgba(102, 102, 102, 1);\n stroke-width: 0.3px;\n text-shadow:\n 0 0 2px rgb(0 0 0 / 0.25),\n 0 0 6px rgb(0 0 0 / 0.25);\n }\n\n .center-controls media-play-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n --media-control-padding: 0;\n width: 40px;\n filter: drop-shadow(0 0 2px rgb(0 0 0 / 0.25)) drop-shadow(0 0 6px rgb(0 0 0 / 0.25));\n }\n\n [breakpointsm] .center-controls media-play-button {\n width: 90px;\n height: 90px;\n border-radius: 50%;\n transition: background 0.4s;\n padding: 24px;\n --media-control-background: #000;\n --media-control-hover-background: var(--_accent-color);\n }\n\n .center-controls media-seek-backward-button,\n .center-controls media-seek-forward-button {\n --media-control-background: transparent;\n --media-control-hover-background: transparent;\n padding: 0;\n margin: 0 20px;\n width: max(33px, min(8%, 40px));\n text-shadow:\n 0 0 2px rgb(0 0 0 / 0.25),\n 0 0 6px rgb(0 0 0 / 0.25);\n }\n\n [breakpointsm]:not([audio]) .center-controls.pre-playback {\n display: grid;\n align-items: initial;\n justify-content: initial;\n height: 100%;\n overflow: hidden;\n }\n\n [breakpointsm]:not([audio]) .center-controls.pre-playback media-play-button {\n place-self: var(--_pre-playback-place, center);\n grid-area: 1 / 1;\n margin: 16px;\n }\n\n /* Show and hide controls or pre-playback state */\n\n [breakpointsm]:is([mediahasplayed], :not([mediapaused])):not([audio])\n .center-controls.pre-playback\n media-play-button {\n /* Using \\`forwards\\` would lead to a laggy UI after the animation got in the end state */\n animation: 0.3s linear pre-play-hide;\n opacity: 0;\n pointer-events: none;\n }\n\n .autoplay-unmute {\n --media-control-hover-background: transparent;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 0 2px rgb(0 0 0 / 0.25)) drop-shadow(0 0 6px rgb(0 0 0 / 0.25));\n }\n\n .autoplay-unmute-btn {\n --media-control-height: 16px;\n border-radius: 8px;\n background: #000;\n color: var(--_primary-color);\n display: flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 18px;\n font-weight: 500;\n cursor: pointer;\n }\n\n .autoplay-unmute-btn:hover {\n background: var(--_accent-color);\n }\n\n [breakpointsm] .autoplay-unmute-btn {\n --media-control-height: 30px;\n padding: 14px 24px;\n font-size: 26px;\n }\n\n .autoplay-unmute-btn svg {\n margin: 0 6px 0 0;\n }\n\n [breakpointsm] .autoplay-unmute-btn svg {\n margin: 0 10px 0 0;\n }\n\n media-controller:not([audio]):not([mediahasplayed]) *:is(media-control-bar, media-time-range) {\n display: none;\n }\n\n media-error-dialog:not([mediaerrorcode]) {\n opacity: 0;\n }\n\n media-loading-indicator {\n --media-loading-icon-width: 100%;\n --media-button-icon-height: auto;\n display: var(--media-control-display, var(--media-loading-indicator-display, flex));\n pointer-events: none;\n position: absolute;\n width: min(15%, 150px);\n flex-flow: row;\n align-items: center;\n justify-content: center;\n }\n\n /* Intentionally don't target the div for transition but the children\n of the div. Prevents messing with media-chrome's autohide feature. */\n media-loading-indicator + div * {\n transition: opacity 0.15s;\n opacity: 1;\n }\n\n media-loading-indicator[medialoading]:not([mediapaused]) ~ div > * {\n opacity: 0;\n transition-delay: 400ms;\n }\n\n media-volume-range {\n width: min(100%, 100px);\n --media-range-padding-left: 10px;\n --media-range-padding-right: 10px;\n --media-range-thumb-width: 12px;\n --media-range-thumb-height: 12px;\n --media-range-thumb-background: radial-gradient(\n circle,\n #000 0%,\n #000 25%,\n var(--_primary-color) 25%,\n var(--_primary-color)\n );\n --media-control-hover-background: none;\n }\n\n media-time-display {\n white-space: nowrap;\n }\n\n /* Generic style for explicitly disabled controls */\n media-control-bar[part~='bottom'] [disabled],\n media-control-bar[part~='bottom'] [aria-disabled='true'] {\n opacity: 60%;\n cursor: not-allowed;\n }\n\n media-text-display {\n --media-font-size: 16px;\n --media-control-padding: 14px;\n font-weight: 500;\n }\n\n media-play-button.animated *:is(g, path) {\n transition: all 0.3s;\n }\n\n media-play-button.animated[mediapaused] .pause-icon-pt1 {\n opacity: 0;\n }\n\n media-play-button.animated[mediapaused] .pause-icon-pt2 {\n transform-origin: center center;\n transform: scaleY(0);\n }\n\n media-play-button.animated[mediapaused] .play-icon {\n clip-path: inset(0 0 0 0);\n }\n\n media-play-button.animated:not([mediapaused]) .play-icon {\n clip-path: inset(0 0 0 100%);\n }\n\n media-seek-forward-button,\n media-seek-backward-button {\n --media-font-weight: 400;\n }\n\n .mute-icon {\n display: inline-block;\n }\n\n .mute-icon :is(path, g) {\n transition: opacity 0.5s;\n }\n\n .muted {\n opacity: 0;\n }\n\n media-mute-button[mediavolumelevel='low'] :is(.volume-medium, .volume-high),\n media-mute-button[mediavolumelevel='medium'] :is(.volume-high) {\n opacity: 0;\n }\n\n media-mute-button[mediavolumelevel='off'] .unmuted {\n opacity: 0;\n }\n\n media-mute-button[mediavolumelevel='off'] .muted {\n opacity: 1;\n }\n\n /**\n * Our defaults for these buttons are to hide them at small sizes\n * users can override this with CSS\n */\n media-controller:not([breakpointsm]):not([audio]) {\n --bottom-play-button: none;\n --bottom-seek-backward-button: none;\n --bottom-seek-forward-button: none;\n --bottom-time-display: none;\n --bottom-playback-rate-menu-button: none;\n --bottom-pip-button: none;\n }\n\n [part='mux-badge'] {\n position: absolute;\n bottom: 10px;\n right: 10px;\n z-index: 2;\n opacity: 0.6;\n transition:\n opacity 0.2s ease-in-out,\n bottom 0.2s ease-in-out;\n }\n\n [part='mux-badge']:hover {\n opacity: 1;\n }\n\n [part='mux-badge'] a {\n font-size: 14px;\n font-family: var(--_font-family);\n color: var(--_primary-color);\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n [part='mux-badge'] .mux-badge-text {\n transition: opacity 0.5s ease-in-out;\n opacity: 0;\n }\n\n [part='mux-badge'] .mux-badge-logo {\n width: 40px;\n height: auto;\n display: inline-block;\n }\n\n [part='mux-badge'] .mux-badge-logo svg {\n width: 100%;\n height: 100%;\n fill: white;\n }\n\n media-controller:not([userinactive]):not([mediahasplayed]) [part='mux-badge'],\n media-controller:not([userinactive]) [part='mux-badge'],\n media-controller[mediahasplayed][mediapaused] [part='mux-badge'] {\n transition: bottom 0.1s ease-in-out;\n }\n\n media-controller[userinactive]:not([mediapaused]) [part='mux-badge'] {\n transition: bottom 0.2s ease-in-out 0.62s;\n }\n\n media-controller:not([userinactive]) [part='mux-badge'] .mux-badge-text,\n media-controller[mediahasplayed][mediapaused] [part='mux-badge'] .mux-badge-text {\n opacity: 1;\n }\n\n media-controller[userinactive]:not([mediapaused]) [part='mux-badge'] .mux-badge-text {\n opacity: 0;\n }\n\n media-controller[userinactive]:not([mediapaused]) [part='mux-badge'] {\n bottom: 10px;\n }\n\n media-controller:not([userinactive]):not([mediahasplayed]) [part='mux-badge'] {\n bottom: 10px;\n }\n\n media-controller:not([userinactive])[mediahasplayed] [part='mux-badge'],\n media-controller[mediahasplayed][mediapaused] [part='mux-badge'] {\n bottom: calc(28px + var(--media-control-height, 0px) + var(--media-control-padding, 0px) * 2);\n }\n </style>\n\n <template partial=\"TitleDisplay\">\n <template if=\"videotitle\">\n <template if=\"videotitle != true\">\n <media-text-display part=\"top title display\" class=\"title-display\">{{videotitle}}</media-text-display>\n </template>\n </template>\n <template if=\"!videotitle\">\n <template if=\"title\">\n <media-text-display part=\"top title display\" class=\"title-display\">{{title}}</media-text-display>\n </template>\n </template>\n </template>\n\n <template partial=\"PlayButton\">\n <media-play-button\n part=\"{{section ?? 'bottom'}} play button\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n class=\"animated\"\n >\n <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"icon\">\n <g class=\"play-icon\">\n <path\n d=\"M15.5987 6.2911L3.45577 0.110898C2.83667 -0.204202 2.06287 0.189698 2.06287 0.819798V13.1802C2.06287 13.8103 2.83667 14.2042 3.45577 13.8891L15.5987 7.7089C16.2178 7.3938 16.2178 6.6061 15.5987 6.2911Z\"\n />\n </g>\n <g class=\"pause-icon\">\n <path\n class=\"pause-icon-pt1\"\n d=\"M5.90709 0H2.96889C2.46857 0 2.06299 0.405585 2.06299 0.9059V13.0941C2.06299 13.5944 2.46857 14 2.96889 14H5.90709C6.4074 14 6.81299 13.5944 6.81299 13.0941V0.9059C6.81299 0.405585 6.4074 0 5.90709 0Z\"\n />\n <path\n class=\"pause-icon-pt2\"\n d=\"M15.1571 0H12.2189C11.7186 0 11.313 0.405585 11.313 0.9059V13.0941C11.313 13.5944 11.7186 14 12.2189 14H15.1571C15.6574 14 16.063 13.5944 16.063 13.0941V0.9059C16.063 0.405585 15.6574 0 15.1571 0Z\"\n />\n </g>\n </svg>\n </media-play-button>\n </template>\n\n <template partial=\"PrePlayButton\">\n <media-play-button\n part=\"{{section ?? 'center'}} play button pre-play\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n >\n <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"icon\" style=\"transform: translate(3px, 0)\">\n <path\n d=\"M15.5987 6.2911L3.45577 0.110898C2.83667 -0.204202 2.06287 0.189698 2.06287 0.819798V13.1802C2.06287 13.8103 2.83667 14.2042 3.45577 13.8891L15.5987 7.7089C16.2178 7.3938 16.2178 6.6061 15.5987 6.2911Z\"\n />\n </svg>\n </media-play-button>\n </template>\n\n <template partial=\"SeekBackwardButton\">\n <media-seek-backward-button\n seekoffset=\"{{backwardseekoffset}}\"\n part=\"{{section ?? 'bottom'}} seek-backward button\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n >\n <svg viewBox=\"0 0 22 14\" aria-hidden=\"true\" slot=\"icon\">\n <path\n d=\"M3.65 2.07888L0.0864 6.7279C-0.0288 6.87812 -0.0288 7.12188 0.0864 7.2721L3.65 11.9211C3.7792 12.0896 4 11.9703 4 11.7321V2.26787C4 2.02968 3.7792 1.9104 3.65 2.07888Z\"\n />\n <text transform=\"translate(6 12)\" style=\"font-size: 14px; font-family: 'ArialMT', 'Arial'\">\n {{backwardseekoffset}}\n </text>\n </svg>\n </media-seek-backward-button>\n </template>\n\n <template partial=\"SeekForwardButton\">\n <media-seek-forward-button\n seekoffset=\"{{forwardseekoffset}}\"\n part=\"{{section ?? 'bottom'}} seek-forward button\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n >\n <svg viewBox=\"0 0 22 14\" aria-hidden=\"true\" slot=\"icon\">\n <g>\n <text transform=\"translate(-1 12)\" style=\"font-size: 14px; font-family: 'ArialMT', 'Arial'\">\n {{forwardseekoffset}}\n </text>\n <path\n d=\"M18.35 11.9211L21.9136 7.2721C22.0288 7.12188 22.0288 6.87812 21.9136 6.7279L18.35 2.07888C18.2208 1.91041 18 2.02968 18 2.26787V11.7321C18 11.9703 18.2208 12.0896 18.35 11.9211Z\"\n />\n </g>\n </svg>\n </media-seek-forward-button>\n </template>\n\n <template partial=\"MuteButton\">\n <media-mute-button part=\"bottom mute button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <svg viewBox=\"0 0 18 14\" slot=\"icon\" class=\"mute-icon\" aria-hidden=\"true\">\n <g class=\"unmuted\">\n <path\n d=\"M6.76786 1.21233L3.98606 3.98924H1.19937C0.593146 3.98924 0.101743 4.51375 0.101743 5.1607V6.96412L0 6.99998L0.101743 7.03583V8.83926C0.101743 9.48633 0.593146 10.0108 1.19937 10.0108H3.98606L6.76773 12.7877C7.23561 13.2547 8 12.9007 8 12.2171V1.78301C8 1.09925 7.23574 0.745258 6.76786 1.21233Z\"\n />\n <path\n class=\"volume-low\"\n d=\"M10 3.54781C10.7452 4.55141 11.1393 5.74511 11.1393 6.99991C11.1393 8.25471 10.7453 9.44791 10 10.4515L10.7988 11.0496C11.6734 9.87201 12.1356 8.47161 12.1356 6.99991C12.1356 5.52821 11.6735 4.12731 10.7988 2.94971L10 3.54781Z\"\n />\n <path\n class=\"volume-medium\"\n d=\"M12.3778 2.40086C13.2709 3.76756 13.7428 5.35806 13.7428 7.00026C13.7428 8.64246 13.2709 10.233 12.3778 11.5992L13.2106 12.1484C14.2107 10.6185 14.739 8.83796 14.739 7.00016C14.739 5.16236 14.2107 3.38236 13.2106 1.85156L12.3778 2.40086Z\"\n />\n <path\n class=\"volume-high\"\n d=\"M15.5981 0.75L14.7478 1.2719C15.7937 2.9919 16.3468 4.9723 16.3468 7C16.3468 9.0277 15.7937 11.0082 14.7478 12.7281L15.5981 13.25C16.7398 11.3722 17.343 9.211 17.343 7C17.343 4.789 16.7398 2.6268 15.5981 0.75Z\"\n />\n </g>\n <g class=\"muted\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.39976 4.98924H1.19937C1.19429 4.98924 1.17777 4.98961 1.15296 5.01609C1.1271 5.04369 1.10174 5.09245 1.10174 5.1607V8.83926C1.10174 8.90761 1.12714 8.95641 1.15299 8.984C1.17779 9.01047 1.1943 9.01084 1.19937 9.01084H4.39977L7 11.6066V2.39357L4.39976 4.98924ZM7.47434 1.92006C7.4743 1.9201 7.47439 1.92002 7.47434 1.92006V1.92006ZM6.76773 12.7877L3.98606 10.0108H1.19937C0.593146 10.0108 0.101743 9.48633 0.101743 8.83926V7.03583L0 6.99998L0.101743 6.96412V5.1607C0.101743 4.51375 0.593146 3.98924 1.19937 3.98924H3.98606L6.76786 1.21233C7.23574 0.745258 8 1.09925 8 1.78301V12.2171C8 12.9007 7.23561 13.2547 6.76773 12.7877Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15.2677 9.30323C15.463 9.49849 15.7796 9.49849 15.9749 9.30323C16.1701 9.10796 16.1701 8.79138 15.9749 8.59612L14.2071 6.82841L15.9749 5.06066C16.1702 4.8654 16.1702 4.54882 15.9749 4.35355C15.7796 4.15829 15.4631 4.15829 15.2678 4.35355L13.5 6.1213L11.7322 4.35348C11.537 4.15822 11.2204 4.15822 11.0251 4.35348C10.8298 4.54874 10.8298 4.86532 11.0251 5.06058L12.7929 6.82841L11.0251 8.59619C10.8299 8.79146 10.8299 9.10804 11.0251 9.3033C11.2204 9.49856 11.537 9.49856 11.7323 9.3033L13.5 7.53552L15.2677 9.30323Z\"\n />\n </g>\n </svg>\n </media-mute-button>\n </template>\n\n <template partial=\"PipButton\">\n <media-pip-button part=\"bottom pip button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"icon\">\n <path\n d=\"M15.9891 0H2.011C0.9004 0 0 0.9003 0 2.0109V11.989C0 13.0996 0.9004 14 2.011 14H15.9891C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.9891 0ZM17 11.9891C17 12.5465 16.5465 13 15.9891 13H2.011C1.4536 13 1.0001 12.5465 1.0001 11.9891V2.0109C1.0001 1.4535 1.4536 0.9999 2.011 0.9999H15.9891C16.5465 0.9999 17 1.4535 17 2.0109V11.9891Z\"\n />\n <path\n d=\"M15.356 5.67822H8.19523C8.03253 5.67822 7.90063 5.81012 7.90063 5.97282V11.3836C7.90063 11.5463 8.03253 11.6782 8.19523 11.6782H15.356C15.5187 11.6782 15.6506 11.5463 15.6506 11.3836V5.97282C15.6506 5.81012 15.5187 5.67822 15.356 5.67822Z\"\n />\n </svg>\n </media-pip-button>\n </template>\n\n <template partial=\"CaptionsMenu\">\n <media-captions-menu-button part=\"bottom captions button\">\n <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"on\">\n <path\n d=\"M15.989 0H2.011C0.9004 0 0 0.9003 0 2.0109V11.9891C0 13.0997 0.9004 14 2.011 14H15.989C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.989 0ZM4.2292 8.7639C4.5954 9.1902 5.0935 9.4031 5.7233 9.4031C6.1852 9.4031 6.5544 9.301 6.8302 9.0969C7.1061 8.8933 7.2863 8.614 7.3702 8.26H8.4322C8.3062 8.884 8.0093 9.3733 7.5411 9.7273C7.0733 10.0813 6.4703 10.2581 5.732 10.2581C5.108 10.2581 4.5699 10.1219 4.1168 9.8489C3.6637 9.5759 3.3141 9.1946 3.0685 8.7058C2.8224 8.2165 2.6994 7.6511 2.6994 7.009C2.6994 6.3611 2.8224 5.7927 3.0685 5.3034C3.3141 4.8146 3.6637 4.4323 4.1168 4.1559C4.5699 3.88 5.108 3.7418 5.732 3.7418C6.4703 3.7418 7.0733 3.922 7.5411 4.2818C8.0094 4.6422 8.3062 5.1461 8.4322 5.794H7.3702C7.2862 5.4283 7.106 5.1368 6.8302 4.921C6.5544 4.7052 6.1852 4.5968 5.7233 4.5968C5.0934 4.5968 4.5954 4.8116 4.2292 5.2404C3.8635 5.6696 3.6804 6.259 3.6804 7.009C3.6804 7.7531 3.8635 8.3381 4.2292 8.7639ZM11.0974 8.7639C11.4636 9.1902 11.9617 9.4031 12.5915 9.4031C13.0534 9.4031 13.4226 9.301 13.6984 9.0969C13.9743 8.8933 14.1545 8.614 14.2384 8.26H15.3004C15.1744 8.884 14.8775 9.3733 14.4093 9.7273C13.9415 10.0813 13.3385 10.2581 12.6002 10.2581C11.9762 10.2581 11.4381 10.1219 10.985 9.8489C10.5319 9.5759 10.1823 9.1946 9.9367 8.7058C9.6906 8.2165 9.5676 7.6511 9.5676 7.009C9.5676 6.3611 9.6906 5.7927 9.9367 5.3034C10.1823 4.8146 10.5319 4.4323 10.985 4.1559C11.4381 3.88 11.9762 3.7418 12.6002 3.7418C13.3385 3.7418 13.9415 3.922 14.4093 4.2818C14.8776 4.6422 15.1744 5.1461 15.3004 5.794H14.2384C14.1544 5.4283 13.9742 5.1368 13.6984 4.921C13.4226 4.7052 13.0534 4.5968 12.5915 4.5968C11.9616 4.5968 11.4636 4.8116 11.0974 5.2404C10.7317 5.6696 10.5486 6.259 10.5486 7.009C10.5486 7.7531 10.7317 8.3381 11.0974 8.7639Z\"\n />\n </svg>\n <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"off\">\n <path\n d=\"M5.73219 10.258C5.10819 10.258 4.57009 10.1218 4.11699 9.8488C3.66389 9.5758 3.31429 9.1945 3.06869 8.7057C2.82259 8.2164 2.69958 7.651 2.69958 7.0089C2.69958 6.361 2.82259 5.7926 3.06869 5.3033C3.31429 4.8145 3.66389 4.4322 4.11699 4.1558C4.57009 3.8799 5.10819 3.7417 5.73219 3.7417C6.47049 3.7417 7.07348 3.9219 7.54128 4.2817C8.00958 4.6421 8.30638 5.146 8.43238 5.7939H7.37039C7.28639 5.4282 7.10618 5.1367 6.83039 4.9209C6.55459 4.7051 6.18538 4.5967 5.72348 4.5967C5.09358 4.5967 4.59559 4.8115 4.22939 5.2403C3.86369 5.6695 3.68058 6.2589 3.68058 7.0089C3.68058 7.753 3.86369 8.338 4.22939 8.7638C4.59559 9.1901 5.09368 9.403 5.72348 9.403C6.18538 9.403 6.55459 9.3009 6.83039 9.0968C7.10629 8.8932 7.28649 8.6139 7.37039 8.2599H8.43238C8.30638 8.8839 8.00948 9.3732 7.54128 9.7272C7.07348 10.0812 6.47049 10.258 5.73219 10.258Z\"\n />\n <path\n d=\"M12.6003 10.258C11.9763 10.258 11.4382 10.1218 10.9851 9.8488C10.532 9.5758 10.1824 9.1945 9.93685 8.7057C9.69075 8.2164 9.56775 7.651 9.56775 7.0089C9.56775 6.361 9.69075 5.7926 9.93685 5.3033C10.1824 4.8145 10.532 4.4322 10.9851 4.1558C11.4382 3.8799 11.9763 3.7417 12.6003 3.7417C13.3386 3.7417 13.9416 3.9219 14.4094 4.2817C14.8777 4.6421 15.1745 5.146 15.3005 5.7939H14.2385C14.1545 5.4282 13.9743 5.1367 13.6985 4.9209C13.4227 4.7051 13.0535 4.5967 12.5916 4.5967C11.9617 4.5967 11.4637 4.8115 11.0975 5.2403C10.7318 5.6695 10.5487 6.2589 10.5487 7.0089C10.5487 7.753 10.7318 8.338 11.0975 8.7638C11.4637 9.1901 11.9618 9.403 12.5916 9.403C13.0535 9.403 13.4227 9.3009 13.6985 9.0968C13.9744 8.8932 14.1546 8.6139 14.2385 8.2599H15.3005C15.1745 8.8839 14.8776 9.3732 14.4094 9.7272C13.9416 10.0812 13.3386 10.258 12.6003 10.258Z\"\n />\n <path\n d=\"M15.9891 1C16.5465 1 17 1.4535 17 2.011V11.9891C17 12.5465 16.5465 13 15.9891 13H2.0109C1.4535 13 1 12.5465 1 11.9891V2.0109C1 1.4535 1.4535 0.9999 2.0109 0.9999L15.9891 1ZM15.9891 0H2.0109C0.9003 0 0 0.9003 0 2.0109V11.9891C0 13.0997 0.9003 14 2.0109 14H15.9891C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.9891 0Z\"\n />\n </svg>\n </media-captions-menu-button>\n <media-captions-menu\n hidden\n anchor=\"auto\"\n part=\"bottom captions menu\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n exportparts=\"menu-item\"\n >\n <div slot=\"checked-indicator\">\n <style>\n .indicator {\n position: relative;\n top: 1px;\n width: 0.9em;\n height: auto;\n fill: var(--_accent-color);\n margin-right: 5px;\n }\n\n [aria-checked='false'] .indicator {\n display: none;\n }\n </style>\n <svg viewBox=\"0 0 14 18\" class=\"indicator\">\n <path\n d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n fill-rule=\"evenodd\"\n />\n </svg></div\n ></media-captions-menu>\n </template>\n\n <template partial=\"AirplayButton\">\n <media-airplay-button part=\"bottom airplay button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"icon\">\n <path\n d=\"M16.1383 0H1.8618C0.8335 0 0 0.8335 0 1.8617V10.1382C0 11.1664 0.8335 12 1.8618 12H3.076C3.1204 11.9433 3.1503 11.8785 3.2012 11.826L4.004 11H1.8618C1.3866 11 1 10.6134 1 10.1382V1.8617C1 1.3865 1.3866 0.9999 1.8618 0.9999H16.1383C16.6135 0.9999 17.0001 1.3865 17.0001 1.8617V10.1382C17.0001 10.6134 16.6135 11 16.1383 11H13.9961L14.7989 11.826C14.8499 11.8785 14.8798 11.9432 14.9241 12H16.1383C17.1665 12 18.0001 11.1664 18.0001 10.1382V1.8617C18 0.8335 17.1665 0 16.1383 0Z\"\n />\n <path\n d=\"M9.55061 8.21903C9.39981 8.06383 9.20001 7.98633 9.00011 7.98633C8.80021 7.98633 8.60031 8.06383 8.44951 8.21903L4.09771 12.697C3.62471 13.1838 3.96961 13.9998 4.64831 13.9998H13.3518C14.0304 13.9998 14.3754 13.1838 13.9023 12.697L9.55061 8.21903Z\"\n />\n </svg>\n </media-airplay-button>\n </template>\n\n <template partial=\"FullscreenButton\">\n <media-fullscreen-button part=\"bottom fullscreen button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"enter\">\n <path\n d=\"M1.00745 4.39539L1.01445 1.98789C1.01605 1.43049 1.47085 0.978289 2.02835 0.979989L6.39375 0.992589L6.39665 -0.007411L2.03125 -0.020011C0.920646 -0.023211 0.0176463 0.874489 0.0144463 1.98509L0.00744629 4.39539H1.00745Z\"\n />\n <path\n d=\"M17.0144 2.03431L17.0076 4.39541H18.0076L18.0144 2.03721C18.0176 0.926712 17.1199 0.0237125 16.0093 0.0205125L11.6439 0.0078125L11.641 1.00781L16.0064 1.02041C16.5638 1.02201 17.016 1.47681 17.0144 2.03431Z\"\n />\n <path\n d=\"M16.9925 9.60498L16.9855 12.0124C16.9839 12.5698 16.5291 13.022 15.9717 13.0204L11.6063 13.0078L11.6034 14.0078L15.9688 14.0204C17.0794 14.0236 17.9823 13.1259 17.9855 12.0153L17.9925 9.60498H16.9925Z\"\n />\n <path\n d=\"M0.985626 11.9661L0.992426 9.60498H-0.0074737L-0.0142737 11.9632C-0.0174737 13.0738 0.880226 13.9767 1.99083 13.98L6.35623 13.9926L6.35913 12.9926L1.99373 12.98C1.43633 12.9784 0.983926 12.5236 0.985626 11.9661Z\"\n />\n </svg>\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"exit\">\n <path\n d=\"M5.39655 -0.0200195L5.38955 2.38748C5.38795 2.94488 4.93315 3.39708 4.37565 3.39538L0.0103463 3.38278L0.00744629 4.38278L4.37285 4.39538C5.48345 4.39858 6.38635 3.50088 6.38965 2.39028L6.39665 -0.0200195H5.39655Z\"\n />\n <path\n d=\"M12.6411 2.36891L12.6479 0.0078125H11.6479L11.6411 2.36601C11.6379 3.47651 12.5356 4.37951 13.6462 4.38271L18.0116 4.39531L18.0145 3.39531L13.6491 3.38271C13.0917 3.38111 12.6395 2.92641 12.6411 2.36891Z\"\n />\n <path\n d=\"M12.6034 14.0204L12.6104 11.613C12.612 11.0556 13.0668 10.6034 13.6242 10.605L17.9896 10.6176L17.9925 9.61759L13.6271 9.60499C12.5165 9.60179 11.6136 10.4995 11.6104 11.6101L11.6034 14.0204H12.6034Z\"\n />\n <path\n d=\"M5.359 11.6315L5.3522 13.9926H6.3522L6.359 11.6344C6.3622 10.5238 5.4645 9.62088 4.3539 9.61758L-0.0115043 9.60498L-0.0144043 10.605L4.351 10.6176C4.9084 10.6192 5.3607 11.074 5.359 11.6315Z\"\n />\n </svg>\n </media-fullscreen-button>\n </template>\n\n <template partial=\"CastButton\">\n <media-cast-button part=\"bottom cast button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"enter\">\n <path\n d=\"M16.0072 0H2.0291C0.9185 0 0.0181 0.9003 0.0181 2.011V5.5009C0.357 5.5016 0.6895 5.5275 1.0181 5.5669V2.011C1.0181 1.4536 1.4716 1 2.029 1H16.0072C16.5646 1 17.0181 1.4536 17.0181 2.011V11.9891C17.0181 12.5465 16.5646 13 16.0072 13H8.4358C8.4746 13.3286 8.4999 13.6611 8.4999 13.9999H16.0071C17.1177 13.9999 18.018 13.0996 18.018 11.989V2.011C18.0181 0.9003 17.1178 0 16.0072 0ZM0 6.4999V7.4999C3.584 7.4999 6.5 10.4159 6.5 13.9999H7.5C7.5 9.8642 4.1357 6.4999 0 6.4999ZM0 8.7499V9.7499C2.3433 9.7499 4.25 11.6566 4.25 13.9999H5.25C5.25 11.1049 2.895 8.7499 0 8.7499ZM0.0181 11V14H3.0181C3.0181 12.3431 1.675 11 0.0181 11Z\"\n />\n </svg>\n <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"exit\">\n <path\n d=\"M15.9891 0H2.01103C0.900434 0 3.35947e-05 0.9003 3.35947e-05 2.011V5.5009C0.338934 5.5016 0.671434 5.5275 1.00003 5.5669V2.011C1.00003 1.4536 1.45353 1 2.01093 1H15.9891C16.5465 1 17 1.4536 17 2.011V11.9891C17 12.5465 16.5465 13 15.9891 13H8.41773C8.45653 13.3286 8.48183 13.6611 8.48183 13.9999H15.989C17.0996 13.9999 17.9999 13.0996 17.9999 11.989V2.011C18 0.9003 17.0997 0 15.9891 0ZM-0.0180664 6.4999V7.4999C3.56593 7.4999 6.48193 10.4159 6.48193 13.9999H7.48193C7.48193 9.8642 4.11763 6.4999 -0.0180664 6.4999ZM-0.0180664 8.7499V9.7499C2.32523 9.7499 4.23193 11.6566 4.23193 13.9999H5.23193C5.23193 11.1049 2.87693 8.7499 -0.0180664 8.7499ZM3.35947e-05 11V14H3.00003C3.00003 12.3431 1.65693 11 3.35947e-05 11Z\"\n />\n <path d=\"M2.15002 5.634C5.18352 6.4207 7.57252 8.8151 8.35282 11.8499H15.8501V2.1499H2.15002V5.634Z\" />\n </svg>\n </media-cast-button>\n </template>\n\n <template partial=\"LiveButton\">\n <media-live-button part=\"{{section ?? 'top'}} live button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <span slot=\"text\">Live</span>\n </media-live-button>\n </template>\n\n <template partial=\"PlaybackRateMenu\">\n <media-playback-rate-menu-button part=\"bottom playback-rate button\"></media-playback-rate-menu-button>\n <media-playback-rate-menu\n hidden\n anchor=\"auto\"\n rates=\"{{playbackrates}}\"\n exportparts=\"menu-item\"\n part=\"bottom playback-rate menu\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n ></media-playback-rate-menu>\n </template>\n\n <template partial=\"VolumeRange\">\n <media-volume-range\n part=\"bottom volume range\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n ></media-volume-range>\n </template>\n\n <template partial=\"TimeDisplay\">\n <media-time-display\n remaining=\"{{defaultshowremainingtime}}\"\n showduration=\"{{!hideduration}}\"\n part=\"bottom time display\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n ></media-time-display>\n </template>\n\n <template partial=\"TimeRange\">\n <media-time-range part=\"bottom time range\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n <media-preview-thumbnail slot=\"preview\"></media-preview-thumbnail>\n <media-preview-chapter-display slot=\"preview\"></media-preview-chapter-display>\n <media-preview-time-display slot=\"preview\"></media-preview-time-display>\n <div slot=\"preview\" part=\"arrow\"></div>\n </media-time-range>\n </template>\n\n <template partial=\"AudioTrackMenu\">\n <media-audio-track-menu-button part=\"bottom audio-track button\">\n <svg aria-hidden=\"true\" slot=\"icon\" viewBox=\"0 0 18 16\">\n <path d=\"M9 15A7 7 0 1 1 9 1a7 7 0 0 1 0 14Zm0 1A8 8 0 1 0 9 0a8 8 0 0 0 0 16Z\" />\n <path\n d=\"M5.2 6.3a.5.5 0 0 1 .5.5v2.4a.5.5 0 1 1-1 0V6.8a.5.5 0 0 1 .5-.5Zm2.4-2.4a.5.5 0 0 1 .5.5v7.2a.5.5 0 0 1-1 0V4.4a.5.5 0 0 1 .5-.5ZM10 5.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.4-.8a.5.5 0 0 1 .5.5v5.6a.5.5 0 0 1-1 0V5.2a.5.5 0 0 1 .5-.5Z\"\n />\n </svg>\n </media-audio-track-menu-button>\n <media-audio-track-menu\n hidden\n anchor=\"auto\"\n part=\"bottom audio-track menu\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n exportparts=\"menu-item\"\n >\n <div slot=\"checked-indicator\">\n <style>\n .indicator {\n position: relative;\n top: 1px;\n width: 0.9em;\n height: auto;\n fill: var(--_accent-color);\n margin-right: 5px;\n }\n\n [aria-checked='false'] .indicator {\n display: none;\n }\n </style>\n <svg viewBox=\"0 0 14 18\" class=\"indicator\">\n <path\n d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </div>\n </media-audio-track-menu>\n </template>\n\n <template partial=\"RenditionMenu\">\n <media-rendition-menu-button part=\"bottom rendition button\">\n <svg aria-hidden=\"true\" slot=\"icon\" viewBox=\"0 0 18 14\">\n <path\n d=\"M2.25 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM9 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm6.75 0a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\"\n />\n </svg>\n </media-rendition-menu-button>\n <media-rendition-menu\n hidden\n anchor=\"auto\"\n part=\"bottom rendition menu\"\n disabled=\"{{disabled}}\"\n aria-disabled=\"{{disabled}}\"\n >\n <div slot=\"checked-indicator\">\n <style>\n .indicator {\n position: relative;\n top: 1px;\n width: 0.9em;\n height: auto;\n fill: var(--_accent-color);\n margin-right: 5px;\n }\n\n [aria-checked='false'] .indicator {\n opacity: 0;\n }\n </style>\n <svg viewBox=\"0 0 14 18\" class=\"indicator\">\n <path\n d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </div>\n </media-rendition-menu>\n </template>\n\n <template partial=\"MuxBadge\">\n <div part=\"mux-badge\">\n <a href=\"https://www.mux.com/player\" target=\"_blank\">\n <span class=\"mux-badge-text\">Powered by</span>\n <div class=\"mux-badge-logo\">\n <svg\n viewBox=\"0 0 1600 500\"\n style=\"fill-rule: evenodd; clip-rule: evenodd; stroke-linejoin: round; stroke-miterlimit: 2\"\n >\n <g>\n <path\n d=\"M994.287,93.486c-17.121,-0 -31,-13.879 -31,-31c0,-17.121 13.879,-31 31,-31c17.121,-0 31,13.879 31,31c0,17.121 -13.879,31 -31,31m0,-93.486c-34.509,-0 -62.484,27.976 -62.484,62.486l0,187.511c0,68.943 -56.09,125.033 -125.032,125.033c-68.942,-0 -125.03,-56.09 -125.03,-125.033l0,-187.511c0,-34.51 -27.976,-62.486 -62.485,-62.486c-34.509,-0 -62.484,27.976 -62.484,62.486l0,187.511c0,137.853 112.149,250.003 249.999,250.003c137.851,-0 250.001,-112.15 250.001,-250.003l0,-187.511c0,-34.51 -27.976,-62.486 -62.485,-62.486\"\n style=\"fill-rule: nonzero\"\n ></path>\n <path\n d=\"M1537.51,468.511c-17.121,-0 -31,-13.879 -31,-31c0,-17.121 13.879,-31 31,-31c17.121,-0 31,13.879 31,31c0,17.121 -13.879,31 -31,31m-275.883,-218.509l-143.33,143.329c-24.402,24.402 -24.402,63.966 0,88.368c24.402,24.402 63.967,24.402 88.369,-0l143.33,-143.329l143.328,143.329c24.402,24.4 63.967,24.402 88.369,-0c24.403,-24.402 24.403,-63.966 0.001,-88.368l-143.33,-143.329l0.001,-0.004l143.329,-143.329c24.402,-24.402 24.402,-63.965 0,-88.367c-24.402,-24.402 -63.967,-24.402 -88.369,-0l-143.329,143.328l-143.329,-143.328c-24.402,-24.401 -63.967,-24.402 -88.369,-0c-24.402,24.402 -24.402,63.965 0,88.367l143.329,143.329l0,0.004Z\"\n style=\"fill-rule: nonzero\"\n ></path>\n <path\n d=\"M437.511,468.521c-17.121,-0 -31,-13.879 -31,-31c0,-17.121 13.879,-31 31,-31c17.121,-0 31,13.879 31,31c0,17.121 -13.879,31 -31,31m23.915,-463.762c-23.348,-9.672 -50.226,-4.327 -68.096,13.544l-143.331,143.329l-143.33,-143.329c-17.871,-17.871 -44.747,-23.216 -68.096,-13.544c-23.349,9.671 -38.574,32.455 -38.574,57.729l0,375.026c0,34.51 27.977,62.486 62.487,62.486c34.51,-0 62.486,-27.976 62.486,-62.486l0,-224.173l80.843,80.844c24.404,24.402 63.965,24.402 88.369,-0l80.843,-80.844l0,224.173c0,34.51 27.976,62.486 62.486,62.486c34.51,-0 62.486,-27.976 62.486,-62.486l0,-375.026c0,-25.274 -15.224,-48.058 -38.573,-57.729\"\n style=\"fill-rule: nonzero\"\n ></path>\n </g>\n </svg>\n </div>\n </a>\n </div>\n </template>\n\n <media-controller\n part=\"controller\"\n defaultstreamtype=\"{{defaultstreamtype ?? 'on-demand'}}\"\n breakpoints=\"sm:470\"\n gesturesdisabled=\"{{disabled}}\"\n hotkeys=\"{{hotkeys}}\"\n nohotkeys=\"{{nohotkeys}}\"\n novolumepref=\"{{novolumepref}}\"\n audio=\"{{audio}}\"\n noautoseektolive=\"{{noautoseektolive}}\"\n defaultsubtitles=\"{{defaultsubtitles}}\"\n defaultduration=\"{{defaultduration ?? false}}\"\n keyboardforwardseekoffset=\"{{forwardseekoffset}}\"\n keyboardbackwardseekoffset=\"{{backwardseekoffset}}\"\n exportparts=\"layer, media-layer, poster-layer, vertical-layer, centered-layer, gesture-layer\"\n style=\"--_pre-playback-place:{{preplaybackplace ?? 'center'}}\"\n >\n <slot name=\"media\" slot=\"media\"></slot>\n <slot name=\"poster\" slot=\"poster\"></slot>\n\n <media-loading-indicator slot=\"centered-chrome\" noautohide></media-loading-indicator>\n\n <template if=\"!audio\">\n <media-error-dialog slot=\"dialog\" noautohide></media-error-dialog>\n <!-- Pre-playback UI -->\n <!-- same for both on-demand and live -->\n <div slot=\"centered-chrome\" class=\"center-controls pre-playback\">\n <template if=\"!breakpointsm\">{{>PlayButton section=\"center\"}}</template>\n <template if=\"breakpointsm\">{{>PrePlayButton section=\"center\"}}</template>\n </div>\n\n <!-- Mux Badge -->\n <template if=\"proudlydisplaymuxbadge\"> {{>MuxBadge}} </template>\n\n <!-- Autoplay centered unmute button -->\n <!--\n todo: figure out how show this with available state variables\n needs to show when:\n - autoplay is enabled\n - playback has been successful\n - audio is muted\n - in place / instead of the pre-plaback play button\n - not to show again after user has interacted with this button\n - OR user has interacted with the mute button in the control bar\n -->\n <!--\n There should be a >MuteButton to the left of the \"Unmute\" text, but a templating bug\n makes it appear even if commented out in the markup, add it back when code is un-commented\n -->\n <!-- <div slot=\"centered-chrome\" class=\"autoplay-unmute\">\n <div role=\"button\" class=\"autoplay-unmute-btn\">Unmute</div>\n </div> -->\n\n <template if=\"streamtype == 'on-demand'\">\n <template if=\"breakpointsm\">\n <media-control-bar part=\"control-bar top\" slot=\"top-chrome\">{{>TitleDisplay}} </media-control-bar>\n </template>\n {{>TimeRange}}\n <media-control-bar part=\"control-bar bottom\">\n {{>PlayButton}} {{>SeekBackwardButton}} {{>SeekForwardButton}} {{>TimeDisplay}} {{>MuteButton}}\n {{>VolumeRange}}\n <div class=\"spacer\"></div>\n {{>RenditionMenu}} {{>PlaybackRateMenu}} {{>AudioTrackMenu}} {{>CaptionsMenu}} {{>AirplayButton}}\n {{>CastButton}} {{>PipButton}} {{>FullscreenButton}}\n </media-control-bar>\n </template>\n\n <template if=\"streamtype == 'live'\">\n <media-control-bar part=\"control-bar top\" slot=\"top-chrome\">\n {{>LiveButton}}\n <template if=\"breakpointsm\"> {{>TitleDisplay}} </template>\n </media-control-bar>\n <template if=\"targetlivewindow > 0\">{{>TimeRange}}</template>\n <media-control-bar part=\"control-bar bottom\">\n {{>PlayButton}}\n <template if=\"targetlivewindow > 0\">{{>SeekBackwardButton}} {{>SeekForwardButton}}</template>\n {{>MuteButton}} {{>VolumeRange}}\n <div class=\"spacer\"></div>\n {{>RenditionMenu}} {{>AudioTrackMenu}} {{>CaptionsMenu}} {{>AirplayButton}} {{>CastButton}} {{>PipButton}}\n {{>FullscreenButton}}\n </media-control-bar>\n </template>\n </template>\n\n <template if=\"audio\">\n <template if=\"streamtype == 'on-demand'\">\n <template if=\"title\">\n <media-control-bar part=\"control-bar top\">{{>TitleDisplay}}</media-control-bar>\n </template>\n <media-control-bar part=\"control-bar bottom\">\n {{>PlayButton}}\n <template if=\"breakpointsm\"> {{>SeekBackwardButton}} {{>SeekForwardButton}} </template>\n {{>MuteButton}}\n <template if=\"breakpointsm\">{{>VolumeRange}}</template>\n {{>TimeDisplay}} {{>TimeRange}}\n <template if=\"breakpointsm\">{{>PlaybackRateMenu}}</template>\n {{>AirplayButton}} {{>CastButton}}\n </media-control-bar>\n </template>\n\n <template if=\"streamtype == 'live'\">\n <template if=\"title\">\n <media-control-bar part=\"control-bar top\">{{>TitleDisplay}}</media-control-bar>\n </template>\n <media-control-bar part=\"control-bar bottom\">\n {{>PlayButton}} {{>LiveButton section=\"bottom\"}} {{>MuteButton}}\n <template if=\"breakpointsm\">\n {{>VolumeRange}}\n <template if=\"targetlivewindow > 0\"> {{>SeekBackwardButton}} {{>SeekForwardButton}} </template>\n </template>\n <template if=\"targetlivewindow > 0\"> {{>TimeDisplay}} {{>TimeRange}} </template>\n <template if=\"!targetlivewindow\"><div class=\"spacer\"></div></template>\n {{>AirplayButton}} {{>CastButton}}\n </media-control-bar>\n </template>\n </template>\n\n <slot></slot>\n </media-controller>\n</template>\n`;import{MediaThemeElement as ba}from\"media-chrome/dist/media-theme-element.js\";import\"media-chrome/dist/menu\";var xe=P.createElement(\"template\");\"innerHTML\"in xe&&(xe.innerHTML=Tt);var At,Ct,me=class extends ba{};me.template=(Ct=(At=xe.content)==null?void 0:At.children)==null?void 0:Ct[0];k.customElements.get(\"media-theme-gerwig\")||k.customElements.define(\"media-theme-gerwig\",me);var va=\"gerwig\",M={SRC:\"src\",POSTER:\"poster\"},o={STYLE:\"style\",DEFAULT_HIDDEN_CAPTIONS:\"default-hidden-captions\",PRIMARY_COLOR:\"primary-color\",SECONDARY_COLOR:\"secondary-color\",ACCENT_COLOR:\"accent-color\",FORWARD_SEEK_OFFSET:\"forward-seek-offset\",BACKWARD_SEEK_OFFSET:\"backward-seek-offset\",PLAYBACK_TOKEN:\"playback-token\",THUMBNAIL_TOKEN:\"thumbnail-token\",STORYBOARD_TOKEN:\"storyboard-token\",FULLSCREEN_ELEMENT:\"fullscreen-element\",DRM_TOKEN:\"drm-token\",STORYBOARD_SRC:\"storyboard-src\",THUMBNAIL_TIME:\"thumbnail-time\",AUDIO:\"audio\",NOHOTKEYS:\"nohotkeys\",HOTKEYS:\"hotkeys\",PLAYBACK_RATES:\"playbackrates\",DEFAULT_SHOW_REMAINING_TIME:\"default-show-remaining-time\",DEFAULT_DURATION:\"default-duration\",TITLE:\"title\",VIDEO_TITLE:\"video-title\",PLACEHOLDER:\"placeholder\",THEME:\"theme\",DEFAULT_STREAM_TYPE:\"default-stream-type\",TARGET_LIVE_WINDOW:\"target-live-window\",EXTRA_SOURCE_PARAMS:\"extra-source-params\",NO_VOLUME_PREF:\"no-volume-pref\",NO_MUTED_PREF:\"no-muted-pref\",CAST_RECEIVER:\"cast-receiver\",NO_TOOLTIPS:\"no-tooltips\",PROUDLY_DISPLAY_MUX_BADGE:\"proudly-display-mux-badge\",DISABLE_PSEUDO_ENDED:\"disable-pseudo-ended\"},Se=[\"audio\",\"backwardseekoffset\",\"defaultduration\",\"defaultshowremainingtime\",\"defaultsubtitles\",\"noautoseektolive\",\"disabled\",\"exportparts\",\"forwardseekoffset\",\"hideduration\",\"hotkeys\",\"nohotkeys\",\"playbackrates\",\"defaultstreamtype\",\"streamtype\",\"style\",\"targetlivewindow\",\"template\",\"title\",\"videotitle\",\"novolumepref\",\"nomutedpref\",\"proudlydisplaymuxbadge\"];function Ea(t,a){var i,r;return{src:!t.playbackId&&t.src,playbackId:t.playbackId,hasSrc:!!t.playbackId||!!t.src||!!t.currentSrc,poster:t.poster,storyboard:t.storyboard,storyboardSrc:t.getAttribute(o.STORYBOARD_SRC),fullscreenElement:t.getAttribute(o.FULLSCREEN_ELEMENT),placeholder:t.getAttribute(\"placeholder\"),themeTemplate:Aa(t),thumbnailTime:!t.tokens.thumbnail&&t.thumbnailTime,autoplay:t.autoplay,crossOrigin:t.crossOrigin,loop:t.loop,noHotKeys:t.hasAttribute(o.NOHOTKEYS),hotKeys:t.getAttribute(o.HOTKEYS),muted:t.muted,paused:t.paused,preload:t.preload,envKey:t.envKey,preferCmcd:t.preferCmcd,debug:t.debug,disableTracking:t.disableTracking,disableCookies:t.disableCookies,tokens:t.tokens,beaconCollectionDomain:t.beaconCollectionDomain,maxResolution:t.maxResolution,minResolution:t.minResolution,programStartTime:t.programStartTime,programEndTime:t.programEndTime,assetStartTime:t.assetStartTime,assetEndTime:t.assetEndTime,renditionOrder:t.renditionOrder,metadata:t.metadata,playerInitTime:t.playerInitTime,playerSoftwareName:t.playerSoftwareName,playerSoftwareVersion:t.playerSoftwareVersion,startTime:t.startTime,preferPlayback:t.preferPlayback,audio:t.audio,defaultStreamType:t.defaultStreamType,targetLiveWindow:t.getAttribute(s.TARGET_LIVE_WINDOW),streamType:z(t.getAttribute(s.STREAM_TYPE)),primaryColor:t.getAttribute(o.PRIMARY_COLOR),secondaryColor:t.getAttribute(o.SECONDARY_COLOR),accentColor:t.getAttribute(o.ACCENT_COLOR),forwardSeekOffset:t.forwardSeekOffset,backwardSeekOffset:t.backwardSeekOffset,defaultHiddenCaptions:t.defaultHiddenCaptions,defaultDuration:t.defaultDuration,defaultShowRemainingTime:t.defaultShowRemainingTime,hideDuration:Ca(t),playbackRates:t.getAttribute(o.PLAYBACK_RATES),customDomain:(i=t.getAttribute(s.CUSTOM_DOMAIN))!=null?i:void 0,title:t.getAttribute(o.TITLE),videoTitle:(r=t.getAttribute(o.VIDEO_TITLE))!=null?r:t.getAttribute(o.TITLE),novolumepref:t.hasAttribute(o.NO_VOLUME_PREF),nomutedpref:t.hasAttribute(o.NO_MUTED_PREF),proudlyDisplayMuxBadge:t.hasAttribute(o.PROUDLY_DISPLAY_MUX_BADGE),castReceiver:t.castReceiver,disablePseudoEnded:t.hasAttribute(o.DISABLE_PSEUDO_ENDED),...a,extraSourceParams:t.extraSourceParams}}var Ta=St.formatErrorMessage;St.formatErrorMessage=t=>{var a,e;if(t instanceof be){let i=Et(t,!1);return`\n ${i!=null&&i.title?`<h3>${i.title}</h3>`:\"\"}\n ${i!=null&&i.message||i!=null&&i.linkUrl?`<p>\n ${i==null?void 0:i.message}\n ${i!=null&&i.linkUrl?`<a\n href=\"${i.linkUrl}\"\n target=\"_blank\"\n rel=\"external noopener\"\n aria-label=\"${(a=i.linkText)!=null?a:\"\"} ${B(\"(opens in a new window)\")}\"\n >${(e=i.linkText)!=null?e:i.linkUrl}</a\n >`:\"\"}\n </p>`:\"\"}\n `}return Ta(t)};function Aa(t){var e,i;let a=t.theme;if(a){let r=(i=(e=t.getRootNode())==null?void 0:e.getElementById)==null?void 0:i.call(e,a);if(r&&r instanceof HTMLTemplateElement)return r;a.startsWith(\"media-theme-\")||(a=`media-theme-${a}`);let n=k.customElements.get(a);if(n!=null&&n.template)return n.template}}function Ca(t){var e;let a=(e=t.mediaController)==null?void 0:e.querySelector(\"media-time-display\");return a&&getComputedStyle(a).getPropertyValue(\"--media-duration-display-display\").trim()===\"none\"}function xt(t){let a=t.videoTitle?{video_title:t.videoTitle}:{};return t.getAttributeNames().filter(e=>e.startsWith(\"metadata-\")).reduce((e,i)=>{let r=t.getAttribute(i);return r!==null&&(e[i.replace(/^metadata-/,\"\").replace(/-/g,\"_\")]=r),e},a)}var ka=Object.values(s),_a=Object.values(M),Ra=Object.values(o),Ot=se(),Lt=\"mux-player\",Mt={isDialogOpen:!1},xa={redundant_streams:!0},J,ee,te,I,ae,K,m,w,Nt,we,H,wt,It,Pt,Dt,Ne=class extends Ce{constructor(){super();E(this,m);E(this,J);E(this,ee,!1);E(this,te,{});E(this,I,!0);E(this,ae,new ne(this,\"hotkeys\"));E(this,K,{...Mt,onCloseErrorDialog:e=>{var r;((r=e.composedPath()[0])==null?void 0:r.localName)===\"media-error-dialog\"&&p(this,m,we).call(this,{isDialogOpen:!1})},onFocusInErrorDialog:e=>{var n;if(((n=e.composedPath()[0])==null?void 0:n.localName)!==\"media-error-dialog\")return;ve(this,P.activeElement)||e.preventDefault()}});C(this,J,ya()),this.attachShadow({mode:\"open\"}),p(this,m,Nt).call(this),this.isConnected&&p(this,m,w).call(this)}static get NAME(){return Lt}static get VERSION(){return Ot}static get observedAttributes(){var e;return[...(e=Ce.observedAttributes)!=null?e:[],..._a,...ka,...Ra]}get mediaTheme(){var e;return(e=this.shadowRoot)==null?void 0:e.querySelector(\"media-theme\")}get mediaController(){var e,i;return(i=(e=this.mediaTheme)==null?void 0:e.shadowRoot)==null?void 0:i.querySelector(\"media-controller\")}connectedCallback(){let e=this.media;e&&(e.metadata=xt(this))}attributeChangedCallback(e,i,r){switch(p(this,m,w).call(this),super.attributeChangedCallback(e,i,r),e){case o.HOTKEYS:u(this,ae).value=r;break;case o.THUMBNAIL_TIME:{r!=null&&this.tokens.thumbnail&&x(B(\"Use of thumbnail-time with thumbnail-token is currently unsupported. Ignore thumbnail-time.\").toString());break}case o.THUMBNAIL_TOKEN:{if(r){let d=Le(r);if(d){let{aud:l}=d,b=Me.THUMBNAIL;l!==b&&x(B(\"The {tokenNamePrefix}-token has an incorrect aud value: {aud}. aud value should be {expectedAud}.\").format({aud:l,expectedAud:b,tokenNamePrefix:\"thumbnail\"}))}}break}case o.STORYBOARD_TOKEN:{if(r){let d=Le(r);if(d){let{aud:l}=d,b=Me.STORYBOARD;l!==b&&x(B(\"The {tokenNamePrefix}-token has an incorrect aud value: {aud}. aud value should be {expectedAud}.\").format({aud:l,expectedAud:b,tokenNamePrefix:\"storyboard\"}))}}break}case o.DRM_TOKEN:{if(r){let d=Le(r);if(d){let{aud:l}=d,b=Me.DRM;l!==b&&x(B(\"The {tokenNamePrefix}-token has an incorrect aud value: {aud}. aud value should be {expectedAud}.\").format({aud:l,expectedAud:b,tokenNamePrefix:\"drm\"}))}}break}case s.PLAYBACK_ID:{r!=null&&r.includes(\"?token\")&&T(B(\"The specificed playback ID {playbackId} contains a token which must be provided via the playback-token attribute.\").format({playbackId:r}));break}case s.STREAM_TYPE:{r&&![O.LIVE,O.ON_DEMAND,O.UNKNOWN].includes(r)?[\"ll-live\",\"live:dvr\",\"ll-live:dvr\"].includes(this.streamType)?this.targetLiveWindow=r.includes(\"dvr\")?Number.POSITIVE_INFINITY:0:Te({file:\"invalid-stream-type.md\",message:B(\"Invalid stream-type value supplied: `{streamType}`. Please provide stream-type as either: `on-demand` or `live`\").format({streamType:this.streamType})}):r===O.LIVE?this.getAttribute(o.TARGET_LIVE_WINDOW)==null&&(this.targetLiveWindow=0):this.targetLiveWindow=Number.NaN;break}case o.FULLSCREEN_ELEMENT:{if(r!=null||r!==i){let d=P.getElementById(r),l=d==null?void 0:d.querySelector(\"mux-player\");this.mediaController&&d&&l&&(this.mediaController.fullscreenElement=d)}break}}[s.PLAYBACK_ID,M.SRC,o.PLAYBACK_TOKEN].includes(e)&&i!==r&&C(this,K,{...u(this,K),...Mt}),p(this,m,H).call(this,{[st(e)]:r})}async requestFullscreen(e){var i;if(!(!this.mediaController||this.mediaController.hasAttribute(ce.MEDIA_IS_FULLSCREEN)))return(i=this.mediaController)==null||i.dispatchEvent(new k.CustomEvent(_t.MEDIA_ENTER_FULLSCREEN_REQUEST,{composed:!0,bubbles:!0})),new Promise((r,n)=>{var d;(d=this.mediaController)==null||d.addEventListener(kt.MEDIA_IS_FULLSCREEN,()=>r(),{once:!0})})}async exitFullscreen(){var e;if(!(!this.mediaController||!this.mediaController.hasAttribute(ce.MEDIA_IS_FULLSCREEN)))return(e=this.mediaController)==null||e.dispatchEvent(new k.CustomEvent(_t.MEDIA_EXIT_FULLSCREEN_REQUEST,{composed:!0,bubbles:!0})),new Promise((i,r)=>{var n;(n=this.mediaController)==null||n.addEventListener(kt.MEDIA_IS_FULLSCREEN,()=>i(),{once:!0})})}get preferCmcd(){var e;return(e=this.getAttribute(s.PREFER_CMCD))!=null?e:void 0}set preferCmcd(e){e!==this.preferCmcd&&(e?Rt.includes(e)?this.setAttribute(s.PREFER_CMCD,e):x(`Invalid value for preferCmcd. Must be one of ${Rt.join()}`):this.removeAttribute(s.PREFER_CMCD))}get hasPlayed(){var e,i;return(i=(e=this.mediaController)==null?void 0:e.hasAttribute(ce.MEDIA_HAS_PLAYED))!=null?i:!1}get inLiveWindow(){var e;return(e=this.mediaController)==null?void 0:e.hasAttribute(ce.MEDIA_TIME_IS_LIVE)}get _hls(){var e;return(e=this.media)==null?void 0:e._hls}get mux(){var e;return(e=this.media)==null?void 0:e.mux}get theme(){var e;return(e=this.getAttribute(o.THEME))!=null?e:va}set theme(e){this.setAttribute(o.THEME,`${e}`)}get themeProps(){let e=this.mediaTheme;if(!e)return;let i={};for(let r of e.getAttributeNames()){if(Se.includes(r))continue;let n=e.getAttribute(r);i[oe(r)]=n===\"\"?!0:n}return i}set themeProps(e){var r,n;p(this,m,w).call(this);let i={...this.themeProps,...e};for(let d in i){if(Se.includes(d))continue;let l=e==null?void 0:e[d];typeof l==\"boolean\"||l==null?(r=this.mediaTheme)==null||r.toggleAttribute(re(d),!!l):(n=this.mediaTheme)==null||n.setAttribute(re(d),l)}}get playbackId(){var e;return(e=this.getAttribute(s.PLAYBACK_ID))!=null?e:void 0}set playbackId(e){e?this.setAttribute(s.PLAYBACK_ID,e):this.removeAttribute(s.PLAYBACK_ID)}get src(){var e,i;return this.playbackId?(e=V(this,M.SRC))!=null?e:void 0:(i=this.getAttribute(M.SRC))!=null?i:void 0}set src(e){e?this.setAttribute(M.SRC,e):this.removeAttribute(M.SRC)}get poster(){var r;let e=this.getAttribute(M.POSTER);if(e!=null)return e;let{tokens:i}=this;if(i.playback&&!i.thumbnail){x(\"Missing expected thumbnail token. No poster image will be shown\");return}if(this.playbackId&&!this.audio)return ot(this.playbackId,{customDomain:this.customDomain,thumbnailTime:(r=this.thumbnailTime)!=null?r:this.startTime,programTime:this.programStartTime,token:i.thumbnail})}set poster(e){e||e===\"\"?this.setAttribute(M.POSTER,e):this.removeAttribute(M.POSTER)}get storyboardSrc(){var e;return(e=this.getAttribute(o.STORYBOARD_SRC))!=null?e:void 0}set storyboardSrc(e){e?this.setAttribute(o.STORYBOARD_SRC,e):this.removeAttribute(o.STORYBOARD_SRC)}get storyboard(){let{tokens:e}=this;if(this.storyboardSrc&&!e.storyboard)return this.storyboardSrc;if(!(this.audio||!this.playbackId||!this.streamType||[O.LIVE,O.UNKNOWN].includes(this.streamType)||e.playback&&!e.storyboard))return nt(this.playbackId,{customDomain:this.customDomain,token:e.storyboard,programStartTime:this.programStartTime,programEndTime:this.programEndTime})}get audio(){return this.hasAttribute(o.AUDIO)}set audio(e){if(!e){this.removeAttribute(o.AUDIO);return}this.setAttribute(o.AUDIO,\"\")}get hotkeys(){return u(this,ae)}get nohotkeys(){return this.hasAttribute(o.NOHOTKEYS)}set nohotkeys(e){if(!e){this.removeAttribute(o.NOHOTKEYS);return}this.setAttribute(o.NOHOTKEYS,\"\")}get thumbnailTime(){return y(this.getAttribute(o.THUMBNAIL_TIME))}set thumbnailTime(e){this.setAttribute(o.THUMBNAIL_TIME,`${e}`)}get videoTitle(){var e,i;return(i=(e=this.getAttribute(o.VIDEO_TITLE))!=null?e:this.getAttribute(o.TITLE))!=null?i:\"\"}set videoTitle(e){e!==this.videoTitle&&(e?this.setAttribute(o.VIDEO_TITLE,e):this.removeAttribute(o.VIDEO_TITLE))}get placeholder(){var e;return(e=V(this,o.PLACEHOLDER))!=null?e:\"\"}set placeholder(e){this.setAttribute(o.PLACEHOLDER,`${e}`)}get primaryColor(){var i,r;let e=this.getAttribute(o.PRIMARY_COLOR);if(e!=null||this.mediaTheme&&(e=(r=(i=k.getComputedStyle(this.mediaTheme))==null?void 0:i.getPropertyValue(\"--_primary-color\"))==null?void 0:r.trim(),e))return e}set primaryColor(e){this.setAttribute(o.PRIMARY_COLOR,`${e}`)}get secondaryColor(){var i,r;let e=this.getAttribute(o.SECONDARY_COLOR);if(e!=null||this.mediaTheme&&(e=(r=(i=k.getComputedStyle(this.mediaTheme))==null?void 0:i.getPropertyValue(\"--_secondary-color\"))==null?void 0:r.trim(),e))return e}set secondaryColor(e){this.setAttribute(o.SECONDARY_COLOR,`${e}`)}get accentColor(){var i,r;let e=this.getAttribute(o.ACCENT_COLOR);if(e!=null||this.mediaTheme&&(e=(r=(i=k.getComputedStyle(this.mediaTheme))==null?void 0:i.getPropertyValue(\"--_accent-color\"))==null?void 0:r.trim(),e))return e}set accentColor(e){this.setAttribute(o.ACCENT_COLOR,`${e}`)}get defaultShowRemainingTime(){return this.hasAttribute(o.DEFAULT_SHOW_REMAINING_TIME)}set defaultShowRemainingTime(e){e?this.setAttribute(o.DEFAULT_SHOW_REMAINING_TIME,\"\"):this.removeAttribute(o.DEFAULT_SHOW_REMAINING_TIME)}get playbackRates(){if(this.hasAttribute(o.PLAYBACK_RATES))return this.getAttribute(o.PLAYBACK_RATES).trim().split(/\\s*,?\\s+/).map(e=>Number(e)).filter(e=>!Number.isNaN(e)).sort((e,i)=>e-i)}set playbackRates(e){if(!e){this.removeAttribute(o.PLAYBACK_RATES);return}this.setAttribute(o.PLAYBACK_RATES,e.join(\" \"))}get forwardSeekOffset(){var e;return(e=y(this.getAttribute(o.FORWARD_SEEK_OFFSET)))!=null?e:10}set forwardSeekOffset(e){this.setAttribute(o.FORWARD_SEEK_OFFSET,`${e}`)}get backwardSeekOffset(){var e;return(e=y(this.getAttribute(o.BACKWARD_SEEK_OFFSET)))!=null?e:10}set backwardSeekOffset(e){this.setAttribute(o.BACKWARD_SEEK_OFFSET,`${e}`)}get defaultHiddenCaptions(){return this.hasAttribute(o.DEFAULT_HIDDEN_CAPTIONS)}set defaultHiddenCaptions(e){e?this.setAttribute(o.DEFAULT_HIDDEN_CAPTIONS,\"\"):this.removeAttribute(o.DEFAULT_HIDDEN_CAPTIONS)}get defaultDuration(){return y(this.getAttribute(o.DEFAULT_DURATION))}set defaultDuration(e){e==null?this.removeAttribute(o.DEFAULT_DURATION):this.setAttribute(o.DEFAULT_DURATION,`${e}`)}get playerInitTime(){return this.hasAttribute(s.PLAYER_INIT_TIME)?y(this.getAttribute(s.PLAYER_INIT_TIME)):u(this,J)}set playerInitTime(e){e!=this.playerInitTime&&(e==null?this.removeAttribute(s.PLAYER_INIT_TIME):this.setAttribute(s.PLAYER_INIT_TIME,`${+e}`))}get playerSoftwareName(){var e;return(e=this.getAttribute(s.PLAYER_SOFTWARE_NAME))!=null?e:Lt}get playerSoftwareVersion(){var e;return(e=this.getAttribute(s.PLAYER_SOFTWARE_VERSION))!=null?e:Ot}get beaconCollectionDomain(){var e;return(e=this.getAttribute(s.BEACON_COLLECTION_DOMAIN))!=null?e:void 0}set beaconCollectionDomain(e){e!==this.beaconCollectionDomain&&(e?this.setAttribute(s.BEACON_COLLECTION_DOMAIN,e):this.removeAttribute(s.BEACON_COLLECTION_DOMAIN))}get maxResolution(){var e;return(e=this.getAttribute(s.MAX_RESOLUTION))!=null?e:void 0}set maxResolution(e){e!==this.maxResolution&&(e?this.setAttribute(s.MAX_RESOLUTION,e):this.removeAttribute(s.MAX_RESOLUTION))}get minResolution(){var e;return(e=this.getAttribute(s.MIN_RESOLUTION))!=null?e:void 0}set minResolution(e){e!==this.minResolution&&(e?this.setAttribute(s.MIN_RESOLUTION,e):this.removeAttribute(s.MIN_RESOLUTION))}get renditionOrder(){var e;return(e=this.getAttribute(s.RENDITION_ORDER))!=null?e:void 0}set renditionOrder(e){e!==this.renditionOrder&&(e?this.setAttribute(s.RENDITION_ORDER,e):this.removeAttribute(s.RENDITION_ORDER))}get programStartTime(){return y(this.getAttribute(s.PROGRAM_START_TIME))}set programStartTime(e){e==null?this.removeAttribute(s.PROGRAM_START_TIME):this.setAttribute(s.PROGRAM_START_TIME,`${e}`)}get programEndTime(){return y(this.getAttribute(s.PROGRAM_END_TIME))}set programEndTime(e){e==null?this.removeAttribute(s.PROGRAM_END_TIME):this.setAttribute(s.PROGRAM_END_TIME,`${e}`)}get assetStartTime(){return y(this.getAttribute(s.ASSET_START_TIME))}set assetStartTime(e){e==null?this.removeAttribute(s.ASSET_START_TIME):this.setAttribute(s.ASSET_START_TIME,`${e}`)}get assetEndTime(){return y(this.getAttribute(s.ASSET_END_TIME))}set assetEndTime(e){e==null?this.removeAttribute(s.ASSET_END_TIME):this.setAttribute(s.ASSET_END_TIME,`${e}`)}get extraSourceParams(){return this.hasAttribute(o.EXTRA_SOURCE_PARAMS)?[...new URLSearchParams(this.getAttribute(o.EXTRA_SOURCE_PARAMS)).entries()].reduce((e,[i,r])=>(e[i]=r,e),{}):xa}set extraSourceParams(e){e==null?this.removeAttribute(o.EXTRA_SOURCE_PARAMS):this.setAttribute(o.EXTRA_SOURCE_PARAMS,new URLSearchParams(e).toString())}get customDomain(){var e;return(e=this.getAttribute(s.CUSTOM_DOMAIN))!=null?e:void 0}set customDomain(e){e!==this.customDomain&&(e?this.setAttribute(s.CUSTOM_DOMAIN,e):this.removeAttribute(s.CUSTOM_DOMAIN))}get envKey(){var e;return(e=V(this,s.ENV_KEY))!=null?e:void 0}set envKey(e){this.setAttribute(s.ENV_KEY,`${e}`)}get noVolumePref(){return this.hasAttribute(o.NO_VOLUME_PREF)}set noVolumePref(e){e?this.setAttribute(o.NO_VOLUME_PREF,\"\"):this.removeAttribute(o.NO_VOLUME_PREF)}get noMutedPref(){return this.hasAttribute(o.NO_MUTED_PREF)}set noMutedPref(e){e?this.setAttribute(o.NO_MUTED_PREF,\"\"):this.removeAttribute(o.NO_MUTED_PREF)}get debug(){return V(this,s.DEBUG)!=null}set debug(e){e?this.setAttribute(s.DEBUG,\"\"):this.removeAttribute(s.DEBUG)}get disableTracking(){return V(this,s.DISABLE_TRACKING)!=null}set disableTracking(e){this.toggleAttribute(s.DISABLE_TRACKING,!!e)}get disableCookies(){return V(this,s.DISABLE_COOKIES)!=null}set disableCookies(e){e?this.setAttribute(s.DISABLE_COOKIES,\"\"):this.removeAttribute(s.DISABLE_COOKIES)}get streamType(){var e,i,r;return(r=(i=this.getAttribute(s.STREAM_TYPE))!=null?i:(e=this.media)==null?void 0:e.streamType)!=null?r:O.UNKNOWN}set streamType(e){this.setAttribute(s.STREAM_TYPE,`${e}`)}get defaultStreamType(){var e,i,r;return(r=(i=this.getAttribute(o.DEFAULT_STREAM_TYPE))!=null?i:(e=this.mediaController)==null?void 0:e.getAttribute(o.DEFAULT_STREAM_TYPE))!=null?r:O.ON_DEMAND}set defaultStreamType(e){e?this.setAttribute(o.DEFAULT_STREAM_TYPE,e):this.removeAttribute(o.DEFAULT_STREAM_TYPE)}get targetLiveWindow(){var e,i;return this.hasAttribute(o.TARGET_LIVE_WINDOW)?+this.getAttribute(o.TARGET_LIVE_WINDOW):(i=(e=this.media)==null?void 0:e.targetLiveWindow)!=null?i:Number.NaN}set targetLiveWindow(e){e==this.targetLiveWindow||Number.isNaN(e)&&Number.isNaN(this.targetLiveWindow)||(e==null?this.removeAttribute(o.TARGET_LIVE_WINDOW):this.setAttribute(o.TARGET_LIVE_WINDOW,`${+e}`))}get liveEdgeStart(){var e;return(e=this.media)==null?void 0:e.liveEdgeStart}get startTime(){return y(V(this,s.START_TIME))}set startTime(e){this.setAttribute(s.START_TIME,`${e}`)}get preferPlayback(){let e=this.getAttribute(s.PREFER_PLAYBACK);if(e===pe.MSE||e===pe.NATIVE)return e}set preferPlayback(e){e!==this.preferPlayback&&(e===pe.MSE||e===pe.NATIVE?this.setAttribute(s.PREFER_PLAYBACK,e):this.removeAttribute(s.PREFER_PLAYBACK))}get metadata(){var e;return(e=this.media)==null?void 0:e.metadata}set metadata(e){if(p(this,m,w).call(this),!this.media){T(\"underlying media element missing when trying to set metadata. metadata will not be set.\");return}this.media.metadata={...xt(this),...e}}get _hlsConfig(){var e;return(e=this.media)==null?void 0:e._hlsConfig}set _hlsConfig(e){if(p(this,m,w).call(this),!this.media){T(\"underlying media element missing when trying to set _hlsConfig. _hlsConfig will not be set.\");return}this.media._hlsConfig=e}async addCuePoints(e){var i;if(p(this,m,w).call(this),!this.media){T(\"underlying media element missing when trying to addCuePoints. cuePoints will not be added.\");return}return(i=this.media)==null?void 0:i.addCuePoints(e)}get activeCuePoint(){var e;return(e=this.media)==null?void 0:e.activeCuePoint}get cuePoints(){var e,i;return(i=(e=this.media)==null?void 0:e.cuePoints)!=null?i:[]}addChapters(e){var i;if(p(this,m,w).call(this),!this.media){T(\"underlying media element missing when trying to addChapters. chapters will not be added.\");return}return(i=this.media)==null?void 0:i.addChapters(e)}get activeChapter(){var e;return(e=this.media)==null?void 0:e.activeChapter}get chapters(){var e,i;return(i=(e=this.media)==null?void 0:e.chapters)!=null?i:[]}getStartDate(){var e;return(e=this.media)==null?void 0:e.getStartDate()}get currentPdt(){var e;return(e=this.media)==null?void 0:e.currentPdt}get tokens(){let e=this.getAttribute(o.PLAYBACK_TOKEN),i=this.getAttribute(o.DRM_TOKEN),r=this.getAttribute(o.THUMBNAIL_TOKEN),n=this.getAttribute(o.STORYBOARD_TOKEN);return{...u(this,te),...e!=null?{playback:e}:{},...i!=null?{drm:i}:{},...r!=null?{thumbnail:r}:{},...n!=null?{storyboard:n}:{}}}set tokens(e){C(this,te,e!=null?e:{})}get playbackToken(){var e;return(e=this.getAttribute(o.PLAYBACK_TOKEN))!=null?e:void 0}set playbackToken(e){this.setAttribute(o.PLAYBACK_TOKEN,`${e}`)}get drmToken(){var e;return(e=this.getAttribute(o.DRM_TOKEN))!=null?e:void 0}set drmToken(e){this.setAttribute(o.DRM_TOKEN,`${e}`)}get thumbnailToken(){var e;return(e=this.getAttribute(o.THUMBNAIL_TOKEN))!=null?e:void 0}set thumbnailToken(e){this.setAttribute(o.THUMBNAIL_TOKEN,`${e}`)}get storyboardToken(){var e;return(e=this.getAttribute(o.STORYBOARD_TOKEN))!=null?e:void 0}set storyboardToken(e){this.setAttribute(o.STORYBOARD_TOKEN,`${e}`)}addTextTrack(e,i,r,n){var l;let d=(l=this.media)==null?void 0:l.nativeEl;if(d)return ga(d,e,i,r,n)}removeTextTrack(e){var r;let i=(r=this.media)==null?void 0:r.nativeEl;if(i)return fa(i,e)}get textTracks(){var e;return(e=this.media)==null?void 0:e.textTracks}get castReceiver(){var e;return(e=this.getAttribute(o.CAST_RECEIVER))!=null?e:void 0}set castReceiver(e){e!==this.castReceiver&&(e?this.setAttribute(o.CAST_RECEIVER,e):this.removeAttribute(o.CAST_RECEIVER))}get castCustomData(){var e;return(e=this.media)==null?void 0:e.castCustomData}set castCustomData(e){if(!this.media){T(\"underlying media element missing when trying to set castCustomData. castCustomData will not be set.\");return}this.media.castCustomData=e}get noTooltips(){return this.hasAttribute(o.NO_TOOLTIPS)}set noTooltips(e){if(!e){this.removeAttribute(o.NO_TOOLTIPS);return}this.setAttribute(o.NO_TOOLTIPS,\"\")}get proudlyDisplayMuxBadge(){return this.hasAttribute(o.PROUDLY_DISPLAY_MUX_BADGE)}set proudlyDisplayMuxBadge(e){e?this.setAttribute(o.PROUDLY_DISPLAY_MUX_BADGE,\"\"):this.removeAttribute(o.PROUDLY_DISPLAY_MUX_BADGE)}};J=new WeakMap,ee=new WeakMap,te=new WeakMap,I=new WeakMap,ae=new WeakMap,K=new WeakMap,m=new WeakSet,w=function(){var e,i,r,n;if(!u(this,ee)){C(this,ee,!0),p(this,m,H).call(this);try{if(customElements.upgrade(this.mediaTheme),!(this.mediaTheme instanceof k.HTMLElement))throw\"\"}catch{T(\"<media-theme> failed to upgrade!\")}try{customElements.upgrade(this.media)}catch{T(\"underlying media element failed to upgrade!\")}try{if(customElements.upgrade(this.mediaController),!(this.mediaController instanceof ha))throw\"\"}catch{T(\"<media-controller> failed to upgrade!\")}p(this,m,wt).call(this),p(this,m,It).call(this),p(this,m,Pt).call(this),C(this,I,(i=(e=this.mediaController)==null?void 0:e.hasAttribute(Oe.USER_INACTIVE))!=null?i:!0),p(this,m,Dt).call(this),(r=this.media)==null||r.addEventListener(\"streamtypechange\",()=>p(this,m,H).call(this)),(n=this.media)==null||n.addEventListener(\"loadstart\",()=>p(this,m,H).call(this))}},Nt=function(){var e,i;try{(e=window==null?void 0:window.CSS)==null||e.registerProperty({name:\"--media-primary-color\",syntax:\"<color>\",inherits:!0}),(i=window==null?void 0:window.CSS)==null||i.registerProperty({name:\"--media-secondary-color\",syntax:\"<color>\",inherits:!0})}catch{}},we=function(e){Object.assign(u(this,K),e),p(this,m,H).call(this)},H=function(e={}){bt(gt(Ea(this,{...u(this,K),...e})),this.shadowRoot)},wt=function(){let e=r=>{var l,b;if(!(r!=null&&r.startsWith(\"theme-\")))return;let n=r.replace(/^theme-/,\"\");if(Se.includes(n))return;let d=this.getAttribute(r);d!=null?(l=this.mediaTheme)==null||l.setAttribute(n,d):(b=this.mediaTheme)==null||b.removeAttribute(n)};new MutationObserver(r=>{for(let{attributeName:n}of r)e(n)}).observe(this,{attributes:!0}),this.getAttributeNames().forEach(e)},It=function(){let e=i=>{var d;let r=(d=this.media)==null?void 0:d.error;if(!(r instanceof be)){let{message:l,code:b}=r!=null?r:{};r=new be(l,b)}if(!(r!=null&&r.fatal)){x(r),r.data&&x(`${r.name} data:`,r.data);return}let n=Re(r,!1);n.message&&Te(n),T(r),r.data&&T(`${r.name} data:`,r.data),p(this,m,we).call(this,{isDialogOpen:!0})};this.addEventListener(\"error\",e),this.media&&(this.media.errorTranslator=(i={})=>{var n,d,l;if(!(((n=this.media)==null?void 0:n.error)instanceof be))return i;let r=Re((d=this.media)==null?void 0:d.error,!1);return{player_error_code:(l=this.media)==null?void 0:l.error.code,player_error_message:r.message?String(r.message):i.player_error_message,player_error_context:r.context?String(r.context):i.player_error_context}})},Pt=function(){var i,r,n,d;let e=()=>p(this,m,H).call(this);(r=(i=this.media)==null?void 0:i.textTracks)==null||r.addEventListener(\"addtrack\",e),(d=(n=this.media)==null?void 0:n.textTracks)==null||d.addEventListener(\"removetrack\",e)},Dt=function(){var S,Y;if(!/Firefox/i.test(navigator.userAgent))return;let i,r=new WeakMap,n=()=>this.streamType===O.LIVE&&!this.secondaryColor&&this.offsetWidth>=800,d=(_,A,R=!1)=>{if(n())return;Array.from(_&&_.activeCues||[]).forEach(h=>{if(!(!h.snapToLines||h.line<-5||h.line>=0&&h.line<10))if(!A||this.paused){let ie=h.text.split(`\n`).length,W=-3;this.streamType===O.LIVE&&(W=-2);let Z=W-ie;if(h.line===Z&&!R)return;r.has(h)||r.set(h,h.line),h.line=Z}else setTimeout(()=>{h.line=r.get(h)||\"auto\"},500)})},l=()=>{var _,A;d(i,(A=(_=this.mediaController)==null?void 0:_.hasAttribute(Oe.USER_INACTIVE))!=null?A:!1)},b=()=>{var R,$;let A=Array.from((($=(R=this.mediaController)==null?void 0:R.media)==null?void 0:$.textTracks)||[]).filter(h=>[\"subtitles\",\"captions\"].includes(h.kind)&&h.mode===\"showing\")[0];A!==i&&(i==null||i.removeEventListener(\"cuechange\",l)),i=A,i==null||i.addEventListener(\"cuechange\",l),d(i,u(this,I))};b(),(S=this.textTracks)==null||S.addEventListener(\"change\",b),(Y=this.textTracks)==null||Y.addEventListener(\"addtrack\",b),this.addEventListener(\"userinactivechange\",()=>{var A,R;let _=(R=(A=this.mediaController)==null?void 0:A.hasAttribute(Oe.USER_INACTIVE))!=null?R:!0;u(this,I)!==_&&(C(this,I,_),d(i,u(this,I)))})};function V(t,a){return t.media?t.media.getAttribute(a):t.getAttribute(a)}var Ci=Ne;export{be as MediaError,Ci as default,ya as generatePlayerInitTime,V as getVideoAttribute,Lt as playerSoftwareName,Ot as playerSoftwareVersion};\n","var c=e=>{throw TypeError(e)};var d=(e,t,n)=>t.has(e)||c(\"Cannot \"+n);var g=(e,t,n)=>(d(e,t,\"read from private field\"),n?n.call(e):t.get(e)),p=(e,t,n)=>t.has(e)?c(\"Cannot add the same private member more than once\"):t instanceof WeakSet?t.add(e):t.set(e,n),f=(e,t,n,i)=>(d(e,t,\"write to private field\"),i?i.call(e,n):t.set(e,n),n);var o=class{addEventListener(){}removeEventListener(){}dispatchEvent(t){return!0}};if(typeof DocumentFragment==\"undefined\"){class e extends o{}globalThis.DocumentFragment=e}var s=class extends o{},a=class extends o{},b={get(e){},define(e,t,n){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(s)}},r,m=class{constructor(t,n={}){p(this,r);f(this,r,n==null?void 0:n.detail)}get detail(){return g(this,r)}initCustomEvent(){}};r=new WeakMap;function y(e,t){return new s}var h={document:{createElement:y},DocumentFragment,customElements:b,CustomEvent:m,EventTarget:o,HTMLElement:s,HTMLVideoElement:a},E=typeof window==\"undefined\"||typeof globalThis.customElements==\"undefined\",l=E?h:globalThis,x=E?h.document:globalThis.document;import\"@mux/mux-video\";import u from\"@mux/mux-player/base\";export*from\"@mux/mux-player/base\";l.customElements.get(\"mux-player\")||(l.customElements.define(\"mux-player\",u),l.MuxPlayerElement=u);var F=u;export{F as default};\n","var C=s=>{throw TypeError(s)};var N=(s,a,t)=>a.has(s)||C(\"Cannot \"+t);var n=(s,a,t)=>(N(s,a,\"read from private field\"),t?t.call(s):a.get(s)),u=(s,a,t)=>a.has(s)?C(\"Cannot add the same private member more than once\"):a instanceof WeakSet?a.add(s):a.set(s,t),o=(s,a,t,i)=>(N(s,a,\"write to private field\"),i?i.call(s,t):a.set(s,t),t),I=(s,a,t)=>(N(s,a,\"access private method\"),t);import{initialize as G,teardown as U,generatePlayerInitTime as V,PlaybackTypes as M,toMuxVideoURL as F,MediaError as At,getError as W,CmcdTypeValues as k,addCuePoints as w,getCuePoints as H,getActiveCuePoint as $,addChapters as j,getActiveChapter as q,getMetadata as z,getStartDate as X,getCurrentPdt as J,getStreamType as Z,getTargetLiveWindow as Q,getLiveEdgeStart as tt,getSeekable as et,getEnded as it,getChapters as rt,toPlaybackIdFromSrc as st,toPlaybackIdParts as nt}from\"@mux/playback-core\";var B=()=>{try{return\"0.27.2\"}catch{}return\"UNKNOWN\"},Y=B(),P=()=>Y;import{CustomVideoElement as R,Events as ct}from\"custom-media-element\";var D=`\n<svg xmlns=\"http://www.w3.org/2000/svg\" xml:space=\"preserve\" part=\"logo\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\" viewBox=\"0 0 1600 500\"><g fill=\"#fff\"><path d=\"M994.287 93.486c-17.121 0-31-13.879-31-31 0-17.121 13.879-31 31-31 17.121 0 31 13.879 31 31 0 17.121-13.879 31-31 31m0-93.486c-34.509 0-62.484 27.976-62.484 62.486v187.511c0 68.943-56.09 125.033-125.032 125.033s-125.03-56.09-125.03-125.033V62.486C681.741 27.976 653.765 0 619.256 0s-62.484 27.976-62.484 62.486v187.511C556.772 387.85 668.921 500 806.771 500c137.851 0 250.001-112.15 250.001-250.003V62.486c0-34.51-27.976-62.486-62.485-62.486M1537.51 468.511c-17.121 0-31-13.879-31-31 0-17.121 13.879-31 31-31 17.121 0 31 13.879 31 31 0 17.121-13.879 31-31 31m-275.883-218.509-143.33 143.329c-24.402 24.402-24.402 63.966 0 88.368 24.402 24.402 63.967 24.402 88.369 0l143.33-143.329 143.328 143.329c24.402 24.4 63.967 24.402 88.369 0 24.403-24.402 24.403-63.966.001-88.368l-143.33-143.329.001-.004 143.329-143.329c24.402-24.402 24.402-63.965 0-88.367s-63.967-24.402-88.369 0L1349.996 161.63 1206.667 18.302c-24.402-24.401-63.967-24.402-88.369 0s-24.402 63.965 0 88.367l143.329 143.329v.004ZM437.511 468.521c-17.121 0-31-13.879-31-31 0-17.121 13.879-31 31-31 17.121 0 31 13.879 31 31 0 17.121-13.879 31-31 31M461.426 4.759C438.078-4.913 411.2.432 393.33 18.303L249.999 161.632 106.669 18.303C88.798.432 61.922-4.913 38.573 4.759 15.224 14.43-.001 37.214-.001 62.488v375.026c0 34.51 27.977 62.486 62.487 62.486 34.51 0 62.486-27.976 62.486-62.486V213.341l80.843 80.844c24.404 24.402 63.965 24.402 88.369 0l80.843-80.844v224.173c0 34.51 27.976 62.486 62.486 62.486s62.486-27.976 62.486-62.486V62.488c0-25.274-15.224-48.058-38.573-57.729\" style=\"fill-rule:nonzero\"/></g></svg>`;var e={BEACON_COLLECTION_DOMAIN:\"beacon-collection-domain\",CUSTOM_DOMAIN:\"custom-domain\",DEBUG:\"debug\",DISABLE_TRACKING:\"disable-tracking\",DISABLE_COOKIES:\"disable-cookies\",DISABLE_PSEUDO_ENDED:\"disable-pseudo-ended\",DRM_TOKEN:\"drm-token\",PLAYBACK_TOKEN:\"playback-token\",ENV_KEY:\"env-key\",MAX_RESOLUTION:\"max-resolution\",MIN_RESOLUTION:\"min-resolution\",RENDITION_ORDER:\"rendition-order\",PROGRAM_START_TIME:\"program-start-time\",PROGRAM_END_TIME:\"program-end-time\",ASSET_START_TIME:\"asset-start-time\",ASSET_END_TIME:\"asset-end-time\",METADATA_URL:\"metadata-url\",PLAYBACK_ID:\"playback-id\",PLAYER_SOFTWARE_NAME:\"player-software-name\",PLAYER_SOFTWARE_VERSION:\"player-software-version\",PLAYER_INIT_TIME:\"player-init-time\",PREFER_CMCD:\"prefer-cmcd\",PREFER_PLAYBACK:\"prefer-playback\",START_TIME:\"start-time\",STREAM_TYPE:\"stream-type\",TARGET_LIVE_WINDOW:\"target-live-window\",LIVE_EDGE_OFFSET:\"live-edge-offset\",TYPE:\"type\",LOGO:\"logo\"},at=Object.values(e),v=P(),x=\"mux-video\",l,f,b,A,c,T,_,p,O,g,m,y,K=class extends R{constructor(){super();u(this,m);u(this,l);u(this,f);u(this,b);u(this,A,{});u(this,c,{});u(this,T);u(this,_);u(this,p);u(this,O);u(this,g,\"\");o(this,b,V()),this.nativeEl.addEventListener(\"muxmetadata\",t=>{var d;let i=z(this.nativeEl),r=(d=this.metadata)!=null?d:{};this.metadata={...i,...r},(i==null?void 0:i[\"com.mux.video.branding\"])===\"mux-free-plan\"&&(o(this,g,\"default\"),this.updateLogo())})}static get NAME(){return x}static get VERSION(){return v}static get observedAttributes(){var t;return[...at,...(t=R.observedAttributes)!=null?t:[]]}static getLogoHTML(t){return!t||t===\"false\"?\"\":t===\"default\"?D:`<img part=\"logo\" src=\"${t}\" />`}static getTemplateHTML(t={}){var i;return`\n ${R.getTemplateHTML(t)}\n <style>\n :host {\n position: relative;\n }\n slot[name=\"logo\"] {\n display: flex;\n justify-content: end;\n position: absolute;\n top: 1rem;\n right: 1rem;\n opacity: 0;\n transition: opacity 0.25s ease-in-out;\n z-index: 1;\n }\n slot[name=\"logo\"]:has([part=\"logo\"]) {\n opacity: 1;\n }\n slot[name=\"logo\"] [part=\"logo\"] {\n width: 5rem;\n pointer-events: none;\n user-select: none;\n }\n </style>\n <slot name=\"logo\">\n ${this.getLogoHTML((i=t[e.LOGO])!=null?i:\"\")}\n </slot>\n `}get preferCmcd(){var t;return(t=this.getAttribute(e.PREFER_CMCD))!=null?t:void 0}set preferCmcd(t){t!==this.preferCmcd&&(t?k.includes(t)?this.setAttribute(e.PREFER_CMCD,t):console.warn(`Invalid value for preferCmcd. Must be one of ${k.join()}`):this.removeAttribute(e.PREFER_CMCD))}get playerInitTime(){return this.hasAttribute(e.PLAYER_INIT_TIME)?+this.getAttribute(e.PLAYER_INIT_TIME):n(this,b)}set playerInitTime(t){t!=this.playerInitTime&&(t==null?this.removeAttribute(e.PLAYER_INIT_TIME):this.setAttribute(e.PLAYER_INIT_TIME,`${+t}`))}get playerSoftwareName(){var t;return(t=n(this,p))!=null?t:x}set playerSoftwareName(t){o(this,p,t)}get playerSoftwareVersion(){var t;return(t=n(this,_))!=null?t:v}set playerSoftwareVersion(t){o(this,_,t)}get _hls(){var t;return(t=n(this,l))==null?void 0:t.engine}get mux(){var t;return(t=this.nativeEl)==null?void 0:t.mux}get error(){var t;return(t=W(this.nativeEl))!=null?t:null}get errorTranslator(){return n(this,O)}set errorTranslator(t){o(this,O,t)}get src(){return this.getAttribute(\"src\")}set src(t){t!==this.src&&(t==null?this.removeAttribute(\"src\"):this.setAttribute(\"src\",t))}get type(){var t;return(t=this.getAttribute(e.TYPE))!=null?t:void 0}set type(t){t!==this.type&&(t?this.setAttribute(e.TYPE,t):this.removeAttribute(e.TYPE))}get preload(){let t=this.getAttribute(\"preload\");return t===\"\"?\"auto\":[\"none\",\"metadata\",\"auto\"].includes(t)?t:super.preload}set preload(t){t!=this.getAttribute(\"preload\")&&([\"\",\"none\",\"metadata\",\"auto\"].includes(t)?this.setAttribute(\"preload\",t):this.removeAttribute(\"preload\"))}get debug(){return this.getAttribute(e.DEBUG)!=null}set debug(t){t!==this.debug&&(t?this.setAttribute(e.DEBUG,\"\"):this.removeAttribute(e.DEBUG))}get disableTracking(){return this.hasAttribute(e.DISABLE_TRACKING)}set disableTracking(t){t!==this.disableTracking&&this.toggleAttribute(e.DISABLE_TRACKING,!!t)}get disableCookies(){return this.hasAttribute(e.DISABLE_COOKIES)}set disableCookies(t){t!==this.disableCookies&&(t?this.setAttribute(e.DISABLE_COOKIES,\"\"):this.removeAttribute(e.DISABLE_COOKIES))}get disablePseudoEnded(){return this.hasAttribute(e.DISABLE_PSEUDO_ENDED)}set disablePseudoEnded(t){t!==this.disablePseudoEnded&&(t?this.setAttribute(e.DISABLE_PSEUDO_ENDED,\"\"):this.removeAttribute(e.DISABLE_PSEUDO_ENDED))}get startTime(){let t=this.getAttribute(e.START_TIME);if(t==null)return;let i=+t;return Number.isNaN(i)?void 0:i}set startTime(t){t!==this.startTime&&(t==null?this.removeAttribute(e.START_TIME):this.setAttribute(e.START_TIME,`${t}`))}get playbackId(){var t;return this.hasAttribute(e.PLAYBACK_ID)?this.getAttribute(e.PLAYBACK_ID):(t=st(this.src))!=null?t:void 0}set playbackId(t){t!==this.playbackId&&(t?this.setAttribute(e.PLAYBACK_ID,t):this.removeAttribute(e.PLAYBACK_ID))}get maxResolution(){var t;return(t=this.getAttribute(e.MAX_RESOLUTION))!=null?t:void 0}set maxResolution(t){t!==this.maxResolution&&(t?this.setAttribute(e.MAX_RESOLUTION,t):this.removeAttribute(e.MAX_RESOLUTION))}get minResolution(){var t;return(t=this.getAttribute(e.MIN_RESOLUTION))!=null?t:void 0}set minResolution(t){t!==this.minResolution&&(t?this.setAttribute(e.MIN_RESOLUTION,t):this.removeAttribute(e.MIN_RESOLUTION))}get renditionOrder(){var t;return(t=this.getAttribute(e.RENDITION_ORDER))!=null?t:void 0}set renditionOrder(t){t!==this.renditionOrder&&(t?this.setAttribute(e.RENDITION_ORDER,t):this.removeAttribute(e.RENDITION_ORDER))}get programStartTime(){let t=this.getAttribute(e.PROGRAM_START_TIME);if(t==null)return;let i=+t;return Number.isNaN(i)?void 0:i}set programStartTime(t){t==null?this.removeAttribute(e.PROGRAM_START_TIME):this.setAttribute(e.PROGRAM_START_TIME,`${t}`)}get programEndTime(){let t=this.getAttribute(e.PROGRAM_END_TIME);if(t==null)return;let i=+t;return Number.isNaN(i)?void 0:i}set programEndTime(t){t==null?this.removeAttribute(e.PROGRAM_END_TIME):this.setAttribute(e.PROGRAM_END_TIME,`${t}`)}get assetStartTime(){let t=this.getAttribute(e.ASSET_START_TIME);if(t==null)return;let i=+t;return Number.isNaN(i)?void 0:i}set assetStartTime(t){t==null?this.removeAttribute(e.ASSET_START_TIME):this.setAttribute(e.ASSET_START_TIME,`${t}`)}get assetEndTime(){let t=this.getAttribute(e.ASSET_END_TIME);if(t==null)return;let i=+t;return Number.isNaN(i)?void 0:i}set assetEndTime(t){t==null?this.removeAttribute(e.ASSET_END_TIME):this.setAttribute(e.ASSET_END_TIME,`${t}`)}get customDomain(){var t;return(t=this.getAttribute(e.CUSTOM_DOMAIN))!=null?t:void 0}set customDomain(t){t!==this.customDomain&&(t?this.setAttribute(e.CUSTOM_DOMAIN,t):this.removeAttribute(e.CUSTOM_DOMAIN))}get drmToken(){var t;return(t=this.getAttribute(e.DRM_TOKEN))!=null?t:void 0}set drmToken(t){t!==this.drmToken&&(t?this.setAttribute(e.DRM_TOKEN,t):this.removeAttribute(e.DRM_TOKEN))}get playbackToken(){var t,i,r,d;if(this.hasAttribute(e.PLAYBACK_TOKEN))return(t=this.getAttribute(e.PLAYBACK_TOKEN))!=null?t:void 0;if(this.hasAttribute(e.PLAYBACK_ID)){let[,h]=nt((i=this.playbackId)!=null?i:\"\");return(r=new URLSearchParams(h).get(\"token\"))!=null?r:void 0}if(this.src)return(d=new URLSearchParams(this.src).get(\"token\"))!=null?d:void 0}set playbackToken(t){t!==this.playbackToken&&(t?this.setAttribute(e.PLAYBACK_TOKEN,t):this.removeAttribute(e.PLAYBACK_TOKEN))}get tokens(){let t=this.getAttribute(e.PLAYBACK_TOKEN),i=this.getAttribute(e.DRM_TOKEN);return{...n(this,c),...t!=null?{playback:t}:{},...i!=null?{drm:i}:{}}}set tokens(t){o(this,c,t!=null?t:{})}get ended(){return it(this.nativeEl,this._hls)}get envKey(){var t;return(t=this.getAttribute(e.ENV_KEY))!=null?t:void 0}set envKey(t){t!==this.envKey&&(t?this.setAttribute(e.ENV_KEY,t):this.removeAttribute(e.ENV_KEY))}get beaconCollectionDomain(){var t;return(t=this.getAttribute(e.BEACON_COLLECTION_DOMAIN))!=null?t:void 0}set beaconCollectionDomain(t){t!==this.beaconCollectionDomain&&(t?this.setAttribute(e.BEACON_COLLECTION_DOMAIN,t):this.removeAttribute(e.BEACON_COLLECTION_DOMAIN))}get streamType(){var t;return(t=this.getAttribute(e.STREAM_TYPE))!=null?t:Z(this.nativeEl)}set streamType(t){t!==this.streamType&&(t?this.setAttribute(e.STREAM_TYPE,t):this.removeAttribute(e.STREAM_TYPE))}get targetLiveWindow(){return this.hasAttribute(e.TARGET_LIVE_WINDOW)?+this.getAttribute(e.TARGET_LIVE_WINDOW):Q(this.nativeEl)}set targetLiveWindow(t){t!=this.targetLiveWindow&&(t==null?this.removeAttribute(e.TARGET_LIVE_WINDOW):this.setAttribute(e.TARGET_LIVE_WINDOW,`${+t}`))}get liveEdgeStart(){var t,i;if(this.hasAttribute(e.LIVE_EDGE_OFFSET)){let{liveEdgeOffset:r}=this,d=(t=this.nativeEl.seekable.end(0))!=null?t:0,h=(i=this.nativeEl.seekable.start(0))!=null?i:0;return Math.max(h,d-r)}return tt(this.nativeEl)}get liveEdgeOffset(){if(this.hasAttribute(e.LIVE_EDGE_OFFSET))return+this.getAttribute(e.LIVE_EDGE_OFFSET)}set liveEdgeOffset(t){t!=this.liveEdgeOffset&&(t==null?this.removeAttribute(e.LIVE_EDGE_OFFSET):this.setAttribute(e.LIVE_EDGE_OFFSET,`${+t}`))}get seekable(){return et(this.nativeEl)}async addCuePoints(t){return w(this.nativeEl,t)}get activeCuePoint(){return $(this.nativeEl)}get cuePoints(){return H(this.nativeEl)}async addChapters(t){return j(this.nativeEl,t)}get activeChapter(){return q(this.nativeEl)}get chapters(){return rt(this.nativeEl)}getStartDate(){return X(this.nativeEl,this._hls)}get currentPdt(){return J(this.nativeEl,this._hls)}get preferPlayback(){let t=this.getAttribute(e.PREFER_PLAYBACK);if(t===M.MSE||t===M.NATIVE)return t}set preferPlayback(t){t!==this.preferPlayback&&(t===M.MSE||t===M.NATIVE?this.setAttribute(e.PREFER_PLAYBACK,t):this.removeAttribute(e.PREFER_PLAYBACK))}get metadata(){return{...this.getAttributeNames().filter(i=>i.startsWith(\"metadata-\")&&![e.METADATA_URL].includes(i)).reduce((i,r)=>{let d=this.getAttribute(r);return d!=null&&(i[r.replace(/^metadata-/,\"\").replace(/-/g,\"_\")]=d),i},{}),...n(this,A)}}set metadata(t){o(this,A,t!=null?t:{}),this.mux&&this.mux.emit(\"hb\",n(this,A))}get _hlsConfig(){return n(this,T)}set _hlsConfig(t){o(this,T,t)}get logo(){var t;return(t=this.getAttribute(e.LOGO))!=null?t:n(this,g)}set logo(t){t?this.setAttribute(e.LOGO,t):this.removeAttribute(e.LOGO)}load(){o(this,l,G(this,this.nativeEl,n(this,l)))}unload(){U(this.nativeEl,n(this,l),this),o(this,l,void 0)}attributeChangedCallback(t,i,r){var h,L;switch(R.observedAttributes.includes(t)&&![\"src\",\"autoplay\",\"preload\"].includes(t)&&super.attributeChangedCallback(t,i,r),t){case e.PLAYER_SOFTWARE_NAME:this.playerSoftwareName=r!=null?r:void 0;break;case e.PLAYER_SOFTWARE_VERSION:this.playerSoftwareVersion=r!=null?r:void 0;break;case\"src\":{let E=!!i,S=!!r;!E&&S?I(this,m,y).call(this):E&&!S?this.unload():E&&S&&(this.unload(),I(this,m,y).call(this));break}case\"autoplay\":if(r===i)break;(h=n(this,l))==null||h.setAutoplay(this.autoplay);break;case\"preload\":if(r===i)break;(L=n(this,l))==null||L.setPreload(r);break;case e.PLAYBACK_ID:this.src=F(this);break;case e.DEBUG:{let E=this.debug;this.mux&&console.info(\"Cannot toggle debug mode of mux data after initialization. Make sure you set all metadata to override before setting the src.\"),this._hls&&(this._hls.config.debug=E);break}case e.METADATA_URL:r&&fetch(r).then(E=>E.json()).then(E=>this.metadata=E).catch(()=>console.error(`Unable to load or parse metadata JSON from metadata-url ${r}!`));break;case e.STREAM_TYPE:(r==null||r!==i)&&this.dispatchEvent(new CustomEvent(\"streamtypechange\",{composed:!0,bubbles:!0}));break;case e.TARGET_LIVE_WINDOW:(r==null||r!==i)&&this.dispatchEvent(new CustomEvent(\"targetlivewindowchange\",{composed:!0,bubbles:!0,detail:this.targetLiveWindow}));break;case e.LOGO:(r==null||r!==i)&&this.updateLogo();break}}updateLogo(){if(!this.shadowRoot)return;let t=this.shadowRoot.querySelector('slot[name=\"logo\"]');if(!t)return;let i=this.constructor.getLogoHTML(n(this,g)||this.logo);t.innerHTML=i}connectedCallback(){var t;(t=super.connectedCallback)==null||t.call(this),this.nativeEl&&this.src&&!n(this,l)&&I(this,m,y).call(this)}disconnectedCallback(){this.unload()}handleEvent(t){t.target===this.nativeEl&&this.dispatchEvent(new CustomEvent(t.type,{composed:!0,detail:t.detail}))}};l=new WeakMap,f=new WeakMap,b=new WeakMap,A=new WeakMap,c=new WeakMap,T=new WeakMap,_=new WeakMap,p=new WeakMap,O=new WeakMap,g=new WeakMap,m=new WeakSet,y=async function(){n(this,f)||(await o(this,f,Promise.resolve()),o(this,f,null),this.load())};export{e as Attributes,ct as Events,At as MediaError,K as MuxVideoBaseElement,V as generatePlayerInitTime,x as playerSoftwareName,v as playerSoftwareVersion};\n//# sourceMappingURL=base.mjs.map\n","var f=e=>{throw TypeError(e)};var g=(e,o,t)=>o.has(e)||f(\"Cannot \"+t);var u=(e,o,t)=>(g(e,o,\"read from private field\"),t?t.call(e):o.get(e)),m=(e,o,t)=>o.has(e)?f(\"Cannot add the same private member more than once\"):o instanceof WeakSet?o.add(e):o.set(e,t),d=(e,o,t,l)=>(g(e,o,\"write to private field\"),l?l.call(e,t):o.set(e,t),t);var s=class{addEventListener(){}removeEventListener(){}dispatchEvent(o){return!0}};if(typeof DocumentFragment==\"undefined\"){class e extends s{}globalThis.DocumentFragment=e}var n=class extends s{},p=class extends s{},x={get(e){},define(e,o,t){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(n)}},a,h=class{constructor(o,t={}){m(this,a);d(this,a,t==null?void 0:t.detail)}get detail(){return u(this,a)}initCustomEvent(){}};a=new WeakMap;function C(e,o){return new n}var y={document:{createElement:C},DocumentFragment,customElements:x,CustomEvent:h,EventTarget:s,HTMLElement:n,HTMLVideoElement:p},b=typeof window==\"undefined\"||typeof globalThis.customElements==\"undefined\",c=b?y:globalThis,k=b?y.document:globalThis.document;import{MuxVideoBaseElement as T}from\"@mux/mux-video/base\";import{CastableMediaMixin as E}from\"castable-video/castable-mixin.js\";import{MediaTracksMixin as D}from\"media-tracks\";export*from\"@mux/mux-video/base\";var r,i=class extends E(D(T)){constructor(){super(...arguments);m(this,r)}get autoplay(){let t=this.getAttribute(\"autoplay\");return t===null?!1:t===\"\"?!0:t}set autoplay(t){let l=this.autoplay;t!==l&&(t?this.setAttribute(\"autoplay\",typeof t==\"string\"?t:\"\"):this.removeAttribute(\"autoplay\"))}get muxCastCustomData(){return{mux:{playbackId:this.playbackId,minResolution:this.minResolution,maxResolution:this.maxResolution,renditionOrder:this.renditionOrder,customDomain:this.customDomain,tokens:{drm:this.drmToken},envKey:this.envKey,metadata:this.metadata,disableCookies:this.disableCookies,disableTracking:this.disableTracking,beaconCollectionDomain:this.beaconCollectionDomain,startTime:this.startTime,preferCmcd:this.preferCmcd}}}get castCustomData(){var t;return(t=u(this,r))!=null?t:this.muxCastCustomData}set castCustomData(t){d(this,r,t)}};r=new WeakMap;c.customElements.get(\"mux-video\")||(c.customElements.define(\"mux-video\",i),c.MuxVideoElement=i);var F=i;export{F as default};\n//# sourceMappingURL=index.mjs.map\n","import ue from\"mux-embed\";import ot from\"hls.js\";var g=ot;var C={VIDEO:\"video\",THUMBNAIL:\"thumbnail\",STORYBOARD:\"storyboard\",DRM:\"drm\"},D={NOT_AN_ERROR:0,NETWORK_OFFLINE:2000002,NETWORK_UNKNOWN_ERROR:2e6,NETWORK_NO_STATUS:2000001,NETWORK_INVALID_URL:24e5,NETWORK_NOT_FOUND:2404e3,NETWORK_NOT_READY:2412e3,NETWORK_GENERIC_SERVER_FAIL:25e5,NETWORK_TOKEN_MISSING:2403201,NETWORK_TOKEN_MALFORMED:2412202,NETWORK_TOKEN_EXPIRED:2403210,NETWORK_TOKEN_AUD_MISSING:2403221,NETWORK_TOKEN_AUD_MISMATCH:2403222,NETWORK_TOKEN_SUB_MISMATCH:2403232,ENCRYPTED_ERROR:5e6,ENCRYPTED_UNSUPPORTED_KEY_SYSTEM:5000001,ENCRYPTED_GENERATE_REQUEST_FAILED:5000002,ENCRYPTED_UPDATE_LICENSE_FAILED:5000003,ENCRYPTED_UPDATE_SERVER_CERT_FAILED:5000004,ENCRYPTED_CDM_ERROR:5000005,ENCRYPTED_OUTPUT_RESTRICTED:5000006,ENCRYPTED_MISSING_TOKEN:5000002},V=e=>e===C.VIDEO?\"playback\":e,L=class L extends Error{constructor(t,r=L.MEDIA_ERR_CUSTOM,n,o){var a;super(t),this.name=\"MediaError\",this.code=r,this.context=o,this.fatal=n!=null?n:r>=L.MEDIA_ERR_NETWORK&&r<=L.MEDIA_ERR_ENCRYPTED,this.message||(this.message=(a=L.defaultMessages[this.code])!=null?a:\"\")}};L.MEDIA_ERR_ABORTED=1,L.MEDIA_ERR_NETWORK=2,L.MEDIA_ERR_DECODE=3,L.MEDIA_ERR_SRC_NOT_SUPPORTED=4,L.MEDIA_ERR_ENCRYPTED=5,L.MEDIA_ERR_CUSTOM=100,L.defaultMessages={1:\"You aborted the media playback\",2:\"A network error caused the media download to fail.\",3:\"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\",4:\"An unsupported error occurred. The server or network failed, or your browser does not support this format.\",5:\"The media is encrypted and there are no keys to decrypt it.\"};var f=L;var at=e=>e==null,O=(e,t)=>at(t)?!1:e in t,K={ANY:\"any\",MUTED:\"muted\"},_={ON_DEMAND:\"on-demand\",LIVE:\"live\",UNKNOWN:\"unknown\"},X={MSE:\"mse\",NATIVE:\"native\"},S={HEADER:\"header\",QUERY:\"query\",NONE:\"none\"},Zt=Object.values(S),I={M3U8:\"application/vnd.apple.mpegurl\",MP4:\"video/mp4\"},W={HLS:I.M3U8},er=Object.keys(W),tr=[...Object.values(I),\"hls\",\"HLS\"],rr={upTo720p:\"720p\",upTo1080p:\"1080p\",upTo1440p:\"1440p\",upTo2160p:\"2160p\"},nr={noLessThan480p:\"480p\",noLessThan540p:\"540p\",noLessThan720p:\"720p\",noLessThan1080p:\"1080p\",noLessThan1440p:\"1440p\",noLessThan2160p:\"2160p\"},or={DESCENDING:\"desc\"};var st=\"en\",Y={code:st};var v=(e,t,r,n,o=e)=>{o.addEventListener(t,r,n),e.addEventListener(\"teardown\",()=>{o.removeEventListener(t,r)},{once:!0})};function Te(e,t,r){t&&r>t&&(r=t);for(let n=0;n<e.length;n++)if(e.start(n)<=r&&e.end(n)>=r)return!0;return!1}var F=e=>{let t=e.indexOf(\"?\");if(t<0)return[e];let r=e.slice(0,t),n=e.slice(t);return[r,n]},U=e=>{let{type:t}=e;if(t){let r=t.toUpperCase();return O(r,W)?W[r]:t}return it(e)},Q=e=>e===\"VOD\"?_.ON_DEMAND:_.LIVE,Z=e=>e===\"EVENT\"?Number.POSITIVE_INFINITY:e===\"VOD\"?Number.NaN:0,it=e=>{let{src:t}=e;if(!t)return\"\";let r=\"\";try{r=new URL(t).pathname}catch{console.error(\"invalid url\")}let n=r.lastIndexOf(\".\");if(n<0)return ut(e)?I.M3U8:\"\";let a=r.slice(n+1).toUpperCase();return O(a,I)?I[a]:\"\"},ct=\"mux.com\",ut=({src:e,customDomain:t=ct})=>{let r;try{r=new URL(`${e}`)}catch{return!1}let n=r.protocol===\"https:\",o=r.hostname===`stream.${t}`.toLowerCase(),a=r.pathname.split(\"/\"),i=a.length===2,c=!(a!=null&&a[1].includes(\".\"));return n&&o&&i&&c},ee=e=>{let t=(e!=null?e:\"\").split(\".\")[1];if(t)try{let r=t.replace(/-/g,\"+\").replace(/_/g,\"/\"),n=decodeURIComponent(atob(r).split(\"\").map(function(o){return\"%\"+(\"00\"+o.charCodeAt(0).toString(16)).slice(-2)}).join(\"\"));return JSON.parse(n)}catch{return}},ye=({exp:e},t=Date.now())=>!e||e*1e3<t,me=({sub:e},t)=>e!==t,Ee=({aud:e},t)=>!e,ge=({aud:e},t)=>e!==t,Me=\"en\";function x(e,t=!0){var o,a;let r=t&&(a=(o=Y)==null?void 0:o[e])!=null?a:e,n=t?Y.code:Me;return new z(r,n)}var z=class{constructor(t,r=(n=>(n=Y)!=null?n:Me)()){this.message=t,this.locale=r}format(t){return this.message.replace(/\\{(\\w+)\\}/g,(r,n)=>{var o;return(o=t[n])!=null?o:\"\"})}toString(){return this.message}};var dt=Object.values(K),xe=e=>typeof e==\"boolean\"||typeof e==\"string\"&&dt.includes(e),Re=(e,t,r)=>{let{autoplay:n}=e,o=!1,a=!1,i=xe(n)?n:!!n,c=()=>{o||v(t,\"playing\",()=>{o=!0},{once:!0})};if(c(),v(t,\"loadstart\",()=>{o=!1,c(),te(t,i)},{once:!0}),v(t,\"loadstart\",()=>{r||(e.streamType&&e.streamType!==_.UNKNOWN?a=e.streamType===_.LIVE:a=!Number.isFinite(t.duration)),te(t,i)},{once:!0}),r&&r.once(g.Events.LEVEL_LOADED,(u,s)=>{var p;e.streamType&&e.streamType!==_.UNKNOWN?a=e.streamType===_.LIVE:a=(p=s.details.live)!=null?p:!1}),!i){let u=()=>{!a||Number.isFinite(e.startTime)||(r!=null&&r.liveSyncPosition?t.currentTime=r.liveSyncPosition:Number.isFinite(t.seekable.end(0))&&(t.currentTime=t.seekable.end(0)))};r&&v(t,\"play\",()=>{t.preload===\"metadata\"?r.once(g.Events.LEVEL_UPDATED,u):u()},{once:!0})}return u=>{o||(i=xe(u)?u:!!u,te(t,i))}},te=(e,t)=>{if(!t)return;let r=e.muted,n=()=>e.muted=r;switch(t){case K.ANY:e.play().catch(()=>{e.muted=!0,e.play().catch(n)});break;case K.MUTED:e.muted=!0,e.play().catch(n);break;default:e.play().catch(()=>{});break}};var be=({preload:e,src:t},r,n)=>{let o=p=>{p!=null&&[\"\",\"none\",\"metadata\",\"auto\"].includes(p)?r.setAttribute(\"preload\",p):r.removeAttribute(\"preload\")};if(!n)return o(e),o;let a=!1,i=!1,c=n.config.maxBufferLength,d=n.config.maxBufferSize,u=p=>{o(p);let l=p!=null?p:r.preload;i||l===\"none\"||(l===\"metadata\"?(n.config.maxBufferLength=1,n.config.maxBufferSize=1):(n.config.maxBufferLength=c,n.config.maxBufferSize=d),s())},s=()=>{!a&&t&&(a=!0,n.loadSource(t))};return v(r,\"play\",()=>{i=!0,n.config.maxBufferLength=c,n.config.maxBufferSize=d,s()},{once:!0}),u(e),u};function De(e,t){var c;if(!(\"videoTracks\"in e))return;let r=new WeakMap;t.on(g.Events.MANIFEST_PARSED,function(d,u){i();let s=e.addVideoTrack(\"main\");s.selected=!0;for(let[p,l]of u.levels.entries()){let T=s.addRendition(l.url[0],l.width,l.height,l.videoCodec,l.bitrate);r.set(l,`${p}`),T.id=`${p}`}}),t.on(g.Events.AUDIO_TRACKS_UPDATED,function(d,u){a();for(let s of u.audioTracks){let p=s.default?\"main\":\"alternative\",l=e.addAudioTrack(p,s.name,s.lang);l.id=`${s.id}`,s.default&&(l.enabled=!0)}}),e.audioTracks.addEventListener(\"change\",()=>{var s;let d=+((s=[...e.audioTracks].find(p=>p.enabled))==null?void 0:s.id),u=t.audioTracks.map(p=>p.id);d!=t.audioTrack&&u.includes(d)&&(t.audioTrack=d)}),t.on(g.Events.LEVELS_UPDATED,function(d,u){var l;let s=e.videoTracks[(l=e.videoTracks.selectedIndex)!=null?l:0];if(!s)return;let p=u.levels.map(T=>r.get(T));for(let T of e.videoRenditions)T.id&&!p.includes(T.id)&&s.removeRendition(T)});let n=d=>{let u=d.target.selectedIndex;u!=t.nextLevel&&(t.nextLevel=u)};(c=e.videoRenditions)==null||c.addEventListener(\"change\",n);let o=()=>{for(let d of e.videoTracks)e.removeVideoTrack(d)},a=()=>{for(let d of e.audioTracks)e.removeAudioTrack(d)},i=()=>{o(),a()};t.once(g.Events.DESTROYING,i)}var re=e=>\"time\"in e?e.time:e.startTime;function Ce(e,t){t.on(g.Events.NON_NATIVE_TEXT_TRACKS_FOUND,(o,{tracks:a})=>{a.forEach(i=>{var s,p;let c=(s=i.subtitleTrack)!=null?s:i.closedCaptions,d=t.subtitleTracks.findIndex(({lang:l,name:T,type:m})=>l==(c==null?void 0:c.lang)&&T===i.label&&m.toLowerCase()===i.kind),u=((p=i._id)!=null?p:i.default)?\"default\":`${i.kind}${d}`;ne(e,i.kind,i.label,c==null?void 0:c.lang,u,i.default)})});let r=()=>{if(!t.subtitleTracks.length)return;let o=Array.from(e.textTracks).find(c=>c.id&&c.mode===\"showing\"&&[\"subtitles\",\"captions\"].includes(c.kind));if(!o)return;let a=t.subtitleTracks[t.subtitleTrack],i=a?a.default?\"default\":`${t.subtitleTracks[t.subtitleTrack].type.toLowerCase()}${t.subtitleTrack}`:void 0;if(t.subtitleTrack<0||(o==null?void 0:o.id)!==i){let c=t.subtitleTracks.findIndex(({lang:d,name:u,type:s,default:p})=>o.id===\"default\"&&p||d==o.language&&u===o.label&&s.toLowerCase()===o.kind);t.subtitleTrack=c}(o==null?void 0:o.id)===i&&o.cues&&Array.from(o.cues).forEach(c=>{o.addCue(c)})};e.textTracks.addEventListener(\"change\",r),t.on(g.Events.CUES_PARSED,(o,{track:a,cues:i})=>{let c=e.textTracks.getTrackById(a);if(!c)return;let d=c.mode===\"disabled\";d&&(c.mode=\"hidden\"),i.forEach(u=>{var s;(s=c.cues)!=null&&s.getCueById(u.id)||c.addCue(u)}),d&&(c.mode=\"disabled\")}),t.once(g.Events.DESTROYING,()=>{e.textTracks.removeEventListener(\"change\",r),e.querySelectorAll(\"track[data-removeondestroy]\").forEach(a=>{a.remove()})});let n=()=>{Array.from(e.textTracks).forEach(o=>{var a,i;if(![\"subtitles\",\"caption\"].includes(o.kind)&&(o.label===\"thumbnails\"||o.kind===\"chapters\")){if(!((a=o.cues)!=null&&a.length)){let c=\"track\";o.kind&&(c+=`[kind=\"${o.kind}\"]`),o.label&&(c+=`[label=\"${o.label}\"]`);let d=e.querySelector(c),u=(i=d==null?void 0:d.getAttribute(\"src\"))!=null?i:\"\";d==null||d.removeAttribute(\"src\"),setTimeout(()=>{d==null||d.setAttribute(\"src\",u)},0)}o.mode!==\"hidden\"&&(o.mode=\"hidden\")}})};t.once(g.Events.MANIFEST_LOADED,n),t.once(g.Events.MEDIA_ATTACHED,n)}function ne(e,t,r,n,o,a){let i=document.createElement(\"track\");return i.kind=t,i.label=r,n&&(i.srclang=n),o&&(i.id=o),a&&(i.default=!0),i.track.mode=[\"subtitles\",\"captions\"].includes(t)?\"disabled\":\"hidden\",i.setAttribute(\"data-removeondestroy\",\"\"),e.append(i),i.track}function lt(e,t){let r=Array.prototype.find.call(e.querySelectorAll(\"track\"),n=>n.track===t);r==null||r.remove()}function w(e,t,r){var n;return(n=Array.from(e.querySelectorAll(\"track\")).find(o=>o.track.label===t&&o.track.kind===r))==null?void 0:n.track}async function ve(e,t,r,n){let o=w(e,r,n);return o||(o=ne(e,n,r),o.mode=\"hidden\",await new Promise(a=>setTimeout(()=>a(void 0),0))),o.mode!==\"hidden\"&&(o.mode=\"hidden\"),[...t].sort((a,i)=>re(i)-re(a)).forEach(a=>{var d,u;let i=a.value,c=re(a);if(\"endTime\"in a&&a.endTime!=null)o==null||o.addCue(new VTTCue(c,a.endTime,n===\"chapters\"?i:JSON.stringify(i!=null?i:null)));else{let s=Array.prototype.findIndex.call(o==null?void 0:o.cues,m=>m.startTime>=c),p=(d=o==null?void 0:o.cues)==null?void 0:d[s],l=p?p.startTime:Number.isFinite(e.duration)?e.duration:Number.MAX_SAFE_INTEGER,T=(u=o==null?void 0:o.cues)==null?void 0:u[s-1];T&&(T.endTime=c),o==null||o.addCue(new VTTCue(c,l,n===\"chapters\"?i:JSON.stringify(i!=null?i:null)))}}),e.textTracks.dispatchEvent(new Event(\"change\",{bubbles:!0,composed:!0})),o}var oe=\"cuepoints\",Pe=Object.freeze({label:oe});async function _e(e,t,r=Pe){return ve(e,t,r.label,\"metadata\")}var $=e=>({time:e.startTime,value:JSON.parse(e.text)});function pt(e,t={label:oe}){let r=w(e,t.label,\"metadata\");return r!=null&&r.cues?Array.from(r.cues,n=>$(n)):[]}function ke(e,t={label:oe}){var a,i;let r=w(e,t.label,\"metadata\");if(!((a=r==null?void 0:r.activeCues)!=null&&a.length))return;if(r.activeCues.length===1)return $(r.activeCues[0]);let{currentTime:n}=e,o=Array.prototype.find.call((i=r.activeCues)!=null?i:[],({startTime:c,endTime:d})=>c<=n&&d>n);return $(o||r.activeCues[0])}async function he(e,t=Pe){return new Promise(r=>{v(e,\"loadstart\",async()=>{let n=await _e(e,[],t);v(e,\"cuechange\",()=>{let o=ke(e);if(o){let a=new CustomEvent(\"cuepointchange\",{composed:!0,bubbles:!0,detail:o});e.dispatchEvent(a)}},{},n),r(n)})})}var ae=\"chapters\",Le=Object.freeze({label:ae}),B=e=>({startTime:e.startTime,endTime:e.endTime,value:e.text});async function Ne(e,t,r=Le){return ve(e,t,r.label,\"chapters\")}function ft(e,t={label:ae}){var n;let r=w(e,t.label,\"chapters\");return(n=r==null?void 0:r.cues)!=null&&n.length?Array.from(r.cues,o=>B(o)):[]}function Ie(e,t={label:ae}){var a,i;let r=w(e,t.label,\"chapters\");if(!((a=r==null?void 0:r.activeCues)!=null&&a.length))return;if(r.activeCues.length===1)return B(r.activeCues[0]);let{currentTime:n}=e,o=Array.prototype.find.call((i=r.activeCues)!=null?i:[],({startTime:c,endTime:d})=>c<=n&&d>n);return B(o||r.activeCues[0])}async function Ae(e,t=Le){return new Promise(r=>{v(e,\"loadstart\",async()=>{let n=await Ne(e,[],t);v(e,\"cuechange\",()=>{let o=Ie(e);if(o){let a=new CustomEvent(\"chapterchange\",{composed:!0,bubbles:!0,detail:o});e.dispatchEvent(a)}},{},n),r(n)})})}function Tt(e,t){if(t){let r=t.playingDate;if(r!=null)return new Date(r.getTime()-e.currentTime*1e3)}return typeof e.getStartDate==\"function\"?e.getStartDate():new Date(NaN)}function yt(e,t){if(t&&t.playingDate)return t.playingDate;if(typeof e.getStartDate==\"function\"){let r=e.getStartDate();return new Date(r.getTime()+e.currentTime*1e3)}return new Date(NaN)}var se={VIDEO:\"v\",THUMBNAIL:\"t\",STORYBOARD:\"s\",DRM:\"d\"},mt=e=>{if(e===C.VIDEO)return se.VIDEO;if(e===C.DRM)return se.DRM},Et=(e,t)=>{var o,a;let r=V(e),n=`${r}Token`;return(o=t.tokens)!=null&&o[r]?(a=t.tokens)==null?void 0:a[r]:O(n,t)?t[n]:void 0},H=(e,t,r,n,o=!1,a=!(i=>(i=globalThis.navigator)==null?void 0:i.onLine)())=>{var M,h;if(a){let b=x(\"Your device appears to be offline\",o),E=void 0,y=f.MEDIA_ERR_NETWORK,k=new f(b,y,!1,E);return k.errorCategory=t,k.muxCode=D.NETWORK_OFFLINE,k.data=e,k}let c=\"status\"in e?e.status:e.code,d=Date.now(),u=f.MEDIA_ERR_NETWORK;if(c===200)return;let s=V(t),p=Et(t,r),l=mt(t),[T]=F((M=r.playbackId)!=null?M:\"\");if(!c||!T)return;let m=ee(p);if(p&&!m){let b=x(\"The {tokenNamePrefix}-token provided is invalid or malformed.\",o).format({tokenNamePrefix:s}),E=x(\"Compact JWT string: {token}\",o).format({token:p}),y=new f(b,u,!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_TOKEN_MALFORMED,y.data=e,y}if(c>=500){let b=new f(\"\",u,n!=null?n:!0);return b.errorCategory=t,b.muxCode=D.NETWORK_UNKNOWN_ERROR,b}if(c===403)if(m){if(ye(m,d)){let b={timeStyle:\"medium\",dateStyle:\"medium\"},E=x(\"The video\\u2019s secured {tokenNamePrefix}-token has expired.\",o).format({tokenNamePrefix:s}),y=x(\"Expired at: {expiredDate}. Current time: {currentDate}.\",o).format({expiredDate:new Intl.DateTimeFormat(\"en\",b).format((h=m.exp)!=null?h:0*1e3),currentDate:new Intl.DateTimeFormat(\"en\",b).format(d)}),k=new f(E,u,!0,y);return k.errorCategory=t,k.muxCode=D.NETWORK_TOKEN_EXPIRED,k.data=e,k}if(me(m,T)){let b=x(\"The video\\u2019s playback ID does not match the one encoded in the {tokenNamePrefix}-token.\",o).format({tokenNamePrefix:s}),E=x(\"Specified playback ID: {playbackId} and the playback ID encoded in the {tokenNamePrefix}-token: {tokenPlaybackId}\",o).format({tokenNamePrefix:s,playbackId:T,tokenPlaybackId:m.sub}),y=new f(b,u,!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_TOKEN_SUB_MISMATCH,y.data=e,y}if(Ee(m,l)){let b=x(\"The {tokenNamePrefix}-token is formatted with incorrect information.\",o).format({tokenNamePrefix:s}),E=x(\"The {tokenNamePrefix}-token has no aud value. aud value should be {expectedAud}.\",o).format({tokenNamePrefix:s,expectedAud:l}),y=new f(b,u,!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_TOKEN_AUD_MISSING,y.data=e,y}if(ge(m,l)){let b=x(\"The {tokenNamePrefix}-token is formatted with incorrect information.\",o).format({tokenNamePrefix:s}),E=x(\"The {tokenNamePrefix}-token has an incorrect aud value: {aud}. aud value should be {expectedAud}.\",o).format({tokenNamePrefix:s,expectedAud:l,aud:m.aud}),y=new f(b,u,!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_TOKEN_AUD_MISMATCH,y.data=e,y}}else{let b=x(\"Authorization error trying to access this {category} URL. If this is a signed URL, you might need to provide a {tokenNamePrefix}-token.\",o).format({tokenNamePrefix:s,category:t}),E=x(\"Specified playback ID: {playbackId}\",o).format({playbackId:T}),y=new f(b,u,n!=null?n:!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_TOKEN_MISSING,y.data=e,y}if(c===412){let b=x(\"This playback-id may belong to a live stream that is not currently active or an asset that is not ready.\",o),E=x(\"Specified playback ID: {playbackId}\",o).format({playbackId:T}),y=new f(b,u,n!=null?n:!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_NOT_READY,y.streamType=r.streamType===_.LIVE?\"live\":r.streamType===_.ON_DEMAND?\"on-demand\":\"unknown\",y.data=e,y}if(c===404){let b=x(\"This URL or playback-id does not exist. You may have used an Asset ID or an ID from a different resource.\",o),E=x(\"Specified playback ID: {playbackId}\",o).format({playbackId:T}),y=new f(b,u,n!=null?n:!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_NOT_FOUND,y.data=e,y}if(c===400){let b=x(\"The URL or playback-id was invalid. You may have used an invalid value as a playback-id.\"),E=x(\"Specified playback ID: {playbackId}\",o).format({playbackId:T}),y=new f(b,u,n!=null?n:!0,E);return y.errorCategory=t,y.muxCode=D.NETWORK_INVALID_URL,y.data=e,y}let R=new f(\"\",u,n!=null?n:!0);return R.errorCategory=t,R.muxCode=D.NETWORK_UNKNOWN_ERROR,R.data=e,R};var Se=g.DefaultConfig.capLevelController,j=class j extends Se{constructor(t){super(t)}get levels(){var t;return(t=this.hls.levels)!=null?t:[]}getValidLevels(t){return this.levels.filter((r,n)=>this.isLevelAllowed(r)&&n<=t)}getMaxLevel(t){let r=super.getMaxLevel(t),n=this.getValidLevels(t);if(!n[r])return r;let o=Math.min(n[r].width,n[r].height),a=j.minMaxResolution;return o>=a?r:Se.getMaxLevelByMediaSize(n,a*(16/9),a)}};j.minMaxResolution=720;var ie=j,we=ie;var J={FAIRPLAY:\"fairplay\",PLAYREADY:\"playready\",WIDEVINE:\"widevine\"},gt=e=>{if(e.includes(\"fps\"))return J.FAIRPLAY;if(e.includes(\"playready\"))return J.PLAYREADY;if(e.includes(\"widevine\"))return J.WIDEVINE},Mt=e=>{let t=e.split(`\n`).find((r,n,o)=>n&&o[n-1].startsWith(\"#EXT-X-STREAM-INF\"));return fetch(t).then(r=>r.status!==200?Promise.reject(r):r.text())},xt=e=>{let t=e.split(`\n`).filter(n=>n.startsWith(\"#EXT-X-SESSION-DATA\"));if(!t.length)return{};let r={};for(let n of t){let o=bt(n),a=o[\"DATA-ID\"];a&&(r[a]={...o})}return{sessionData:r}},Rt=/([A-Z0-9-]+)=\"?(.*?)\"?(?:,|$)/g;function bt(e){let t=[...e.matchAll(Rt)];return Object.fromEntries(t.map(([,r,n])=>[r,n]))}var Dt=e=>{var c,d,u;let t=e.split(`\n`),n=(d=((c=t.find(s=>s.startsWith(\"#EXT-X-PLAYLIST-TYPE\")))!=null?c:\"\").split(\":\")[1])==null?void 0:d.trim(),o=Q(n),a=Z(n),i;if(o===_.LIVE){let s=t.find(l=>l.startsWith(\"#EXT-X-PART-INF\"));if(!!s)i=+s.split(\":\")[1].split(\"=\")[1]*2;else{let l=t.find(R=>R.startsWith(\"#EXT-X-TARGETDURATION\")),T=(u=l==null?void 0:l.split(\":\"))==null?void 0:u[1];i=+(T!=null?T:6)*3}}return{streamType:o,targetLiveWindow:a,liveEdgeStartOffset:i}},Ct=async(e,t)=>{if(t===I.MP4)return{streamType:_.ON_DEMAND,targetLiveWindow:Number.NaN,liveEdgeStartOffset:void 0,sessionData:void 0};if(t===I.M3U8){let r=await fetch(e);if(!r.ok)return Promise.reject(r);let n=await r.text(),o=await Mt(n);return{...xt(n),...Dt(o)}}return console.error(`Media type ${t} is an unrecognized or unsupported type for src ${e}.`),{streamType:void 0,targetLiveWindow:void 0,liveEdgeStartOffset:void 0,sessionData:void 0}},vt=async(e,t,r=U({src:e}))=>{var d,u,s,p;let{streamType:n,targetLiveWindow:o,liveEdgeStartOffset:a,sessionData:i}=await Ct(e,r),c=i==null?void 0:i[\"com.apple.hls.chapters\"];(c!=null&&c.URI||c!=null&&c.VALUE.toLocaleLowerCase().startsWith(\"http\"))&&de((d=c.URI)!=null?d:c.VALUE,t),((u=P.get(t))!=null?u:{}).liveEdgeStartOffset=a,((s=P.get(t))!=null?s:{}).targetLiveWindow=o,t.dispatchEvent(new CustomEvent(\"targetlivewindowchange\",{composed:!0,bubbles:!0})),((p=P.get(t))!=null?p:{}).streamType=n,t.dispatchEvent(new CustomEvent(\"streamtypechange\",{composed:!0,bubbles:!0}))},de=async(e,t)=>{var r,n;try{let o=await fetch(e);if(!o.ok)throw new Error(`Failed to fetch Mux metadata: ${o.status} ${o.statusText}`);let a=await o.json(),i={};if(!((r=a==null?void 0:a[0])!=null&&r.metadata))return;for(let d of a[0].metadata)d.key&&d.value&&(i[d.key]=d.value);((n=P.get(t))!=null?n:{}).metadata=i;let c=new CustomEvent(\"muxmetadata\");t.dispatchEvent(c)}catch(o){console.error(o)}},Pt=e=>{var i;let t=e.type,r=Q(t),n=Z(t),o,a=!!((i=e.partList)!=null&&i.length);return r===_.LIVE&&(o=a?e.partTarget*2:e.targetduration*3),{streamType:r,targetLiveWindow:n,liveEdgeStartOffset:o,lowLatency:a}},_t=(e,t,r)=>{var c,d,u,s,p,l,T,m;let{streamType:n,targetLiveWindow:o,liveEdgeStartOffset:a,lowLatency:i}=Pt(e);if(n===_.LIVE){i?(r.config.backBufferLength=(c=r.userConfig.backBufferLength)!=null?c:4,r.config.maxFragLookUpTolerance=(d=r.userConfig.maxFragLookUpTolerance)!=null?d:.001,r.config.abrBandWidthUpFactor=(u=r.userConfig.abrBandWidthUpFactor)!=null?u:r.config.abrBandWidthFactor):r.config.backBufferLength=(s=r.userConfig.backBufferLength)!=null?s:8;let R=Object.freeze({get length(){return t.seekable.length},start(M){return t.seekable.start(M)},end(M){var h;return M>this.length||M<0||Number.isFinite(t.duration)?t.seekable.end(M):(h=r.liveSyncPosition)!=null?h:t.seekable.end(M)}});((p=P.get(t))!=null?p:{}).seekable=R}((l=P.get(t))!=null?l:{}).liveEdgeStartOffset=a,((T=P.get(t))!=null?T:{}).targetLiveWindow=o,t.dispatchEvent(new CustomEvent(\"targetlivewindowchange\",{composed:!0,bubbles:!0})),((m=P.get(t))!=null?m:{}).streamType=n,t.dispatchEvent(new CustomEvent(\"streamtypechange\",{composed:!0,bubbles:!0}))},He,Ve,kt=(Ve=(He=globalThis==null?void 0:globalThis.navigator)==null?void 0:He.userAgent)!=null?Ve:\"\",Ke,We,Ye,ht=(Ye=(We=(Ke=globalThis==null?void 0:globalThis.navigator)==null?void 0:Ke.userAgentData)==null?void 0:We.platform)!=null?Ye:\"\",Fe,$e,Be,Lt=(Be=($e=(Fe=globalThis==null?void 0:globalThis.navigator)==null?void 0:Fe.userAgentData)==null?void 0:$e.brands)!=null?Be:[],Nt=kt.toLowerCase().includes(\"android\")||[\"x11\",\"android\"].some(e=>ht.toLowerCase().includes(e)),Oe=Lt.find(e=>e.brand===\"Google Chrome\"),It=e=>{var t;return Oe&&parseInt((t=Oe.version)!=null?t:\"0\")>=141&&!!e.canPlayType(\"application/vnd.apple.mpegurl\")},P=new WeakMap,A=\"mux.com\",je,Je,Ge=(Je=(je=g).isSupported)==null?void 0:Je.call(je),At=e=>Nt||It(e),Gr=()=>ue.utils.now(),St=ue.utils.generateUUID,qr=({playbackId:e,customDomain:t=A,maxResolution:r,minResolution:n,renditionOrder:o,programStartTime:a,programEndTime:i,assetStartTime:c,assetEndTime:d,playbackToken:u,tokens:{playback:s=u}={},extraSourceParams:p={}}={})=>{if(!e)return;let[l,T=\"\"]=F(e),m=new URL(`https://stream.${t}/${l}.m3u8${T}`);return s||m.searchParams.has(\"token\")?(m.searchParams.forEach((R,M)=>{M!=\"token\"&&m.searchParams.delete(M)}),s&&m.searchParams.set(\"token\",s)):(r&&m.searchParams.set(\"max_resolution\",r),n&&(m.searchParams.set(\"min_resolution\",n),r&&+r.slice(0,-1)<+n.slice(0,-1)&&console.error(\"minResolution must be <= maxResolution\",\"minResolution\",n,\"maxResolution\",r)),o&&m.searchParams.set(\"rendition_order\",o),a&&m.searchParams.set(\"program_start_time\",`${a}`),i&&m.searchParams.set(\"program_end_time\",`${i}`),c&&m.searchParams.set(\"asset_start_time\",`${c}`),d&&m.searchParams.set(\"asset_end_time\",`${d}`),Object.entries(p).forEach(([R,M])=>{M!=null&&m.searchParams.set(R,M)})),m.toString()},q=e=>{if(!e)return;let[t]=e.split(\"?\");return t||void 0},qe=e=>{if(!e||!e.startsWith(\"https://stream.\"))return;let[t]=new URL(e).pathname.slice(1).split(/\\.m3u8|\\//);return t||void 0},wt=e=>{var t,r,n;return(t=e==null?void 0:e.metadata)!=null&&t.video_id?e.metadata.video_id:tt(e)&&(n=(r=q(e.playbackId))!=null?r:qe(e.src))!=null?n:e.src},Ot=e=>{var t;return(t=P.get(e))==null?void 0:t.error},Xr=e=>{var t;return(t=P.get(e))==null?void 0:t.metadata},Ue=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.streamType)!=null?r:_.UNKNOWN},zr=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.targetLiveWindow)!=null?r:Number.NaN},Xe=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.seekable)!=null?r:e.seekable},Qr=e=>{var n;let t=(n=P.get(e))==null?void 0:n.liveEdgeStartOffset;if(typeof t!=\"number\")return Number.NaN;let r=Xe(e);return r.length?r.end(r.length-1)-t:Number.NaN},le=.034,Ut=(e,t,r=le)=>Math.abs(e-t)<=r,ze=(e,t,r=le)=>e>t||Ut(e,t,r),Ht=(e,t=le)=>e.paused&&ze(e.currentTime,e.duration,t),Qe=(e,t)=>{var u,s,p;if(!t||!e.buffered.length)return;if(e.readyState>2)return!1;let r=t.currentLevel>=0?(s=(u=t.levels)==null?void 0:u[t.currentLevel])==null?void 0:s.details:(p=t.levels.find(l=>!!l.details))==null?void 0:p.details;if(!r||r.live)return;let{fragments:n}=r;if(!(n!=null&&n.length))return;if(e.currentTime<e.duration-(r.targetduration+.5))return!1;let o=n[n.length-1];if(e.currentTime<=o.start)return!1;let a=o.start+o.duration/2,i=e.buffered.start(e.buffered.length-1),c=e.buffered.end(e.buffered.length-1);return a>i&&a<c},Vt=(e,t)=>e.ended||e.loop?e.ended:t&&Qe(e,t)?!0:Ht(e),Zr=(e,t,r)=>{Kt(t,r,e);let{metadata:n={}}=e,{view_session_id:o=St()}=n,a=wt(e);n.view_session_id=o,n.video_id=a,e.metadata=n;let i=s=>{var p;(p=t.mux)==null||p.emit(\"hb\",{view_drm_type:s})};e.drmTypeCb=i,P.set(t,{retryCount:0});let c=Wt(e,t),d=be(e,t,c);e!=null&&e.muxDataKeepSession&&(t!=null&&t.mux)&&!t.mux.deleted?c&&t.mux.addHLSJS({hlsjs:c,Hls:c?g:void 0}):Jt(e,t,c),Gt(e,t,c),he(t),Ae(t);let u=Re(e,t,c);return{engine:c,setAutoplay:u,setPreload:d}},Kt=(e,t,r)=>{let n=t==null?void 0:t.engine;e!=null&&e.mux&&!e.mux.deleted&&(r!=null&&r.muxDataKeepSession?n&&e.mux.removeHLSJS():(e.mux.destroy(),delete e.mux)),n&&(n.detachMedia(),n.destroy()),e&&(e.hasAttribute(\"src\")&&(e.removeAttribute(\"src\"),e.load()),e.removeEventListener(\"error\",nt),e.removeEventListener(\"error\",ce),e.removeEventListener(\"durationchange\",rt),P.delete(e),e.dispatchEvent(new Event(\"teardown\")))};function Ze(e,t){var u;let r=U(e);if(!(r===I.M3U8))return!0;let o=!r||((u=t.canPlayType(r))!=null?u:!0),{preferPlayback:a}=e,i=a===X.MSE,c=a===X.NATIVE,d=Ge&&(i||At(t));return o&&(c||!d)}var Wt=(e,t)=>{let{debug:r,streamType:n,startTime:o=-1,metadata:a,preferCmcd:i,_hlsConfig:c={}}=e,u=U(e)===I.M3U8,s=Ze(e,t);if(u&&!s&&Ge){let p={backBufferLength:30,renderTextTracksNatively:!1,liveDurationInfinity:!0,capLevelToPlayerSize:!0,capLevelOnFPSDrop:!0},l=Yt(n),T=Ft(e),m=[S.QUERY,S.HEADER].includes(i)?{useHeaders:i===S.HEADER,sessionId:a==null?void 0:a.view_session_id,contentId:a==null?void 0:a.video_id}:void 0,R=c.capLevelToPlayerSize==null?{capLevelController:we}:{},M=new g({debug:r,startPosition:o,cmcd:m,xhrSetup:(h,b)=>{var k,pe;if(i&&i!==S.QUERY)return;let E=new URL(b);if(!E.searchParams.has(\"CMCD\"))return;let y=((pe=(k=E.searchParams.get(\"CMCD\"))==null?void 0:k.split(\",\"))!=null?pe:[]).filter(fe=>fe.startsWith(\"sid\")||fe.startsWith(\"cid\")).join(\",\");E.searchParams.set(\"CMCD\",y),h.open(\"GET\",E)},...R,...p,...l,...T,...c});return M.on(g.Events.MANIFEST_PARSED,async function(h,b){var y,k;let E=(y=b.sessionData)==null?void 0:y[\"com.apple.hls.chapters\"];(E!=null&&E.URI||E!=null&&E.VALUE.toLocaleLowerCase().startsWith(\"http\"))&&de((k=E==null?void 0:E.URI)!=null?k:E==null?void 0:E.VALUE,t)}),M}},Yt=e=>e===_.LIVE?{backBufferLength:8}:{},Ft=e=>{let{tokens:{drm:t}={},playbackId:r,drmTypeCb:n}=e,o=q(r);return!t||!o?{}:{emeEnabled:!0,drmSystems:{\"com.apple.fps\":{licenseUrl:G(e,\"fairplay\"),serverCertificateUrl:et(e,\"fairplay\")},\"com.widevine.alpha\":{licenseUrl:G(e,\"widevine\")},\"com.microsoft.playready\":{licenseUrl:G(e,\"playready\")}},requestMediaKeySystemAccessFunc:(a,i)=>(a===\"com.widevine.alpha\"&&(i=[...i.map(c=>{var u;let d=(u=c.videoCapabilities)==null?void 0:u.map(s=>({...s,robustness:\"HW_SECURE_ALL\"}));return{...c,videoCapabilities:d}}),...i]),navigator.requestMediaKeySystemAccess(a,i).then(c=>{let d=gt(a);return n==null||n(d),c}))}},$t=async e=>{let t=await fetch(e);return t.status!==200?Promise.reject(t):await t.arrayBuffer()},Bt=async(e,t)=>{let r=await fetch(t,{method:\"POST\",headers:{\"Content-type\":\"application/octet-stream\"},body:e});if(r.status!==200)return Promise.reject(r);let n=await r.arrayBuffer();return new Uint8Array(n)},jt=(e,t)=>{v(t,\"encrypted\",async n=>{try{let o=n.initDataType;if(o!==\"skd\"){console.error(`Received unexpected initialization data type \"${o}\"`);return}if(!t.mediaKeys){let u=await navigator.requestMediaKeySystemAccess(\"com.apple.fps\",[{initDataTypes:[o],videoCapabilities:[{contentType:\"application/vnd.apple.mpegurl\",robustness:\"\"}],distinctiveIdentifier:\"not-allowed\",persistentState:\"not-allowed\",sessionTypes:[\"temporary\"]}]).then(p=>{var l;return(l=e.drmTypeCb)==null||l.call(e,J.FAIRPLAY),p}).catch(()=>{let p=x(\"Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser.\"),l=new f(p,f.MEDIA_ERR_ENCRYPTED,!0);l.errorCategory=C.DRM,l.muxCode=D.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM,N(t,l)});if(!u)return;let s=await u.createMediaKeys();try{let p=await $t(et(e,\"fairplay\")).catch(l=>{if(l instanceof Response){let T=H(l,C.DRM,e);return console.error(\"mediaError\",T==null?void 0:T.message,T==null?void 0:T.context),T?Promise.reject(T):Promise.reject(new Error(\"Unexpected error in app cert request\"))}return Promise.reject(l)});await s.setServerCertificate(p).catch(()=>{let l=x(\"Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate.\"),T=new f(l,f.MEDIA_ERR_ENCRYPTED,!0);return T.errorCategory=C.DRM,T.muxCode=D.ENCRYPTED_UPDATE_SERVER_CERT_FAILED,Promise.reject(T)})}catch(p){N(t,p);return}await t.setMediaKeys(s)}let a=n.initData;if(a==null){console.error(`Could not start encrypted playback due to missing initData in ${n.type} event`);return}let i=t.mediaKeys.createSession();i.addEventListener(\"keystatuseschange\",()=>{i.keyStatuses.forEach(u=>{let s;if(u===\"internal-error\"){let p=x(\"The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.\");s=new f(p,f.MEDIA_ERR_ENCRYPTED,!0),s.errorCategory=C.DRM,s.muxCode=D.ENCRYPTED_CDM_ERROR}else if(u===\"output-restricted\"||u===\"output-downscaled\"){let p=x(\"DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.\");s=new f(p,f.MEDIA_ERR_ENCRYPTED,!1),s.errorCategory=C.DRM,s.muxCode=D.ENCRYPTED_OUTPUT_RESTRICTED}s&&N(t,s)})});let c=await Promise.all([i.generateRequest(o,a).catch(()=>{let u=x(\"Failed to generate a DRM license request. This may be an issue with the player or your protected content.\"),s=new f(u,f.MEDIA_ERR_ENCRYPTED,!0);s.errorCategory=C.DRM,s.muxCode=D.ENCRYPTED_GENERATE_REQUEST_FAILED,N(t,s)}),new Promise(u=>{i.addEventListener(\"message\",s=>{u(s.message)},{once:!0})})]).then(([,u])=>u),d=await Bt(c,G(e,\"fairplay\")).catch(u=>{if(u instanceof Response){let s=H(u,C.DRM,e);return console.error(\"mediaError\",s==null?void 0:s.message,s==null?void 0:s.context),s?Promise.reject(s):Promise.reject(new Error(\"Unexpected error in license key request\"))}return Promise.reject(u)});await i.update(d).catch(()=>{let u=x(\"Failed to update DRM license. This may be an issue with the player or your protected content.\"),s=new f(u,f.MEDIA_ERR_ENCRYPTED,!0);return s.errorCategory=C.DRM,s.muxCode=D.ENCRYPTED_UPDATE_LICENSE_FAILED,Promise.reject(s)})}catch(o){N(t,o);return}})},G=({playbackId:e,tokens:{drm:t}={},customDomain:r=A},n)=>{let o=q(e);return`https://license.${r.toLocaleLowerCase().endsWith(A)?r:A}/license/${n}/${o}?token=${t}`},et=({playbackId:e,tokens:{drm:t}={},customDomain:r=A},n)=>{let o=q(e);return`https://license.${r.toLocaleLowerCase().endsWith(A)?r:A}/appcert/${n}/${o}?token=${t}`},tt=({playbackId:e,src:t,customDomain:r})=>{if(e)return!0;if(typeof t!=\"string\")return!1;let n=window==null?void 0:window.location.href,o=new URL(t,n).hostname.toLocaleLowerCase();return o.includes(A)||!!r&&o.includes(r.toLocaleLowerCase())},Jt=(e,t,r)=>{var d;let{envKey:n,disableTracking:o,muxDataSDK:a=ue,muxDataSDKOptions:i={}}=e,c=tt(e);if(!o&&(n||c)){let{playerInitTime:u,playerSoftwareName:s,playerSoftwareVersion:p,beaconCollectionDomain:l,debug:T,disableCookies:m}=e,R={...e.metadata,video_title:((d=e==null?void 0:e.metadata)==null?void 0:d.video_title)||void 0},M=h=>typeof h.player_error_code==\"string\"?!1:typeof e.errorTranslator==\"function\"?e.errorTranslator(h):h;a.monitor(t,{debug:T,beaconCollectionDomain:l,hlsjs:r,Hls:r?g:void 0,automaticErrorTracking:!1,errorTranslator:M,disableCookies:m,...i,data:{...n?{env_key:n}:{},player_software_name:s,player_software:s,player_software_version:p,player_init_time:u,...R}})}},Gt=(e,t,r)=>{var s,p;let n=Ze(e,t),{src:o,customDomain:a=A}=e,i=()=>{t.ended||e.disablePseudoEnded||!Vt(t,r)||(Qe(t,r)?t.currentTime=t.buffered.end(t.buffered.length-1):t.dispatchEvent(new Event(\"ended\")))},c,d,u=()=>{let l=Xe(t),T,m;l.length>0&&(T=l.start(0),m=l.end(0)),(d!==m||c!==T)&&t.dispatchEvent(new CustomEvent(\"seekablechange\",{composed:!0})),c=T,d=m};if(v(t,\"durationchange\",u),t&&n){let l=U(e);if(typeof o==\"string\"){if(o.endsWith(\".mp4\")&&o.includes(a)){let R=qe(o),M=new URL(`https://stream.${a}/${R}/metadata.json`);de(M.toString(),t)}let T=()=>{if(Ue(t)!==_.LIVE||Number.isFinite(t.duration))return;let R=setInterval(u,1e3);t.addEventListener(\"teardown\",()=>{clearInterval(R)},{once:!0}),v(t,\"durationchange\",()=>{Number.isFinite(t.duration)&&clearInterval(R)})},m=async()=>vt(o,t,l).then(T).catch(R=>{if(R instanceof Response){let M=H(R,C.VIDEO,e);if(M){N(t,M);return}}else R instanceof Error});if(t.preload===\"none\"){let R=()=>{m(),t.removeEventListener(\"loadedmetadata\",M)},M=()=>{m(),t.removeEventListener(\"play\",R)};v(t,\"play\",R,{once:!0}),v(t,\"loadedmetadata\",M,{once:!0})}else m();(s=e.tokens)!=null&&s.drm?jt(e,t):v(t,\"encrypted\",()=>{let R=x(\"Attempting to play DRM-protected content without providing a DRM token.\"),M=new f(R,f.MEDIA_ERR_ENCRYPTED,!0);M.errorCategory=C.DRM,M.muxCode=D.ENCRYPTED_MISSING_TOKEN,N(t,M)},{once:!0}),t.setAttribute(\"src\",o),e.startTime&&(((p=P.get(t))!=null?p:{}).startTime=e.startTime,t.addEventListener(\"durationchange\",rt,{once:!0}))}else t.removeAttribute(\"src\");t.addEventListener(\"error\",nt),t.addEventListener(\"error\",ce),t.addEventListener(\"emptied\",()=>{t.querySelectorAll(\"track[data-removeondestroy]\").forEach(m=>{m.remove()})},{once:!0}),v(t,\"pause\",i),v(t,\"seeked\",i),v(t,\"play\",()=>{t.ended||ze(t.currentTime,t.duration)&&(t.currentTime=t.seekable.length?t.seekable.start(0):0)})}else r&&o?(r.once(g.Events.LEVEL_LOADED,(l,T)=>{_t(T.details,t,r),u(),Ue(t)===_.LIVE&&!Number.isFinite(t.duration)&&(r.on(g.Events.LEVEL_UPDATED,u),v(t,\"durationchange\",()=>{Number.isFinite(t.duration)&&r.off(g.Events.LEVELS_UPDATED,u)}))}),r.on(g.Events.ERROR,(l,T)=>{var R,M;let m=qt(T,e);if(m.muxCode===D.NETWORK_NOT_READY){let b=(R=P.get(t))!=null?R:{},E=(M=b.retryCount)!=null?M:0;if(E<6){let y=E===0?5e3:6e4,k=new f(`Retrying in ${y/1e3} seconds...`,m.code,m.fatal);Object.assign(k,m),N(t,k),setTimeout(()=>{b.retryCount=E+1,T.details===\"manifestLoadError\"&&T.url&&r.loadSource(T.url)},y);return}else{b.retryCount=0;let y=new f('Try again later or <a href=\"#\" onclick=\"window.location.reload(); return false;\" style=\"color: #4a90e2;\">click here to retry</a>',m.code,m.fatal);Object.assign(y,m),N(t,y);return}}N(t,m)}),r.on(g.Events.MANIFEST_LOADED,()=>{let l=P.get(t);l&&l.error&&(l.error=null,l.retryCount=0,t.dispatchEvent(new Event(\"emptied\")),t.dispatchEvent(new Event(\"loadstart\")))}),t.addEventListener(\"error\",ce),v(t,\"waiting\",i),De(e,r),Ce(t,r),r.attachMedia(t)):console.error(\"It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.\")};function rt(e){var n;let t=e.target,r=(n=P.get(t))==null?void 0:n.startTime;if(r&&Te(t.seekable,t.duration,r)){let o=t.preload===\"auto\";o&&(t.preload=\"none\"),t.currentTime=r,o&&(t.preload=\"auto\")}}async function nt(e){if(!e.isTrusted)return;e.stopImmediatePropagation();let t=e.target;if(!(t!=null&&t.error))return;let{message:r,code:n}=t.error,o=new f(r,n);if(t.src&&n===f.MEDIA_ERR_SRC_NOT_SUPPORTED&&t.readyState===HTMLMediaElement.HAVE_NOTHING){setTimeout(()=>{var i;let a=(i=Ot(t))!=null?i:t.error;(a==null?void 0:a.code)===f.MEDIA_ERR_SRC_NOT_SUPPORTED&&N(t,o)},500);return}if(t.src&&(n!==f.MEDIA_ERR_DECODE||n!==void 0))try{let{status:a}=await fetch(t.src);o.data={response:{code:a}}}catch{}N(t,o)}function N(e,t){var r;t.fatal&&(((r=P.get(e))!=null?r:{}).error=t,e.dispatchEvent(new CustomEvent(\"error\",{detail:t})))}function ce(e){var n,o;if(!(e instanceof CustomEvent)||!(e.detail instanceof f))return;let t=e.target,r=e.detail;!r||!r.fatal||(((n=P.get(t))!=null?n:{}).error=r,(o=t.mux)==null||o.emit(\"error\",{player_error_code:r.code,player_error_message:r.message,player_error_context:r.context}))}var qt=(e,t)=>{var c,d,u;console.error(\"getErrorFromHlsErrorData()\",e);let r={[g.ErrorTypes.NETWORK_ERROR]:f.MEDIA_ERR_NETWORK,[g.ErrorTypes.MEDIA_ERROR]:f.MEDIA_ERR_DECODE,[g.ErrorTypes.KEY_SYSTEM_ERROR]:f.MEDIA_ERR_ENCRYPTED},n=s=>[g.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,g.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED].includes(s.details)?f.MEDIA_ERR_NETWORK:r[s.type],o=s=>{if(s.type===g.ErrorTypes.KEY_SYSTEM_ERROR)return C.DRM;if(s.type===g.ErrorTypes.NETWORK_ERROR)return C.VIDEO},a,i=n(e);if(i===f.MEDIA_ERR_NETWORK&&e.response){let s=(c=o(e))!=null?c:C.VIDEO;a=(d=H(e.response,s,t,e.fatal))!=null?d:new f(\"\",i,e.fatal)}else if(i===f.MEDIA_ERR_ENCRYPTED)if(e.details===g.ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE){let s=x(\"Attempting to play DRM-protected content without providing a DRM token.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_MISSING_TOKEN}else if(e.details===g.ErrorDetails.KEY_SYSTEM_NO_ACCESS){let s=x(\"Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM}else if(e.details===g.ErrorDetails.KEY_SYSTEM_NO_SESSION){let s=x(\"Failed to generate a DRM license request. This may be an issue with the player or your protected content.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,!0),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_GENERATE_REQUEST_FAILED}else if(e.details===g.ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED){let s=x(\"Failed to update DRM license. This may be an issue with the player or your protected content.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_UPDATE_LICENSE_FAILED}else if(e.details===g.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED){let s=x(\"Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_UPDATE_SERVER_CERT_FAILED}else if(e.details===g.ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR){let s=x(\"The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_CDM_ERROR}else if(e.details===g.ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED){let s=x(\"DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.\");a=new f(s,f.MEDIA_ERR_ENCRYPTED,!1),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_OUTPUT_RESTRICTED}else a=new f(e.error.message,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=D.ENCRYPTED_ERROR;else a=new f(\"\",i,e.fatal);return a.context||(a.context=`${e.url?`url: ${e.url}\n`:\"\"}${e.response&&(e.response.code||e.response.text)?`response: ${e.response.code}, ${e.response.text}\n`:\"\"}${e.reason?`failure reason: ${e.reason}\n`:\"\"}${e.level?`level: ${e.level}\n`:\"\"}${e.parent?`parent stream controller: ${e.parent}\n`:\"\"}${e.buffer?`buffer length: ${e.buffer}\n`:\"\"}${e.error?`error: ${e.error}\n`:\"\"}${e.event?`event: ${e.event}\n`:\"\"}${e.err?`error message: ${(u=e.err)==null?void 0:u.message}\n`:\"\"}`),a.data=e,a};export{K as AutoplayTypes,Zt as CmcdTypeValues,S as CmcdTypes,I as ExtensionMimeTypeMap,g as Hls,rr as MaxResolution,f as MediaError,W as MimeTypeShorthandMap,nr as MinResolution,C as MuxErrorCategory,D as MuxErrorCode,se as MuxJWTAud,X as PlaybackTypes,or as RenditionOrder,_ as StreamTypes,Ne as addChapters,_e as addCuePoints,ne as addTextTrack,tr as allMediaTypes,V as errorCategoryToTokenNameOrPrefix,de as fetchAndDispatchMuxMetadata,Gr as generatePlayerInitTime,St as generateUUID,Ie as getActiveChapter,ke as getActiveCuePoint,$t as getAppCertificate,ft as getChapters,pt as getCuePoints,yt as getCurrentPdt,Ft as getDRMConfig,Vt as getEnded,Ot as getError,Bt as getLicenseKey,Qr as getLiveEdgeStart,Mt as getMediaPlaylistFromMultivariantPlaylist,Xr as getMetadata,xt as getMultivariantPlaylistSessionData,Xe as getSeekable,Tt as getStartDate,Pt as getStreamInfoFromHlsjsLevelDetails,Dt as getStreamInfoFromPlaylist,Ct as getStreamInfoFromSrcAndType,Ue as getStreamType,Yt as getStreamTypeConfig,zr as getTargetLiveWindow,w as getTextTrack,x as i18n,Zr as initialize,O as isKeyOf,tt as isMuxVideoSrc,Ht as isPseudoEnded,Qe as isStuckOnLastFragment,Gt as loadMedia,ue as mux,P as muxMediaState,ee as parseJwt,bt as parseTagAttributes,lt as removeTextTrack,Ae as setupChapters,he as setupCuePoints,Wt as setupHls,Jt as setupMux,jt as setupNativeFairplayDRM,er as shorthandKeys,Kt as teardown,et as toAppCertURL,gt as toDRMTypeFromKeySystem,G as toLicenseKeyURL,qr as toMuxVideoURL,qe as toPlaybackIdFromSrc,F as toPlaybackIdParts,_t as updateStreamInfoFromHlsjsLevelDetails,vt as updateStreamInfoFromSrc};\n//# sourceMappingURL=index.mjs.map\n","/* global chrome */\nimport { RemotePlayback } from './castable-remote-playback.js';\nimport {\n privateProps,\n requiresCastFramework,\n loadCastFramework,\n currentSession,\n getDefaultCastOptions,\n isHls,\n getPlaylistSegmentFormat\n} from './castable-utils.js';\n\n/**\n * CastableMediaMixin\n *\n * This mixin function provides a way to compose multiple classes.\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n *\n * @param {HTMLMediaElement} superclass - HTMLMediaElement or an extended class of it.\n * @return {CastableMedia}\n */\nexport const CastableMediaMixin = (superclass) =>\n class CastableMedia extends superclass {\n\n static observedAttributes = [\n ...(superclass.observedAttributes ?? []),\n 'cast-src',\n 'cast-content-type',\n 'cast-stream-type',\n 'cast-receiver',\n ];\n\n #localState = { paused: false };\n #castOptions = getDefaultCastOptions();\n #castCustomData;\n #remote;\n\n get remote() {\n if (this.#remote) return this.#remote;\n\n if (requiresCastFramework()) {\n // No need to load the Cast framework if it's disabled.\n if (!this.disableRemotePlayback) {\n loadCastFramework();\n }\n\n privateProps.set(this, {\n loadOnPrompt: () => this.#loadOnPrompt()\n });\n\n return (this.#remote = new RemotePlayback(this));\n }\n\n return super.remote;\n }\n\n get #castPlayer() {\n return privateProps.get(this.remote)?.getCastPlayer?.();\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n\n if (attrName === 'cast-receiver' && newValue) {\n this.#castOptions.receiverApplicationId = newValue;\n return;\n }\n\n if (!this.#castPlayer) return;\n\n switch (attrName) {\n case 'cast-stream-type':\n case 'cast-src':\n this.load();\n break;\n }\n }\n\n async #loadOnPrompt() {\n // Pause locally when the session is created.\n this.#localState.paused = super.paused;\n super.pause();\n\n // Sync over the muted state but not volume, 100% is different on TV's :P\n this.muted = super.muted;\n\n try {\n await this.load();\n } catch (err) {\n console.error(err);\n }\n }\n\n async load() {\n if (!this.#castPlayer) return super.load();\n\n const mediaInfo = new chrome.cast.media.MediaInfo(this.castSrc, this.castContentType);\n mediaInfo.customData = this.castCustomData;\n\n // Manually add text tracks with a `src` attribute.\n // M3U8's load text tracks in the receiver, handle these in the media loaded event.\n const subtitles = [...this.querySelectorAll('track')].filter(\n ({ kind, src }) => src && (kind === 'subtitles' || kind === 'captions')\n );\n\n const activeTrackIds = [];\n let textTrackIdCount = 0;\n\n if (subtitles.length) {\n mediaInfo.tracks = subtitles.map((trackEl) => {\n const trackId = ++textTrackIdCount;\n // only activate 1 subtitle text track.\n if (activeTrackIds.length === 0 && trackEl.track.mode === 'showing') {\n activeTrackIds.push(trackId);\n }\n\n const track = new chrome.cast.media.Track(\n trackId,\n chrome.cast.media.TrackType.TEXT\n );\n track.trackContentId = trackEl.src;\n track.trackContentType = 'text/vtt';\n track.subtype =\n trackEl.kind === 'captions'\n ? chrome.cast.media.TextTrackType.CAPTIONS\n : chrome.cast.media.TextTrackType.SUBTITLES;\n track.name = trackEl.label;\n track.language = trackEl.srclang;\n return track;\n });\n }\n\n if (this.castStreamType === 'live') {\n mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;\n } else {\n mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;\n }\n\n mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n mediaInfo.metadata.title = this.title;\n mediaInfo.metadata.images = [{ url: this.poster }];\n\n if (isHls(this.castSrc)) {\n const segmentFormat = await getPlaylistSegmentFormat(this.castSrc);\n const isFragmentedMP4 = segmentFormat?.includes('m4s') || segmentFormat?.includes('mp4');\n if (isFragmentedMP4) {\n mediaInfo.hlsSegmentFormat = chrome.cast.media.HlsSegmentFormat.FMP4;\n mediaInfo.hlsVideoSegmentFormat = chrome.cast.media.HlsVideoSegmentFormat.FMP4;\n } else if (segmentFormat?.includes('ts')) {\n mediaInfo.hlsSegmentFormat = chrome.cast.media.HlsSegmentFormat.TS;\n mediaInfo.hlsVideoSegmentFormat = chrome.cast.media.HlsVideoSegmentFormat.TS;\n }\n }\n\n const request = new chrome.cast.media.LoadRequest(mediaInfo);\n request.currentTime = super.currentTime ?? 0;\n request.autoplay = !this.#localState.paused;\n request.activeTrackIds = activeTrackIds;\n\n await currentSession()?.loadMedia(request);\n\n this.dispatchEvent(new Event('volumechange'));\n }\n\n play() {\n if (this.#castPlayer) {\n if (this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n return super.play();\n }\n\n pause() {\n if (this.#castPlayer) {\n if (!this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n super.pause();\n }\n\n /**\n * @see https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastOptions\n * @readonly\n *\n * @typedef {Object} CastOptions\n * @property {string} [receiverApplicationId='CC1AD845'] - The app id of the cast receiver.\n * @property {string} [autoJoinPolicy='origin_scoped'] - The auto join policy.\n * @property {string} [language='en-US'] - The language to use for the cast receiver.\n * @property {boolean} [androidReceiverCompatible=false] - Whether to use the Cast Connect.\n * @property {boolean} [resumeSavedSession=true] - Whether to resume the last session.\n *\n * @return {CastOptions}\n */\n get castOptions() {\n return this.#castOptions;\n }\n\n get castReceiver() {\n return this.getAttribute('cast-receiver') ?? undefined;\n }\n\n set castReceiver(val) {\n if (this.castReceiver == val) return;\n this.setAttribute('cast-receiver', `${val}`);\n }\n\n // Allow the cast source url to be different than <video src>, could be a blob.\n get castSrc() {\n // Try the first <source src> for usage with even more native markup.\n return (\n this.getAttribute('cast-src') ??\n this.querySelector('source')?.src ??\n this.currentSrc\n );\n }\n\n set castSrc(val) {\n if (this.castSrc == val) return;\n this.setAttribute('cast-src', `${val}`);\n }\n\n get castContentType() {\n return this.getAttribute('cast-content-type') ?? undefined;\n }\n\n set castContentType(val) {\n this.setAttribute('cast-content-type', `${val}`);\n }\n\n get castStreamType() {\n // NOTE: Per https://github.com/video-dev/media-ui-extensions/issues/3 `streamType` may yield `\"unknown\"`\n return this.getAttribute('cast-stream-type') ?? this.streamType ?? undefined;\n }\n\n set castStreamType(val) {\n this.setAttribute('cast-stream-type', `${val}`);\n }\n\n get castCustomData() {\n return this.#castCustomData;\n }\n\n set castCustomData(val) {\n const valType = typeof val;\n if (!['object', 'undefined'].includes(valType)) {\n console.error(`castCustomData must be nullish or an object but value was of type ${valType}`);\n return;\n }\n\n this.#castCustomData = val;\n }\n\n get readyState() {\n if (this.#castPlayer) {\n switch (this.#castPlayer.playerState) {\n case chrome.cast.media.PlayerState.IDLE:\n return 0;\n case chrome.cast.media.PlayerState.BUFFERING:\n return 2;\n default:\n return 3;\n }\n }\n return super.readyState;\n }\n\n get paused() {\n if (this.#castPlayer) return this.#castPlayer.isPaused;\n return super.paused;\n }\n\n get muted() {\n if (this.#castPlayer) return this.#castPlayer?.isMuted;\n return super.muted;\n }\n\n set muted(val) {\n if (this.#castPlayer) {\n if (\n (val && !this.#castPlayer.isMuted) ||\n (!val && this.#castPlayer.isMuted)\n ) {\n this.#castPlayer.controller?.muteOrUnmute();\n }\n return;\n }\n super.muted = val;\n }\n\n get volume() {\n if (this.#castPlayer) return this.#castPlayer?.volumeLevel ?? 1;\n return super.volume;\n }\n\n set volume(val) {\n if (this.#castPlayer) {\n this.#castPlayer.volumeLevel = +val;\n this.#castPlayer.controller?.setVolumeLevel();\n return;\n }\n super.volume = val;\n }\n\n get duration() {\n // castPlayer duration returns `0` when no media is loaded.\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.duration ?? NaN;\n }\n return super.duration;\n }\n\n get currentTime() {\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.currentTime ?? 0;\n }\n return super.currentTime;\n }\n\n set currentTime(val) {\n if (this.#castPlayer) {\n this.#castPlayer.currentTime = val;\n this.#castPlayer.controller?.seek();\n return;\n }\n super.currentTime = val;\n }\n };\n\nexport const CastableVideoMixin = CastableMediaMixin;\n","/* global chrome, cast */\nimport {\n privateProps,\n IterableWeakSet,\n InvalidStateError,\n NotSupportedError,\n onCastApiAvailable,\n castContext,\n currentSession,\n currentMedia,\n editTracksInfo,\n getMediaStatus,\n setCastOptions\n} from './castable-utils.js';\n\nconst remoteInstances = new IterableWeakSet();\nconst castElementRef = new WeakSet();\n\nlet cf;\n\nonCastApiAvailable(() => {\n if (!globalThis.chrome?.cast?.isAvailable) {\n // Useful to see in verbose logs if this shows undefined or false.\n console.debug('chrome.cast.isAvailable', globalThis.chrome?.cast?.isAvailable);\n return;\n }\n\n if (!cf) {\n cf = cast.framework;\n\n castContext().addEventListener(cf.CastContextEventType.CAST_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onCastStateChanged?.(e));\n });\n\n castContext().addEventListener(cf.CastContextEventType.SESSION_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onSessionStateChanged?.(e));\n });\n\n remoteInstances.forEach((r) => privateProps.get(r).init?.());\n }\n});\n\n\nlet remotePlaybackCallbackIdCount = 0;\n\n/**\n * Remote Playback shim for the Google cast SDK.\n * https://w3c.github.io/remote-playback/\n */\nexport class RemotePlayback extends EventTarget {\n #media;\n #isInit;\n #remotePlayer;\n #remoteListeners;\n #state = 'disconnected';\n #available = false;\n #callbacks = new Set();\n #callbackIds = new WeakMap();\n\n constructor(media) {\n super();\n\n this.#media = media;\n\n remoteInstances.add(this);\n privateProps.set(this, {\n init: () => this.#init(),\n onCastStateChanged: () => this.#onCastStateChanged(),\n onSessionStateChanged: () => this.#onSessionStateChanged(),\n getCastPlayer: () => this.#castPlayer,\n });\n\n this.#init();\n }\n\n get #castPlayer() {\n if (castElementRef.has(this.#media)) return this.#remotePlayer;\n return undefined;\n }\n\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n * @return {'disconnected'|'connecting'|'connected'}\n */\n get state() {\n return this.#state;\n }\n\n async watchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n this.#callbackIds.set(callback, ++remotePlaybackCallbackIdCount);\n this.#callbacks.add(callback);\n\n // https://w3c.github.io/remote-playback/#getting-the-remote-playback-devices-availability-information\n queueMicrotask(() => callback(this.#hasDevicesAvailable()));\n\n return remotePlaybackCallbackIdCount;\n }\n\n async cancelWatchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (callback) {\n this.#callbacks.delete(callback);\n } else {\n this.#callbacks.clear();\n }\n }\n\n async prompt() {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (!globalThis.chrome?.cast?.isAvailable) {\n throw new NotSupportedError('The RemotePlayback API is disabled on this platform.');\n }\n\n const willDisconnect = castElementRef.has(this.#media);\n castElementRef.add(this.#media);\n\n setCastOptions(this.#media.castOptions);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n try {\n // Open browser cast menu.\n await castContext().requestSession();\n } catch (err) {\n // If there will be no disconnect, reset some state here.\n if (!willDisconnect) {\n castElementRef.delete(this.#media);\n }\n\n // Don't throw an error if disconnecting or cancelling.\n if (err === 'cancel') {\n return;\n }\n\n throw new Error(err);\n }\n\n privateProps.get(this.#media)?.loadOnPrompt?.();\n }\n\n #disconnect() {\n if (!castElementRef.has(this.#media)) return;\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.removeEventListener(event, listener);\n });\n\n castElementRef.delete(this.#media);\n\n // isMuted is not in savedPlayerState. should we sync this back to local?\n this.#media.muted = this.#remotePlayer.isMuted;\n this.#media.currentTime = this.#remotePlayer.savedPlayerState.currentTime;\n if (this.#remotePlayer.savedPlayerState.isPaused === false) {\n this.#media.play();\n }\n }\n\n #hasDevicesAvailable() {\n // Cast state: NO_DEVICES_AVAILABLE, NOT_CONNECTED, CONNECTING, CONNECTED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.CastState\n const castState = castContext()?.getCastState();\n return castState && castState !== 'NO_DEVICES_AVAILABLE';\n }\n\n #onCastStateChanged() {\n // Cast state: NO_DEVICES_AVAILABLE, NOT_CONNECTED, CONNECTING, CONNECTED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.CastState\n const castState = castContext().getCastState();\n\n if (castElementRef.has(this.#media)) {\n if (castState === 'CONNECTING') {\n this.#state = 'connecting';\n this.dispatchEvent(new Event('connecting'));\n }\n }\n\n if (!this.#available && castState?.includes('CONNECT')) {\n this.#available = true;\n for (let callback of this.#callbacks) callback(true);\n }\n else if (this.#available && (!castState || castState === 'NO_DEVICES_AVAILABLE')) {\n this.#available = false;\n for (let callback of this.#callbacks) callback(false);\n }\n }\n\n async #onSessionStateChanged() {\n // Session states: NO_SESSION, SESSION_STARTING, SESSION_STARTED, SESSION_START_FAILED,\n // SESSION_ENDING, SESSION_ENDED, SESSION_RESUMED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.SessionState\n\n const { SESSION_RESUMED } = cf.SessionState;\n if (castContext().getSessionState() === SESSION_RESUMED) {\n /**\n * Figure out if this was the video that started the resumed session.\n * @TODO make this more specific than just checking against the video src!! (WL)\n *\n * If this video element can get the same unique id on each browser refresh\n * it would be possible to pass this unique id w/ `LoadRequest.customData`\n * and verify against currentMedia().customData below.\n */\n if (this.#media.castSrc === currentMedia()?.media.contentId) {\n castElementRef.add(this.#media);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n /**\n * There is cast framework resume session bug when you refresh the page a few\n * times the this.#remotePlayer.currentTime will not be in sync with the receiver :(\n * The below status request syncs it back up.\n */\n try {\n await getMediaStatus(new chrome.cast.media.GetStatusRequest());\n } catch (error) {\n console.error(error);\n }\n\n // Dispatch the play, playing events manually to sync remote playing state.\n this.#remoteListeners[cf.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n this.#remoteListeners[cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n }\n }\n }\n\n #init() {\n if (!cf || this.#isInit) return;\n this.#isInit = true;\n\n setCastOptions(this.#media.castOptions);\n\n /**\n * @TODO add listeners for addtrack, removetrack (WL)\n * This only has an impact on <track> with a `src` because these have to be\n * loaded manually in the load() method. This will require a new load() call\n * for each added/removed track w/ src.\n */\n this.#media.textTracks.addEventListener('change', () => this.#updateRemoteTextTrack());\n\n this.#onCastStateChanged();\n\n this.#remotePlayer = new cf.RemotePlayer();\n new cf.RemotePlayerController(this.#remotePlayer);\n\n this.#remoteListeners = {\n [cf.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value }) => {\n if (value === true) {\n this.#state = 'connected';\n this.dispatchEvent(new Event('connect'));\n } else {\n this.#disconnect();\n this.#state = 'disconnected';\n this.dispatchEvent(new Event('disconnect'));\n }\n },\n [cf.RemotePlayerEventType.DURATION_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('durationchange'));\n },\n [cf.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n this.#media.dispatchEvent(new Event('timeupdate'));\n },\n [cf.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('resize'));\n },\n [cf.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event(this.paused ? 'pause' : 'play'));\n },\n [cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n // Player states: IDLE, PLAYING, PAUSED, BUFFERING\n // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media#.PlayerState\n\n // pause event is handled above.\n if (this.#castPlayer?.playerState === chrome.cast.media.PlayerState.PAUSED) {\n return;\n }\n\n this.#media.dispatchEvent(\n new Event(\n {\n [chrome.cast.media.PlayerState.PLAYING]: 'playing',\n [chrome.cast.media.PlayerState.BUFFERING]: 'waiting',\n [chrome.cast.media.PlayerState.IDLE]: 'emptied',\n }[this.#castPlayer?.playerState]\n )\n );\n },\n [cf.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n\n // mediaInfo is not immediately available due to a bug? wait one tick\n await Promise.resolve();\n this.#onRemoteMediaLoaded();\n },\n };\n }\n\n #onRemoteMediaLoaded() {\n this.#updateRemoteTextTrack();\n }\n\n async #updateRemoteTextTrack() {\n if (!this.#castPlayer) return;\n\n // Get the tracks w/ trackId's that have been loaded; manually or via a playlist like a M3U8 or MPD.\n const remoteTracks = this.#remotePlayer.mediaInfo?.tracks ?? [];\n const remoteSubtitles = remoteTracks.filter(\n ({ type }) => type === chrome.cast.media.TrackType.TEXT\n );\n\n const localSubtitles = [...this.#media.textTracks].filter(\n ({ kind }) => kind === 'subtitles' || kind === 'captions'\n );\n\n // Create a new array from the local subs w/ the trackId's from the remote subs.\n const subtitles = remoteSubtitles\n .map(({ language, name, trackId }) => {\n // Find the corresponding local text track and assign the trackId.\n const { mode } =\n localSubtitles.find(\n (local) => local.language === language && local.label === name\n ) ?? {};\n if (mode) return { mode, trackId };\n return false;\n })\n .filter(Boolean);\n\n const hiddenSubtitles = subtitles.filter(\n ({ mode }) => mode !== 'showing'\n );\n const hiddenTrackIds = hiddenSubtitles.map(({ trackId }) => trackId);\n const showingSubtitle = subtitles.find(({ mode }) => mode === 'showing');\n\n // Note this could also include audio or video tracks, diff against local state.\n const activeTrackIds =\n currentSession()?.getSessionObj().media[0]\n ?.activeTrackIds ?? [];\n let requestTrackIds = activeTrackIds;\n\n if (activeTrackIds.length) {\n // Filter out all local hidden subtitle trackId's.\n requestTrackIds = requestTrackIds.filter(\n (id) => !hiddenTrackIds.includes(id)\n );\n }\n\n if (showingSubtitle?.trackId) {\n requestTrackIds = [...requestTrackIds, showingSubtitle.trackId];\n }\n\n // Remove duplicate ids.\n requestTrackIds = [...new Set(requestTrackIds)];\n\n const arrayEquals = (a, b) =>\n a.length === b.length && a.every((a) => b.includes(a));\n if (!arrayEquals(activeTrackIds, requestTrackIds)) {\n try {\n const request = new chrome.cast.media.EditTracksInfoRequest(\n requestTrackIds\n );\n await editTracksInfo(request);\n } catch (error) {\n console.error(error);\n }\n }\n }\n}\n","/* global WeakRef */\n\nexport const privateProps = new WeakMap();\n\nexport class InvalidStateError extends Error {}\nexport class NotSupportedError extends Error {}\nexport class NotFoundError extends Error {}\n\nconst HLS_RESPONSE_HEADERS = ['application/x-mpegURL','application/vnd.apple.mpegurl','audio/mpegurl']\n\n// Fallback to a plain Set if WeakRef is not available.\nexport const IterableWeakSet = globalThis.WeakRef ?\n class extends Set {\n add(el) {\n super.add(new WeakRef(el));\n }\n forEach(fn) {\n super.forEach((ref) => {\n const value = ref.deref();\n if (value) fn(value);\n });\n }\n } : Set;\n\nexport function onCastApiAvailable(callback) {\n if (!globalThis.chrome?.cast?.isAvailable) {\n globalThis.__onGCastApiAvailable = () => {\n // The globalThis.__onGCastApiAvailable callback alone is not reliable for\n // the added cast.framework. It's loaded in a separate JS file.\n // https://www.gstatic.com/eureka/clank/101/cast_sender.js\n // https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n };\n } else if (!globalThis.cast?.framework) {\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n } else {\n callback();\n }\n}\n\nexport function requiresCastFramework() {\n // todo: exclude for Android>=56 which supports the Remote Playback API natively.\n return globalThis.chrome;\n}\n\nexport function loadCastFramework() {\n const sdkUrl = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1';\n if (globalThis.chrome?.cast || document.querySelector(`script[src=\"${sdkUrl}\"]`)) return;\n\n const script = document.createElement('script');\n script.src = sdkUrl;\n document.head.append(script);\n}\n\nexport function castContext() {\n return globalThis.cast?.framework?.CastContext.getInstance();\n}\n\nexport function currentSession() {\n return castContext()?.getCurrentSession();\n}\n\nexport function currentMedia() {\n return currentSession()?.getSessionObj().media[0];\n}\n\nexport function editTracksInfo(request) {\n return new Promise((resolve, reject) => {\n currentMedia().editTracksInfo(request, resolve, reject);\n });\n}\n\nexport function getMediaStatus(request) {\n return new Promise((resolve, reject) => {\n currentMedia().getStatus(request, resolve, reject);\n });\n}\n\nexport function setCastOptions(options) {\n return castContext().setOptions({\n ...getDefaultCastOptions(),\n ...options,\n });\n}\n\nexport function getDefaultCastOptions() {\n return {\n // Set the receiver application ID to your own (created in the\n // Google Cast Developer Console), or optionally\n // use the chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID\n receiverApplicationId: 'CC1AD845',\n\n // Auto join policy can be one of the following three:\n // ORIGIN_SCOPED - Auto connect from same appId and page origin\n // TAB_AND_ORIGIN_SCOPED - Auto connect from same appId, page origin, and tab\n // PAGE_SCOPED - No auto connect\n autoJoinPolicy: 'origin_scoped',\n\n // The following flag enables Cast Connect(requires Chrome 87 or higher)\n // https://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html\n androidReceiverCompatible: false,\n\n language: 'en-US',\n resumeSavedSession: true,\n };\n}\n\n//Get the segment format given the end of the URL (.m4s, .ts, etc)\nfunction getFormat(segment) {\n if (!segment) return undefined;\n\n const regex = /\\.([a-zA-Z0-9]+)(?:\\?.*)?$/;\n const match = segment.match(regex);\n return match ? match[1] : null;\n}\n\nfunction parsePlaylistUrls(playlistContent) {\n const lines = playlistContent.split('\\n');\n const urls = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // Locate available video playlists and get the next line which is the URI (https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-17#section-4.4.6.2)\n if (line.startsWith('#EXT-X-STREAM-INF')) {\n const nextLine = lines[i + 1] ? lines[i + 1].trim() : '';\n if (nextLine && !nextLine.startsWith('#')) {\n urls.push(nextLine);\n }\n }\n }\n\n return urls;\n}\n\nfunction parseSegment(playlistContent){\n const lines = playlistContent.split('\\n');\n\n const url = lines.find(line => !line.trim().startsWith('#') && line.trim() !== '');\n\n return url;\n}\n\nexport async function isHls(url) {\n try {\n const response = await fetch(url, {method: 'HEAD'});\n const contentType = response.headers.get('Content-Type');\n\n return HLS_RESPONSE_HEADERS.some((header) => contentType === header);\n } catch (err) {\n console.error('Error while trying to get the Content-Type of the manifest', err);\n return false;\n }\n}\n\nexport async function getPlaylistSegmentFormat(url) {\n try {\n const mainManifestContent = await (await fetch(url)).text();\n let availableChunksContent = mainManifestContent;\n\n const playlists = parsePlaylistUrls(mainManifestContent);\n if (playlists.length > 0) { \n const chosenPlaylistUrl = new URL(playlists[0], url).toString();\n availableChunksContent = await (await fetch(chosenPlaylistUrl)).text();\n }\n\n const segment = parseSegment(availableChunksContent);\n const format = getFormat(segment);\n return format\n } catch (err) {\n console.error('Error while trying to parse the manifest playlist', err);\n return undefined;\n }\n}","const MediaUIEvents = {\n MEDIA_PLAY_REQUEST: \"mediaplayrequest\",\n MEDIA_PAUSE_REQUEST: \"mediapauserequest\",\n MEDIA_MUTE_REQUEST: \"mediamuterequest\",\n MEDIA_UNMUTE_REQUEST: \"mediaunmuterequest\",\n MEDIA_VOLUME_REQUEST: \"mediavolumerequest\",\n MEDIA_SEEK_REQUEST: \"mediaseekrequest\",\n MEDIA_AIRPLAY_REQUEST: \"mediaairplayrequest\",\n MEDIA_ENTER_FULLSCREEN_REQUEST: \"mediaenterfullscreenrequest\",\n MEDIA_EXIT_FULLSCREEN_REQUEST: \"mediaexitfullscreenrequest\",\n MEDIA_PREVIEW_REQUEST: \"mediapreviewrequest\",\n MEDIA_ENTER_PIP_REQUEST: \"mediaenterpiprequest\",\n MEDIA_EXIT_PIP_REQUEST: \"mediaexitpiprequest\",\n MEDIA_ENTER_CAST_REQUEST: \"mediaentercastrequest\",\n MEDIA_EXIT_CAST_REQUEST: \"mediaexitcastrequest\",\n MEDIA_SHOW_TEXT_TRACKS_REQUEST: \"mediashowtexttracksrequest\",\n MEDIA_HIDE_TEXT_TRACKS_REQUEST: \"mediahidetexttracksrequest\",\n MEDIA_SHOW_SUBTITLES_REQUEST: \"mediashowsubtitlesrequest\",\n MEDIA_DISABLE_SUBTITLES_REQUEST: \"mediadisablesubtitlesrequest\",\n MEDIA_TOGGLE_SUBTITLES_REQUEST: \"mediatogglesubtitlesrequest\",\n MEDIA_PLAYBACK_RATE_REQUEST: \"mediaplaybackraterequest\",\n MEDIA_RENDITION_REQUEST: \"mediarenditionrequest\",\n MEDIA_AUDIO_TRACK_REQUEST: \"mediaaudiotrackrequest\",\n MEDIA_SEEK_TO_LIVE_REQUEST: \"mediaseektoliverequest\",\n REGISTER_MEDIA_STATE_RECEIVER: \"registermediastatereceiver\",\n UNREGISTER_MEDIA_STATE_RECEIVER: \"unregistermediastatereceiver\"\n};\nconst MediaStateReceiverAttributes = {\n MEDIA_CHROME_ATTRIBUTES: \"mediachromeattributes\",\n MEDIA_CONTROLLER: \"mediacontroller\"\n};\nconst MediaUIProps = {\n MEDIA_AIRPLAY_UNAVAILABLE: \"mediaAirplayUnavailable\",\n MEDIA_AUDIO_TRACK_ENABLED: \"mediaAudioTrackEnabled\",\n MEDIA_AUDIO_TRACK_LIST: \"mediaAudioTrackList\",\n MEDIA_AUDIO_TRACK_UNAVAILABLE: \"mediaAudioTrackUnavailable\",\n MEDIA_BUFFERED: \"mediaBuffered\",\n MEDIA_CAST_UNAVAILABLE: \"mediaCastUnavailable\",\n MEDIA_CHAPTERS_CUES: \"mediaChaptersCues\",\n MEDIA_CURRENT_TIME: \"mediaCurrentTime\",\n MEDIA_DURATION: \"mediaDuration\",\n MEDIA_ENDED: \"mediaEnded\",\n MEDIA_ERROR: \"mediaError\",\n MEDIA_ERROR_CODE: \"mediaErrorCode\",\n MEDIA_ERROR_MESSAGE: \"mediaErrorMessage\",\n MEDIA_FULLSCREEN_UNAVAILABLE: \"mediaFullscreenUnavailable\",\n MEDIA_HAS_PLAYED: \"mediaHasPlayed\",\n MEDIA_HEIGHT: \"mediaHeight\",\n MEDIA_IS_AIRPLAYING: \"mediaIsAirplaying\",\n MEDIA_IS_CASTING: \"mediaIsCasting\",\n MEDIA_IS_FULLSCREEN: \"mediaIsFullscreen\",\n MEDIA_IS_PIP: \"mediaIsPip\",\n MEDIA_LOADING: \"mediaLoading\",\n MEDIA_MUTED: \"mediaMuted\",\n MEDIA_PAUSED: \"mediaPaused\",\n MEDIA_PIP_UNAVAILABLE: \"mediaPipUnavailable\",\n MEDIA_PLAYBACK_RATE: \"mediaPlaybackRate\",\n MEDIA_PREVIEW_CHAPTER: \"mediaPreviewChapter\",\n MEDIA_PREVIEW_COORDS: \"mediaPreviewCoords\",\n MEDIA_PREVIEW_IMAGE: \"mediaPreviewImage\",\n MEDIA_PREVIEW_TIME: \"mediaPreviewTime\",\n MEDIA_RENDITION_LIST: \"mediaRenditionList\",\n MEDIA_RENDITION_SELECTED: \"mediaRenditionSelected\",\n MEDIA_RENDITION_UNAVAILABLE: \"mediaRenditionUnavailable\",\n MEDIA_SEEKABLE: \"mediaSeekable\",\n MEDIA_STREAM_TYPE: \"mediaStreamType\",\n MEDIA_SUBTITLES_LIST: \"mediaSubtitlesList\",\n MEDIA_SUBTITLES_SHOWING: \"mediaSubtitlesShowing\",\n MEDIA_TARGET_LIVE_WINDOW: \"mediaTargetLiveWindow\",\n MEDIA_TIME_IS_LIVE: \"mediaTimeIsLive\",\n MEDIA_VOLUME: \"mediaVolume\",\n MEDIA_VOLUME_LEVEL: \"mediaVolumeLevel\",\n MEDIA_VOLUME_UNAVAILABLE: \"mediaVolumeUnavailable\",\n MEDIA_LANG: \"mediaLang\",\n MEDIA_WIDTH: \"mediaWidth\"\n};\nconst MediaUIPropsEntries = Object.entries(\n MediaUIProps\n);\nconst MediaUIAttributes = MediaUIPropsEntries.reduce(\n (dictObj, [key, propName]) => {\n dictObj[key] = propName.toLowerCase();\n return dictObj;\n },\n {}\n);\nconst AdditionalStateChangeEvents = {\n USER_INACTIVE_CHANGE: \"userinactivechange\",\n BREAKPOINTS_CHANGE: \"breakpointchange\",\n BREAKPOINTS_COMPUTED: \"breakpointscomputed\"\n};\nconst MediaStateChangeEvents = MediaUIPropsEntries.reduce(\n (dictObj, [key, propName]) => {\n dictObj[key] = propName.toLowerCase();\n return dictObj;\n },\n { ...AdditionalStateChangeEvents }\n);\nconst StateChangeEventToAttributeMap = Object.entries(\n MediaStateChangeEvents\n).reduce(\n (mapObj, [key, eventType]) => {\n const attrName = MediaUIAttributes[key];\n if (attrName) {\n mapObj[eventType] = attrName;\n }\n return mapObj;\n },\n { userinactivechange: \"userinactive\" }\n);\nconst AttributeToStateChangeEventMap = Object.entries(\n MediaUIAttributes\n).reduce(\n (mapObj, [key, attrName]) => {\n const evtType = MediaStateChangeEvents[key];\n if (evtType) {\n mapObj[attrName] = evtType;\n }\n return mapObj;\n },\n { userinactive: \"userinactivechange\" }\n);\nconst TextTrackKinds = {\n SUBTITLES: \"subtitles\",\n CAPTIONS: \"captions\",\n DESCRIPTIONS: \"descriptions\",\n CHAPTERS: \"chapters\",\n METADATA: \"metadata\"\n};\nconst TextTrackModes = {\n DISABLED: \"disabled\",\n HIDDEN: \"hidden\",\n SHOWING: \"showing\"\n};\nconst ReadyStates = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4\n};\nconst PointerTypes = {\n MOUSE: \"mouse\",\n PEN: \"pen\",\n TOUCH: \"touch\"\n};\nconst AvailabilityStates = {\n UNAVAILABLE: \"unavailable\",\n UNSUPPORTED: \"unsupported\"\n};\nconst StreamTypes = {\n LIVE: \"live\",\n ON_DEMAND: \"on-demand\",\n UNKNOWN: \"unknown\"\n};\nconst VolumeLevels = {\n HIGH: \"high\",\n MEDIUM: \"medium\",\n LOW: \"low\",\n OFF: \"off\"\n};\nconst WebkitPresentationModes = {\n INLINE: \"inline\",\n FULLSCREEN: \"fullscreen\",\n PICTURE_IN_PICTURE: \"picture-in-picture\"\n};\nexport {\n AttributeToStateChangeEventMap,\n AvailabilityStates,\n MediaStateChangeEvents,\n MediaStateReceiverAttributes,\n MediaUIAttributes,\n MediaUIEvents,\n MediaUIProps,\n PointerTypes,\n ReadyStates,\n StateChangeEventToAttributeMap,\n StreamTypes,\n TextTrackKinds,\n TextTrackModes,\n VolumeLevels,\n WebkitPresentationModes\n};\n","","import * as constants from \"./constants.js\";\nimport * as timeUtils from \"./utils/time.js\";\nimport { t } from \"./utils/i18n.js\";\nimport MediaController from \"./media-controller.js\";\nimport MediaAirplayButton from \"./media-airplay-button.js\";\nimport MediaCaptionsButton from \"./media-captions-button.js\";\nimport MediaCastButton from \"./media-cast-button.js\";\nimport MediaChromeButton from \"./media-chrome-button.js\";\nimport MediaChromeDialog from \"./media-chrome-dialog.js\";\nimport MediaChromeRange from \"./media-chrome-range.js\";\nimport MediaControlBar from \"./media-control-bar.js\";\nimport MediaDurationDisplay from \"./media-duration-display.js\";\nimport MediaErrorDialog from \"./media-error-dialog.js\";\nimport MediaFullscreenButton from \"./media-fullscreen-button.js\";\nimport MediaGestureReceiver from \"./media-gesture-receiver.js\";\nimport MediaLiveButton from \"./media-live-button.js\";\nimport MediaLoadingIndicator from \"./media-loading-indicator.js\";\nimport MediaMuteButton from \"./media-mute-button.js\";\nimport MediaPipButton from \"./media-pip-button.js\";\nimport MediaPlaybackRateButton from \"./media-playback-rate-button.js\";\nimport MediaPlayButton from \"./media-play-button.js\";\nimport MediaPosterImage from \"./media-poster-image.js\";\nimport MediaPreviewChapterDisplay from \"./media-preview-chapter-display.js\";\nimport MediaPreviewThumbnail from \"./media-preview-thumbnail.js\";\nimport MediaPreviewTimeDisplay from \"./media-preview-time-display.js\";\nimport MediaSeekBackwardButton from \"./media-seek-backward-button.js\";\nimport MediaSeekForwardButton from \"./media-seek-forward-button.js\";\nimport MediaTimeDisplay from \"./media-time-display.js\";\nimport MediaTimeRange from \"./media-time-range.js\";\nimport MediaTooltip from \"./media-tooltip.js\";\nimport MediaVolumeRange from \"./media-volume-range.js\";\nimport MediaContainer from \"./media-container.js\";\nimport MediaTextDisplay from \"./media-text-display.js\";\nexport {\n MediaAirplayButton,\n MediaCaptionsButton,\n MediaCastButton,\n MediaChromeButton,\n MediaChromeDialog,\n MediaChromeRange,\n MediaContainer,\n MediaControlBar,\n MediaController,\n MediaDurationDisplay,\n MediaErrorDialog,\n MediaFullscreenButton,\n MediaGestureReceiver,\n MediaLiveButton,\n MediaLoadingIndicator,\n MediaMuteButton,\n MediaPipButton,\n MediaPlayButton,\n MediaPlaybackRateButton,\n MediaPosterImage,\n MediaPreviewChapterDisplay,\n MediaPreviewThumbnail,\n MediaPreviewTimeDisplay,\n MediaSeekBackwardButton,\n MediaSeekForwardButton,\n MediaTextDisplay,\n MediaTimeDisplay,\n MediaTimeRange,\n MediaTooltip,\n MediaVolumeRange,\n constants,\n t,\n timeUtils\n};\n","import { t } from \"../utils/i18n.js\";\nconst defaultErrorTitles = {\n 2: t(\"Network Error\"),\n 3: t(\"Decode Error\"),\n 4: t(\"Source Not Supported\"),\n 5: t(\"Encryption Error\")\n};\nconst defaultErrorMessages = {\n 2: t(\"A network error caused the media download to fail.\"),\n 3: t(\n \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\"\n ),\n 4: t(\n \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\"\n ),\n 5: t(\"The media is encrypted and there are no keys to decrypt it.\")\n};\nconst formatError = (error) => {\n var _a, _b;\n if (error.code === 1)\n return null;\n return {\n title: (_a = defaultErrorTitles[error.code]) != null ? _a : `Error ${error.code}`,\n message: (_b = defaultErrorMessages[error.code]) != null ? _b : error.message\n };\n};\nexport {\n formatError\n};\n","const En = {\n \"Start airplay\": \"Start airplay\",\n \"Stop airplay\": \"Stop airplay\",\n Audio: \"Audio\",\n Captions: \"Captions\",\n \"Enable captions\": \"Enable captions\",\n \"Disable captions\": \"Disable captions\",\n \"Start casting\": \"Start casting\",\n \"Stop casting\": \"Stop casting\",\n \"Enter fullscreen mode\": \"Enter fullscreen mode\",\n \"Exit fullscreen mode\": \"Exit fullscreen mode\",\n Mute: \"Mute\",\n Unmute: \"Unmute\",\n \"Enter picture in picture mode\": \"Enter picture in picture mode\",\n \"Exit picture in picture mode\": \"Exit picture in picture mode\",\n Play: \"Play\",\n Pause: \"Pause\",\n \"Playback rate\": \"Playback rate\",\n \"Playback rate {playbackRate}\": \"Playback rate {playbackRate}\",\n Quality: \"Quality\",\n \"Seek backward\": \"Seek backward\",\n \"Seek forward\": \"Seek forward\",\n Settings: \"Settings\",\n Auto: \"Auto\",\n \"audio player\": \"audio player\",\n \"video player\": \"video player\",\n volume: \"volume\",\n seek: \"seek\",\n \"closed captions\": \"closed captions\",\n \"current playback rate\": \"current playback rate\",\n \"playback time\": \"playback time\",\n \"media loading\": \"media loading\",\n settings: \"settings\",\n \"audio tracks\": \"audio tracks\",\n quality: \"quality\",\n play: \"play\",\n pause: \"pause\",\n mute: \"mute\",\n unmute: \"unmute\",\n \"chapter: {chapterName}\": \"chapter: {chapterName}\",\n live: \"live\",\n Off: \"Off\",\n \"start airplay\": \"start airplay\",\n \"stop airplay\": \"stop airplay\",\n \"start casting\": \"start casting\",\n \"stop casting\": \"stop casting\",\n \"enter fullscreen mode\": \"enter fullscreen mode\",\n \"exit fullscreen mode\": \"exit fullscreen mode\",\n \"enter picture in picture mode\": \"enter picture in picture mode\",\n \"exit picture in picture mode\": \"exit picture in picture mode\",\n \"seek to live\": \"seek to live\",\n \"playing live\": \"playing live\",\n \"seek back {seekOffset} seconds\": \"seek back {seekOffset} seconds\",\n \"seek forward {seekOffset} seconds\": \"seek forward {seekOffset} seconds\",\n \"Network Error\": \"Network Error\",\n \"Decode Error\": \"Decode Error\",\n \"Source Not Supported\": \"Source Not Supported\",\n \"Encryption Error\": \"Encryption Error\",\n \"A network error caused the media download to fail.\": \"A network error caused the media download to fail.\",\n \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\": \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\",\n \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\": \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\",\n \"The media is encrypted and there are no keys to decrypt it.\": \"The media is encrypted and there are no keys to decrypt it.\"\n};\nexport {\n En\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getStringAttr,\n setStringAttr,\n getBooleanAttr,\n setBooleanAttr\n} from \"./utils/element-utils.js\";\nconst airplayIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M22.13 3H3.87a.87.87 0 0 0-.87.87v13.26a.87.87 0 0 0 .87.87h3.4L9 16H5V5h16v11h-4l1.72 2h3.4a.87.87 0 0 0 .87-.87V3.87a.87.87 0 0 0-.86-.87Zm-8.75 11.44a.5.5 0 0 0-.76 0l-4.91 5.73a.5.5 0 0 0 .38.83h9.82a.501.501 0 0 0 .38-.83l-4.91-5.73Z\"/>\n</svg>\n`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]) slot[name=icon] slot:not([name=exit]) {\n display: none !important;\n }\n\n ${/* Double negative, but safer if display doesn't equal 'block' */\n \"\"}\n :host(:not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}])) slot[name=icon] slot:not([name=enter]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]) slot[name=tooltip-enter],\n :host(:not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}])) slot[name=tooltip-exit] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"enter\">${airplayIcon}</slot>\n <slot name=\"exit\">${airplayIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-enter\">${t(\"start airplay\")}</slot>\n <slot name=\"tooltip-exit\">${t(\"stop airplay\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const label = el.mediaIsAirplaying ? t(\"stop airplay\") : t(\"start airplay\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaAirplayButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_IS_AIRPLAYING,\n MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_IS_AIRPLAYING) {\n updateAriaLabel(this);\n }\n }\n /**\n * Are we currently airplaying\n */\n get mediaIsAirplaying() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING);\n }\n set mediaIsAirplaying(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING, value);\n }\n /**\n * Airplay unavailability state\n */\n get mediaAirplayUnavailable() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE);\n }\n set mediaAirplayUnavailable(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE, value);\n }\n handleClick() {\n const evt = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_AIRPLAY_REQUEST,\n {\n composed: true,\n bubbles: true\n }\n );\n this.dispatchEvent(evt);\n }\n}\nMediaAirplayButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaAirplayButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-airplay-button\")) {\n globalThis.customElements.define(\"media-airplay-button\", MediaAirplayButton);\n}\nvar media_airplay_button_default = MediaAirplayButton;\nexport {\n media_airplay_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"./constants.js\";\nimport {\n areSubsOn,\n parseTextTracksStr,\n stringifyTextTrackList\n} from \"./utils/captions.js\";\nimport { t } from \"./utils/i18n.js\";\nconst ccIconOn = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`;\nconst ccIconOff = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M17.73 14.09a1.4 1.4 0 0 1-1 .37 1.579 1.579 0 0 1-1.27-.58A3 3 0 0 1 15 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34A2.89 2.89 0 0 0 19 9.07a3 3 0 0 0-2.14-.78 3.14 3.14 0 0 0-2.42 1 3.91 3.91 0 0 0-.93 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.17 3.17 0 0 0 1.07-1.74l-1.4-.45c-.083.43-.3.822-.62 1.12Zm-7.22 0a1.43 1.43 0 0 1-1 .37 1.58 1.58 0 0 1-1.27-.58A3 3 0 0 1 7.76 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34a2.81 2.81 0 0 0-.74-1.32 2.94 2.94 0 0 0-2.13-.78 3.18 3.18 0 0 0-2.43 1 4 4 0 0 0-.92 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.23 3.23 0 0 0 1.07-1.74l-1.4-.45a2.06 2.06 0 0 1-.6 1.07Zm12.32-8.41a2.59 2.59 0 0 0-2.3-2.51C18.72 3.05 15.86 3 13 3c-2.86 0-5.72.05-7.53.17a2.59 2.59 0 0 0-2.3 2.51c-.23 4.207-.23 8.423 0 12.63a2.57 2.57 0 0 0 2.3 2.5c1.81.13 4.67.19 7.53.19 2.86 0 5.72-.06 7.53-.19a2.57 2.57 0 0 0 2.3-2.5c.23-4.207.23-8.423 0-12.63Zm-1.49 12.53a1.11 1.11 0 0 1-.91 1.11c-1.67.11-4.45.18-7.43.18-2.98 0-5.76-.07-7.43-.18a1.11 1.11 0 0 1-.91-1.11c-.21-4.14-.21-8.29 0-12.43a1.11 1.11 0 0 1 .91-1.11C7.24 4.56 10 4.49 13 4.49s5.76.07 7.43.18a1.11 1.11 0 0 1 .91 1.11c.21 4.14.21 8.29 0 12.43Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([aria-checked=\"true\"]) slot[name=off] {\n display: none !important;\n }\n\n ${/* Double negative, but safer if display doesn't equal 'block' */\n \"\"}\n :host(:not([aria-checked=\"true\"])) slot[name=on] {\n display: none !important;\n }\n\n :host([aria-checked=\"true\"]) slot[name=tooltip-enable],\n :host(:not([aria-checked=\"true\"])) slot[name=tooltip-disable] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"on\">${ccIconOn}</slot>\n <slot name=\"off\">${ccIconOff}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-enable\">${t(\"Enable captions\")}</slot>\n <slot name=\"tooltip-disable\">${t(\"Disable captions\")}</slot>\n `\n );\n}\nconst updateAriaChecked = (el) => {\n el.setAttribute(\"aria-checked\", areSubsOn(el).toString());\n};\nclass MediaCaptionsButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute(\"role\", \"switch\");\n this.setAttribute(\"aria-label\", t(\"closed captions\"));\n updateAriaChecked(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING) {\n updateAriaChecked(this);\n }\n }\n /**\n * An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesList() {\n return getSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n }\n set mediaSubtitlesList(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n }\n /**\n * An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesShowing() {\n return getSubtitlesListAttr(\n this,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n );\n }\n set mediaSubtitlesShowing(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n }\n handleClick() {\n this.dispatchEvent(\n new globalThis.CustomEvent(MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST, {\n composed: true,\n bubbles: true\n })\n );\n }\n}\nMediaCaptionsButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaCaptionsButton.getTooltipContentHTML = getTooltipContentHTML;\nconst getSubtitlesListAttr = (el, attrName) => {\n const attrVal = el.getAttribute(attrName);\n return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nconst setSubtitlesListAttr = (el, attrName, list) => {\n if (!(list == null ? void 0 : list.length)) {\n el.removeAttribute(attrName);\n return;\n }\n const newValStr = stringifyTextTrackList(list);\n const oldVal = el.getAttribute(attrName);\n if (oldVal === newValStr)\n return;\n el.setAttribute(attrName, newValStr);\n};\nif (!globalThis.customElements.get(\"media-captions-button\")) {\n globalThis.customElements.define(\n \"media-captions-button\",\n MediaCaptionsButton\n );\n}\nvar media_captions_button_default = MediaCaptionsButton;\nexport {\n MediaCaptionsButton,\n media_captions_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getBooleanAttr,\n setBooleanAttr,\n getStringAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nconst enterIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/></g></svg>`;\nconst exitIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/><path class=\"cast_caf_icon_boxfill\" d=\"M5,7 L5,8.63 C8,8.6 13.37,14 13.37,17 L19,17 L19,7 Z\"/></g></svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([${MediaUIAttributes.MEDIA_IS_CASTING}]) slot[name=icon] slot:not([name=exit]) {\n display: none !important;\n }\n\n ${/* Double negative, but safer if display doesn't equal 'block' */\n \"\"}\n :host(:not([${MediaUIAttributes.MEDIA_IS_CASTING}])) slot[name=icon] slot:not([name=enter]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_IS_CASTING}]) slot[name=tooltip-enter],\n :host(:not([${MediaUIAttributes.MEDIA_IS_CASTING}])) slot[name=tooltip-exit] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"enter\">${enterIcon}</slot>\n <slot name=\"exit\">${exitIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-enter\">${t(\"Start casting\")}</slot>\n <slot name=\"tooltip-exit\">${t(\"Stop casting\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const label = el.mediaIsCasting ? t(\"stop casting\") : t(\"start casting\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaCastButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_IS_CASTING,\n MediaUIAttributes.MEDIA_CAST_UNAVAILABLE\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_IS_CASTING) {\n updateAriaLabel(this);\n }\n }\n /**\n * @type {boolean} Are we currently casting\n */\n get mediaIsCasting() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING);\n }\n set mediaIsCasting(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING, value);\n }\n /**\n * @type {string | undefined} Cast unavailability state\n */\n get mediaCastUnavailable() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE);\n }\n set mediaCastUnavailable(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE, value);\n }\n handleClick() {\n const eventName = this.mediaIsCasting ? MediaUIEvents.MEDIA_EXIT_CAST_REQUEST : MediaUIEvents.MEDIA_ENTER_CAST_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n );\n }\n}\nMediaCastButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaCastButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-cast-button\")) {\n globalThis.customElements.define(\"media-cast-button\", MediaCastButton);\n}\nvar media_cast_button_default = MediaCastButton;\nexport {\n media_cast_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _mediaController, _clickListener, _positionTooltip, _keyupListener, _keydownListener, _setupTooltip, setupTooltip_fn;\nimport {\n MediaStateReceiverAttributes,\n MediaUIAttributes\n} from \"./constants.js\";\nimport MediaTooltip from \"./media-tooltip.js\";\nimport {\n getBooleanAttr,\n getOrInsertCSSRule,\n getStringAttr,\n namedNodeMapToObject,\n setBooleanAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nconst Attributes = {\n TOOLTIP_PLACEMENT: \"tooltipplacement\",\n DISABLED: \"disabled\",\n NO_TOOLTIP: \"notooltip\"\n};\nfunction getTemplateHTML(_attrs, _props = {}) {\n return (\n /*html*/\n `\n <style>\n :host {\n position: relative;\n font: var(--media-font,\n var(--media-font-weight, bold)\n var(--media-font-size, 14px) /\n var(--media-text-content-height, var(--media-control-height, 24px))\n var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n padding: var(--media-button-padding, var(--media-control-padding, 10px));\n justify-content: var(--media-button-justify-content, center);\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n box-sizing: border-box;\n transition: background .15s linear;\n pointer-events: auto;\n cursor: var(--media-cursor, pointer);\n -webkit-tap-highlight-color: transparent;\n }\n\n ${/*\n Only show outline when keyboard focusing.\n https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n */\n \"\"}\n :host(:focus-visible) {\n box-shadow: var(--media-focus-box-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n outline: 0;\n }\n ${/*\n * hide default focus ring, particularly when using mouse\n */\n \"\"}\n :host(:where(:focus)) {\n box-shadow: none;\n outline: 0;\n }\n\n :host(:hover) {\n background: var(--media-control-hover-background, rgba(50 50 70 / .7));\n }\n\n svg, img, ::slotted(svg), ::slotted(img) {\n width: var(--media-button-icon-width);\n height: var(--media-button-icon-height, var(--media-control-height, 24px));\n transform: var(--media-button-icon-transform);\n transition: var(--media-button-icon-transition);\n fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n vertical-align: middle;\n max-width: 100%;\n max-height: 100%;\n min-width: 100%;\n }\n\n media-tooltip {\n ${/** Make sure unpositioned tooltip doesn't cause page overflow (scroll). */\n \"\"}\n max-width: 0;\n overflow-x: clip;\n opacity: 0;\n transition: opacity .3s, max-width 0s 9s;\n }\n\n :host(:hover) media-tooltip,\n :host(:focus-visible) media-tooltip {\n max-width: 100vw;\n opacity: 1;\n transition: opacity .3s;\n }\n\n :host([notooltip]) slot[name=\"tooltip\"] {\n display: none;\n }\n </style>\n\n ${this.getSlotTemplateHTML(_attrs, _props)}\n\n <slot name=\"tooltip\">\n <media-tooltip part=\"tooltip\" aria-hidden=\"true\">\n <template shadowrootmode=\"${MediaTooltip.shadowRootOptions.mode}\">\n ${MediaTooltip.getTemplateHTML({})}\n </template>\n <slot name=\"tooltip-content\">\n ${this.getTooltipContentHTML(_attrs)}\n </slot>\n </media-tooltip>\n </slot>\n `\n );\n}\nfunction getSlotTemplateHTML(_attrs, _props) {\n return (\n /*html*/\n `\n <slot></slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return \"\";\n}\nclass MediaChromeButton extends globalThis.HTMLElement {\n constructor() {\n super();\n // Called when we know the tooltip is ready / defined\n __privateAdd(this, _setupTooltip);\n __privateAdd(this, _mediaController, void 0);\n this.preventClick = false;\n this.tooltipEl = null;\n __privateAdd(this, _clickListener, (e) => {\n if (!this.preventClick) {\n this.handleClick(e);\n }\n setTimeout(__privateGet(this, _positionTooltip), 0);\n });\n __privateAdd(this, _positionTooltip, () => {\n var _a, _b;\n (_b = (_a = this.tooltipEl) == null ? void 0 : _a.updateXOffset) == null ? void 0 : _b.call(_a);\n });\n // NOTE: There are definitely some \"false positive\" cases with multi-key pressing,\n // but this should be good enough for most use cases.\n __privateAdd(this, _keyupListener, (e) => {\n const { key } = e;\n if (!this.keysUsed.includes(key)) {\n this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n return;\n }\n if (!this.preventClick) {\n this.handleClick(e);\n }\n });\n __privateAdd(this, _keydownListener, (e) => {\n const { metaKey, altKey, key } = e;\n if (metaKey || altKey || !this.keysUsed.includes(key)) {\n this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n return;\n }\n this.addEventListener(\"keyup\", __privateGet(this, _keyupListener), { once: true });\n });\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n const html = this.constructor.getTemplateHTML(attrs);\n this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n }\n this.tooltipEl = this.shadowRoot.querySelector(\"media-tooltip\");\n }\n static get observedAttributes() {\n return [\n \"disabled\",\n Attributes.TOOLTIP_PLACEMENT,\n MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n MediaUIAttributes.MEDIA_LANG\n ];\n }\n enable() {\n this.addEventListener(\"click\", __privateGet(this, _clickListener));\n this.addEventListener(\"keydown\", __privateGet(this, _keydownListener));\n this.tabIndex = 0;\n }\n disable() {\n this.removeEventListener(\"click\", __privateGet(this, _clickListener));\n this.removeEventListener(\"keydown\", __privateGet(this, _keydownListener));\n this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n this.tabIndex = -1;\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n } else if (attrName === \"disabled\" && newValue !== oldValue) {\n if (newValue == null) {\n this.enable();\n } else {\n this.disable();\n }\n } else if (attrName === Attributes.TOOLTIP_PLACEMENT && this.tooltipEl && newValue !== oldValue) {\n this.tooltipEl.placement = newValue;\n } else if (attrName === MediaUIAttributes.MEDIA_LANG) {\n this.shadowRoot.querySelector('slot[name=\"tooltip-content\"]').innerHTML = this.constructor.getTooltipContentHTML();\n }\n __privateGet(this, _positionTooltip).call(this);\n }\n connectedCallback() {\n var _a, _b, _c;\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"display\",\n `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n );\n if (!this.hasAttribute(\"disabled\")) {\n this.enable();\n } else {\n this.disable();\n }\n this.setAttribute(\"role\", \"button\");\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(\n this,\n _mediaController,\n // @ts-ignore\n (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId)\n );\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n globalThis.customElements.whenDefined(\"media-tooltip\").then(() => __privateMethod(this, _setupTooltip, setupTooltip_fn).call(this));\n }\n disconnectedCallback() {\n var _a, _b;\n this.disable();\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n this.removeEventListener(\"mouseenter\", __privateGet(this, _positionTooltip));\n this.removeEventListener(\"focus\", __privateGet(this, _positionTooltip));\n this.removeEventListener(\"click\", __privateGet(this, _clickListener));\n }\n get keysUsed() {\n return [\"Enter\", \" \"];\n }\n /**\n * Get or set tooltip placement\n */\n get tooltipPlacement() {\n return getStringAttr(this, Attributes.TOOLTIP_PLACEMENT);\n }\n set tooltipPlacement(value) {\n setStringAttr(this, Attributes.TOOLTIP_PLACEMENT, value);\n }\n get mediaController() {\n return getStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER);\n }\n set mediaController(value) {\n setStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER, value);\n }\n get disabled() {\n return getBooleanAttr(this, Attributes.DISABLED);\n }\n set disabled(value) {\n setBooleanAttr(this, Attributes.DISABLED, value);\n }\n get noTooltip() {\n return getBooleanAttr(this, Attributes.NO_TOOLTIP);\n }\n set noTooltip(value) {\n setBooleanAttr(this, Attributes.NO_TOOLTIP, value);\n }\n /**\n * @abstract\n * @argument {Event} e\n */\n handleClick(e) {\n }\n // eslint-disable-line\n}\n_mediaController = new WeakMap();\n_clickListener = new WeakMap();\n_positionTooltip = new WeakMap();\n_keyupListener = new WeakMap();\n_keydownListener = new WeakMap();\n_setupTooltip = new WeakSet();\nsetupTooltip_fn = function() {\n this.addEventListener(\"mouseenter\", __privateGet(this, _positionTooltip));\n this.addEventListener(\"focus\", __privateGet(this, _positionTooltip));\n this.addEventListener(\"click\", __privateGet(this, _clickListener));\n const initialPlacement = this.tooltipPlacement;\n if (initialPlacement && this.tooltipEl) {\n this.tooltipEl.placement = initialPlacement;\n }\n};\nMediaChromeButton.shadowRootOptions = { mode: \"open\" };\nMediaChromeButton.getTemplateHTML = getTemplateHTML;\nMediaChromeButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaChromeButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-chrome-button\")) {\n globalThis.customElements.define(\"media-chrome-button\", MediaChromeButton);\n}\nvar media_chrome_button_default = MediaChromeButton;\nexport {\n MediaChromeButton,\n media_chrome_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _isInit, _previouslyFocused, _invokerElement, _init, init_fn, _handleOpen, handleOpen_fn, _handleClosed, handleClosed_fn, _handleInvoke, handleInvoke_fn, _handleFocusOut, handleFocusOut_fn, _handleKeyDown, handleKeyDown_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n containsComposedNode,\n getActiveElement,\n getBooleanAttr,\n namedNodeMapToObject,\n setBooleanAttr,\n getOrInsertCSSRule\n} from \"./utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n font: var(--media-font,\n var(--media-font-weight, normal)\n var(--media-font-size, 14px) /\n var(--media-text-content-height, var(--media-control-height, 24px))\n var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n display: var(--media-dialog-display, inline-flex);\n justify-content: center;\n align-items: center;\n ${/** The hide transition is defined below after a short delay. */\n \"\"}\n transition-behavior: allow-discrete;\n visibility: hidden;\n opacity: 0;\n transform: translateY(2px) scale(.99);\n pointer-events: none;\n }\n\n :host([open]) {\n transition: display .2s, visibility 0s, opacity .2s ease-out, transform .15s ease-out;\n visibility: visible;\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n }\n\n #content {\n display: flex;\n position: relative;\n box-sizing: border-box;\n width: min(320px, 100%);\n word-wrap: break-word;\n max-height: 100%;\n overflow: auto;\n text-align: center;\n line-height: 1.4;\n }\n </style>\n ${this.getSlotTemplateHTML(_attrs)}\n `\n );\n}\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <slot id=\"content\"></slot>\n `\n );\n}\nconst Attributes = {\n OPEN: \"open\",\n ANCHOR: \"anchor\"\n};\nclass MediaChromeDialog extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _init);\n __privateAdd(this, _handleOpen);\n __privateAdd(this, _handleClosed);\n __privateAdd(this, _handleInvoke);\n __privateAdd(this, _handleFocusOut);\n __privateAdd(this, _handleKeyDown);\n __privateAdd(this, _isInit, false);\n __privateAdd(this, _previouslyFocused, null);\n __privateAdd(this, _invokerElement, null);\n this.addEventListener(\"invoke\", this);\n this.addEventListener(\"focusout\", this);\n this.addEventListener(\"keydown\", this);\n }\n static get observedAttributes() {\n return [Attributes.OPEN, Attributes.ANCHOR];\n }\n get open() {\n return getBooleanAttr(this, Attributes.OPEN);\n }\n set open(value) {\n setBooleanAttr(this, Attributes.OPEN, value);\n }\n handleEvent(event) {\n switch (event.type) {\n case \"invoke\":\n __privateMethod(this, _handleInvoke, handleInvoke_fn).call(this, event);\n break;\n case \"focusout\":\n __privateMethod(this, _handleFocusOut, handleFocusOut_fn).call(this, event);\n break;\n case \"keydown\":\n __privateMethod(this, _handleKeyDown, handleKeyDown_fn).call(this, event);\n break;\n }\n }\n connectedCallback() {\n __privateMethod(this, _init, init_fn).call(this);\n if (!this.role) {\n this.role = \"dialog\";\n }\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n __privateMethod(this, _init, init_fn).call(this);\n if (attrName === Attributes.OPEN && newValue !== oldValue) {\n if (this.open) {\n __privateMethod(this, _handleOpen, handleOpen_fn).call(this);\n } else {\n __privateMethod(this, _handleClosed, handleClosed_fn).call(this);\n }\n }\n }\n focus() {\n __privateSet(this, _previouslyFocused, getActiveElement());\n const focusCancelled = !this.dispatchEvent(new Event(\"focus\", { composed: true, cancelable: true }));\n const focusInCancelled = !this.dispatchEvent(new Event(\"focusin\", { composed: true, bubbles: true, cancelable: true }));\n if (focusCancelled || focusInCancelled)\n return;\n const focusable = this.querySelector(\n '[autofocus], [tabindex]:not([tabindex=\"-1\"]), [role=\"menu\"]'\n );\n focusable == null ? void 0 : focusable.focus();\n }\n get keysUsed() {\n return [\"Escape\", \"Tab\"];\n }\n}\n_isInit = new WeakMap();\n_previouslyFocused = new WeakMap();\n_invokerElement = new WeakMap();\n_init = new WeakSet();\ninit_fn = function() {\n if (__privateGet(this, _isInit))\n return;\n __privateSet(this, _isInit, true);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n queueMicrotask(() => {\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"transition\",\n `display .15s, visibility .15s, opacity .15s ease-in, transform .15s ease-in`\n );\n });\n }\n};\n_handleOpen = new WeakSet();\nhandleOpen_fn = function() {\n var _a;\n (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"true\");\n this.dispatchEvent(new Event(\"open\", { composed: true, bubbles: true }));\n this.addEventListener(\"transitionend\", () => this.focus(), { once: true });\n};\n_handleClosed = new WeakSet();\nhandleClosed_fn = function() {\n var _a;\n (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"false\");\n this.dispatchEvent(new Event(\"close\", { composed: true, bubbles: true }));\n};\n_handleInvoke = new WeakSet();\nhandleInvoke_fn = function(event) {\n __privateSet(this, _invokerElement, event.relatedTarget);\n if (!containsComposedNode(this, event.relatedTarget)) {\n this.open = !this.open;\n }\n};\n_handleFocusOut = new WeakSet();\nhandleFocusOut_fn = function(event) {\n var _a;\n if (!containsComposedNode(this, event.relatedTarget)) {\n (_a = __privateGet(this, _previouslyFocused)) == null ? void 0 : _a.focus();\n if (__privateGet(this, _invokerElement) && __privateGet(this, _invokerElement) !== event.relatedTarget && this.open) {\n this.open = false;\n }\n }\n};\n_handleKeyDown = new WeakSet();\nhandleKeyDown_fn = function(event) {\n var _a, _b, _c, _d, _e;\n const { key, ctrlKey, altKey, metaKey } = event;\n if (ctrlKey || altKey || metaKey) {\n return;\n }\n if (!this.keysUsed.includes(key)) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (key === \"Tab\") {\n if (event.shiftKey) {\n (_b = (_a = this.previousElementSibling) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a);\n } else {\n (_d = (_c = this.nextElementSibling) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c);\n }\n this.blur();\n } else if (key === \"Escape\") {\n (_e = __privateGet(this, _previouslyFocused)) == null ? void 0 : _e.focus();\n this.open = false;\n }\n};\nMediaChromeDialog.shadowRootOptions = { mode: \"open\" };\nMediaChromeDialog.getTemplateHTML = getTemplateHTML;\nMediaChromeDialog.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-chrome-dialog\")) {\n globalThis.customElements.define(\"media-chrome-dialog\", MediaChromeDialog);\n}\nvar media_chrome_dialog_default = MediaChromeDialog;\nexport {\n Attributes,\n MediaChromeDialog,\n media_chrome_dialog_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _mediaController, _isInputTarget, _startpoint, _endpoint, _cssRules, _segments, _onFocusIn, _onFocusOut, _updateComputedStyles, _updateActiveSegment, updateActiveSegment_fn, _enableUserEvents, enableUserEvents_fn, _disableUserEvents, disableUserEvents_fn, _handlePointerDown, handlePointerDown_fn, _handlePointerEnter, handlePointerEnter_fn, _handlePointerUp, handlePointerUp_fn, _handlePointerLeave, handlePointerLeave_fn, _handlePointerMove, handlePointerMove_fn;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { globalThis, document } from \"./utils/server-safe-globals.js\";\nimport {\n getOrInsertCSSRule,\n getPointProgressOnLine,\n namedNodeMapToObject\n} from \"./utils/element-utils.js\";\nimport { observeResize, unobserveResize } from \"./utils/resize-observer.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n --_focus-box-shadow: var(--media-focus-box-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n --_media-range-padding: var(--media-range-padding, var(--media-control-padding, 10px));\n\n box-shadow: var(--_focus-visible-box-shadow, none);\n background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n height: calc(var(--media-control-height, 24px) + 2 * var(--_media-range-padding));\n display: inline-flex;\n align-items: center;\n ${/* Don't horizontal align w/ justify-content! #container can go negative on the x-axis w/ small width. */\n \"\"}\n vertical-align: middle;\n box-sizing: border-box;\n position: relative;\n width: 100px;\n transition: background .15s linear;\n cursor: var(--media-cursor, pointer);\n pointer-events: auto;\n touch-action: none; ${/* Prevent scrolling when dragging on mobile. */\n \"\"}\n }\n\n ${/* Reset before `outline` on track could be set by a CSS var */\n \"\"}\n input[type=range]:focus {\n outline: 0;\n }\n input[type=range]:focus::-webkit-slider-runnable-track {\n outline: 0;\n }\n\n :host(:hover) {\n background: var(--media-control-hover-background, rgb(50 50 70 / .7));\n }\n\n #leftgap {\n padding-left: var(--media-range-padding-left, var(--_media-range-padding));\n }\n\n #rightgap {\n padding-right: var(--media-range-padding-right, var(--_media-range-padding));\n }\n\n #startpoint,\n #endpoint {\n position: absolute;\n }\n\n #endpoint {\n right: 0;\n }\n\n #container {\n ${/* Not using the CSS `padding` prop makes it easier for slide open volume ranges so the width can be zero. */\n \"\"}\n width: var(--media-range-track-width, 100%);\n transform: translate(var(--media-range-track-translate-x, 0px), var(--media-range-track-translate-y, 0px));\n position: relative;\n height: 100%;\n display: flex;\n align-items: center;\n min-width: 40px;\n }\n\n #range {\n ${/* The input range acts as a hover and hit zone for input events. */\n \"\"}\n display: var(--media-time-range-hover-display, block);\n bottom: var(--media-time-range-hover-bottom, -7px);\n height: var(--media-time-range-hover-height, max(100% + 7px, 25px));\n width: 100%;\n position: absolute;\n cursor: var(--media-cursor, pointer);\n\n -webkit-appearance: none; ${/* Hides the slider so that custom slider can be made */\n \"\"}\n -webkit-tap-highlight-color: transparent;\n background: transparent; ${/* Otherwise white in Chrome */\n \"\"}\n margin: 0;\n z-index: 1;\n }\n\n @media (hover: hover) {\n #range {\n bottom: var(--media-time-range-hover-bottom, -5px);\n height: var(--media-time-range-hover-height, max(100% + 5px, 20px));\n }\n }\n\n ${/* Special styling for WebKit/Blink */\n \"\"}\n ${/* Make thumb width/height small so it has no effect on range click position. */\n \"\"}\n #range::-webkit-slider-thumb {\n -webkit-appearance: none;\n background: transparent;\n width: .1px;\n height: .1px;\n }\n\n ${/* The thumb is not positioned relative to the track in Firefox */\n \"\"}\n #range::-moz-range-thumb {\n background: transparent;\n border: transparent;\n width: .1px;\n height: .1px;\n }\n\n #appearance {\n height: var(--media-range-track-height, 4px);\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n position: absolute;\n ${/* Required for Safari to stop glitching track height on hover */\n \"\"}\n will-change: transform;\n }\n\n #track {\n background: var(--media-range-track-background, rgb(255 255 255 / .2));\n border-radius: var(--media-range-track-border-radius, 1px);\n border: var(--media-range-track-border, none);\n outline: var(--media-range-track-outline);\n outline-offset: var(--media-range-track-outline-offset);\n backdrop-filter: var(--media-range-track-backdrop-filter);\n -webkit-backdrop-filter: var(--media-range-track-backdrop-filter);\n box-shadow: var(--media-range-track-box-shadow, none);\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n\n #progress,\n #pointer {\n position: absolute;\n height: 100%;\n will-change: width;\n }\n\n #progress {\n background: var(--media-range-bar-color, var(--media-primary-color, rgb(238 238 238)));\n transition: var(--media-range-track-transition);\n }\n\n #pointer {\n background: var(--media-range-track-pointer-background);\n border-right: var(--media-range-track-pointer-border-right);\n transition: visibility .25s, opacity .25s;\n visibility: hidden;\n opacity: 0;\n }\n\n @media (hover: hover) {\n :host(:hover) #pointer {\n transition: visibility .5s, opacity .5s;\n visibility: visible;\n opacity: 1;\n }\n }\n\n #thumb,\n ::slotted([slot=thumb]) {\n width: var(--media-range-thumb-width, 10px);\n height: var(--media-range-thumb-height, 10px);\n transition: var(--media-range-thumb-transition);\n transform: var(--media-range-thumb-transform, none);\n opacity: var(--media-range-thumb-opacity, 1);\n translate: -50%;\n position: absolute;\n left: 0;\n cursor: var(--media-cursor, pointer);\n }\n\n #thumb {\n border-radius: var(--media-range-thumb-border-radius, 10px);\n background: var(--media-range-thumb-background, var(--media-primary-color, rgb(238 238 238)));\n box-shadow: var(--media-range-thumb-box-shadow, 1px 1px 1px transparent);\n border: var(--media-range-thumb-border, none);\n }\n\n :host([disabled]) #thumb {\n background-color: #777;\n }\n\n .segments #appearance {\n height: var(--media-range-segment-hover-height, 7px);\n }\n\n #track {\n clip-path: url(#segments-clipping);\n }\n\n #segments {\n --segments-gap: var(--media-range-segments-gap, 2px);\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n #segments-clipping {\n transform: translateX(calc(var(--segments-gap) / 2));\n }\n\n #segments-clipping:empty {\n display: none;\n }\n\n #segments-clipping rect {\n height: var(--media-range-track-height, 4px);\n y: calc((var(--media-range-segment-hover-height, 7px) - var(--media-range-track-height, 4px)) / 2);\n transition: var(--media-range-segment-transition, transform .1s ease-in-out);\n transform: var(--media-range-segment-transform, scaleY(1));\n transform-origin: center;\n }\n </style>\n <div id=\"leftgap\"></div>\n <div id=\"container\">\n <div id=\"startpoint\"></div>\n <div id=\"endpoint\"></div>\n <div id=\"appearance\">\n <div id=\"track\" part=\"track\">\n <div id=\"pointer\"></div>\n <div id=\"progress\" part=\"progress\"></div>\n </div>\n <slot name=\"thumb\">\n <div id=\"thumb\" part=\"thumb\"></div>\n </slot>\n <svg id=\"segments\"><clipPath id=\"segments-clipping\"></clipPath></svg>\n </div>\n <input id=\"range\" type=\"range\" min=\"0\" max=\"1\" step=\"any\" value=\"0\">\n </div>\n <div id=\"rightgap\"></div>\n `\n );\n}\nclass MediaChromeRange extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _updateActiveSegment);\n __privateAdd(this, _enableUserEvents);\n __privateAdd(this, _disableUserEvents);\n __privateAdd(this, _handlePointerDown);\n __privateAdd(this, _handlePointerEnter);\n __privateAdd(this, _handlePointerUp);\n __privateAdd(this, _handlePointerLeave);\n __privateAdd(this, _handlePointerMove);\n __privateAdd(this, _mediaController, void 0);\n __privateAdd(this, _isInputTarget, void 0);\n __privateAdd(this, _startpoint, void 0);\n __privateAdd(this, _endpoint, void 0);\n __privateAdd(this, _cssRules, {});\n __privateAdd(this, _segments, []);\n __privateAdd(this, _onFocusIn, () => {\n if (this.range.matches(\":focus-visible\")) {\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"--_focus-visible-box-shadow\",\n \"var(--_focus-box-shadow)\"\n );\n }\n });\n __privateAdd(this, _onFocusOut, () => {\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.removeProperty(\"--_focus-visible-box-shadow\");\n });\n __privateAdd(this, _updateComputedStyles, () => {\n const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n if (clipping)\n clipping.parentNode.append(clipping);\n });\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n const html = this.constructor.getTemplateHTML(attrs);\n this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n }\n this.container = this.shadowRoot.querySelector(\"#container\");\n __privateSet(this, _startpoint, this.shadowRoot.querySelector(\"#startpoint\"));\n __privateSet(this, _endpoint, this.shadowRoot.querySelector(\"#endpoint\"));\n this.range = this.shadowRoot.querySelector(\"#range\");\n this.appearance = this.shadowRoot.querySelector(\"#appearance\");\n }\n static get observedAttributes() {\n return [\n \"disabled\",\n \"aria-disabled\",\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n } else if (attrName === \"disabled\" || attrName === \"aria-disabled\" && oldValue !== newValue) {\n if (newValue == null) {\n this.range.removeAttribute(attrName);\n __privateMethod(this, _enableUserEvents, enableUserEvents_fn).call(this);\n } else {\n this.range.setAttribute(attrName, newValue);\n __privateMethod(this, _disableUserEvents, disableUserEvents_fn).call(this);\n }\n }\n }\n connectedCallback() {\n var _a, _b, _c;\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"display\",\n `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n );\n __privateGet(this, _cssRules).pointer = getOrInsertCSSRule(this.shadowRoot, \"#pointer\");\n __privateGet(this, _cssRules).progress = getOrInsertCSSRule(this.shadowRoot, \"#progress\");\n __privateGet(this, _cssRules).thumb = getOrInsertCSSRule(\n this.shadowRoot,\n '#thumb, ::slotted([slot=\"thumb\"])'\n );\n __privateGet(this, _cssRules).activeSegment = getOrInsertCSSRule(\n this.shadowRoot,\n \"#segments-clipping rect:nth-child(0)\"\n );\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n mediaControllerId\n ));\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n this.updateBar();\n this.shadowRoot.addEventListener(\"focusin\", __privateGet(this, _onFocusIn));\n this.shadowRoot.addEventListener(\"focusout\", __privateGet(this, _onFocusOut));\n __privateMethod(this, _enableUserEvents, enableUserEvents_fn).call(this);\n observeResize(this.container, __privateGet(this, _updateComputedStyles));\n }\n disconnectedCallback() {\n var _a, _b;\n __privateMethod(this, _disableUserEvents, disableUserEvents_fn).call(this);\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n this.shadowRoot.removeEventListener(\"focusin\", __privateGet(this, _onFocusIn));\n this.shadowRoot.removeEventListener(\"focusout\", __privateGet(this, _onFocusOut));\n unobserveResize(this.container, __privateGet(this, _updateComputedStyles));\n }\n updatePointerBar(evt) {\n var _a;\n (_a = __privateGet(this, _cssRules).pointer) == null ? void 0 : _a.style.setProperty(\n \"width\",\n `${this.getPointerRatio(evt) * 100}%`\n );\n }\n updateBar() {\n var _a, _b;\n const rangePercent = this.range.valueAsNumber * 100;\n (_a = __privateGet(this, _cssRules).progress) == null ? void 0 : _a.style.setProperty(\"width\", `${rangePercent}%`);\n (_b = __privateGet(this, _cssRules).thumb) == null ? void 0 : _b.style.setProperty(\"left\", `${rangePercent}%`);\n }\n updateSegments(segments) {\n const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n clipping.textContent = \"\";\n this.container.classList.toggle(\"segments\", !!(segments == null ? void 0 : segments.length));\n if (!(segments == null ? void 0 : segments.length))\n return;\n const normalized = [\n .../* @__PURE__ */ new Set([\n +this.range.min,\n ...segments.flatMap((s) => [s.start, s.end]),\n +this.range.max\n ])\n ];\n __privateSet(this, _segments, [...normalized]);\n const lastMarker = normalized.pop();\n for (const [i, marker] of normalized.entries()) {\n const [isFirst, isLast] = [i === 0, i === normalized.length - 1];\n const x = isFirst ? \"calc(var(--segments-gap) / -1)\" : `${marker * 100}%`;\n const x2 = isLast ? lastMarker : normalized[i + 1];\n const width = `calc(${(x2 - marker) * 100}%${isFirst || isLast ? \"\" : ` - var(--segments-gap)`})`;\n const segmentEl = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"rect\"\n );\n const cssRule = getOrInsertCSSRule(\n this.shadowRoot,\n `#segments-clipping rect:nth-child(${i + 1})`\n );\n cssRule.style.setProperty(\"x\", x);\n cssRule.style.setProperty(\"width\", width);\n clipping.append(segmentEl);\n }\n }\n getPointerRatio(evt) {\n return getPointProgressOnLine(\n evt.clientX,\n evt.clientY,\n __privateGet(this, _startpoint).getBoundingClientRect(),\n __privateGet(this, _endpoint).getBoundingClientRect()\n );\n }\n get dragging() {\n return this.hasAttribute(\"dragging\");\n }\n handleEvent(evt) {\n switch (evt.type) {\n case \"pointermove\":\n __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, evt);\n break;\n case \"input\":\n this.updateBar();\n break;\n case \"pointerenter\":\n __privateMethod(this, _handlePointerEnter, handlePointerEnter_fn).call(this, evt);\n break;\n case \"pointerdown\":\n __privateMethod(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n break;\n case \"pointerup\":\n __privateMethod(this, _handlePointerUp, handlePointerUp_fn).call(this);\n break;\n case \"pointerleave\":\n __privateMethod(this, _handlePointerLeave, handlePointerLeave_fn).call(this);\n break;\n }\n }\n get keysUsed() {\n return [\"ArrowUp\", \"ArrowRight\", \"ArrowDown\", \"ArrowLeft\"];\n }\n}\n_mediaController = new WeakMap();\n_isInputTarget = new WeakMap();\n_startpoint = new WeakMap();\n_endpoint = new WeakMap();\n_cssRules = new WeakMap();\n_segments = new WeakMap();\n_onFocusIn = new WeakMap();\n_onFocusOut = new WeakMap();\n_updateComputedStyles = new WeakMap();\n_updateActiveSegment = new WeakSet();\nupdateActiveSegment_fn = function(evt) {\n const rule = __privateGet(this, _cssRules).activeSegment;\n if (!rule)\n return;\n const pointerRatio = this.getPointerRatio(evt);\n const segmentIndex = __privateGet(this, _segments).findIndex((start, i, arr) => {\n const end = arr[i + 1];\n return end != null && pointerRatio >= start && pointerRatio <= end;\n });\n const selectorText = `#segments-clipping rect:nth-child(${segmentIndex + 1})`;\n if (rule.selectorText != selectorText || !rule.style.transform) {\n rule.selectorText = selectorText;\n rule.style.setProperty(\n \"transform\",\n \"var(--media-range-segment-hover-transform, scaleY(2))\"\n );\n }\n};\n_enableUserEvents = new WeakSet();\nenableUserEvents_fn = function() {\n if (this.hasAttribute(\"disabled\"))\n return;\n this.addEventListener(\"input\", this);\n this.addEventListener(\"pointerdown\", this);\n this.addEventListener(\"pointerenter\", this);\n};\n_disableUserEvents = new WeakSet();\ndisableUserEvents_fn = function() {\n var _a, _b;\n this.removeEventListener(\"input\", this);\n this.removeEventListener(\"pointerdown\", this);\n this.removeEventListener(\"pointerenter\", this);\n (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointerup\", this);\n (_b = globalThis.window) == null ? void 0 : _b.removeEventListener(\"pointermove\", this);\n};\n_handlePointerDown = new WeakSet();\nhandlePointerDown_fn = function(evt) {\n var _a;\n __privateSet(this, _isInputTarget, evt.composedPath().includes(this.range));\n (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"pointerup\", this);\n};\n_handlePointerEnter = new WeakSet();\nhandlePointerEnter_fn = function(evt) {\n var _a;\n if (evt.pointerType !== \"mouse\")\n __privateMethod(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n this.addEventListener(\"pointerleave\", this);\n (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"pointermove\", this);\n};\n_handlePointerUp = new WeakSet();\nhandlePointerUp_fn = function() {\n var _a;\n (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointerup\", this);\n this.toggleAttribute(\"dragging\", false);\n this.range.disabled = this.hasAttribute(\"disabled\");\n};\n_handlePointerLeave = new WeakSet();\nhandlePointerLeave_fn = function() {\n var _a, _b;\n this.removeEventListener(\"pointerleave\", this);\n (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointermove\", this);\n this.toggleAttribute(\"dragging\", false);\n this.range.disabled = this.hasAttribute(\"disabled\");\n (_b = __privateGet(this, _cssRules).activeSegment) == null ? void 0 : _b.style.removeProperty(\"transform\");\n};\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(evt) {\n if (evt.pointerType === \"pen\" && evt.buttons === 0) {\n return;\n }\n this.toggleAttribute(\n \"dragging\",\n evt.buttons === 1 || evt.pointerType !== \"mouse\"\n );\n this.updatePointerBar(evt);\n __privateMethod(this, _updateActiveSegment, updateActiveSegment_fn).call(this, evt);\n if (this.dragging && (evt.pointerType !== \"mouse\" || !__privateGet(this, _isInputTarget))) {\n this.range.disabled = true;\n this.range.valueAsNumber = this.getPointerRatio(evt);\n this.range.dispatchEvent(\n new Event(\"input\", { bubbles: true, composed: true })\n );\n }\n};\nMediaChromeRange.shadowRootOptions = { mode: \"open\" };\nMediaChromeRange.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-chrome-range\")) {\n globalThis.customElements.define(\"media-chrome-range\", MediaChromeRange);\n}\nvar media_chrome_range_default = MediaChromeRange;\nexport {\n MediaChromeRange,\n media_chrome_range_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _pointerDownTimeStamp, _currentMedia, _inactiveTimeout, _autohide, _mutationObserver, _handleMutation, handleMutation_fn, _isResizePending, _handleResize, _handlePointerMove, handlePointerMove_fn, _handlePointerUp, handlePointerUp_fn, _setInactive, setInactive_fn, _setActive, setActive_fn, _scheduleInactive, scheduleInactive_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaStateChangeEvents } from \"./constants.js\";\nimport { observeResize, unobserveResize } from \"./utils/resize-observer.js\";\nimport \"./media-gesture-receiver.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getBooleanAttr,\n getStringAttr,\n namedNodeMapToObject,\n setBooleanAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nimport MediaGestureReceiver from \"./media-gesture-receiver.js\";\nconst Attributes = {\n AUDIO: \"audio\",\n AUTOHIDE: \"autohide\",\n BREAKPOINTS: \"breakpoints\",\n GESTURES_DISABLED: \"gesturesdisabled\",\n KEYBOARD_CONTROL: \"keyboardcontrol\",\n NO_AUTOHIDE: \"noautohide\",\n USER_INACTIVE: \"userinactive\",\n AUTOHIDE_OVER_CONTROLS: \"autohideovercontrols\"\n};\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n ${/*\n * outline on media is turned off because it is allowed to get focus to faciliate hotkeys.\n * However, on keyboard interactions, the focus outline is shown,\n * which is particularly noticeable when going fullscreen via hotkeys.\n */\n \"\"}\n :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) ::slotted([slot=media]) {\n outline: none;\n }\n\n :host {\n box-sizing: border-box;\n position: relative;\n display: inline-block;\n line-height: 0;\n background-color: var(--media-background-color, #000);\n overflow: hidden;\n }\n\n :host(:not([${Attributes.AUDIO}])) [part~=layer]:not([part~=media-layer]) {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n display: flex;\n flex-flow: column nowrap;\n align-items: start;\n pointer-events: none;\n background: none;\n }\n\n slot[name=media] {\n display: var(--media-slot-display, contents);\n }\n\n ${/*\n * when in audio mode, hide the slotted media element by default\n */\n \"\"}\n :host([${Attributes.AUDIO}]) slot[name=media] {\n display: var(--media-slot-display, none);\n }\n\n ${/*\n * when in audio mode, hide the gesture-layer which causes media-controller to be taller than the control bar\n */\n \"\"}\n :host([${Attributes.AUDIO}]) [part~=layer][part~=gesture-layer] {\n height: 0;\n display: block;\n }\n\n ${/*\n * if gestures are disabled, don't accept pointer-events\n */\n \"\"}\n :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) ::slotted([slot=gestures-chrome]),\n :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) media-gesture-receiver[slot=gestures-chrome] {\n display: none;\n }\n\n ${/*\n * any slotted element that isn't a poster or media slot should be pointer-events auto\n * we'll want to add here any slotted elements that shouldn't get pointer-events by default when slotted\n */\n \"\"}\n ::slotted(:not([slot=media]):not([slot=poster]):not(media-loading-indicator):not([role=dialog]):not([hidden])) {\n pointer-events: auto;\n }\n\n :host(:not([${Attributes.AUDIO}])) *[part~=layer][part~=centered-layer] {\n align-items: center;\n justify-content: center;\n }\n\n :host(:not([${Attributes.AUDIO}])) ::slotted(media-gesture-receiver[slot=gestures-chrome]),\n :host(:not([${Attributes.AUDIO}])) media-gesture-receiver[slot=gestures-chrome] {\n align-self: stretch;\n flex-grow: 1;\n }\n\n slot[name=middle-chrome] {\n display: inline;\n flex-grow: 1;\n pointer-events: none;\n background: none;\n }\n\n ${/* Position the media and poster elements to fill the container */\n \"\"}\n ::slotted([slot=media]),\n ::slotted([slot=poster]) {\n width: 100%;\n height: 100%;\n }\n\n ${/* Video specific styles */\n \"\"}\n :host(:not([${Attributes.AUDIO}])) .spacer {\n flex-grow: 1;\n }\n\n ${/* Safari needs this to actually make the element fill the window */\n \"\"}\n :host(:-webkit-full-screen) {\n ${/* Needs to use !important otherwise easy to break */\n \"\"}\n width: 100% !important;\n height: 100% !important;\n }\n\n ${/* Only add these if auto hide is not disabled */\n \"\"}\n ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}]):not([hidden]):not([role=dialog])) {\n opacity: 1;\n transition: var(--media-control-transition-in, opacity 0.25s);\n }\n\n ${/* Hide controls when inactive, not paused, not audio and auto hide not disabled */\n \"\"}\n :host([${Attributes.USER_INACTIVE}]:not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}]):not([role=dialog])) {\n opacity: 0;\n transition: var(--media-control-transition-out, opacity 1s);\n }\n\n :host([${Attributes.USER_INACTIVE}]:not([${Attributes.NO_AUTOHIDE}]):not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted([slot=media]) {\n cursor: none;\n }\n\n :host([${Attributes.USER_INACTIVE}][${Attributes.AUTOHIDE_OVER_CONTROLS}]:not([${Attributes.NO_AUTOHIDE}]):not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) * {\n --media-cursor: none;\n cursor: none;\n }\n\n\n ::slotted(media-control-bar) {\n align-self: stretch;\n }\n\n ${/* ::slotted([slot=poster]) doesn't work for slot fallback content so hide parent slot instead */\n \"\"}\n :host(:not([${Attributes.AUDIO}])[${MediaUIAttributes.MEDIA_HAS_PLAYED}]) slot[name=poster] {\n display: none;\n }\n\n ::slotted([role=dialog]) {\n width: 100%;\n height: 100%;\n align-self: center;\n }\n\n ::slotted([role=menu]) {\n align-self: end;\n }\n </style>\n\n <slot name=\"media\" part=\"layer media-layer\"></slot>\n <slot name=\"poster\" part=\"layer poster-layer\"></slot>\n <slot name=\"gestures-chrome\" part=\"layer gesture-layer\">\n <media-gesture-receiver slot=\"gestures-chrome\">\n <template shadowrootmode=\"${MediaGestureReceiver.shadowRootOptions.mode}\">\n ${MediaGestureReceiver.getTemplateHTML({})}\n </template>\n </media-gesture-receiver>\n </slot>\n <span part=\"layer vertical-layer\">\n <slot name=\"top-chrome\" part=\"top chrome\"></slot>\n <slot name=\"middle-chrome\" part=\"middle chrome\"></slot>\n <slot name=\"centered-chrome\" part=\"layer centered-layer center centered chrome\"></slot>\n ${/* default, effectively \"bottom-chrome\" */\n \"\"}\n <slot part=\"bottom chrome\"></slot>\n </span>\n <slot name=\"dialog\" part=\"layer dialog-layer\"></slot>\n `\n );\n}\nconst MEDIA_UI_ATTRIBUTE_NAMES = Object.values(MediaUIAttributes);\nconst defaultBreakpoints = \"sm:384 md:576 lg:768 xl:960\";\nfunction resizeCallback(entry) {\n setBreakpoints(entry.target, entry.contentRect.width);\n}\nfunction setBreakpoints(container, width) {\n var _a;\n if (!container.isConnected)\n return;\n const breakpoints = (_a = container.getAttribute(Attributes.BREAKPOINTS)) != null ? _a : defaultBreakpoints;\n const ranges = createBreakpointMap(breakpoints);\n const activeBreakpoints = getBreakpoints(ranges, width);\n let changed = false;\n Object.keys(ranges).forEach((name) => {\n if (activeBreakpoints.includes(name)) {\n if (!container.hasAttribute(`breakpoint${name}`)) {\n container.setAttribute(`breakpoint${name}`, \"\");\n changed = true;\n }\n return;\n }\n if (container.hasAttribute(`breakpoint${name}`)) {\n container.removeAttribute(`breakpoint${name}`);\n changed = true;\n }\n });\n if (changed) {\n const evt = new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_CHANGE, {\n detail: activeBreakpoints\n });\n container.dispatchEvent(evt);\n }\n if (!container.breakpointsComputed) {\n container.breakpointsComputed = true;\n container.dispatchEvent(\n new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_COMPUTED, {\n bubbles: true,\n composed: true\n })\n );\n }\n}\nfunction createBreakpointMap(breakpoints) {\n const pairs = breakpoints.split(/\\s+/);\n return Object.fromEntries(pairs.map((pair) => pair.split(\":\")));\n}\nfunction getBreakpoints(breakpoints, width) {\n return Object.keys(breakpoints).filter((name) => {\n return width >= parseInt(breakpoints[name]);\n });\n}\nclass MediaContainer extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _handleMutation);\n __privateAdd(this, _handlePointerMove);\n __privateAdd(this, _handlePointerUp);\n __privateAdd(this, _setInactive);\n __privateAdd(this, _setActive);\n __privateAdd(this, _scheduleInactive);\n __privateAdd(this, _pointerDownTimeStamp, 0);\n __privateAdd(this, _currentMedia, null);\n __privateAdd(this, _inactiveTimeout, null);\n __privateAdd(this, _autohide, void 0);\n this.breakpointsComputed = false;\n __privateAdd(this, _mutationObserver, new MutationObserver(__privateMethod(this, _handleMutation, handleMutation_fn).bind(this)));\n __privateAdd(this, _isResizePending, false);\n __privateAdd(this, _handleResize, (entry) => {\n if (__privateGet(this, _isResizePending))\n return;\n setTimeout(() => {\n resizeCallback(entry);\n __privateSet(this, _isResizePending, false);\n }, 0);\n __privateSet(this, _isResizePending, true);\n });\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n const html = this.constructor.getTemplateHTML(attrs);\n this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n }\n const chainedSlot = this.querySelector(\n \":scope > slot[slot=media]\"\n );\n if (chainedSlot) {\n chainedSlot.addEventListener(\"slotchange\", () => {\n const slotEls = chainedSlot.assignedElements({ flatten: true });\n if (!slotEls.length) {\n if (__privateGet(this, _currentMedia)) {\n this.mediaUnsetCallback(__privateGet(this, _currentMedia));\n }\n return;\n }\n this.handleMediaUpdated(this.media);\n });\n }\n }\n static get observedAttributes() {\n return [Attributes.AUTOHIDE, Attributes.GESTURES_DISABLED].concat(MEDIA_UI_ATTRIBUTE_NAMES).filter(\n (name) => ![\n MediaUIAttributes.MEDIA_RENDITION_LIST,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n MediaUIAttributes.MEDIA_CHAPTERS_CUES,\n MediaUIAttributes.MEDIA_WIDTH,\n MediaUIAttributes.MEDIA_HEIGHT,\n MediaUIAttributes.MEDIA_ERROR,\n MediaUIAttributes.MEDIA_ERROR_MESSAGE\n ].includes(name)\n );\n }\n // Could share this code with media-chrome-html-element instead\n attributeChangedCallback(attrName, _oldValue, newValue) {\n if (attrName.toLowerCase() == Attributes.AUTOHIDE) {\n this.autohide = newValue;\n }\n }\n // First direct child with slot=media, or null\n get media() {\n let media = this.querySelector(\":scope > [slot=media]\");\n if ((media == null ? void 0 : media.nodeName) == \"SLOT\")\n media = media.assignedElements({ flatten: true })[0];\n return media;\n }\n async handleMediaUpdated(media) {\n if (!media)\n return;\n __privateSet(this, _currentMedia, media);\n if (media.localName.includes(\"-\")) {\n await globalThis.customElements.whenDefined(media.localName);\n }\n this.mediaSetCallback(media);\n }\n connectedCallback() {\n var _a;\n __privateGet(this, _mutationObserver).observe(this, { childList: true, subtree: true });\n observeResize(this, __privateGet(this, _handleResize));\n const isAudioChrome = this.getAttribute(Attributes.AUDIO) != null;\n const label = isAudioChrome ? t(\"audio player\") : t(\"video player\");\n this.setAttribute(\"role\", \"region\");\n this.setAttribute(\"aria-label\", label);\n this.handleMediaUpdated(this.media);\n this.setAttribute(Attributes.USER_INACTIVE, \"\");\n setBreakpoints(this, this.getBoundingClientRect().width);\n this.addEventListener(\"pointerdown\", this);\n this.addEventListener(\"pointermove\", this);\n this.addEventListener(\"pointerup\", this);\n this.addEventListener(\"mouseleave\", this);\n this.addEventListener(\"keyup\", this);\n (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"mouseup\", this);\n }\n disconnectedCallback() {\n var _a;\n __privateGet(this, _mutationObserver).disconnect();\n unobserveResize(this, __privateGet(this, _handleResize));\n if (this.media) {\n this.mediaUnsetCallback(this.media);\n }\n (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"mouseup\", this);\n }\n /**\n * @abstract\n */\n mediaSetCallback(_media) {\n }\n mediaUnsetCallback(_media) {\n __privateSet(this, _currentMedia, null);\n }\n handleEvent(event) {\n switch (event.type) {\n case \"pointerdown\":\n __privateSet(this, _pointerDownTimeStamp, event.timeStamp);\n break;\n case \"pointermove\":\n __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, event);\n break;\n case \"pointerup\":\n __privateMethod(this, _handlePointerUp, handlePointerUp_fn).call(this, event);\n break;\n case \"mouseleave\":\n __privateMethod(this, _setInactive, setInactive_fn).call(this);\n break;\n case \"mouseup\":\n this.removeAttribute(Attributes.KEYBOARD_CONTROL);\n break;\n case \"keyup\":\n __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n this.setAttribute(Attributes.KEYBOARD_CONTROL, \"\");\n break;\n }\n }\n set autohide(seconds) {\n const parsedSeconds = Number(seconds);\n __privateSet(this, _autohide, isNaN(parsedSeconds) ? 0 : parsedSeconds);\n }\n get autohide() {\n return (__privateGet(this, _autohide) === void 0 ? 2 : __privateGet(this, _autohide)).toString();\n }\n get breakpoints() {\n return getStringAttr(this, Attributes.BREAKPOINTS);\n }\n set breakpoints(value) {\n setStringAttr(this, Attributes.BREAKPOINTS, value);\n }\n get audio() {\n return getBooleanAttr(this, Attributes.AUDIO);\n }\n set audio(value) {\n setBooleanAttr(this, Attributes.AUDIO, value);\n }\n get gesturesDisabled() {\n return getBooleanAttr(this, Attributes.GESTURES_DISABLED);\n }\n set gesturesDisabled(value) {\n setBooleanAttr(this, Attributes.GESTURES_DISABLED, value);\n }\n get keyboardControl() {\n return getBooleanAttr(this, Attributes.KEYBOARD_CONTROL);\n }\n set keyboardControl(value) {\n setBooleanAttr(this, Attributes.KEYBOARD_CONTROL, value);\n }\n get noAutohide() {\n return getBooleanAttr(this, Attributes.NO_AUTOHIDE);\n }\n set noAutohide(value) {\n setBooleanAttr(this, Attributes.NO_AUTOHIDE, value);\n }\n get autohideOverControls() {\n return getBooleanAttr(this, Attributes.AUTOHIDE_OVER_CONTROLS);\n }\n set autohideOverControls(value) {\n setBooleanAttr(this, Attributes.AUTOHIDE_OVER_CONTROLS, value);\n }\n get userInteractive() {\n return getBooleanAttr(this, Attributes.USER_INACTIVE);\n }\n set userInteractive(value) {\n setBooleanAttr(this, Attributes.USER_INACTIVE, value);\n }\n}\n_pointerDownTimeStamp = new WeakMap();\n_currentMedia = new WeakMap();\n_inactiveTimeout = new WeakMap();\n_autohide = new WeakMap();\n_mutationObserver = new WeakMap();\n_handleMutation = new WeakSet();\nhandleMutation_fn = function(mutationsList) {\n const media = this.media;\n for (const mutation of mutationsList) {\n if (mutation.type !== \"childList\")\n continue;\n const removedNodes = mutation.removedNodes;\n for (const node of removedNodes) {\n if (node.slot != \"media\" || mutation.target != this)\n continue;\n let previousSibling = mutation.previousSibling && mutation.previousSibling.previousElementSibling;\n if (!previousSibling || !media) {\n this.mediaUnsetCallback(node);\n } else {\n let wasFirst = previousSibling.slot !== \"media\";\n while ((previousSibling = previousSibling.previousSibling) !== null) {\n if (previousSibling.slot == \"media\")\n wasFirst = false;\n }\n if (wasFirst)\n this.mediaUnsetCallback(node);\n }\n }\n if (media) {\n for (const node of mutation.addedNodes) {\n if (node === media)\n this.handleMediaUpdated(media);\n }\n }\n }\n};\n_isResizePending = new WeakMap();\n_handleResize = new WeakMap();\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(event) {\n if (event.pointerType !== \"mouse\") {\n const MAX_TAP_DURATION = 250;\n if (event.timeStamp - __privateGet(this, _pointerDownTimeStamp) < MAX_TAP_DURATION)\n return;\n }\n __privateMethod(this, _setActive, setActive_fn).call(this);\n clearTimeout(__privateGet(this, _inactiveTimeout));\n const autohideOverControls = this.hasAttribute(\n Attributes.AUTOHIDE_OVER_CONTROLS\n );\n if ([this, this.media].includes(event.target) || autohideOverControls) {\n __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n }\n};\n_handlePointerUp = new WeakSet();\nhandlePointerUp_fn = function(event) {\n if (event.pointerType === \"touch\") {\n const controlsVisible = !this.hasAttribute(Attributes.USER_INACTIVE);\n if ([this, this.media].includes(event.target) && controlsVisible) {\n __privateMethod(this, _setInactive, setInactive_fn).call(this);\n } else {\n __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n }\n } else if (event.composedPath().some(\n (el) => [\"media-play-button\", \"media-fullscreen-button\"].includes(\n el == null ? void 0 : el.localName\n )\n )) {\n __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n }\n};\n_setInactive = new WeakSet();\nsetInactive_fn = function() {\n if (__privateGet(this, _autohide) < 0)\n return;\n if (this.hasAttribute(Attributes.USER_INACTIVE))\n return;\n this.setAttribute(Attributes.USER_INACTIVE, \"\");\n const evt = new globalThis.CustomEvent(\n MediaStateChangeEvents.USER_INACTIVE_CHANGE,\n { composed: true, bubbles: true, detail: true }\n );\n this.dispatchEvent(evt);\n};\n_setActive = new WeakSet();\nsetActive_fn = function() {\n if (!this.hasAttribute(Attributes.USER_INACTIVE))\n return;\n this.removeAttribute(Attributes.USER_INACTIVE);\n const evt = new globalThis.CustomEvent(\n MediaStateChangeEvents.USER_INACTIVE_CHANGE,\n { composed: true, bubbles: true, detail: false }\n );\n this.dispatchEvent(evt);\n};\n_scheduleInactive = new WeakSet();\nscheduleInactive_fn = function() {\n __privateMethod(this, _setActive, setActive_fn).call(this);\n clearTimeout(__privateGet(this, _inactiveTimeout));\n const autohide = parseInt(this.autohide);\n if (autohide < 0)\n return;\n __privateSet(this, _inactiveTimeout, setTimeout(() => {\n __privateMethod(this, _setInactive, setInactive_fn).call(this);\n }, autohide * 1e3));\n};\nMediaContainer.shadowRootOptions = { mode: \"open\" };\nMediaContainer.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-container\")) {\n globalThis.customElements.define(\"media-container\", MediaContainer);\n}\nvar media_container_default = MediaContainer;\nexport {\n Attributes,\n MediaContainer,\n media_container_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaController;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { namedNodeMapToObject } from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n ${/* Need position to display above video for some reason */\n \"\"}\n box-sizing: border-box;\n display: var(--media-control-display, var(--media-control-bar-display, inline-flex));\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n --media-loading-indicator-icon-height: 44px;\n }\n\n ::slotted(media-time-range),\n ::slotted(media-volume-range) {\n min-height: 100%;\n }\n\n ::slotted(media-time-range),\n ::slotted(media-clip-selector) {\n flex-grow: 1;\n }\n\n ::slotted([role=\"menu\"]) {\n position: absolute;\n }\n </style>\n\n <slot></slot>\n `\n );\n}\nclass MediaControlBar extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _mediaController, void 0);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n }\n static get observedAttributes() {\n return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n }\n }\n connectedCallback() {\n var _a, _b, _c;\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n mediaControllerId\n ));\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n }\n disconnectedCallback() {\n var _a, _b;\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n}\n_mediaController = new WeakMap();\nMediaControlBar.shadowRootOptions = { mode: \"open\" };\nMediaControlBar.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-control-bar\")) {\n globalThis.customElements.define(\"media-control-bar\", MediaControlBar);\n}\nvar media_control_bar_default = MediaControlBar;\nexport {\n media_control_bar_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _hotKeys, _fullscreenElement, _mediaStore, _mediaStateCallback, _mediaStoreUnsubscribe, _mediaStateEventHandler, _setupDefaultStore, setupDefaultStore_fn, _keyUpHandler, keyUpHandler_fn, _keyDownHandler, keyDownHandler_fn;\nimport { MediaContainer } from \"./media-container.js\";\nimport { document, globalThis } from \"./utils/server-safe-globals.js\";\nimport { AttributeTokenList } from \"./utils/attribute-token-list.js\";\nimport {\n delay,\n stringifyRenditionList,\n stringifyAudioTrackList\n} from \"./utils/utils.js\";\nimport { stringifyTextTrackList } from \"./utils/captions.js\";\nimport {\n MediaUIEvents,\n MediaUIAttributes,\n MediaStateReceiverAttributes,\n AttributeToStateChangeEventMap,\n MediaUIProps\n} from \"./constants.js\";\nimport {\n getBooleanAttr,\n getNumericAttr,\n getStringAttr,\n setBooleanAttr,\n setNumericAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nimport { createMediaStore } from \"./media-store/media-store.js\";\nimport { setLanguage } from \"./utils/i18n.js\";\nconst ButtonPressedKeys = [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Enter\",\n \" \",\n \"f\",\n \"m\",\n \"k\",\n \"c\"\n];\nconst DEFAULT_SEEK_OFFSET = 10;\nconst DEFAULT_VOLUME_STEP = 0.025;\nconst Attributes = {\n DEFAULT_SUBTITLES: \"defaultsubtitles\",\n DEFAULT_STREAM_TYPE: \"defaultstreamtype\",\n DEFAULT_DURATION: \"defaultduration\",\n FULLSCREEN_ELEMENT: \"fullscreenelement\",\n HOTKEYS: \"hotkeys\",\n KEYS_USED: \"keysused\",\n LIVE_EDGE_OFFSET: \"liveedgeoffset\",\n SEEK_TO_LIVE_OFFSET: \"seektoliveoffset\",\n NO_AUTO_SEEK_TO_LIVE: \"noautoseektolive\",\n NO_HOTKEYS: \"nohotkeys\",\n NO_VOLUME_PREF: \"novolumepref\",\n NO_MUTED_PREF: \"nomutedpref\",\n NO_SUBTITLES_LANG_PREF: \"nosubtitleslangpref\",\n NO_DEFAULT_STORE: \"nodefaultstore\",\n KEYBOARD_FORWARD_SEEK_OFFSET: \"keyboardforwardseekoffset\",\n KEYBOARD_BACKWARD_SEEK_OFFSET: \"keyboardbackwardseekoffset\",\n KEYBOARD_UP_VOLUME_STEP: \"keyboardupvolumestep\",\n KEYBOARD_DOWN_VOLUME_STEP: \"keyboarddownvolumestep\",\n LANG: \"lang\"\n};\nclass MediaController extends MediaContainer {\n constructor() {\n super();\n __privateAdd(this, _setupDefaultStore);\n __privateAdd(this, _keyUpHandler);\n __privateAdd(this, _keyDownHandler);\n this.mediaStateReceivers = [];\n this.associatedElementSubscriptions = /* @__PURE__ */ new Map();\n __privateAdd(this, _hotKeys, new AttributeTokenList(this, Attributes.HOTKEYS));\n __privateAdd(this, _fullscreenElement, void 0);\n __privateAdd(this, _mediaStore, void 0);\n __privateAdd(this, _mediaStateCallback, void 0);\n __privateAdd(this, _mediaStoreUnsubscribe, void 0);\n __privateAdd(this, _mediaStateEventHandler, (event) => {\n var _a;\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch(event);\n });\n this.associateElement(this);\n let prevState = {};\n __privateSet(this, _mediaStateCallback, (nextState) => {\n Object.entries(nextState).forEach(([stateName, stateValue]) => {\n if (stateName in prevState && prevState[stateName] === stateValue)\n return;\n this.propagateMediaState(stateName, stateValue);\n const attrName = stateName.toLowerCase();\n const evt = new globalThis.CustomEvent(\n AttributeToStateChangeEventMap[attrName],\n { composed: true, detail: stateValue }\n );\n this.dispatchEvent(evt);\n });\n prevState = nextState;\n });\n this.hasAttribute(Attributes.NO_HOTKEYS) ? this.disableHotkeys() : this.enableHotkeys();\n }\n static get observedAttributes() {\n return super.observedAttributes.concat(\n Attributes.NO_HOTKEYS,\n Attributes.HOTKEYS,\n Attributes.DEFAULT_STREAM_TYPE,\n Attributes.DEFAULT_SUBTITLES,\n Attributes.DEFAULT_DURATION,\n Attributes.NO_MUTED_PREF,\n Attributes.NO_VOLUME_PREF,\n Attributes.LANG\n );\n }\n get mediaStore() {\n return __privateGet(this, _mediaStore);\n }\n set mediaStore(value) {\n var _a, _b;\n if (__privateGet(this, _mediaStore)) {\n (_a = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _a.call(this);\n __privateSet(this, _mediaStoreUnsubscribe, void 0);\n }\n __privateSet(this, _mediaStore, value);\n if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {\n __privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n return;\n }\n __privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n __privateGet(this, _mediaStateCallback)\n ));\n }\n get fullscreenElement() {\n var _a;\n return (_a = __privateGet(this, _fullscreenElement)) != null ? _a : this;\n }\n set fullscreenElement(element) {\n var _a;\n if (this.hasAttribute(Attributes.FULLSCREEN_ELEMENT)) {\n this.removeAttribute(Attributes.FULLSCREEN_ELEMENT);\n }\n __privateSet(this, _fullscreenElement, element);\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n type: \"fullscreenelementchangerequest\",\n detail: this.fullscreenElement\n });\n }\n get defaultSubtitles() {\n return getBooleanAttr(this, Attributes.DEFAULT_SUBTITLES);\n }\n set defaultSubtitles(value) {\n setBooleanAttr(this, Attributes.DEFAULT_SUBTITLES, value);\n }\n get defaultStreamType() {\n return getStringAttr(this, Attributes.DEFAULT_STREAM_TYPE);\n }\n set defaultStreamType(value) {\n setStringAttr(this, Attributes.DEFAULT_STREAM_TYPE, value);\n }\n get defaultDuration() {\n return getNumericAttr(this, Attributes.DEFAULT_DURATION);\n }\n set defaultDuration(value) {\n setNumericAttr(this, Attributes.DEFAULT_DURATION, value);\n }\n get noHotkeys() {\n return getBooleanAttr(this, Attributes.NO_HOTKEYS);\n }\n set noHotkeys(value) {\n setBooleanAttr(this, Attributes.NO_HOTKEYS, value);\n }\n get keysUsed() {\n return getStringAttr(this, Attributes.KEYS_USED);\n }\n set keysUsed(value) {\n setStringAttr(this, Attributes.KEYS_USED, value);\n }\n get liveEdgeOffset() {\n return getNumericAttr(this, Attributes.LIVE_EDGE_OFFSET);\n }\n set liveEdgeOffset(value) {\n setNumericAttr(this, Attributes.LIVE_EDGE_OFFSET, value);\n }\n get noAutoSeekToLive() {\n return getBooleanAttr(this, Attributes.NO_AUTO_SEEK_TO_LIVE);\n }\n set noAutoSeekToLive(value) {\n setBooleanAttr(this, Attributes.NO_AUTO_SEEK_TO_LIVE, value);\n }\n get noVolumePref() {\n return getBooleanAttr(this, Attributes.NO_VOLUME_PREF);\n }\n set noVolumePref(value) {\n setBooleanAttr(this, Attributes.NO_VOLUME_PREF, value);\n }\n get noMutedPref() {\n return getBooleanAttr(this, Attributes.NO_MUTED_PREF);\n }\n set noMutedPref(value) {\n setBooleanAttr(this, Attributes.NO_MUTED_PREF, value);\n }\n get noSubtitlesLangPref() {\n return getBooleanAttr(this, Attributes.NO_SUBTITLES_LANG_PREF);\n }\n set noSubtitlesLangPref(value) {\n setBooleanAttr(this, Attributes.NO_SUBTITLES_LANG_PREF, value);\n }\n get noDefaultStore() {\n return getBooleanAttr(this, Attributes.NO_DEFAULT_STORE);\n }\n set noDefaultStore(value) {\n setBooleanAttr(this, Attributes.NO_DEFAULT_STORE, value);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === Attributes.NO_HOTKEYS) {\n if (newValue !== oldValue && newValue === \"\") {\n if (this.hasAttribute(Attributes.HOTKEYS)) {\n console.warn(\n \"Media Chrome: Both `hotkeys` and `nohotkeys` have been set. All hotkeys will be disabled.\"\n );\n }\n this.disableHotkeys();\n } else if (newValue !== oldValue && newValue === null) {\n this.enableHotkeys();\n }\n } else if (attrName === Attributes.HOTKEYS) {\n __privateGet(this, _hotKeys).value = newValue;\n } else if (attrName === Attributes.DEFAULT_SUBTITLES && newValue !== oldValue) {\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n type: \"optionschangerequest\",\n detail: {\n defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES)\n }\n });\n } else if (attrName === Attributes.DEFAULT_STREAM_TYPE) {\n (_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n type: \"optionschangerequest\",\n detail: {\n defaultStreamType: (_b = this.getAttribute(Attributes.DEFAULT_STREAM_TYPE)) != null ? _b : void 0\n }\n });\n } else if (attrName === Attributes.LIVE_EDGE_OFFSET) {\n (_d = __privateGet(this, _mediaStore)) == null ? void 0 : _d.dispatch({\n type: \"optionschangerequest\",\n detail: {\n liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n seekToLiveOffset: !this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0\n }\n });\n } else if (attrName === Attributes.SEEK_TO_LIVE_OFFSET) {\n (_e = __privateGet(this, _mediaStore)) == null ? void 0 : _e.dispatch({\n type: \"optionschangerequest\",\n detail: {\n seekToLiveOffset: this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.SEEK_TO_LIVE_OFFSET) : void 0\n }\n });\n } else if (attrName === Attributes.NO_AUTO_SEEK_TO_LIVE) {\n (_f = __privateGet(this, _mediaStore)) == null ? void 0 : _f.dispatch({\n type: \"optionschangerequest\",\n detail: {\n noAutoSeekToLive: this.hasAttribute(Attributes.NO_AUTO_SEEK_TO_LIVE)\n }\n });\n } else if (attrName === Attributes.FULLSCREEN_ELEMENT) {\n const el = newValue ? (_g = this.getRootNode()) == null ? void 0 : _g.getElementById(newValue) : void 0;\n __privateSet(this, _fullscreenElement, el);\n (_h = __privateGet(this, _mediaStore)) == null ? void 0 : _h.dispatch({\n type: \"fullscreenelementchangerequest\",\n detail: this.fullscreenElement\n });\n } else if (attrName === Attributes.LANG && newValue !== oldValue) {\n setLanguage(newValue);\n (_i = __privateGet(this, _mediaStore)) == null ? void 0 : _i.dispatch({\n type: \"optionschangerequest\",\n detail: {\n mediaLang: newValue\n }\n });\n } else if (attrName === Attributes.NO_VOLUME_PREF && newValue !== oldValue) {\n (_j = __privateGet(this, _mediaStore)) == null ? void 0 : _j.dispatch({\n type: \"optionschangerequest\",\n detail: {\n noVolumePref: this.hasAttribute(Attributes.NO_VOLUME_PREF)\n }\n });\n } else if (attrName === Attributes.NO_MUTED_PREF && newValue !== oldValue) {\n (_k = __privateGet(this, _mediaStore)) == null ? void 0 : _k.dispatch({\n type: \"optionschangerequest\",\n detail: {\n noMutedPref: this.hasAttribute(Attributes.NO_MUTED_PREF)\n }\n });\n }\n }\n connectedCallback() {\n var _a, _b;\n if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {\n __privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n }\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n type: \"documentelementchangerequest\",\n detail: document\n });\n super.connectedCallback();\n if (__privateGet(this, _mediaStore) && !__privateGet(this, _mediaStoreUnsubscribe)) {\n __privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n __privateGet(this, _mediaStateCallback)\n ));\n }\n this.hasAttribute(Attributes.NO_HOTKEYS) ? this.disableHotkeys() : this.enableHotkeys();\n }\n disconnectedCallback() {\n var _a, _b, _c, _d;\n (_a = super.disconnectedCallback) == null ? void 0 : _a.call(this);\n if (__privateGet(this, _mediaStore)) {\n (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.dispatch({\n type: \"documentelementchangerequest\",\n detail: void 0\n });\n (_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n type: MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n detail: false\n });\n }\n if (__privateGet(this, _mediaStoreUnsubscribe)) {\n (_d = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _d.call(this);\n __privateSet(this, _mediaStoreUnsubscribe, void 0);\n }\n }\n /**\n * @override\n * @param {HTMLMediaElement} media\n */\n mediaSetCallback(media) {\n var _a;\n super.mediaSetCallback(media);\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n type: \"mediaelementchangerequest\",\n detail: media\n });\n if (!media.hasAttribute(\"tabindex\")) {\n media.tabIndex = -1;\n }\n }\n /**\n * @override\n * @param {HTMLMediaElement} media\n */\n mediaUnsetCallback(media) {\n var _a;\n super.mediaUnsetCallback(media);\n (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n type: \"mediaelementchangerequest\",\n detail: void 0\n });\n }\n propagateMediaState(stateName, state) {\n propagateMediaState(this.mediaStateReceivers, stateName, state);\n }\n associateElement(element) {\n if (!element)\n return;\n const { associatedElementSubscriptions } = this;\n if (associatedElementSubscriptions.has(element))\n return;\n const registerMediaStateReceiver = this.registerMediaStateReceiver.bind(this);\n const unregisterMediaStateReceiver = this.unregisterMediaStateReceiver.bind(this);\n const unsubscribe = monitorForMediaStateReceivers(\n element,\n registerMediaStateReceiver,\n unregisterMediaStateReceiver\n );\n Object.values(MediaUIEvents).forEach((eventName) => {\n element.addEventListener(eventName, __privateGet(this, _mediaStateEventHandler));\n });\n associatedElementSubscriptions.set(element, unsubscribe);\n }\n unassociateElement(element) {\n if (!element)\n return;\n const { associatedElementSubscriptions } = this;\n if (!associatedElementSubscriptions.has(element))\n return;\n const unsubscribe = associatedElementSubscriptions.get(element);\n unsubscribe();\n associatedElementSubscriptions.delete(element);\n Object.values(MediaUIEvents).forEach((eventName) => {\n element.removeEventListener(eventName, __privateGet(this, _mediaStateEventHandler));\n });\n }\n registerMediaStateReceiver(el) {\n if (!el)\n return;\n const els = this.mediaStateReceivers;\n const index = els.indexOf(el);\n if (index > -1)\n return;\n els.push(el);\n if (__privateGet(this, _mediaStore)) {\n Object.entries(__privateGet(this, _mediaStore).getState()).forEach(\n ([stateName, stateValue]) => {\n propagateMediaState([el], stateName, stateValue);\n }\n );\n }\n }\n unregisterMediaStateReceiver(el) {\n const els = this.mediaStateReceivers;\n const index = els.indexOf(el);\n if (index < 0)\n return;\n els.splice(index, 1);\n }\n enableHotkeys() {\n this.addEventListener(\"keydown\", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));\n }\n disableHotkeys() {\n this.removeEventListener(\"keydown\", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));\n this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n }\n get hotkeys() {\n return getStringAttr(this, Attributes.HOTKEYS);\n }\n set hotkeys(value) {\n setStringAttr(this, Attributes.HOTKEYS, value);\n }\n keyboardShortcutHandler(e) {\n var _a, _b, _c, _d, _e, _f, _g;\n const target = e.target;\n const keysUsed = ((_c = (_b = (_a = target.getAttribute(Attributes.KEYS_USED)) == null ? void 0 : _a.split(\" \")) != null ? _b : target == null ? void 0 : target.keysUsed) != null ? _c : []).map((key) => key === \"Space\" ? \" \" : key).filter(Boolean);\n if (keysUsed.includes(e.key)) {\n return;\n }\n let eventName, detail, evt;\n if (__privateGet(this, _hotKeys).contains(`no${e.key.toLowerCase()}`))\n return;\n if (e.key === \" \" && __privateGet(this, _hotKeys).contains(`nospace`))\n return;\n switch (e.key) {\n case \" \":\n case \"k\":\n eventName = __privateGet(this, _mediaStore).getState().mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, {\n composed: true,\n bubbles: true\n })\n );\n break;\n case \"m\":\n eventName = this.mediaStore.getState().mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, {\n composed: true,\n bubbles: true\n })\n );\n break;\n case \"f\":\n eventName = this.mediaStore.getState().mediaIsFullscreen ? MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST : MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, {\n composed: true,\n bubbles: true\n })\n );\n break;\n case \"c\":\n this.dispatchEvent(\n new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n { composed: true, bubbles: true }\n )\n );\n break;\n case \"ArrowLeft\": {\n const offsetValue = this.hasAttribute(\n Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET\n ) ? +this.getAttribute(Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n detail = Math.max(\n ((_d = this.mediaStore.getState().mediaCurrentTime) != null ? _d : 0) - offsetValue,\n 0\n );\n evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n break;\n }\n case \"ArrowRight\": {\n const offsetValue = this.hasAttribute(\n Attributes.KEYBOARD_FORWARD_SEEK_OFFSET\n ) ? +this.getAttribute(Attributes.KEYBOARD_FORWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n detail = Math.max(\n ((_e = this.mediaStore.getState().mediaCurrentTime) != null ? _e : 0) + offsetValue,\n 0\n );\n evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n break;\n }\n case \"ArrowUp\": {\n const step = this.hasAttribute(Attributes.KEYBOARD_UP_VOLUME_STEP) ? +this.getAttribute(Attributes.KEYBOARD_UP_VOLUME_STEP) : DEFAULT_VOLUME_STEP;\n detail = Math.min(\n ((_f = this.mediaStore.getState().mediaVolume) != null ? _f : 1) + step,\n 1\n );\n evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_VOLUME_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n break;\n }\n case \"ArrowDown\": {\n const step = this.hasAttribute(Attributes.KEYBOARD_DOWN_VOLUME_STEP) ? +this.getAttribute(Attributes.KEYBOARD_DOWN_VOLUME_STEP) : DEFAULT_VOLUME_STEP;\n detail = Math.max(\n ((_g = this.mediaStore.getState().mediaVolume) != null ? _g : 1) - step,\n 0\n );\n evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_VOLUME_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n break;\n }\n default:\n break;\n }\n }\n}\n_hotKeys = new WeakMap();\n_fullscreenElement = new WeakMap();\n_mediaStore = new WeakMap();\n_mediaStateCallback = new WeakMap();\n_mediaStoreUnsubscribe = new WeakMap();\n_mediaStateEventHandler = new WeakMap();\n_setupDefaultStore = new WeakSet();\nsetupDefaultStore_fn = function() {\n var _a;\n this.mediaStore = createMediaStore({\n media: this.media,\n fullscreenElement: this.fullscreenElement,\n options: {\n defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES),\n defaultDuration: this.hasAttribute(Attributes.DEFAULT_DURATION) ? +this.getAttribute(Attributes.DEFAULT_DURATION) : void 0,\n defaultStreamType: (\n /** @type {import('./media-store/state-mediator.js').StreamTypeValue} */\n (_a = this.getAttribute(\n Attributes.DEFAULT_STREAM_TYPE\n )) != null ? _a : void 0\n ),\n liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n seekToLiveOffset: this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.SEEK_TO_LIVE_OFFSET) : this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n noAutoSeekToLive: this.hasAttribute(Attributes.NO_AUTO_SEEK_TO_LIVE),\n // NOTE: This wasn't updated if it was changed later. Should it be? (CJP)\n noVolumePref: this.hasAttribute(Attributes.NO_VOLUME_PREF),\n noMutedPref: this.hasAttribute(Attributes.NO_MUTED_PREF),\n noSubtitlesLangPref: this.hasAttribute(\n Attributes.NO_SUBTITLES_LANG_PREF\n )\n }\n });\n};\n_keyUpHandler = new WeakSet();\nkeyUpHandler_fn = function(e) {\n const { key } = e;\n if (!ButtonPressedKeys.includes(key)) {\n this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n return;\n }\n this.keyboardShortcutHandler(e);\n};\n_keyDownHandler = new WeakSet();\nkeyDownHandler_fn = function(e) {\n const { metaKey, altKey, key } = e;\n if (metaKey || altKey || !ButtonPressedKeys.includes(key)) {\n this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n return;\n }\n const target = e.target;\n const isRangeInput = target instanceof HTMLElement && (target.tagName.toLowerCase() === \"media-volume-range\" || target.tagName.toLowerCase() === \"media-time-range\");\n if ([\" \", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(key) && !(__privateGet(this, _hotKeys).contains(`no${key.toLowerCase()}`) || key === \" \" && __privateGet(this, _hotKeys).contains(\"nospace\")) && !isRangeInput) {\n e.preventDefault();\n }\n this.addEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn), { once: true });\n};\nconst MEDIA_UI_ATTRIBUTE_NAMES = Object.values(MediaUIAttributes);\nconst MEDIA_UI_PROP_NAMES = Object.values(MediaUIProps);\nconst getMediaUIAttributesFrom = (child) => {\n var _a, _b, _c, _d;\n let { observedAttributes } = child.constructor;\n if (!observedAttributes && ((_a = child.nodeName) == null ? void 0 : _a.includes(\"-\"))) {\n globalThis.customElements.upgrade(child);\n ({ observedAttributes } = child.constructor);\n }\n const mediaChromeAttributesList = (_d = (_c = (_b = child == null ? void 0 : child.getAttribute) == null ? void 0 : _b.call(child, MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES)) == null ? void 0 : _c.split) == null ? void 0 : _d.call(_c, /\\s+/);\n if (!Array.isArray(observedAttributes || mediaChromeAttributesList))\n return [];\n return (observedAttributes || mediaChromeAttributesList).filter(\n (attrName) => MEDIA_UI_ATTRIBUTE_NAMES.includes(attrName)\n );\n};\nconst hasMediaUIProps = (mediaStateReceiverCandidate) => {\n var _a, _b;\n if (((_a = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _a.includes(\"-\")) && !!globalThis.customElements.get(\n (_b = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _b.toLowerCase()\n ) && !(mediaStateReceiverCandidate instanceof globalThis.customElements.get(\n mediaStateReceiverCandidate.nodeName.toLowerCase()\n ))) {\n globalThis.customElements.upgrade(mediaStateReceiverCandidate);\n }\n return MEDIA_UI_PROP_NAMES.some(\n (propName) => propName in mediaStateReceiverCandidate\n );\n};\nconst isMediaStateReceiver = (child) => {\n return hasMediaUIProps(child) || !!getMediaUIAttributesFrom(child).length;\n};\nconst serializeTuple = (tuple) => {\n var _a;\n return (_a = tuple == null ? void 0 : tuple.join) == null ? void 0 : _a.call(tuple, \":\");\n};\nconst CustomAttrSerializer = {\n [MediaUIAttributes.MEDIA_SUBTITLES_LIST]: stringifyTextTrackList,\n [MediaUIAttributes.MEDIA_SUBTITLES_SHOWING]: stringifyTextTrackList,\n [MediaUIAttributes.MEDIA_SEEKABLE]: serializeTuple,\n [MediaUIAttributes.MEDIA_BUFFERED]: (tuples) => tuples == null ? void 0 : tuples.map(serializeTuple).join(\" \"),\n [MediaUIAttributes.MEDIA_PREVIEW_COORDS]: (coords) => coords == null ? void 0 : coords.join(\" \"),\n [MediaUIAttributes.MEDIA_RENDITION_LIST]: stringifyRenditionList,\n [MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST]: stringifyAudioTrackList\n};\nconst setAttr = async (child, attrName, attrValue) => {\n var _a, _b;\n if (!child.isConnected) {\n await delay(0);\n }\n if (typeof attrValue === \"boolean\" || attrValue == null) {\n return setBooleanAttr(child, attrName, attrValue);\n }\n if (typeof attrValue === \"number\") {\n return setNumericAttr(child, attrName, attrValue);\n }\n if (typeof attrValue === \"string\") {\n return setStringAttr(child, attrName, attrValue);\n }\n if (Array.isArray(attrValue) && !attrValue.length) {\n return child.removeAttribute(attrName);\n }\n const val = (_b = (_a = CustomAttrSerializer[attrName]) == null ? void 0 : _a.call(CustomAttrSerializer, attrValue)) != null ? _b : attrValue;\n return child.setAttribute(attrName, val);\n};\nconst isMediaSlotElementDescendant = (el) => {\n var _a;\n return !!((_a = el.closest) == null ? void 0 : _a.call(el, '*[slot=\"media\"]'));\n};\nconst traverseForMediaStateReceivers = (rootNode, mediaStateReceiverCallback) => {\n if (isMediaSlotElementDescendant(rootNode)) {\n return;\n }\n const traverseForMediaStateReceiversSync = (rootNode2, mediaStateReceiverCallback2) => {\n var _a, _b;\n if (isMediaStateReceiver(rootNode2)) {\n mediaStateReceiverCallback2(rootNode2);\n }\n const { children = [] } = rootNode2 != null ? rootNode2 : {};\n const shadowChildren = (_b = (_a = rootNode2 == null ? void 0 : rootNode2.shadowRoot) == null ? void 0 : _a.children) != null ? _b : [];\n const allChildren = [...children, ...shadowChildren];\n allChildren.forEach(\n (child) => traverseForMediaStateReceivers(\n child,\n mediaStateReceiverCallback2\n )\n );\n };\n const name = rootNode == null ? void 0 : rootNode.nodeName.toLowerCase();\n if (name.includes(\"-\") && !isMediaStateReceiver(rootNode)) {\n globalThis.customElements.whenDefined(name).then(() => {\n traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n });\n return;\n }\n traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n};\nconst propagateMediaState = (els, stateName, val) => {\n els.forEach((el) => {\n if (stateName in el) {\n el[stateName] = val;\n return;\n }\n const relevantAttrs = getMediaUIAttributesFrom(el);\n const attrName = stateName.toLowerCase();\n if (!relevantAttrs.includes(attrName))\n return;\n setAttr(el, attrName, val);\n });\n};\nconst monitorForMediaStateReceivers = (rootNode, registerMediaStateReceiver, unregisterMediaStateReceiver) => {\n traverseForMediaStateReceivers(rootNode, registerMediaStateReceiver);\n const registerMediaStateReceiverHandler = (evt) => {\n var _a;\n const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;\n registerMediaStateReceiver(el);\n };\n const unregisterMediaStateReceiverHandler = (evt) => {\n var _a;\n const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;\n unregisterMediaStateReceiver(el);\n };\n rootNode.addEventListener(\n MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n registerMediaStateReceiverHandler\n );\n rootNode.addEventListener(\n MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n unregisterMediaStateReceiverHandler\n );\n const mutationCallback = (mutationsList) => {\n mutationsList.forEach((mutationRecord) => {\n const {\n addedNodes = [],\n removedNodes = [],\n type,\n target,\n attributeName\n } = mutationRecord;\n if (type === \"childList\") {\n Array.prototype.forEach.call(\n addedNodes,\n (node) => traverseForMediaStateReceivers(\n node,\n registerMediaStateReceiver\n )\n );\n Array.prototype.forEach.call(\n removedNodes,\n (node) => traverseForMediaStateReceivers(\n node,\n unregisterMediaStateReceiver\n )\n );\n } else if (type === \"attributes\" && attributeName === MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES) {\n if (isMediaStateReceiver(target)) {\n registerMediaStateReceiver(target);\n } else {\n unregisterMediaStateReceiver(target);\n }\n }\n });\n };\n let prevSlotted = [];\n const slotChangeHandler = (event) => {\n const slotEl = event.target;\n if (slotEl.name === \"media\")\n return;\n prevSlotted.forEach(\n (node) => traverseForMediaStateReceivers(node, unregisterMediaStateReceiver)\n );\n prevSlotted = [\n ...slotEl.assignedElements({ flatten: true })\n ];\n prevSlotted.forEach(\n (node) => traverseForMediaStateReceivers(node, registerMediaStateReceiver)\n );\n };\n rootNode.addEventListener(\"slotchange\", slotChangeHandler);\n const observer = new MutationObserver(mutationCallback);\n observer.observe(rootNode, {\n childList: true,\n attributes: true,\n subtree: true\n });\n const unsubscribe = () => {\n traverseForMediaStateReceivers(rootNode, unregisterMediaStateReceiver);\n rootNode.removeEventListener(\"slotchange\", slotChangeHandler);\n observer.disconnect();\n rootNode.removeEventListener(\n MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n registerMediaStateReceiverHandler\n );\n rootNode.removeEventListener(\n MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n unregisterMediaStateReceiverHandler\n );\n };\n return unsubscribe;\n};\nif (!globalThis.customElements.get(\"media-controller\")) {\n globalThis.customElements.define(\"media-controller\", MediaController);\n}\nvar media_controller_default = MediaController;\nexport {\n Attributes,\n MediaController,\n media_controller_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nfunction getSlotTemplateHTML(_attrs, props) {\n return (\n /*html*/\n `\n <slot>${formatTime(props.mediaDuration)}</slot>\n `\n );\n}\nclass MediaDurationDisplay extends MediaTextDisplay {\n constructor() {\n var _a;\n super();\n __privateAdd(this, _slot, void 0);\n __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n __privateGet(this, _slot).textContent = formatTime((_a = this.mediaDuration) != null ? _a : 0);\n }\n static get observedAttributes() {\n return [...super.observedAttributes, MediaUIAttributes.MEDIA_DURATION];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === MediaUIAttributes.MEDIA_DURATION) {\n __privateGet(this, _slot).textContent = formatTime(+newValue);\n }\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n /**\n * @type {number | undefined} In seconds\n */\n get mediaDuration() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n }\n set mediaDuration(time) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n }\n}\n_slot = new WeakMap();\nMediaDurationDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-duration-display\")) {\n globalThis.customElements.define(\n \"media-duration-display\",\n MediaDurationDisplay\n );\n}\nvar media_duration_display_default = MediaDurationDisplay;\nexport {\n media_duration_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaError;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { formatError } from \"./labels/labels.js\";\nimport { MediaChromeDialog } from \"./media-chrome-dialog.js\";\nimport {\n getNumericAttr,\n getStringAttr,\n setNumericAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nfunction getSlotTemplateHTML(attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n background: rgb(20 20 30 / .8);\n }\n\n #content {\n display: block;\n padding: 1.2em 1.5em;\n }\n\n h3,\n p {\n margin-block: 0 .3em;\n }\n </style>\n <slot name=\"error-${attrs.mediaerrorcode}\" id=\"content\">\n ${formatErrorMessage({ code: +attrs.mediaerrorcode, message: attrs.mediaerrormessage })}\n </slot>\n `\n );\n}\nfunction shouldOpenErrorDialog(error) {\n return error.code && formatError(error) !== null;\n}\nfunction formatErrorMessage(error) {\n var _a;\n const { title, message } = (_a = formatError(error)) != null ? _a : {};\n let html = \"\";\n if (title)\n html += `<slot name=\"error-${error.code}-title\"><h3>${title}</h3></slot>`;\n if (message)\n html += `<slot name=\"error-${error.code}-message\"><p>${message}</p></slot>`;\n return html;\n}\nconst observedAttributes = [\n MediaUIAttributes.MEDIA_ERROR_CODE,\n MediaUIAttributes.MEDIA_ERROR_MESSAGE\n];\nclass MediaErrorDialog extends MediaChromeDialog {\n constructor() {\n super(...arguments);\n __privateAdd(this, _mediaError, null);\n }\n static get observedAttributes() {\n return [...super.observedAttributes, ...observedAttributes];\n }\n formatErrorMessage(error) {\n return this.constructor.formatErrorMessage(error);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a;\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (!observedAttributes.includes(attrName))\n return;\n const mediaError = (_a = this.mediaError) != null ? _a : {\n code: this.mediaErrorCode,\n message: this.mediaErrorMessage\n };\n this.open = shouldOpenErrorDialog(mediaError);\n if (this.open) {\n this.shadowRoot.querySelector(\"slot\").name = `error-${this.mediaErrorCode}`;\n this.shadowRoot.querySelector(\"#content\").innerHTML = this.formatErrorMessage(mediaError);\n }\n }\n get mediaError() {\n return __privateGet(this, _mediaError);\n }\n set mediaError(value) {\n __privateSet(this, _mediaError, value);\n }\n get mediaErrorCode() {\n return getNumericAttr(this, \"mediaerrorcode\");\n }\n set mediaErrorCode(value) {\n setNumericAttr(this, \"mediaerrorcode\", value);\n }\n get mediaErrorMessage() {\n return getStringAttr(this, \"mediaerrormessage\");\n }\n set mediaErrorMessage(value) {\n setStringAttr(this, \"mediaerrormessage\", value);\n }\n}\n_mediaError = new WeakMap();\nMediaErrorDialog.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaErrorDialog.formatErrorMessage = formatErrorMessage;\nif (!globalThis.customElements.get(\"media-error-dialog\")) {\n globalThis.customElements.define(\"media-error-dialog\", MediaErrorDialog);\n}\nvar media_error_dialog_default = MediaErrorDialog;\nexport {\n MediaErrorDialog,\n media_error_dialog_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _lastActionEvent;\nimport { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getBooleanAttr,\n getStringAttr,\n setBooleanAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nconst enterFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M16 3v2.5h3.5V9H22V3h-6ZM4 9h2.5V5.5H10V3H4v6Zm15.5 9.5H16V21h6v-6h-2.5v3.5ZM6.5 15H4v6h6v-2.5H6.5V15Z\"/>\n</svg>`;\nconst exitFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M18.5 6.5V3H16v6h6V6.5h-3.5ZM16 21h2.5v-3.5H22V15h-6v6ZM4 17.5h3.5V21H10v-6H4v2.5Zm3.5-11H4V9h6V3H7.5v3.5Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) slot[name=icon] slot:not([name=exit]) {\n display: none !important;\n }\n\n ${/* Double negative, but safer if display doesn't equal 'block' */\n \"\"}\n :host(:not([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}])) slot[name=icon] slot:not([name=enter]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) slot[name=tooltip-enter],\n :host(:not([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}])) slot[name=tooltip-exit] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"enter\">${enterFullscreenIcon}</slot>\n <slot name=\"exit\">${exitFullscreenIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-enter\">${t(\"Enter fullscreen mode\")}</slot>\n <slot name=\"tooltip-exit\">${t(\"Exit fullscreen mode\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const label = el.mediaIsFullscreen ? t(\"exit fullscreen mode\") : t(\"enter fullscreen mode\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaFullscreenButton extends MediaChromeButton {\n constructor() {\n super(...arguments);\n __privateAdd(this, _lastActionEvent, null);\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_IS_FULLSCREEN,\n MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_IS_FULLSCREEN) {\n updateAriaLabel(this);\n }\n }\n /**\n * @type {string | undefined} Fullscreen unavailability state\n */\n get mediaFullscreenUnavailable() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE);\n }\n set mediaFullscreenUnavailable(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE, value);\n }\n /**\n * @type {boolean} Whether fullscreen is available\n */\n get mediaIsFullscreen() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN);\n }\n set mediaIsFullscreen(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN, value);\n }\n handleClick(e) {\n __privateSet(this, _lastActionEvent, e);\n const isPointerEvent = __privateGet(this, _lastActionEvent) instanceof PointerEvent;\n const event = this.mediaIsFullscreen ? new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST,\n { composed: true, bubbles: true }\n ) : new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST,\n { composed: true, bubbles: true, detail: isPointerEvent }\n );\n this.dispatchEvent(event);\n }\n}\n_lastActionEvent = new WeakMap();\nMediaFullscreenButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaFullscreenButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-fullscreen-button\")) {\n globalThis.customElements.define(\n \"media-fullscreen-button\",\n MediaFullscreenButton\n );\n}\nvar media_fullscreen_button_default = MediaFullscreenButton;\nexport {\n media_fullscreen_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaController;\nimport {\n MediaUIAttributes,\n MediaUIEvents,\n MediaStateReceiverAttributes,\n PointerTypes\n} from \"./constants.js\";\nimport {\n closestComposedNode,\n getBooleanAttr,\n namedNodeMapToObject,\n setBooleanAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n display: var(--media-control-display, var(--media-gesture-receiver-display, inline-block));\n box-sizing: border-box;\n }\n </style>\n `\n );\n}\nclass MediaGestureReceiver extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _mediaController, void 0);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n }\n // NOTE: Currently \"baking in\" actions + attrs until we come up with\n // a more robust architecture (CJP)\n static get observedAttributes() {\n return [\n MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n MediaUIAttributes.MEDIA_PAUSED\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n }\n }\n connectedCallback() {\n var _a, _b, _c, _d;\n this.tabIndex = -1;\n this.setAttribute(\"aria-hidden\", \"true\");\n __privateSet(this, _mediaController, getMediaControllerEl(this));\n if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.associateElement) == null ? void 0 : _b.call(_a, this);\n }\n (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.addEventListener(\"pointerdown\", this);\n (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.addEventListener(\"click\", this);\n }\n disconnectedCallback() {\n var _a, _b, _c, _d;\n if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n }\n (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.removeEventListener(\"pointerdown\", this);\n (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.removeEventListener(\"click\", this);\n __privateSet(this, _mediaController, null);\n }\n handleEvent(event) {\n var _a;\n const composedTarget = (_a = event.composedPath()) == null ? void 0 : _a[0];\n const allowList = [\"video\", \"media-controller\"];\n if (!allowList.includes(composedTarget == null ? void 0 : composedTarget.localName))\n return;\n if (event.type === \"pointerdown\") {\n this._pointerType = event.pointerType;\n } else if (event.type === \"click\") {\n const { clientX, clientY } = event;\n const { left, top, width, height } = this.getBoundingClientRect();\n const x = clientX - left;\n const y = clientY - top;\n if (x < 0 || y < 0 || x > width || y > height || // In case this element has no dimensions (or display: none) return.\n width === 0 && height === 0) {\n return;\n }\n const pointerType = this._pointerType || \"mouse\";\n this._pointerType = void 0;\n if (pointerType === PointerTypes.TOUCH) {\n this.handleTap(event);\n return;\n } else if (pointerType === PointerTypes.MOUSE || pointerType === PointerTypes.PEN) {\n this.handleMouseClick(event);\n return;\n }\n }\n }\n /**\n * @type {boolean} Is the media paused\n */\n get mediaPaused() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n }\n set mediaPaused(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n }\n // NOTE: Currently \"baking in\" actions + attrs until we come up with\n // a more robust architecture (CJP)\n /**\n * @abstract\n * @argument {Event} e\n */\n handleTap(e) {\n }\n // eslint-disable-line\n // eslint-disable-next-line\n handleMouseClick(e) {\n const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n );\n }\n}\n_mediaController = new WeakMap();\nMediaGestureReceiver.shadowRootOptions = { mode: \"open\" };\nMediaGestureReceiver.getTemplateHTML = getTemplateHTML;\nfunction getMediaControllerEl(controlEl) {\n var _a;\n const mediaControllerId = controlEl.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n return (_a = controlEl.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId);\n }\n return closestComposedNode(controlEl, \"media-controller\");\n}\nif (!globalThis.customElements.get(\"media-gesture-receiver\")) {\n globalThis.customElements.define(\n \"media-gesture-receiver\",\n MediaGestureReceiver\n );\n}\nvar media_gesture_receiver_default = MediaGestureReceiver;\nexport {\n media_gesture_receiver_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getBooleanAttr, setBooleanAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst { MEDIA_TIME_IS_LIVE, MEDIA_PAUSED } = MediaUIAttributes;\nconst { MEDIA_SEEK_TO_LIVE_REQUEST, MEDIA_PLAY_REQUEST } = MediaUIEvents;\nconst indicatorSVG = '<svg viewBox=\"0 0 6 12\"><circle cx=\"3\" cy=\"6\" r=\"2\"></circle></svg>';\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host { --media-tooltip-display: none; }\n \n slot[name=indicator] > *,\n :host ::slotted([slot=indicator]) {\n ${/* Override styles for icon-only buttons */\n \"\"}\n min-width: auto;\n fill: var(--media-live-button-icon-color, rgb(140, 140, 140));\n color: var(--media-live-button-icon-color, rgb(140, 140, 140));\n }\n\n :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) slot[name=indicator] > *,\n :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) ::slotted([slot=indicator]) {\n fill: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n color: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n }\n\n :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) {\n cursor: var(--media-cursor, not-allowed);\n }\n\n slot[name=text]{\n text-transform: uppercase;\n }\n\n </style>\n\n <slot name=\"indicator\">${indicatorSVG}</slot>\n ${/*\n A new line between spacer and text creates inconsistent spacing\n between slotted items and default slots.\n */\n \"\"}\n <slot name=\"spacer\"> </slot><slot name=\"text\">${t(\"live\")}</slot>\n `\n );\n}\nconst updateAriaAttributes = (el) => {\n var _a;\n const isPausedOrNotLive = el.mediaPaused || !el.mediaTimeIsLive;\n const label = isPausedOrNotLive ? t(\"seek to live\") : t(\"playing live\");\n el.setAttribute(\"aria-label\", label);\n const textSlot = (_a = el.shadowRoot) == null ? void 0 : _a.querySelector('slot[name=\"text\"]');\n if (textSlot)\n textSlot.textContent = t(\"live\");\n isPausedOrNotLive ? el.removeAttribute(\"aria-disabled\") : el.setAttribute(\"aria-disabled\", \"true\");\n};\nclass MediaLiveButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MEDIA_TIME_IS_LIVE,\n MEDIA_PAUSED\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaAttributes(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n updateAriaAttributes(this);\n }\n /**\n * @type {boolean} Is the media paused\n */\n get mediaPaused() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n }\n set mediaPaused(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n }\n /**\n * @type {boolean} Is the media playback currently live\n */\n get mediaTimeIsLive() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE);\n }\n set mediaTimeIsLive(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE, value);\n }\n handleClick() {\n if (!this.mediaPaused && this.mediaTimeIsLive)\n return;\n this.dispatchEvent(\n new globalThis.CustomEvent(MEDIA_SEEK_TO_LIVE_REQUEST, {\n composed: true,\n bubbles: true\n })\n );\n if (this.hasAttribute(MEDIA_PAUSED)) {\n this.dispatchEvent(\n new globalThis.CustomEvent(MEDIA_PLAY_REQUEST, {\n composed: true,\n bubbles: true\n })\n );\n }\n }\n}\nMediaLiveButton.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-live-button\")) {\n globalThis.customElements.define(\"media-live-button\", MediaLiveButton);\n}\nvar media_live_button_default = MediaLiveButton;\nexport {\n media_live_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaController, _delay;\nimport {\n MediaUIAttributes,\n MediaStateReceiverAttributes\n} from \"./constants.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n getBooleanAttr,\n setBooleanAttr,\n getOrInsertCSSRule,\n setStringAttr,\n getStringAttr,\n namedNodeMapToObject\n} from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n LOADING_DELAY: \"loadingdelay\",\n NO_AUTOHIDE: \"noautohide\"\n};\nconst DEFAULT_LOADING_DELAY = 500;\nconst loadingIndicatorIcon = `\n<svg aria-hidden=\"true\" viewBox=\"0 0 100 100\">\n <path d=\"M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50\">\n <animateTransform\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n dur=\"1s\"\n from=\"0 50 50\"\n to=\"360 50 50\"\n repeatCount=\"indefinite\" />\n </path>\n</svg>\n`;\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n display: var(--media-control-display, var(--media-loading-indicator-display, inline-block));\n vertical-align: middle;\n box-sizing: border-box;\n --_loading-indicator-delay: var(--media-loading-indicator-transition-delay, ${DEFAULT_LOADING_DELAY}ms);\n }\n\n #status {\n color: rgba(0,0,0,0);\n width: 0px;\n height: 0px;\n }\n\n :host slot[name=icon] > *,\n :host ::slotted([slot=icon]) {\n opacity: var(--media-loading-indicator-opacity, 0);\n transition: opacity 0.15s;\n }\n\n :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=icon] > *,\n :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) ::slotted([slot=icon]) {\n opacity: var(--media-loading-indicator-opacity, 1);\n transition: opacity 0.15s var(--_loading-indicator-delay);\n }\n\n :host #status {\n visibility: var(--media-loading-indicator-opacity, hidden);\n transition: visibility 0.15s;\n }\n\n :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) #status {\n visibility: var(--media-loading-indicator-opacity, visible);\n transition: visibility 0.15s var(--_loading-indicator-delay);\n }\n\n svg, img, ::slotted(svg), ::slotted(img) {\n width: var(--media-loading-indicator-icon-width);\n height: var(--media-loading-indicator-icon-height, 100px);\n fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n vertical-align: middle;\n }\n </style>\n\n <slot name=\"icon\">${loadingIndicatorIcon}</slot>\n <div id=\"status\" role=\"status\" aria-live=\"polite\">${t(\"media loading\")}</div>\n `\n );\n}\nclass MediaLoadingIndicator extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _mediaController, void 0);\n __privateAdd(this, _delay, DEFAULT_LOADING_DELAY);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n }\n static get observedAttributes() {\n return [\n MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n MediaUIAttributes.MEDIA_PAUSED,\n MediaUIAttributes.MEDIA_LOADING,\n Attributes.LOADING_DELAY\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === Attributes.LOADING_DELAY && oldValue !== newValue) {\n this.loadingDelay = Number(newValue);\n } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n }\n }\n connectedCallback() {\n var _a, _b, _c;\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n mediaControllerId\n ));\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n }\n disconnectedCallback() {\n var _a, _b;\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n /**\n * Delay in ms\n */\n get loadingDelay() {\n return __privateGet(this, _delay);\n }\n set loadingDelay(delay) {\n __privateSet(this, _delay, delay);\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"--_loading-indicator-delay\",\n `var(--media-loading-indicator-transition-delay, ${delay}ms)`\n );\n }\n /**\n * Is the media paused\n */\n get mediaPaused() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n }\n set mediaPaused(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n }\n /**\n * Is the media loading\n */\n get mediaLoading() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n }\n set mediaLoading(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n }\n get mediaController() {\n return getStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER);\n }\n set mediaController(value) {\n setStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER, value);\n }\n get noAutohide() {\n return getBooleanAttr(this, Attributes.NO_AUTOHIDE);\n }\n set noAutohide(value) {\n setBooleanAttr(this, Attributes.NO_AUTOHIDE, value);\n }\n}\n_mediaController = new WeakMap();\n_delay = new WeakMap();\nMediaLoadingIndicator.shadowRootOptions = { mode: \"open\" };\nMediaLoadingIndicator.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-loading-indicator\")) {\n globalThis.customElements.define(\n \"media-loading-indicator\",\n MediaLoadingIndicator\n );\n}\nvar media_loading_indicator_default = MediaLoadingIndicator;\nexport {\n Attributes,\n media_loading_indicator_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport { getStringAttr, setStringAttr } from \"./utils/element-utils.js\";\nconst offIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M16.5 12A4.5 4.5 0 0 0 14 8v2.18l2.45 2.45a4.22 4.22 0 0 0 .05-.63Zm2.5 0a6.84 6.84 0 0 1-.54 2.64L20 16.15A8.8 8.8 0 0 0 21 12a9 9 0 0 0-7-8.77v2.06A7 7 0 0 1 19 12ZM4.27 3 3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25A6.92 6.92 0 0 1 14 18.7v2.06A9 9 0 0 0 17.69 19l2 2.05L21 19.73l-9-9L4.27 3ZM12 4 9.91 6.09 12 8.18V4Z\"/>\n</svg>`;\nconst lowIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4Z\"/>\n</svg>`;\nconst highIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4ZM14 3.23v2.06a7 7 0 0 1 0 13.42v2.06a9 9 0 0 0 0-17.54Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host(:not([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}])) slot[name=icon] slot:not([name=high]),\n :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=high]) slot[name=icon] slot:not([name=high]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off]) slot[name=icon] slot:not([name=off]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=low]) slot[name=icon] slot:not([name=low]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=medium]) slot[name=icon] slot:not([name=medium]) {\n display: none !important;\n }\n\n :host(:not([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off])) slot[name=tooltip-unmute],\n :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off]) slot[name=tooltip-mute] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"off\">${offIcon}</slot>\n <slot name=\"low\">${lowIcon}</slot>\n <slot name=\"medium\">${lowIcon}</slot>\n <slot name=\"high\">${highIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-mute\">${t(\"Mute\")}</slot>\n <slot name=\"tooltip-unmute\">${t(\"Unmute\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const muted = el.mediaVolumeLevel === \"off\";\n const label = muted ? t(\"unmute\") : t(\"mute\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaMuteButton extends MediaChromeButton {\n static get observedAttributes() {\n return [...super.observedAttributes, MediaUIAttributes.MEDIA_VOLUME_LEVEL];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_VOLUME_LEVEL) {\n updateAriaLabel(this);\n }\n }\n /**\n * @type {string | undefined}\n */\n get mediaVolumeLevel() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL);\n }\n set mediaVolumeLevel(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL, value);\n }\n handleClick() {\n const eventName = this.mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n );\n }\n}\nMediaMuteButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaMuteButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-mute-button\")) {\n globalThis.customElements.define(\"media-mute-button\", MediaMuteButton);\n}\nvar media_mute_button_default = MediaMuteButton;\nexport {\n media_mute_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getBooleanAttr,\n getStringAttr,\n setBooleanAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nconst pipIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 28 24\">\n <path d=\"M24 3H4a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1Zm-1 16H5V5h18v14Zm-3-8h-7v5h7v-5Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([${MediaUIAttributes.MEDIA_IS_PIP}]) slot[name=icon] slot:not([name=exit]) {\n display: none !important;\n }\n\n :host(:not([${MediaUIAttributes.MEDIA_IS_PIP}])) slot[name=icon] slot:not([name=enter]) {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_IS_PIP}]) slot[name=tooltip-enter],\n :host(:not([${MediaUIAttributes.MEDIA_IS_PIP}])) slot[name=tooltip-exit] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"enter\">${pipIcon}</slot>\n <slot name=\"exit\">${pipIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-enter\">${t(\"Enter picture in picture mode\")}</slot>\n <slot name=\"tooltip-exit\">${t(\"Exit picture in picture mode\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const label = el.mediaIsPip ? t(\"exit picture in picture mode\") : t(\"enter picture in picture mode\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaPipButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_IS_PIP,\n MediaUIAttributes.MEDIA_PIP_UNAVAILABLE\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_IS_PIP) {\n updateAriaLabel(this);\n }\n }\n /**\n * @type {string | undefined} Pip unavailability state\n */\n get mediaPipUnavailable() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE);\n }\n set mediaPipUnavailable(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE, value);\n }\n /**\n * @type {boolean} Is the media currently playing picture-in-picture\n */\n get mediaIsPip() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP);\n }\n set mediaIsPip(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP, value);\n }\n handleClick() {\n const eventName = this.mediaIsPip ? MediaUIEvents.MEDIA_EXIT_PIP_REQUEST : MediaUIEvents.MEDIA_ENTER_PIP_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n );\n }\n}\nMediaPipButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPipButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-pip-button\")) {\n globalThis.customElements.define(\"media-pip-button\", MediaPipButton);\n}\nvar media_pip_button_default = MediaPipButton;\nexport {\n media_pip_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport { getBooleanAttr, setBooleanAttr } from \"./utils/element-utils.js\";\nconst playIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"m6 21 15-9L6 3v18Z\"/>\n</svg>`;\nconst pauseIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M6 20h4V4H6v16Zm8-16v16h4V4h-4Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host([${MediaUIAttributes.MEDIA_PAUSED}]) slot[name=pause],\n :host(:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=play] {\n display: none !important;\n }\n\n :host([${MediaUIAttributes.MEDIA_PAUSED}]) slot[name=tooltip-pause],\n :host(:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=tooltip-play] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"play\">${playIcon}</slot>\n <slot name=\"pause\">${pauseIcon}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return (\n /*html*/\n `\n <slot name=\"tooltip-play\">${t(\"Play\")}</slot>\n <slot name=\"tooltip-pause\">${t(\"Pause\")}</slot>\n `\n );\n}\nconst updateAriaLabel = (el) => {\n const label = el.mediaPaused ? t(\"play\") : t(\"pause\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaPlayButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PAUSED,\n MediaUIAttributes.MEDIA_ENDED\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_PAUSED || attrName === MediaUIAttributes.MEDIA_LANG) {\n updateAriaLabel(this);\n }\n }\n /**\n * Is the media paused\n */\n get mediaPaused() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n }\n set mediaPaused(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n }\n handleClick() {\n const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n this.dispatchEvent(\n new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n );\n }\n}\nMediaPlayButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPlayButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-play-button\")) {\n globalThis.customElements.define(\"media-play-button\", MediaPlayButton);\n}\nvar media_play_button_default = MediaPlayButton;\nexport {\n MediaPlayButton,\n media_play_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar _rates;\nimport { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { AttributeTokenList } from \"./utils/attribute-token-list.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n RATES: \"rates\"\n};\nconst DEFAULT_RATES = [1, 1.2, 1.5, 1.7, 2];\nconst DEFAULT_RATE = 1;\nfunction getSlotTemplateHTML(attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n min-width: 5ch;\n padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n }\n </style>\n <slot name=\"icon\">${attrs[\"mediaplaybackrate\"] || DEFAULT_RATE}x</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Playback rate\");\n}\nclass MediaPlaybackRateButton extends MediaChromeButton {\n constructor() {\n var _a;\n super();\n __privateAdd(this, _rates, new AttributeTokenList(this, Attributes.RATES, {\n defaultValue: DEFAULT_RATES\n }));\n this.container = this.shadowRoot.querySelector('slot[name=\"icon\"]');\n this.container.innerHTML = `${(_a = this.mediaPlaybackRate) != null ? _a : DEFAULT_RATE}x`;\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n Attributes.RATES\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === Attributes.RATES) {\n __privateGet(this, _rates).value = newValue;\n }\n if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE) {\n const newPlaybackRate = newValue ? +newValue : Number.NaN;\n const playbackRate = !Number.isNaN(newPlaybackRate) ? newPlaybackRate : DEFAULT_RATE;\n this.container.innerHTML = `${playbackRate}x`;\n this.setAttribute(\n \"aria-label\",\n t(\"Playback rate {playbackRate}\", { playbackRate })\n );\n }\n }\n /**\n * Get the playback rates for the button.\n */\n get rates() {\n return __privateGet(this, _rates);\n }\n /**\n * Set the playback rates for the button.\n * For React 19+ compatibility, accept a string of space-separated rates.\n */\n set rates(value) {\n if (!value) {\n __privateGet(this, _rates).value = \"\";\n } else if (Array.isArray(value)) {\n __privateGet(this, _rates).value = value.join(\" \");\n } else if (typeof value === \"string\") {\n __privateGet(this, _rates).value = value;\n }\n }\n /**\n * @type {number} The current playback rate\n */\n get mediaPlaybackRate() {\n return getNumericAttr(\n this,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n DEFAULT_RATE\n );\n }\n set mediaPlaybackRate(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n }\n handleClick() {\n var _a, _b;\n const availableRates = Array.from(__privateGet(this, _rates).values(), (str) => +str).sort(\n (a, b) => a - b\n );\n const detail = (_b = (_a = availableRates.find((r) => r > this.mediaPlaybackRate)) != null ? _a : availableRates[0]) != null ? _b : DEFAULT_RATE;\n const evt = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n { composed: true, bubbles: true, detail }\n );\n this.dispatchEvent(evt);\n }\n}\n_rates = new WeakMap();\nMediaPlaybackRateButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPlaybackRateButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-playback-rate-button\")) {\n globalThis.customElements.define(\n \"media-playback-rate-button\",\n MediaPlaybackRateButton\n );\n}\nvar media_playback_rate_button_default = MediaPlaybackRateButton;\nexport {\n Attributes,\n DEFAULT_RATE,\n DEFAULT_RATES,\n media_playback_rate_button_default as default\n};\n","import { globalThis } from \"./utils/server-safe-globals.js\";\nimport { getStringAttr, namedNodeMapToObject, setStringAttr } from \"./utils/element-utils.js\";\nconst Attributes = {\n PLACEHOLDER_SRC: \"placeholdersrc\",\n SRC: \"src\"\n};\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n pointer-events: none;\n display: var(--media-poster-image-display, inline-block);\n box-sizing: border-box;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n min-width: 100%;\n min-height: 100%;\n background-repeat: no-repeat;\n background-position: var(--media-poster-image-background-position, var(--media-object-position, center));\n background-size: var(--media-poster-image-background-size, var(--media-object-fit, contain));\n object-fit: var(--media-object-fit, contain);\n object-position: var(--media-object-position, center);\n }\n </style>\n\n <img part=\"poster img\" aria-hidden=\"true\" id=\"image\"/>\n `\n );\n}\nconst unsetBackgroundImage = (el) => {\n el.style.removeProperty(\"background-image\");\n};\nconst setBackgroundImage = (el, image) => {\n el.style[\"background-image\"] = `url('${image}')`;\n};\nclass MediaPosterImage extends globalThis.HTMLElement {\n static get observedAttributes() {\n return [Attributes.PLACEHOLDER_SRC, Attributes.SRC];\n }\n constructor() {\n super();\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n this.image = this.shadowRoot.querySelector(\"#image\");\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === Attributes.SRC) {\n if (newValue == null) {\n this.image.removeAttribute(Attributes.SRC);\n } else {\n this.image.setAttribute(Attributes.SRC, newValue);\n }\n }\n if (attrName === Attributes.PLACEHOLDER_SRC) {\n if (newValue == null) {\n unsetBackgroundImage(this.image);\n } else {\n setBackgroundImage(this.image, newValue);\n }\n }\n }\n /**\n *\n */\n get placeholderSrc() {\n return getStringAttr(this, Attributes.PLACEHOLDER_SRC);\n }\n set placeholderSrc(value) {\n setStringAttr(this, Attributes.SRC, value);\n }\n /**\n *\n */\n get src() {\n return getStringAttr(this, Attributes.SRC);\n }\n set src(value) {\n setStringAttr(this, Attributes.SRC, value);\n }\n}\nMediaPosterImage.shadowRootOptions = { mode: \"open\" };\nMediaPosterImage.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-poster-image\")) {\n globalThis.customElements.define(\"media-poster-image\", MediaPosterImage);\n}\nvar media_poster_image_default = MediaPosterImage;\nexport {\n Attributes,\n media_poster_image_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getStringAttr, setStringAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nclass MediaPreviewChapterDisplay extends MediaTextDisplay {\n constructor() {\n super();\n __privateAdd(this, _slot, void 0);\n __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PREVIEW_CHAPTER,\n MediaUIAttributes.MEDIA_LANG\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_PREVIEW_CHAPTER || attrName === MediaUIAttributes.MEDIA_LANG) {\n if (newValue !== oldValue && newValue != null) {\n __privateGet(this, _slot).textContent = newValue;\n if (newValue !== \"\") {\n const ariaValueText = t(\"chapter: {chapterName}\", {\n chapterName: newValue\n });\n this.setAttribute(\"aria-valuetext\", ariaValueText);\n } else {\n this.removeAttribute(\"aria-valuetext\");\n }\n }\n }\n }\n /**\n * @type {string | undefined} Timeline preview chapter\n */\n get mediaPreviewChapter() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER);\n }\n set mediaPreviewChapter(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER, value);\n }\n}\n_slot = new WeakMap();\nif (!globalThis.customElements.get(\"media-preview-chapter-display\")) {\n globalThis.customElements.define(\n \"media-preview-chapter-display\",\n MediaPreviewChapterDisplay\n );\n}\nvar media_preview_chapter_display_default = MediaPreviewChapterDisplay;\nexport {\n media_preview_chapter_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaController;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n MediaUIAttributes,\n MediaStateReceiverAttributes\n} from \"./constants.js\";\nimport {\n getOrInsertCSSRule,\n getStringAttr,\n namedNodeMapToObject,\n setStringAttr\n} from \"./utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n box-sizing: border-box;\n display: var(--media-control-display, var(--media-preview-thumbnail-display, inline-block));\n overflow: hidden;\n }\n\n img {\n display: none;\n position: relative;\n }\n </style>\n <img crossorigin loading=\"eager\" decoding=\"async\">\n `\n );\n}\nclass MediaPreviewThumbnail extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _mediaController, void 0);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n }\n static get observedAttributes() {\n return [\n MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n MediaUIAttributes.MEDIA_PREVIEW_COORDS\n ];\n }\n connectedCallback() {\n var _a, _b, _c;\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(\n this,\n _mediaController,\n // @ts-ignore\n (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId)\n );\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n }\n disconnectedCallback() {\n var _a, _b;\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if ([\n MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n MediaUIAttributes.MEDIA_PREVIEW_COORDS\n ].includes(attrName)) {\n this.update();\n }\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n }\n }\n /**\n * @type {string | undefined} The url of the preview image\n */\n get mediaPreviewImage() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n }\n set mediaPreviewImage(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n }\n /**\n * @type {Array<number> | undefined} Fixed length array [x, y, width, height] or undefined\n */\n get mediaPreviewCoords() {\n const attrVal = this.getAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n if (!attrVal)\n return void 0;\n return attrVal.split(/\\s+/).map((coord) => +coord);\n }\n set mediaPreviewCoords(value) {\n if (!value) {\n this.removeAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n return;\n }\n this.setAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS, value.join(\" \"));\n }\n update() {\n const coords = this.mediaPreviewCoords;\n const previewImage = this.mediaPreviewImage;\n if (!(coords && previewImage))\n return;\n const [x, y, w, h] = coords;\n const src = previewImage.split(\"#\")[0];\n const computedStyle = getComputedStyle(this);\n const { maxWidth, maxHeight, minWidth, minHeight } = computedStyle;\n const maxRatio = Math.min(parseInt(maxWidth) / w, parseInt(maxHeight) / h);\n const minRatio = Math.max(parseInt(minWidth) / w, parseInt(minHeight) / h);\n const isScalingDown = maxRatio < 1;\n const scale = isScalingDown ? maxRatio : minRatio > 1 ? minRatio : 1;\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n const imgStyle = getOrInsertCSSRule(this.shadowRoot, \"img\").style;\n const img = this.shadowRoot.querySelector(\"img\");\n const extremum = isScalingDown ? \"min\" : \"max\";\n style.setProperty(`${extremum}-width`, \"initial\", \"important\");\n style.setProperty(`${extremum}-height`, \"initial\", \"important\");\n style.width = `${w * scale}px`;\n style.height = `${h * scale}px`;\n const resize = () => {\n imgStyle.width = `${this.imgWidth * scale}px`;\n imgStyle.height = `${this.imgHeight * scale}px`;\n imgStyle.display = \"block\";\n };\n if (img.src !== src) {\n img.onload = () => {\n this.imgWidth = img.naturalWidth;\n this.imgHeight = img.naturalHeight;\n resize();\n };\n img.src = src;\n resize();\n }\n resize();\n imgStyle.transform = `translate(-${x * scale}px, -${y * scale}px)`;\n }\n}\n_mediaController = new WeakMap();\nMediaPreviewThumbnail.shadowRootOptions = { mode: \"open\" };\nMediaPreviewThumbnail.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-preview-thumbnail\")) {\n globalThis.customElements.define(\n \"media-preview-thumbnail\",\n MediaPreviewThumbnail\n );\n}\nvar media_preview_thumbnail_default = MediaPreviewThumbnail;\nexport {\n media_preview_thumbnail_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nclass MediaPreviewTimeDisplay extends MediaTextDisplay {\n constructor() {\n super();\n __privateAdd(this, _slot, void 0);\n __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n __privateGet(this, _slot).textContent = formatTime(0);\n }\n static get observedAttributes() {\n return [...super.observedAttributes, MediaUIAttributes.MEDIA_PREVIEW_TIME];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_PREVIEW_TIME && newValue != null) {\n __privateGet(this, _slot).textContent = formatTime(parseFloat(newValue));\n }\n }\n /**\n * Timeline preview time\n */\n get mediaPreviewTime() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n }\n set mediaPreviewTime(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n }\n}\n_slot = new WeakMap();\nif (!globalThis.customElements.get(\"media-preview-time-display\")) {\n globalThis.customElements.define(\n \"media-preview-time-display\",\n MediaPreviewTimeDisplay\n );\n}\nvar media_preview_time_display_default = MediaPreviewTimeDisplay;\nexport {\n media_preview_time_display_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr, getSlotted, updateIconText } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n SEEK_OFFSET: \"seekoffset\"\n};\nconst DEFAULT_SEEK_OFFSET = 30;\nconst backwardIcon = (seekOffset) => `\n <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n <defs>\n <style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style>\n </defs>\n <text class=\"text value\" transform=\"translate(2.18 19.87)\">${seekOffset}</text>\n <path d=\"M10 6V3L4.37 7 10 10.94V8a5.54 5.54 0 0 1 1.9 10.48v2.12A7.5 7.5 0 0 0 10 6Z\"/>\n </svg>`;\nfunction getSlotTemplateHTML(_attrs, props) {\n return (\n /*html*/\n `\n <slot name=\"icon\">${backwardIcon(props.seekOffset)}</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Seek backward\");\n}\nconst DEFAULT_TIME = 0;\nclass MediaSeekBackwardButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n Attributes.SEEK_OFFSET\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n this.seekOffset = getNumericAttr(\n this,\n Attributes.SEEK_OFFSET,\n DEFAULT_SEEK_OFFSET\n );\n }\n attributeChangedCallback(attrName, _oldValue, newValue) {\n super.attributeChangedCallback(attrName, _oldValue, newValue);\n if (attrName === Attributes.SEEK_OFFSET) {\n this.seekOffset = getNumericAttr(\n this,\n Attributes.SEEK_OFFSET,\n DEFAULT_SEEK_OFFSET\n );\n }\n }\n // Own props\n /**\n * Seek amount in seconds\n */\n get seekOffset() {\n return getNumericAttr(this, Attributes.SEEK_OFFSET, DEFAULT_SEEK_OFFSET);\n }\n set seekOffset(value) {\n setNumericAttr(this, Attributes.SEEK_OFFSET, value);\n this.setAttribute(\n \"aria-label\",\n t(\"seek back {seekOffset} seconds\", { seekOffset: this.seekOffset })\n );\n updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n }\n // Props derived from Media UI Attributes\n /**\n * The current time in seconds\n */\n get mediaCurrentTime() {\n return getNumericAttr(\n this,\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n DEFAULT_TIME\n );\n }\n set mediaCurrentTime(time) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n }\n handleClick() {\n const detail = Math.max(this.mediaCurrentTime - this.seekOffset, 0);\n const evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n }\n}\nMediaSeekBackwardButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaSeekBackwardButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-seek-backward-button\")) {\n globalThis.customElements.define(\n \"media-seek-backward-button\",\n MediaSeekBackwardButton\n );\n}\nvar media_seek_backward_button_default = MediaSeekBackwardButton;\nexport {\n Attributes,\n media_seek_backward_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr, getSlotted, updateIconText } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n SEEK_OFFSET: \"seekoffset\"\n};\nconst DEFAULT_SEEK_OFFSET = 30;\nconst forwardIcon = (seekOffset) => `\n <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n <defs>\n <style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style>\n </defs>\n <text class=\"text value\" transform=\"translate(8.9 19.87)\">${seekOffset}</text>\n <path d=\"M10 6V3l5.61 4L10 10.94V8a5.54 5.54 0 0 0-1.9 10.48v2.12A7.5 7.5 0 0 1 10 6Z\"/>\n </svg>`;\nfunction getSlotTemplateHTML(_attrs, props) {\n return (\n /*html*/\n `\n <slot name=\"icon\">${forwardIcon(props.seekOffset)}</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Seek forward\");\n}\nconst DEFAULT_TIME = 0;\nclass MediaSeekForwardButton extends MediaChromeButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n Attributes.SEEK_OFFSET\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n this.seekOffset = getNumericAttr(\n this,\n Attributes.SEEK_OFFSET,\n DEFAULT_SEEK_OFFSET\n );\n }\n attributeChangedCallback(attrName, _oldValue, newValue) {\n super.attributeChangedCallback(attrName, _oldValue, newValue);\n if (attrName === Attributes.SEEK_OFFSET) {\n this.seekOffset = getNumericAttr(\n this,\n Attributes.SEEK_OFFSET,\n DEFAULT_SEEK_OFFSET\n );\n }\n }\n // Own props\n /**\n * Seek amount in seconds\n */\n get seekOffset() {\n return getNumericAttr(this, Attributes.SEEK_OFFSET, DEFAULT_SEEK_OFFSET);\n }\n set seekOffset(value) {\n setNumericAttr(this, Attributes.SEEK_OFFSET, value);\n this.setAttribute(\n \"aria-label\",\n t(\"seek forward {seekOffset} seconds\", { seekOffset: this.seekOffset })\n );\n updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n }\n // Props derived from Media UI Attributes\n /**\n * The current time in seconds\n */\n get mediaCurrentTime() {\n return getNumericAttr(\n this,\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n DEFAULT_TIME\n );\n }\n set mediaCurrentTime(time) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n }\n handleClick() {\n const detail = this.mediaCurrentTime + this.seekOffset;\n const evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n });\n this.dispatchEvent(evt);\n }\n}\nMediaSeekForwardButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaSeekForwardButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-seek-forward-button\")) {\n globalThis.customElements.define(\n \"media-seek-forward-button\",\n MediaSeekForwardButton\n );\n}\nvar media_seek_forward_button_default = MediaSeekForwardButton;\nexport {\n Attributes,\n media_seek_forward_button_default as default\n};\n","import {\n stateMediator as defaultStateMediator,\n prepareStateOwners\n} from \"./state-mediator.js\";\nimport { areValuesEq } from \"./util.js\";\nimport { requestMap as defaultRequestMap } from \"./request-map.js\";\nconst createMediaStore = ({\n media,\n fullscreenElement,\n documentElement,\n stateMediator = defaultStateMediator,\n requestMap = defaultRequestMap,\n options = {},\n monitorStateOwnersOnlyWithSubscriptions = true\n}) => {\n const callbacks = [];\n const stateOwners = {\n // Spreading options here since folks should not rely on holding onto references\n // for any app-level logic wrt options.\n options: { ...options }\n };\n let state = Object.freeze({\n mediaPreviewTime: void 0,\n mediaPreviewImage: void 0,\n mediaPreviewCoords: void 0,\n mediaPreviewChapter: void 0\n });\n const updateState = (nextStateDelta) => {\n if (nextStateDelta == void 0)\n return;\n if (areValuesEq(nextStateDelta, state)) {\n return;\n }\n state = Object.freeze({\n ...state,\n ...nextStateDelta\n });\n callbacks.forEach((cb) => cb(state));\n };\n const updateStateFromFacade = () => {\n const nextState = Object.entries(stateMediator).reduce(\n (nextState2, [stateName, { get }]) => {\n nextState2[stateName] = get(stateOwners);\n return nextState2;\n },\n {}\n );\n updateState(nextState);\n };\n const stateUpdateHandlers = {};\n let nextStateOwners = void 0;\n const updateStateOwners = async (nextStateOwnersDelta, nextSubscriberCount) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;\n const pendingUpdate = !!nextStateOwners;\n nextStateOwners = {\n ...stateOwners,\n ...nextStateOwners != null ? nextStateOwners : {},\n ...nextStateOwnersDelta\n };\n if (pendingUpdate)\n return;\n await prepareStateOwners(...Object.values(nextStateOwnersDelta));\n const shouldTeardownFromSubscriberCount = callbacks.length > 0 && nextSubscriberCount === 0 && monitorStateOwnersOnlyWithSubscriptions;\n const mediaChanged = stateOwners.media !== nextStateOwners.media;\n const textTracksChanged = ((_a = stateOwners.media) == null ? void 0 : _a.textTracks) !== ((_b = nextStateOwners.media) == null ? void 0 : _b.textTracks);\n const videoRenditionsChanged = ((_c = stateOwners.media) == null ? void 0 : _c.videoRenditions) !== ((_d = nextStateOwners.media) == null ? void 0 : _d.videoRenditions);\n const audioTracksChanged = ((_e = stateOwners.media) == null ? void 0 : _e.audioTracks) !== ((_f = nextStateOwners.media) == null ? void 0 : _f.audioTracks);\n const remoteChanged = ((_g = stateOwners.media) == null ? void 0 : _g.remote) !== ((_h = nextStateOwners.media) == null ? void 0 : _h.remote);\n const rootNodeChanged = stateOwners.documentElement !== nextStateOwners.documentElement;\n const teardownMedia = !!stateOwners.media && (mediaChanged || shouldTeardownFromSubscriberCount);\n const teardownTextTracks = !!((_i = stateOwners.media) == null ? void 0 : _i.textTracks) && (textTracksChanged || shouldTeardownFromSubscriberCount);\n const teardownVideoRenditions = !!((_j = stateOwners.media) == null ? void 0 : _j.videoRenditions) && (videoRenditionsChanged || shouldTeardownFromSubscriberCount);\n const teardownAudioTracks = !!((_k = stateOwners.media) == null ? void 0 : _k.audioTracks) && (audioTracksChanged || shouldTeardownFromSubscriberCount);\n const teardownRemote = !!((_l = stateOwners.media) == null ? void 0 : _l.remote) && (remoteChanged || shouldTeardownFromSubscriberCount);\n const teardownRootNode = !!stateOwners.documentElement && (rootNodeChanged || shouldTeardownFromSubscriberCount);\n const teardownSomething = teardownMedia || teardownTextTracks || teardownVideoRenditions || teardownAudioTracks || teardownRemote || teardownRootNode;\n const shouldSetupFromSubscriberCount = callbacks.length === 0 && nextSubscriberCount === 1 && monitorStateOwnersOnlyWithSubscriptions;\n const setupMedia = !!nextStateOwners.media && (mediaChanged || shouldSetupFromSubscriberCount);\n const setupTextTracks = !!((_m = nextStateOwners.media) == null ? void 0 : _m.textTracks) && (textTracksChanged || shouldSetupFromSubscriberCount);\n const setupVideoRenditions = !!((_n = nextStateOwners.media) == null ? void 0 : _n.videoRenditions) && (videoRenditionsChanged || shouldSetupFromSubscriberCount);\n const setupAudioTracks = !!((_o = nextStateOwners.media) == null ? void 0 : _o.audioTracks) && (audioTracksChanged || shouldSetupFromSubscriberCount);\n const setupRemote = !!((_p = nextStateOwners.media) == null ? void 0 : _p.remote) && (remoteChanged || shouldSetupFromSubscriberCount);\n const setupRootNode = !!nextStateOwners.documentElement && (rootNodeChanged || shouldSetupFromSubscriberCount);\n const setupSomething = setupMedia || setupTextTracks || setupVideoRenditions || setupAudioTracks || setupRemote || setupRootNode;\n const somethingToDo = teardownSomething || setupSomething;\n if (!somethingToDo) {\n Object.entries(nextStateOwners).forEach(\n ([stateOwnerName, stateOwner]) => {\n stateOwners[stateOwnerName] = stateOwner;\n }\n );\n updateStateFromFacade();\n nextStateOwners = void 0;\n return;\n }\n Object.entries(stateMediator).forEach(\n ([\n stateName,\n {\n get,\n mediaEvents = [],\n textTracksEvents = [],\n videoRenditionsEvents = [],\n audioTracksEvents = [],\n remoteEvents = [],\n rootEvents = [],\n stateOwnersUpdateHandlers = []\n }\n ]) => {\n if (!stateUpdateHandlers[stateName]) {\n stateUpdateHandlers[stateName] = {};\n }\n const handler = (event) => {\n const nextValue = get(stateOwners, event);\n updateState({ [stateName]: nextValue });\n };\n let prevHandler;\n prevHandler = stateUpdateHandlers[stateName].mediaEvents;\n mediaEvents.forEach((eventType) => {\n if (prevHandler && teardownMedia) {\n stateOwners.media.removeEventListener(eventType, prevHandler);\n stateUpdateHandlers[stateName].mediaEvents = void 0;\n }\n if (setupMedia) {\n nextStateOwners.media.addEventListener(eventType, handler);\n stateUpdateHandlers[stateName].mediaEvents = handler;\n }\n });\n prevHandler = stateUpdateHandlers[stateName].textTracksEvents;\n textTracksEvents.forEach((eventType) => {\n var _a2, _b2;\n if (prevHandler && teardownTextTracks) {\n (_a2 = stateOwners.media.textTracks) == null ? void 0 : _a2.removeEventListener(\n eventType,\n prevHandler\n );\n stateUpdateHandlers[stateName].textTracksEvents = void 0;\n }\n if (setupTextTracks) {\n (_b2 = nextStateOwners.media.textTracks) == null ? void 0 : _b2.addEventListener(\n eventType,\n handler\n );\n stateUpdateHandlers[stateName].textTracksEvents = handler;\n }\n });\n prevHandler = stateUpdateHandlers[stateName].videoRenditionsEvents;\n videoRenditionsEvents.forEach((eventType) => {\n var _a2, _b2;\n if (prevHandler && teardownVideoRenditions) {\n (_a2 = stateOwners.media.videoRenditions) == null ? void 0 : _a2.removeEventListener(\n eventType,\n prevHandler\n );\n stateUpdateHandlers[stateName].videoRenditionsEvents = void 0;\n }\n if (setupVideoRenditions) {\n (_b2 = nextStateOwners.media.videoRenditions) == null ? void 0 : _b2.addEventListener(\n eventType,\n handler\n );\n stateUpdateHandlers[stateName].videoRenditionsEvents = handler;\n }\n });\n prevHandler = stateUpdateHandlers[stateName].audioTracksEvents;\n audioTracksEvents.forEach((eventType) => {\n var _a2, _b2;\n if (prevHandler && teardownAudioTracks) {\n (_a2 = stateOwners.media.audioTracks) == null ? void 0 : _a2.removeEventListener(\n eventType,\n prevHandler\n );\n stateUpdateHandlers[stateName].audioTracksEvents = void 0;\n }\n if (setupAudioTracks) {\n (_b2 = nextStateOwners.media.audioTracks) == null ? void 0 : _b2.addEventListener(\n eventType,\n handler\n );\n stateUpdateHandlers[stateName].audioTracksEvents = handler;\n }\n });\n prevHandler = stateUpdateHandlers[stateName].remoteEvents;\n remoteEvents.forEach((eventType) => {\n var _a2, _b2;\n if (prevHandler && teardownRemote) {\n (_a2 = stateOwners.media.remote) == null ? void 0 : _a2.removeEventListener(\n eventType,\n prevHandler\n );\n stateUpdateHandlers[stateName].remoteEvents = void 0;\n }\n if (setupRemote) {\n (_b2 = nextStateOwners.media.remote) == null ? void 0 : _b2.addEventListener(eventType, handler);\n stateUpdateHandlers[stateName].remoteEvents = handler;\n }\n });\n prevHandler = stateUpdateHandlers[stateName].rootEvents;\n rootEvents.forEach((eventType) => {\n if (prevHandler && teardownRootNode) {\n stateOwners.documentElement.removeEventListener(\n eventType,\n prevHandler\n );\n stateUpdateHandlers[stateName].rootEvents = void 0;\n }\n if (setupRootNode) {\n nextStateOwners.documentElement.addEventListener(\n eventType,\n handler\n );\n stateUpdateHandlers[stateName].rootEvents = handler;\n }\n });\n const prevHandlerTeardown = stateUpdateHandlers[stateName].stateOwnersUpdateHandlers;\n stateOwnersUpdateHandlers.forEach((fn) => {\n if (prevHandlerTeardown && teardownSomething) {\n prevHandlerTeardown();\n }\n if (setupSomething) {\n stateUpdateHandlers[stateName].stateOwnersUpdateHandlers = fn(\n handler,\n nextStateOwners\n );\n }\n });\n }\n );\n Object.entries(nextStateOwners).forEach(([stateOwnerName, stateOwner]) => {\n stateOwners[stateOwnerName] = stateOwner;\n });\n updateStateFromFacade();\n nextStateOwners = void 0;\n };\n updateStateOwners({ media, fullscreenElement, documentElement, options });\n return {\n // note that none of these cases directly interact with the media element, root node, full screen element, etc.\n // note these \"actions\" could just be the events if we wanted, especially if we normalize on \"detail\" for\n // any payload-relevant values\n // This is roughly equivalent to our used to be in our state requests dictionary object, though much of the\n // \"heavy lifting\" is now moved into the facade `set()`\n dispatch(action) {\n const { type, detail } = action;\n if (requestMap[type] && state.mediaErrorCode == null) {\n updateState(requestMap[type](stateMediator, stateOwners, action));\n return;\n }\n if (type === \"mediaelementchangerequest\") {\n updateStateOwners({ media: detail });\n } else if (type === \"fullscreenelementchangerequest\") {\n updateStateOwners({ fullscreenElement: detail });\n } else if (type === \"documentelementchangerequest\") {\n updateStateOwners({ documentElement: detail });\n } else if (type === \"optionschangerequest\") {\n Object.entries(detail != null ? detail : {}).forEach(([optionName, optionValue]) => {\n stateOwners.options[optionName] = optionValue;\n });\n updateStateFromFacade();\n }\n },\n getState() {\n return state;\n },\n subscribe(callback) {\n updateStateOwners({}, callbacks.length + 1);\n callbacks.push(callback);\n callback(state);\n return () => {\n const idx = callbacks.indexOf(callback);\n if (idx >= 0) {\n updateStateOwners({}, callbacks.length - 1);\n callbacks.splice(idx, 1);\n }\n };\n }\n };\n};\nvar media_store_default = createMediaStore;\nexport {\n createMediaStore,\n media_store_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n MediaUIEvents,\n StreamTypes,\n TextTrackKinds,\n TextTrackModes\n} from \"../constants.js\";\nimport {\n getTextTracksList,\n parseTracks,\n updateTracksModeTo\n} from \"../utils/captions.js\";\nimport { getSubtitleTracks, toggleSubtitleTracks } from \"./util.js\";\nconst requestMap = {\n /**\n * @TODO Consider adding state to `StateMediator` for e.g. `mediaThumbnailCues` and use that for derived state here (CJP)\n */\n [MediaUIEvents.MEDIA_PREVIEW_REQUEST](stateMediator, stateOwners, { detail }) {\n var _a, _b, _c;\n const { media } = stateOwners;\n const mediaPreviewTime = detail != null ? detail : void 0;\n let mediaPreviewImage = void 0;\n let mediaPreviewCoords = void 0;\n if (media && mediaPreviewTime != null) {\n const [track] = getTextTracksList(media, {\n kind: TextTrackKinds.METADATA,\n label: \"thumbnails\"\n });\n const cue = Array.prototype.find.call((_a = track == null ? void 0 : track.cues) != null ? _a : [], (c, i, cs) => {\n if (i === 0)\n return c.endTime > mediaPreviewTime;\n if (i === cs.length - 1)\n return c.startTime <= mediaPreviewTime;\n return c.startTime <= mediaPreviewTime && c.endTime > mediaPreviewTime;\n });\n if (cue) {\n const base = !/'^(?:[a-z]+:)?\\/\\//i.test(cue.text) ? (_b = media == null ? void 0 : media.querySelector(\n 'track[label=\"thumbnails\"]'\n )) == null ? void 0 : _b.src : void 0;\n const url = new URL(cue.text, base);\n const previewCoordsStr = new URLSearchParams(url.hash).get(\"#xywh\");\n mediaPreviewCoords = previewCoordsStr.split(\",\").map((numStr) => +numStr);\n mediaPreviewImage = url.href;\n }\n }\n const mediaDuration = stateMediator.mediaDuration.get(stateOwners);\n const mediaChaptersCues = stateMediator.mediaChaptersCues.get(stateOwners);\n let mediaPreviewChapter = (_c = mediaChaptersCues.find((c, i, cs) => {\n if (i === cs.length - 1 && mediaDuration === c.endTime) {\n return c.startTime <= mediaPreviewTime && c.endTime >= mediaPreviewTime;\n }\n return c.startTime <= mediaPreviewTime && c.endTime > mediaPreviewTime;\n })) == null ? void 0 : _c.text;\n if (detail != null && mediaPreviewChapter == null) {\n mediaPreviewChapter = \"\";\n }\n return {\n mediaPreviewTime,\n mediaPreviewImage,\n mediaPreviewCoords,\n mediaPreviewChapter\n };\n },\n [MediaUIEvents.MEDIA_PAUSE_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaPaused\";\n const value = true;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_PLAY_REQUEST](stateMediator, stateOwners) {\n var _a, _b, _c, _d;\n const key = \"mediaPaused\";\n const value = false;\n const isLive = stateMediator.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n const canAutoSeekToLive = !((_a = stateOwners.options) == null ? void 0 : _a.noAutoSeekToLive);\n const isDVR = stateMediator.mediaTargetLiveWindow.get(stateOwners) > 0;\n if (isLive && canAutoSeekToLive && !isDVR) {\n const seekableEnd = (_b = stateMediator.mediaSeekable.get(stateOwners)) == null ? void 0 : _b[1];\n if (seekableEnd) {\n const seekToLiveOffset = (_d = (_c = stateOwners.options) == null ? void 0 : _c.seekToLiveOffset) != null ? _d : 0;\n const liveEdgeTime = seekableEnd - seekToLiveOffset;\n stateMediator.mediaCurrentTime.set(liveEdgeTime, stateOwners);\n }\n }\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST](stateMediator, stateOwners, { detail }) {\n const key = \"mediaPlaybackRate\";\n const value = detail;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_MUTE_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaMuted\";\n const value = true;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_UNMUTE_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaMuted\";\n const value = false;\n if (!stateMediator.mediaVolume.get(stateOwners)) {\n stateMediator.mediaVolume.set(0.25, stateOwners);\n }\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_VOLUME_REQUEST](stateMediator, stateOwners, { detail }) {\n const key = \"mediaVolume\";\n const value = detail;\n if (value && stateMediator.mediaMuted.get(stateOwners)) {\n stateMediator.mediaMuted.set(false, stateOwners);\n }\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_SEEK_REQUEST](stateMediator, stateOwners, { detail }) {\n const key = \"mediaCurrentTime\";\n const value = detail;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_SEEK_TO_LIVE_REQUEST](stateMediator, stateOwners) {\n var _a, _b, _c;\n const key = \"mediaCurrentTime\";\n const seekableEnd = (_a = stateMediator.mediaSeekable.get(stateOwners)) == null ? void 0 : _a[1];\n if (Number.isNaN(Number(seekableEnd)))\n return;\n const seekToLiveOffset = (_c = (_b = stateOwners.options) == null ? void 0 : _b.seekToLiveOffset) != null ? _c : 0;\n const value = seekableEnd - seekToLiveOffset;\n stateMediator[key].set(value, stateOwners);\n },\n // Text Tracks state change requests\n [MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n var _a;\n const { options } = stateOwners;\n const tracks = getSubtitleTracks(stateOwners);\n const tracksToUpdate = parseTracks(detail);\n const preferredLanguage = (_a = tracksToUpdate[0]) == null ? void 0 : _a.language;\n if (preferredLanguage && !options.noSubtitlesLangPref) {\n globalThis.localStorage.setItem(\n \"media-chrome-pref-subtitles-lang\",\n preferredLanguage\n );\n }\n updateTracksModeTo(TextTrackModes.SHOWING, tracks, tracksToUpdate);\n },\n [MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n const tracks = getSubtitleTracks(stateOwners);\n const tracksToUpdate = detail != null ? detail : [];\n updateTracksModeTo(TextTrackModes.DISABLED, tracks, tracksToUpdate);\n },\n [MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n toggleSubtitleTracks(stateOwners, detail);\n },\n // Renditions/Tracks state change requests\n [MediaUIEvents.MEDIA_RENDITION_REQUEST](stateMediator, stateOwners, { detail }) {\n const key = \"mediaRenditionSelected\";\n const value = detail;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST](stateMediator, stateOwners, { detail }) {\n const key = \"mediaAudioTrackEnabled\";\n const value = detail;\n stateMediator[key].set(value, stateOwners);\n },\n // State change requests dependent on root node\n [MediaUIEvents.MEDIA_ENTER_PIP_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsPip\";\n const value = true;\n if (stateMediator.mediaIsFullscreen.get(stateOwners)) {\n stateMediator.mediaIsFullscreen.set(false, stateOwners);\n }\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_EXIT_PIP_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsPip\";\n const value = false;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST](stateMediator, stateOwners, event) {\n const key = \"mediaIsFullscreen\";\n const value = true;\n if (stateMediator.mediaIsPip.get(stateOwners)) {\n stateMediator.mediaIsPip.set(false, stateOwners);\n }\n stateMediator[key].set(value, stateOwners, event);\n },\n [MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsFullscreen\";\n const value = false;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_ENTER_CAST_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsCasting\";\n const value = true;\n if (stateMediator.mediaIsFullscreen.get(stateOwners)) {\n stateMediator.mediaIsFullscreen.set(false, stateOwners);\n }\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_EXIT_CAST_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsCasting\";\n const value = false;\n stateMediator[key].set(value, stateOwners);\n },\n [MediaUIEvents.MEDIA_AIRPLAY_REQUEST](stateMediator, stateOwners) {\n const key = \"mediaIsAirplaying\";\n const value = true;\n stateMediator[key].set(value, stateOwners);\n }\n};\nexport {\n requestMap\n};\n","import { document, globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n AvailabilityStates,\n StreamTypes,\n TextTrackKinds\n} from \"../constants.js\";\nimport { containsComposedNode } from \"../utils/element-utils.js\";\nimport {\n enterFullscreen,\n exitFullscreen,\n isFullscreen\n} from \"../utils/fullscreen-api.js\";\nimport {\n airplaySupported,\n castSupported,\n fullscreenSupported,\n hasFullscreenSupport,\n hasPipSupport,\n hasVolumeSupportAsync,\n pipSupported\n} from \"../utils/platform-tests.js\";\nimport {\n getShowingSubtitleTracks,\n getSubtitleTracks,\n toggleSubtitleTracks\n} from \"./util.js\";\nimport { getTextTracksList } from \"../utils/captions.js\";\nimport { isValidNumber } from \"../utils/utils.js\";\nconst StreamTypeValues = Object.values(StreamTypes);\nlet volumeSupported;\nconst volumeSupportPromise = hasVolumeSupportAsync().then((supported) => {\n volumeSupported = supported;\n return volumeSupported;\n});\nconst prepareStateOwners = async (...stateOwners) => {\n await Promise.all(\n stateOwners.filter((x) => x).map(async (stateOwner) => {\n if (!(\"localName\" in stateOwner && stateOwner instanceof globalThis.HTMLElement)) {\n return;\n }\n const name = stateOwner.localName;\n if (!name.includes(\"-\"))\n return;\n const classDef = globalThis.customElements.get(name);\n if (classDef && stateOwner instanceof classDef)\n return;\n await globalThis.customElements.whenDefined(name);\n globalThis.customElements.upgrade(stateOwner);\n })\n );\n};\nconst domParser = new globalThis.DOMParser();\nconst parseHtmlToText = (text) => text ? domParser.parseFromString(text, \"text/html\").body.textContent || text : text;\nconst stateMediator = {\n mediaError: {\n get(stateOwners, event) {\n const { media } = stateOwners;\n if ((event == null ? void 0 : event.type) === \"playing\")\n return;\n return media == null ? void 0 : media.error;\n },\n mediaEvents: [\"emptied\", \"error\", \"playing\"]\n },\n mediaErrorCode: {\n get(stateOwners, event) {\n var _a;\n const { media } = stateOwners;\n if ((event == null ? void 0 : event.type) === \"playing\")\n return;\n return (_a = media == null ? void 0 : media.error) == null ? void 0 : _a.code;\n },\n mediaEvents: [\"emptied\", \"error\", \"playing\"]\n },\n mediaErrorMessage: {\n get(stateOwners, event) {\n var _a, _b;\n const { media } = stateOwners;\n if ((event == null ? void 0 : event.type) === \"playing\")\n return;\n return (_b = (_a = media == null ? void 0 : media.error) == null ? void 0 : _a.message) != null ? _b : \"\";\n },\n mediaEvents: [\"emptied\", \"error\", \"playing\"]\n },\n mediaWidth: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.videoWidth) != null ? _a : 0;\n },\n mediaEvents: [\"resize\"]\n },\n mediaHeight: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.videoHeight) != null ? _a : 0;\n },\n mediaEvents: [\"resize\"]\n },\n mediaPaused: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.paused) != null ? _a : true;\n },\n set(value, stateOwners) {\n var _a;\n const { media } = stateOwners;\n if (!media)\n return;\n if (value) {\n media.pause();\n } else {\n (_a = media.play()) == null ? void 0 : _a.catch(() => {\n });\n }\n },\n mediaEvents: [\"play\", \"playing\", \"pause\", \"emptied\"]\n },\n mediaHasPlayed: {\n // We want to let the user know that the media started playing at any point (`media-has-played`).\n // Since these propagators are all called when boostrapping state, let's verify this is\n // a real playing event by checking that 1) there's media and 2) it isn't currently paused.\n get(stateOwners, event) {\n const { media } = stateOwners;\n if (!media)\n return false;\n if (!event)\n return !media.paused;\n return event.type === \"playing\";\n },\n mediaEvents: [\"playing\", \"emptied\"]\n },\n mediaEnded: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.ended) != null ? _a : false;\n },\n mediaEvents: [\"seeked\", \"ended\", \"emptied\"]\n },\n mediaPlaybackRate: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.playbackRate) != null ? _a : 1;\n },\n set(value, stateOwners) {\n const { media } = stateOwners;\n if (!media)\n return;\n if (!Number.isFinite(+value))\n return;\n media.playbackRate = +value;\n },\n mediaEvents: [\"ratechange\", \"loadstart\"]\n },\n mediaMuted: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.muted) != null ? _a : false;\n },\n set(value, stateOwners) {\n const { media, options: { noMutedPref } = {} } = stateOwners;\n if (!media)\n return;\n media.muted = value;\n try {\n const hasLocalStoragePrefMuted = globalThis.localStorage.getItem(\"media-chrome-pref-muted\") !== null;\n const hasMutedAttribute = media.hasAttribute(\"muted\");\n if (noMutedPref) {\n if (hasLocalStoragePrefMuted)\n globalThis.localStorage.removeItem(\"media-chrome-pref-muted\");\n return;\n }\n if (hasMutedAttribute && !hasLocalStoragePrefMuted) {\n return;\n }\n globalThis.localStorage.setItem(\n \"media-chrome-pref-muted\",\n value ? \"true\" : \"false\"\n );\n } catch (e) {\n console.debug(\"Error setting muted pref\", e);\n }\n },\n mediaEvents: [\"volumechange\"],\n stateOwnersUpdateHandlers: [\n (handler, stateOwners) => {\n const {\n options: { noMutedPref }\n } = stateOwners;\n const { media } = stateOwners;\n if (!media || media.muted || noMutedPref)\n return;\n try {\n const mutedPref = globalThis.localStorage.getItem(\"media-chrome-pref-muted\") === \"true\";\n stateMediator.mediaMuted.set(mutedPref, stateOwners);\n handler(mutedPref);\n } catch (e) {\n console.debug(\"Error getting muted pref\", e);\n }\n }\n ]\n },\n mediaVolume: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.volume) != null ? _a : 1;\n },\n set(value, stateOwners) {\n const { media, options: { noVolumePref } = {} } = stateOwners;\n if (!media)\n return;\n try {\n if (value == null) {\n globalThis.localStorage.removeItem(\"media-chrome-pref-volume\");\n } else if (!media.hasAttribute(\"muted\") && !noVolumePref) {\n globalThis.localStorage.setItem(\n \"media-chrome-pref-volume\",\n value.toString()\n );\n }\n } catch (e) {\n console.debug(\"Error setting volume pref\", e);\n }\n if (!Number.isFinite(+value))\n return;\n media.volume = +value;\n },\n mediaEvents: [\"volumechange\"],\n stateOwnersUpdateHandlers: [\n (handler, stateOwners) => {\n const {\n options: { noVolumePref }\n } = stateOwners;\n if (noVolumePref)\n return;\n try {\n const { media } = stateOwners;\n if (!media)\n return;\n const volumePref = globalThis.localStorage.getItem(\n \"media-chrome-pref-volume\"\n );\n if (volumePref == null)\n return;\n stateMediator.mediaVolume.set(+volumePref, stateOwners);\n handler(+volumePref);\n } catch (e) {\n console.debug(\"Error getting volume pref\", e);\n }\n }\n ]\n },\n // NOTE: Keeping this roughly equivalent to prior impl to reduce number of changes,\n // however we may want to model \"derived\" state differently from \"primary\" state\n // (in this case, derived === mediaVolumeLevel, primary === mediaMuted, mediaVolume) (CJP)\n mediaVolumeLevel: {\n get(stateOwners) {\n const { media } = stateOwners;\n if (typeof (media == null ? void 0 : media.volume) == \"undefined\")\n return \"high\";\n if (media.muted || media.volume === 0)\n return \"off\";\n if (media.volume < 0.5)\n return \"low\";\n if (media.volume < 0.75)\n return \"medium\";\n return \"high\";\n },\n mediaEvents: [\"volumechange\"]\n },\n mediaCurrentTime: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return (_a = media == null ? void 0 : media.currentTime) != null ? _a : 0;\n },\n set(value, stateOwners) {\n const { media } = stateOwners;\n if (!media || !isValidNumber(value))\n return;\n media.currentTime = value;\n },\n mediaEvents: [\"timeupdate\", \"loadedmetadata\"]\n },\n mediaDuration: {\n get(stateOwners) {\n const { media, options: { defaultDuration } = {} } = stateOwners;\n if (defaultDuration && (!media || !media.duration || Number.isNaN(media.duration) || !Number.isFinite(media.duration))) {\n return defaultDuration;\n }\n return Number.isFinite(media == null ? void 0 : media.duration) ? media.duration : Number.NaN;\n },\n mediaEvents: [\"durationchange\", \"loadedmetadata\", \"emptied\"]\n },\n mediaLoading: {\n get(stateOwners) {\n const { media } = stateOwners;\n return (media == null ? void 0 : media.readyState) < 3;\n },\n mediaEvents: [\"waiting\", \"playing\", \"emptied\"]\n },\n mediaSeekable: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n if (!((_a = media == null ? void 0 : media.seekable) == null ? void 0 : _a.length))\n return void 0;\n const start = media.seekable.start(0);\n const end = media.seekable.end(media.seekable.length - 1);\n if (!start && !end)\n return void 0;\n return [Number(start.toFixed(3)), Number(end.toFixed(3))];\n },\n mediaEvents: [\"loadedmetadata\", \"emptied\", \"progress\", \"seekablechange\"]\n },\n mediaBuffered: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n const timeRanges = (_a = media == null ? void 0 : media.buffered) != null ? _a : [];\n return Array.from(timeRanges).map((_, i) => [\n Number(timeRanges.start(i).toFixed(3)),\n Number(timeRanges.end(i).toFixed(3))\n ]);\n },\n mediaEvents: [\"progress\", \"emptied\"]\n },\n mediaStreamType: {\n get(stateOwners) {\n const { media, options: { defaultStreamType } = {} } = stateOwners;\n const usedDefaultStreamType = [\n StreamTypes.LIVE,\n StreamTypes.ON_DEMAND\n ].includes(defaultStreamType) ? defaultStreamType : void 0;\n if (!media)\n return usedDefaultStreamType;\n const { streamType } = media;\n if (StreamTypeValues.includes(streamType)) {\n if (streamType === StreamTypes.UNKNOWN) {\n return usedDefaultStreamType;\n }\n return streamType;\n }\n const duration = media.duration;\n if (duration === Infinity) {\n return StreamTypes.LIVE;\n } else if (Number.isFinite(duration)) {\n return StreamTypes.ON_DEMAND;\n }\n return usedDefaultStreamType;\n },\n mediaEvents: [\n \"emptied\",\n \"durationchange\",\n \"loadedmetadata\",\n \"streamtypechange\"\n ]\n },\n mediaTargetLiveWindow: {\n get(stateOwners) {\n const { media } = stateOwners;\n if (!media)\n return Number.NaN;\n const { targetLiveWindow } = media;\n const streamType = stateMediator.mediaStreamType.get(stateOwners);\n if ((targetLiveWindow == null || Number.isNaN(targetLiveWindow)) && streamType === StreamTypes.LIVE) {\n return 0;\n }\n return targetLiveWindow;\n },\n mediaEvents: [\n \"emptied\",\n \"durationchange\",\n \"loadedmetadata\",\n \"streamtypechange\",\n \"targetlivewindowchange\"\n ]\n },\n mediaTimeIsLive: {\n get(stateOwners) {\n const {\n media,\n // Default to 10 seconds\n options: { liveEdgeOffset = 10 } = {}\n } = stateOwners;\n if (!media)\n return false;\n if (typeof media.liveEdgeStart === \"number\") {\n if (Number.isNaN(media.liveEdgeStart))\n return false;\n return media.currentTime >= media.liveEdgeStart;\n }\n const live = stateMediator.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n if (!live)\n return false;\n const seekable = media.seekable;\n if (!seekable)\n return true;\n if (!seekable.length)\n return false;\n const liveEdgeStart = seekable.end(seekable.length - 1) - liveEdgeOffset;\n return media.currentTime >= liveEdgeStart;\n },\n mediaEvents: [\"playing\", \"timeupdate\", \"progress\", \"waiting\", \"emptied\"]\n },\n // Text Tracks modeling\n mediaSubtitlesList: {\n get(stateOwners) {\n return getSubtitleTracks(stateOwners).map(\n ({ kind, label, language }) => ({ kind, label, language })\n );\n },\n mediaEvents: [\"loadstart\"],\n textTracksEvents: [\"addtrack\", \"removetrack\"]\n },\n mediaSubtitlesShowing: {\n get(stateOwners) {\n return getShowingSubtitleTracks(stateOwners).map(\n ({ kind, label, language }) => ({ kind, label, language })\n );\n },\n mediaEvents: [\"loadstart\"],\n textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n stateOwnersUpdateHandlers: [\n (_handler, stateOwners) => {\n var _a, _b;\n const { media, options } = stateOwners;\n if (!media)\n return;\n const updateDefaultSubtitlesCallback = (event) => {\n var _a2;\n if (!options.defaultSubtitles)\n return;\n const nonSubsEvent = event && ![TextTrackKinds.CAPTIONS, TextTrackKinds.SUBTITLES].includes(\n // @ts-ignore\n (_a2 = event == null ? void 0 : event.track) == null ? void 0 : _a2.kind\n );\n if (nonSubsEvent)\n return;\n toggleSubtitleTracks(stateOwners, true);\n };\n media.addEventListener(\n \"loadstart\",\n updateDefaultSubtitlesCallback\n );\n (_a = media.textTracks) == null ? void 0 : _a.addEventListener(\n \"addtrack\",\n updateDefaultSubtitlesCallback\n );\n (_b = media.textTracks) == null ? void 0 : _b.addEventListener(\n \"removetrack\",\n updateDefaultSubtitlesCallback\n );\n return () => {\n var _a2, _b2;\n media.removeEventListener(\n \"loadstart\",\n updateDefaultSubtitlesCallback\n );\n (_a2 = media.textTracks) == null ? void 0 : _a2.removeEventListener(\n \"addtrack\",\n updateDefaultSubtitlesCallback\n );\n (_b2 = media.textTracks) == null ? void 0 : _b2.removeEventListener(\n \"removetrack\",\n updateDefaultSubtitlesCallback\n );\n };\n }\n ]\n },\n mediaChaptersCues: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n if (!media)\n return [];\n const [chaptersTrack] = getTextTracksList(media, {\n kind: TextTrackKinds.CHAPTERS\n });\n return Array.from((_a = chaptersTrack == null ? void 0 : chaptersTrack.cues) != null ? _a : []).map(\n ({ text, startTime, endTime }) => ({\n text: parseHtmlToText(text),\n startTime,\n endTime\n })\n );\n },\n mediaEvents: [\"loadstart\", \"loadedmetadata\"],\n textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n stateOwnersUpdateHandlers: [\n (handler, stateOwners) => {\n var _a;\n const { media } = stateOwners;\n if (!media)\n return;\n const chaptersTrack = media.querySelector(\n 'track[kind=\"chapters\"][default][src]'\n );\n const shadowChaptersTrack = (_a = media.shadowRoot) == null ? void 0 : _a.querySelector(\n ':is(video,audio) > track[kind=\"chapters\"][default][src]'\n );\n chaptersTrack == null ? void 0 : chaptersTrack.addEventListener(\"load\", handler);\n shadowChaptersTrack == null ? void 0 : shadowChaptersTrack.addEventListener(\"load\", handler);\n return () => {\n chaptersTrack == null ? void 0 : chaptersTrack.removeEventListener(\"load\", handler);\n shadowChaptersTrack == null ? void 0 : shadowChaptersTrack.removeEventListener(\"load\", handler);\n };\n }\n ]\n },\n // Modeling state tied to root node\n mediaIsPip: {\n get(stateOwners) {\n var _a, _b;\n const { media, documentElement } = stateOwners;\n if (!media || !documentElement)\n return false;\n if (!documentElement.pictureInPictureElement)\n return false;\n if (documentElement.pictureInPictureElement === media)\n return true;\n if (documentElement.pictureInPictureElement instanceof HTMLMediaElement) {\n if (!((_a = media.localName) == null ? void 0 : _a.includes(\"-\")))\n return false;\n return containsComposedNode(\n media,\n documentElement.pictureInPictureElement\n );\n }\n if (documentElement.pictureInPictureElement.localName.includes(\"-\")) {\n let currentRoot = documentElement.pictureInPictureElement.shadowRoot;\n while (currentRoot == null ? void 0 : currentRoot.pictureInPictureElement) {\n if (currentRoot.pictureInPictureElement === media)\n return true;\n currentRoot = (_b = currentRoot.pictureInPictureElement) == null ? void 0 : _b.shadowRoot;\n }\n }\n return false;\n },\n set(value, stateOwners) {\n const { media } = stateOwners;\n if (!media)\n return;\n if (value) {\n if (!document.pictureInPictureEnabled) {\n console.warn(\"MediaChrome: Picture-in-picture is not enabled\");\n return;\n }\n if (!media.requestPictureInPicture) {\n console.warn(\n \"MediaChrome: The current media does not support picture-in-picture\"\n );\n return;\n }\n const warnNotReady = () => {\n console.warn(\n \"MediaChrome: The media is not ready for picture-in-picture. It must have a readyState > 0.\"\n );\n };\n media.requestPictureInPicture().catch((err) => {\n if (err.code === 11) {\n if (!media.src) {\n console.warn(\n \"MediaChrome: The media is not ready for picture-in-picture. It must have a src set.\"\n );\n return;\n }\n if (media.readyState === 0 && media.preload === \"none\") {\n const cleanup = () => {\n media.removeEventListener(\"loadedmetadata\", tryPip);\n media.preload = \"none\";\n };\n const tryPip = () => {\n media.requestPictureInPicture().catch(warnNotReady);\n cleanup();\n };\n media.addEventListener(\"loadedmetadata\", tryPip);\n media.preload = \"metadata\";\n setTimeout(() => {\n if (media.readyState === 0)\n warnNotReady();\n cleanup();\n }, 1e3);\n } else {\n throw err;\n }\n } else {\n throw err;\n }\n });\n } else if (document.pictureInPictureElement) {\n document.exitPictureInPicture();\n }\n },\n mediaEvents: [\"enterpictureinpicture\", \"leavepictureinpicture\"]\n },\n mediaRenditionList: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return [...(_a = media == null ? void 0 : media.videoRenditions) != null ? _a : []].map((videoRendition) => ({\n ...videoRendition\n }));\n },\n mediaEvents: [\"emptied\", \"loadstart\"],\n videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n },\n /** @TODO Model this as a derived value? (CJP) */\n mediaRenditionSelected: {\n get(stateOwners) {\n var _a, _b, _c;\n const { media } = stateOwners;\n return (_c = (_b = media == null ? void 0 : media.videoRenditions) == null ? void 0 : _b[(_a = media.videoRenditions) == null ? void 0 : _a.selectedIndex]) == null ? void 0 : _c.id;\n },\n set(value, stateOwners) {\n const { media } = stateOwners;\n if (!(media == null ? void 0 : media.videoRenditions)) {\n console.warn(\n \"MediaController: Rendition selection not supported by this media.\"\n );\n return;\n }\n const renditionId = value;\n const index = Array.prototype.findIndex.call(\n media.videoRenditions,\n (r) => r.id == renditionId\n );\n if (media.videoRenditions.selectedIndex != index) {\n media.videoRenditions.selectedIndex = index;\n }\n },\n mediaEvents: [\"emptied\"],\n videoRenditionsEvents: [\"addrendition\", \"removerendition\", \"change\"]\n },\n mediaAudioTrackList: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n return [...(_a = media == null ? void 0 : media.audioTracks) != null ? _a : []];\n },\n mediaEvents: [\"emptied\", \"loadstart\"],\n audioTracksEvents: [\"addtrack\", \"removetrack\"]\n },\n mediaAudioTrackEnabled: {\n get(stateOwners) {\n var _a, _b;\n const { media } = stateOwners;\n return (_b = [...(_a = media == null ? void 0 : media.audioTracks) != null ? _a : []].find(\n (audioTrack) => audioTrack.enabled\n )) == null ? void 0 : _b.id;\n },\n set(value, stateOwners) {\n const { media } = stateOwners;\n if (!(media == null ? void 0 : media.audioTracks)) {\n console.warn(\n \"MediaChrome: Audio track selection not supported by this media.\"\n );\n return;\n }\n const audioTrackId = value;\n for (const track of media.audioTracks) {\n track.enabled = audioTrackId == track.id;\n }\n },\n mediaEvents: [\"emptied\"],\n audioTracksEvents: [\"addtrack\", \"removetrack\", \"change\"]\n },\n mediaIsFullscreen: {\n get(stateOwners) {\n return isFullscreen(stateOwners);\n },\n set(value, stateOwners, event) {\n var _a;\n if (!value) {\n exitFullscreen(stateOwners);\n } else {\n enterFullscreen(stateOwners);\n const isPointer = event.detail;\n if (isPointer)\n (_a = stateOwners.media) == null ? void 0 : _a.focus();\n }\n },\n // older Safari version may require webkit-specific events\n rootEvents: [\"fullscreenchange\", \"webkitfullscreenchange\"],\n // iOS requires webkit-specific events on the video.\n mediaEvents: [\n \"webkitbeginfullscreen\",\n \"webkitendfullscreen\",\n \"webkitpresentationmodechanged\"\n ]\n },\n mediaIsCasting: {\n // Note this relies on a customized castable-video element.\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n if (!(media == null ? void 0 : media.remote) || ((_a = media.remote) == null ? void 0 : _a.state) === \"disconnected\")\n return false;\n return !!media.remote.state;\n },\n set(value, stateOwners) {\n var _a, _b;\n const { media } = stateOwners;\n if (!media)\n return;\n if (value && ((_a = media.remote) == null ? void 0 : _a.state) !== \"disconnected\")\n return;\n if (!value && ((_b = media.remote) == null ? void 0 : _b.state) !== \"connected\")\n return;\n if (typeof media.remote.prompt !== \"function\") {\n console.warn(\n \"MediaChrome: Casting is not supported in this environment\"\n );\n return;\n }\n media.remote.prompt().catch(() => {\n });\n },\n remoteEvents: [\"connect\", \"connecting\", \"disconnect\"]\n },\n // NOTE: Newly added state for tracking airplaying\n mediaIsAirplaying: {\n // NOTE: Cannot know if airplaying since Safari doesn't fully support HTMLMediaElement::remote yet (e.g. remote::state) (CJP)\n get() {\n return false;\n },\n set(_value, stateOwners) {\n const { media } = stateOwners;\n if (!media)\n return;\n if (!(media.webkitShowPlaybackTargetPicker && globalThis.WebKitPlaybackTargetAvailabilityEvent)) {\n console.error(\n \"MediaChrome: received a request to select AirPlay but AirPlay is not supported in this environment\"\n );\n return;\n }\n media.webkitShowPlaybackTargetPicker();\n },\n mediaEvents: [\"webkitcurrentplaybacktargetiswirelesschanged\"]\n },\n mediaFullscreenUnavailable: {\n get(stateOwners) {\n const { media } = stateOwners;\n if (!fullscreenSupported || !hasFullscreenSupport(media))\n return AvailabilityStates.UNSUPPORTED;\n return void 0;\n }\n },\n mediaPipUnavailable: {\n get(stateOwners) {\n const { media } = stateOwners;\n if (!pipSupported || !hasPipSupport(media))\n return AvailabilityStates.UNSUPPORTED;\n else if (media == null ? void 0 : media.disablePictureInPicture)\n return AvailabilityStates.UNAVAILABLE;\n return void 0;\n }\n },\n mediaVolumeUnavailable: {\n get(stateOwners) {\n const { media } = stateOwners;\n if (volumeSupported === false || (media == null ? void 0 : media.volume) == void 0) {\n return AvailabilityStates.UNSUPPORTED;\n }\n return void 0;\n },\n // NOTE: Slightly different impl here. Added generic support for\n // \"stateOwnersUpdateHandlers\" since the original impl had to hack around\n // race conditions. (CJP)\n stateOwnersUpdateHandlers: [\n (handler) => {\n if (volumeSupported == null) {\n volumeSupportPromise.then(\n (supported) => handler(supported ? void 0 : AvailabilityStates.UNSUPPORTED)\n );\n }\n }\n ]\n },\n mediaCastUnavailable: {\n // @ts-ignore\n get(stateOwners, { availability = \"not-available\" } = {}) {\n var _a;\n const { media } = stateOwners;\n if (!castSupported || !((_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.state)) {\n return AvailabilityStates.UNSUPPORTED;\n }\n if (availability == null || availability === \"available\")\n return void 0;\n return AvailabilityStates.UNAVAILABLE;\n },\n stateOwnersUpdateHandlers: [\n (handler, stateOwners) => {\n var _a;\n const { media } = stateOwners;\n if (!media)\n return;\n const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n if (!remotePlaybackDisabled) {\n (_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.watchAvailability((availabilityBool) => {\n const availability = availabilityBool ? \"available\" : \"not-available\";\n handler({ availability });\n }).catch((error) => {\n if (error.name === \"NotSupportedError\") {\n handler({ availability: null });\n } else {\n handler({ availability: \"not-available\" });\n }\n });\n }\n return () => {\n var _a2;\n (_a2 = media == null ? void 0 : media.remote) == null ? void 0 : _a2.cancelWatchAvailability().catch(() => {\n });\n };\n }\n ]\n },\n mediaAirplayUnavailable: {\n get(_stateOwners, event) {\n if (!airplaySupported)\n return AvailabilityStates.UNSUPPORTED;\n if ((event == null ? void 0 : event.availability) === \"not-available\") {\n return AvailabilityStates.UNAVAILABLE;\n }\n return void 0;\n },\n // NOTE: Keeping this event, as it's still the documented way of monitoring\n // for AirPlay availability from Apple.\n // See: https://developer.apple.com/documentation/webkitjs/adding_an_airplay_button_to_your_safari_media_controls#2940021 (CJP)\n mediaEvents: [\"webkitplaybacktargetavailabilitychanged\"],\n stateOwnersUpdateHandlers: [\n (handler, stateOwners) => {\n var _a;\n const { media } = stateOwners;\n if (!media)\n return;\n const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n if (!remotePlaybackDisabled) {\n (_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.watchAvailability((availabilityBool) => {\n const availability = availabilityBool ? \"available\" : \"not-available\";\n handler({ availability });\n }).catch((error) => {\n if (error.name === \"NotSupportedError\") {\n handler({ availability: null });\n } else {\n handler({ availability: \"not-available\" });\n }\n });\n }\n return () => {\n var _a2;\n (_a2 = media == null ? void 0 : media.remote) == null ? void 0 : _a2.cancelWatchAvailability().catch(() => {\n });\n };\n }\n ]\n },\n mediaRenditionUnavailable: {\n get(stateOwners) {\n var _a;\n const { media } = stateOwners;\n if (!(media == null ? void 0 : media.videoRenditions)) {\n return AvailabilityStates.UNSUPPORTED;\n }\n if (!((_a = media.videoRenditions) == null ? void 0 : _a.length)) {\n return AvailabilityStates.UNAVAILABLE;\n }\n return void 0;\n },\n mediaEvents: [\"emptied\", \"loadstart\"],\n videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n },\n mediaAudioTrackUnavailable: {\n get(stateOwners) {\n var _a, _b;\n const { media } = stateOwners;\n if (!(media == null ? void 0 : media.audioTracks)) {\n return AvailabilityStates.UNSUPPORTED;\n }\n if (((_b = (_a = media.audioTracks) == null ? void 0 : _a.length) != null ? _b : 0) <= 1) {\n return AvailabilityStates.UNAVAILABLE;\n }\n return void 0;\n },\n mediaEvents: [\"emptied\", \"loadstart\"],\n audioTracksEvents: [\"addtrack\", \"removetrack\"]\n },\n mediaLang: {\n get(stateOwners) {\n const { options: { mediaLang } = {} } = stateOwners;\n return mediaLang != null ? mediaLang : \"en\";\n }\n }\n};\nexport {\n prepareStateOwners,\n stateMediator,\n volumeSupportPromise\n};\n","import { TextTrackKinds, TextTrackModes } from \"../constants.js\";\nimport { getTextTracksList, updateTracksModeTo } from \"../utils/captions.js\";\nconst getSubtitleTracks = (stateOwners) => {\n return getTextTracksList(stateOwners.media, (textTrack) => {\n return [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n textTrack.kind\n );\n }).sort((a, b) => a.kind >= b.kind ? 1 : -1);\n};\nconst getShowingSubtitleTracks = (stateOwners) => {\n return getTextTracksList(stateOwners.media, (textTrack) => {\n return textTrack.mode === TextTrackModes.SHOWING && [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n textTrack.kind\n );\n });\n};\nconst toggleSubtitleTracks = (stateOwners, force) => {\n const tracks = getSubtitleTracks(stateOwners);\n const showingSubitleTracks = getShowingSubtitleTracks(stateOwners);\n const subtitlesShowing = !!showingSubitleTracks.length;\n if (!tracks.length)\n return;\n if (force === false || subtitlesShowing && force !== true) {\n updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n } else if (force === true || !subtitlesShowing && force !== false) {\n let subTrack = tracks[0];\n const { options } = stateOwners;\n if (!(options == null ? void 0 : options.noSubtitlesLangPref)) {\n const subtitlesPref = globalThis.localStorage.getItem(\n \"media-chrome-pref-subtitles-lang\"\n );\n const userLangPrefs = subtitlesPref ? [subtitlesPref, ...globalThis.navigator.languages] : globalThis.navigator.languages;\n const preferredAvailableSubs = tracks.filter((textTrack) => {\n return userLangPrefs.some(\n (lang) => textTrack.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n );\n }).sort((textTrackA, textTrackB) => {\n const idxA = userLangPrefs.findIndex(\n (lang) => textTrackA.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n );\n const idxB = userLangPrefs.findIndex(\n (lang) => textTrackB.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n );\n return idxA - idxB;\n });\n if (preferredAvailableSubs[0]) {\n subTrack = preferredAvailableSubs[0];\n }\n }\n const { language, label, kind } = subTrack;\n updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n updateTracksModeTo(TextTrackModes.SHOWING, tracks, [\n { language, label, kind }\n ]);\n }\n};\nconst areValuesEq = (x, y) => {\n if (x === y)\n return true;\n if (x == null || y == null)\n return false;\n if (typeof x !== typeof y)\n return false;\n if (typeof x === \"number\" && Number.isNaN(x) && Number.isNaN(y))\n return true;\n if (typeof x !== \"object\")\n return false;\n if (Array.isArray(x))\n return areArraysEq(x, y);\n return Object.entries(x).every(\n // NOTE: Checking key in y to disambiguate between between missing keys and keys whose value are undefined (CJP)\n ([key, value]) => key in y && areValuesEq(value, y[key])\n );\n};\nconst areArraysEq = (xs, ys) => {\n const xIsArray = Array.isArray(xs);\n const yIsArray = Array.isArray(ys);\n if (xIsArray !== yIsArray)\n return false;\n if (!(xIsArray || yIsArray))\n return true;\n if (xs.length !== ys.length)\n return false;\n return xs.every((x, i) => areValuesEq(x, ys[i]));\n};\nexport {\n areArraysEq,\n areValuesEq,\n getShowingSubtitleTracks,\n getSubtitleTracks,\n toggleSubtitleTracks\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _mediaController;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { getOrInsertCSSRule, namedNodeMapToObject } from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs, _props = {}) {\n return (\n /*html*/\n `\n <style>\n :host {\n font: var(--media-font,\n var(--media-font-weight, normal)\n var(--media-font-size, 14px) /\n var(--media-text-content-height, var(--media-control-height, 24px))\n var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n background: var(--media-text-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7))));\n padding: var(--media-control-padding, 10px);\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n box-sizing: border-box;\n text-align: center;\n pointer-events: auto;\n }\n\n ${/*\n Only show outline when keyboard focusing.\n https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n */\n \"\"}\n :host(:focus-visible) {\n box-shadow: inset 0 0 0 2px rgb(27 127 204 / .9);\n outline: 0;\n }\n\n ${/*\n * hide default focus ring, particularly when using mouse\n */\n \"\"}\n :host(:where(:focus)) {\n box-shadow: none;\n outline: 0;\n }\n </style>\n\n ${this.getSlotTemplateHTML(_attrs, _props)}\n `\n );\n}\nfunction getSlotTemplateHTML(_attrs, _props) {\n return (\n /*html*/\n `\n <slot></slot>\n `\n );\n}\nclass MediaTextDisplay extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _mediaController, void 0);\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n }\n static get observedAttributes() {\n return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d, _e;\n if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n }\n }\n }\n connectedCallback() {\n var _a, _b, _c;\n const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n style.setProperty(\n \"display\",\n `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n );\n const mediaControllerId = this.getAttribute(\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n );\n if (mediaControllerId) {\n __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n mediaControllerId\n ));\n (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n }\n }\n disconnectedCallback() {\n var _a, _b;\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n}\n_mediaController = new WeakMap();\nMediaTextDisplay.shadowRootOptions = { mode: \"open\" };\nMediaTextDisplay.getTemplateHTML = getTemplateHTML;\nMediaTextDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-text-display\")) {\n globalThis.customElements.define(\"media-text-display\", MediaTextDisplay);\n}\nvar media_text_display_default = MediaTextDisplay;\nexport {\n MediaTextDisplay,\n media_text_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _template, _prevTemplate, _prevTemplateId, _upgradeProperty, upgradeProperty_fn, _updateTemplate, updateTemplate_fn;\nimport { MediaStateChangeEvents } from \"./constants.js\";\nimport { globalThis, document } from \"./utils/server-safe-globals.js\";\nimport { TemplateInstance } from \"./utils/template-parts.js\";\nimport { processor } from \"./utils/template-processor.js\";\nimport { camelCase, isNumericString } from \"./utils/utils.js\";\nexport * from \"./utils/template-parts.js\";\nconst observedMediaAttributes = {\n mediatargetlivewindow: \"targetlivewindow\",\n mediastreamtype: \"streamtype\"\n};\nconst prependTemplate = document.createElement(\"template\");\nprependTemplate.innerHTML = /*html*/\n`\n <style>\n :host {\n display: inline-block;\n line-height: 0;\n }\n\n media-controller {\n width: 100%;\n height: 100%;\n }\n\n media-captions-button:not([mediasubtitleslist]),\n media-captions-menu:not([mediasubtitleslist]),\n media-captions-menu-button:not([mediasubtitleslist]),\n media-audio-track-menu[mediaaudiotrackunavailable],\n media-audio-track-menu-button[mediaaudiotrackunavailable],\n media-rendition-menu[mediarenditionunavailable],\n media-rendition-menu-button[mediarenditionunavailable],\n media-volume-range[mediavolumeunavailable],\n media-airplay-button[mediaairplayunavailable],\n media-fullscreen-button[mediafullscreenunavailable],\n media-cast-button[mediacastunavailable],\n media-pip-button[mediapipunavailable] {\n display: none;\n }\n </style>\n`;\nclass MediaThemeElement extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _upgradeProperty);\n __privateAdd(this, _updateTemplate);\n __privateAdd(this, _template, void 0);\n __privateAdd(this, _prevTemplate, void 0);\n __privateAdd(this, _prevTemplateId, void 0);\n if (this.shadowRoot) {\n this.renderRoot = this.shadowRoot;\n } else {\n this.renderRoot = this.attachShadow({ mode: \"open\" });\n this.createRenderer();\n }\n const observer = new MutationObserver((mutationList) => {\n var _a;\n if (this.mediaController && !((_a = this.mediaController) == null ? void 0 : _a.breakpointsComputed))\n return;\n if (mutationList.some((mutation) => {\n const target = mutation.target;\n if (target === this)\n return true;\n if (target.localName !== \"media-controller\")\n return false;\n if (observedMediaAttributes[mutation.attributeName])\n return true;\n if (mutation.attributeName.startsWith(\"breakpoint\"))\n return true;\n return false;\n })) {\n this.render();\n }\n });\n observer.observe(this, { attributes: true });\n observer.observe(this.renderRoot, {\n attributes: true,\n subtree: true\n });\n this.addEventListener(\n MediaStateChangeEvents.BREAKPOINTS_COMPUTED,\n this.render\n );\n __privateMethod(this, _upgradeProperty, upgradeProperty_fn).call(this, \"template\");\n }\n /** @type {HTMLElement & { breakpointsComputed?: boolean }} */\n get mediaController() {\n return this.renderRoot.querySelector(\"media-controller\");\n }\n get template() {\n var _a;\n return (_a = __privateGet(this, _template)) != null ? _a : this.constructor.template;\n }\n set template(value) {\n if (value === null) {\n this.removeAttribute(\"template\");\n return;\n }\n if (typeof value === \"string\") {\n this.setAttribute(\"template\", value);\n } else if (value instanceof HTMLTemplateElement) {\n __privateSet(this, _template, value);\n __privateSet(this, _prevTemplateId, null);\n this.createRenderer();\n }\n }\n get props() {\n var _a, _b, _c;\n const observedAttributes = [\n ...Array.from((_b = (_a = this.mediaController) == null ? void 0 : _a.attributes) != null ? _b : []).filter(\n ({ name }) => {\n return observedMediaAttributes[name] || name.startsWith(\"breakpoint\");\n }\n ),\n ...Array.from(this.attributes)\n ];\n const props = {};\n for (const attr of observedAttributes) {\n const name = (_c = observedMediaAttributes[attr.name]) != null ? _c : camelCase(attr.name);\n let { value } = attr;\n if (value != null) {\n if (isNumericString(value)) {\n value = parseFloat(value);\n }\n props[name] = value === \"\" ? true : value;\n } else {\n props[name] = false;\n }\n }\n return props;\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === \"template\" && oldValue != newValue) {\n __privateMethod(this, _updateTemplate, updateTemplate_fn).call(this);\n }\n }\n connectedCallback() {\n __privateMethod(this, _updateTemplate, updateTemplate_fn).call(this);\n }\n createRenderer() {\n if (this.template instanceof HTMLTemplateElement && this.template !== __privateGet(this, _prevTemplate)) {\n __privateSet(this, _prevTemplate, this.template);\n this.renderer = new TemplateInstance(\n this.template,\n this.props,\n // @ts-ignore\n this.constructor.processor\n );\n this.renderRoot.textContent = \"\";\n this.renderRoot.append(\n prependTemplate.content.cloneNode(true),\n this.renderer\n );\n }\n }\n render() {\n var _a;\n (_a = this.renderer) == null ? void 0 : _a.update(this.props);\n }\n}\n_template = new WeakMap();\n_prevTemplate = new WeakMap();\n_prevTemplateId = new WeakMap();\n_upgradeProperty = new WeakSet();\nupgradeProperty_fn = function(prop) {\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n delete this[prop];\n this[prop] = value;\n }\n};\n_updateTemplate = new WeakSet();\nupdateTemplate_fn = function() {\n var _a;\n const templateId = this.getAttribute(\"template\");\n if (!templateId || templateId === __privateGet(this, _prevTemplateId))\n return;\n const rootNode = this.getRootNode();\n const template = (_a = rootNode == null ? void 0 : rootNode.getElementById) == null ? void 0 : _a.call(\n rootNode,\n templateId\n );\n if (template) {\n __privateSet(this, _prevTemplateId, templateId);\n __privateSet(this, _template, template);\n this.createRenderer();\n return;\n }\n if (isValidUrl(templateId)) {\n __privateSet(this, _prevTemplateId, templateId);\n request(templateId).then((data) => {\n const template2 = document.createElement(\"template\");\n template2.innerHTML = data;\n __privateSet(this, _template, template2);\n this.createRenderer();\n }).catch(console.error);\n }\n};\nMediaThemeElement.observedAttributes = [\"template\"];\nMediaThemeElement.processor = processor;\nfunction isValidUrl(url) {\n if (!/^(\\/|\\.\\/|https?:\\/\\/)/.test(url))\n return false;\n const base = /^https?:\\/\\//.test(url) ? void 0 : location.origin;\n try {\n new URL(url, base);\n } catch (e) {\n return false;\n }\n return true;\n}\nasync function request(resource) {\n const response = await fetch(resource);\n if (response.status !== 200) {\n throw new Error(\n `Failed to load resource: the server responded with a status of ${response.status}`\n );\n }\n return response.text();\n}\nif (!globalThis.customElements.get(\"media-theme\")) {\n globalThis.customElements.define(\"media-theme\", MediaThemeElement);\n}\nexport {\n MediaThemeElement\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport {\n getBooleanAttr,\n getNumericAttr,\n getOrInsertCSSRule,\n setBooleanAttr,\n setNumericAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatAsTimePhrase, formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n REMAINING: \"remaining\",\n SHOW_DURATION: \"showduration\",\n NO_TOGGLE: \"notoggle\"\n};\nconst CombinedAttributes = [\n ...Object.values(Attributes),\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n MediaUIAttributes.MEDIA_DURATION,\n MediaUIAttributes.MEDIA_SEEKABLE\n];\nconst ButtonPressedKeys = [\"Enter\", \" \"];\nconst DEFAULT_TIMES_SEP = \" / \";\nconst formatTimesLabel = (el, { timesSep = DEFAULT_TIMES_SEP } = {}) => {\n var _a, _b;\n const currentTime = (_a = el.mediaCurrentTime) != null ? _a : 0;\n const [, seekableEnd] = (_b = el.mediaSeekable) != null ? _b : [];\n let endTime = 0;\n if (Number.isFinite(el.mediaDuration)) {\n endTime = el.mediaDuration;\n } else if (Number.isFinite(seekableEnd)) {\n endTime = seekableEnd;\n }\n const timeLabel = el.remaining ? formatTime(0 - (endTime - currentTime)) : formatTime(currentTime);\n if (!el.showDuration)\n return timeLabel;\n return `${timeLabel}${timesSep}${formatTime(endTime)}`;\n};\nconst DEFAULT_MISSING_TIME_PHRASE = \"video not loaded, unknown time.\";\nconst updateAriaValueText = (el) => {\n var _a;\n const currentTime = el.mediaCurrentTime;\n const [, seekableEnd] = (_a = el.mediaSeekable) != null ? _a : [];\n let endTime = null;\n if (Number.isFinite(el.mediaDuration)) {\n endTime = el.mediaDuration;\n } else if (Number.isFinite(seekableEnd)) {\n endTime = seekableEnd;\n }\n if (currentTime == null || endTime === null) {\n el.setAttribute(\"aria-valuetext\", DEFAULT_MISSING_TIME_PHRASE);\n return;\n }\n const currentTimePhrase = el.remaining ? formatAsTimePhrase(0 - (endTime - currentTime)) : formatAsTimePhrase(currentTime);\n if (!el.showDuration) {\n el.setAttribute(\"aria-valuetext\", currentTimePhrase);\n return;\n }\n const totalTimePhrase = formatAsTimePhrase(endTime);\n const fullPhrase = `${currentTimePhrase} of ${totalTimePhrase}`;\n el.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nfunction getSlotTemplateHTML(_attrs, props) {\n return (\n /*html*/\n `\n <slot>${formatTimesLabel(props)}</slot>\n `\n );\n}\nclass MediaTimeDisplay extends MediaTextDisplay {\n constructor() {\n super();\n __privateAdd(this, _slot, void 0);\n __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n __privateGet(this, _slot).innerHTML = `${formatTimesLabel(this)}`;\n }\n static get observedAttributes() {\n return [...super.observedAttributes, ...CombinedAttributes, \"disabled\"];\n }\n connectedCallback() {\n const { style } = getOrInsertCSSRule(\n this.shadowRoot,\n \":host(:hover:not([notoggle]))\"\n );\n style.setProperty(\"cursor\", \"var(--media-cursor, pointer)\");\n style.setProperty(\n \"background\",\n \"var(--media-control-hover-background, rgba(50 50 70 / .7))\"\n );\n if (!this.hasAttribute(\"disabled\")) {\n this.enable();\n }\n this.setAttribute(\"role\", \"progressbar\");\n this.setAttribute(\"aria-label\", t(\"playback time\"));\n const keyUpHandler = (evt) => {\n const { key } = evt;\n if (!ButtonPressedKeys.includes(key)) {\n this.removeEventListener(\"keyup\", keyUpHandler);\n return;\n }\n this.toggleTimeDisplay();\n };\n this.addEventListener(\"keydown\", (evt) => {\n const { metaKey, altKey, key } = evt;\n if (metaKey || altKey || !ButtonPressedKeys.includes(key)) {\n this.removeEventListener(\"keyup\", keyUpHandler);\n return;\n }\n this.addEventListener(\"keyup\", keyUpHandler);\n });\n this.addEventListener(\"click\", this.toggleTimeDisplay);\n super.connectedCallback();\n }\n toggleTimeDisplay() {\n if (this.noToggle) {\n return;\n }\n if (this.hasAttribute(\"remaining\")) {\n this.removeAttribute(\"remaining\");\n } else {\n this.setAttribute(\"remaining\", \"\");\n }\n }\n disconnectedCallback() {\n this.disable();\n super.disconnectedCallback();\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (CombinedAttributes.includes(attrName)) {\n this.update();\n } else if (attrName === \"disabled\" && newValue !== oldValue) {\n if (newValue == null) {\n this.enable();\n } else {\n this.disable();\n }\n }\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n enable() {\n this.tabIndex = 0;\n }\n disable() {\n this.tabIndex = -1;\n }\n // Own props\n /**\n * Whether to show the remaining time\n */\n get remaining() {\n return getBooleanAttr(this, Attributes.REMAINING);\n }\n set remaining(show) {\n setBooleanAttr(this, Attributes.REMAINING, show);\n }\n /**\n * Whether to show the duration\n */\n get showDuration() {\n return getBooleanAttr(this, Attributes.SHOW_DURATION);\n }\n set showDuration(show) {\n setBooleanAttr(this, Attributes.SHOW_DURATION, show);\n }\n /**\n * Disable the default behavior that toggles between current and remaining time\n */\n get noToggle() {\n return getBooleanAttr(this, Attributes.NO_TOGGLE);\n }\n set noToggle(noToggle) {\n setBooleanAttr(this, Attributes.NO_TOGGLE, noToggle);\n }\n // Props derived from media UI attributes\n /**\n * Get the duration\n */\n get mediaDuration() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n }\n set mediaDuration(time) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n }\n /**\n * The current time in seconds\n */\n get mediaCurrentTime() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n }\n set mediaCurrentTime(time) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n }\n /**\n * Range of values that can be seeked to.\n * An array of two numbers [start, end]\n */\n get mediaSeekable() {\n const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n if (!seekable)\n return void 0;\n return seekable.split(\":\").map((time) => +time);\n }\n set mediaSeekable(range) {\n if (range == null) {\n this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n return;\n }\n this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n }\n update() {\n const timesLabel = formatTimesLabel(this);\n updateAriaValueText(this);\n if (timesLabel !== __privateGet(this, _slot).innerHTML) {\n __privateGet(this, _slot).innerHTML = timesLabel;\n }\n }\n}\n_slot = new WeakMap();\nMediaTimeDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-time-display\")) {\n globalThis.customElements.define(\"media-time-display\", MediaTimeDisplay);\n}\nvar media_time_display_default = MediaTimeDisplay;\nexport {\n Attributes,\n media_time_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _rootNode, _animation, _boxes, _previewTime, _previewBox, _currentBox, _boxPaddingLeft, _boxPaddingRight, _mediaChaptersCues, _isPointerDown, _toggleRangeAnimation, toggleRangeAnimation_fn, _shouldRangeAnimate, shouldRangeAnimate_fn, _updateRange, _getElementRects, getElementRects_fn, _getBoxPosition, getBoxPosition_fn, _getBoxShiftPosition, getBoxShiftPosition_fn, _handlePointerMove, handlePointerMove_fn, _previewRequest, previewRequest_fn, _seekRequest, seekRequest_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaChromeRange } from \"./media-chrome-range.js\";\nimport \"./media-preview-thumbnail.js\";\nimport \"./media-preview-time-display.js\";\nimport \"./media-preview-chapter-display.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { isValidNumber } from \"./utils/utils.js\";\nimport { formatAsTimePhrase } from \"./utils/time.js\";\nimport { isElementVisible } from \"./utils/element-utils.js\";\nimport { RangeAnimation } from \"./utils/range-animation.js\";\nimport {\n getOrInsertCSSRule,\n containsComposedNode,\n closestComposedNode,\n getBooleanAttr,\n setBooleanAttr,\n getNumericAttr,\n setNumericAttr,\n getStringAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nimport MediaPreviewThumbnail from \"./media-preview-thumbnail.js\";\nconst DEFAULT_MISSING_TIME_PHRASE = \"video not loaded, unknown time.\";\nconst updateAriaValueText = (el) => {\n const range = el.range;\n const currentTimePhrase = formatAsTimePhrase(+calcTimeFromRangeValue(el));\n const totalTimePhrase = formatAsTimePhrase(+el.mediaSeekableEnd);\n const fullPhrase = !(currentTimePhrase && totalTimePhrase) ? DEFAULT_MISSING_TIME_PHRASE : `${currentTimePhrase} of ${totalTimePhrase}`;\n range.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeRange.getTemplateHTML(_attrs)}\n <style>\n :host {\n --media-box-border-radius: 4px;\n --media-box-padding-left: 10px;\n --media-box-padding-right: 10px;\n --media-preview-border-radius: var(--media-box-border-radius);\n --media-box-arrow-offset: var(--media-box-border-radius);\n --_control-background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n --_preview-background: var(--media-preview-background, var(--_control-background));\n\n ${/* 1% rail width trick was off in Safari, contain: layout seems to\n prevent the horizontal overflow as well. */\n \"\"}\n contain: layout;\n }\n\n #buffered {\n background: var(--media-time-range-buffered-color, rgb(255 255 255 / .4));\n position: absolute;\n height: 100%;\n will-change: width;\n }\n\n #preview-rail,\n #current-rail {\n width: 100%;\n position: absolute;\n left: 0;\n bottom: 100%;\n pointer-events: none;\n will-change: transform;\n }\n\n [part~=\"box\"] {\n width: min-content;\n ${/* absolute position is needed here so the box doesn't overflow the bounds */\n \"\"}\n position: absolute;\n bottom: 100%;\n flex-direction: column;\n align-items: center;\n transform: translateX(-50%);\n }\n\n [part~=\"current-box\"] {\n display: var(--media-current-box-display, var(--media-box-display, flex));\n margin: var(--media-current-box-margin, var(--media-box-margin, 0 0 5px));\n visibility: hidden;\n }\n\n [part~=\"preview-box\"] {\n display: var(--media-preview-box-display, var(--media-box-display, flex));\n margin: var(--media-preview-box-margin, var(--media-box-margin, 0 0 5px));\n transition-property: var(--media-preview-transition-property, visibility, opacity);\n transition-duration: var(--media-preview-transition-duration-out, .25s);\n transition-delay: var(--media-preview-transition-delay-out, 0s);\n visibility: hidden;\n opacity: 0;\n }\n\n :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}])[dragging]) [part~=\"preview-box\"] {\n transition-duration: var(--media-preview-transition-duration-in, .5s);\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n visibility: visible;\n opacity: 1;\n }\n\n @media (hover: hover) {\n :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}]):hover) [part~=\"preview-box\"] {\n transition-duration: var(--media-preview-transition-duration-in, .5s);\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n visibility: visible;\n opacity: 1;\n }\n }\n\n media-preview-thumbnail,\n ::slotted(media-preview-thumbnail) {\n visibility: hidden;\n ${/* delay changing these CSS props until the preview box transition is ended */\n \"\"}\n transition: visibility 0s .25s;\n transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n background: var(--media-preview-thumbnail-background, var(--_preview-background));\n box-shadow: var(--media-preview-thumbnail-box-shadow, 0 0 4px rgb(0 0 0 / .2));\n max-width: var(--media-preview-thumbnail-max-width, 180px);\n max-height: var(--media-preview-thumbnail-max-height, 160px);\n min-width: var(--media-preview-thumbnail-min-width, 120px);\n min-height: var(--media-preview-thumbnail-min-height, 80px);\n border: var(--media-preview-thumbnail-border);\n border-radius: var(--media-preview-thumbnail-border-radius,\n var(--media-preview-border-radius) var(--media-preview-border-radius) 0 0);\n }\n\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) media-preview-thumbnail,\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) ::slotted(media-preview-thumbnail) {\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n visibility: visible;\n }\n\n @media (hover: hover) {\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) media-preview-thumbnail,\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) ::slotted(media-preview-thumbnail) {\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n visibility: visible;\n }\n\n :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n --media-time-range-hover-display: block;\n }\n }\n\n media-preview-chapter-display,\n ::slotted(media-preview-chapter-display) {\n font-size: var(--media-font-size, 13px);\n line-height: 17px;\n min-width: 0;\n visibility: hidden;\n ${/* delay changing these CSS props until the preview box transition is ended */\n \"\"}\n transition: min-width 0s, border-radius 0s, margin 0s, padding 0s, visibility 0s;\n transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n background: var(--media-preview-chapter-background, var(--_preview-background));\n border-radius: var(--media-preview-chapter-border-radius,\n var(--media-preview-border-radius) var(--media-preview-border-radius)\n var(--media-preview-border-radius) var(--media-preview-border-radius));\n padding: var(--media-preview-chapter-padding, 3.5px 9px);\n margin: var(--media-preview-chapter-margin, 0 0 5px);\n text-shadow: var(--media-preview-chapter-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n }\n\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-chapter-display,\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-chapter-display) {\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n border-radius: var(--media-preview-chapter-border-radius, 0);\n padding: var(--media-preview-chapter-padding, 3.5px 9px 0);\n margin: var(--media-preview-chapter-margin, 0);\n min-width: 100%;\n }\n\n media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}],\n ::slotted(media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}]) {\n visibility: visible;\n }\n\n media-preview-chapter-display:not([aria-valuetext]),\n ::slotted(media-preview-chapter-display:not([aria-valuetext])) {\n display: none;\n }\n\n media-preview-time-display,\n ::slotted(media-preview-time-display),\n media-time-display,\n ::slotted(media-time-display) {\n font-size: var(--media-font-size, 13px);\n line-height: 17px;\n min-width: 0;\n ${/* delay changing these CSS props until the preview box transition is ended */\n \"\"}\n transition: min-width 0s, border-radius 0s;\n transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n background: var(--media-preview-time-background, var(--_preview-background));\n border-radius: var(--media-preview-time-border-radius,\n var(--media-preview-border-radius) var(--media-preview-border-radius)\n var(--media-preview-border-radius) var(--media-preview-border-radius));\n padding: var(--media-preview-time-padding, 3.5px 9px);\n margin: var(--media-preview-time-margin, 0);\n text-shadow: var(--media-preview-time-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n transform: translateX(min(\n max(calc(50% - var(--_box-width) / 2),\n calc(var(--_box-shift, 0))),\n calc(var(--_box-width) / 2 - 50%)\n ));\n }\n\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-time-display,\n :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-time-display) {\n transition-delay: var(--media-preview-transition-delay-in, .25s);\n border-radius: var(--media-preview-time-border-radius,\n 0 0 var(--media-preview-border-radius) var(--media-preview-border-radius));\n min-width: 100%;\n }\n\n :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n --media-time-range-hover-display: block;\n }\n\n [part~=\"arrow\"],\n ::slotted([part~=\"arrow\"]) {\n display: var(--media-box-arrow-display, inline-block);\n transform: translateX(min(\n max(calc(50% - var(--_box-width) / 2 + var(--media-box-arrow-offset)),\n calc(var(--_box-shift, 0))),\n calc(var(--_box-width) / 2 - 50% - var(--media-box-arrow-offset))\n ));\n ${/* border-color has to come before border-top-color! */\n \"\"}\n border-color: transparent;\n border-top-color: var(--media-box-arrow-background, var(--_control-background));\n border-width: var(--media-box-arrow-border-width,\n var(--media-box-arrow-height, 5px) var(--media-box-arrow-width, 6px) 0);\n border-style: solid;\n justify-content: center;\n height: 0;\n }\n </style>\n <div id=\"preview-rail\">\n <slot name=\"preview\" part=\"box preview-box\">\n <media-preview-thumbnail>\n <template shadowrootmode=\"${MediaPreviewThumbnail.shadowRootOptions.mode}\">\n ${MediaPreviewThumbnail.getTemplateHTML({})}\n </template>\n </media-preview-thumbnail>\n <media-preview-chapter-display></media-preview-chapter-display>\n <media-preview-time-display></media-preview-time-display>\n <slot name=\"preview-arrow\"><div part=\"arrow\"></div></slot>\n </slot>\n </div>\n <div id=\"current-rail\">\n <slot name=\"current\" part=\"box current-box\">\n ${/* Example: add the current time w/ arrow to the playhead\n <media-time-display slot=\"current\"></media-time-display>\n <div part=\"arrow\" slot=\"current\"></div> */\n \"\"}\n </slot>\n </div>\n `\n );\n}\nconst calcRangeValueFromTime = (el, time = el.mediaCurrentTime) => {\n const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n if (Number.isNaN(endTime))\n return 0;\n const value = (time - startTime) / (endTime - startTime);\n return Math.max(0, Math.min(value, 1));\n};\nconst calcTimeFromRangeValue = (el, value = el.range.valueAsNumber) => {\n const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n if (Number.isNaN(endTime))\n return 0;\n return value * (endTime - startTime) + startTime;\n};\nclass MediaTimeRange extends MediaChromeRange {\n constructor() {\n super();\n __privateAdd(this, _toggleRangeAnimation);\n __privateAdd(this, _shouldRangeAnimate);\n __privateAdd(this, _getElementRects);\n /**\n * Get the position, max and min for the box in percentage.\n * It's important this is in percentage so when the player is resized\n * the box will move accordingly.\n */\n __privateAdd(this, _getBoxPosition);\n __privateAdd(this, _getBoxShiftPosition);\n __privateAdd(this, _handlePointerMove);\n __privateAdd(this, _previewRequest);\n __privateAdd(this, _seekRequest);\n __privateAdd(this, _rootNode, void 0);\n __privateAdd(this, _animation, void 0);\n __privateAdd(this, _boxes, void 0);\n __privateAdd(this, _previewTime, void 0);\n __privateAdd(this, _previewBox, void 0);\n __privateAdd(this, _currentBox, void 0);\n __privateAdd(this, _boxPaddingLeft, void 0);\n __privateAdd(this, _boxPaddingRight, void 0);\n __privateAdd(this, _mediaChaptersCues, void 0);\n __privateAdd(this, _isPointerDown, void 0);\n __privateAdd(this, _updateRange, (value) => {\n if (this.dragging)\n return;\n if (isValidNumber(value)) {\n this.range.valueAsNumber = value;\n }\n if (!__privateGet(this, _isPointerDown)) {\n this.updateBar();\n }\n });\n const track = this.shadowRoot.querySelector(\"#track\");\n track.insertAdjacentHTML(\n \"afterbegin\",\n '<div id=\"buffered\" part=\"buffered\"></div>'\n );\n __privateSet(this, _boxes, this.shadowRoot.querySelectorAll('[part~=\"box\"]'));\n __privateSet(this, _previewBox, this.shadowRoot.querySelector('[part~=\"preview-box\"]'));\n __privateSet(this, _currentBox, this.shadowRoot.querySelector('[part~=\"current-box\"]'));\n const computedStyle = getComputedStyle(this);\n __privateSet(this, _boxPaddingLeft, parseInt(\n computedStyle.getPropertyValue(\"--media-box-padding-left\")\n ));\n __privateSet(this, _boxPaddingRight, parseInt(\n computedStyle.getPropertyValue(\"--media-box-padding-right\")\n ));\n __privateSet(this, _animation, new RangeAnimation(this.range, __privateGet(this, _updateRange), 60));\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PAUSED,\n MediaUIAttributes.MEDIA_DURATION,\n MediaUIAttributes.MEDIA_SEEKABLE,\n MediaUIAttributes.MEDIA_CURRENT_TIME,\n MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n MediaUIAttributes.MEDIA_PREVIEW_TIME,\n MediaUIAttributes.MEDIA_PREVIEW_CHAPTER,\n MediaUIAttributes.MEDIA_BUFFERED,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n MediaUIAttributes.MEDIA_LOADING,\n MediaUIAttributes.MEDIA_ENDED\n ];\n }\n connectedCallback() {\n var _a;\n super.connectedCallback();\n this.range.setAttribute(\"aria-label\", t(\"seek\"));\n __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n __privateSet(this, _rootNode, this.getRootNode());\n (_a = __privateGet(this, _rootNode)) == null ? void 0 : _a.addEventListener(\"transitionstart\", this);\n }\n disconnectedCallback() {\n var _a;\n super.disconnectedCallback();\n __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n (_a = __privateGet(this, _rootNode)) == null ? void 0 : _a.removeEventListener(\"transitionstart\", this);\n __privateSet(this, _rootNode, null);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (oldValue == newValue)\n return;\n if (attrName === MediaUIAttributes.MEDIA_CURRENT_TIME || attrName === MediaUIAttributes.MEDIA_PAUSED || attrName === MediaUIAttributes.MEDIA_ENDED || attrName === MediaUIAttributes.MEDIA_LOADING || attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n __privateGet(this, _animation).update({\n start: calcRangeValueFromTime(this),\n duration: this.mediaSeekableEnd - this.mediaSeekableStart,\n playbackRate: this.mediaPlaybackRate\n });\n __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n updateAriaValueText(this);\n } else if (attrName === MediaUIAttributes.MEDIA_BUFFERED) {\n this.updateBufferedBar();\n }\n if (attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n this.mediaChaptersCues = __privateGet(this, _mediaChaptersCues);\n this.updateBar();\n }\n }\n get mediaChaptersCues() {\n return __privateGet(this, _mediaChaptersCues);\n }\n set mediaChaptersCues(value) {\n var _a;\n __privateSet(this, _mediaChaptersCues, value);\n this.updateSegments(\n (_a = __privateGet(this, _mediaChaptersCues)) == null ? void 0 : _a.map((c) => ({\n start: calcRangeValueFromTime(this, c.startTime),\n end: calcRangeValueFromTime(this, c.endTime)\n }))\n );\n }\n /**\n * Is the media paused\n */\n get mediaPaused() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n }\n set mediaPaused(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n }\n /**\n * Is the media loading\n */\n get mediaLoading() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n }\n set mediaLoading(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n }\n /**\n *\n */\n get mediaDuration() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n }\n set mediaDuration(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, value);\n }\n /**\n *\n */\n get mediaCurrentTime() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n }\n set mediaCurrentTime(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, value);\n }\n /**\n *\n */\n get mediaPlaybackRate() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, 1);\n }\n set mediaPlaybackRate(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n }\n /**\n * An array of ranges, each range being an array of two numbers.\n * e.g. [[1, 2], [3, 4]]\n */\n get mediaBuffered() {\n const buffered = this.getAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n if (!buffered)\n return [];\n return buffered.split(\" \").map((timePair) => timePair.split(\":\").map((timeStr) => +timeStr));\n }\n set mediaBuffered(list) {\n if (!list) {\n this.removeAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n return;\n }\n const strVal = list.map((tuple) => tuple.join(\":\")).join(\" \");\n this.setAttribute(MediaUIAttributes.MEDIA_BUFFERED, strVal);\n }\n /**\n * Range of values that can be seeked to\n * An array of two numbers [start, end]\n */\n get mediaSeekable() {\n const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n if (!seekable)\n return void 0;\n return seekable.split(\":\").map((time) => +time);\n }\n set mediaSeekable(range) {\n if (range == null) {\n this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n return;\n }\n this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n }\n /**\n *\n */\n get mediaSeekableEnd() {\n var _a;\n const [, end = this.mediaDuration] = (_a = this.mediaSeekable) != null ? _a : [];\n return end;\n }\n get mediaSeekableStart() {\n var _a;\n const [start = 0] = (_a = this.mediaSeekable) != null ? _a : [];\n return start;\n }\n /**\n * The url of the preview image\n */\n get mediaPreviewImage() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n }\n set mediaPreviewImage(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n }\n /**\n *\n */\n get mediaPreviewTime() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n }\n set mediaPreviewTime(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n }\n /**\n *\n */\n get mediaEnded() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED);\n }\n set mediaEnded(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED, value);\n }\n /* Add a buffered progress bar */\n updateBar() {\n super.updateBar();\n this.updateBufferedBar();\n this.updateCurrentBox();\n }\n updateBufferedBar() {\n var _a;\n const buffered = this.mediaBuffered;\n if (!buffered.length) {\n return;\n }\n let relativeBufferedEnd;\n if (!this.mediaEnded) {\n const currentTime = this.mediaCurrentTime;\n const [, bufferedEnd = this.mediaSeekableStart] = (_a = buffered.find(\n ([start, end]) => start <= currentTime && currentTime <= end\n )) != null ? _a : [];\n relativeBufferedEnd = calcRangeValueFromTime(this, bufferedEnd);\n } else {\n relativeBufferedEnd = 1;\n }\n const { style } = getOrInsertCSSRule(this.shadowRoot, \"#buffered\");\n style.setProperty(\"width\", `${relativeBufferedEnd * 100}%`);\n }\n updateCurrentBox() {\n const currentSlot = this.shadowRoot.querySelector(\n 'slot[name=\"current\"]'\n );\n if (!currentSlot.assignedElements().length)\n return;\n const currentRailRule = getOrInsertCSSRule(\n this.shadowRoot,\n \"#current-rail\"\n );\n const currentBoxRule = getOrInsertCSSRule(\n this.shadowRoot,\n '[part~=\"current-box\"]'\n );\n const rects = __privateMethod(this, _getElementRects, getElementRects_fn).call(this, __privateGet(this, _currentBox));\n const boxPos = __privateMethod(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, this.range.valueAsNumber);\n const boxShift = __privateMethod(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, this.range.valueAsNumber);\n currentRailRule.style.transform = `translateX(${boxPos})`;\n currentRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n currentBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n currentBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n currentBoxRule.style.setProperty(\"visibility\", \"initial\");\n }\n handleEvent(evt) {\n super.handleEvent(evt);\n switch (evt.type) {\n case \"input\":\n __privateMethod(this, _seekRequest, seekRequest_fn).call(this);\n break;\n case \"pointermove\":\n __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, evt);\n break;\n case \"pointerup\":\n if (__privateGet(this, _isPointerDown))\n __privateSet(this, _isPointerDown, false);\n break;\n case \"pointerdown\":\n __privateSet(this, _isPointerDown, true);\n break;\n case \"pointerleave\":\n __privateMethod(this, _previewRequest, previewRequest_fn).call(this, null);\n break;\n case \"transitionstart\":\n if (containsComposedNode(evt.target, this)) {\n setTimeout(() => __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this), 0);\n }\n break;\n }\n }\n}\n_rootNode = new WeakMap();\n_animation = new WeakMap();\n_boxes = new WeakMap();\n_previewTime = new WeakMap();\n_previewBox = new WeakMap();\n_currentBox = new WeakMap();\n_boxPaddingLeft = new WeakMap();\n_boxPaddingRight = new WeakMap();\n_mediaChaptersCues = new WeakMap();\n_isPointerDown = new WeakMap();\n_toggleRangeAnimation = new WeakSet();\ntoggleRangeAnimation_fn = function() {\n if (__privateMethod(this, _shouldRangeAnimate, shouldRangeAnimate_fn).call(this)) {\n __privateGet(this, _animation).start();\n } else {\n __privateGet(this, _animation).stop();\n }\n};\n_shouldRangeAnimate = new WeakSet();\nshouldRangeAnimate_fn = function() {\n return this.isConnected && !this.mediaPaused && !this.mediaLoading && !this.mediaEnded && this.mediaSeekableEnd > 0 && isElementVisible(this);\n};\n_updateRange = new WeakMap();\n_getElementRects = new WeakSet();\ngetElementRects_fn = function(box) {\n var _a;\n const bounds = (_a = this.getAttribute(\"bounds\") ? closestComposedNode(this, `#${this.getAttribute(\"bounds\")}`) : this.parentElement) != null ? _a : this;\n const boundsRect = bounds.getBoundingClientRect();\n const rangeRect = this.range.getBoundingClientRect();\n const width = box.offsetWidth;\n const min = -(rangeRect.left - boundsRect.left - width / 2);\n const max = boundsRect.right - rangeRect.left - width / 2;\n return {\n box: { width, min, max },\n bounds: boundsRect,\n range: rangeRect\n };\n};\n_getBoxPosition = new WeakSet();\ngetBoxPosition_fn = function(rects, ratio) {\n let position = `${ratio * 100}%`;\n const { width, min, max } = rects.box;\n if (!width)\n return position;\n if (!Number.isNaN(min)) {\n const pad = `var(--media-box-padding-left)`;\n const minPos = `calc(1 / var(--_range-width) * 100 * ${min}% + ${pad})`;\n position = `max(${minPos}, ${position})`;\n }\n if (!Number.isNaN(max)) {\n const pad = `var(--media-box-padding-right)`;\n const maxPos = `calc(1 / var(--_range-width) * 100 * ${max}% - ${pad})`;\n position = `min(${position}, ${maxPos})`;\n }\n return position;\n};\n_getBoxShiftPosition = new WeakSet();\ngetBoxShiftPosition_fn = function(rects, ratio) {\n const { width, min, max } = rects.box;\n const pointerX = ratio * rects.range.width;\n if (pointerX < min + __privateGet(this, _boxPaddingLeft)) {\n const offset = rects.range.left - rects.bounds.left - __privateGet(this, _boxPaddingLeft);\n return `${pointerX - width / 2 + offset}px`;\n }\n if (pointerX > max - __privateGet(this, _boxPaddingRight)) {\n const offset = rects.bounds.right - rects.range.right - __privateGet(this, _boxPaddingRight);\n return `${pointerX + width / 2 - offset - rects.range.width}px`;\n }\n return 0;\n};\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(evt) {\n const isOverBoxes = [...__privateGet(this, _boxes)].some(\n (b) => evt.composedPath().includes(b)\n );\n if (!this.dragging && (isOverBoxes || !evt.composedPath().includes(this))) {\n __privateMethod(this, _previewRequest, previewRequest_fn).call(this, null);\n return;\n }\n const duration = this.mediaSeekableEnd;\n if (!duration)\n return;\n const previewRailRule = getOrInsertCSSRule(\n this.shadowRoot,\n \"#preview-rail\"\n );\n const previewBoxRule = getOrInsertCSSRule(\n this.shadowRoot,\n '[part~=\"preview-box\"]'\n );\n const rects = __privateMethod(this, _getElementRects, getElementRects_fn).call(this, __privateGet(this, _previewBox));\n let pointerRatio = (evt.clientX - rects.range.left) / rects.range.width;\n pointerRatio = Math.max(0, Math.min(1, pointerRatio));\n const boxPos = __privateMethod(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, pointerRatio);\n const boxShift = __privateMethod(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, pointerRatio);\n previewRailRule.style.transform = `translateX(${boxPos})`;\n previewRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n previewBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n previewBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n const diff = Math.round(__privateGet(this, _previewTime)) - Math.round(pointerRatio * duration);\n if (Math.abs(diff) < 1 && pointerRatio > 0.01 && pointerRatio < 0.99)\n return;\n __privateSet(this, _previewTime, pointerRatio * duration);\n __privateMethod(this, _previewRequest, previewRequest_fn).call(this, __privateGet(this, _previewTime));\n};\n_previewRequest = new WeakSet();\npreviewRequest_fn = function(detail) {\n this.dispatchEvent(\n new globalThis.CustomEvent(MediaUIEvents.MEDIA_PREVIEW_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n })\n );\n};\n_seekRequest = new WeakSet();\nseekRequest_fn = function() {\n __privateGet(this, _animation).stop();\n const detail = calcTimeFromRangeValue(this);\n this.dispatchEvent(\n new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n composed: true,\n bubbles: true,\n detail\n })\n );\n};\nMediaTimeRange.shadowRootOptions = { mode: \"open\" };\nMediaTimeRange.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-time-range\")) {\n globalThis.customElements.define(\"media-time-range\", MediaTimeRange);\n}\nvar media_time_range_default = MediaTimeRange;\nexport {\n media_time_range_default as default\n};\n","import {\n closestComposedNode,\n getMediaController,\n getStringAttr,\n isElementVisible,\n namedNodeMapToObject,\n setStringAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nconst Attributes = {\n PLACEMENT: \"placement\",\n BOUNDS: \"bounds\"\n};\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n --_tooltip-background-color: var(--media-tooltip-background-color, var(--media-secondary-color, rgba(20, 20, 30, .7)));\n --_tooltip-background: var(--media-tooltip-background, var(--_tooltip-background-color));\n --_tooltip-arrow-half-width: calc(var(--media-tooltip-arrow-width, 12px) / 2);\n --_tooltip-arrow-height: var(--media-tooltip-arrow-height, 5px);\n --_tooltip-arrow-background: var(--media-tooltip-arrow-color, var(--_tooltip-background-color));\n position: relative;\n pointer-events: none;\n display: var(--media-tooltip-display, inline-flex);\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n z-index: var(--media-tooltip-z-index, 1);\n background: var(--_tooltip-background);\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n font: var(--media-font,\n var(--media-font-weight, 400)\n var(--media-font-size, 13px) /\n var(--media-text-content-height, var(--media-control-height, 18px))\n var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n padding: var(--media-tooltip-padding, .35em .7em);\n border: var(--media-tooltip-border, none);\n border-radius: var(--media-tooltip-border-radius, 5px);\n filter: var(--media-tooltip-filter, drop-shadow(0 0 4px rgba(0, 0, 0, .2)));\n white-space: var(--media-tooltip-white-space, nowrap);\n }\n\n :host([hidden]) {\n display: none;\n }\n\n img, svg {\n display: inline-block;\n }\n\n #arrow {\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n display: var(--media-tooltip-arrow-display, block);\n }\n\n :host(:not([placement])),\n :host([placement=\"top\"]) {\n position: absolute;\n bottom: calc(100% + var(--media-tooltip-distance, 12px));\n left: 50%;\n transform: translate(calc(-50% - var(--media-tooltip-offset-x, 0px)), 0);\n }\n :host(:not([placement])) #arrow,\n :host([placement=\"top\"]) #arrow {\n top: 100%;\n left: 50%;\n border-width: var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width) 0 var(--_tooltip-arrow-half-width);\n border-color: var(--_tooltip-arrow-background) transparent transparent transparent;\n transform: translate(calc(-50% + var(--media-tooltip-offset-x, 0px)), 0);\n }\n\n :host([placement=\"right\"]) {\n position: absolute;\n left: calc(100% + var(--media-tooltip-distance, 12px));\n top: 50%;\n transform: translate(0, -50%);\n }\n :host([placement=\"right\"]) #arrow {\n top: 50%;\n right: 100%;\n border-width: var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width) 0;\n border-color: transparent var(--_tooltip-arrow-background) transparent transparent;\n transform: translate(0, -50%);\n }\n\n :host([placement=\"bottom\"]) {\n position: absolute;\n top: calc(100% + var(--media-tooltip-distance, 12px));\n left: 50%;\n transform: translate(calc(-50% - var(--media-tooltip-offset-x, 0px)), 0);\n }\n :host([placement=\"bottom\"]) #arrow {\n bottom: 100%;\n left: 50%;\n border-width: 0 var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width);\n border-color: transparent transparent var(--_tooltip-arrow-background) transparent;\n transform: translate(calc(-50% + var(--media-tooltip-offset-x, 0px)), 0);\n }\n\n :host([placement=\"left\"]) {\n position: absolute;\n right: calc(100% + var(--media-tooltip-distance, 12px));\n top: 50%;\n transform: translate(0, -50%);\n }\n :host([placement=\"left\"]) #arrow {\n top: 50%;\n left: 100%;\n border-width: var(--_tooltip-arrow-half-width) 0 var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height);\n border-color: transparent transparent transparent var(--_tooltip-arrow-background);\n transform: translate(0, -50%);\n }\n \n :host([placement=\"none\"]) #arrow {\n display: none;\n }\n </style>\n <slot></slot>\n <div id=\"arrow\"></div>\n `\n );\n}\nclass MediaTooltip extends globalThis.HTMLElement {\n constructor() {\n super();\n // Adjusts tooltip position relative to the closest specified container\n // such that it doesn't spill out of the left or right sides. Only applies\n // to 'top' and 'bottom' placed tooltips.\n this.updateXOffset = () => {\n var _a;\n if (!isElementVisible(this, { checkOpacity: false, checkVisibilityCSS: false }))\n return;\n const placement = this.placement;\n if (placement === \"left\" || placement === \"right\") {\n this.style.removeProperty(\"--media-tooltip-offset-x\");\n return;\n }\n const tooltipStyle = getComputedStyle(this);\n const containingEl = (_a = closestComposedNode(this, \"#\" + this.bounds)) != null ? _a : getMediaController(this);\n if (!containingEl)\n return;\n const { x: containerX, width: containerWidth } = containingEl.getBoundingClientRect();\n const { x: tooltipX, width: tooltipWidth } = this.getBoundingClientRect();\n const tooltipRight = tooltipX + tooltipWidth;\n const containerRight = containerX + containerWidth;\n const offsetXVal = tooltipStyle.getPropertyValue(\n \"--media-tooltip-offset-x\"\n );\n const currOffsetX = offsetXVal ? parseFloat(offsetXVal.replace(\"px\", \"\")) : 0;\n const marginVal = tooltipStyle.getPropertyValue(\n \"--media-tooltip-container-margin\"\n );\n const currMargin = marginVal ? parseFloat(marginVal.replace(\"px\", \"\")) : 0;\n const leftDiff = tooltipX - containerX + currOffsetX - currMargin;\n const rightDiff = tooltipRight - containerRight + currOffsetX + currMargin;\n if (leftDiff < 0) {\n this.style.setProperty(\"--media-tooltip-offset-x\", `${leftDiff}px`);\n return;\n }\n if (rightDiff > 0) {\n this.style.setProperty(\"--media-tooltip-offset-x\", `${rightDiff}px`);\n return;\n }\n this.style.removeProperty(\"--media-tooltip-offset-x\");\n };\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n this.arrowEl = this.shadowRoot.querySelector(\"#arrow\");\n if (Object.prototype.hasOwnProperty.call(this, \"placement\")) {\n const placement = this.placement;\n delete this.placement;\n this.placement = placement;\n }\n }\n static get observedAttributes() {\n return [Attributes.PLACEMENT, Attributes.BOUNDS];\n }\n /**\n * Get or set tooltip placement\n */\n get placement() {\n return getStringAttr(this, Attributes.PLACEMENT);\n }\n set placement(value) {\n setStringAttr(this, Attributes.PLACEMENT, value);\n }\n /**\n * Get or set tooltip container ID selector that will constrain the tooltips\n * horizontal position.\n */\n get bounds() {\n return getStringAttr(this, Attributes.BOUNDS);\n }\n set bounds(value) {\n setStringAttr(this, Attributes.BOUNDS, value);\n }\n}\nMediaTooltip.shadowRootOptions = { mode: \"open\" };\nMediaTooltip.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-tooltip\")) {\n globalThis.customElements.define(\"media-tooltip\", MediaTooltip);\n}\nvar media_tooltip_default = MediaTooltip;\nexport {\n Attributes,\n media_tooltip_default as default\n};\n","import { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaChromeRange } from \"./media-chrome-range.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n getBooleanAttr,\n getNumericAttr,\n getStringAttr,\n setBooleanAttr,\n setNumericAttr,\n setStringAttr\n} from \"./utils/element-utils.js\";\nconst DEFAULT_VOLUME = 1;\nconst toVolume = (el) => {\n if (el.mediaMuted)\n return 0;\n return el.mediaVolume;\n};\nconst formatAsPercentString = (value) => `${Math.round(value * 100)}%`;\nclass MediaVolumeRange extends MediaChromeRange {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_VOLUME,\n MediaUIAttributes.MEDIA_MUTED,\n MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE\n ];\n }\n constructor() {\n super();\n this.range.addEventListener(\"input\", () => {\n const detail = this.range.value;\n const evt = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_VOLUME_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail\n }\n );\n this.dispatchEvent(evt);\n });\n }\n connectedCallback() {\n super.connectedCallback();\n this.range.setAttribute(\"aria-label\", t(\"volume\"));\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_VOLUME || attrName === MediaUIAttributes.MEDIA_MUTED) {\n this.range.valueAsNumber = toVolume(this);\n this.range.setAttribute(\n \"aria-valuetext\",\n formatAsPercentString(this.range.valueAsNumber)\n );\n this.updateBar();\n }\n }\n /**\n *\n */\n get mediaVolume() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, DEFAULT_VOLUME);\n }\n set mediaVolume(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, value);\n }\n /**\n * Is the media currently muted\n */\n get mediaMuted() {\n return getBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED);\n }\n set mediaMuted(value) {\n setBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED, value);\n }\n /**\n * The volume unavailability state\n */\n get mediaVolumeUnavailable() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE);\n }\n set mediaVolumeUnavailable(value) {\n setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE, value);\n }\n}\nif (!globalThis.customElements.get(\"media-volume-range\")) {\n globalThis.customElements.define(\"media-volume-range\", MediaVolumeRange);\n}\nvar media_volume_range_default = MediaVolumeRange;\nexport {\n media_volume_range_default as default\n};\n","import { MediaChromeMenu } from \"./media-chrome-menu.js\";\nimport { MediaChromeMenuItem } from \"./media-chrome-menu-item.js\";\nimport { MediaSettingsMenu } from \"./media-settings-menu.js\";\nimport { MediaSettingsMenuItem } from \"./media-settings-menu-item.js\";\nimport { MediaSettingsMenuButton } from \"./media-settings-menu-button.js\";\nimport { MediaAudioTrackMenu } from \"./media-audio-track-menu.js\";\nimport { MediaAudioTrackMenuButton } from \"./media-audio-track-menu-button.js\";\nimport { MediaCaptionsMenu } from \"./media-captions-menu.js\";\nimport { MediaCaptionsMenuButton } from \"./media-captions-menu-button.js\";\nimport { MediaPlaybackRateMenu } from \"./media-playback-rate-menu.js\";\nimport { MediaPlaybackRateMenuButton } from \"./media-playback-rate-menu-button.js\";\nimport { MediaRenditionMenu } from \"./media-rendition-menu.js\";\nimport { MediaRenditionMenuButton } from \"./media-rendition-menu-button.js\";\nimport { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport { MediaContextMenu } from \"./media-context-menu.js\";\nimport { MediaContextMenuItem } from \"./media-context-menu-item.js\";\nexport {\n MediaAudioTrackMenu,\n MediaAudioTrackMenuButton,\n MediaCaptionsMenu,\n MediaCaptionsMenuButton,\n MediaChromeMenu,\n MediaChromeMenuButton,\n MediaChromeMenuItem,\n MediaContextMenu,\n MediaContextMenuItem,\n MediaPlaybackRateMenu,\n MediaPlaybackRateMenuButton,\n MediaRenditionMenu,\n MediaRenditionMenuButton,\n MediaSettingsMenu,\n MediaSettingsMenuButton,\n MediaSettingsMenuItem\n};\n","import { MediaUIAttributes } from \"../constants.js\";\nimport { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n getStringAttr,\n setStringAttr,\n getMediaController\n} from \"../utils/element-utils.js\";\nimport { t } from \"../utils/i18n.js\";\nconst audioTrackIcon = (\n /*html*/\n `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M11 17H9.5V7H11v10Zm-3-3H6.5v-4H8v4Zm6-5h-1.5v6H14V9Zm3 7h-1.5V8H17v8Z\"/>\n <path d=\"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0Z\"/>\n</svg>`\n);\nfunction getSlotTemplateHTML() {\n return (\n /*html*/\n `\n <style>\n :host([aria-expanded=\"true\"]) slot[name=tooltip] {\n display: none;\n }\n </style>\n <slot name=\"icon\">${audioTrackIcon}</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Audio\");\n}\nconst updateAriaLabel = (el) => {\n const label = t(\"Audio\");\n el.setAttribute(\"aria-label\", label);\n};\nclass MediaAudioTrackMenuButton extends MediaChromeMenuButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n }\n attributeChangedCallback(attrName, _oldValue, newValue) {\n super.attributeChangedCallback(attrName, _oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_LANG) {\n updateAriaLabel(this);\n }\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n * @return {HTMLElement | null}\n */\n get invokeTargetElement() {\n var _a;\n if (this.invokeTarget != void 0)\n return super.invokeTargetElement;\n return (_a = getMediaController(this)) == null ? void 0 : _a.querySelector(\"media-audio-track-menu\");\n }\n /**\n * Get enabled audio track id.\n * @return {string}\n */\n get mediaAudioTrackEnabled() {\n var _a;\n return (_a = getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED)) != null ? _a : \"\";\n }\n set mediaAudioTrackEnabled(id) {\n setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n }\n}\nMediaAudioTrackMenuButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaAudioTrackMenuButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-audio-track-menu-button\")) {\n globalThis.customElements.define(\n \"media-audio-track-menu-button\",\n MediaAudioTrackMenuButton\n );\n}\nvar media_audio_track_menu_button_default = MediaAudioTrackMenuButton;\nexport {\n MediaAudioTrackMenuButton,\n media_audio_track_menu_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _audioTrackList, _prevState, _render, render_fn, _onChange, onChange_fn;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"../constants.js\";\nimport { parseAudioTrackList } from \"../utils/utils.js\";\nimport {\n MediaChromeMenu,\n createMenuItem,\n createIndicator\n} from \"./media-chrome-menu.js\";\nimport {\n getStringAttr,\n setStringAttr,\n getMediaController\n} from \"../utils/element-utils.js\";\nclass MediaAudioTrackMenu extends MediaChromeMenu {\n constructor() {\n super(...arguments);\n __privateAdd(this, _render);\n __privateAdd(this, _onChange);\n __privateAdd(this, _audioTrackList, []);\n __privateAdd(this, _prevState, void 0);\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED && oldValue !== newValue) {\n this.value = newValue;\n } else if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST && oldValue !== newValue) {\n __privateSet(this, _audioTrackList, parseAudioTrackList(newValue != null ? newValue : \"\"));\n __privateMethod(this, _render, render_fn).call(this);\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n var _a;\n if (this.anchor !== \"auto\")\n return super.anchorElement;\n return (_a = getMediaController(this)) == null ? void 0 : _a.querySelector(\n \"media-audio-track-menu-button\"\n );\n }\n get mediaAudioTrackList() {\n return __privateGet(this, _audioTrackList);\n }\n set mediaAudioTrackList(list) {\n __privateSet(this, _audioTrackList, list);\n __privateMethod(this, _render, render_fn).call(this);\n }\n /**\n * Get enabled audio track id.\n */\n get mediaAudioTrackEnabled() {\n var _a;\n return (_a = getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED)) != null ? _a : \"\";\n }\n set mediaAudioTrackEnabled(id) {\n setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n }\n}\n_audioTrackList = new WeakMap();\n_prevState = new WeakMap();\n_render = new WeakSet();\nrender_fn = function() {\n if (__privateGet(this, _prevState) === JSON.stringify(this.mediaAudioTrackList))\n return;\n __privateSet(this, _prevState, JSON.stringify(this.mediaAudioTrackList));\n const audioTrackList = this.mediaAudioTrackList;\n this.defaultSlot.textContent = \"\";\n audioTrackList.sort((a, b) => a.id.localeCompare(b.id, void 0, { numeric: true }));\n for (const audioTrack of audioTrackList) {\n const text = this.formatMenuItemText(audioTrack.label, audioTrack);\n const item = createMenuItem({\n type: \"radio\",\n text,\n value: `${audioTrack.id}`,\n checked: audioTrack.enabled\n });\n item.prepend(createIndicator(this, \"checked-indicator\"));\n this.defaultSlot.append(item);\n }\n};\n_onChange = new WeakSet();\nonChange_fn = function() {\n if (this.value == null)\n return;\n const event = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail: this.value\n }\n );\n this.dispatchEvent(event);\n};\nif (!globalThis.customElements.get(\"media-audio-track-menu\")) {\n globalThis.customElements.define(\n \"media-audio-track-menu\",\n MediaAudioTrackMenu\n );\n}\nvar media_audio_track_menu_default = MediaAudioTrackMenu;\nexport {\n MediaAudioTrackMenu,\n media_audio_track_menu_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"../constants.js\";\nimport { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport { getMediaController } from \"../utils/element-utils.js\";\nimport {\n areSubsOn,\n parseTextTracksStr,\n stringifyTextTrackList\n} from \"../utils/captions.js\";\nimport { t } from \"../utils/i18n.js\";\nconst ccIconOn = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`;\nconst ccIconOff = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n <path d=\"M17.73 14.09a1.4 1.4 0 0 1-1 .37 1.579 1.579 0 0 1-1.27-.58A3 3 0 0 1 15 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34A2.89 2.89 0 0 0 19 9.07a3 3 0 0 0-2.14-.78 3.14 3.14 0 0 0-2.42 1 3.91 3.91 0 0 0-.93 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.17 3.17 0 0 0 1.07-1.74l-1.4-.45c-.083.43-.3.822-.62 1.12Zm-7.22 0a1.43 1.43 0 0 1-1 .37 1.58 1.58 0 0 1-1.27-.58A3 3 0 0 1 7.76 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34a2.81 2.81 0 0 0-.74-1.32 2.94 2.94 0 0 0-2.13-.78 3.18 3.18 0 0 0-2.43 1 4 4 0 0 0-.92 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.23 3.23 0 0 0 1.07-1.74l-1.4-.45a2.06 2.06 0 0 1-.6 1.07Zm12.32-8.41a2.59 2.59 0 0 0-2.3-2.51C18.72 3.05 15.86 3 13 3c-2.86 0-5.72.05-7.53.17a2.59 2.59 0 0 0-2.3 2.51c-.23 4.207-.23 8.423 0 12.63a2.57 2.57 0 0 0 2.3 2.5c1.81.13 4.67.19 7.53.19 2.86 0 5.72-.06 7.53-.19a2.57 2.57 0 0 0 2.3-2.5c.23-4.207.23-8.423 0-12.63Zm-1.49 12.53a1.11 1.11 0 0 1-.91 1.11c-1.67.11-4.45.18-7.43.18-2.98 0-5.76-.07-7.43-.18a1.11 1.11 0 0 1-.91-1.11c-.21-4.14-.21-8.29 0-12.43a1.11 1.11 0 0 1 .91-1.11C7.24 4.56 10 4.49 13 4.49s5.76.07 7.43.18a1.11 1.11 0 0 1 .91 1.11c.21 4.14.21 8.29 0 12.43Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML() {\n return (\n /*html*/\n `\n <style>\n :host([data-captions-enabled=\"true\"]) slot[name=off] {\n display: none !important;\n }\n\n ${/* Double negative, but safer if display doesn't equal 'block' */\n \"\"}\n :host(:not([data-captions-enabled=\"true\"])) slot[name=on] {\n display: none !important;\n }\n\n :host([aria-expanded=\"true\"]) slot[name=tooltip] {\n display: none;\n }\n </style>\n\n <slot name=\"icon\">\n <slot name=\"on\">${ccIconOn}</slot>\n <slot name=\"off\">${ccIconOff}</slot>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Captions\");\n}\nconst updateAriaChecked = (el) => {\n el.setAttribute(\"data-captions-enabled\", areSubsOn(el).toString());\n};\nconst updateAriaLabel = (el) => {\n el.setAttribute(\"aria-label\", t(\"closed captions\"));\n};\nclass MediaCaptionsMenuButton extends MediaChromeMenuButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING,\n MediaUIAttributes.MEDIA_LANG\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n updateAriaLabel(this);\n updateAriaChecked(this);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING) {\n updateAriaChecked(this);\n } else if (attrName === MediaUIAttributes.MEDIA_LANG) {\n updateAriaLabel(this);\n }\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n * @return {HTMLElement | null}\n */\n get invokeTargetElement() {\n var _a;\n if (this.invokeTarget != void 0)\n return super.invokeTargetElement;\n return (_a = getMediaController(this)) == null ? void 0 : _a.querySelector(\"media-captions-menu\");\n }\n /**\n * An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesList() {\n return getSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n }\n set mediaSubtitlesList(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n }\n /**\n * An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesShowing() {\n return getSubtitlesListAttr(\n this,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n );\n }\n set mediaSubtitlesShowing(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n }\n}\nMediaCaptionsMenuButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaCaptionsMenuButton.getTooltipContentHTML = getTooltipContentHTML;\nconst getSubtitlesListAttr = (el, attrName) => {\n const attrVal = el.getAttribute(attrName);\n return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nconst setSubtitlesListAttr = (el, attrName, list) => {\n if (!(list == null ? void 0 : list.length)) {\n el.removeAttribute(attrName);\n return;\n }\n const newValStr = stringifyTextTrackList(list);\n const oldVal = el.getAttribute(attrName);\n if (oldVal === newValStr)\n return;\n el.setAttribute(attrName, newValStr);\n};\nif (!globalThis.customElements.get(\"media-captions-menu-button\")) {\n globalThis.customElements.define(\n \"media-captions-menu-button\",\n MediaCaptionsMenuButton\n );\n}\nvar media_captions_menu_button_default = MediaCaptionsMenuButton;\nexport {\n MediaCaptionsMenuButton,\n media_captions_menu_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _prevState, _render, render_fn, _onChange, onChange_fn;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"../constants.js\";\nimport { getMediaController } from \"../utils/element-utils.js\";\nimport {\n MediaChromeMenu,\n createMenuItem,\n createIndicator\n} from \"./media-chrome-menu.js\";\nimport {\n parseTextTracksStr,\n stringifyTextTrackList,\n formatTextTrackObj\n} from \"../utils/captions.js\";\nimport { t } from \"../utils/i18n.js\";\nconst ccIcon = (\n /*html*/\n `\n <svg aria-hidden=\"true\" viewBox=\"0 0 26 24\" part=\"captions-indicator indicator\">\n <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n </svg>`\n);\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeMenu.getTemplateHTML(_attrs)}\n <slot name=\"captions-indicator\" hidden>${ccIcon}</slot>\n `\n );\n}\nclass MediaCaptionsMenu extends MediaChromeMenu {\n constructor() {\n super(...arguments);\n __privateAdd(this, _render);\n __privateAdd(this, _onChange);\n __privateAdd(this, _prevState, void 0);\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_LIST && oldValue !== newValue) {\n __privateMethod(this, _render, render_fn).call(this);\n } else if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING && oldValue !== newValue) {\n this.value = newValue;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n if (this.anchor !== \"auto\")\n return super.anchorElement;\n return getMediaController(this).querySelector(\"media-captions-menu-button\");\n }\n /**\n * @type {Array<object>} An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesList() {\n return getSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n }\n set mediaSubtitlesList(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n }\n /**\n * An array of TextTrack-like objects.\n * Objects must have the properties: kind, language, and label.\n */\n get mediaSubtitlesShowing() {\n return getSubtitlesListAttr(\n this,\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n );\n }\n set mediaSubtitlesShowing(list) {\n setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n }\n}\n_prevState = new WeakMap();\n_render = new WeakSet();\nrender_fn = function() {\n var _a;\n if (__privateGet(this, _prevState) === JSON.stringify(this.mediaSubtitlesList))\n return;\n __privateSet(this, _prevState, JSON.stringify(this.mediaSubtitlesList));\n this.defaultSlot.textContent = \"\";\n const isOff = !this.value;\n const item = createMenuItem({\n type: \"radio\",\n text: this.formatMenuItemText(t(\"Off\")),\n value: \"off\",\n checked: isOff\n });\n item.prepend(createIndicator(this, \"checked-indicator\"));\n this.defaultSlot.append(item);\n const subtitlesList = this.mediaSubtitlesList;\n for (const subs of subtitlesList) {\n const item2 = createMenuItem({\n type: \"radio\",\n text: this.formatMenuItemText(subs.label, subs),\n value: formatTextTrackObj(subs),\n checked: this.value == formatTextTrackObj(subs)\n });\n item2.prepend(createIndicator(this, \"checked-indicator\"));\n const type = (_a = subs.kind) != null ? _a : \"subs\";\n if (type === \"captions\") {\n item2.append(createIndicator(this, \"captions-indicator\"));\n }\n this.defaultSlot.append(item2);\n }\n};\n_onChange = new WeakSet();\nonChange_fn = function() {\n const showingSubs = this.mediaSubtitlesShowing;\n const showingSubsStr = this.getAttribute(\n MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n );\n const localStateChange = this.value !== showingSubsStr;\n if ((showingSubs == null ? void 0 : showingSubs.length) && localStateChange) {\n this.dispatchEvent(\n new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail: showingSubs\n }\n )\n );\n }\n if (!this.value || !localStateChange)\n return;\n const event = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail: this.value\n }\n );\n this.dispatchEvent(event);\n};\nMediaCaptionsMenu.getTemplateHTML = getTemplateHTML;\nconst getSubtitlesListAttr = (el, attrName) => {\n const attrVal = el.getAttribute(attrName);\n return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nconst setSubtitlesListAttr = (el, attrName, list) => {\n if (!(list == null ? void 0 : list.length)) {\n el.removeAttribute(attrName);\n return;\n }\n const newValStr = stringifyTextTrackList(list);\n const oldVal = el.getAttribute(attrName);\n if (oldVal === newValStr)\n return;\n el.setAttribute(attrName, newValStr);\n};\nif (!globalThis.customElements.get(\"media-captions-menu\")) {\n globalThis.customElements.define(\"media-captions-menu\", MediaCaptionsMenu);\n}\nvar media_captions_menu_default = MediaCaptionsMenu;\nexport {\n MediaCaptionsMenu,\n media_captions_menu_default as default\n};\n","import { MediaChromeButton } from \"../media-chrome-button.js\";\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { InvokeEvent } from \"../utils/events.js\";\nimport { getDocumentOrShadowRoot } from \"../utils/element-utils.js\";\nclass MediaChromeMenuButton extends MediaChromeButton {\n connectedCallback() {\n super.connectedCallback();\n if (this.invokeTargetElement) {\n this.setAttribute(\"aria-haspopup\", \"menu\");\n }\n }\n get invokeTarget() {\n return this.getAttribute(\"invoketarget\");\n }\n set invokeTarget(value) {\n this.setAttribute(\"invoketarget\", `${value}`);\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n * @return {HTMLElement | null}\n */\n get invokeTargetElement() {\n var _a;\n if (this.invokeTarget) {\n return (_a = getDocumentOrShadowRoot(this)) == null ? void 0 : _a.querySelector(\n `#${this.invokeTarget}`\n );\n }\n return null;\n }\n handleClick() {\n var _a;\n (_a = this.invokeTargetElement) == null ? void 0 : _a.dispatchEvent(\n new InvokeEvent({ relatedTarget: this })\n );\n }\n}\nif (!globalThis.customElements.get(\"media-chrome-menu-button\")) {\n globalThis.customElements.define(\n \"media-chrome-menu-button\",\n MediaChromeMenuButton\n );\n}\nvar media_chrome_menu_button_default = MediaChromeMenuButton;\nexport {\n MediaChromeMenuButton,\n media_chrome_menu_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _dirty, _ownerElement, _handleSlotChange, handleSlotChange_fn, _submenuConnected, submenuConnected_fn, _submenuDisconnected, submenuDisconnected_fn, _handleMenuItem, _handleKeyUp, handleKeyUp_fn, _handleKeyDown, handleKeyDown_fn, _reset, reset_fn;\nimport { globalThis, document } from \"../utils/server-safe-globals.js\";\nimport { InvokeEvent } from \"../utils/events.js\";\nimport {\n getDocumentOrShadowRoot,\n containsComposedNode,\n namedNodeMapToObject\n} from \"../utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n transition: var(--media-menu-item-transition,\n background .15s linear,\n opacity .2s ease-in-out\n );\n outline: var(--media-menu-item-outline, 0);\n outline-offset: var(--media-menu-item-outline-offset, -1px);\n cursor: var(--media-cursor, pointer);\n display: flex;\n align-items: center;\n align-self: stretch;\n justify-self: stretch;\n white-space: nowrap;\n white-space-collapse: collapse;\n text-wrap: nowrap;\n padding: .4em .8em .4em 1em;\n }\n\n :host(:focus-visible) {\n box-shadow: var(--media-menu-item-focus-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n outline: var(--media-menu-item-hover-outline, 0);\n outline-offset: var(--media-menu-item-hover-outline-offset, var(--media-menu-item-outline-offset, -1px));\n }\n\n :host(:hover) {\n cursor: var(--media-cursor, pointer);\n background: var(--media-menu-item-hover-background, rgb(92 92 102 / .5));\n outline: var(--media-menu-item-hover-outline);\n outline-offset: var(--media-menu-item-hover-outline-offset, var(--media-menu-item-outline-offset, -1px));\n }\n\n :host([aria-checked=\"true\"]) {\n background: var(--media-menu-item-checked-background);\n }\n\n :host([hidden]) {\n display: none;\n }\n\n :host([disabled]) {\n pointer-events: none;\n color: rgba(255, 255, 255, .3);\n }\n\n slot:not([name]) {\n width: 100%;\n }\n\n slot:not([name=\"submenu\"]) {\n display: inline-flex;\n align-items: center;\n transition: inherit;\n opacity: var(--media-menu-item-opacity, 1);\n }\n\n slot[name=\"description\"] {\n justify-content: end;\n }\n\n slot[name=\"description\"] > span {\n display: inline-block;\n margin-inline: 1em .2em;\n max-width: var(--media-menu-item-description-max-width, 100px);\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: .8em;\n font-weight: 400;\n text-align: right;\n position: relative;\n top: .04em;\n }\n\n slot[name=\"checked-indicator\"] {\n display: none;\n }\n\n :host(:is([role=\"menuitemradio\"],[role=\"menuitemcheckbox\"])) slot[name=\"checked-indicator\"] {\n display: var(--media-menu-item-checked-indicator-display, inline-block);\n }\n\n ${/* For all slotted icons in prefix and suffix. */\n \"\"}\n svg, img, ::slotted(svg), ::slotted(img) {\n height: var(--media-menu-item-icon-height, var(--media-control-height, 24px));\n fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n display: block;\n }\n\n ${/* Only for indicator icons like checked-indicator or captions-indicator. */\n \"\"}\n [part~=\"indicator\"],\n ::slotted([part~=\"indicator\"]) {\n fill: var(--media-menu-item-indicator-fill,\n var(--media-icon-color, var(--media-primary-color, rgb(238 238 238))));\n height: var(--media-menu-item-indicator-height, 1.25em);\n margin-right: .5ch;\n }\n\n [part~=\"checked-indicator\"] {\n visibility: hidden;\n }\n\n :host([aria-checked=\"true\"]) [part~=\"checked-indicator\"] {\n visibility: visible;\n }\n </style>\n <slot name=\"checked-indicator\">\n <svg aria-hidden=\"true\" viewBox=\"0 1 24 24\" part=\"checked-indicator indicator\">\n <path d=\"m10 15.17 9.193-9.191 1.414 1.414-10.606 10.606-6.364-6.364 1.414-1.414 4.95 4.95Z\"/>\n </svg>\n </slot>\n <slot name=\"prefix\"></slot>\n <slot></slot>\n <slot name=\"description\"></slot>\n <slot name=\"suffix\">\n ${this.getSuffixSlotInnerHTML(_attrs)}\n </slot>\n <slot name=\"submenu\"></slot>\n `\n );\n}\nfunction getSuffixSlotInnerHTML(_attrs) {\n return \"\";\n}\nconst Attributes = {\n TYPE: \"type\",\n VALUE: \"value\",\n CHECKED: \"checked\",\n DISABLED: \"disabled\"\n};\nclass MediaChromeMenuItem extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _handleSlotChange);\n __privateAdd(this, _submenuConnected);\n __privateAdd(this, _submenuDisconnected);\n __privateAdd(this, _handleKeyUp);\n __privateAdd(this, _handleKeyDown);\n __privateAdd(this, _reset);\n __privateAdd(this, _dirty, false);\n __privateAdd(this, _ownerElement, void 0);\n /**\n * If there is a slotted submenu the fallback content of the description slot\n * is populated with the text of the first checked item.\n */\n __privateAdd(this, _handleMenuItem, () => {\n var _a, _b;\n if (this.submenuElement.items) {\n this.setAttribute(\"submenusize\", `${this.submenuElement.items.length}`);\n }\n const descriptionSlot = this.shadowRoot.querySelector(\n 'slot[name=\"description\"]'\n );\n const checkedItem = (_a = this.submenuElement.checkedItems) == null ? void 0 : _a[0];\n const description = (_b = checkedItem == null ? void 0 : checkedItem.dataset.description) != null ? _b : checkedItem == null ? void 0 : checkedItem.text;\n const span = document.createElement(\"span\");\n span.textContent = description != null ? description : \"\";\n descriptionSlot.replaceChildren(span);\n });\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n this.shadowRoot.addEventListener(\"slotchange\", this);\n }\n static get observedAttributes() {\n return [\n Attributes.TYPE,\n Attributes.DISABLED,\n Attributes.CHECKED,\n Attributes.VALUE\n ];\n }\n enable() {\n if (!this.hasAttribute(\"tabindex\")) {\n this.setAttribute(\"tabindex\", \"-1\");\n }\n if (isCheckable(this) && !this.hasAttribute(\"aria-checked\")) {\n this.setAttribute(\"aria-checked\", \"false\");\n }\n this.addEventListener(\"click\", this);\n this.addEventListener(\"keydown\", this);\n }\n disable() {\n this.removeAttribute(\"tabindex\");\n this.removeEventListener(\"click\", this);\n this.removeEventListener(\"keydown\", this);\n this.removeEventListener(\"keyup\", this);\n }\n handleEvent(event) {\n switch (event.type) {\n case \"slotchange\":\n __privateMethod(this, _handleSlotChange, handleSlotChange_fn).call(this, event);\n break;\n case \"click\":\n this.handleClick(event);\n break;\n case \"keydown\":\n __privateMethod(this, _handleKeyDown, handleKeyDown_fn).call(this, event);\n break;\n case \"keyup\":\n __privateMethod(this, _handleKeyUp, handleKeyUp_fn).call(this, event);\n break;\n }\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === Attributes.CHECKED && isCheckable(this) && !__privateGet(this, _dirty)) {\n this.setAttribute(\"aria-checked\", newValue != null ? \"true\" : \"false\");\n } else if (attrName === Attributes.TYPE && newValue !== oldValue) {\n this.role = \"menuitem\" + newValue;\n } else if (attrName === Attributes.DISABLED && newValue !== oldValue) {\n if (newValue == null) {\n this.enable();\n } else {\n this.disable();\n }\n }\n }\n connectedCallback() {\n if (!this.hasAttribute(Attributes.DISABLED)) {\n this.enable();\n }\n this.role = \"menuitem\" + this.type;\n __privateSet(this, _ownerElement, closestMenuItemsContainer(this, this.parentNode));\n __privateMethod(this, _reset, reset_fn).call(this);\n if (this.submenuElement) {\n __privateMethod(this, _submenuConnected, submenuConnected_fn).call(this);\n }\n }\n disconnectedCallback() {\n this.disable();\n __privateMethod(this, _reset, reset_fn).call(this);\n __privateSet(this, _ownerElement, null);\n }\n get invokeTarget() {\n return this.getAttribute(\"invoketarget\");\n }\n set invokeTarget(value) {\n this.setAttribute(\"invoketarget\", `${value}`);\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute\n * or the slotted submenu element.\n */\n get invokeTargetElement() {\n var _a;\n if (this.invokeTarget) {\n return (_a = getDocumentOrShadowRoot(this)) == null ? void 0 : _a.querySelector(\n `#${this.invokeTarget}`\n );\n }\n return this.submenuElement;\n }\n /**\n * Returns the slotted submenu element.\n */\n get submenuElement() {\n const submenuSlot = this.shadowRoot.querySelector(\n 'slot[name=\"submenu\"]'\n );\n return submenuSlot.assignedElements({\n flatten: true\n })[0];\n }\n get type() {\n var _a;\n return (_a = this.getAttribute(Attributes.TYPE)) != null ? _a : \"\";\n }\n set type(val) {\n this.setAttribute(Attributes.TYPE, `${val}`);\n }\n get value() {\n var _a;\n return (_a = this.getAttribute(Attributes.VALUE)) != null ? _a : this.text;\n }\n set value(val) {\n this.setAttribute(Attributes.VALUE, val);\n }\n get text() {\n var _a;\n return ((_a = this.textContent) != null ? _a : \"\").trim();\n }\n get checked() {\n if (!isCheckable(this))\n return void 0;\n return this.getAttribute(\"aria-checked\") === \"true\";\n }\n set checked(value) {\n if (!isCheckable(this))\n return;\n __privateSet(this, _dirty, true);\n this.setAttribute(\"aria-checked\", value ? \"true\" : \"false\");\n if (value) {\n this.part.add(\"checked\");\n } else {\n this.part.remove(\"checked\");\n }\n }\n handleClick(event) {\n if (isCheckable(this))\n return;\n if (this.invokeTargetElement && containsComposedNode(this, event.target)) {\n this.invokeTargetElement.dispatchEvent(\n new InvokeEvent({ relatedTarget: this })\n );\n }\n }\n get keysUsed() {\n return [\"Enter\", \" \"];\n }\n}\n_dirty = new WeakMap();\n_ownerElement = new WeakMap();\n_handleSlotChange = new WeakSet();\nhandleSlotChange_fn = function(event) {\n const slot = event.target;\n const isDefaultSlot = !(slot == null ? void 0 : slot.name);\n if (isDefaultSlot) {\n for (const node of slot.assignedNodes({ flatten: true })) {\n if (node instanceof Text && node.textContent.trim() === \"\") {\n node.remove();\n }\n }\n }\n if (slot.name === \"submenu\") {\n if (this.submenuElement) {\n __privateMethod(this, _submenuConnected, submenuConnected_fn).call(this);\n } else {\n __privateMethod(this, _submenuDisconnected, submenuDisconnected_fn).call(this);\n }\n }\n};\n_submenuConnected = new WeakSet();\nsubmenuConnected_fn = async function() {\n this.setAttribute(\"aria-haspopup\", \"menu\");\n this.setAttribute(\"aria-expanded\", `${!this.submenuElement.hidden}`);\n this.submenuElement.addEventListener(\"change\", __privateGet(this, _handleMenuItem));\n this.submenuElement.addEventListener(\"addmenuitem\", __privateGet(this, _handleMenuItem));\n this.submenuElement.addEventListener(\n \"removemenuitem\",\n __privateGet(this, _handleMenuItem)\n );\n __privateGet(this, _handleMenuItem).call(this);\n};\n_submenuDisconnected = new WeakSet();\nsubmenuDisconnected_fn = function() {\n this.removeAttribute(\"aria-haspopup\");\n this.removeAttribute(\"aria-expanded\");\n this.submenuElement.removeEventListener(\"change\", __privateGet(this, _handleMenuItem));\n this.submenuElement.removeEventListener(\n \"addmenuitem\",\n __privateGet(this, _handleMenuItem)\n );\n this.submenuElement.removeEventListener(\n \"removemenuitem\",\n __privateGet(this, _handleMenuItem)\n );\n __privateGet(this, _handleMenuItem).call(this);\n};\n_handleMenuItem = new WeakMap();\n_handleKeyUp = new WeakSet();\nhandleKeyUp_fn = function(event) {\n const { key } = event;\n if (!this.keysUsed.includes(key)) {\n this.removeEventListener(\"keyup\", __privateMethod(this, _handleKeyUp, handleKeyUp_fn));\n return;\n }\n this.handleClick(event);\n};\n_handleKeyDown = new WeakSet();\nhandleKeyDown_fn = function(event) {\n const { metaKey, altKey, key } = event;\n if (metaKey || altKey || !this.keysUsed.includes(key)) {\n this.removeEventListener(\"keyup\", __privateMethod(this, _handleKeyUp, handleKeyUp_fn));\n return;\n }\n this.addEventListener(\"keyup\", __privateMethod(this, _handleKeyUp, handleKeyUp_fn), { once: true });\n};\n_reset = new WeakSet();\nreset_fn = function() {\n var _a;\n const items = (_a = __privateGet(this, _ownerElement)) == null ? void 0 : _a.radioGroupItems;\n if (!items)\n return;\n let checkedItem = items.filter((item) => item.getAttribute(\"aria-checked\") === \"true\").pop();\n if (!checkedItem)\n checkedItem = items[0];\n for (const item of items) {\n item.setAttribute(\"aria-checked\", \"false\");\n }\n checkedItem == null ? void 0 : checkedItem.setAttribute(\"aria-checked\", \"true\");\n};\nMediaChromeMenuItem.shadowRootOptions = { mode: \"open\" };\nMediaChromeMenuItem.getTemplateHTML = getTemplateHTML;\nMediaChromeMenuItem.getSuffixSlotInnerHTML = getSuffixSlotInnerHTML;\nfunction isCheckable(item) {\n return item.type === \"radio\" || item.type === \"checkbox\";\n}\nfunction closestMenuItemsContainer(childNode, parentNode) {\n if (!childNode)\n return null;\n const { host } = childNode.getRootNode();\n if (!parentNode && host)\n return closestMenuItemsContainer(childNode, host);\n if (parentNode == null ? void 0 : parentNode.items)\n return parentNode;\n return closestMenuItemsContainer(parentNode, parentNode == null ? void 0 : parentNode.parentNode);\n}\nif (!globalThis.customElements.get(\"media-chrome-menu-item\")) {\n globalThis.customElements.define(\n \"media-chrome-menu-item\",\n MediaChromeMenuItem\n );\n}\nvar media_chrome_menu_item_default = MediaChromeMenuItem;\nexport {\n Attributes,\n MediaChromeMenuItem,\n media_chrome_menu_item_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _mediaController, _previouslyFocused, _invokerElement, _previousItems, _mutationObserver, _isPopover, _cssRule, _handleSlotChange, handleSlotChange_fn, _toggleHeader, toggleHeader_fn, _handleMenuItems, _updateLayoutStyle, updateLayoutStyle_fn, _handleInvoke, handleInvoke_fn, _handleOpen, handleOpen_fn, _handleClosed, handleClosed_fn, _handleBoundsResize, _handleMenuResize, _positionMenu, positionMenu_fn, _resizeMenu, resizeMenu_fn, _handleClick, handleClick_fn, _backButtonElement, backButtonElement_get, _handleToggle, handleToggle_fn, _checkSubmenuHasExpanded, checkSubmenuHasExpanded_fn, _handleFocusOut, handleFocusOut_fn, _handleKeyDown, handleKeyDown_fn, _getItem, getItem_fn, _getTabItem, getTabItem_fn, _setTabItem, setTabItem_fn, _selectItem, selectItem_fn;\nimport { MediaStateReceiverAttributes } from \"../constants.js\";\nimport { globalThis, document } from \"../utils/server-safe-globals.js\";\nimport { computePosition } from \"../utils/anchor-utils.js\";\nimport { observeResize, unobserveResize } from \"../utils/resize-observer.js\";\nimport { ToggleEvent, InvokeEvent } from \"../utils/events.js\";\nimport {\n getActiveElement,\n containsComposedNode,\n closestComposedNode,\n insertCSSRule,\n getMediaController,\n getAttributeMediaController,\n getDocumentOrShadowRoot,\n namedNodeMapToObject\n} from \"../utils/element-utils.js\";\nfunction createMenuItem({\n type,\n text,\n value,\n checked\n}) {\n const item = document.createElement(\n \"media-chrome-menu-item\"\n );\n item.type = type != null ? type : \"\";\n item.part.add(\"menu-item\");\n if (type)\n item.part.add(type);\n item.value = value;\n item.checked = checked;\n const label = document.createElement(\"span\");\n label.textContent = text;\n item.append(label);\n return item;\n}\nfunction createIndicator(el, name) {\n let customIndicator = el.querySelector(`:scope > [slot=\"${name}\"]`);\n if ((customIndicator == null ? void 0 : customIndicator.nodeName) == \"SLOT\")\n customIndicator = customIndicator.assignedElements({ flatten: true })[0];\n if (customIndicator) {\n customIndicator = customIndicator.cloneNode(true);\n return customIndicator;\n }\n const fallbackIndicator = el.shadowRoot.querySelector(\n `[name=\"${name}\"] > svg`\n );\n if (fallbackIndicator) {\n return fallbackIndicator.cloneNode(true);\n }\n return \"\";\n}\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n font: var(--media-font,\n var(--media-font-weight, normal)\n var(--media-font-size, 14px) /\n var(--media-text-content-height, var(--media-control-height, 24px))\n var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n --_menu-bg: rgb(20 20 30 / .8);\n background: var(--media-menu-background, var(--media-control-background, var(--media-secondary-color, var(--_menu-bg))));\n border-radius: var(--media-menu-border-radius);\n border: var(--media-menu-border, none);\n display: var(--media-menu-display, inline-flex) !important;\n ${/* ^^Prevent override by Tailwind CSS causing the menu to not hide properly. */\n \"\"}\n transition: var(--media-menu-transition-in,\n visibility 0s,\n opacity .2s ease-out,\n transform .15s ease-out,\n left .2s ease-in-out,\n min-width .2s ease-in-out,\n min-height .2s ease-in-out\n ) !important;\n ${/* ^^Prevent transition override by media-container */\n \"\"}\n visibility: var(--media-menu-visibility, visible);\n opacity: var(--media-menu-opacity, 1);\n max-height: var(--media-menu-max-height, var(--_menu-max-height, 300px));\n transform: var(--media-menu-transform-in, translateY(0) scale(1));\n flex-direction: column;\n ${/* Prevent overflowing a flex container */\n \"\"}\n min-height: 0;\n position: relative;\n bottom: var(--_menu-bottom);\n box-sizing: border-box;\n } \n\n @-moz-document url-prefix() {\n :host{\n --_menu-bg: rgb(20 20 30);\n }\n }\n\n :host([hidden]) {\n transition: var(--media-menu-transition-out,\n visibility .15s ease-in,\n opacity .15s ease-in,\n transform .15s ease-in\n ) !important;\n visibility: var(--media-menu-hidden-visibility, hidden);\n opacity: var(--media-menu-hidden-opacity, 0);\n max-height: var(--media-menu-hidden-max-height,\n var(--media-menu-max-height, var(--_menu-max-height, 300px)));\n transform: var(--media-menu-transform-out, translateY(2px) scale(.99));\n pointer-events: none;\n }\n\n :host([slot=\"submenu\"]) {\n background: none;\n width: 100%;\n min-height: 100%;\n position: absolute;\n bottom: 0;\n right: -100%;\n }\n\n #container {\n display: flex;\n flex-direction: column;\n min-height: 0;\n transition: transform .2s ease-out;\n transform: translate(0, 0);\n }\n\n #container.has-expanded {\n transition: transform .2s ease-in;\n transform: translate(-100%, 0);\n }\n\n button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n outline: inherit;\n display: inline-flex;\n align-items: center;\n }\n\n slot[name=\"header\"][hidden] {\n display: none;\n }\n\n slot[name=\"header\"] > *,\n slot[name=\"header\"]::slotted(*) {\n padding: .4em .7em;\n border-bottom: 1px solid rgb(255 255 255 / .25);\n cursor: var(--media-cursor, default);\n }\n\n slot[name=\"header\"] > button[part~=\"back\"],\n slot[name=\"header\"]::slotted(button[part~=\"back\"]) {\n cursor: var(--media-cursor, pointer);\n }\n\n svg[part~=\"back\"] {\n height: var(--media-menu-icon-height, var(--media-control-height, 24px));\n fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n display: block;\n margin-right: .5ch;\n }\n\n slot:not([name]) {\n gap: var(--media-menu-gap);\n flex-direction: var(--media-menu-flex-direction, column);\n overflow: var(--media-menu-overflow, hidden auto);\n display: flex;\n min-height: 0;\n }\n\n :host([role=\"menu\"]) slot:not([name]) {\n padding-block: .4em;\n }\n\n slot:not([name])::slotted([role=\"menu\"]) {\n background: none;\n }\n\n media-chrome-menu-item > span {\n margin-right: .5ch;\n max-width: var(--media-menu-item-max-width);\n text-overflow: ellipsis;\n overflow: hidden;\n }\n </style>\n <style id=\"layout-row\" media=\"width:0\">\n\n slot[name=\"header\"] > *,\n slot[name=\"header\"]::slotted(*) {\n padding: .4em .5em;\n }\n\n slot:not([name]) {\n gap: var(--media-menu-gap, .25em);\n flex-direction: var(--media-menu-flex-direction, row);\n padding-inline: .5em;\n }\n\n media-chrome-menu-item {\n padding: .3em .5em;\n }\n\n media-chrome-menu-item[aria-checked=\"true\"] {\n background: var(--media-menu-item-checked-background, rgb(255 255 255 / .2));\n }\n\n ${/* In row layout hide the checked indicator completely. */\n \"\"}\n media-chrome-menu-item::part(checked-indicator) {\n display: var(--media-menu-item-checked-indicator-display, none);\n }\n </style>\n <div id=\"container\" part=\"container\">\n <slot name=\"header\" hidden>\n <button part=\"back button\" aria-label=\"Back to previous menu\">\n <slot name=\"back-icon\">\n <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\" part=\"back indicator\">\n <path d=\"m11.88 17.585.742-.669-4.2-4.665 4.2-4.666-.743-.669-4.803 5.335 4.803 5.334Z\"/>\n </svg>\n </slot>\n <slot name=\"title\"></slot>\n </button>\n </slot>\n <slot></slot>\n </div>\n <slot name=\"checked-indicator\" hidden></slot>\n `\n );\n}\nconst Attributes = {\n STYLE: \"style\",\n HIDDEN: \"hidden\",\n DISABLED: \"disabled\",\n ANCHOR: \"anchor\"\n};\nclass MediaChromeMenu extends globalThis.HTMLElement {\n constructor() {\n super();\n __privateAdd(this, _handleSlotChange);\n __privateAdd(this, _toggleHeader);\n /**\n * Sets the layout style for the menu.\n * It can be a row or column layout. e.g. playback-rate-menu\n */\n __privateAdd(this, _updateLayoutStyle);\n __privateAdd(this, _handleInvoke);\n __privateAdd(this, _handleOpen);\n __privateAdd(this, _handleClosed);\n /**\n * Updates the popover menu position based on the anchor element.\n * @param {number} [menuWidth]\n */\n __privateAdd(this, _positionMenu);\n /**\n * Resize this menu to fit the submenu.\n * @param {boolean} animate\n */\n __privateAdd(this, _resizeMenu);\n __privateAdd(this, _handleClick);\n __privateAdd(this, _backButtonElement);\n /**\n * Handle the toggle event of submenus.\n * Closes all other open submenus when opening a submenu.\n * Resizes this menu to fit the submenu.\n *\n * @param {ToggleEvent} event\n */\n __privateAdd(this, _handleToggle);\n /**\n * Check if any submenu is expanded and update the container class accordingly.\n * When the CSS :has() selector is supported, this can be done with CSS only.\n */\n __privateAdd(this, _checkSubmenuHasExpanded);\n __privateAdd(this, _handleFocusOut);\n __privateAdd(this, _handleKeyDown);\n __privateAdd(this, _getItem);\n __privateAdd(this, _getTabItem);\n __privateAdd(this, _setTabItem);\n __privateAdd(this, _selectItem);\n __privateAdd(this, _mediaController, null);\n __privateAdd(this, _previouslyFocused, null);\n __privateAdd(this, _invokerElement, null);\n __privateAdd(this, _previousItems, /* @__PURE__ */ new Set());\n __privateAdd(this, _mutationObserver, void 0);\n __privateAdd(this, _isPopover, false);\n __privateAdd(this, _cssRule, null);\n /**\n * Fires an event when a menu item is added or removed.\n * This is needed to update the description slot of an ancestor menu item.\n */\n __privateAdd(this, _handleMenuItems, () => {\n const previousItems = __privateGet(this, _previousItems);\n const currentItems = new Set(this.items);\n for (const item of previousItems) {\n if (!currentItems.has(item)) {\n this.dispatchEvent(new CustomEvent(\"removemenuitem\", { detail: item }));\n }\n }\n for (const item of currentItems) {\n if (!previousItems.has(item)) {\n this.dispatchEvent(new CustomEvent(\"addmenuitem\", { detail: item }));\n }\n }\n __privateSet(this, _previousItems, currentItems);\n });\n __privateAdd(this, _handleBoundsResize, () => {\n __privateMethod(this, _positionMenu, positionMenu_fn).call(this);\n __privateMethod(this, _resizeMenu, resizeMenu_fn).call(this, false);\n });\n __privateAdd(this, _handleMenuResize, () => {\n __privateMethod(this, _positionMenu, positionMenu_fn).call(this);\n });\n if (!this.shadowRoot) {\n this.attachShadow(this.constructor.shadowRootOptions);\n const attrs = namedNodeMapToObject(this.attributes);\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n this.container = this.shadowRoot.querySelector(\"#container\");\n this.defaultSlot = this.shadowRoot.querySelector(\n \"slot:not([name])\"\n );\n this.shadowRoot.addEventListener(\"slotchange\", this);\n __privateSet(this, _mutationObserver, new MutationObserver(__privateGet(this, _handleMenuItems)));\n __privateGet(this, _mutationObserver).observe(this.defaultSlot, { childList: true });\n }\n static get observedAttributes() {\n return [\n Attributes.DISABLED,\n Attributes.HIDDEN,\n Attributes.STYLE,\n Attributes.ANCHOR,\n MediaStateReceiverAttributes.MEDIA_CONTROLLER\n ];\n }\n static formatMenuItemText(text, _data) {\n return text;\n }\n enable() {\n this.addEventListener(\"click\", this);\n this.addEventListener(\"focusout\", this);\n this.addEventListener(\"keydown\", this);\n this.addEventListener(\"invoke\", this);\n this.addEventListener(\"toggle\", this);\n }\n disable() {\n this.removeEventListener(\"click\", this);\n this.removeEventListener(\"focusout\", this);\n this.removeEventListener(\"keyup\", this);\n this.removeEventListener(\"invoke\", this);\n this.removeEventListener(\"toggle\", this);\n }\n handleEvent(event) {\n switch (event.type) {\n case \"slotchange\":\n __privateMethod(this, _handleSlotChange, handleSlotChange_fn).call(this, event);\n break;\n case \"invoke\":\n __privateMethod(this, _handleInvoke, handleInvoke_fn).call(this, event);\n break;\n case \"click\":\n __privateMethod(this, _handleClick, handleClick_fn).call(this, event);\n break;\n case \"toggle\":\n __privateMethod(this, _handleToggle, handleToggle_fn).call(this, event);\n break;\n case \"focusout\":\n __privateMethod(this, _handleFocusOut, handleFocusOut_fn).call(this, event);\n break;\n case \"keydown\":\n __privateMethod(this, _handleKeyDown, handleKeyDown_fn).call(this, event);\n break;\n }\n }\n connectedCallback() {\n var _a, _b;\n __privateSet(this, _cssRule, insertCSSRule(this.shadowRoot, \":host\"));\n __privateMethod(this, _updateLayoutStyle, updateLayoutStyle_fn).call(this);\n if (!this.hasAttribute(\"disabled\")) {\n this.enable();\n }\n if (!this.role) {\n this.role = \"menu\";\n }\n __privateSet(this, _mediaController, getAttributeMediaController(this));\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.associateElement) == null ? void 0 : _b.call(_a, this);\n if (!this.hidden) {\n observeResize(getBoundsElement(this), __privateGet(this, _handleBoundsResize));\n observeResize(this, __privateGet(this, _handleMenuResize));\n }\n __privateMethod(this, _toggleHeader, toggleHeader_fn).call(this);\n }\n disconnectedCallback() {\n var _a, _b;\n unobserveResize(getBoundsElement(this), __privateGet(this, _handleBoundsResize));\n unobserveResize(this, __privateGet(this, _handleMenuResize));\n this.disable();\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n var _a, _b, _c, _d;\n if (attrName === Attributes.HIDDEN && newValue !== oldValue) {\n if (!__privateGet(this, _isPopover))\n __privateSet(this, _isPopover, true);\n if (this.hidden) {\n __privateMethod(this, _handleClosed, handleClosed_fn).call(this);\n } else {\n __privateMethod(this, _handleOpen, handleOpen_fn).call(this);\n }\n this.dispatchEvent(\n new ToggleEvent({\n oldState: this.hidden ? \"open\" : \"closed\",\n newState: this.hidden ? \"closed\" : \"open\",\n bubbles: true\n })\n );\n } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n if (oldValue) {\n (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n __privateSet(this, _mediaController, null);\n }\n if (newValue && this.isConnected) {\n __privateSet(this, _mediaController, getAttributeMediaController(this));\n (_d = (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.associateElement) == null ? void 0 : _d.call(_c, this);\n }\n } else if (attrName === Attributes.DISABLED && newValue !== oldValue) {\n if (newValue == null) {\n this.enable();\n } else {\n this.disable();\n }\n } else if (attrName === Attributes.STYLE && newValue !== oldValue) {\n __privateMethod(this, _updateLayoutStyle, updateLayoutStyle_fn).call(this);\n }\n }\n formatMenuItemText(text, data) {\n return this.constructor.formatMenuItemText(\n text,\n data\n );\n }\n get anchor() {\n return this.getAttribute(\"anchor\");\n }\n set anchor(value) {\n this.setAttribute(\"anchor\", `${value}`);\n }\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n var _a;\n if (this.anchor) {\n return (_a = getDocumentOrShadowRoot(this)) == null ? void 0 : _a.querySelector(\n `#${this.anchor}`\n );\n }\n return null;\n }\n /**\n * Returns the menu items.\n */\n get items() {\n return this.defaultSlot.assignedElements({ flatten: true }).filter(isMenuItem);\n }\n get radioGroupItems() {\n return this.items.filter((item) => item.role === \"menuitemradio\");\n }\n get checkedItems() {\n return this.items.filter((item) => item.checked);\n }\n get value() {\n var _a, _b;\n return (_b = (_a = this.checkedItems[0]) == null ? void 0 : _a.value) != null ? _b : \"\";\n }\n set value(newValue) {\n const item = this.items.find((item2) => item2.value === newValue);\n if (!item)\n return;\n __privateMethod(this, _selectItem, selectItem_fn).call(this, item);\n }\n focus() {\n __privateSet(this, _previouslyFocused, getActiveElement());\n if (this.items.length) {\n __privateMethod(this, _setTabItem, setTabItem_fn).call(this, this.items[0]);\n this.items[0].focus();\n return;\n }\n const focusable = this.querySelector(\n '[autofocus], [tabindex]:not([tabindex=\"-1\"]), [role=\"menu\"]'\n );\n focusable == null ? void 0 : focusable.focus();\n }\n handleSelect(event) {\n var _a;\n const item = __privateMethod(this, _getItem, getItem_fn).call(this, event);\n if (!item)\n return;\n __privateMethod(this, _selectItem, selectItem_fn).call(this, item, item.type === \"checkbox\");\n if (__privateGet(this, _invokerElement) && !this.hidden) {\n (_a = __privateGet(this, _previouslyFocused)) == null ? void 0 : _a.focus();\n this.hidden = true;\n }\n }\n get keysUsed() {\n return [\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \" \",\n \"ArrowDown\",\n \"ArrowUp\",\n \"Home\",\n \"End\"\n ];\n }\n handleMove(event) {\n var _a, _b;\n const { key } = event;\n const items = this.items;\n const currentItem = (_b = (_a = __privateMethod(this, _getItem, getItem_fn).call(this, event)) != null ? _a : __privateMethod(this, _getTabItem, getTabItem_fn).call(this)) != null ? _b : items[0];\n const currentIndex = items.indexOf(currentItem);\n let index = Math.max(0, currentIndex);\n if (key === \"ArrowDown\") {\n index++;\n } else if (key === \"ArrowUp\") {\n index--;\n } else if (event.key === \"Home\") {\n index = 0;\n } else if (event.key === \"End\") {\n index = items.length - 1;\n }\n if (index < 0) {\n index = items.length - 1;\n }\n if (index > items.length - 1) {\n index = 0;\n }\n __privateMethod(this, _setTabItem, setTabItem_fn).call(this, items[index]);\n items[index].focus();\n }\n}\n_mediaController = new WeakMap();\n_previouslyFocused = new WeakMap();\n_invokerElement = new WeakMap();\n_previousItems = new WeakMap();\n_mutationObserver = new WeakMap();\n_isPopover = new WeakMap();\n_cssRule = new WeakMap();\n_handleSlotChange = new WeakSet();\nhandleSlotChange_fn = function(event) {\n const slot = event.target;\n for (const node of slot.assignedNodes({ flatten: true })) {\n if (node.nodeType === 3 && node.textContent.trim() === \"\") {\n node.remove();\n }\n }\n if ([\"header\", \"title\"].includes(slot.name)) {\n __privateMethod(this, _toggleHeader, toggleHeader_fn).call(this);\n }\n if (!slot.name) {\n __privateGet(this, _handleMenuItems).call(this);\n }\n};\n_toggleHeader = new WeakSet();\ntoggleHeader_fn = function() {\n const header = this.shadowRoot.querySelector(\n 'slot[name=\"header\"]'\n );\n const title = this.shadowRoot.querySelector(\n 'slot[name=\"title\"]'\n );\n header.hidden = title.assignedNodes().length === 0 && header.assignedNodes().length === 0;\n};\n_handleMenuItems = new WeakMap();\n_updateLayoutStyle = new WeakSet();\nupdateLayoutStyle_fn = function() {\n var _a;\n const layoutRowStyle = this.shadowRoot.querySelector(\"#layout-row\");\n const menuLayout = (_a = getComputedStyle(this).getPropertyValue(\"--media-menu-layout\")) == null ? void 0 : _a.trim();\n layoutRowStyle.setAttribute(\"media\", menuLayout === \"row\" ? \"\" : \"width:0\");\n};\n_handleInvoke = new WeakSet();\nhandleInvoke_fn = function(event) {\n __privateSet(this, _invokerElement, event.relatedTarget);\n if (!containsComposedNode(this, event.relatedTarget)) {\n this.hidden = !this.hidden;\n }\n};\n_handleOpen = new WeakSet();\nhandleOpen_fn = function() {\n var _a;\n (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"true\");\n this.addEventListener(\"transitionend\", () => this.focus(), { once: true });\n observeResize(getBoundsElement(this), __privateGet(this, _handleBoundsResize));\n observeResize(this, __privateGet(this, _handleMenuResize));\n};\n_handleClosed = new WeakSet();\nhandleClosed_fn = function() {\n var _a;\n (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"false\");\n unobserveResize(getBoundsElement(this), __privateGet(this, _handleBoundsResize));\n unobserveResize(this, __privateGet(this, _handleMenuResize));\n};\n_handleBoundsResize = new WeakMap();\n_handleMenuResize = new WeakMap();\n_positionMenu = new WeakSet();\npositionMenu_fn = function(menuWidth) {\n if (this.hasAttribute(\"mediacontroller\") && !this.anchor)\n return;\n if (this.hidden || !this.anchorElement)\n return;\n const { x, y } = computePosition({\n anchor: this.anchorElement,\n floating: this,\n placement: \"top-start\"\n });\n menuWidth != null ? menuWidth : menuWidth = this.offsetWidth;\n const bounds = getBoundsElement(this);\n const boundsRect = bounds.getBoundingClientRect();\n const right = boundsRect.width - x - menuWidth;\n const bottom = boundsRect.height - y - this.offsetHeight;\n const { style } = __privateGet(this, _cssRule);\n style.setProperty(\"position\", \"absolute\");\n style.setProperty(\"right\", `${Math.max(0, right)}px`);\n style.setProperty(\"--_menu-bottom\", `${bottom}px`);\n const computedStyle = getComputedStyle(this);\n const isBottomCalc = style.getPropertyValue(\"--_menu-bottom\") === computedStyle.bottom;\n const realBottom = isBottomCalc ? bottom : parseFloat(computedStyle.bottom);\n const maxHeight = boundsRect.height - realBottom - parseFloat(computedStyle.marginBottom);\n this.style.setProperty(\"--_menu-max-height\", `${maxHeight}px`);\n};\n_resizeMenu = new WeakSet();\nresizeMenu_fn = function(animate) {\n const expandedMenuItem = this.querySelector(\n '[role=\"menuitem\"][aria-haspopup][aria-expanded=\"true\"]'\n );\n const expandedSubmenu = expandedMenuItem == null ? void 0 : expandedMenuItem.querySelector(\n '[role=\"menu\"]'\n );\n const { style } = __privateGet(this, _cssRule);\n if (!animate) {\n style.setProperty(\"--media-menu-transition-in\", \"none\");\n }\n if (expandedSubmenu) {\n const height = expandedSubmenu.offsetHeight;\n const width = Math.max(\n expandedSubmenu.offsetWidth,\n expandedMenuItem.offsetWidth\n );\n this.style.setProperty(\"min-width\", `${width}px`);\n this.style.setProperty(\"min-height\", `${height}px`);\n __privateMethod(this, _positionMenu, positionMenu_fn).call(this, width);\n } else {\n this.style.removeProperty(\"min-width\");\n this.style.removeProperty(\"min-height\");\n __privateMethod(this, _positionMenu, positionMenu_fn).call(this);\n }\n style.removeProperty(\"--media-menu-transition-in\");\n};\n_handleClick = new WeakSet();\nhandleClick_fn = function(event) {\n var _a;\n event.stopPropagation();\n if (event.composedPath().includes(__privateGet(this, _backButtonElement, backButtonElement_get))) {\n (_a = __privateGet(this, _previouslyFocused)) == null ? void 0 : _a.focus();\n this.hidden = true;\n return;\n }\n const item = __privateMethod(this, _getItem, getItem_fn).call(this, event);\n if (!item || item.hasAttribute(\"disabled\"))\n return;\n __privateMethod(this, _setTabItem, setTabItem_fn).call(this, item);\n this.handleSelect(event);\n};\n_backButtonElement = new WeakSet();\nbackButtonElement_get = function() {\n var _a;\n const headerSlot = this.shadowRoot.querySelector(\n 'slot[name=\"header\"]'\n );\n return (_a = headerSlot.assignedElements({ flatten: true })) == null ? void 0 : _a.find((el) => el.matches('button[part~=\"back\"]'));\n};\n_handleToggle = new WeakSet();\nhandleToggle_fn = function(event) {\n if (event.target === this)\n return;\n __privateMethod(this, _checkSubmenuHasExpanded, checkSubmenuHasExpanded_fn).call(this);\n const menuItemsWithSubmenu = Array.from(\n this.querySelectorAll('[role=\"menuitem\"][aria-haspopup]')\n );\n for (const item of menuItemsWithSubmenu) {\n if (item.invokeTargetElement == event.target)\n continue;\n if (event.newState == \"open\" && item.getAttribute(\"aria-expanded\") == \"true\" && !item.invokeTargetElement.hidden) {\n item.invokeTargetElement.dispatchEvent(\n new InvokeEvent({ relatedTarget: item })\n );\n }\n }\n for (const item of menuItemsWithSubmenu) {\n item.setAttribute(\"aria-expanded\", `${!item.submenuElement.hidden}`);\n }\n __privateMethod(this, _resizeMenu, resizeMenu_fn).call(this, true);\n};\n_checkSubmenuHasExpanded = new WeakSet();\ncheckSubmenuHasExpanded_fn = function() {\n const selector = '[role=\"menuitem\"] > [role=\"menu\"]:not([hidden])';\n const expandedMenuItem = this.querySelector(selector);\n this.container.classList.toggle(\"has-expanded\", !!expandedMenuItem);\n};\n_handleFocusOut = new WeakSet();\nhandleFocusOut_fn = function(event) {\n var _a;\n if (!containsComposedNode(this, event.relatedTarget)) {\n if (__privateGet(this, _isPopover)) {\n (_a = __privateGet(this, _previouslyFocused)) == null ? void 0 : _a.focus();\n }\n if (__privateGet(this, _invokerElement) && __privateGet(this, _invokerElement) !== event.relatedTarget && !this.hidden) {\n this.hidden = true;\n }\n }\n};\n_handleKeyDown = new WeakSet();\nhandleKeyDown_fn = function(event) {\n var _a, _b, _c, _d, _e;\n const { key, ctrlKey, altKey, metaKey } = event;\n if (ctrlKey || altKey || metaKey) {\n return;\n }\n if (!this.keysUsed.includes(key)) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (key === \"Tab\") {\n if (__privateGet(this, _isPopover)) {\n this.hidden = true;\n return;\n }\n if (event.shiftKey) {\n (_b = (_a = this.previousElementSibling) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a);\n } else {\n (_d = (_c = this.nextElementSibling) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c);\n }\n this.blur();\n } else if (key === \"Escape\") {\n (_e = __privateGet(this, _previouslyFocused)) == null ? void 0 : _e.focus();\n if (__privateGet(this, _isPopover)) {\n this.hidden = true;\n }\n } else if (key === \"Enter\" || key === \" \") {\n this.handleSelect(event);\n } else {\n this.handleMove(event);\n }\n};\n_getItem = new WeakSet();\ngetItem_fn = function(event) {\n return event.composedPath().find((el) => {\n return [\"menuitemradio\", \"menuitemcheckbox\"].includes(\n el.role\n );\n });\n};\n_getTabItem = new WeakSet();\ngetTabItem_fn = function() {\n return this.items.find((item) => item.tabIndex === 0);\n};\n_setTabItem = new WeakSet();\nsetTabItem_fn = function(tabItem) {\n for (const item of this.items) {\n item.tabIndex = item === tabItem ? 0 : -1;\n }\n};\n_selectItem = new WeakSet();\nselectItem_fn = function(item, toggle) {\n const oldCheckedItems = [...this.checkedItems];\n if (item.type === \"radio\") {\n this.radioGroupItems.forEach((el) => el.checked = false);\n }\n if (toggle) {\n item.checked = !item.checked;\n } else {\n item.checked = true;\n }\n if (this.checkedItems.some((opt, i) => opt != oldCheckedItems[i])) {\n this.dispatchEvent(\n new Event(\"change\", { bubbles: true, composed: true })\n );\n }\n};\nMediaChromeMenu.shadowRootOptions = { mode: \"open\" };\nMediaChromeMenu.getTemplateHTML = getTemplateHTML;\nfunction isMenuItem(element) {\n return [\"menuitem\", \"menuitemradio\", \"menuitemcheckbox\"].includes(\n element == null ? void 0 : element.role\n );\n}\nfunction getBoundsElement(host) {\n var _a;\n return (_a = host.getAttribute(\"bounds\") ? closestComposedNode(host, `#${host.getAttribute(\"bounds\")}`) : getMediaController(host) || host.parentElement) != null ? _a : host;\n}\nif (!globalThis.customElements.get(\"media-chrome-menu\")) {\n globalThis.customElements.define(\"media-chrome-menu\", MediaChromeMenu);\n}\nvar media_chrome_menu_default = MediaChromeMenu;\nexport {\n Attributes,\n MediaChromeMenu,\n createIndicator,\n createMenuItem,\n media_chrome_menu_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaChromeMenuItem } from \"./media-chrome-menu-item.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeMenuItem.getTemplateHTML.call(this, _attrs)}\n <style>\n ::slotted(*) {\n color: var(--media-text-color, white);\n text-decoration: none;\n border: none;\n background: none;\n cursor: pointer;\n padding: 0;\n min-height: var(--media-control-height, 24px);\n }\n </style>\n `\n );\n}\nclass MediaContextMenuItem extends MediaChromeMenuItem {\n}\nMediaContextMenuItem.shadowRootOptions = { mode: \"open\" };\nMediaContextMenuItem.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-context-menu-item\")) {\n globalThis.customElements.define(\n \"media-context-menu-item\",\n MediaContextMenuItem\n );\n}\nvar media_context_menu_item_default = MediaContextMenuItem;\nexport {\n MediaContextMenuItem,\n media_context_menu_item_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _isContextMenuOpen, _updateVisibility, updateVisibility_fn, _closeContextMenu, closeContextMenu_fn, _closeOtherContextMenus, closeOtherContextMenus_fn, _isVideoContainer, isVideoContainer_fn, _onControllerContextMenu, _onContextMenu, onContextMenu_fn, _onDocumentClick, _onKeyDown, _onMenuClick;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaChromeMenu } from \"./media-chrome-menu.js\";\nimport { getMediaController } from \"../utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeMenu.getTemplateHTML(_attrs)}\n <style>\n :host {\n --_menu-bg: rgb(20 20 30 / .8);\n background: var(--media-settings-menu-background,\n var(--media-menu-background,\n var(--media-control-background,\n var(--media-secondary-color, var(--_menu-bg)))));\n min-width: var(--media-settings-menu-min-width, 170px);\n border-radius: 2px;\n overflow: hidden;\n }\n </style>\n `\n );\n}\nclass MediaContextMenu extends MediaChromeMenu {\n constructor() {\n super();\n __privateAdd(this, _updateVisibility);\n __privateAdd(this, _closeContextMenu);\n __privateAdd(this, _closeOtherContextMenus);\n __privateAdd(this, _isVideoContainer);\n __privateAdd(this, _onContextMenu);\n __privateAdd(this, _isContextMenuOpen, false);\n __privateAdd(this, _onControllerContextMenu, (event) => {\n const target = event.target;\n const isVideoElement = (target == null ? void 0 : target.nodeName) === \"VIDEO\";\n const isVideoContainer = __privateMethod(this, _isVideoContainer, isVideoContainer_fn).call(this, target);\n if (isVideoElement || isVideoContainer) {\n if (!__privateGet(this, _isContextMenuOpen)) {\n __privateMethod(this, _onContextMenu, onContextMenu_fn).call(this, event);\n } else {\n __privateMethod(this, _closeContextMenu, closeContextMenu_fn).call(this);\n }\n }\n });\n __privateAdd(this, _onDocumentClick, (event) => {\n const target = event.target;\n const isInsideMenu = this.contains(target);\n const isRightClick = event.button === 2;\n const isVideo = (target == null ? void 0 : target.nodeName) === \"VIDEO\";\n const isVideoContainer = __privateMethod(this, _isVideoContainer, isVideoContainer_fn).call(this, target);\n if (isInsideMenu) {\n return;\n }\n const isRightClickOnVideo = isRightClick && (isVideo || isVideoContainer);\n if (isRightClickOnVideo) {\n return;\n }\n __privateMethod(this, _closeContextMenu, closeContextMenu_fn).call(this);\n });\n __privateAdd(this, _onKeyDown, (event) => {\n if (event.key === \"Escape\") {\n __privateMethod(this, _closeContextMenu, closeContextMenu_fn).call(this);\n }\n });\n __privateAdd(this, _onMenuClick, (event) => {\n var _a, _b;\n const target = event.target;\n if ((_a = target.matches) == null ? void 0 : _a.call(target, 'button[invoke=\"copy\"]')) {\n const input = (_b = target.closest(\"media-context-menu-item\")) == null ? void 0 : _b.querySelector('input[slot=\"copy\"]');\n input && navigator.clipboard.writeText(input.value);\n }\n __privateMethod(this, _closeContextMenu, closeContextMenu_fn).call(this);\n });\n this.setAttribute(\"noautohide\", \"\");\n __privateMethod(this, _updateVisibility, updateVisibility_fn).call(this);\n }\n connectedCallback() {\n super.connectedCallback();\n getMediaController(this).addEventListener(\n \"contextmenu\",\n __privateGet(this, _onControllerContextMenu)\n );\n this.addEventListener(\"click\", __privateGet(this, _onMenuClick));\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n getMediaController(this).removeEventListener(\n \"contextmenu\",\n __privateGet(this, _onControllerContextMenu)\n );\n this.removeEventListener(\"click\", __privateGet(this, _onMenuClick));\n document.removeEventListener(\"mousedown\", __privateGet(this, _onDocumentClick));\n document.removeEventListener(\"keydown\", __privateGet(this, _onKeyDown));\n }\n}\n_isContextMenuOpen = new WeakMap();\n_updateVisibility = new WeakSet();\nupdateVisibility_fn = function() {\n this.hidden = !__privateGet(this, _isContextMenuOpen);\n};\n_closeContextMenu = new WeakSet();\ncloseContextMenu_fn = function() {\n __privateSet(this, _isContextMenuOpen, false);\n __privateMethod(this, _updateVisibility, updateVisibility_fn).call(this);\n};\n_closeOtherContextMenus = new WeakSet();\ncloseOtherContextMenus_fn = function() {\n const allContextMenus = document.querySelectorAll(\"media-context-menu\");\n allContextMenus.forEach((menu) => {\n var _a;\n if (menu !== this) {\n __privateMethod(_a = menu, _closeContextMenu, closeContextMenu_fn).call(_a);\n }\n });\n};\n_isVideoContainer = new WeakSet();\nisVideoContainer_fn = function(element) {\n if (!element)\n return false;\n if (element.hasAttribute(\"slot\") && element.getAttribute(\"slot\") === \"media\") {\n return true;\n }\n if (element.nodeName.includes(\"-\") && element.tagName.includes(\"-\")) {\n const hasVideoAttributes = element.hasAttribute(\"src\") || element.hasAttribute(\"poster\") || element.hasAttribute(\"preload\") || element.hasAttribute(\"playsinline\");\n return hasVideoAttributes;\n }\n return false;\n};\n_onControllerContextMenu = new WeakMap();\n_onContextMenu = new WeakSet();\nonContextMenu_fn = function(event) {\n event.preventDefault();\n __privateMethod(this, _closeOtherContextMenus, closeOtherContextMenus_fn).call(this);\n __privateSet(this, _isContextMenuOpen, true);\n this.style.position = \"fixed\";\n this.style.left = `${event.clientX}px`;\n this.style.top = `${event.clientY}px`;\n __privateMethod(this, _updateVisibility, updateVisibility_fn).call(this);\n document.addEventListener(\"mousedown\", __privateGet(this, _onDocumentClick), {\n once: true\n });\n document.addEventListener(\"keydown\", __privateGet(this, _onKeyDown), { once: true });\n};\n_onDocumentClick = new WeakMap();\n_onKeyDown = new WeakMap();\n_onMenuClick = new WeakMap();\nMediaContextMenu.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-context-menu\")) {\n globalThis.customElements.define(\"media-context-menu\", MediaContextMenu);\n}\nvar media_context_menu_default = MediaContextMenu;\nexport {\n MediaContextMenu,\n media_context_menu_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"../constants.js\";\nimport { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport {\n getNumericAttr,\n setNumericAttr,\n getMediaController\n} from \"../utils/element-utils.js\";\nimport { t } from \"../utils/i18n.js\";\nconst DEFAULT_RATE = 1;\nfunction getSlotTemplateHTML(attrs) {\n return (\n /*html*/\n `\n <style>\n :host {\n min-width: 5ch;\n padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n }\n \n :host([aria-expanded=\"true\"]) slot[name=tooltip] {\n display: none;\n }\n </style>\n <slot name=\"icon\">${attrs[\"mediaplaybackrate\"] || DEFAULT_RATE}x</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Playback rate\");\n}\nclass MediaPlaybackRateMenuButton extends MediaChromeMenuButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE\n ];\n }\n constructor() {\n var _a;\n super();\n this.container = this.shadowRoot.querySelector('slot[name=\"icon\"]');\n this.container.innerHTML = `${(_a = this.mediaPlaybackRate) != null ? _a : DEFAULT_RATE}x`;\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE) {\n const newPlaybackRate = newValue ? +newValue : Number.NaN;\n const playbackRate = !Number.isNaN(newPlaybackRate) ? newPlaybackRate : DEFAULT_RATE;\n this.container.innerHTML = `${playbackRate}x`;\n this.setAttribute(\n \"aria-label\",\n t(\"Playback rate {playbackRate}\", { playbackRate })\n );\n }\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n */\n get invokeTargetElement() {\n if (this.invokeTarget != void 0)\n return super.invokeTargetElement;\n return getMediaController(this).querySelector(\"media-playback-rate-menu\");\n }\n /**\n * The current playback rate\n */\n get mediaPlaybackRate() {\n return getNumericAttr(\n this,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n DEFAULT_RATE\n );\n }\n set mediaPlaybackRate(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n }\n}\nMediaPlaybackRateMenuButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPlaybackRateMenuButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-playback-rate-menu-button\")) {\n globalThis.customElements.define(\n \"media-playback-rate-menu-button\",\n MediaPlaybackRateMenuButton\n );\n}\nvar media_playback_rate_menu_button_default = MediaPlaybackRateMenuButton;\nexport {\n DEFAULT_RATE,\n MediaPlaybackRateMenuButton,\n media_playback_rate_menu_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _rates, _render, render_fn, _onChange, onChange_fn;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"../constants.js\";\nimport { AttributeTokenList } from \"../utils/attribute-token-list.js\";\nimport {\n getNumericAttr,\n setNumericAttr,\n getMediaController\n} from \"../utils/element-utils.js\";\nimport { DEFAULT_RATES, DEFAULT_RATE } from \"../media-playback-rate-button.js\";\nimport {\n MediaChromeMenu,\n createMenuItem,\n createIndicator\n} from \"./media-chrome-menu.js\";\nconst Attributes = {\n RATES: \"rates\"\n};\nclass MediaPlaybackRateMenu extends MediaChromeMenu {\n constructor() {\n super();\n __privateAdd(this, _render);\n __privateAdd(this, _onChange);\n __privateAdd(this, _rates, new AttributeTokenList(this, Attributes.RATES, {\n defaultValue: DEFAULT_RATES\n }));\n __privateMethod(this, _render, render_fn).call(this);\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n Attributes.RATES\n ];\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE && oldValue != newValue) {\n this.value = newValue;\n } else if (attrName === Attributes.RATES && oldValue != newValue) {\n __privateGet(this, _rates).value = newValue;\n __privateMethod(this, _render, render_fn).call(this);\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n if (this.anchor !== \"auto\")\n return super.anchorElement;\n return getMediaController(this).querySelector(\n \"media-playback-rate-menu-button\"\n );\n }\n /**\n * Get the playback rates for the button.\n */\n get rates() {\n return __privateGet(this, _rates);\n }\n /**\n * Set the playback rates for the button.\n * For React 19+ compatibility, accept a string of space-separated rates.\n */\n set rates(value) {\n if (!value) {\n __privateGet(this, _rates).value = \"\";\n } else if (Array.isArray(value)) {\n __privateGet(this, _rates).value = value.join(\" \");\n } else if (typeof value === \"string\") {\n __privateGet(this, _rates).value = value;\n }\n __privateMethod(this, _render, render_fn).call(this);\n }\n /**\n * The current playback rate\n */\n get mediaPlaybackRate() {\n return getNumericAttr(\n this,\n MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n DEFAULT_RATE\n );\n }\n set mediaPlaybackRate(value) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n }\n}\n_rates = new WeakMap();\n_render = new WeakSet();\nrender_fn = function() {\n this.defaultSlot.textContent = \"\";\n for (const rate of __privateGet(this, _rates)) {\n const item = createMenuItem({\n type: \"radio\",\n text: this.formatMenuItemText(`${rate}x`, rate),\n value: rate,\n checked: this.mediaPlaybackRate === Number(rate)\n });\n item.prepend(createIndicator(this, \"checked-indicator\"));\n this.defaultSlot.append(item);\n }\n};\n_onChange = new WeakSet();\nonChange_fn = function() {\n if (!this.value)\n return;\n const event = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail: this.value\n }\n );\n this.dispatchEvent(event);\n};\nif (!globalThis.customElements.get(\"media-playback-rate-menu\")) {\n globalThis.customElements.define(\n \"media-playback-rate-menu\",\n MediaPlaybackRateMenu\n );\n}\nvar media_playback_rate_menu_default = MediaPlaybackRateMenu;\nexport {\n Attributes,\n MediaPlaybackRateMenu,\n media_playback_rate_menu_default as default\n};\n","import { MediaUIAttributes } from \"../constants.js\";\nimport { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n getStringAttr,\n setStringAttr,\n getMediaController,\n getNumericAttr,\n setNumericAttr\n} from \"../utils/element-utils.js\";\nimport { t } from \"../utils/i18n.js\";\nconst renditionIcon = (\n /*html*/\n `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M13.5 2.5h2v6h-2v-2h-11v-2h11v-2Zm4 2h4v2h-4v-2Zm-12 4h2v6h-2v-2h-3v-2h3v-2Zm4 2h12v2h-12v-2Zm1 4h2v6h-2v-2h-8v-2h8v-2Zm4 2h7v2h-7v-2Z\" />\n</svg>`\n);\nfunction getSlotTemplateHTML() {\n return (\n /*html*/\n `\n <style>\n :host([aria-expanded=\"true\"]) slot[name=tooltip] {\n display: none;\n }\n </style>\n <slot name=\"icon\">${renditionIcon}</slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Quality\");\n}\nclass MediaRenditionMenuButton extends MediaChromeMenuButton {\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE,\n MediaUIAttributes.MEDIA_HEIGHT\n ];\n }\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute(\"aria-label\", t(\"quality\"));\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n */\n get invokeTargetElement() {\n if (this.invokeTarget != void 0)\n return super.invokeTargetElement;\n return getMediaController(this).querySelector(\"media-rendition-menu\");\n }\n /**\n * Get selected rendition id.\n */\n get mediaRenditionSelected() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n }\n set mediaRenditionSelected(id) {\n setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n }\n get mediaHeight() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_HEIGHT);\n }\n set mediaHeight(height) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_HEIGHT, height);\n }\n}\nMediaRenditionMenuButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaRenditionMenuButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-rendition-menu-button\")) {\n globalThis.customElements.define(\n \"media-rendition-menu-button\",\n MediaRenditionMenuButton\n );\n}\nvar media_rendition_menu_button_default = MediaRenditionMenuButton;\nexport {\n MediaRenditionMenuButton,\n media_rendition_menu_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\nvar _renditionList, _prevState, _render, render_fn, _onChange, onChange_fn;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"../constants.js\";\nimport {\n getMediaController,\n getStringAttr,\n setStringAttr,\n getNumericAttr,\n setNumericAttr\n} from \"../utils/element-utils.js\";\nimport { parseRenditionList } from \"../utils/utils.js\";\nimport {\n MediaChromeMenu,\n createMenuItem,\n createIndicator\n} from \"./media-chrome-menu.js\";\nimport { t } from \"../utils/i18n.js\";\nclass MediaRenditionMenu extends MediaChromeMenu {\n constructor() {\n super(...arguments);\n __privateAdd(this, _render);\n __privateAdd(this, _onChange);\n __privateAdd(this, _renditionList, []);\n __privateAdd(this, _prevState, {});\n }\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n MediaUIAttributes.MEDIA_RENDITION_LIST,\n MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE,\n MediaUIAttributes.MEDIA_HEIGHT\n ];\n }\n static formatMenuItemText(text, rendition) {\n return super.formatMenuItemText(text, rendition);\n }\n static formatRendition(rendition, { showBitrate = false } = {}) {\n const renditionText = `${Math.min(\n rendition.width,\n rendition.height\n )}p`;\n if (showBitrate && rendition.bitrate) {\n const mbps = rendition.bitrate / 1e6;\n const bitrateText = `${mbps.toFixed(mbps < 1 ? 1 : 0)} Mbps`;\n return `${renditionText} (${bitrateText})`;\n }\n return this.formatMenuItemText(renditionText, rendition);\n }\n static compareRendition(a, b) {\n var _a, _b;\n return b.height === a.height ? ((_a = b.bitrate) != null ? _a : 0) - ((_b = a.bitrate) != null ? _b : 0) : b.height - a.height;\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (attrName === MediaUIAttributes.MEDIA_RENDITION_SELECTED && oldValue !== newValue) {\n this.value = newValue != null ? newValue : \"auto\";\n __privateMethod(this, _render, render_fn).call(this);\n } else if (attrName === MediaUIAttributes.MEDIA_RENDITION_LIST && oldValue !== newValue) {\n __privateSet(this, _renditionList, parseRenditionList(newValue));\n __privateMethod(this, _render, render_fn).call(this);\n } else if (attrName === MediaUIAttributes.MEDIA_HEIGHT && oldValue !== newValue) {\n __privateMethod(this, _render, render_fn).call(this);\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"change\", __privateMethod(this, _onChange, onChange_fn));\n }\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n if (this.anchor !== \"auto\")\n return super.anchorElement;\n return getMediaController(this).querySelector(\n \"media-rendition-menu-button\"\n );\n }\n get mediaRenditionList() {\n return __privateGet(this, _renditionList);\n }\n set mediaRenditionList(list) {\n __privateSet(this, _renditionList, list);\n __privateMethod(this, _render, render_fn).call(this);\n }\n /**\n * Get selected rendition id.\n */\n get mediaRenditionSelected() {\n return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n }\n set mediaRenditionSelected(id) {\n setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n }\n get mediaHeight() {\n return getNumericAttr(this, MediaUIAttributes.MEDIA_HEIGHT);\n }\n set mediaHeight(height) {\n setNumericAttr(this, MediaUIAttributes.MEDIA_HEIGHT, height);\n }\n compareRendition(a, b) {\n const ctor = this.constructor;\n return ctor.compareRendition(a, b);\n }\n formatMenuItemText(text, rendition) {\n const ctor = this.constructor;\n return ctor.formatMenuItemText(text, rendition);\n }\n formatRendition(rendition, options) {\n const ctor = this.constructor;\n return ctor.formatRendition(rendition, options);\n }\n showRenditionBitrate(rendition) {\n return this.mediaRenditionList.some(\n (r) => r !== rendition && r.height === rendition.height && r.bitrate !== rendition.bitrate\n );\n }\n}\n_renditionList = new WeakMap();\n_prevState = new WeakMap();\n_render = new WeakSet();\nrender_fn = function() {\n if (__privateGet(this, _prevState).mediaRenditionList === JSON.stringify(this.mediaRenditionList) && __privateGet(this, _prevState).mediaHeight === this.mediaHeight)\n return;\n __privateGet(this, _prevState).mediaRenditionList = JSON.stringify(\n this.mediaRenditionList\n );\n __privateGet(this, _prevState).mediaHeight = this.mediaHeight;\n const renditionList = this.mediaRenditionList.sort(\n this.compareRendition.bind(this)\n );\n const selectedRendition = renditionList.find(\n (rendition) => rendition.id === this.mediaRenditionSelected\n );\n for (const rendition of renditionList) {\n rendition.selected = rendition === selectedRendition;\n }\n this.defaultSlot.textContent = \"\";\n const isAuto = !this.mediaRenditionSelected;\n for (const rendition of renditionList) {\n const text = this.formatRendition(rendition, {\n showBitrate: this.showRenditionBitrate(rendition)\n });\n const item2 = createMenuItem({\n type: \"radio\",\n text,\n value: `${rendition.id}`,\n checked: rendition.selected && !isAuto\n });\n item2.prepend(createIndicator(this, \"checked-indicator\"));\n this.defaultSlot.append(item2);\n }\n const showSelectedBitrate = selectedRendition && this.showRenditionBitrate(selectedRendition);\n const autoText = isAuto ? (\n // Auto • 1080p (4 Mbps)\n selectedRendition ? this.formatMenuItemText(\n `${t(\"Auto\")} \\u2022 ${this.formatRendition(selectedRendition, {\n showBitrate: showSelectedBitrate\n })}`,\n selectedRendition\n ) : this.formatMenuItemText(`${t(\"Auto\")} (${this.mediaHeight}p)`)\n ) : this.formatMenuItemText(t(\"Auto\"));\n const item = createMenuItem({\n type: \"radio\",\n text: autoText,\n value: \"auto\",\n checked: isAuto\n });\n item.dataset.description = autoText;\n item.prepend(createIndicator(this, \"checked-indicator\"));\n this.defaultSlot.append(item);\n};\n_onChange = new WeakSet();\nonChange_fn = function() {\n if (this.value == null)\n return;\n const event = new globalThis.CustomEvent(\n MediaUIEvents.MEDIA_RENDITION_REQUEST,\n {\n composed: true,\n bubbles: true,\n detail: this.value\n }\n );\n this.dispatchEvent(event);\n};\nif (!globalThis.customElements.get(\"media-rendition-menu\")) {\n globalThis.customElements.define(\"media-rendition-menu\", MediaRenditionMenu);\n}\nvar media_rendition_menu_default = MediaRenditionMenu;\nexport {\n MediaRenditionMenu,\n media_rendition_menu_default as default\n};\n","import { MediaChromeMenuButton } from \"./media-chrome-menu-button.js\";\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nimport { getMediaController } from \"../utils/element-utils.js\";\nimport { t } from \"../utils/i18n.js\";\nfunction getSlotTemplateHTML() {\n return (\n /*html*/\n `\n <style>\n :host([aria-expanded=\"true\"]) slot[name=tooltip] {\n display: none;\n }\n </style>\n <slot name=\"icon\">\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n <path d=\"M4.5 14.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm7.5 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm7.5 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\"/>\n </svg>\n </slot>\n `\n );\n}\nfunction getTooltipContentHTML() {\n return t(\"Settings\");\n}\nclass MediaSettingsMenuButton extends MediaChromeMenuButton {\n static get observedAttributes() {\n return [...super.observedAttributes, \"target\"];\n }\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute(\"aria-label\", t(\"settings\"));\n }\n /**\n * Returns the element with the id specified by the `invoketarget` attribute.\n * @return {HTMLElement | null}\n */\n get invokeTargetElement() {\n if (this.invokeTarget != void 0)\n return super.invokeTargetElement;\n return getMediaController(this).querySelector(\"media-settings-menu\");\n }\n}\nMediaSettingsMenuButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaSettingsMenuButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-settings-menu-button\")) {\n globalThis.customElements.define(\n \"media-settings-menu-button\",\n MediaSettingsMenuButton\n );\n}\nvar media_settings_menu_button_default = MediaSettingsMenuButton;\nexport {\n MediaSettingsMenuButton,\n media_settings_menu_button_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaChromeMenuItem } from \"./media-chrome-menu-item.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeMenuItem.getTemplateHTML.call(this, _attrs)}\n <style>\n slot:not([name=\"submenu\"]) {\n opacity: var(--media-settings-menu-item-opacity, var(--media-menu-item-opacity));\n }\n\n :host([aria-expanded=\"true\"]:hover) {\n background: transparent;\n }\n </style>\n `\n );\n}\nfunction getSuffixSlotInnerHTML(_attrs) {\n return (\n /*html*/\n `\n <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n <path d=\"m8.12 17.585-.742-.669 4.2-4.665-4.2-4.666.743-.669 4.803 5.335-4.803 5.334Z\"/>\n </svg>\n `\n );\n}\nclass MediaSettingsMenuItem extends MediaChromeMenuItem {\n}\nMediaSettingsMenuItem.shadowRootOptions = { mode: \"open\" };\nMediaSettingsMenuItem.getTemplateHTML = getTemplateHTML;\nMediaSettingsMenuItem.getSuffixSlotInnerHTML = getSuffixSlotInnerHTML;\nif (!globalThis.customElements.get(\"media-settings-menu-item\")) {\n globalThis.customElements.define(\n \"media-settings-menu-item\",\n MediaSettingsMenuItem\n );\n}\nvar media_settings_menu_item_default = MediaSettingsMenuItem;\nexport {\n MediaSettingsMenuItem,\n media_settings_menu_item_default as default\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport { MediaChromeMenu } from \"./media-chrome-menu.js\";\nimport { getMediaController } from \"../utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n return (\n /*html*/\n `\n ${MediaChromeMenu.getTemplateHTML(_attrs)}\n <style>\n :host {\n --_menu-bg: rgb(20 20 30 / .8);\n background: var(--media-settings-menu-background,\n var(--media-menu-background,\n var(--media-control-background,\n var(--media-secondary-color, var(--_menu-bg)))));\n min-width: var(--media-settings-menu-min-width, 170px);\n border-radius: 2px 2px 0 0;\n overflow: hidden;\n }\n\n @-moz-document url-prefix() {\n :host{\n --_menu-bg: rgb(20 20 30);\n }\n }\n\n :host([role=\"menu\"]) {\n ${/* Bottom fix setting menu items for animation when the height expands. */\n \"\"}\n justify-content: end;\n }\n\n slot:not([name]) {\n justify-content: var(--media-settings-menu-justify-content);\n flex-direction: var(--media-settings-menu-flex-direction, column);\n overflow: visible;\n }\n\n #container.has-expanded {\n --media-settings-menu-item-opacity: 0;\n }\n </style>\n `\n );\n}\nclass MediaSettingsMenu extends MediaChromeMenu {\n /**\n * Returns the anchor element when it is a floating menu.\n */\n get anchorElement() {\n if (this.anchor !== \"auto\")\n return super.anchorElement;\n return getMediaController(this).querySelector(\n \"media-settings-menu-button\"\n );\n }\n}\nMediaSettingsMenu.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-settings-menu\")) {\n globalThis.customElements.define(\"media-settings-menu\", MediaSettingsMenu);\n}\nvar media_settings_menu_default = MediaSettingsMenu;\nexport {\n MediaSettingsMenu,\n media_settings_menu_default as default\n};\n","function computePosition({\n anchor,\n floating,\n placement\n}) {\n const rects = getElementRects({ anchor, floating });\n const { x, y } = computeCoordsFromPlacement(rects, placement);\n return { x, y };\n}\nfunction getElementRects({\n anchor,\n floating\n}) {\n return {\n anchor: getRectRelativeToOffsetParent(anchor, floating.offsetParent),\n floating: {\n x: 0,\n y: 0,\n width: floating.offsetWidth,\n height: floating.offsetHeight\n }\n };\n}\nfunction getRectRelativeToOffsetParent(element, offsetParent) {\n var _a;\n const rect = element.getBoundingClientRect();\n const offsetRect = (_a = offsetParent == null ? void 0 : offsetParent.getBoundingClientRect()) != null ? _a : { x: 0, y: 0 };\n return {\n x: rect.x - offsetRect.x,\n y: rect.y - offsetRect.y,\n width: rect.width,\n height: rect.height\n };\n}\nfunction computeCoordsFromPlacement({ anchor, floating }, placement) {\n const alignmentAxis = getSideAxis(placement) === \"x\" ? \"y\" : \"x\";\n const alignLength = alignmentAxis === \"y\" ? \"height\" : \"width\";\n const side = getSide(placement);\n const commonX = anchor.x + anchor.width / 2 - floating.width / 2;\n const commonY = anchor.y + anchor.height / 2 - floating.height / 2;\n const commonAlign = anchor[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case \"top\":\n coords = { x: commonX, y: anchor.y - floating.height };\n break;\n case \"bottom\":\n coords = { x: commonX, y: anchor.y + anchor.height };\n break;\n case \"right\":\n coords = { x: anchor.x + anchor.width, y: commonY };\n break;\n case \"left\":\n coords = { x: anchor.x - floating.width, y: commonY };\n break;\n default:\n coords = { x: anchor.x, y: anchor.y };\n }\n switch (placement.split(\"-\")[1]) {\n case \"start\":\n coords[alignmentAxis] -= commonAlign;\n break;\n case \"end\":\n coords[alignmentAxis] += commonAlign;\n break;\n }\n return coords;\n}\nfunction getSide(placement) {\n return placement.split(\"-\")[0];\n}\nfunction getSideAxis(placement) {\n return [\"top\", \"bottom\"].includes(getSide(placement)) ? \"y\" : \"x\";\n}\nexport {\n computePosition\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _el, _attr, _defaultSet, _tokenSet, _tokens, tokens_get;\nclass AttributeTokenList {\n constructor(el, attr, { defaultValue } = { defaultValue: void 0 }) {\n __privateAdd(this, _tokens);\n __privateAdd(this, _el, void 0);\n __privateAdd(this, _attr, void 0);\n __privateAdd(this, _defaultSet, void 0);\n __privateAdd(this, _tokenSet, /* @__PURE__ */ new Set());\n __privateSet(this, _el, el);\n __privateSet(this, _attr, attr);\n __privateSet(this, _defaultSet, new Set(defaultValue));\n }\n [Symbol.iterator]() {\n return __privateGet(this, _tokens, tokens_get).values();\n }\n get length() {\n return __privateGet(this, _tokens, tokens_get).size;\n }\n get value() {\n var _a;\n return (_a = [...__privateGet(this, _tokens, tokens_get)].join(\" \")) != null ? _a : \"\";\n }\n set value(val) {\n var _a;\n if (val === this.value)\n return;\n __privateSet(this, _tokenSet, /* @__PURE__ */ new Set());\n this.add(...(_a = val == null ? void 0 : val.split(\" \")) != null ? _a : []);\n }\n toString() {\n return this.value;\n }\n item(index) {\n return [...__privateGet(this, _tokens, tokens_get)][index];\n }\n values() {\n return __privateGet(this, _tokens, tokens_get).values();\n }\n forEach(callback, thisArg) {\n __privateGet(this, _tokens, tokens_get).forEach(callback, thisArg);\n }\n add(...tokens) {\n var _a, _b;\n tokens.forEach((t) => __privateGet(this, _tokenSet).add(t));\n if (this.value === \"\" && !((_a = __privateGet(this, _el)) == null ? void 0 : _a.hasAttribute(`${__privateGet(this, _attr)}`))) {\n return;\n }\n (_b = __privateGet(this, _el)) == null ? void 0 : _b.setAttribute(`${__privateGet(this, _attr)}`, `${this.value}`);\n }\n remove(...tokens) {\n var _a;\n tokens.forEach((t) => __privateGet(this, _tokenSet).delete(t));\n (_a = __privateGet(this, _el)) == null ? void 0 : _a.setAttribute(`${__privateGet(this, _attr)}`, `${this.value}`);\n }\n contains(token) {\n return __privateGet(this, _tokens, tokens_get).has(token);\n }\n toggle(token, force) {\n if (typeof force !== \"undefined\") {\n if (force) {\n this.add(token);\n return true;\n } else {\n this.remove(token);\n return false;\n }\n }\n if (this.contains(token)) {\n this.remove(token);\n return false;\n }\n this.add(token);\n return true;\n }\n replace(oldToken, newToken) {\n this.remove(oldToken);\n this.add(newToken);\n return oldToken === newToken;\n }\n}\n_el = new WeakMap();\n_attr = new WeakMap();\n_defaultSet = new WeakMap();\n_tokenSet = new WeakMap();\n_tokens = new WeakSet();\ntokens_get = function() {\n return __privateGet(this, _tokenSet).size ? __privateGet(this, _tokenSet) : __privateGet(this, _defaultSet);\n};\nexport {\n AttributeTokenList\n};\n","import { MediaUIAttributes, TextTrackKinds } from \"../constants.js\";\nconst splitTextTracksStr = (textTracksStr = \"\") => textTracksStr.split(/\\s+/);\nconst parseTextTrackStr = (textTrackStr = \"\") => {\n const [kind, language, encodedLabel] = textTrackStr.split(\":\");\n const label = encodedLabel ? decodeURIComponent(encodedLabel) : void 0;\n return {\n kind: kind === \"cc\" ? TextTrackKinds.CAPTIONS : TextTrackKinds.SUBTITLES,\n language,\n label\n };\n};\nconst parseTextTracksStr = (textTracksStr = \"\", textTrackLikeObj = {}) => {\n return splitTextTracksStr(textTracksStr).map((textTrackStr) => {\n const textTrackObj = parseTextTrackStr(textTrackStr);\n return {\n ...textTrackLikeObj,\n ...textTrackObj\n };\n });\n};\nconst parseTracks = (trackOrTracks) => {\n if (!trackOrTracks)\n return [];\n if (Array.isArray(trackOrTracks)) {\n return trackOrTracks.map((trackObjOrStr) => {\n if (typeof trackObjOrStr === \"string\") {\n return parseTextTrackStr(trackObjOrStr);\n }\n return trackObjOrStr;\n });\n }\n if (typeof trackOrTracks === \"string\") {\n return parseTextTracksStr(trackOrTracks);\n }\n return [trackOrTracks];\n};\nconst formatTextTrackObj = ({ kind, label, language } = { kind: \"subtitles\" }) => {\n if (!label)\n return language;\n return `${kind === \"captions\" ? \"cc\" : \"sb\"}:${language}:${encodeURIComponent(\n label\n )}`;\n};\nconst stringifyTextTrackList = (textTracks = []) => {\n return Array.prototype.map.call(textTracks, formatTextTrackObj).join(\" \");\n};\nconst isMatchingPropOf = (key, value) => (obj) => obj[key] === value;\nconst textTrackObjAsPred = (filterObj) => {\n const preds = Object.entries(filterObj).map(([key, value]) => {\n return isMatchingPropOf(key, value);\n });\n return (textTrack) => preds.every((pred) => pred(textTrack));\n};\nconst updateTracksModeTo = (mode, tracks = [], tracksToUpdate = []) => {\n const preds = parseTracks(tracksToUpdate).map(textTrackObjAsPred);\n const isTrackToUpdate = (textTrack) => {\n return preds.some((pred) => pred(textTrack));\n };\n Array.from(tracks).filter(isTrackToUpdate).forEach((textTrack) => {\n textTrack.mode = mode;\n });\n};\nconst getTextTracksList = (media, filterPredOrObj = () => true) => {\n if (!(media == null ? void 0 : media.textTracks))\n return [];\n const filterPred = typeof filterPredOrObj === \"function\" ? filterPredOrObj : textTrackObjAsPred(filterPredOrObj);\n return Array.from(media.textTracks).filter(filterPred);\n};\nconst areSubsOn = (el) => {\n var _a;\n const showingSubtitles = !!((_a = el.mediaSubtitlesShowing) == null ? void 0 : _a.length) || el.hasAttribute(MediaUIAttributes.MEDIA_SUBTITLES_SHOWING);\n return showingSubtitles;\n};\nexport {\n areSubsOn,\n formatTextTrackObj,\n getTextTracksList,\n isMatchingPropOf,\n parseTextTrackStr,\n parseTextTracksStr,\n parseTracks,\n splitTextTracksStr,\n stringifyTextTrackList,\n textTrackObjAsPred,\n updateTracksModeTo\n};\n","import { MediaStateReceiverAttributes } from \"../constants.js\";\nfunction namedNodeMapToObject(namedNodeMap) {\n const obj = {};\n for (const attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\nfunction getMediaController(host) {\n var _a;\n return (_a = getAttributeMediaController(host)) != null ? _a : closestComposedNode(host, \"media-controller\");\n}\nfunction getAttributeMediaController(host) {\n var _a;\n const { MEDIA_CONTROLLER } = MediaStateReceiverAttributes;\n const mediaControllerId = host.getAttribute(MEDIA_CONTROLLER);\n if (mediaControllerId) {\n return (_a = getDocumentOrShadowRoot(host)) == null ? void 0 : _a.getElementById(\n mediaControllerId\n );\n }\n}\nconst updateIconText = (svg, value, selector = \".value\") => {\n const node = svg.querySelector(selector);\n if (!node)\n return;\n node.textContent = value;\n};\nconst getAllSlotted = (el, name) => {\n const slotSelector = `slot[name=\"${name}\"]`;\n const slot = el.shadowRoot.querySelector(slotSelector);\n if (!slot)\n return [];\n return slot.children;\n};\nconst getSlotted = (el, name) => getAllSlotted(el, name)[0];\nconst containsComposedNode = (rootNode, childNode) => {\n if (!rootNode || !childNode)\n return false;\n if (rootNode == null ? void 0 : rootNode.contains(childNode))\n return true;\n return containsComposedNode(\n rootNode,\n childNode.getRootNode().host\n );\n};\nconst closestComposedNode = (childNode, selector) => {\n if (!childNode)\n return null;\n const closest = childNode.closest(selector);\n if (closest)\n return closest;\n return closestComposedNode(\n childNode.getRootNode().host,\n selector\n );\n};\nfunction getActiveElement(root = document) {\n var _a;\n const activeEl = root == null ? void 0 : root.activeElement;\n if (!activeEl)\n return null;\n return (_a = getActiveElement(activeEl.shadowRoot)) != null ? _a : activeEl;\n}\nfunction getDocumentOrShadowRoot(node) {\n var _a;\n const rootNode = (_a = node == null ? void 0 : node.getRootNode) == null ? void 0 : _a.call(node);\n if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {\n return rootNode;\n }\n return null;\n}\nfunction isElementVisible(element, { depth = 3, checkOpacity = true, checkVisibilityCSS = true } = {}) {\n if (element.checkVisibility) {\n return element.checkVisibility({\n checkOpacity,\n checkVisibilityCSS\n });\n }\n let el = element;\n while (el && depth > 0) {\n const style = getComputedStyle(el);\n if (checkOpacity && style.opacity === \"0\" || checkVisibilityCSS && style.visibility === \"hidden\" || style.display === \"none\") {\n return false;\n }\n el = el.parentElement;\n depth--;\n }\n return true;\n}\nfunction getPointProgressOnLine(x, y, p1, p2) {\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared === 0)\n return 0;\n const projection = ((x - p1.x) * dx + (y - p1.y) * dy) / lengthSquared;\n return Math.max(0, Math.min(1, projection));\n}\nfunction distance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\nfunction getOrInsertCSSRule(styleParent, selectorText) {\n const cssRule = getCSSRule(styleParent, (st) => st === selectorText);\n if (cssRule)\n return cssRule;\n return insertCSSRule(styleParent, selectorText);\n}\nfunction getCSSRule(styleParent, predicate) {\n var _a, _b;\n let style;\n for (style of (_a = styleParent.querySelectorAll(\"style:not([media])\")) != null ? _a : []) {\n let cssRules;\n try {\n cssRules = (_b = style.sheet) == null ? void 0 : _b.cssRules;\n } catch {\n continue;\n }\n for (const rule of cssRules != null ? cssRules : []) {\n if (predicate(rule.selectorText))\n return rule;\n }\n }\n}\nfunction insertCSSRule(styleParent, selectorText) {\n var _a, _b;\n const styles = (_a = styleParent.querySelectorAll(\"style:not([media])\")) != null ? _a : [];\n const style = styles == null ? void 0 : styles[styles.length - 1];\n if (!(style == null ? void 0 : style.sheet)) {\n console.warn(\n \"Media Chrome: No style sheet found on style tag of\",\n styleParent\n );\n return {\n // @ts-ignore\n style: {\n setProperty: () => {\n },\n removeProperty: () => \"\",\n getPropertyValue: () => \"\"\n }\n };\n }\n style == null ? void 0 : style.sheet.insertRule(`${selectorText}{}`, style.sheet.cssRules.length);\n return (\n /** @type {CSSStyleRule} */\n (_b = style.sheet.cssRules) == null ? void 0 : _b[style.sheet.cssRules.length - 1]\n );\n}\nfunction getNumericAttr(el, attrName, defaultValue = Number.NaN) {\n const attrVal = el.getAttribute(attrName);\n return attrVal != null ? +attrVal : defaultValue;\n}\nfunction setNumericAttr(el, attrName, value) {\n const nextNumericValue = +value;\n if (value == null || Number.isNaN(nextNumericValue)) {\n if (el.hasAttribute(attrName)) {\n el.removeAttribute(attrName);\n }\n return;\n }\n if (getNumericAttr(el, attrName, void 0) === nextNumericValue)\n return;\n el.setAttribute(attrName, `${nextNumericValue}`);\n}\nfunction getBooleanAttr(el, attrName) {\n return el.hasAttribute(attrName);\n}\nfunction setBooleanAttr(el, attrName, value) {\n if (value == null) {\n if (el.hasAttribute(attrName)) {\n el.removeAttribute(attrName);\n }\n return;\n }\n if (getBooleanAttr(el, attrName) == value)\n return;\n el.toggleAttribute(attrName, value);\n}\nfunction getStringAttr(el, attrName, defaultValue = null) {\n var _a;\n return (_a = el.getAttribute(attrName)) != null ? _a : defaultValue;\n}\nfunction setStringAttr(el, attrName, value) {\n if (value == null) {\n if (el.hasAttribute(attrName)) {\n el.removeAttribute(attrName);\n }\n return;\n }\n const nextValue = `${value}`;\n if (getStringAttr(el, attrName, void 0) === nextValue)\n return;\n el.setAttribute(attrName, nextValue);\n}\nexport {\n closestComposedNode,\n containsComposedNode,\n distance,\n getActiveElement,\n getAllSlotted,\n getAttributeMediaController,\n getBooleanAttr,\n getCSSRule,\n getDocumentOrShadowRoot,\n getMediaController,\n getNumericAttr,\n getOrInsertCSSRule,\n getPointProgressOnLine,\n getSlotted,\n getStringAttr,\n insertCSSRule,\n isElementVisible,\n namedNodeMapToObject,\n setBooleanAttr,\n setNumericAttr,\n setStringAttr,\n updateIconText\n};\n","class InvokeEvent extends Event {\n /**\n * @param init - The event options.\n */\n constructor({ action = \"auto\", relatedTarget, ...options }) {\n super(\"invoke\", options);\n this.action = action;\n this.relatedTarget = relatedTarget;\n }\n}\nclass ToggleEvent extends Event {\n /**\n * @param init - The event options.\n */\n constructor({ newState, oldState, ...options }) {\n super(\"toggle\", options);\n this.newState = newState;\n this.oldState = oldState;\n }\n}\nexport {\n InvokeEvent,\n ToggleEvent\n};\n","import { WebkitPresentationModes } from \"../constants.js\";\nimport { containsComposedNode } from \"./element-utils.js\";\nimport { document } from \"./server-safe-globals.js\";\nconst enterFullscreen = (stateOwners) => {\n var _a;\n const { media, fullscreenElement } = stateOwners;\n try {\n const enterFullscreenKey = fullscreenElement && \"requestFullscreen\" in fullscreenElement ? \"requestFullscreen\" : fullscreenElement && \"webkitRequestFullScreen\" in fullscreenElement ? \"webkitRequestFullScreen\" : void 0;\n if (enterFullscreenKey) {\n const maybePromise = (_a = fullscreenElement[enterFullscreenKey]) == null ? void 0 : _a.call(fullscreenElement);\n if (maybePromise instanceof Promise) {\n return maybePromise.catch(() => {\n });\n }\n } else if (media == null ? void 0 : media.webkitEnterFullscreen) {\n media.webkitEnterFullscreen();\n } else if (media == null ? void 0 : media.requestFullscreen) {\n media.requestFullscreen();\n }\n } catch (e) {\n console.error(e);\n }\n};\nconst exitFullscreenKey = \"exitFullscreen\" in document ? \"exitFullscreen\" : \"webkitExitFullscreen\" in document ? \"webkitExitFullscreen\" : \"webkitCancelFullScreen\" in document ? \"webkitCancelFullScreen\" : void 0;\nconst exitFullscreen = (stateOwners) => {\n var _a;\n const { documentElement } = stateOwners;\n if (exitFullscreenKey) {\n const maybePromise = (_a = documentElement == null ? void 0 : documentElement[exitFullscreenKey]) == null ? void 0 : _a.call(documentElement);\n if (maybePromise instanceof Promise) {\n return maybePromise.catch(() => {\n });\n }\n }\n};\nconst fullscreenElementKey = \"fullscreenElement\" in document ? \"fullscreenElement\" : \"webkitFullscreenElement\" in document ? \"webkitFullscreenElement\" : void 0;\nconst getFullscreenElement = (stateOwners) => {\n const { documentElement, media } = stateOwners;\n const docFullscreenElement = documentElement == null ? void 0 : documentElement[fullscreenElementKey];\n if (!docFullscreenElement && \"webkitDisplayingFullscreen\" in media && \"webkitPresentationMode\" in media && media.webkitDisplayingFullscreen && media.webkitPresentationMode === WebkitPresentationModes.FULLSCREEN) {\n return media;\n }\n return docFullscreenElement;\n};\nconst isFullscreen = (stateOwners) => {\n var _a;\n const { media, documentElement, fullscreenElement = media } = stateOwners;\n if (!media || !documentElement)\n return false;\n const currentFullscreenElement = getFullscreenElement(stateOwners);\n if (!currentFullscreenElement)\n return false;\n if (currentFullscreenElement === fullscreenElement || currentFullscreenElement === media) {\n return true;\n }\n if (currentFullscreenElement.localName.includes(\"-\")) {\n let currentRoot = currentFullscreenElement.shadowRoot;\n if (!(fullscreenElementKey in currentRoot)) {\n return containsComposedNode(\n currentFullscreenElement,\n /** @TODO clean up type assumptions (e.g. Node) (CJP) */\n // @ts-ignore\n fullscreenElement\n );\n }\n while (currentRoot == null ? void 0 : currentRoot[fullscreenElementKey]) {\n if (currentRoot[fullscreenElementKey] === fullscreenElement)\n return true;\n currentRoot = (_a = currentRoot[fullscreenElementKey]) == null ? void 0 : _a.shadowRoot;\n }\n }\n return false;\n};\nconst fullscreenEnabledKey = \"fullscreenEnabled\" in document ? \"fullscreenEnabled\" : \"webkitFullscreenEnabled\" in document ? \"webkitFullscreenEnabled\" : void 0;\nconst isFullscreenEnabled = (stateOwners) => {\n const { documentElement, media } = stateOwners;\n return !!(documentElement == null ? void 0 : documentElement[fullscreenEnabledKey]) || media && \"webkitSupportsFullscreen\" in media;\n};\nexport {\n enterFullscreen,\n exitFullscreen,\n getFullscreenElement,\n isFullscreen,\n isFullscreenEnabled\n};\n","var _a;\nimport { En } from \"../lang/en.js\";\nconst translations = {\n en: En\n};\nlet currentLang = ((_a = globalThis.navigator) == null ? void 0 : _a.language) || \"en\";\nconst setLanguage = (langCode) => {\n currentLang = langCode;\n};\nconst addTranslation = (lang, languageDictionary) => {\n translations[lang] = languageDictionary;\n};\nconst resolveTranslation = (key) => {\n var _a2, _b, _c;\n const [base] = currentLang.split(\"-\");\n return ((_a2 = translations[currentLang]) == null ? void 0 : _a2[key]) || ((_b = translations[base]) == null ? void 0 : _b[key]) || ((_c = translations.en) == null ? void 0 : _c[key]) || key;\n};\nconst t = (key, vars = {}) => resolveTranslation(key).replace(\n /\\{(\\w+)\\}/g,\n (_, v) => v in vars ? String(vars[v]) : `{${v}}`\n);\nexport {\n addTranslation,\n setLanguage,\n t\n};\n","import { globalThis, document } from \"./server-safe-globals.js\";\nimport { delay } from \"./utils.js\";\nimport { isFullscreenEnabled } from \"./fullscreen-api.js\";\nlet testMediaEl;\nconst getTestMediaEl = () => {\n var _a, _b;\n if (testMediaEl)\n return testMediaEl;\n testMediaEl = (_b = (_a = document) == null ? void 0 : _a.createElement) == null ? void 0 : _b.call(_a, \"video\");\n return testMediaEl;\n};\nconst hasVolumeSupportAsync = async (mediaEl = getTestMediaEl()) => {\n if (!mediaEl)\n return false;\n const prevVolume = mediaEl.volume;\n mediaEl.volume = prevVolume / 2 + 0.1;\n const abortController = new AbortController();\n const volumeSupported = await Promise.race([\n dispatchedVolumeChange(mediaEl, abortController.signal),\n volumeChanged(mediaEl, prevVolume)\n ]);\n abortController.abort();\n return volumeSupported;\n};\nconst dispatchedVolumeChange = (mediaEl, signal) => {\n return new Promise((resolve) => {\n mediaEl.addEventListener(\"volumechange\", () => resolve(true), { signal });\n });\n};\nconst volumeChanged = async (mediaEl, prevVolume) => {\n for (let i = 0; i < 10; i++) {\n if (mediaEl.volume === prevVolume)\n return false;\n await delay(10);\n }\n return mediaEl.volume !== prevVolume;\n};\nconst isSafari = /.*Version\\/.*Safari\\/.*/.test(\n globalThis.navigator.userAgent\n);\nconst hasPipSupport = (mediaEl = getTestMediaEl()) => {\n if (globalThis.matchMedia(\"(display-mode: standalone)\").matches && isSafari)\n return false;\n return typeof (mediaEl == null ? void 0 : mediaEl.requestPictureInPicture) === \"function\";\n};\nconst hasFullscreenSupport = (mediaEl = getTestMediaEl()) => {\n return isFullscreenEnabled({ documentElement: document, media: mediaEl });\n};\nconst fullscreenSupported = hasFullscreenSupport();\nconst pipSupported = hasPipSupport();\nconst airplaySupported = !!globalThis.WebKitPlaybackTargetAvailabilityEvent;\nconst castSupported = !!globalThis.chrome;\nexport {\n airplaySupported,\n castSupported,\n fullscreenSupported,\n getTestMediaEl,\n hasFullscreenSupport,\n hasPipSupport,\n hasVolumeSupportAsync,\n pipSupported\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __privateWrapper = (obj, member, setter, getter) => ({\n set _(value) {\n __privateSet(obj, member, value, setter);\n },\n get _() {\n return __privateGet(obj, member, getter);\n }\n});\nvar _range, _startTime, _previousTime, _deltaTime, _frameCount, _updateTimestamp, _updateStartValue, _lastRangeIncrease, _id, _animate;\nclass RangeAnimation {\n constructor(range, callback, fps) {\n __privateAdd(this, _range, void 0);\n __privateAdd(this, _startTime, void 0);\n __privateAdd(this, _previousTime, void 0);\n __privateAdd(this, _deltaTime, void 0);\n __privateAdd(this, _frameCount, void 0);\n __privateAdd(this, _updateTimestamp, void 0);\n __privateAdd(this, _updateStartValue, void 0);\n __privateAdd(this, _lastRangeIncrease, void 0);\n __privateAdd(this, _id, 0);\n __privateAdd(this, _animate, (now = performance.now()) => {\n __privateSet(this, _id, requestAnimationFrame(__privateGet(this, _animate)));\n __privateSet(this, _deltaTime, performance.now() - __privateGet(this, _previousTime));\n const fpsInterval = 1e3 / this.fps;\n if (__privateGet(this, _deltaTime) > fpsInterval) {\n __privateSet(this, _previousTime, now - __privateGet(this, _deltaTime) % fpsInterval);\n const fps = 1e3 / ((now - __privateGet(this, _startTime)) / ++__privateWrapper(this, _frameCount)._);\n const delta = (now - __privateGet(this, _updateTimestamp)) / 1e3 / this.duration;\n let value = __privateGet(this, _updateStartValue) + delta * this.playbackRate;\n const increase = value - __privateGet(this, _range).valueAsNumber;\n if (increase > 0) {\n __privateSet(this, _lastRangeIncrease, this.playbackRate / this.duration / fps);\n } else {\n __privateSet(this, _lastRangeIncrease, 0.995 * __privateGet(this, _lastRangeIncrease));\n value = __privateGet(this, _range).valueAsNumber + __privateGet(this, _lastRangeIncrease);\n }\n this.callback(value);\n }\n });\n __privateSet(this, _range, range);\n this.callback = callback;\n this.fps = fps;\n }\n start() {\n if (__privateGet(this, _id) !== 0)\n return;\n __privateSet(this, _previousTime, performance.now());\n __privateSet(this, _startTime, __privateGet(this, _previousTime));\n __privateSet(this, _frameCount, 0);\n __privateGet(this, _animate).call(this);\n }\n stop() {\n if (__privateGet(this, _id) === 0)\n return;\n cancelAnimationFrame(__privateGet(this, _id));\n __privateSet(this, _id, 0);\n }\n update({ start, duration, playbackRate }) {\n const increase = start - __privateGet(this, _range).valueAsNumber;\n const durationDelta = Math.abs(duration - this.duration);\n if (increase > 0 || increase < -0.03 || durationDelta >= 0.5) {\n this.callback(start);\n }\n __privateSet(this, _updateStartValue, start);\n __privateSet(this, _updateTimestamp, performance.now());\n this.duration = duration;\n this.playbackRate = playbackRate;\n }\n}\n_range = new WeakMap();\n_startTime = new WeakMap();\n_previousTime = new WeakMap();\n_deltaTime = new WeakMap();\n_frameCount = new WeakMap();\n_updateTimestamp = new WeakMap();\n_updateStartValue = new WeakMap();\n_lastRangeIncrease = new WeakMap();\n_id = new WeakMap();\n_animate = new WeakMap();\nexport {\n RangeAnimation\n};\n","import { globalThis } from \"./server-safe-globals.js\";\nconst callbacksMap = /* @__PURE__ */ new WeakMap();\nconst getCallbacks = (element) => {\n let callbacks = callbacksMap.get(element);\n if (!callbacks)\n callbacksMap.set(element, callbacks = /* @__PURE__ */ new Set());\n return callbacks;\n};\nconst observer = new globalThis.ResizeObserver(\n (entries) => {\n for (const entry of entries) {\n for (const callback of getCallbacks(entry.target)) {\n callback(entry);\n }\n }\n }\n);\nfunction observeResize(element, callback) {\n getCallbacks(element).add(callback);\n observer.observe(element);\n}\nfunction unobserveResize(element, callback) {\n const callbacks = getCallbacks(element);\n callbacks.delete(callback);\n if (!callbacks.size) {\n observer.unobserve(element);\n }\n}\nexport {\n observeResize,\n unobserveResize\n};\n","class EventTarget {\n addEventListener() {\n }\n removeEventListener() {\n }\n dispatchEvent() {\n return true;\n }\n}\nclass Node extends EventTarget {\n}\nclass Element extends Node {\n constructor() {\n super(...arguments);\n this.role = null;\n }\n}\nclass ResizeObserver {\n observe() {\n }\n unobserve() {\n }\n disconnect() {\n }\n}\nconst documentShim = {\n createElement: function() {\n return new globalThisShim.HTMLElement();\n },\n createElementNS: function() {\n return new globalThisShim.HTMLElement();\n },\n addEventListener() {\n },\n removeEventListener() {\n },\n dispatchEvent(_event) {\n return false;\n }\n};\nconst globalThisShim = {\n ResizeObserver,\n document: documentShim,\n Node,\n Element,\n HTMLElement: class HTMLElement extends Element {\n constructor() {\n super(...arguments);\n this.innerHTML = \"\";\n }\n get content() {\n return new globalThisShim.DocumentFragment();\n }\n },\n DocumentFragment: class DocumentFragment extends EventTarget {\n },\n customElements: {\n get: function() {\n },\n define: function() {\n },\n whenDefined: function() {\n }\n },\n localStorage: {\n getItem(_key) {\n return null;\n },\n setItem(_key, _value) {\n },\n removeItem(_key) {\n }\n },\n CustomEvent: function CustomEvent() {\n },\n getComputedStyle: function() {\n },\n navigator: {\n languages: [],\n get userAgent() {\n return \"\";\n }\n },\n matchMedia(media) {\n return {\n matches: false,\n media\n };\n },\n DOMParser: class DOMParser {\n parseFromString(string, _contentType) {\n return {\n body: {\n textContent: string\n }\n };\n }\n }\n};\nconst isServer = typeof window === \"undefined\" || typeof window.customElements === \"undefined\";\nconst isShimmed = Object.keys(globalThisShim).every((key) => key in globalThis);\nconst GlobalThis = isServer && !isShimmed ? globalThisShim : globalThis;\nconst Document = isServer && !isShimmed ? documentShim : globalThis.document;\nexport {\n Document,\n GlobalThis,\n Document as document,\n GlobalThis as globalThis,\n isServer\n};\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar _parts, _processor, _items, _value, _element, _attributeName, _namespaceURI, _list, list_get, _parentNode, _nodes;\nimport { globalThis } from \"../utils/server-safe-globals.js\";\nconst ELEMENT = 1;\nconst STRING = 0;\nconst PART = 1;\nconst defaultProcessor = {\n processCallback(instance, parts, state) {\n if (!state)\n return;\n for (const [expression, part] of parts) {\n if (expression in state) {\n const value = state[expression];\n if (typeof value === \"boolean\" && part instanceof AttrPart && typeof part.element[part.attributeName] === \"boolean\") {\n part.booleanValue = value;\n } else if (typeof value === \"function\" && part instanceof AttrPart) {\n part.element[part.attributeName] = value;\n } else {\n part.value = value;\n }\n }\n }\n }\n};\nclass TemplateInstance extends globalThis.DocumentFragment {\n constructor(template, state, processor = defaultProcessor) {\n var _a;\n super();\n __privateAdd(this, _parts, void 0);\n __privateAdd(this, _processor, void 0);\n this.append(template.content.cloneNode(true));\n __privateSet(this, _parts, parse(this));\n __privateSet(this, _processor, processor);\n (_a = processor.createCallback) == null ? void 0 : _a.call(processor, this, __privateGet(this, _parts), state);\n processor.processCallback(this, __privateGet(this, _parts), state);\n }\n update(state) {\n __privateGet(this, _processor).processCallback(this, __privateGet(this, _parts), state);\n }\n}\n_parts = new WeakMap();\n_processor = new WeakMap();\nconst parse = (element, parts = []) => {\n let type, value;\n for (const attr of element.attributes || []) {\n if (attr.value.includes(\"{{\")) {\n const list = new AttrPartList();\n for ([type, value] of tokenize(attr.value)) {\n if (!type)\n list.append(value);\n else {\n const part = new AttrPart(element, attr.name, attr.namespaceURI);\n list.append(part);\n parts.push([value, part]);\n }\n }\n attr.value = list.toString();\n }\n }\n for (const node of element.childNodes) {\n if (node.nodeType === ELEMENT && !(node instanceof HTMLTemplateElement)) {\n parse(node, parts);\n } else {\n const data = node.data;\n if (node.nodeType === ELEMENT || data.includes(\"{{\")) {\n const items = [];\n if (data) {\n for ([type, value] of tokenize(data))\n if (!type)\n items.push(new Text(value));\n else {\n const part = new ChildNodePart(element);\n items.push(part);\n parts.push([value, part]);\n }\n } else if (node instanceof HTMLTemplateElement) {\n const part = new InnerTemplatePart(element, node);\n items.push(part);\n parts.push([part.expression, part]);\n }\n node.replaceWith(\n ...items.flatMap((part) => part.replacementNodes || [part])\n );\n }\n }\n }\n return parts;\n};\nconst mem = {};\nconst tokenize = (text) => {\n let value = \"\", open = 0, tokens = mem[text], i = 0, c;\n if (tokens)\n return tokens;\n else\n tokens = [];\n for (; c = text[i]; i++) {\n if (c === \"{\" && text[i + 1] === \"{\" && text[i - 1] !== \"\\\\\" && text[i + 2] && ++open == 1) {\n if (value)\n tokens.push([STRING, value]);\n value = \"\";\n i++;\n } else if (c === \"}\" && text[i + 1] === \"}\" && text[i - 1] !== \"\\\\\" && !--open) {\n tokens.push([PART, value.trim()]);\n value = \"\";\n i++;\n } else\n value += c || \"\";\n }\n if (value)\n tokens.push([STRING, (open > 0 ? \"{{\" : \"\") + value]);\n return mem[text] = tokens;\n};\nconst FRAGMENT = 11;\nclass Part {\n get value() {\n return \"\";\n }\n set value(val) {\n }\n toString() {\n return this.value;\n }\n}\nconst attrPartToList = /* @__PURE__ */ new WeakMap();\nclass AttrPartList {\n constructor() {\n __privateAdd(this, _items, []);\n }\n [Symbol.iterator]() {\n return __privateGet(this, _items).values();\n }\n get length() {\n return __privateGet(this, _items).length;\n }\n item(index) {\n return __privateGet(this, _items)[index];\n }\n append(...items) {\n for (const item of items) {\n if (item instanceof AttrPart) {\n attrPartToList.set(item, this);\n }\n __privateGet(this, _items).push(item);\n }\n }\n toString() {\n return __privateGet(this, _items).join(\"\");\n }\n}\n_items = new WeakMap();\nclass AttrPart extends Part {\n constructor(element, attributeName, namespaceURI) {\n super();\n __privateAdd(this, _list);\n __privateAdd(this, _value, \"\");\n __privateAdd(this, _element, void 0);\n __privateAdd(this, _attributeName, void 0);\n __privateAdd(this, _namespaceURI, void 0);\n __privateSet(this, _element, element);\n __privateSet(this, _attributeName, attributeName);\n __privateSet(this, _namespaceURI, namespaceURI);\n }\n get attributeName() {\n return __privateGet(this, _attributeName);\n }\n get attributeNamespace() {\n return __privateGet(this, _namespaceURI);\n }\n get element() {\n return __privateGet(this, _element);\n }\n get value() {\n return __privateGet(this, _value);\n }\n set value(newValue) {\n if (__privateGet(this, _value) === newValue)\n return;\n __privateSet(this, _value, newValue);\n if (!__privateGet(this, _list, list_get) || __privateGet(this, _list, list_get).length === 1) {\n if (newValue == null) {\n __privateGet(this, _element).removeAttributeNS(\n __privateGet(this, _namespaceURI),\n __privateGet(this, _attributeName)\n );\n } else {\n __privateGet(this, _element).setAttributeNS(\n __privateGet(this, _namespaceURI),\n __privateGet(this, _attributeName),\n newValue\n );\n }\n } else {\n __privateGet(this, _element).setAttributeNS(\n __privateGet(this, _namespaceURI),\n __privateGet(this, _attributeName),\n __privateGet(this, _list, list_get).toString()\n );\n }\n }\n get booleanValue() {\n return __privateGet(this, _element).hasAttributeNS(\n __privateGet(this, _namespaceURI),\n __privateGet(this, _attributeName)\n );\n }\n set booleanValue(value) {\n if (!__privateGet(this, _list, list_get) || __privateGet(this, _list, list_get).length === 1)\n this.value = value ? \"\" : null;\n else\n throw new DOMException(\"Value is not fully templatized\");\n }\n}\n_value = new WeakMap();\n_element = new WeakMap();\n_attributeName = new WeakMap();\n_namespaceURI = new WeakMap();\n_list = new WeakSet();\nlist_get = function() {\n return attrPartToList.get(this);\n};\nclass ChildNodePart extends Part {\n constructor(parentNode, nodes) {\n super();\n __privateAdd(this, _parentNode, void 0);\n __privateAdd(this, _nodes, void 0);\n __privateSet(this, _parentNode, parentNode);\n __privateSet(this, _nodes, nodes ? [...nodes] : [new Text()]);\n }\n get replacementNodes() {\n return __privateGet(this, _nodes);\n }\n get parentNode() {\n return __privateGet(this, _parentNode);\n }\n get nextSibling() {\n return __privateGet(this, _nodes)[__privateGet(this, _nodes).length - 1].nextSibling;\n }\n get previousSibling() {\n return __privateGet(this, _nodes)[0].previousSibling;\n }\n // FIXME: not sure why do we need string serialization here? Just because parent class has type DOMString?\n get value() {\n return __privateGet(this, _nodes).map((node) => node.textContent).join(\"\");\n }\n set value(newValue) {\n this.replace(newValue);\n }\n replace(...nodes) {\n const normalisedNodes = nodes.flat().flatMap(\n (node) => node == null ? [new Text()] : node.forEach ? [...node] : node.nodeType === FRAGMENT ? [...node.childNodes] : node.nodeType ? [node] : [new Text(node)]\n );\n if (!normalisedNodes.length)\n normalisedNodes.push(new Text());\n __privateSet(this, _nodes, swapdom(\n __privateGet(this, _nodes)[0].parentNode,\n __privateGet(this, _nodes),\n normalisedNodes,\n this.nextSibling\n ));\n }\n}\n_parentNode = new WeakMap();\n_nodes = new WeakMap();\nclass InnerTemplatePart extends ChildNodePart {\n constructor(parentNode, template) {\n const directive = template.getAttribute(\"directive\") || template.getAttribute(\"type\");\n let expression = template.getAttribute(\"expression\") || template.getAttribute(directive) || \"\";\n if (expression.startsWith(\"{{\"))\n expression = expression.trim().slice(2, -2).trim();\n super(parentNode);\n this.expression = expression;\n this.template = template;\n this.directive = directive;\n }\n}\nfunction swapdom(parent, a, b, end = null) {\n let i = 0, cur, next, bi, n = b.length, m = a.length;\n while (i < n && i < m && a[i] == b[i])\n i++;\n while (i < n && i < m && b[n - 1] == a[m - 1])\n end = b[--m, --n];\n if (i == m)\n while (i < n)\n parent.insertBefore(b[i++], end);\n if (i == n)\n while (i < m)\n parent.removeChild(a[i++]);\n else {\n cur = a[i];\n while (i < n) {\n bi = b[i++], next = cur ? cur.nextSibling : end;\n if (cur == bi)\n cur = next;\n else if (i < n && b[i] == next)\n parent.replaceChild(bi, cur), cur = next;\n else\n parent.insertBefore(bi, cur);\n }\n while (cur != end)\n next = cur.nextSibling, parent.removeChild(cur), cur = next;\n }\n return b;\n}\nexport {\n AttrPart,\n AttrPartList,\n ChildNodePart,\n InnerTemplatePart,\n Part,\n TemplateInstance,\n defaultProcessor,\n parse,\n tokenize\n};\n","import {\n AttrPart,\n InnerTemplatePart,\n TemplateInstance\n} from \"./template-parts.js\";\nimport { isNumericString } from \"./utils.js\";\nconst pipeModifiers = {\n string: (value) => String(value)\n};\nclass PartialTemplate {\n constructor(template) {\n this.template = template;\n this.state = void 0;\n }\n}\nconst templates = /* @__PURE__ */ new WeakMap();\nconst templateInstances = /* @__PURE__ */ new WeakMap();\nconst Directives = {\n partial: (part, state) => {\n state[part.expression] = new PartialTemplate(part.template);\n },\n if: (part, state) => {\n var _a;\n if (evaluateExpression(part.expression, state)) {\n if (templates.get(part) !== part.template) {\n templates.set(part, part.template);\n const tpl = new TemplateInstance(part.template, state, processor);\n part.replace(tpl);\n templateInstances.set(part, tpl);\n } else {\n (_a = templateInstances.get(part)) == null ? void 0 : _a.update(state);\n }\n } else {\n part.replace(\"\");\n templates.delete(part);\n templateInstances.delete(part);\n }\n }\n};\nconst DirectiveNames = Object.keys(Directives);\nconst processor = {\n processCallback(instance, parts, state) {\n var _a, _b;\n if (!state)\n return;\n for (const [expression, part] of parts) {\n if (part instanceof InnerTemplatePart) {\n if (!part.directive) {\n const directive = DirectiveNames.find(\n (n) => part.template.hasAttribute(n)\n );\n if (directive) {\n part.directive = directive;\n part.expression = part.template.getAttribute(directive);\n }\n }\n (_a = Directives[part.directive]) == null ? void 0 : _a.call(Directives, part, state);\n continue;\n }\n let value = evaluateExpression(expression, state);\n if (value instanceof PartialTemplate) {\n if (templates.get(part) !== value.template) {\n templates.set(part, value.template);\n value = new TemplateInstance(value.template, value.state, processor);\n part.value = value;\n templateInstances.set(part, value);\n } else {\n (_b = templateInstances.get(part)) == null ? void 0 : _b.update(value.state);\n }\n continue;\n }\n if (value) {\n if (part instanceof AttrPart) {\n if (part.attributeName.startsWith(\"aria-\")) {\n value = String(value);\n }\n }\n if (part instanceof AttrPart) {\n if (typeof value === \"boolean\") {\n part.booleanValue = value;\n } else if (typeof value === \"function\") {\n part.element[part.attributeName] = value;\n } else {\n part.value = value;\n }\n } else {\n part.value = value;\n templates.delete(part);\n templateInstances.delete(part);\n }\n } else {\n if (part instanceof AttrPart) {\n part.value = void 0;\n } else {\n part.value = void 0;\n templates.delete(part);\n templateInstances.delete(part);\n }\n }\n }\n }\n};\nconst operators = {\n \"!\": (a) => !a,\n \"!!\": (a) => !!a,\n \"==\": (a, b) => a == b,\n \"!=\": (a, b) => a != b,\n \">\": (a, b) => a > b,\n \">=\": (a, b) => a >= b,\n \"<\": (a, b) => a < b,\n \"<=\": (a, b) => a <= b,\n \"??\": (a, b) => a != null ? a : b,\n \"|\": (a, b) => {\n var _a;\n return (_a = pipeModifiers[b]) == null ? void 0 : _a.call(pipeModifiers, a);\n }\n};\nfunction tokenizeExpression(expr) {\n return tokenize(expr, {\n boolean: /true|false/,\n number: /-?\\d+\\.?\\d*/,\n string: /([\"'])((?:\\\\.|[^\\\\])*?)\\1/,\n operator: /[!=><][=!]?|\\?\\?|\\|/,\n ws: /\\s+/,\n param: /[$a-z_][$\\w]*/i\n }).filter(({ type }) => type !== \"ws\");\n}\nfunction evaluateExpression(expr, state = {}) {\n var _a, _b, _c, _d, _e, _f, _g;\n const tokens = tokenizeExpression(expr);\n if (tokens.length === 0 || tokens.some(({ type }) => !type)) {\n return invalidExpression(expr);\n }\n if (((_a = tokens[0]) == null ? void 0 : _a.token) === \">\") {\n const partial = state[(_b = tokens[1]) == null ? void 0 : _b.token];\n if (!partial) {\n return invalidExpression(expr);\n }\n const partialState = { ...state };\n partial.state = partialState;\n const args = tokens.slice(2);\n for (let i = 0; i < args.length; i += 3) {\n const name = (_c = args[i]) == null ? void 0 : _c.token;\n const operator = (_d = args[i + 1]) == null ? void 0 : _d.token;\n const value = (_e = args[i + 2]) == null ? void 0 : _e.token;\n if (name && operator === \"=\") {\n partialState[name] = getParamValue(value, state);\n }\n }\n return partial;\n }\n if (tokens.length === 1) {\n if (!isValidParam(tokens[0])) {\n return invalidExpression(expr);\n }\n return getParamValue(tokens[0].token, state);\n }\n if (tokens.length === 2) {\n const operator = (_f = tokens[0]) == null ? void 0 : _f.token;\n const run = operators[operator];\n if (!run || !isValidParam(tokens[1])) {\n return invalidExpression(expr);\n }\n const a = getParamValue(tokens[1].token, state);\n return run(a);\n }\n if (tokens.length === 3) {\n const operator = (_g = tokens[1]) == null ? void 0 : _g.token;\n const run = operators[operator];\n if (!run || !isValidParam(tokens[0]) || !isValidParam(tokens[2])) {\n return invalidExpression(expr);\n }\n const a = getParamValue(tokens[0].token, state);\n if (operator === \"|\") {\n return run(a, tokens[2].token);\n }\n const b = getParamValue(tokens[2].token, state);\n return run(a, b);\n }\n}\nfunction invalidExpression(expr) {\n console.warn(`Warning: invalid expression \\`${expr}\\``);\n return false;\n}\nfunction isValidParam({ type }) {\n return [\"number\", \"boolean\", \"string\", \"param\"].includes(type);\n}\nfunction getParamValue(raw, state) {\n const firstChar = raw[0];\n const lastChar = raw.slice(-1);\n if (raw === \"true\" || raw === \"false\") {\n return raw === \"true\";\n }\n if (firstChar === lastChar && [`'`, `\"`].includes(firstChar)) {\n return raw.slice(1, -1);\n }\n if (isNumericString(raw)) {\n return parseFloat(raw);\n }\n return state[raw];\n}\nfunction tokenize(str, parsers) {\n let len, match, token;\n const tokens = [];\n while (str) {\n token = null;\n len = str.length;\n for (const key in parsers) {\n match = parsers[key].exec(str);\n if (match && match.index < len) {\n token = {\n token: match[0],\n type: key,\n matches: match.slice(1)\n };\n len = match.index;\n }\n }\n if (len) {\n tokens.push({\n token: str.substr(0, len),\n type: void 0\n });\n }\n if (token) {\n tokens.push(token);\n }\n str = str.substr(len + (token ? token.token.length : 0));\n }\n return tokens;\n}\nexport {\n evaluateExpression,\n getParamValue,\n processor,\n tokenizeExpression\n};\n","import { isValidNumber } from \"./utils.js\";\nconst UnitLabels = [\n {\n singular: \"hour\",\n plural: \"hours\"\n },\n {\n singular: \"minute\",\n plural: \"minutes\"\n },\n {\n singular: \"second\",\n plural: \"seconds\"\n }\n];\nconst toTimeUnitPhrase = (timeUnitValue, unitIndex) => {\n const unitLabel = timeUnitValue === 1 ? UnitLabels[unitIndex].singular : UnitLabels[unitIndex].plural;\n return `${timeUnitValue} ${unitLabel}`;\n};\nconst formatAsTimePhrase = (seconds) => {\n if (!isValidNumber(seconds))\n return \"\";\n const positiveSeconds = Math.abs(seconds);\n const negative = positiveSeconds !== seconds;\n const secondsDateTime = new Date(0, 0, 0, 0, 0, positiveSeconds, 0);\n const timeParts = [\n secondsDateTime.getHours(),\n secondsDateTime.getMinutes(),\n secondsDateTime.getSeconds()\n ];\n const timeString = timeParts.map(\n (timeUnitValue, index) => timeUnitValue && toTimeUnitPhrase(timeUnitValue, index)\n ).filter((x) => x).join(\", \");\n const negativeSuffix = negative ? \" remaining\" : \"\";\n return `${timeString}${negativeSuffix}`;\n};\nfunction formatTime(seconds, guide) {\n let negative = false;\n if (seconds < 0) {\n negative = true;\n seconds = 0 - seconds;\n }\n seconds = seconds < 0 ? 0 : seconds;\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n if (isNaN(seconds) || seconds === Infinity) {\n h = m = s = \"0\";\n }\n h = h > 0 || gh > 0 ? h + \":\" : \"\";\n m = ((h || gm >= 10) && m < 10 ? \"0\" + m : m) + \":\";\n s = s < 10 ? \"0\" + s : s;\n return (negative ? \"-\" : \"\") + h + m + s;\n}\nconst emptyTimeRanges = Object.freeze({\n length: 0,\n start(index) {\n const unsignedIdx = index >>> 0;\n if (unsignedIdx >= this.length) {\n throw new DOMException(\n `Failed to execute 'start' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n );\n }\n return 0;\n },\n end(index) {\n const unsignedIdx = index >>> 0;\n if (unsignedIdx >= this.length) {\n throw new DOMException(\n `Failed to execute 'end' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n );\n }\n return 0;\n }\n});\nfunction serializeTimeRanges(timeRanges = emptyTimeRanges) {\n return Array.from(timeRanges).map(\n (_, i) => [\n Number(timeRanges.start(i).toFixed(3)),\n Number(timeRanges.end(i).toFixed(3))\n ].join(\":\")\n ).join(\" \");\n}\nexport {\n emptyTimeRanges,\n formatAsTimePhrase,\n formatTime,\n serializeTimeRanges\n};\n","function stringifyRenditionList(renditions) {\n return renditions == null ? void 0 : renditions.map(stringifyRendition).join(\" \");\n}\nfunction parseRenditionList(renditions) {\n return renditions == null ? void 0 : renditions.split(/\\s+/).map(parseRendition);\n}\nfunction stringifyRendition(rendition) {\n if (rendition) {\n const { id, width, height } = rendition;\n return [id, width, height].filter((a) => a != null).join(\":\");\n }\n}\nfunction parseRendition(rendition) {\n if (rendition) {\n const [id, width, height] = rendition.split(\":\");\n return { id, width: +width, height: +height };\n }\n}\nfunction stringifyAudioTrackList(audioTracks) {\n return audioTracks == null ? void 0 : audioTracks.map(stringifyAudioTrack).join(\" \");\n}\nfunction parseAudioTrackList(audioTracks) {\n return audioTracks == null ? void 0 : audioTracks.split(/\\s+/).map(parseAudioTrack);\n}\nfunction stringifyAudioTrack(audioTrack) {\n if (audioTrack) {\n const { id, kind, language, label } = audioTrack;\n return [id, kind, language, label].filter((a) => a != null).join(\":\");\n }\n}\nfunction parseAudioTrack(audioTrack) {\n if (audioTrack) {\n const [id, kind, language, label] = audioTrack.split(\":\");\n return {\n id,\n kind,\n language,\n label\n };\n }\n}\nfunction dashedToCamel(word) {\n return word.split(\"-\").map(function(x, i) {\n return (i ? x[0].toUpperCase() : x[0].toLowerCase()) + x.slice(1).toLowerCase();\n }).join(\"\");\n}\nfunction constToCamel(word, upperFirst = false) {\n return word.split(\"_\").map(function(x, i) {\n return (i || upperFirst ? x[0].toUpperCase() : x[0].toLowerCase()) + x.slice(1).toLowerCase();\n }).join(\"\");\n}\nfunction camelCase(name) {\n return name.replace(/[-_]([a-z])/g, ($0, $1) => $1.toUpperCase());\n}\nfunction isValidNumber(x) {\n return typeof x === \"number\" && !Number.isNaN(x) && Number.isFinite(x);\n}\nfunction isNumericString(str) {\n if (typeof str != \"string\")\n return false;\n return !isNaN(str) && !isNaN(parseFloat(str));\n}\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst capitalize = (str) => str && str[0].toUpperCase() + str.slice(1);\nexport {\n camelCase,\n capitalize,\n constToCamel,\n dashedToCamel,\n delay,\n isNumericString,\n isValidNumber,\n parseAudioTrack,\n parseAudioTrackList,\n parseRendition,\n parseRenditionList,\n stringifyAudioTrack,\n stringifyAudioTrackList,\n stringifyRendition,\n stringifyRenditionList\n};\n","var Yr=Object.create;var ft=Object.defineProperty;var Xr=Object.getOwnPropertyDescriptor;var $r=Object.getOwnPropertyNames;var Zr=Object.getPrototypeOf,ea=Object.prototype.hasOwnProperty;var pt=function(r,e){return function(){return r&&(e=r(r=0)),e}};var B=function(r,e){return function(){return e||r((e={exports:{}}).exports,e),e.exports}};var ta=function(r,e,t,i){if(e&&typeof e==\"object\"||typeof e==\"function\")for(var a=$r(e),n=0,o=a.length,s;n<o;n++)s=a[n],!ea.call(r,s)&&s!==t&&ft(r,s,{get:function(u){return e[u]}.bind(null,s),enumerable:!(i=Xr(e,s))||i.enumerable});return r};var V=function(r,e,t){return t=r!=null?Yr(Zr(r)):{},ta(e||!r||!r.__esModule?ft(t,\"default\",{value:r,enumerable:!0}):t,r)};var J=B(function(ji,yt){var xe;typeof window!=\"undefined\"?xe=window:typeof global!=\"undefined\"?xe=global:typeof self!=\"undefined\"?xe=self:xe={};yt.exports=xe});function U(r,e){return e!=null&&typeof Symbol!=\"undefined\"&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](r):U(r,e)}var te=pt(function(){te()});function Ne(r){\"@swc/helpers - typeof\";return r&&typeof Symbol!=\"undefined\"&&r.constructor===Symbol?\"symbol\":typeof r}var Je=pt(function(){});var Ye=B(function(Ts,cr){var lr=Array.prototype.slice;cr.exports=Pa;function Pa(r,e){for((\"length\"in r)||(r=[r]),r=lr.call(r);r.length;){var t=r.shift(),i=e(t);if(i)return i;t.childNodes&&t.childNodes.length&&(r=lr.call(t.childNodes).concat(r))}}});var fr=B(function(Es,_r){te();_r.exports=me;function me(r,e){if(!U(this,me))return new me(r,e);this.data=r,this.nodeValue=r,this.length=r.length,this.ownerDocument=e||null}me.prototype.nodeType=8;me.prototype.nodeName=\"#comment\";me.prototype.toString=function(){return\"[object Comment]\"}});var vr=B(function(xs,pr){te();pr.exports=ae;function ae(r,e){if(!U(this,ae))return new ae(r);this.data=r||\"\",this.length=this.data.length,this.ownerDocument=e||null}ae.prototype.type=\"DOMTextNode\";ae.prototype.nodeType=3;ae.prototype.nodeName=\"#text\";ae.prototype.toString=function(){return this.data};ae.prototype.replaceData=function(e,t,i){var a=this.data,n=a.substring(0,e),o=a.substring(e+t,a.length);this.data=n+i+o,this.length=this.data.length}});var Xe=B(function(Ds,mr){mr.exports=Ia;function Ia(r){var e=this,t=r.type;r.target||(r.target=e),e.listeners||(e.listeners={});var i=e.listeners[t];if(i)return i.forEach(function(a){r.currentTarget=e,typeof a==\"function\"?a(r):a.handleEvent(r)});e.parentNode&&e.parentNode.dispatchEvent(r)}});var $e=B(function(Ss,hr){hr.exports=Na;function Na(r,e){var t=this;t.listeners||(t.listeners={}),t.listeners[r]||(t.listeners[r]=[]),t.listeners[r].indexOf(e)===-1&&t.listeners[r].push(e)}});var Ze=B(function(Rs,yr){yr.exports=La;function La(r,e){var t=this;if(t.listeners&&t.listeners[r]){var i=t.listeners[r],a=i.indexOf(e);a!==-1&&i.splice(a,1)}}});var wr=B(function(As,Tr){Je();Tr.exports=gr;var Ca=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"];function gr(r){switch(r.nodeType){case 3:return et(r.data);case 8:return\"<!--\"+r.data+\"-->\";default:return Ma(r)}}function Ma(r){var e=[],t=r.tagName;return r.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&(t=t.toLowerCase()),e.push(\"<\"+t+Fa(r)+Ua(r)),Ca.indexOf(t)>-1?e.push(\" />\"):(e.push(\">\"),r.childNodes.length?e.push.apply(e,r.childNodes.map(gr)):r.textContent||r.innerText?e.push(et(r.textContent||r.innerText)):r.innerHTML&&e.push(r.innerHTML),e.push(\"</\"+t+\">\")),e.join(\"\")}function Ha(r,e){var t=Ne(r[e]);return e===\"style\"&&Object.keys(r.style).length>0?!0:r.hasOwnProperty(e)&&(t===\"string\"||t===\"boolean\"||t===\"number\")&&e!==\"nodeName\"&&e!==\"className\"&&e!==\"tagName\"&&e!==\"textContent\"&&e!==\"innerText\"&&e!==\"namespaceURI\"&&e!==\"innerHTML\"}function Ba(r){if(typeof r==\"string\")return r;var e=\"\";return Object.keys(r).forEach(function(t){var i=r[t];t=t.replace(/[A-Z]/g,function(a){return\"-\"+a.toLowerCase()}),e+=t+\":\"+i+\";\"}),e}function Ua(r){var e=r.dataset,t=[];for(var i in e)t.push({name:\"data-\"+i,value:e[i]});return t.length?br(t):\"\"}function br(r){var e=[];return r.forEach(function(t){var i=t.name,a=t.value;i===\"style\"&&(a=Ba(a)),e.push(i+'=\"'+Va(a)+'\"')}),e.length?\" \"+e.join(\" \"):\"\"}function Fa(r){var e=[];for(var t in r)Ha(r,t)&&e.push({name:t,value:r[t]});for(var i in r._attributes)for(var a in r._attributes[i]){var n=r._attributes[i][a],o=(n.prefix?n.prefix+\":\":\"\")+a;e.push({name:o,value:n.value})}return r.className&&e.push({name:\"class\",value:r.className}),e.length?br(e):\"\"}function et(r){var e=\"\";return typeof r==\"string\"?e=r:r&&(e=r.toString()),e.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\")}function Va(r){return et(r).replace(/\"/g,\""\")}});var rt=B(function(Ps,kr){te();var tt=Ye(),Wa=Xe(),ja=$e(),Ga=Ze(),Ja=wr(),Er=\"http://www.w3.org/1999/xhtml\";kr.exports=I;function I(r,e,t){if(!U(this,I))return new I(r);var i=t===void 0?Er:t||null;this.tagName=i===Er?String(r).toUpperCase():r,this.nodeName=this.tagName,this.className=\"\",this.dataset={},this.childNodes=[],this.parentNode=null,this.style={},this.ownerDocument=e||null,this.namespaceURI=i,this._attributes={},this.tagName===\"INPUT\"&&(this.type=\"text\")}I.prototype.type=\"DOMElement\";I.prototype.nodeType=1;I.prototype.appendChild=function(e){return e.parentNode&&e.parentNode.removeChild(e),this.childNodes.push(e),e.parentNode=this,e};I.prototype.replaceChild=function(e,t){e.parentNode&&e.parentNode.removeChild(e);var i=this.childNodes.indexOf(t);return t.parentNode=null,this.childNodes[i]=e,e.parentNode=this,t};I.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);return this.childNodes.splice(t,1),e.parentNode=null,e};I.prototype.insertBefore=function(e,t){e.parentNode&&e.parentNode.removeChild(e);var i=t==null?-1:this.childNodes.indexOf(t);return i>-1?this.childNodes.splice(i,0,e):this.childNodes.push(e),e.parentNode=this,e};I.prototype.setAttributeNS=function(e,t,i){var a=null,n=t,o=t.indexOf(\":\");if(o>-1&&(a=t.substr(0,o),n=t.substr(o+1)),this.tagName===\"INPUT\"&&t===\"type\")this.type=i;else{var s=this._attributes[e]||(this._attributes[e]={});s[n]={value:i,prefix:a}}};I.prototype.getAttributeNS=function(e,t){var i=this._attributes[e],a=i&&i[t]&&i[t].value;return this.tagName===\"INPUT\"&&t===\"type\"?this.type:typeof a!=\"string\"?null:a};I.prototype.removeAttributeNS=function(e,t){var i=this._attributes[e];i&&delete i[t]};I.prototype.hasAttributeNS=function(e,t){var i=this._attributes[e];return!!i&&t in i};I.prototype.setAttribute=function(e,t){return this.setAttributeNS(null,e,t)};I.prototype.getAttribute=function(e){return this.getAttributeNS(null,e)};I.prototype.removeAttribute=function(e){return this.removeAttributeNS(null,e)};I.prototype.hasAttribute=function(e){return this.hasAttributeNS(null,e)};I.prototype.removeEventListener=Ga;I.prototype.addEventListener=ja;I.prototype.dispatchEvent=Wa;I.prototype.focus=function(){};I.prototype.toString=function(){return Ja(this)};I.prototype.getElementsByClassName=function(e){var t=e.split(\" \"),i=[];return tt(this,function(a){if(a.nodeType===1){var n=a.className||\"\",o=n.split(\" \");t.every(function(s){return o.indexOf(s)!==-1})&&i.push(a)}}),i};I.prototype.getElementsByTagName=function(e){e=e.toLowerCase();var t=[];return tt(this.childNodes,function(i){i.nodeType===1&&(e===\"*\"||i.tagName.toLowerCase()===e)&&t.push(i)}),t};I.prototype.contains=function(e){return tt(this,function(t){return e===t})||!1}});var Dr=B(function(Ns,xr){te();var at=rt();xr.exports=K;function K(r){if(!U(this,K))return new K;this.childNodes=[],this.parentNode=null,this.ownerDocument=r||null}K.prototype.type=\"DocumentFragment\";K.prototype.nodeType=11;K.prototype.nodeName=\"#document-fragment\";K.prototype.appendChild=at.prototype.appendChild;K.prototype.replaceChild=at.prototype.replaceChild;K.prototype.removeChild=at.prototype.removeChild;K.prototype.toString=function(){return this.childNodes.map(function(e){return String(e)}).join(\"\")}});var Rr=B(function(Ls,Sr){Sr.exports=it;function it(r){}it.prototype.initEvent=function(e,t,i){this.type=e,this.bubbles=t,this.cancelable=i};it.prototype.preventDefault=function(){}});var Ar=B(function(Ms,qr){te();var Qa=Ye(),za=fr(),Ka=vr(),Re=rt(),Ya=Dr(),Xa=Rr(),$a=Xe(),Za=$e(),ei=Ze();qr.exports=Be;function Be(){if(!U(this,Be))return new Be;this.head=this.createElement(\"head\"),this.body=this.createElement(\"body\"),this.documentElement=this.createElement(\"html\"),this.documentElement.appendChild(this.head),this.documentElement.appendChild(this.body),this.childNodes=[this.documentElement],this.nodeType=9}var j=Be.prototype;j.createTextNode=function(e){return new Ka(e,this)};j.createElementNS=function(e,t){var i=e===null?null:String(e);return new Re(t,this,i)};j.createElement=function(e){return new Re(e,this)};j.createDocumentFragment=function(){return new Ya(this)};j.createEvent=function(e){return new Xa(e)};j.createComment=function(e){return new za(e,this)};j.getElementById=function(e){e=String(e);var t=Qa(this.childNodes,function(i){if(String(i.id)===e)return i});return t||null};j.getElementsByClassName=Re.prototype.getElementsByClassName;j.getElementsByTagName=Re.prototype.getElementsByTagName;j.contains=Re.prototype.contains;j.removeEventListener=ei;j.addEventListener=Za;j.dispatchEvent=$a});var Pr=B(function(Hs,Or){var ti=Ar();Or.exports=new ti});var nt=B(function(Bs,Nr){var Ir=typeof global!=\"undefined\"?global:typeof window!=\"undefined\"?window:{},ri=Pr(),qe;typeof document!=\"undefined\"?qe=document:(qe=Ir[\"__GLOBAL_DOCUMENT_CACHE@4\"],qe||(qe=Ir[\"__GLOBAL_DOCUMENT_CACHE@4\"]=ri));Nr.exports=qe});function vt(r){if(Array.isArray(r))return r}function mt(r,e){var t=r==null?null:typeof Symbol!=\"undefined\"&&r[Symbol.iterator]||r[\"@@iterator\"];if(t!=null){var i=[],a=!0,n=!1,o,s;try{for(t=t.call(r);!(a=(o=t.next()).done)&&(i.push(o.value),!(e&&i.length===e));a=!0);}catch(u){n=!0,s=u}finally{try{!a&&t.return!=null&&t.return()}finally{if(n)throw s}}return i}}function ht(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function ke(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function Ae(r,e){if(r){if(typeof r==\"string\")return ke(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(t);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ke(r,e)}}function H(r,e){return vt(r)||mt(r,e)||Ae(r,e)||ht()}var be=V(J());var Ge=V(J());var gt=V(J()),ra={now:function(){var r=gt.default.performance,e=r&&r.timing,t=e&&e.navigationStart,i=typeof t==\"number\"&&typeof r.now==\"function\"?t+r.now():Date.now();return Math.round(i)}},A=ra;var ee=function(){var e,t,i;if(typeof((e=Ge.default.crypto)===null||e===void 0?void 0:e.getRandomValues)==\"function\"){i=new Uint8Array(32),Ge.default.crypto.getRandomValues(i);for(var a=0;a<32;a++)i[a]=i[a]%16}else{i=[];for(var n=0;n<32;n++)i[n]=Math.random()*16|0}var o=0;t=\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(p){var b=p===\"x\"?i[o]:i[o]&3|8;return o++,b.toString(16)});var s=A.now(),u=s==null?void 0:s.toString(16).substring(3);return u?t.substring(0,28)+u:t},Oe=function(){return(\"000000\"+(Math.random()*Math.pow(36,6)<<0).toString(36)).slice(-6)};var Q=function(e){if(e&&typeof e.nodeName!=\"undefined\")return e.muxId||(e.muxId=Oe()),e.muxId;var t;try{t=document.querySelector(e)}catch(i){}return t&&!t.muxId&&(t.muxId=e),(t==null?void 0:t.muxId)||e},se=function(e){var t;e&&typeof e.nodeName!=\"undefined\"?(t=e,e=Q(t)):t=document.querySelector(e);var i=t&&t.nodeName?t.nodeName.toLowerCase():\"\";return[t,e,i]};function bt(r){if(Array.isArray(r))return ke(r)}function Tt(r){if(typeof Symbol!=\"undefined\"&&r[Symbol.iterator]!=null||r[\"@@iterator\"]!=null)return Array.from(r)}function wt(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function W(r){return bt(r)||Tt(r)||Ae(r)||wt()}var Y={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},Et=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3,t,i,a,n,o,s=r?[console,r]:[console],u=(t=console.trace).bind.apply(t,W(s)),p=(i=console.info).bind.apply(i,W(s)),b=(a=console.debug).bind.apply(a,W(s)),k=(n=console.warn).bind.apply(n,W(s)),y=(o=console.error).bind.apply(o,W(s)),c=e;return{trace:function(){for(var T=arguments.length,x=new Array(T),m=0;m<T;m++)x[m]=arguments[m];if(!(c>Y.TRACE))return u.apply(void 0,W(x))},debug:function(){for(var T=arguments.length,x=new Array(T),m=0;m<T;m++)x[m]=arguments[m];if(!(c>Y.DEBUG))return b.apply(void 0,W(x))},info:function(){for(var T=arguments.length,x=new Array(T),m=0;m<T;m++)x[m]=arguments[m];if(!(c>Y.INFO))return p.apply(void 0,W(x))},warn:function(){for(var T=arguments.length,x=new Array(T),m=0;m<T;m++)x[m]=arguments[m];if(!(c>Y.WARN))return k.apply(void 0,W(x))},error:function(){for(var T=arguments.length,x=new Array(T),m=0;m<T;m++)x[m]=arguments[m];if(!(c>Y.ERROR))return y.apply(void 0,W(x))},get level(){return c},set level(v){v!==this.level&&(c=v!=null?v:e)}}};var q=Et(\"[mux]\");var Pe=V(J());function ce(){var r=Pe.default.doNotTrack||Pe.default.navigator&&Pe.default.navigator.doNotTrack;return r===\"1\"}function g(r){if(r===void 0)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return r}te();function D(r,e){if(!U(r,e))throw new TypeError(\"Cannot call a class as a function\")}function kt(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function L(r,e,t){return e&&kt(r.prototype,e),t&&kt(r,t),r}function l(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function X(r){return X=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},X(r)}function xt(r,e){for(;!Object.prototype.hasOwnProperty.call(r,e)&&(r=X(r),r!==null););return r}function De(r,e,t){return typeof Reflect!=\"undefined\"&&Reflect.get?De=Reflect.get:De=function(a,n,o){var s=xt(a,n);if(s){var u=Object.getOwnPropertyDescriptor(s,n);return u.get?u.get.call(o||a):u.value}},De(r,e,t||r)}function Ie(r,e){return Ie=Object.setPrototypeOf||function(i,a){return i.__proto__=a,i},Ie(r,e)}function Dt(r,e){if(typeof e!=\"function\"&&e!==null)throw new TypeError(\"Super expression must either be null or a function\");r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&Ie(r,e)}function St(){if(typeof Reflect==\"undefined\"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==\"function\")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(r){return!1}}Je();function Rt(r,e){return e&&(Ne(e)===\"object\"||typeof e==\"function\")?e:g(r)}function qt(r){var e=St();return function(){var i=X(r),a;if(e){var n=X(this).constructor;a=Reflect.construct(i,arguments,n)}else a=i.apply(this,arguments);return Rt(this,a)}}var F=function(r){return re(r)[0]};var re=function(r){if(typeof r!=\"string\"||r===\"\")return[\"localhost\"];var e=/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,t=r.match(e)||[],i=t[4],a;return i&&(a=(i.match(/[^\\.]+\\.[^\\.]+$/)||[])[0]),[i,a]};var Le=V(J()),aa={exists:function(){var r=Le.default.performance,e=r&&r.timing;return e!==void 0},domContentLoadedEventEnd:function(){var r=Le.default.performance,e=r&&r.timing;return e&&e.domContentLoadedEventEnd},navigationStart:function(){var r=Le.default.performance,e=r&&r.timing;return e&&e.navigationStart}},_e=aa;function O(r,e,t){t=t===void 0?1:t,r[e]=r[e]||0,r[e]+=t}function ue(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{},i=Object.keys(t);typeof Object.getOwnPropertySymbols==\"function\"&&(i=i.concat(Object.getOwnPropertySymbols(t).filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),i.forEach(function(a){l(r,a,t[a])})}return r}function ia(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(r,a).enumerable})),t.push.apply(t,i)}return t}function fe(r,e){return e=e!=null?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):ia(Object(e)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(e,t))}),r}var na=[\"x-cdn\",\"content-type\"],At=[\"x-request-id\",\"cf-ray\",\"x-amz-cf-id\",\"x-akamai-request-id\"],oa=na.concat(At);function pe(r){r=r||\"\";var e={},t=r.trim().split(/[\\r\\n]+/);return t.forEach(function(i){if(i){var a=i.split(\": \"),n=a.shift();n&&(oa.indexOf(n.toLowerCase())>=0||n.toLowerCase().indexOf(\"x-litix-\")===0)&&(e[n]=a.join(\": \"))}}),e}function de(r){if(r){var e=At.find(function(t){return r[t]!==void 0});return e?r[e]:void 0}}var sa=function(r){var e={};for(var t in r){var i=r[t],a=i[\"DATA-ID\"].search(\"io.litix.data.\");if(a!==-1){var n=i[\"DATA-ID\"].replace(\"io.litix.data.\",\"\");e[n]=i.VALUE}}return e},Ce=sa;var Me=function(r){if(!r)return{};var e=_e.navigationStart(),t=r.loading,i=t?t.start:r.trequest,a=t?t.first:r.tfirst,n=t?t.end:r.tload;return{bytesLoaded:r.total,requestStart:Math.round(e+i),responseStart:Math.round(e+a),responseEnd:Math.round(e+n)}},Se=function(r){if(!(!r||typeof r.getAllResponseHeaders!=\"function\"))return pe(r.getAllResponseHeaders())},Ot=function(r,e,t){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0,n=r.log,o=r.utils.secondsToMs,s=function(m){var f=parseInt(a.version),_;return f===1&&m.programDateTime!==null&&(_=m.programDateTime),f===0&&m.pdt!==null&&(_=m.pdt),_};if(!_e.exists()){n.warn(\"performance timing not supported. Not tracking HLS.js.\");return}var u=function(m,f){return r.emit(e,m,f)},p=function(m,f){var _=f.levels,d=f.audioTracks,h=f.url,w=f.stats,E=f.networkDetails,S=f.sessionData,N={},M={};_.forEach(function(G,oe){N[oe]={width:G.width,height:G.height,bitrate:G.bitrate,attrs:G.attrs}}),d.forEach(function(G,oe){M[oe]={name:G.name,language:G.lang,bitrate:G.bitrate}});var P=Me(w),R=P.bytesLoaded,Z=P.requestStart,Te=P.responseStart,we=P.responseEnd;u(\"requestcompleted\",fe(ue({},Ce(S)),{request_event_type:m,request_bytes_loaded:R,request_start:Z,request_response_start:Te,request_response_end:we,request_type:\"manifest\",request_hostname:F(h),request_response_headers:Se(E),request_rendition_lists:{media:N,audio:M,video:{}}}))};t.on(a.Events.MANIFEST_LOADED,p);var b=function(m,f){var _=f.details,d=f.level,h=f.networkDetails,w=f.stats,E=Me(w),S=E.bytesLoaded,N=E.requestStart,M=E.responseStart,P=E.responseEnd,R=_.fragments[_.fragments.length-1],Z=s(R)+o(R.duration);u(\"requestcompleted\",{request_event_type:m,request_bytes_loaded:S,request_start:N,request_response_start:M,request_response_end:P,request_current_level:d,request_type:\"manifest\",request_hostname:F(_.url),request_response_headers:Se(h),video_holdback:_.holdBack&&o(_.holdBack),video_part_holdback:_.partHoldBack&&o(_.partHoldBack),video_part_target_duration:_.partTarget&&o(_.partTarget),video_target_duration:_.targetduration&&o(_.targetduration),video_source_is_live:_.live,player_manifest_newest_program_time:isNaN(Z)?void 0:Z})};t.on(a.Events.LEVEL_LOADED,b);var k=function(m,f){var _=f.details,d=f.networkDetails,h=f.stats,w=Me(h),E=w.bytesLoaded,S=w.requestStart,N=w.responseStart,M=w.responseEnd;u(\"requestcompleted\",{request_event_type:m,request_bytes_loaded:E,request_start:S,request_response_start:N,request_response_end:M,request_type:\"manifest\",request_hostname:F(_.url),request_response_headers:Se(d)})};t.on(a.Events.AUDIO_TRACK_LOADED,k);var y=function(m,f){var _=f.stats,d=f.networkDetails,h=f.frag;_=_||h.stats;var w=Me(_),E=w.bytesLoaded,S=w.requestStart,N=w.responseStart,M=w.responseEnd,P=d?Se(d):void 0,R={request_event_type:m,request_bytes_loaded:E,request_start:S,request_response_start:N,request_response_end:M,request_hostname:d?F(d.responseURL):void 0,request_id:P?de(P):void 0,request_response_headers:P,request_media_duration:h.duration,request_url:d==null?void 0:d.responseURL};h.type===\"main\"?(R.request_type=\"media\",R.request_current_level=h.level,R.request_video_width=(t.levels[h.level]||{}).width,R.request_video_height=(t.levels[h.level]||{}).height,R.request_labeled_bitrate=(t.levels[h.level]||{}).bitrate):R.request_type=h.type,u(\"requestcompleted\",R)};t.on(a.Events.FRAG_LOADED,y);var c=function(m,f){var _=f.frag,d=_.start,h=s(_),w={currentFragmentPDT:h,currentFragmentStart:o(d)};u(\"fragmentchange\",w)};t.on(a.Events.FRAG_CHANGED,c);var v=function(m,f){var _=f.type,d=f.details,h=f.response,w=f.fatal,E=f.frag,S=f.networkDetails,N=(E==null?void 0:E.url)||f.url||\"\",M=S?Se(S):void 0;if((d===a.ErrorDetails.MANIFEST_LOAD_ERROR||d===a.ErrorDetails.MANIFEST_LOAD_TIMEOUT||d===a.ErrorDetails.FRAG_LOAD_ERROR||d===a.ErrorDetails.FRAG_LOAD_TIMEOUT||d===a.ErrorDetails.LEVEL_LOAD_ERROR||d===a.ErrorDetails.LEVEL_LOAD_TIMEOUT||d===a.ErrorDetails.AUDIO_TRACK_LOAD_ERROR||d===a.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT||d===a.ErrorDetails.SUBTITLE_LOAD_ERROR||d===a.ErrorDetails.SUBTITLE_LOAD_TIMEOUT||d===a.ErrorDetails.KEY_LOAD_ERROR||d===a.ErrorDetails.KEY_LOAD_TIMEOUT)&&u(\"requestfailed\",{request_error:d,request_url:N,request_hostname:F(N),request_id:M?de(M):void 0,request_type:d===a.ErrorDetails.FRAG_LOAD_ERROR||d===a.ErrorDetails.FRAG_LOAD_TIMEOUT?\"media\":d===a.ErrorDetails.AUDIO_TRACK_LOAD_ERROR||d===a.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT?\"audio\":d===a.ErrorDetails.SUBTITLE_LOAD_ERROR||d===a.ErrorDetails.SUBTITLE_LOAD_TIMEOUT?\"subtitle\":d===a.ErrorDetails.KEY_LOAD_ERROR||d===a.ErrorDetails.KEY_LOAD_TIMEOUT?\"encryption\":\"manifest\",request_error_code:h==null?void 0:h.code,request_error_text:h==null?void 0:h.text}),w){var P,R=\"\".concat(N?\"url: \".concat(N,\"\\n\"):\"\")+\"\".concat(h&&(h.code||h.text)?\"response: \".concat(h.code,\", \").concat(h.text,\"\\n\"):\"\")+\"\".concat(f.reason?\"failure reason: \".concat(f.reason,\"\\n\"):\"\")+\"\".concat(f.level?\"level: \".concat(f.level,\"\\n\"):\"\")+\"\".concat(f.parent?\"parent stream controller: \".concat(f.parent,\"\\n\"):\"\")+\"\".concat(f.buffer?\"buffer length: \".concat(f.buffer,\"\\n\"):\"\")+\"\".concat(f.error?\"error: \".concat(f.error,\"\\n\"):\"\")+\"\".concat(f.event?\"event: \".concat(f.event,\"\\n\"):\"\")+\"\".concat(f.err?\"error message: \".concat((P=f.err)===null||P===void 0?void 0:P.message,\"\\n\"):\"\");u(\"error\",{player_error_code:_,player_error_message:d,player_error_context:R})}};t.on(a.Events.ERROR,v);var T=function(m,f){var _=f.frag,d=_&&_._url||\"\";u(\"requestcanceled\",{request_event_type:m,request_url:d,request_type:\"media\",request_hostname:F(d)})};t.on(a.Events.FRAG_LOAD_EMERGENCY_ABORTED,T);var x=function(m,f){var _=f.level,d=t.levels[_];if(d&&d.attrs&&d.attrs.BANDWIDTH){var h=d.attrs.BANDWIDTH,w,E=parseFloat(d.attrs[\"FRAME-RATE\"]);isNaN(E)||(w=E),h?u(\"renditionchange\",{video_source_fps:w,video_source_bitrate:h,video_source_width:d.width,video_source_height:d.height,video_source_rendition_name:d.name,video_source_codec:d==null?void 0:d.videoCodec}):n.warn(\"missing BANDWIDTH from HLS manifest parsed by HLS.js\")}};t.on(a.Events.LEVEL_SWITCHED,x),t._stopMuxMonitor=function(){t.off(a.Events.MANIFEST_LOADED,p),t.off(a.Events.LEVEL_LOADED,b),t.off(a.Events.AUDIO_TRACK_LOADED,k),t.off(a.Events.FRAG_LOADED,y),t.off(a.Events.FRAG_CHANGED,c),t.off(a.Events.ERROR,v),t.off(a.Events.FRAG_LOAD_EMERGENCY_ABORTED,T),t.off(a.Events.LEVEL_SWITCHED,x),t.off(a.Events.DESTROYING,t._stopMuxMonitor),delete t._stopMuxMonitor},t.on(a.Events.DESTROYING,t._stopMuxMonitor)},Pt=function(r){r&&typeof r._stopMuxMonitor==\"function\"&&r._stopMuxMonitor()};var It=function(r,e){if(!r||!r.requestEndDate)return{};var t=F(r.url),i=r.url,a=r.bytesLoaded,n=new Date(r.requestStartDate).getTime(),o=new Date(r.firstByteDate).getTime(),s=new Date(r.requestEndDate).getTime(),u=isNaN(r.duration)?0:r.duration,p=typeof e.getMetricsFor==\"function\"?e.getMetricsFor(r.mediaType).HttpList:e.getDashMetrics().getHttpRequests(r.mediaType),b;p.length>0&&(b=pe(p[p.length-1]._responseHeaders||\"\"));var k=b?de(b):void 0;return{requestStart:n,requestResponseStart:o,requestResponseEnd:s,requestBytesLoaded:a,requestResponseHeaders:b,requestMediaDuration:u,requestHostname:t,requestUrl:i,requestId:k}},ua=function(r,e){var t=e.getQualityFor(r),i=e.getCurrentTrackFor(r).bitrateList;return i?{currentLevel:t,renditionWidth:i[t].width||null,renditionHeight:i[t].height||null,renditionBitrate:i[t].bandwidth}:{}},da=function(r){var e;return(e=r.match(/.*codecs\\*?=\"(.*)\"/))===null||e===void 0?void 0:e[1]},la=function(e){try{var t,i,a=(i=e.getVersion)===null||i===void 0||(t=i.call(e))===null||t===void 0?void 0:t.split(\".\").map(function(n){return parseInt(n)})[0];return a}catch(n){return!1}},Nt=function(r,e,t){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=r.log;if(!t||!t.on){a.warn(\"Invalid dash.js player reference. Monitoring blocked.\");return}var n=la(t),o=function(_,d){return r.emit(e,_,d)},s=function(_){var d=_.type,h=_.data,w=(h||{}).url;o(\"requestcompleted\",{request_event_type:d,request_start:0,request_response_start:0,request_response_end:0,request_bytes_loaded:-1,request_type:\"manifest\",request_hostname:F(w),request_url:w})};t.on(\"manifestLoaded\",s);var u={},p=function(_){if(typeof _.getRequests!=\"function\")return null;var d=_.getRequests({state:\"executed\"});return d.length===0?null:d[d.length-1]},b=function(_){var d=_.type,h=_.fragmentModel,w=_.chunk,E=p(h);k({type:d,request:E,chunk:w})},k=function(_){var d=_.type,h=_.chunk,w=_.request,E=(h||{}).mediaInfo,S=E||{},N=S.type,M=S.bitrateList;M=M||[];var P={};M.forEach(function(Ee,z){P[z]={},P[z].width=Ee.width,P[z].height=Ee.height,P[z].bitrate=Ee.bandwidth,P[z].attrs={}}),N===\"video\"?u.video=P:N===\"audio\"?u.audio=P:u.media=P;var R=It(w,t),Z=R.requestStart,Te=R.requestResponseStart,we=R.requestResponseEnd,G=R.requestResponseHeaders,oe=R.requestMediaDuration,Ve=R.requestHostname,We=R.requestUrl,je=R.requestId;o(\"requestcompleted\",{request_event_type:d,request_start:Z,request_response_start:Te,request_response_end:we,request_bytes_loaded:-1,request_type:N+\"_init\",request_response_headers:G,request_hostname:Ve,request_id:je,request_url:We,request_media_duration:oe,request_rendition_lists:u})};n>=4?t.on(\"initFragmentLoaded\",k):t.on(\"initFragmentLoaded\",b);var y=function(_){var d=_.type,h=_.fragmentModel,w=_.chunk,E=p(h);c({type:d,request:E,chunk:w})},c=function(_){var d=_.type,h=_.chunk,w=_.request,E=h||{},S=E.mediaInfo,N=E.start,M=S||{},P=M.type,R=It(w,t),Z=R.requestStart,Te=R.requestResponseStart,we=R.requestResponseEnd,G=R.requestBytesLoaded,oe=R.requestResponseHeaders,Ve=R.requestMediaDuration,We=R.requestHostname,je=R.requestUrl,Ee=R.requestId,z=ua(P,t),Jr=z.currentLevel,Qr=z.renditionWidth,zr=z.renditionHeight,Kr=z.renditionBitrate;o(\"requestcompleted\",{request_event_type:d,request_start:Z,request_response_start:Te,request_response_end:we,request_bytes_loaded:G,request_type:P,request_response_headers:oe,request_hostname:We,request_id:Ee,request_url:je,request_media_start_time:N,request_media_duration:Ve,request_current_level:Jr,request_labeled_bitrate:Kr,request_video_width:Qr,request_video_height:zr})};n>=4?t.on(\"mediaFragmentLoaded\",c):t.on(\"mediaFragmentLoaded\",y);var v={video:void 0,audio:void 0,totalBitrate:void 0},T=function(){if(v.video&&typeof v.video.bitrate==\"number\"){if(!(v.video.width&&v.video.height)){a.warn(\"have bitrate info for video but missing width/height\");return}var _=v.video.bitrate;if(v.audio&&typeof v.audio.bitrate==\"number\"&&(_+=v.audio.bitrate),_!==v.totalBitrate)return v.totalBitrate=_,{video_source_bitrate:_,video_source_height:v.video.height,video_source_width:v.video.width,video_source_codec:da(v.video.codec)}}},x=function(_,d,h){if(typeof _.newQuality!=\"number\"){a.warn(\"missing evt.newQuality in qualityChangeRendered event\",_);return}var w=_.mediaType;if(w===\"audio\"||w===\"video\"){var E=t.getBitrateInfoListFor(w).find(function(N){var M=N.qualityIndex;return M===_.newQuality});if(!(E&&typeof E.bitrate==\"number\")){a.warn(\"missing bitrate info for \".concat(w));return}v[w]=fe(ue({},E),{codec:t.getCurrentTrackFor(w).codec});var S=T();S&&o(\"renditionchange\",S)}};t.on(\"qualityChangeRendered\",x);var m=function(_){var d=_.request,h=_.mediaType;d=d||{},o(\"requestcanceled\",{request_event_type:d.type+\"_\"+d.action,request_url:d.url,request_type:h,request_hostname:F(d.url)})};t.on(\"fragmentLoadingAbandoned\",m);var f=function(_){var d=_.error,h,w,E=(d==null||(h=d.data)===null||h===void 0?void 0:h.request)||{},S=(d==null||(w=d.data)===null||w===void 0?void 0:w.response)||{};(d==null?void 0:d.code)===27&&o(\"requestfailed\",{request_error:E.type+\"_\"+E.action,request_url:E.url,request_hostname:F(E.url),request_type:E.mediaType,request_error_code:S.status,request_error_text:S.statusText});var N=\"\".concat(E!=null&&E.url?\"url: \".concat(E.url,\"\\n\"):\"\")+\"\".concat(S!=null&&S.status||S!=null&&S.statusText?\"response: \".concat(S==null?void 0:S.status,\", \").concat(S==null?void 0:S.statusText,\"\\n\"):\"\");o(\"error\",{player_error_code:d==null?void 0:d.code,player_error_message:d==null?void 0:d.message,player_error_context:N})};t.on(\"error\",f),t._stopMuxMonitor=function(){t.off(\"manifestLoaded\",s),t.off(\"initFragmentLoaded\",k),t.off(\"mediaFragmentLoaded\",c),t.off(\"qualityChangeRendered\",x),t.off(\"error\",f),t.off(\"fragmentLoadingAbandoned\",m),delete t._stopMuxMonitor}},Lt=function(r){r&&typeof r._stopMuxMonitor==\"function\"&&r._stopMuxMonitor()};var Ct=0,ca=function(){\"use strict\";function r(){D(this,r),l(this,\"_listeners\",void 0)}return L(r,[{key:\"on\",value:function(t,i,a){return i._eventEmitterGuid=i._eventEmitterGuid||++Ct,this._listeners=this._listeners||{},this._listeners[t]=this._listeners[t]||[],a&&(i=i.bind(a)),this._listeners[t].push(i),i}},{key:\"off\",value:function(t,i){var a=this._listeners&&this._listeners[t];a&&a.forEach(function(n,o){n._eventEmitterGuid===i._eventEmitterGuid&&a.splice(o,1)})}},{key:\"one\",value:function(t,i,a){var n=this;i._eventEmitterGuid=i._eventEmitterGuid||++Ct;var o=function(){n.off(t,o),i.apply(a||this,arguments)};o._eventEmitterGuid=i._eventEmitterGuid,this.on(t,o)}},{key:\"emit\",value:function(t,i){var a=this;if(this._listeners){i=i||{};var n=this._listeners[\"before*\"]||[],o=this._listeners[t]||[],s=this._listeners[\"after\"+t]||[],u=function(p,b){p=p.slice(),p.forEach(function(k){k.call(a,{type:t},b)})};u(n,i),u(o,i),u(s,i)}}}]),r}(),Mt=ca;var He=V(J()),_a=function(){\"use strict\";function r(e){var t=this;D(this,r),l(this,\"_playbackHeartbeatInterval\",void 0),l(this,\"_playheadShouldBeProgressing\",void 0),l(this,\"pm\",void 0),this.pm=e,this._playbackHeartbeatInterval=null,this._playheadShouldBeProgressing=!1,e.on(\"playing\",function(){t._playheadShouldBeProgressing=!0}),e.on(\"play\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"playing\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"adbreakstart\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"adplay\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"adplaying\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"devicewake\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"viewstart\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"rebufferstart\",this._startPlaybackHeartbeatInterval.bind(this)),e.on(\"pause\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"ended\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"viewend\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"error\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"aderror\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"adpause\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"adended\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"adbreakend\",this._stopPlaybackHeartbeatInterval.bind(this)),e.on(\"seeked\",function(){e.data.player_is_paused?t._stopPlaybackHeartbeatInterval():t._startPlaybackHeartbeatInterval()}),e.on(\"timeupdate\",function(){t._playbackHeartbeatInterval!==null&&e.emit(\"playbackheartbeat\")}),e.on(\"devicesleep\",function(i,a){t._playbackHeartbeatInterval!==null&&(He.default.clearInterval(t._playbackHeartbeatInterval),e.emit(\"playbackheartbeatend\",{viewer_time:a.viewer_time}),t._playbackHeartbeatInterval=null)})}return L(r,[{key:\"_startPlaybackHeartbeatInterval\",value:function(){var t=this;this._playbackHeartbeatInterval===null&&(this.pm.emit(\"playbackheartbeat\"),this._playbackHeartbeatInterval=He.default.setInterval(function(){t.pm.emit(\"playbackheartbeat\")},this.pm.playbackHeartbeatTime))}},{key:\"_stopPlaybackHeartbeatInterval\",value:function(){this._playheadShouldBeProgressing=!1,this._playbackHeartbeatInterval!==null&&(He.default.clearInterval(this._playbackHeartbeatInterval),this.pm.emit(\"playbackheartbeatend\"),this._playbackHeartbeatInterval=null)}}]),r}(),Ht=_a;var fa=function r(e){\"use strict\";var t=this;D(this,r),l(this,\"viewErrored\",void 0),e.on(\"viewinit\",function(){t.viewErrored=!1}),e.on(\"error\",function(i,a){try{var n=e.errorTranslator({player_error_code:a.player_error_code,player_error_message:a.player_error_message,player_error_context:a.player_error_context,player_error_severity:a.player_error_severity,player_error_business_exception:a.player_error_business_exception});n&&(e.data.player_error_code=n.player_error_code||a.player_error_code,e.data.player_error_message=n.player_error_message||a.player_error_message,e.data.player_error_context=n.player_error_context||a.player_error_context,e.data.player_error_severity=n.player_error_severity||a.player_error_severity,e.data.player_error_business_exception=n.player_error_business_exception||a.player_error_business_exception,t.viewErrored=!0)}catch(o){e.mux.log.warn(\"Exception in error translator callback.\",o),t.viewErrored=!0}}),e.on(\"aftererror\",function(){var i,a,n,o,s;(i=e.data)===null||i===void 0||delete i.player_error_code,(a=e.data)===null||a===void 0||delete a.player_error_message,(n=e.data)===null||n===void 0||delete n.player_error_context,(o=e.data)===null||o===void 0||delete o.player_error_severity,(s=e.data)===null||s===void 0||delete s.player_error_business_exception})},Bt=fa;var pa=function(){\"use strict\";function r(e){D(this,r),l(this,\"_watchTimeTrackerLastCheckedTime\",void 0),l(this,\"pm\",void 0),this.pm=e,this._watchTimeTrackerLastCheckedTime=null,e.on(\"playbackheartbeat\",this._updateWatchTime.bind(this)),e.on(\"playbackheartbeatend\",this._clearWatchTimeState.bind(this))}return L(r,[{key:\"_updateWatchTime\",value:function(t,i){var a=i.viewer_time;this._watchTimeTrackerLastCheckedTime===null&&(this._watchTimeTrackerLastCheckedTime=a),O(this.pm.data,\"view_watch_time\",a-this._watchTimeTrackerLastCheckedTime),this._watchTimeTrackerLastCheckedTime=a}},{key:\"_clearWatchTimeState\",value:function(t,i){this._updateWatchTime(t,i),this._watchTimeTrackerLastCheckedTime=null}}]),r}(),Ut=pa;var va=function(){\"use strict\";function r(e){var t=this;D(this,r),l(this,\"_playbackTimeTrackerLastPlayheadPosition\",void 0),l(this,\"_lastTime\",void 0),l(this,\"_isAdPlaying\",void 0),l(this,\"_callbackUpdatePlaybackTime\",void 0),l(this,\"pm\",void 0),this.pm=e,this._playbackTimeTrackerLastPlayheadPosition=-1,this._lastTime=A.now(),this._isAdPlaying=!1,this._callbackUpdatePlaybackTime=null;var i=this._startPlaybackTimeTracking.bind(this);e.on(\"playing\",i),e.on(\"adplaying\",i),e.on(\"seeked\",i);var a=this._stopPlaybackTimeTracking.bind(this);e.on(\"playbackheartbeatend\",a),e.on(\"seeking\",a),e.on(\"adplaying\",function(){t._isAdPlaying=!0}),e.on(\"adended\",function(){t._isAdPlaying=!1}),e.on(\"adpause\",function(){t._isAdPlaying=!1}),e.on(\"adbreakstart\",function(){t._isAdPlaying=!1}),e.on(\"adbreakend\",function(){t._isAdPlaying=!1}),e.on(\"adplay\",function(){t._isAdPlaying=!1}),e.on(\"viewinit\",function(){t._playbackTimeTrackerLastPlayheadPosition=-1,t._lastTime=A.now(),t._isAdPlaying=!1,t._callbackUpdatePlaybackTime=null})}return L(r,[{key:\"_startPlaybackTimeTracking\",value:function(){this._callbackUpdatePlaybackTime===null&&(this._callbackUpdatePlaybackTime=this._updatePlaybackTime.bind(this),this._playbackTimeTrackerLastPlayheadPosition=this.pm.data.player_playhead_time,this.pm.on(\"playbackheartbeat\",this._callbackUpdatePlaybackTime))}},{key:\"_stopPlaybackTimeTracking\",value:function(){this._callbackUpdatePlaybackTime&&(this._updatePlaybackTime(),this.pm.off(\"playbackheartbeat\",this._callbackUpdatePlaybackTime),this._callbackUpdatePlaybackTime=null,this._playbackTimeTrackerLastPlayheadPosition=-1)}},{key:\"_updatePlaybackTime\",value:function(){var t=this.pm.data.player_playhead_time,i=A.now(),a=-1;this._playbackTimeTrackerLastPlayheadPosition>=0&&t>this._playbackTimeTrackerLastPlayheadPosition?a=t-this._playbackTimeTrackerLastPlayheadPosition:this._isAdPlaying&&(a=i-this._lastTime),a>0&&a<=1e3&&O(this.pm.data,\"view_content_playback_time\",a),this._playbackTimeTrackerLastPlayheadPosition=t,this._lastTime=i}}]),r}(),Ft=va;var ma=function(){\"use strict\";function r(e){D(this,r),l(this,\"pm\",void 0),this.pm=e;var t=this._updatePlayheadTime.bind(this);e.on(\"playbackheartbeat\",t),e.on(\"playbackheartbeatend\",t),e.on(\"timeupdate\",t),e.on(\"destroy\",function(){e.off(\"timeupdate\",t)})}return L(r,[{key:\"_updateMaxPlayheadPosition\",value:function(){this.pm.data.view_max_playhead_position=typeof this.pm.data.view_max_playhead_position==\"undefined\"?this.pm.data.player_playhead_time:Math.max(this.pm.data.view_max_playhead_position,this.pm.data.player_playhead_time)}},{key:\"_updatePlayheadTime\",value:function(t,i){var a=this,n=function(){a.pm.currentFragmentPDT&&a.pm.currentFragmentStart&&(a.pm.data.player_program_time=a.pm.currentFragmentPDT+a.pm.data.player_playhead_time-a.pm.currentFragmentStart)};if(i&&i.player_playhead_time)this.pm.data.player_playhead_time=i.player_playhead_time,n(),this._updateMaxPlayheadPosition();else if(this.pm.getPlayheadTime){var o=this.pm.getPlayheadTime();typeof o!=\"undefined\"&&(this.pm.data.player_playhead_time=o,n(),this._updateMaxPlayheadPosition())}}}]),r}(),Vt=ma;var Wt=5*60*1e3,ha=function r(e){\"use strict\";if(D(this,r),!e.disableRebufferTracking){var t,i=function(n,o){a(o),t=void 0},a=function(n){if(t){var o=n.viewer_time-t;O(e.data,\"view_rebuffer_duration\",o),t=n.viewer_time,e.data.view_rebuffer_duration>Wt&&(e.emit(\"viewend\"),e.send(\"viewend\"),e.mux.log.warn(\"Ending view after rebuffering for longer than \".concat(Wt,\"ms, future events will be ignored unless a programchange or videochange occurs.\")))}e.data.view_watch_time>=0&&e.data.view_rebuffer_count>0&&(e.data.view_rebuffer_frequency=e.data.view_rebuffer_count/e.data.view_watch_time,e.data.view_rebuffer_percentage=e.data.view_rebuffer_duration/e.data.view_watch_time)};e.on(\"playbackheartbeat\",function(n,o){return a(o)}),e.on(\"rebufferstart\",function(n,o){t||(O(e.data,\"view_rebuffer_count\",1),t=o.viewer_time,e.one(\"rebufferend\",i))}),e.on(\"viewinit\",function(){t=void 0,e.off(\"rebufferend\",i)})}},jt=ha;var ya=function(){\"use strict\";function r(e){var t=this;D(this,r),l(this,\"_lastCheckedTime\",void 0),l(this,\"_lastPlayheadTime\",void 0),l(this,\"_lastPlayheadTimeUpdatedTime\",void 0),l(this,\"_rebuffering\",void 0),l(this,\"pm\",void 0),this.pm=e,!(e.disableRebufferTracking||e.disablePlayheadRebufferTracking)&&(this._lastCheckedTime=null,this._lastPlayheadTime=null,this._lastPlayheadTimeUpdatedTime=null,e.on(\"playbackheartbeat\",this._checkIfRebuffering.bind(this)),e.on(\"playbackheartbeatend\",this._cleanupRebufferTracker.bind(this)),e.on(\"seeking\",function(){t._cleanupRebufferTracker(null,{viewer_time:A.now()})}))}return L(r,[{key:\"_checkIfRebuffering\",value:function(t,i){if(this.pm.seekingTracker.isSeeking||this.pm.adTracker.isAdBreak||!this.pm.playbackHeartbeat._playheadShouldBeProgressing){this._cleanupRebufferTracker(t,i);return}if(this._lastCheckedTime===null){this._prepareRebufferTrackerState(i.viewer_time);return}if(this._lastPlayheadTime!==this.pm.data.player_playhead_time){this._cleanupRebufferTracker(t,i,!0);return}var a=i.viewer_time-this._lastPlayheadTimeUpdatedTime;typeof this.pm.sustainedRebufferThreshold==\"number\"&&a>=this.pm.sustainedRebufferThreshold&&(this._rebuffering||(this._rebuffering=!0,this.pm.emit(\"rebufferstart\",{viewer_time:this._lastPlayheadTimeUpdatedTime}))),this._lastCheckedTime=i.viewer_time}},{key:\"_clearRebufferTrackerState\",value:function(){this._lastCheckedTime=null,this._lastPlayheadTime=null,this._lastPlayheadTimeUpdatedTime=null}},{key:\"_prepareRebufferTrackerState\",value:function(t){this._lastCheckedTime=t,this._lastPlayheadTime=this.pm.data.player_playhead_time,this._lastPlayheadTimeUpdatedTime=t}},{key:\"_cleanupRebufferTracker\",value:function(t,i){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(this._rebuffering)this._rebuffering=!1,this.pm.emit(\"rebufferend\",{viewer_time:i.viewer_time});else{if(this._lastCheckedTime===null)return;var n=this.pm.data.player_playhead_time-this._lastPlayheadTime,o=i.viewer_time-this._lastPlayheadTimeUpdatedTime;typeof this.pm.minimumRebufferDuration==\"number\"&&n>0&&o-n>this.pm.minimumRebufferDuration&&(this._lastCheckedTime=null,this.pm.emit(\"rebufferstart\",{viewer_time:this._lastPlayheadTimeUpdatedTime}),this.pm.emit(\"rebufferend\",{viewer_time:this._lastPlayheadTimeUpdatedTime+o-n}))}a?this._prepareRebufferTrackerState(i.viewer_time):this._clearRebufferTrackerState()}}]),r}(),Gt=ya;var ga=function(){\"use strict\";function r(e){var t=this;D(this,r),l(this,\"NAVIGATION_START\",void 0),l(this,\"pm\",void 0),this.pm=e,e.on(\"viewinit\",function(){var i=e.data,a=i.view_id;if(!i.view_program_changed){var n=function(o,s){var u=s.viewer_time;o.type===\"playing\"&&typeof e.data.view_time_to_first_frame==\"undefined\"?t.calculateTimeToFirstFrame(u||A.now(),a):o.type===\"adplaying\"&&(typeof e.data.view_time_to_first_frame==\"undefined\"||t._inPrerollPosition())&&t.calculateTimeToFirstFrame(u||A.now(),a)};e.one(\"playing\",n),e.one(\"adplaying\",n),e.one(\"viewend\",function(){e.off(\"playing\",n),e.off(\"adplaying\",n)})}})}return L(r,[{key:\"_inPrerollPosition\",value:function(){return typeof this.pm.data.view_content_playback_time==\"undefined\"||this.pm.data.view_content_playback_time<=1e3}},{key:\"calculateTimeToFirstFrame\",value:function(t,i){i===this.pm.data.view_id&&(this.pm.watchTimeTracker._updateWatchTime(null,{viewer_time:t}),this.pm.data.view_time_to_first_frame=this.pm.data.view_watch_time,(this.pm.data.player_autoplay_on||this.pm.data.video_is_autoplay)&&this.NAVIGATION_START&&(this.pm.data.view_aggregate_startup_time=this.pm.data.view_start+this.pm.data.view_watch_time-this.NAVIGATION_START))}}]),r}(),Jt=ga;var ba=function r(e){\"use strict\";var t=this;D(this,r),l(this,\"_lastPlayerHeight\",void 0),l(this,\"_lastPlayerWidth\",void 0),l(this,\"_lastPlayheadPosition\",void 0),l(this,\"_lastSourceHeight\",void 0),l(this,\"_lastSourceWidth\",void 0),e.on(\"viewinit\",function(){t._lastPlayheadPosition=-1});var i=[\"pause\",\"rebufferstart\",\"seeking\",\"error\",\"adbreakstart\",\"hb\",\"renditionchange\",\"orientationchange\",\"viewend\"],a=[\"playing\",\"hb\",\"renditionchange\",\"orientationchange\"];i.forEach(function(n){e.on(n,function(){if(t._lastPlayheadPosition>=0&&e.data.player_playhead_time>=0&&t._lastPlayerWidth>=0&&t._lastSourceWidth>0&&t._lastPlayerHeight>=0&&t._lastSourceHeight>0){var o=e.data.player_playhead_time-t._lastPlayheadPosition;if(o<0){t._lastPlayheadPosition=-1;return}var s=Math.min(t._lastPlayerWidth/t._lastSourceWidth,t._lastPlayerHeight/t._lastSourceHeight),u=Math.max(0,s-1),p=Math.max(0,1-s);e.data.view_max_upscale_percentage=Math.max(e.data.view_max_upscale_percentage||0,u),e.data.view_max_downscale_percentage=Math.max(e.data.view_max_downscale_percentage||0,p),O(e.data,\"view_total_content_playback_time\",o),O(e.data,\"view_total_upscaling\",u*o),O(e.data,\"view_total_downscaling\",p*o)}t._lastPlayheadPosition=-1})}),a.forEach(function(n){e.on(n,function(){t._lastPlayheadPosition=e.data.player_playhead_time,t._lastPlayerWidth=e.data.player_width,t._lastPlayerHeight=e.data.player_height,t._lastSourceWidth=e.data.video_source_width,t._lastSourceHeight=e.data.video_source_height})})},Qt=ba;var Ta=2e3,wa=function r(e){\"use strict\";var t=this;D(this,r),l(this,\"isSeeking\",void 0),this.isSeeking=!1;var i=-1,a=function(){var n=A.now(),o=(e.data.viewer_time||n)-(i||n);O(e.data,\"view_seek_duration\",o),e.data.view_max_seek_time=Math.max(e.data.view_max_seek_time||0,o),t.isSeeking=!1,i=-1};e.on(\"seeking\",function(n,o){if(Object.assign(e.data,o),t.isSeeking&&o.viewer_time-i<=Ta){i=o.viewer_time;return}t.isSeeking&&a(),t.isSeeking=!0,i=o.viewer_time,O(e.data,\"view_seek_count\",1),e.send(\"seeking\")}),e.on(\"seeked\",function(){a()}),e.on(\"viewend\",function(){t.isSeeking&&(a(),e.send(\"seeked\")),t.isSeeking=!1,i=-1})},zt=wa;var Kt=function(e,t){e.push(t),e.sort(function(i,a){return i.viewer_time-a.viewer_time})},Ea=[\"adbreakstart\",\"adrequest\",\"adresponse\",\"adplay\",\"adplaying\",\"adpause\",\"adended\",\"adbreakend\",\"aderror\",\"adclicked\",\"adskipped\"],ka=function(){\"use strict\";function r(e){var t=this;D(this,r),l(this,\"_adHasPlayed\",void 0),l(this,\"_adRequests\",void 0),l(this,\"_adResponses\",void 0),l(this,\"_currentAdRequestNumber\",void 0),l(this,\"_currentAdResponseNumber\",void 0),l(this,\"_prerollPlayTime\",void 0),l(this,\"_wouldBeNewAdPlay\",void 0),l(this,\"isAdBreak\",void 0),l(this,\"pm\",void 0),this.pm=e,e.on(\"viewinit\",function(){t.isAdBreak=!1,t._currentAdRequestNumber=0,t._currentAdResponseNumber=0,t._adRequests=[],t._adResponses=[],t._adHasPlayed=!1,t._wouldBeNewAdPlay=!0,t._prerollPlayTime=void 0}),Ea.forEach(function(a){return e.on(a,t._updateAdData.bind(t))});var i=function(){t.isAdBreak=!1};e.on(\"adbreakstart\",function(){t.isAdBreak=!0}),e.on(\"play\",i),e.on(\"playing\",i),e.on(\"viewend\",i),e.on(\"adrequest\",function(a,n){n=Object.assign({ad_request_id:\"generatedAdRequestId\"+t._currentAdRequestNumber++},n),Kt(t._adRequests,n),O(e.data,\"view_ad_request_count\"),t.inPrerollPosition()&&(e.data.view_preroll_requested=!0,t._adHasPlayed||O(e.data,\"view_preroll_request_count\"))}),e.on(\"adresponse\",function(a,n){n=Object.assign({ad_request_id:\"generatedAdRequestId\"+t._currentAdResponseNumber++},n),Kt(t._adResponses,n);var o=t.findAdRequest(n.ad_request_id);o&&O(e.data,\"view_ad_request_time\",Math.max(0,n.viewer_time-o.viewer_time))}),e.on(\"adplay\",function(a,n){t._adHasPlayed=!0,t._wouldBeNewAdPlay&&(t._wouldBeNewAdPlay=!1,O(e.data,\"view_ad_played_count\")),t.inPrerollPosition()&&!e.data.view_preroll_played&&(e.data.view_preroll_played=!0,t._adRequests.length>0&&(e.data.view_preroll_request_time=Math.max(0,n.viewer_time-t._adRequests[0].viewer_time)),e.data.view_start&&(e.data.view_startup_preroll_request_time=Math.max(0,n.viewer_time-e.data.view_start)),t._prerollPlayTime=n.viewer_time)}),e.on(\"adplaying\",function(a,n){t.inPrerollPosition()&&typeof e.data.view_preroll_load_time==\"undefined\"&&typeof t._prerollPlayTime!=\"undefined\"&&(e.data.view_preroll_load_time=n.viewer_time-t._prerollPlayTime,e.data.view_startup_preroll_load_time=n.viewer_time-t._prerollPlayTime)}),e.on(\"adclicked\",function(a,n){t._wouldBeNewAdPlay||O(e.data,\"view_ad_clicked_count\")}),e.on(\"adskipped\",function(a,n){t._wouldBeNewAdPlay||O(e.data,\"view_ad_skipped_count\")}),e.on(\"adended\",function(){t._wouldBeNewAdPlay=!0}),e.on(\"aderror\",function(){t._wouldBeNewAdPlay=!0})}return L(r,[{key:\"inPrerollPosition\",value:function(){return typeof this.pm.data.view_content_playback_time==\"undefined\"||this.pm.data.view_content_playback_time<=1e3}},{key:\"findAdRequest\",value:function(t){for(var i=0;i<this._adRequests.length;i++)if(this._adRequests[i].ad_request_id===t)return this._adRequests[i]}},{key:\"_updateAdData\",value:function(t,i){if(this.inPrerollPosition()){if(!this.pm.data.view_preroll_ad_tag_hostname&&i.ad_tag_url){var a=H(re(i.ad_tag_url),2),n=a[0],o=a[1];this.pm.data.view_preroll_ad_tag_domain=o,this.pm.data.view_preroll_ad_tag_hostname=n}if(!this.pm.data.view_preroll_ad_asset_hostname&&i.ad_asset_url){var s=H(re(i.ad_asset_url),2),u=s[0],p=s[1];this.pm.data.view_preroll_ad_asset_domain=p,this.pm.data.view_preroll_ad_asset_hostname=u}}this.pm.data.ad_asset_url=i==null?void 0:i.ad_asset_url,this.pm.data.ad_tag_url=i==null?void 0:i.ad_tag_url,this.pm.data.ad_creative_id=i==null?void 0:i.ad_creative_id,this.pm.data.ad_id=i==null?void 0:i.ad_id,this.pm.data.ad_universal_id=i==null?void 0:i.ad_universal_id}}]),r}(),Yt=ka;var Qe=V(J());var xa=function r(e){\"use strict\";D(this,r);var t,i,a=function(){e.disableRebufferTracking||(O(e.data,\"view_waiting_rebuffer_count\",1),t=A.now(),i=Qe.default.setInterval(function(){if(t){var p=A.now();O(e.data,\"view_waiting_rebuffer_duration\",p-t),t=p}},250))},n=function(){e.disableRebufferTracking||t&&(O(e.data,\"view_waiting_rebuffer_duration\",A.now()-t),t=!1,Qe.default.clearInterval(i))},o=!1,s=function(){o=!0},u=function(){o=!1,n()};e.on(\"waiting\",function(){o&&a()}),e.on(\"playing\",function(){n(),s()}),e.on(\"pause\",u),e.on(\"seeking\",u)},Xt=xa;var Da=function r(e){\"use strict\";var t=this;D(this,r),l(this,\"lastWallClockTime\",void 0);var i=function(){t.lastWallClockTime=A.now(),e.on(\"before*\",a)},a=function(n){var o=A.now(),s=t.lastWallClockTime;t.lastWallClockTime=o,o-s>3e4&&(e.emit(\"devicesleep\",{viewer_time:s}),Object.assign(e.data,{viewer_time:s}),e.send(\"devicesleep\"),e.emit(\"devicewake\",{viewer_time:o}),Object.assign(e.data,{viewer_time:o}),e.send(\"devicewake\"))};e.one(\"playbackheartbeat\",i),e.on(\"playbackheartbeatend\",function(){e.off(\"before*\",a),e.one(\"playbackheartbeat\",i)})},$t=Da;var Ue=V(J());var ze=function(r){return r()}(function(){var r=function(){for(var i=0,a={};i<arguments.length;i++){var n=arguments[i];for(var o in n)a[o]=n[o]}return a};function e(t){function i(a,n,o){var s;if(typeof document!=\"undefined\"){if(arguments.length>1){if(o=r({path:\"/\"},i.defaults,o),typeof o.expires==\"number\"){var u=new Date;u.setMilliseconds(u.getMilliseconds()+o.expires*864e5),o.expires=u}try{s=JSON.stringify(n),/^[\\{\\[]/.test(s)&&(n=s)}catch(T){}return t.write?n=t.write(n,a):n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),a=encodeURIComponent(String(a)),a=a.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),a=a.replace(/[\\(\\)]/g,escape),document.cookie=[a,\"=\",n,o.expires?\"; expires=\"+o.expires.toUTCString():\"\",o.path?\"; path=\"+o.path:\"\",o.domain?\"; domain=\"+o.domain:\"\",o.secure?\"; secure\":\"\"].join(\"\")}a||(s={});for(var p=document.cookie?document.cookie.split(\"; \"):[],b=/(%[0-9A-Z]{2})+/g,k=0;k<p.length;k++){var y=p[k].split(\"=\"),c=y.slice(1).join(\"=\");c.charAt(0)==='\"'&&(c=c.slice(1,-1));try{var v=y[0].replace(b,decodeURIComponent);if(c=t.read?t.read(c,v):t(c,v)||c.replace(b,decodeURIComponent),this.json)try{c=JSON.parse(c)}catch(T){}if(a===v){s=c;break}a||(s[v]=c)}catch(T){}}return s}}return i.set=i,i.get=function(a){return i.call(i,a)},i.getJSON=function(){return i.apply({json:!0},[].slice.call(arguments))},i.defaults={},i.remove=function(a,n){i(a,\"\",r(n,{expires:-1}))},i.withConverter=e,i}return e(function(){})});var Zt=\"muxData\",Sa=function(r){return Object.entries(r).map(function(e){var t=H(e,2),i=t[0],a=t[1];return\"\".concat(i,\"=\").concat(a)}).join(\"&\")},Ra=function(r){return r.split(\"&\").reduce(function(e,t){var i=H(t.split(\"=\"),2),a=i[0],n=i[1],o=+n,s=n&&o==n?o:n;return e[a]=s,e},{})},er=function(){var e;try{e=Ra(ze.get(Zt)||\"\")}catch(t){e={}}return e},tr=function(e){try{ze.set(Zt,Sa(e),{expires:365})}catch(t){}},rr=function(){var e=er();return e.mux_viewer_id=e.mux_viewer_id||ee(),e.msn=e.msn||Math.random(),tr(e),{mux_viewer_id:e.mux_viewer_id,mux_sample_number:e.msn}},ar=function(){var e=er(),t=A.now();return e.session_start&&(e.sst=e.session_start,delete e.session_start),e.session_id&&(e.sid=e.session_id,delete e.session_id),e.session_expires&&(e.sex=e.session_expires,delete e.session_expires),(!e.sex||e.sex<t)&&(e.sid=ee(),e.sst=t),e.sex=t+25*60*1e3,tr(e),{session_id:e.sid,session_start:e.sst,session_expires:e.sex}};function Ke(r,e){var t=e.beaconCollectionDomain,i=e.beaconDomain;if(t)return\"https://\"+t;r=r||\"inferred\";var a=i||\"litix.io\";return r.match(/^[a-z0-9]+$/)?\"https://\"+r+\".\"+a:\"https://img.litix.io/a.gif\"}var ir=V(J()),nr=function(){var e;switch(or()){case\"cellular\":e=\"cellular\";break;case\"ethernet\":e=\"wired\";break;case\"wifi\":e=\"wifi\";break;case void 0:break;default:e=\"other\"}return e},or=function(){var e=ir.default.navigator,t=e&&(e.connection||e.mozConnection||e.webkitConnection);return t&&t.type};nr.getConnectionFromAPI=or;var sr=nr;var qa={a:\"env\",b:\"beacon\",c:\"custom\",d:\"ad\",e:\"event\",f:\"experiment\",i:\"internal\",m:\"mux\",n:\"response\",p:\"player\",q:\"request\",r:\"retry\",s:\"session\",t:\"timestamp\",u:\"viewer\",v:\"video\",w:\"page\",x:\"view\",y:\"sub\"},Aa=dr(qa),Oa={ad:\"ad\",af:\"affiliate\",ag:\"aggregate\",ap:\"api\",al:\"application\",ao:\"audio\",ar:\"architecture\",as:\"asset\",au:\"autoplay\",av:\"average\",bi:\"bitrate\",bn:\"brand\",br:\"break\",bw:\"browser\",by:\"bytes\",bz:\"business\",ca:\"cached\",cb:\"cancel\",cc:\"codec\",cd:\"code\",cg:\"category\",ch:\"changed\",ci:\"client\",ck:\"clicked\",cl:\"canceled\",cn:\"config\",co:\"count\",ce:\"counter\",cp:\"complete\",cq:\"creator\",cr:\"creative\",cs:\"captions\",ct:\"content\",cu:\"current\",cx:\"connection\",cz:\"context\",dg:\"downscaling\",dm:\"domain\",dn:\"cdn\",do:\"downscale\",dr:\"drm\",dp:\"dropped\",du:\"duration\",dv:\"device\",dy:\"dynamic\",eb:\"enabled\",ec:\"encoding\",ed:\"edge\",en:\"end\",eg:\"engine\",em:\"embed\",er:\"error\",ep:\"experiments\",es:\"errorcode\",et:\"errortext\",ee:\"event\",ev:\"events\",ex:\"expires\",ez:\"exception\",fa:\"failed\",fi:\"first\",fm:\"family\",ft:\"format\",fp:\"fps\",fq:\"frequency\",fr:\"frame\",fs:\"fullscreen\",ha:\"has\",hb:\"holdback\",he:\"headers\",ho:\"host\",hn:\"hostname\",ht:\"height\",id:\"id\",ii:\"init\",in:\"instance\",ip:\"ip\",is:\"is\",ke:\"key\",la:\"language\",lb:\"labeled\",le:\"level\",li:\"live\",ld:\"loaded\",lo:\"load\",ls:\"lists\",lt:\"latency\",ma:\"max\",md:\"media\",me:\"message\",mf:\"manifest\",mi:\"mime\",ml:\"midroll\",mm:\"min\",mn:\"manufacturer\",mo:\"model\",mx:\"mux\",ne:\"newest\",nm:\"name\",no:\"number\",on:\"on\",or:\"origin\",os:\"os\",pa:\"paused\",pb:\"playback\",pd:\"producer\",pe:\"percentage\",pf:\"played\",pg:\"program\",ph:\"playhead\",pi:\"plugin\",pl:\"preroll\",pn:\"playing\",po:\"poster\",pp:\"pip\",pr:\"preload\",ps:\"position\",pt:\"part\",py:\"property\",px:\"pop\",pz:\"plan\",ra:\"rate\",rd:\"requested\",re:\"rebuffer\",rf:\"rendition\",rg:\"range\",rm:\"remote\",ro:\"ratio\",rp:\"response\",rq:\"request\",rs:\"requests\",sa:\"sample\",sd:\"skipped\",se:\"session\",sh:\"shift\",sk:\"seek\",sm:\"stream\",so:\"source\",sq:\"sequence\",sr:\"series\",ss:\"status\",st:\"start\",su:\"startup\",sv:\"server\",sw:\"software\",sy:\"severity\",ta:\"tag\",tc:\"tech\",te:\"text\",tg:\"target\",th:\"throughput\",ti:\"time\",tl:\"total\",to:\"to\",tt:\"title\",ty:\"type\",ug:\"upscaling\",un:\"universal\",up:\"upscale\",ur:\"url\",us:\"user\",va:\"variant\",vd:\"viewed\",vi:\"video\",ve:\"version\",vw:\"view\",vr:\"viewer\",wd:\"width\",wa:\"watch\",wt:\"waiting\"},ur=dr(Oa);function dr(r){var e={};for(var t in r)r.hasOwnProperty(t)&&(e[r[t]]=t);return e}function ve(r){var e={},t={};return Object.keys(r).forEach(function(i){var a=!1;if(r.hasOwnProperty(i)&&r[i]!==void 0){var n=i.split(\"_\"),o=n[0],s=Aa[o];s||(q.info(\"Data key word `\"+n[0]+\"` not expected in \"+i),s=o+\"_\"),n.splice(1).forEach(function(u){u===\"url\"&&(a=!0),ur[u]?s+=ur[u]:Number.isInteger(Number(u))?s+=u:(q.info(\"Data key word `\"+u+\"` not expected in \"+i),s+=\"_\"+u+\"_\")}),a?t[s]=r[i]:e[s]=r[i]}}),Object.assign(e,t)}var ie=V(J()),Lr=V(nt());var ai={maxBeaconSize:300,maxQueueLength:3600,baseTimeBetweenBeacons:1e4,maxPayloadKBSize:500},ii=56*1024,ni=[\"hb\",\"requestcompleted\",\"requestfailed\",\"requestcanceled\"],oi=\"https://img.litix.io\",$=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this._beaconUrl=e||oi,this._eventQueue=[],this._postInFlight=!1,this._resendAfterPost=!1,this._failureCount=0,this._sendTimeout=!1,this._options=Object.assign({},ai,t)};$.prototype.queueEvent=function(r,e){var t=Object.assign({},e);return this._eventQueue.length<=this._options.maxQueueLength||r===\"eventrateexceeded\"?(this._eventQueue.push(t),this._sendTimeout||this._startBeaconSending(),this._eventQueue.length<=this._options.maxQueueLength):!1};$.prototype.flushEvents=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(r&&this._eventQueue.length===1){this._eventQueue.pop();return}this._eventQueue.length&&this._sendBeaconQueue(),this._startBeaconSending()};$.prototype.destroy=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;this.destroyed=!0,r?this._clearBeaconQueue():this.flushEvents(),ie.default.clearTimeout(this._sendTimeout)};$.prototype._clearBeaconQueue=function(){var r=this._eventQueue.length>this._options.maxBeaconSize?this._eventQueue.length-this._options.maxBeaconSize:0,e=this._eventQueue.slice(r);r>0&&Object.assign(e[e.length-1],ve({mux_view_message:\"event queue truncated\"}));var t=this._createPayload(e);Cr(this._beaconUrl,t,!0,function(){})};$.prototype._sendBeaconQueue=function(){var r=this;if(this._postInFlight){this._resendAfterPost=!0;return}var e=this._eventQueue.slice(0,this._options.maxBeaconSize);this._eventQueue=this._eventQueue.slice(this._options.maxBeaconSize),this._postInFlight=!0;var t=this._createPayload(e),i=A.now();Cr(this._beaconUrl,t,!1,function(a,n){n?(r._eventQueue=e.concat(r._eventQueue),r._failureCount+=1,q.info(\"Error sending beacon: \"+n)):r._failureCount=0,r._roundTripTime=A.now()-i,r._postInFlight=!1,r._resendAfterPost&&(r._resendAfterPost=!1,r._eventQueue.length>0&&r._sendBeaconQueue())})};$.prototype._getNextBeaconTime=function(){if(!this._failureCount)return this._options.baseTimeBetweenBeacons;var r=Math.pow(2,this._failureCount-1);return r=r*Math.random(),(1+r)*this._options.baseTimeBetweenBeacons};$.prototype._startBeaconSending=function(){var r=this;ie.default.clearTimeout(this._sendTimeout),!this.destroyed&&(this._sendTimeout=ie.default.setTimeout(function(){r._eventQueue.length&&r._sendBeaconQueue(),r._startBeaconSending()},this._getNextBeaconTime()))};$.prototype._createPayload=function(r){var e=this,t={transmission_timestamp:Math.round(A.now())};this._roundTripTime&&(t.rtt_ms=Math.round(this._roundTripTime));var i,a,n,o=function(){i=JSON.stringify({metadata:t,events:a||r}),n=i.length/1024},s=function(){return n<=e._options.maxPayloadKBSize};return o(),s()||(q.info(\"Payload size is too big (\"+n+\" kb). Removing unnecessary events.\"),a=r.filter(function(u){return ni.indexOf(u.e)===-1}),o()),s()||(q.info(\"Payload size still too big (\"+n+\" kb). Cropping fields..\"),a.forEach(function(u){for(var p in u){var b=u[p],k=50*1024;typeof b==\"string\"&&b.length>k&&(u[p]=b.substring(0,k))}}),o()),i};var si=typeof Lr.default.exitPictureInPicture==\"function\"?function(r){return r.length<=ii}:function(r){return!1},Cr=function(r,e,t,i){if(t&&navigator&&navigator.sendBeacon&&navigator.sendBeacon(r,e)){i();return}if(ie.default.fetch){ie.default.fetch(r,{method:\"POST\",body:e,headers:{\"Content-Type\":\"text/plain\"},keepalive:si(e)}).then(function(n){return i(null,n.ok?null:\"Error\")}).catch(function(n){return i(null,n)});return}if(ie.default.XMLHttpRequest){var a=new ie.default.XMLHttpRequest;a.onreadystatechange=function(){if(a.readyState===4)return i(null,a.status!==200?\"error\":void 0)},a.open(\"POST\",r),a.setRequestHeader(\"Content-Type\",\"text/plain\"),a.send(e);return}i()},Mr=$;var ui=[\"env_key\",\"view_id\",\"view_sequence_number\",\"player_sequence_number\",\"beacon_domain\",\"player_playhead_time\",\"viewer_time\",\"mux_api_version\",\"event\",\"video_id\",\"player_instance_id\",\"player_error_code\",\"player_error_message\",\"player_error_context\",\"player_error_severity\",\"player_error_business_exception\"],di=[\"adplay\",\"adplaying\",\"adpause\",\"adfirstquartile\",\"admidpoint\",\"adthirdquartile\",\"adended\",\"adresponse\",\"adrequest\"],li=[\"ad_id\",\"ad_creative_id\",\"ad_universal_id\"],ci=[\"viewstart\",\"error\",\"ended\",\"viewend\"],_i=10*60*1e3,Hr=function(){\"use strict\";function r(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};D(this,r);var a,n,o,s,u,p,b,k,y,c,v,T;l(this,\"mux\",void 0),l(this,\"envKey\",void 0),l(this,\"options\",void 0),l(this,\"eventQueue\",void 0),l(this,\"sampleRate\",void 0),l(this,\"disableCookies\",void 0),l(this,\"respectDoNotTrack\",void 0),l(this,\"previousBeaconData\",void 0),l(this,\"lastEventTime\",void 0),l(this,\"rateLimited\",void 0),l(this,\"pageLevelData\",void 0),l(this,\"viewerData\",void 0),this.mux=e,this.envKey=t,this.options=i,this.previousBeaconData=null,this.lastEventTime=0,this.rateLimited=!1,this.eventQueue=new Mr(Ke(this.envKey,this.options));var x;this.sampleRate=(x=this.options.sampleRate)!==null&&x!==void 0?x:1;var m;this.disableCookies=(m=this.options.disableCookies)!==null&&m!==void 0?m:!1;var f;this.respectDoNotTrack=(f=this.options.respectDoNotTrack)!==null&&f!==void 0?f:!1,this.previousBeaconData=null,this.lastEventTime=0,this.rateLimited=!1,this.pageLevelData={mux_api_version:this.mux.API_VERSION,mux_embed:this.mux.NAME,mux_embed_version:this.mux.VERSION,viewer_application_name:(a=this.options.platform)===null||a===void 0?void 0:a.name,viewer_application_version:(n=this.options.platform)===null||n===void 0?void 0:n.version,viewer_application_engine:(o=this.options.platform)===null||o===void 0?void 0:o.layout,viewer_device_name:(s=this.options.platform)===null||s===void 0?void 0:s.product,viewer_device_category:\"\",viewer_device_manufacturer:(u=this.options.platform)===null||u===void 0?void 0:u.manufacturer,viewer_os_family:(b=this.options.platform)===null||b===void 0||(p=b.os)===null||p===void 0?void 0:p.family,viewer_os_architecture:(y=this.options.platform)===null||y===void 0||(k=y.os)===null||k===void 0?void 0:k.architecture,viewer_os_version:(v=this.options.platform)===null||v===void 0||(c=v.os)===null||c===void 0?void 0:c.version,viewer_connection_type:sr(),page_url:Ue.default===null||Ue.default===void 0||(T=Ue.default.location)===null||T===void 0?void 0:T.href},this.viewerData=this.disableCookies?{}:rr()}return L(r,[{key:\"send\",value:function(t,i){if(!(!t||!(i!=null&&i.view_id))){if(this.respectDoNotTrack&&ce())return q.info(\"Not sending `\"+t+\"` because Do Not Track is enabled\");if(!i||typeof i!=\"object\")return q.error(\"A data object was expected in send() but was not provided\");var a=this.disableCookies?{}:ar(),n=fe(ue({},this.pageLevelData,i,a,this.viewerData),{event:t,env_key:this.envKey});n.user_id&&(n.viewer_user_id=n.user_id,delete n.user_id);var o,s=((o=n.mux_sample_number)!==null&&o!==void 0?o:0)>=this.sampleRate,u=this._deduplicateBeaconData(t,n),p=ve(u);if(this.lastEventTime=this.mux.utils.now(),s)return q.info(\"Not sending event due to sample rate restriction\",t,n,p);if(this.envKey||q.info(\"Missing environment key (envKey) - beacons will be dropped if the video source is not a valid mux video URL\",t,n,p),!this.rateLimited){if(q.info(\"Sending event\",t,n,p),this.rateLimited=!this.eventQueue.queueEvent(t,p),this.mux.WINDOW_UNLOADING&&t===\"viewend\")this.eventQueue.destroy(!0);else if(this.mux.WINDOW_HIDDEN&&t===\"hb\"?this.eventQueue.flushEvents(!0):ci.indexOf(t)>=0&&this.eventQueue.flushEvents(),this.rateLimited)return n.event=\"eventrateexceeded\",p=ve(n),this.eventQueue.queueEvent(n.event,p),q.error(\"Beaconing disabled due to rate limit.\")}}}},{key:\"destroy\",value:function(){this.eventQueue.destroy(!1)}},{key:\"_deduplicateBeaconData\",value:function(t,i){var a=this,n={},o=i.view_id;if(o===\"-1\"||t===\"viewstart\"||t===\"viewend\"||!this.previousBeaconData||this.mux.utils.now()-this.lastEventTime>=_i)n=ue({},i),o&&(this.previousBeaconData=n),o&&t===\"viewend\"&&(this.previousBeaconData=null);else{var s=t.indexOf(\"request\")===0;Object.entries(i).forEach(function(u){var p=H(u,2),b=p[0],k=p[1];a.previousBeaconData&&(k!==a.previousBeaconData[b]||ui.indexOf(b)>-1||a.objectHasChanged(s,b,k,a.previousBeaconData[b])||a.eventRequiresKey(t,b))&&(n[b]=k,a.previousBeaconData[b]=k)})}return n}},{key:\"objectHasChanged\",value:function(t,i,a,n){return!t||i.indexOf(\"request_\")!==0?!1:i===\"request_response_headers\"||typeof a!=\"object\"||typeof n!=\"object\"?!0:Object.keys(a||{}).length!==Object.keys(n||{}).length}},{key:\"eventRequiresKey\",value:function(t,i){return!!(t===\"renditionchange\"&&i.indexOf(\"video_source_\")===0||li.includes(i)&&di.includes(t))}}]),r}();var fi=function r(e){\"use strict\";D(this,r);var t=0,i=0,a=0,n=0,o=0,s=0,u=0,p=function(y,c){var v=c.request_start,T=c.request_response_start,x=c.request_response_end,m=c.request_bytes_loaded;n++;var f,_;if(T?(f=T-(v!=null?v:0),_=(x!=null?x:0)-T):_=(x!=null?x:0)-(v!=null?v:0),_>0&&m&&m>0){var d=m/_*8e3;o++,i+=m,a+=_,e.data.view_min_request_throughput=Math.min(e.data.view_min_request_throughput||1/0,d),e.data.view_average_request_throughput=i/a*8e3,e.data.view_request_count=n,f>0&&(t+=f,e.data.view_max_request_latency=Math.max(e.data.view_max_request_latency||0,f),e.data.view_average_request_latency=t/o)}},b=function(y,c){n++,s++,e.data.view_request_count=n,e.data.view_request_failed_count=s},k=function(y,c){n++,u++,e.data.view_request_count=n,e.data.view_request_canceled_count=u};e.on(\"requestcompleted\",p),e.on(\"requestfailed\",b),e.on(\"requestcanceled\",k)},Br=fi;var pi=60*60*1e3,vi=function r(e){\"use strict\";var t=this;D(this,r),l(this,\"_lastEventTime\",void 0),e.on(\"before*\",function(i,a){var n=a.viewer_time,o=A.now(),s=t._lastEventTime;if(t._lastEventTime=o,s&&o-s>pi){var u=Object.keys(e.data).reduce(function(b,k){return k.indexOf(\"video_\")===0?Object.assign(b,l({},k,e.data[k])):b},{});e.mux.log.info(\"Received event after at least an hour inactivity, creating a new view\");var p=e.playbackHeartbeat._playheadShouldBeProgressing;e._resetView(Object.assign({viewer_time:n},u)),e.playbackHeartbeat._playheadShouldBeProgressing=p,e.playbackHeartbeat._playheadShouldBeProgressing&&i.type!==\"play\"&&i.type!==\"adbreakstart\"&&(e.emit(\"play\",{viewer_time:n}),i.type!==\"playing\"&&e.emit(\"playing\",{viewer_time:n}))}})},Ur=vi;var mi=[\"viewstart\",\"ended\",\"loadstart\",\"pause\",\"play\",\"playing\",\"ratechange\",\"waiting\",\"adplay\",\"adpause\",\"adended\",\"aderror\",\"adplaying\",\"adrequest\",\"adresponse\",\"adbreakstart\",\"adbreakend\",\"adfirstquartile\",\"admidpoint\",\"adthirdquartile\",\"rebufferstart\",\"rebufferend\",\"seeked\",\"error\",\"hb\",\"requestcompleted\",\"requestfailed\",\"requestcanceled\",\"renditionchange\"],hi=new Set([\"requestcompleted\",\"requestfailed\",\"requestcanceled\"]),yi=function(r){\"use strict\";Dt(t,r);var e=qt(t);function t(i,a,n){D(this,t);var o;o=e.call(this),l(g(o),\"DOM_CONTENT_LOADED_EVENT_END\",void 0),l(g(o),\"NAVIGATION_START\",void 0),l(g(o),\"_destroyed\",void 0),l(g(o),\"_heartBeatTimeout\",void 0),l(g(o),\"adTracker\",void 0),l(g(o),\"dashjs\",void 0),l(g(o),\"data\",void 0),l(g(o),\"disablePlayheadRebufferTracking\",void 0),l(g(o),\"disableRebufferTracking\",void 0),l(g(o),\"errorTracker\",void 0),l(g(o),\"errorTranslator\",void 0),l(g(o),\"emitTranslator\",void 0),l(g(o),\"getAdData\",void 0),l(g(o),\"getPlayheadTime\",void 0),l(g(o),\"getStateData\",void 0),l(g(o),\"stateDataTranslator\",void 0),l(g(o),\"hlsjs\",void 0),l(g(o),\"id\",void 0),l(g(o),\"longResumeTracker\",void 0),l(g(o),\"minimumRebufferDuration\",void 0),l(g(o),\"mux\",void 0),l(g(o),\"playbackEventDispatcher\",void 0),l(g(o),\"playbackHeartbeat\",void 0),l(g(o),\"playbackHeartbeatTime\",void 0),l(g(o),\"playheadTime\",void 0),l(g(o),\"seekingTracker\",void 0),l(g(o),\"sustainedRebufferThreshold\",void 0),l(g(o),\"watchTimeTracker\",void 0),l(g(o),\"currentFragmentPDT\",void 0),l(g(o),\"currentFragmentStart\",void 0),o.DOM_CONTENT_LOADED_EVENT_END=_e.domContentLoadedEventEnd(),o.NAVIGATION_START=_e.navigationStart();var s={debug:!1,minimumRebufferDuration:250,sustainedRebufferThreshold:1e3,playbackHeartbeatTime:25,beaconDomain:\"litix.io\",sampleRate:1,disableCookies:!1,respectDoNotTrack:!1,disableRebufferTracking:!1,disablePlayheadRebufferTracking:!1,errorTranslator:function(y){return y},emitTranslator:function(){for(var y=arguments.length,c=new Array(y),v=0;v<y;v++)c[v]=arguments[v];return c},stateDataTranslator:function(y){return y}};o.mux=i,o.id=a,n!=null&&n.beaconDomain&&o.mux.log.warn(\"The `beaconDomain` setting has been deprecated in favor of `beaconCollectionDomain`. Please change your integration to use `beaconCollectionDomain` instead of `beaconDomain`.\"),n=Object.assign(s,n),n.data=n.data||{},n.data.property_key&&(n.data.env_key=n.data.property_key,delete n.data.property_key),q.level=n.debug?Y.DEBUG:Y.WARN,o.getPlayheadTime=n.getPlayheadTime,o.getStateData=n.getStateData||function(){return{}},o.getAdData=n.getAdData||function(){},o.minimumRebufferDuration=n.minimumRebufferDuration,o.sustainedRebufferThreshold=n.sustainedRebufferThreshold,o.playbackHeartbeatTime=n.playbackHeartbeatTime,o.disableRebufferTracking=n.disableRebufferTracking,o.disableRebufferTracking&&o.mux.log.warn(\"Disabling rebuffer tracking. This should only be used in specific circumstances as a last resort when your player is known to unreliably track rebuffering.\"),o.disablePlayheadRebufferTracking=n.disablePlayheadRebufferTracking,o.errorTranslator=n.errorTranslator,o.emitTranslator=n.emitTranslator,o.stateDataTranslator=n.stateDataTranslator,o.playbackEventDispatcher=new Hr(i,n.data.env_key,n),o.data={player_instance_id:ee(),mux_sample_rate:n.sampleRate,beacon_domain:n.beaconCollectionDomain||n.beaconDomain},o.data.view_sequence_number=1,o.data.player_sequence_number=1;var u=function(){typeof this.data.view_start==\"undefined\"&&(this.data.view_start=this.mux.utils.now(),this.emit(\"viewstart\"))}.bind(g(o));if(o.on(\"viewinit\",function(y,c){this._resetVideoData(),this._resetViewData(),this._resetErrorData(),this._updateStateData(),Object.assign(this.data,c),this._initializeViewData(),this.one(\"play\",u),this.one(\"adbreakstart\",u)}),o.on(\"videochange\",function(y,c){this._resetView(c)}),o.on(\"programchange\",function(y,c){this.data.player_is_paused&&this.mux.log.warn(\"The `programchange` event is intended to be used when the content changes mid playback without the video source changing, however the video is not currently playing. If the video source is changing please use the videochange event otherwise you will lose startup time information.\"),this._resetView(Object.assign(c,{view_program_changed:!0})),u(),this.emit(\"play\"),this.emit(\"playing\")}),o.on(\"fragmentchange\",function(y,c){this.currentFragmentPDT=c.currentFragmentPDT,this.currentFragmentStart=c.currentFragmentStart}),o.on(\"destroy\",o.destroy),typeof window!=\"undefined\"&&typeof window.addEventListener==\"function\"&&typeof window.removeEventListener==\"function\"){var p=function(){var y=typeof o.data.view_start!=\"undefined\";o.mux.WINDOW_HIDDEN=document.visibilityState===\"hidden\",y&&o.mux.WINDOW_HIDDEN&&(o.data.player_is_paused||o.emit(\"hb\"))};window.addEventListener(\"visibilitychange\",p,!1);var b=function(y){y.persisted||o.destroy()};window.addEventListener(\"pagehide\",b,!1),o.on(\"destroy\",function(){window.removeEventListener(\"visibilitychange\",p),window.removeEventListener(\"pagehide\",b)})}o.on(\"playerready\",function(y,c){Object.assign(this.data,c)}),mi.forEach(function(y){o.on(y,function(c,v){y.indexOf(\"ad\")!==0&&this._updateStateData(),Object.assign(this.data,v),this._sanitizeData()}),o.on(\"after\"+y,function(){(y!==\"error\"||this.errorTracker.viewErrored)&&this.send(y)})}),o.on(\"viewend\",function(y,c){Object.assign(o.data,c)});var k=function(c){var v=this.mux.utils.now();this.data.player_init_time&&(this.data.player_startup_time=v-this.data.player_init_time),!this.mux.PLAYER_TRACKED&&this.NAVIGATION_START&&(this.mux.PLAYER_TRACKED=!0,(this.data.player_init_time||this.DOM_CONTENT_LOADED_EVENT_END)&&(this.data.page_load_time=Math.min(this.data.player_init_time||1/0,this.DOM_CONTENT_LOADED_EVENT_END||1/0)-this.NAVIGATION_START)),this.send(\"playerready\"),delete this.data.player_startup_time,delete this.data.page_load_time};return o.one(\"playerready\",k),o.longResumeTracker=new Ur(g(o)),o.errorTracker=new Bt(g(o)),new $t(g(o)),o.seekingTracker=new zt(g(o)),o.playheadTime=new Vt(g(o)),o.playbackHeartbeat=new Ht(g(o)),new Qt(g(o)),o.watchTimeTracker=new Ut(g(o)),new Ft(g(o)),o.adTracker=new Yt(g(o)),new Gt(g(o)),new jt(g(o)),new Jt(g(o)),new Xt(g(o)),new Br(g(o)),n.hlsjs&&o.addHLSJS(n),n.dashjs&&o.addDashJS(n),o.emit(\"viewinit\",n.data),o}return L(t,[{key:\"emit\",value:function(a,n){var o,s=Object.assign({viewer_time:this.mux.utils.now()},n),u=[a,s];if(this.emitTranslator)try{u=this.emitTranslator(a,s)}catch(p){this.mux.log.warn(\"Exception in emit translator callback.\",p)}u!=null&&u.length&&(o=De(X(t.prototype),\"emit\",this)).call.apply(o,[this].concat(W(u)))}},{key:\"destroy\",value:function(){this._destroyed||(this._destroyed=!0,typeof this.data.view_start!=\"undefined\"&&(this.emit(\"viewend\"),this.send(\"viewend\")),this.playbackEventDispatcher.destroy(),this.removeHLSJS(),this.removeDashJS(),window.clearTimeout(this._heartBeatTimeout))}},{key:\"send\",value:function(a){if(this.data.view_id){var n=Object.assign({},this.data),o=[\"player_program_time\",\"player_manifest_newest_program_time\",\"player_live_edge_program_time\",\"player_program_time\",\"video_holdback\",\"video_part_holdback\",\"video_target_duration\",\"video_part_target_duration\"];if(n.video_source_is_live===void 0&&(n.player_source_duration===1/0||n.video_source_duration===1/0?n.video_source_is_live=!0:(n.player_source_duration>0||n.video_source_duration>0)&&(n.video_source_is_live=!1)),n.video_source_is_live||o.forEach(function(b){n[b]=void 0}),n.video_source_url=n.video_source_url||n.player_source_url,n.video_source_url){var s=H(re(n.video_source_url),2),u=s[0],p=s[1];n.video_source_domain=p,n.video_source_hostname=u}delete n.ad_request_id,this.playbackEventDispatcher.send(a,n),this.data.view_sequence_number++,this.data.player_sequence_number++,hi.has(a)||this._restartHeartBeat(),a===\"viewend\"&&delete this.data.view_id}}},{key:\"_resetView\",value:function(a){this.emit(\"viewend\"),this.send(\"viewend\"),this.emit(\"viewinit\",a)}},{key:\"_updateStateData\",value:function(){var a=this.getStateData();if(typeof this.stateDataTranslator==\"function\")try{a=this.stateDataTranslator(a)}catch(n){this.mux.log.warn(\"Exception in stateDataTranslator translator callback.\",n)}Object.assign(this.data,a),this.playheadTime._updatePlayheadTime(),this._sanitizeData()}},{key:\"_sanitizeData\",value:function(){var a=this,n=[\"player_width\",\"player_height\",\"video_source_width\",\"video_source_height\",\"player_playhead_time\",\"video_source_bitrate\"];n.forEach(function(s){var u=parseInt(a.data[s],10);a.data[s]=isNaN(u)?void 0:u});var o=[\"player_source_url\",\"video_source_url\"];o.forEach(function(s){if(a.data[s]){var u=a.data[s].toLowerCase();(u.indexOf(\"data:\")===0||u.indexOf(\"blob:\")===0)&&(a.data[s]=\"MSE style URL\")}})}},{key:\"_resetVideoData\",value:function(){var a=this;Object.keys(this.data).forEach(function(n){n.indexOf(\"video_\")===0&&delete a.data[n]})}},{key:\"_resetViewData\",value:function(){var a=this;Object.keys(this.data).forEach(function(n){n.indexOf(\"view_\")===0&&delete a.data[n]}),this.data.view_sequence_number=1}},{key:\"_resetErrorData\",value:function(){delete this.data.player_error_code,delete this.data.player_error_message,delete this.data.player_error_context,delete this.data.player_error_severity,delete this.data.player_error_business_exception}},{key:\"_initializeViewData\",value:function(){var a=this,n=this.data.view_id=ee(),o=function(){n===a.data.view_id&&O(a.data,\"player_view_count\",1)};this.data.player_is_paused?this.one(\"play\",o):o()}},{key:\"_restartHeartBeat\",value:function(){var a=this;window.clearTimeout(this._heartBeatTimeout),this._heartBeatTimeout=window.setTimeout(function(){a.data.player_is_paused||a.emit(\"hb\")},1e4)}},{key:\"addHLSJS\",value:function(a){if(!a.hlsjs){this.mux.log.warn(\"You must pass a valid hlsjs instance in order to track it.\");return}if(this.hlsjs){this.mux.log.warn(\"An instance of HLS.js is already being monitored for this player.\");return}this.hlsjs=a.hlsjs,Ot(this.mux,this.id,a.hlsjs,{},a.Hls||window.Hls)}},{key:\"removeHLSJS\",value:function(){this.hlsjs&&(Pt(this.hlsjs),this.hlsjs=void 0)}},{key:\"addDashJS\",value:function(a){if(!a.dashjs){this.mux.log.warn(\"You must pass a valid dashjs instance in order to track it.\");return}if(this.dashjs){this.mux.log.warn(\"An instance of Dash.js is already being monitored for this player.\");return}this.dashjs=a.dashjs,Nt(this.mux,this.id,a.dashjs)}},{key:\"removeDashJS\",value:function(){this.dashjs&&(Lt(this.dashjs),this.dashjs=void 0)}}]),t}(Mt),Fr=yi;var he=V(nt());function ot(){return he.default&&!!(he.default.fullscreenElement||he.default.webkitFullscreenElement||he.default.mozFullScreenElement||he.default.msFullscreenElement)}var gi=[\"loadstart\",\"pause\",\"play\",\"playing\",\"seeking\",\"seeked\",\"timeupdate\",\"ratechange\",\"stalled\",\"waiting\",\"error\",\"ended\"],bi={1:\"MEDIA_ERR_ABORTED\",2:\"MEDIA_ERR_NETWORK\",3:\"MEDIA_ERR_DECODE\",4:\"MEDIA_ERR_SRC_NOT_SUPPORTED\"};function st(r,e,t){var i=H(se(e),3),a=i[0],n=i[1],o=i[2],s=r.log,u=r.utils.getComputedStyle,p=r.utils.secondsToMs,b={automaticErrorTracking:!0};if(a){if(o!==\"video\"&&o!==\"audio\")return s.error(\"The element of `\"+n+\"` was not a media element.\")}else return s.error(\"No element was found with the `\"+n+\"` query selector.\");a.mux&&(a.mux.destroy(),delete a.mux,s.warn(\"Already monitoring this video element, replacing existing event listeners\"));var k={getPlayheadTime:function(){return p(a.currentTime)},getStateData:function(){var v,T,x,m=((v=(T=this).getPlayheadTime)===null||v===void 0?void 0:v.call(T))||p(a.currentTime),f=this.hlsjs&&this.hlsjs.url,_=this.dashjs&&typeof this.dashjs.getSource==\"function\"&&this.dashjs.getSource(),d={player_is_paused:a.paused,player_width:parseInt(u(a,\"width\")),player_height:parseInt(u(a,\"height\")),player_autoplay_on:a.autoplay,player_preload_on:a.preload,player_language_code:a.lang,player_is_fullscreen:ot(),video_poster_url:a.poster,video_source_url:f||_||a.currentSrc,video_source_duration:p(a.duration),video_source_height:a.videoHeight,video_source_width:a.videoWidth,view_dropped_frame_count:a==null||(x=a.getVideoPlaybackQuality)===null||x===void 0?void 0:x.call(a).droppedVideoFrames};if(a.getStartDate&&m>0){var h=a.getStartDate();if(h&&typeof h.getTime==\"function\"&&h.getTime()){var w=h.getTime();if(d.player_program_time=w+m,a.seekable.length>0){var E=w+a.seekable.end(a.seekable.length-1);d.player_live_edge_program_time=E}}}return d}};t=Object.assign(b,t,k),t.data=Object.assign({player_software:\"HTML5 Video Element\",player_mux_plugin_name:\"VideoElementMonitor\",player_mux_plugin_version:r.VERSION},t.data),a.mux=a.mux||{},a.mux.deleted=!1,a.mux.emit=function(c,v){r.emit(n,c,v)},a.mux.updateData=function(c){a.mux.emit(\"hb\",c)};var y=function(){s.error(\"The monitor for this video element has already been destroyed.\")};a.mux.destroy=function(){Object.keys(a.mux.listeners).forEach(function(c){a.removeEventListener(c,a.mux.listeners[c],!1)}),delete a.mux.listeners,a.mux.destroy=y,a.mux.swapElement=y,a.mux.emit=y,a.mux.addHLSJS=y,a.mux.addDashJS=y,a.mux.removeHLSJS=y,a.mux.removeDashJS=y,a.mux.updateData=y,a.mux.setEmitTranslator=y,a.mux.setStateDataTranslator=y,a.mux.setGetPlayheadTime=y,a.mux.deleted=!0,r.emit(n,\"destroy\")},a.mux.swapElement=function(c){var v=H(se(c),3),T=v[0],x=v[1],m=v[2];if(T){if(m!==\"video\"&&m!==\"audio\")return r.log.error(\"The element of `\"+x+\"` was not a media element.\")}else return r.log.error(\"No element was found with the `\"+x+\"` query selector.\");T.muxId=a.muxId,delete a.muxId,T.mux=T.mux||{},T.mux.listeners=Object.assign({},a.mux.listeners),delete a.mux.listeners,Object.keys(T.mux.listeners).forEach(function(f){a.removeEventListener(f,T.mux.listeners[f],!1),T.addEventListener(f,T.mux.listeners[f],!1)}),T.mux.swapElement=a.mux.swapElement,T.mux.destroy=a.mux.destroy,delete a.mux,a=T},a.mux.addHLSJS=function(c){r.addHLSJS(n,c)},a.mux.addDashJS=function(c){r.addDashJS(n,c)},a.mux.removeHLSJS=function(){r.removeHLSJS(n)},a.mux.removeDashJS=function(){r.removeDashJS(n)},a.mux.setEmitTranslator=function(c){r.setEmitTranslator(n,c)},a.mux.setStateDataTranslator=function(c){r.setStateDataTranslator(n,c)},a.mux.setGetPlayheadTime=function(c){c||(c=t.getPlayheadTime),r.setGetPlayheadTime(n,c)},r.init(n,t),r.emit(n,\"playerready\"),a.paused||(r.emit(n,\"play\"),a.readyState>2&&r.emit(n,\"playing\")),a.mux.listeners={},gi.forEach(function(c){c===\"error\"&&!t.automaticErrorTracking||(a.mux.listeners[c]=function(){var v={};if(c===\"error\"){if(!a.error||a.error.code===1)return;v.player_error_code=a.error.code,v.player_error_message=bi[a.error.code]||a.error.message}r.emit(n,c,v)},a.addEventListener(c,a.mux.listeners[c],!1))})}function ut(r,e,t,i){var a=i;if(r&&typeof r[e]==\"function\")try{a=r[e].apply(r,t)}catch(n){q.info(\"safeCall error\",n)}return a}var ge=V(J()),ye;ge.default&&ge.default.WeakMap&&(ye=new WeakMap);function dt(r,e){if(!r||!e||!ge.default||typeof ge.default.getComputedStyle!=\"function\")return\"\";var t;return ye&&ye.has(r)&&(t=ye.get(r)),t||(t=ge.default.getComputedStyle(r,null),ye&&ye.set(r,t)),t.getPropertyValue(e)}function lt(r){return Math.floor(r*1e3)}var le={TARGET_DURATION:\"#EXT-X-TARGETDURATION\",PART_INF:\"#EXT-X-PART-INF\",SERVER_CONTROL:\"#EXT-X-SERVER-CONTROL\",INF:\"#EXTINF\",PROGRAM_DATE_TIME:\"#EXT-X-PROGRAM-DATE-TIME\",VERSION:\"#EXT-X-VERSION\",SESSION_DATA:\"#EXT-X-SESSION-DATA\"},Fe=function(e){return this.buffer=\"\",this.manifest={segments:[],serverControl:{},sessionData:{}},this.currentUri={},this.process(e),this.manifest};Fe.prototype.process=function(r){var e;for(this.buffer+=r,e=this.buffer.indexOf(\"\\n\");e>-1;e=this.buffer.indexOf(\"\\n\"))this.processLine(this.buffer.substring(0,e)),this.buffer=this.buffer.substring(e+1)};Fe.prototype.processLine=function(r){var e=r.indexOf(\":\"),t=ki(r,e),i=t[0],a=t.length===2?_t(t[1]):void 0;if(i[0]!==\"#\")this.currentUri.uri=i,this.manifest.segments.push(this.currentUri),this.manifest.targetDuration&&!(\"duration\"in this.currentUri)&&(this.currentUri.duration=this.manifest.targetDuration),this.currentUri={};else switch(i){case le.TARGET_DURATION:{if(!isFinite(a)||a<0)return;this.manifest.targetDuration=a,this.setHoldBack();break}case le.PART_INF:{ct(this.manifest,t),this.manifest.partInf.partTarget&&(this.manifest.partTargetDuration=this.manifest.partInf.partTarget),this.setHoldBack();break}case le.SERVER_CONTROL:{ct(this.manifest,t),this.setHoldBack();break}case le.INF:{a===0?this.currentUri.duration=.01:a>0&&(this.currentUri.duration=a);break}case le.PROGRAM_DATE_TIME:{var n=a,o=new Date(n);this.manifest.dateTimeString||(this.manifest.dateTimeString=n,this.manifest.dateTimeObject=o),this.currentUri.dateTimeString=n,this.currentUri.dateTimeObject=o;break}case le.VERSION:{ct(this.manifest,t);break}case le.SESSION_DATA:{var s=xi(t[1]),u=Ce(s);Object.assign(this.manifest.sessionData,u)}}};Fe.prototype.setHoldBack=function(){var r=this.manifest,e=r.serverControl,t=r.targetDuration,i=r.partTargetDuration;if(e){var a=\"holdBack\",n=\"partHoldBack\",o=t&&t*3,s=i&&i*2;t&&!e.hasOwnProperty(a)&&(e[a]=o),o&&e[a]<o&&(e[a]=o),i&&!e.hasOwnProperty(n)&&(e[n]=i*3),i&&e[n]<s&&(e[n]=s)}};var ct=function(r,e){var t=Vr(e[0].replace(\"#EXT-X-\",\"\")),i;Ei(e[1])?(i={},i=Object.assign(wi(e[1]),i)):i=_t(e[1]),r[t]=i},Vr=function(r){return r.toLowerCase().replace(/-(\\w)/g,function(e){return e[1].toUpperCase()})},_t=function(r){if(r.toLowerCase()===\"yes\"||r.toLowerCase()===\"no\")return r.toLowerCase()===\"yes\";var e=r.indexOf(\":\")!==-1?r:parseFloat(r);return isNaN(e)?r:e},Ti=function(r){var e={},t=r.split(\"=\");if(t.length>1){var i=Vr(t[0]);e[i]=_t(t[1])}return e},wi=function(r){for(var e=r.split(\",\"),t={},i=0;e.length>i;i++){var a=e[i],n=Ti(a);t=Object.assign(n,t)}return t},Ei=function(r){return r.indexOf(\"=\")>-1},ki=function(r,e){return e===-1?[r]:[r.substring(0,e),r.substring(e+1)]},xi=function(r){var e={};if(r){var t=r.search(\",\"),i=r.slice(0,t),a=r.slice(t+1),n=[i,a];return n.forEach(function(o,s){for(var u=o.replace(/['\"]+/g,\"\").split(\"=\"),p=0;p<u.length;p++)u[p]===\"DATA-ID\"&&(e[\"DATA-ID\"]=u[1-p]),u[p]===\"VALUE\"&&(e.VALUE=u[1-p])}),{data:e}}},Wr=Fe;var Di={safeCall:ut,safeIncrement:O,getComputedStyle:dt,secondsToMs:lt,assign:Object.assign,headersStringToObject:pe,cdnHeadersToRequestId:de,extractHostnameAndDomain:re,extractHostname:F,manifestParser:Wr,generateShortID:Oe,generateUUID:ee,now:A.now,findMediaElement:se},jr=Di;var Si={PLAYER_READY:\"playerready\",VIEW_INIT:\"viewinit\",VIDEO_CHANGE:\"videochange\",PLAY:\"play\",PAUSE:\"pause\",PLAYING:\"playing\",TIME_UPDATE:\"timeupdate\",SEEKING:\"seeking\",SEEKED:\"seeked\",REBUFFER_START:\"rebufferstart\",REBUFFER_END:\"rebufferend\",ERROR:\"error\",ENDED:\"ended\",RENDITION_CHANGE:\"renditionchange\",ORIENTATION_CHANGE:\"orientationchange\",AD_REQUEST:\"adrequest\",AD_RESPONSE:\"adresponse\",AD_BREAK_START:\"adbreakstart\",AD_PLAY:\"adplay\",AD_PLAYING:\"adplaying\",AD_PAUSE:\"adpause\",AD_FIRST_QUARTILE:\"adfirstquartile\",AD_MID_POINT:\"admidpoint\",AD_THIRD_QUARTILE:\"adthirdquartile\",AD_ENDED:\"adended\",AD_BREAK_END:\"adbreakend\",AD_ERROR:\"aderror\",REQUEST_COMPLETED:\"requestcompleted\",REQUEST_FAILED:\"requestfailed\",REQUEST_CANCELLED:\"requestcanceled\",HEARTBEAT:\"hb\",DESTROY:\"destroy\"},Gr=Si;var Ri=\"mux-embed\",qi=\"5.9.0\",Ai=\"2.1\",C={},ne=function(e){var t=arguments;typeof e==\"string\"?ne.hasOwnProperty(e)?be.default.setTimeout(function(){t=Array.prototype.splice.call(t,1),ne[e].apply(null,t)},0):q.warn(\"`\"+e+\"` is an unknown task\"):typeof e==\"function\"?be.default.setTimeout(function(){e(ne)},0):q.warn(\"`\"+e+\"` is invalid.\")},Oi={loaded:A.now(),NAME:Ri,VERSION:qi,API_VERSION:Ai,PLAYER_TRACKED:!1,monitor:function(e,t){return st(ne,e,t)},destroyMonitor:function(e){var t=H(se(e),1),i=t[0];i&&i.mux&&typeof i.mux.destroy==\"function\"?i.mux.destroy():q.error(\"A video element monitor for `\"+e+\"` has not been initialized via `mux.monitor`.\")},addHLSJS:function(e,t){var i=Q(e);C[i]?C[i].addHLSJS(t):q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},addDashJS:function(e,t){var i=Q(e);C[i]?C[i].addDashJS(t):q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},removeHLSJS:function(e){var t=Q(e);C[t]?C[t].removeHLSJS():q.error(\"A monitor for `\"+t+\"` has not been initialized.\")},removeDashJS:function(e){var t=Q(e);C[t]?C[t].removeDashJS():q.error(\"A monitor for `\"+t+\"` has not been initialized.\")},init:function(e,t){ce()&&t&&t.respectDoNotTrack&&q.info(\"The browser's Do Not Track flag is enabled - Mux beaconing is disabled.\");var i=Q(e);C[i]=new Fr(ne,i,t)},emit:function(e,t,i){var a=Q(e);C[a]?(C[a].emit(t,i),t===\"destroy\"&&delete C[a]):q.error(\"A monitor for `\"+a+\"` has not been initialized.\")},updateData:function(e,t){var i=Q(e);C[i]?C[i].emit(\"hb\",t):q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},setEmitTranslator:function(e,t){var i=Q(e);C[i]?C[i].emitTranslator=t:q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},setStateDataTranslator:function(e,t){var i=Q(e);C[i]?C[i].stateDataTranslator=t:q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},setGetPlayheadTime:function(e,t){var i=Q(e);C[i]?C[i].getPlayheadTime=t:q.error(\"A monitor for `\"+i+\"` has not been initialized.\")},checkDoNotTrack:ce,log:q,utils:jr,events:Gr,WINDOW_HIDDEN:!1,WINDOW_UNLOADING:!1};Object.assign(ne,Oi);typeof be.default!=\"undefined\"&&typeof be.default.addEventListener==\"function\"&&be.default.addEventListener(\"pagehide\",function(r){r.persisted||(ne.WINDOW_UNLOADING=!0)},!1);var Ed=ne;export{Ed as default};\n/*!\n* JavaScript Cookie v2.1.3\n* https://github.com/js-cookie/js-cookie\n*\n* Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n* Released under the MIT license\n*/\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC11CA;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9BA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC5UA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACjYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmCA;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;AC9GA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;AClVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;;AClkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAOA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;ACvzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACvGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;ACzRA;AAMA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;AChNA;AAKA;AACA;AAKA;AASA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;ACz4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;;;;;;;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;;;;;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;ACvuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;ACvNA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;AChJA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;;;;;ACvcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;AC30BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;ACjLA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;ACzJA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;AC5NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwBA;;;;;;;;;;AC1NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;;;;;;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;;;;;;;;;;;;;;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;;;;;;;;;;;;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;;;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;;;;;;;;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|