1import{ae as yn,b as w,aE as pn,v as W,f as ee,i as nt,aF as E,d as vn,ay as mn,u as hn,a6 as gn,c as se,r as wn,L as bn,a as Ne,a4 as Pn,ah as Tn,w as Pe,e as Sn,g as _n,n as Rn,h as An,j as En,t as kt,l as rt,p as Fn,a0 as Ln,s as Vn,q as xn,a2 as In,aG as Bn,F as Mn,N as kn,aH as Dn}from"./index.16ba4ea0.js";import{intifaceMetric as Cn,bluetoothMetric as Nn,fleshyX3Metric as $n,fstMetric as qn,vacuglideMetric as On,autoblowMetric as Un,handyMetric as Hn,loobMetric as Wn,osrMetric as Gn}from"./metric.84224865.js";const Xn=yn("bunny",()=>{const p=w(!1),V=w(!1);function C(b,y=!1){V.value=y,p.value=b}return{isBunny:p,manualOverride:V,setBunny:C}}),Yn={},jn={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 50 50"};function zn(p,V){return W(),ee("svg",jn,[...V[0]||(V[0]=[nt("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"#000000","stroke-width":"5"},null,-1),nt("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"#3172ec","stroke-dasharray":"90 40","stroke-linecap":"round","stroke-width":"5"},[nt("animateTransform",{attributeName:"transform",dur:"1s",from:"0 25 25",repeatCount:"indefinite",to:"360 25 25",type:"rotate"})],-1)])])}const Kn=pn(Yn,[["render",zn]]),at="Video is still processing. Please try again shortly.",Dt="Script is still processing. Toy sync may not be available yet.",Jn=30*60*1e3,Qn=10*60*1e3;function st(p){return(p||"").trim()!==""}function Zn(p){return(p||"").trim()!==""}function ot(p){return!st(p.stream_url)&&Nt(p,Jn)}function Ct(p){var V;return!Zn((V=p.script)==null?void 0:V.url)&&Nt(p,Qn)}function Nt(p,V){const C=p.updated_at||p.created_at;if(!C)return!1;const b=new Date(C).getTime();return Number.isNaN(b)?!1:Date.now()-b<V}const Te=(p,V,C,b)=>(p===E.Intiface?C:b).limit(V),er=["src","type","quality"],tr={key:0,class:"absolute inset-0 z-20 flex flex-col items-center justify-center bg-black/45 backdrop-blur-sm rounded-md gap-4"},nr={key:0,class:"text-white text-lg font-medium bg-black/60 px-4 py-2 rounded-md"},rr={key:1,class:"absolute top-3 right-3 z-30 rounded-md bg-red-600 px-4 py-2 text-white shadow-lg"},ar={name:"VRPlayer"},cr=vn({...ar,props:{video:{},playlist:{},shuffleMode:{type:Boolean},repeatMode:{type:Boolean},loop:{type:Boolean}},setup(p){const V=Vn(),C=xn(),b=Xn(),y=mn(),it=hn(),{handy:G,autoblow:x,vacuglide:I,bluetoothFleshyThrust:te,fleshyX3:lt,osr:or,loob:sr}=gn(y),i=p,X=w(null),Se=w([]),f=w(""),$e=w(!1),ie=w(!1),_e=w(!1),ne=w(!1),le=w(!1),ue=w(0),ut=se(()=>ue.value>0),Re=w(""),qe=w(!1),n=wn({ready:!1,playing:!1,paused:!0,buffering:!1,ended:!1,currentTime:0,currentPos:0});let o=null,c=[],O=null,ce=-1,h=0,Ae=0,Ee=null,Fe=null,Y=null,Le=null,de=null,fe=null,j=null,B=null,re=null,F=0;const $t=3e3,qt=15e3,Oe=3e4,Ot=300,ye=w(!1),pe=w(0),Ve=w(!1),ve=w(!1),ct=w(!1),me=w(!1),dt=w(0),he=e=>Math.max(0,Math.min(100,e)),z=e=>Array.isArray(e)&&Number.isFinite(e[0])&&Number.isFinite(e[1]),Ue=(e,t)=>{for(let r=t-1;r>=0;r--)if(z(e[r]))return r;return-1},Ut=(e,t)=>{for(let r=t;r<e.length;r++)if(z(e[r]))return r;return-1},Ht=e=>{for(let t=e.length-1;t>=0;t--)if(z(e[t]))return t;return-1},ft=(e,t,r=0)=>{let a=Math.max(0,Math.min(r,e.length));for(;a<e.length;){const u=e[a];if(!z(u)){a++;continue}if(u[0]>=t)break;a++}return a},D=(e=0)=>{h=ft(c,Math.max(0,e),0),ce=Ue(c,h)},He=e=>{var t,r;return(r=e==null?void 0:e.getAttribute("dl8-id"))!=null?r:(t=e==null?void 0:e.contentId)!=null?t:null},yt=e=>!!e&&typeof e.then=="function",We=e=>!e||e.trim()==="",Ge=()=>We(i.video.stream_url),ae=()=>{var e;return"__dl8__iframe"in window||"__dl8__delightVrApp"in window||!!((e=window.customElements)!=null&&e.get("dl8-video"))},xe=e=>Boolean(e&&e.isConnected&&typeof e.play=="function"&&typeof e.pause=="function"&&ae()),Wt=e=>!e||typeof e.readyState!="number"?!1:e.readyState>=3,Gt=e=>{if(!e||e.paused||e.ended)return!1;if(e.currentTime>0)return!0;const r=(typeof e.readyState=="number"?e.readyState:2)>=2,a=n.playing||!n.paused;return r&&a},pt=e=>Gt(e)||Boolean(e&&!e.paused&&!e.ended),N=e=>!e||e.paused||e.ended||!xe(e)||!Wt(e)?!1:e.currentTime>0||n.playing||!n.paused,vt=se(()=>f.value.includes("Source not found")||f.value.includes("failed to initialize")||f.value===at),ge=se(()=>{if(vt.value||n.playing&&!n.paused&&!n.ended)return!0;const e=X.value;return N(e)||n.ready&&n.playing&&!n.paused&&!n.ended&&n.currentTime>0}),mt=()=>{const e=X.value;return!!e&&N(e)},Xt=se(()=>{if(ut.value)return!0;
1if($e.value)return _e.value;if(vt.value||ge.value||n.playing&&!n.paused&&!n.ended)return!1;const e=X.value;return N(e)?!1:!n.ready||n.buffering&&!n.paused}),$=e=>{const t=e&&Number.isFinite(e.currentTime)?e.currentTime:n.currentTime;return n.currentTime=t,t},Xe=(e,t)=>{const r=e.detail,a=He(t);return Boolean((r==null?void 0:r.id)&&a&&r.id===a)},Ye=async(e,t)=>{if(!!t)try{const r=t();yt(r)&&await r}catch(r){console.warn(`[VRPlayer] ${e} failed`,r)}},Ie=async e=>{!e||await Ye("play",()=>e.play())},Yt=async e=>{!e||typeof e.start!="function"||await Ye("start",()=>{var t;return(t=e.start)==null?void 0:t.call(e)})},je=async(e,t)=>{if(!(!e||!Number.isFinite(t))){if(typeof e.seek=="function"){await Ye("seek",()=>{var r;return(r=e.seek)==null?void 0:r.call(e,t)});return}try{e.currentTime=t}catch(r){console.warn("[VRPlayer] seek fallback failed",r)}}},jt=async e=>!e||F<=0?!1:(await je(e,F),n.currentTime=F,D(F*1e3),!0),ze=()=>{if(!!te.value.connected)try{const e=te.value.resetPosition();yt(e)&&e.catch(t=>console.warn("[VRPlayer] Failed to reset Erojoy Thrust Sync position",t))}catch(e){console.warn("[VRPlayer] Failed to reset Erojoy Thrust Sync position",e)}},Be=()=>{Ee!==null&&(clearInterval(Ee),Ee=null)},ht=()=>{Fe!==null&&(clearTimeout(Fe),Fe=null),Y!==null&&(clearInterval(Y),Y=null),f.value=""},gt=()=>{Le!==null&&(clearTimeout(Le),Le=null)},Ke=()=>{de!==null&&(clearTimeout(de),de=null)},wt=()=>{fe!==null&&(clearTimeout(fe),fe=null)},Me=e=>{wt(),f.value=e,fe=window.setTimeout(()=>{fe=null,f.value===e&&(f.value="")},5e3)},zt=()=>{gt(),_e.value=!1,Le=window.setTimeout(()=>{_e.value=!0},$t)},U=()=>{gt(),$e.value=!1,_e.value=!1},K=()=>{ie.value=!1,ht()},Je=(e=o)=>ct.value?n.playing||!n.paused||ne.value||le.value?!0:Boolean(e&&!e.paused&&!e.ended):!1,ke=(e=o)=>me.value?!0:Je(e),De=()=>{if(Ge()||ye.value||Ve.value||We(i.video.stream_url_selfhosted)||We(i.video.stream_url)||!ke(o)||ie.value)return;ht(),ie.value=!0;const e=pe.value;let t=Oe/1e3;Y=window.setInterval(()=>{if(e!==pe.value||!ie.value||Ve.value){K();return}t-=1,Oe/1e3-t>=qt/1e3&&t>0&&!mt()&&(f.value=`Stream is slow. Switching server in ${t}s...`),t<=0&&Y!==null&&(clearInterval(Y),Y=null)},1e3),Fe=window.setTimeout(()=>{e!==pe.value||Ve.value||ye.value||!ie.value||(et({targetIsBunny:!b.isBunny,origin:"auto"}),ye.value=!0)},Oe)},J=(e=o)=>N(e)?(e&&$(e),n.ready=!0,n.buffering=!1,f.value="",K(),pt(e)&&(n.playing=!0,n.paused=!1,n.ended=!1),!0):!1,Kt=()=>{if(!!o){if($(o),N(o)){J(o);return}xe(o)&&n.buffering&&!o.paused&&!o.ended&&ke(o)&&De()}},Jt=[".dl8-loading-overlay",'[class*="loading-overlay"]','[class*="spinner"]','[class*="loader"]'].join(","),bt=(e,t)=>{e.querySelectorAll(Jt).forEach(t),e.querySelectorAll("*").forEach(r=>{const a=r.shadowRoot;a&&bt(a,t)})},Pt=e=>{document.documentElement.classList.toggle("vr-player-dl8-playing",e);const t=X.value;!t||(t.classList.toggle("vr-player__dl8--hide-loading",e),bt(t,r=>{if(e){if(r.getAttribute("data-vr-player-hidden-while-playing")==="true"&&r.style.getPropertyValue("display")==="none"&&r.style.getPropertyPriority("display")==="important")return;r.setAttribute("data-vr-player-hidden-while-playing","true"),r.style.setProperty("display","none","important"),r.style.setProperty("visibility","hidden","important"),r.style.setProperty("opacity","0","important"),r.style.setProperty("pointer-events","none","important");return}r.getAttribute("data-vr-player-hidden-while-playing")==="true"&&(r.removeAttribute("data-vr-player-hidden-while-playing"),r.style.removeProperty("display"),r.style.removeProperty("visibility"),r.style.removeProperty("opacity"),r.style.removeProperty("pointer-events"))}))},Qe=()=>{re===null&&(re=window.requestAnimationFrame(()=>{re=null,Pt(ge.value)}))},Qt=e=>{B==null||B.disconnect(),B=new MutationObserver(()=>{Qe()}),B.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class","style"]}),Qe()},Zt=e=>!e||typeof e!="string"?"STEREO_180_LR":e.toUpperCase(),en=()=>new Promise((e,t)=>{if(ae()){e();return}let r=!1,a=null,u=null;const P=(S,L,g)=>{a!==null&&(clearInterval(a),a=null),u!==null&&(clearTimeout(u),u=null),S&&L&&S.removeEventListener("load",L),S&&g&&S.removeEventListener("error",g)},l=(S,L,g,s)=>{if(!r){if(r=!0,P(L,g,s),S){t(S);return}e()}},d=document.querySelector('script[src="/vr.js"]');if(d){const S=()=>{ae()&&l(void 0,d,S,L)},L=()=>l(new Error("Failed to load DL8 runtime"),d,S,L);d.addEventListener("load",S,{once:!0}),d.addEventListener("error",L,{once:!0}),a=window.setInterval(()=>{ae()&&l(void 0,d,S,L)},50),u=window.setTimeout(()=>{l(new Error("Timed out waiting for DL8 runtime"),d,S,L)},5e3),ae()&&l(void 0,d,S,L);return}const T=document.createElement("script");T.src="/vr.js";const _=()=>l(void 0,T,_,R),R=()=>l(new Error("Failed to load DL8 runtime"),T,_,R);a=window.setInterval(()=>{ae()&&l(void 0,T,_,R)},50),u=window.setTimeout(()=>{l(new Error("Timed out waiting for DL8 runtime"),T,_,R)},5e3),T.onload=_,T.onerror=R,document.head.appendChild(T)}),tn=e=>
1new Promise(t=>{let r=!1,a=null,u=null;const P=()=>{r||(r=!0,document.removeEventListener("x-dl8-evt-ready",d),document.removeEventListener("x-dl8-evt-element-connected",T),a!==null&&(clearInterval(a),a=null),u!==null&&(clearTimeout(u),u=null),n.ready=xe(e),t())},l=()=>{xe(e)&&P()},d=()=>l(),T=_=>{const R=_.detail;((R==null?void 0:R.element)===e||(R==null?void 0:R.id)&&R.id===He(e))&&l()};document.addEventListener("x-dl8-evt-ready",d),document.addEventListener("x-dl8-evt-element-connected",T),a=window.setInterval(l,50),u=window.setTimeout(P,5e3),l()}),Tt=async e=>St(e)?await Ne.videos.getBunnySources(i.video.id):await Ne.videos.getSources(i.video.id),St=e=>e||!st(i.video.stream_url),Ze=()=>{U(),n.ready=!1,n.buffering=!1,f.value=at},_t=()=>f.value===at,nn=async(e,t=!1,r)=>{const a=St(e);let u=a,P=[];$e.value=!0,zt(),n.buffering=!0,n.ready=!1,K(),le.value=t,f.value="";try{P=await Tt(a)}catch(l){if(a&&ot(i.video)){Ze();return}if(Boolean(i.video.stream_url_selfhosted)&&!a&&ke(o)){mt()||(f.value="FT Server is taking too long to respond. Switching to EXT Server...");try{P=await Tt(!0),u=!0,ye.value=!0,b.isBunny!==!0&&(ve.value=!0,b.setBunny(!0)),window.setTimeout(()=>{f.value=""},3e3)}catch(T){if(ot(i.video)){Ze();return}console.error("[VRPlayer] Both FT and EXT servers failed:",T),f.value="Source not found on both servers.",U(),n.buffering=!1;return}}else{console.error("[VRPlayer] Failed to fetch sources:",l),f.value="Source not found. Please try again.",U(),n.buffering=!1;return}}if(typeof r=="number"&&r!==pe.value){U();return}if(!P.length&&u&&ot(i.video)){Ze();return}if(b.isBunny!==u&&(ve.value=!0,b.setBunny(u)),Se.value=P.map(l=>({url:l.url.startsWith("http")?l.url:`/api/${l.url}`,type:l.format==="mp4"?"video/mp4":"application/x-mpegurl",quality:l.quality+"p"})),!Se.value.length){if(_t())return;n.ready=!1,n.buffering=!1,f.value="Source not found. Please try another video.",U();return}if(U(),dt.value++,await In(),j&&(j(),j=null),B==null||B.disconnect(),B=null,o=X.value,!!o){if(!o.querySelector("dl8-advertisement")){const l=document.createElement("dl8-advertisement");l.setAttribute("on-request-advertisement","onRequestAdvertisement"),o.appendChild(l)}await tn(o),j=an(o),Qt(o);try{F>0&&(await je(o,F),n.currentTime=F,D(F*1e3)),t?await Yt(o):o.pause()}catch(l){console.error("[VRPlayer] Error during video playback:",l)}t?await Ie(o):(me.value=!1,n.paused=!0,n.playing=!1,n.buffering=!1)}},et=async e=>{const{origin:t}=e,r=Ge()?!0:e.targetIsBunny,a=++pe.value,u=t!=="init"&&Je(o);me.value=u,t==="manual"&&!Ge()&&(Ve.value=!0),F=Math.max((o==null?void 0:o.currentTime)||0,n.currentTime||0),console.log(`[VRPlayer] runServerSwitch origin=${t} bunny=${r} resume=${u} pendingTime=${F}`),await nn(r,u,a)},rn=async()=>{var e;if(c=[],D(0),!((e=i.video.script)!=null&&e.url)){Ct(i.video)?Me(Dt):Me("Script not found. Toys may not sync for this video.");return}try{if(c=(await Ne.videos.getScript(i.video.script.url)).filter(z),!c.length)throw new Error("Script contains no valid actions");D(n.currentTime*1e3)}catch(t){console.error("[VRPlayer] Failed to load script actions",t),c=[],D(0),Ct(i.video)?Me(Dt):Me("Script failed to load. Toys may not sync for this video.")}},tt=async(e,t)=>{var a;if(!((a=i.video.script)!=null&&a.url))return;let r=!1;try{ue.value++,Re.value=`Preparing ${e}...`,o&&pt(o)&&o.paused&&(o.pause(),r=!0),await t(Bn(i.video.script.url))}catch(u){console.error(`[VRPlayer] Failed to prepare ${e}:`,u),f.value=`Failed to prepare ${e}`}finally{if(ue.value=Math.max(0,ue.value-1),Re.value="",(r||qe.value)&&o&&ue.value===0){qe.value=!1;try{await Ie(o)}catch(u){console.error("[VRPlayer] safePlay after prep failed",u)}}}},Rt=async()=>{!G.value.connected||await tt("The Handy",e=>y.handy.prepare(e))},At=async()=>{!x.value.connected||await tt("Autoblow",e=>x.value.prepare(e))},Et=async()=>{!I.value.connected||await tt("VacuGlide",e=>I.value.prepare(e))},we=()=>{Be(),y.devices.forEach(e=>{switch(e.connector){case E.Handy:y.handy.stop();break;case E.Autoblow:y.autoblow.stop();break;case E.VacuGlide:y.vacuglide.stop();break;case E.Intiface:e.instance.stop();break;case E.Bluetooth:e.instance.stop();break;case E.BluetoothFleshyThrust:ze();break;case E.FleshyX3:y.fleshyX3.stop();break}})},Ft=e=>{console.log("VRPLAYER: restartDevicesAt called with timeMs:",e),G.value.connected&&(console.log("VRPLAYER: Restarting Handy"),G.value.play(e)),x.value.connected&&x.value.iscsvsent&&(console.log("VRPLAYER: Restarting Autoblow"),x.value.play(e)),I.value.connected&&I.value.iscsvsent&&(console.log("VRPLAYER: Restarting VacuGlide"),I.value.play(e)),te.value.connected&&(console.log("VRPLAYER: Resetting Bluetooth Fleshy Thrust position"),te.value.resetPosition())},an=e=>{let t=-1;const r=()=>{if(!n.playing||n.paused)return;const s=Math.floor($(e)*1e3);t!==-1&&Math.abs(s-t)<100||(t=s,G.value.connected&&G.value.play(s),x.value.connected&&x.value.iscsvsent&&(x.value.lastAction="",x.value.play(s)),I.value.connected&&I.value.iscsvsent&&(I.value.lastAction="",I.value.play(s)))},a=s=>{typeof s=="number"&&Number.isFinite(s)?n.currentTime=s:$(e),D(n.currentTime*1e3),ze()},u=()=>{$(e),N(e)&&J(e)},P=()=>{if(ct.value=!0,ut.value){e.pause(),n.playing=!1,n.paused=!0,qe.value=!0;return}if(x.value.connected&&!x.value.iscsvsent){e.pause(),n.playing=!1,n.paused=!0,f.value="Failed to prepare video.";return}if(I.value.connected&&!I.value.iscsvsent){e.pause(),n.playing=!1,n.paused=!0,f.value="Failed to prepare video for VacuGlide.";return}n.playing&&!n.paused&&!n.buffering||(n.playing=!0,n.paused=!1,n.ended=!1,$(e),D(n.currentTime*1e3),_t()||(f.value=""),N(e)&&J(e),ze(),r())},l=s=>{Ke(),K(),a(s)},d=s=>{Ke(),K(),a(s),r(),de=window.setTimeout(()=>{de=null,n.buffering&&!e.paused&&!e.ended&&ke(e)&&De()},Ot)},T=()=>{$(e),n.playing=!1,n.paused=!0,n.buffering=!1,me.value=!1,t=-1,we()},g=[[e,"timeupdate",u],[e,"play",P],[e,"seeking",()=>l()],[e,"seeked",()=>d()],[e,"pause",T],[e,"waiting",()=>{if($(e),N(e)){J(e);return}if(!Je(e)){ne.value=!1,n.buffering=!1;return}n.buffering=!0,ne.value=!0,we(),De()}],[e,"canplay",()=>{(async()=>(F>0&&(await jt(e),F=0),N(e)?J(e):!e.paused&&!e.ended&&(n.buffering=!0,De()),n.playing&&(G.value.connected||x.value.connected||I.value.connected)&&r(),(le.value||ne.value)&&(le.value=!1,Ie(e),ne.value=!1)))()}],[e,"playing",()=>{n.playing=!0,n.paused=!1,n.ended=!1,n.buffering=!1,me.value=!1,J(e),ne.value=!1,le.value=!1,D(n.currentTime*1e3),t=-1,r()}],[e,"ended",()=>{$(e),n.playing=!1,n.paused=!0,n.ended=!0,n.buffering=!1,D(0),F=0,t=-1,i.repeatMode&&!i.playlist?(console.log("VRPLAYER: Video ended with repeatMode, calling restartDevicesAt(0)"),(async()=>(await je(e,0),Ft(0),await Ie(e)))()):Vt.value?(console.log("VRPLAYER: Video ended, moving to next video"),we(),ln(Vt.value)):(console.log("VRPLAYER: Video ended, calling stopDevices()"),we())}],[document,"x-dl8-evt-video-play",s=>{Xe(s,e)&&P()}],[document,"x-dl8-evt-video-pause",s=>{Xe(s,e)&&T()}],[document,"x-dl8-evt-video-seek",s=>{var Q;if(!Xe(s,e))return;const v=(Q=s.detail)==null?void 0:Q.t,M=typeof v=="number"&&Number.isFinite(v)?v:void 0;l(M),d(M)}],[document,"x-dl8-evt-element-connected",s=>{const v=s.detail;((v==null?void 0:v.element)===e||(v==null?void 0:v.id)&&v.id===He(e))&&N(e)&&J(e)}]];return g.forEach(([s,v,M])=>{s.addEventListener(v,M)}),()=>{g.forEach(([s,v,M])=>{s.removeEventListener(v,M)})}},be=()=>{var R,S,L;if(!o)return;if(Kt(),!c.length||!n.ready||!n.playing||n.buffering||n.ended){O=window.requestAnimationFrame(be);return}const e=$(o)*1e3;if(Ae>0&&e<500&&Ae>5e3&&(console.log("VRPLAYER: Loop detected - lastProgressTime:",Ae,"current time:",e,"resetting cursor"),h=0,ce=-1,Ft(e)),Ae=e,h=ft(c,e,h),h>=c.length){const g=Ht(c);g>=0&&(n.currentPos=he(c[g][1]||0)),O=window.requestAnimationFrame(be);return}const t=c[h],r=Ue(c,h),a=r>=0?c[r]:void 0;if(a&&t[0]>a[0]){const g=a[1]+(t[1]-a[1])*(e-a[0])/(t[0]-a[0]);n.currentPos=he(Math.round(g))}else n.currentPos=he(Math.round(t[1]));const u=h,P=[];for(;h<c.length&&((R=c[h])==null?void 0:R[0])<=e;){if(!z(c[h])){h++;continue}h>ce&&P.push(h),h++}if(h<c.length&&h>ce&&z(c[h])&&P.push(h),!P.length){O=window.requestAnimationFrame(be);return}const l=P.map(g=>{const s=c[g],v=s[0],M=he(parseInt(s[1].toFixed(0))),Q=v-e;return{Index:g,"Target Time (ms)":Number(v.toFixed(0)),Position:M,"Offset (ms)":Number(Q.toFixed(0)),Type:v>e?"Upcoming (Ahead)":"Past (Catchup)"}});console.group(`[Player CatchUp] Player Time: ${Number(e.toFixed(0))}ms | Emitted: ${P.length} | Cursor: ${u} -> ${h}`),console.table(l),console.groupEnd();const d=(L=(S=it.user)==null?void 0:S.id)!=null?L:"",T=!!it.isGymModeEnable,_=d!==""&&T;P.forEach(g=>{const s=c[g],v=Ue(c,g),M=v>=0?c[v]:s,Q=Ut(c,g+1),un=Q>=0?c[Q][0]:s[0],m=he(parseInt(s[1].toFixed(0))),cn=s[0]>e,dn=s[0]-e,fn=un-s[0],Z=Math.max(1,Number((cn?dn:fn).toFixed(0)));
1y.devices.forEach(A=>{switch(A.connector){case E.OSR:_&&Gn.movementTotal(m,d),y.osr.move(m,Z);break;case E.LOOB:_&&Wn.movementTotal(m,d),y.loob.move(m,Z);break;case E.Handy:_&&Hn.movementTotal(m,d);break;case E.Autoblow:_&&Un.movementTotal(m,d);break;case E.VacuGlide:_&&On.movementTotal(m,d);break;case E.BluetoothFleshyThrust:te.value.connected&&(_&&qn.movementTotal(m,d),te.value.move(m,Z));break;case E.FleshyX3:lt.value.connected&&(_&&$n.movementTotal(m,d),lt.value.move(m,Z));break;default:try{if(A.instance.linearAttributes.length>0){_&&(A.connector===E.Intiface&&Cn.movementTotal(m,d),A.connector===E.Bluetooth&&Nn.movementTotal(m,d));const k=Te(A.connector,m,y.intiface,y.bluetooth),q=k/100;console.log(`[VRPlayer] Buttplug linear: pos=${m}->${k} (${q}) in=${Z}ms`),A.instance.linear(q,Z)}if(A.instance.vibrateAttributes.length>0){Be();const k=125,q=Math.max(1,Math.floor(Z/k));let H=0;Ee=window.setInterval(()=>{H++;const Ce=H/q;if(Ce>=1){Be();const Bt=Te(A.connector,100-m,y.intiface,y.bluetooth),Mt=Number((Bt/100).toFixed(1));console.log(`[VRPlayer] Buttplug vibrate final: pos=${100-m}->${Bt} (${Mt})`),A.instance.vibrate(Math.abs(Mt));return}let oe=m+(M[1]-m)*Ce;oe=Math.max(0,Math.min(100,oe));const xt=100-oe,It=Te(A.connector,xt,y.intiface,y.bluetooth);oe=Number((It/100).toFixed(1)),console.log(`[VRPlayer] Buttplug vibrate step: pos=${xt}->${It} (${oe})`),A.instance.vibrate(Math.abs(oe))},k)}if(A.instance.rotateAttributes.length>0){const k=Math.abs(m-M[1]),q=Te(A.connector,k,y.intiface,y.bluetooth),H=Number((q/100).toFixed(2)),Ce=M[1]>m;console.log(`[VRPlayer] Buttplug rotate: posDelta=${k}->${q} value=${H}`),A.instance.rotate(Math.abs(H),Ce)}if(A.instance.oscillateAttributes.length>0){const k=Math.abs(m-M[1]),q=Te(A.connector,k,y.intiface,y.bluetooth),H=Number((q/100).toFixed(2));console.log(`[VRPlayer] Buttplug oscillate: posDelta=${k}->${q} value=${H}`),A.instance.oscillate(Math.abs(H))}}catch(k){console.error("[VRPlayer] Buttplug device error:",k)}}}),ce=g}),O=window.requestAnimationFrame(be)},Lt=()=>{if(U(),K(),Be(),wt(),re!==null&&(cancelAnimationFrame(re),re=null),Pt(!1),O!==null&&(cancelAnimationFrame(O),O=null),j&&(j(),j=null),B==null||B.disconnect(),B=null,Ke(),c=[],D(0),o)try{o.pause()}catch(e){console.warn("[VRPlayer] Error pausing player:",e)}we()};bn(async()=>{o=X.value;try{await en()}catch(t){console.error("[VRPlayer] Failed to load DL8 runtime",t),f.value="VR player failed to initialize.";return}const e=!st(i.video.stream_url);b.isBunny!==e&&(ve.value=!0,b.setBunny(e)),await et({targetIsBunny:b.isBunny,origin:"init"}),Se.value.length>0&&(await rn(),await Promise.all([Rt(),At(),Et()])),console.log("[VRPlayer] Player mounted and ready. Waiting for user interaction."),Ne.videos.viewVideo(i.video.id).catch(t=>console.error("[VRPlayer] Failed to log view",t)),O=window.requestAnimationFrame(be)}),Pn(()=>{Lt()}),Tn(()=>{Lt()}),Pe(()=>G.value.connected,async e=>{!e||await Rt()}),Pe(()=>x.value.connected,async e=>{!e||await At()}),Pe(()=>I.value.connected,async e=>{!e||await Et()}),Pe(()=>b.isBunny,async()=>{if(ve.value){ve.value=!1;return}F=Math.max((o==null?void 0:o.currentTime)||0,n.currentTime||0),D(F*1e3),U(),K();const e=b.manualOverride;b.manualOverride=!1;const t=e?"manual":"external";e&&(ye.value=!0),await et({targetIsBunny:b.isBunny,origin:t})}),Pe(ge,()=>{Qe()},{flush:"post"});const on=(e,t,r)=>{switch(e.spot){case"DESKTOP_PAUSE_CENTRE_RECTANGLE_300X250":return r(null);case"MOBILE_PAUSE_CENTRE_RECTANGLE_300X250":return r(null);case"VR_HUD_TOP_BANNER_468X60":return r(null);case"VR_HUD_BOTTOM_BANNER_468X60":return r(null);case"VR_HUD_LEFT_SKYSCRAPER_160X600":return r(null);case"VR_HUD_RIGHT_SKYSCRAPER_160X600":return r(null);default:return r(null)}};window.onRequestAdvertisement=on;const sn=se(()=>({meta:[{name:"supported-3d-formats",content:"monoscopic, stereoscopic-top-bottom, stereoscopic-side-by-side"}]}));Sn(sn);const Vt=se(()=>{if(!i.playlist||i.playlist.length===0)return null;const e=i.playlist.findIndex(t=>String(t.id)===String(i.video.id));if(e===-1)return null;if(i.shuffleMode){const t=i.playlist.filter((r,a)=>a!==e);return t.length?t[Math.floor(Math.random()*t.length)]:null}return e===i.playlist.length-1?i.repeatMode?i.playlist[0]:null:i.playlist[e+1]});function ln(e){if(e){let t={...C.query};C.query.playlist&&(t.playlist=C.query.playlist),V.push({path:`/v/${e.id}`,query:t})}}return(e,t)=>{const r=Ln("dl8-video");return W(),ee("div",{class:Fn(["relative",{"vr-player--hide-dl8-loading":ge.value}])}
1,[(W(),_n(r,{key:dt.value,ref_key:"playerRef",ref:X,poster:An(Dn)(p.video.user_thumbnail_url||p.video.thumbnail_url),title:i.video.name,author:i.video.user.username,loop:i.loop,format:Zt(i.video.projection),"display-mode":"inline",height:"100%",width:"100%","data-playing":ge.value?"true":"false"},{default:Rn(()=>[(W(!0),ee(Mn,null,kn(Se.value,a=>(W(),ee("source",{key:a.url,src:a.url,type:a.type,quality:a.quality},null,8,er))),128))]),_:1},8,["poster","title","author","loop","format","data-playing"])),Xt.value?(W(),ee("div",tr,[En(Kn),Re.value?(W(),ee("div",nr,kt(Re.value),1)):rt("",!0)])):rt("",!0),f.value?(W(),ee("div",rr,kt(f.value),1)):rt("",!0)],2)}}});export{Kn as S,cr as _,Ct as a,Dt as b,Te as g,st as h,ot as s,Xn as u,at as v};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.