ccumAlpha ) * ${a.result} * ${f} * lightAccu; outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result} * ${f}, ${l.result} ); } `),c&&d.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),u?d.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${u.result} );`):d.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),h&&d.push(`gl_FragColor.a *= ${h.result};`),d.push("#include ","#include ","#include "),r=d.join(` `)}return r}};var $0=class{constructor(t=1e3*10){this.timeout=t;this.cache=new Map;this.head={data:null,time:0,src:null,next:null,prev:null};this.tail={data:null,time:1/0,src:null,next:null,prev:null};this.hasClean=!1;this.head.next=this.tail,this.tail.prev=this.head}log(...t){}remove(t){let e=this.cache.get(t);e&&(this.dispose(t,e.data),this.cache.delete(t),e.prev.next=e.next,e.next.prev=e.prev)}scheduleCleanup(){this.hasClean||(this.log("scheduled cleanup"),this.hasClean=!0,setTimeout(()=>{this.hasClean=!1,this.log("cleaning");let t=Date.now(),e=this.head.next;for(;e.time"u")return;this.disposeTextures(),this.loaded=!1;let r=()=>{this.loaded=!0;for(let s of Object.values(this._cache))for(let o of Object.values(s))for(let a of Object.values(o))a&&(a.image=this.img,a.needsUpdate=!0);this.shared.requestRender()};if(this.isBuffer)this.img=e,this.loaded=!0;else if(this.isVideo){if(this.img=document.createElement("video"),this.img.preload="auto",this.img.playsInline=!0,this.img.currentTime=.01,typeof e!="string"){var i=new FileReader;i.readAsDataURL(new Blob([e],{type:"video/mp4"}));let s;await new Promise(o=>{i.onloadend=a=>{s=a.target?.result,o(null)}}),this.img.src=s}else this.img.src=e;this.img.onloadeddata=()=>{r()}}else this.img=new Image,this.img.src=OR(e),this.img.onload=r,await new Promise(s=>{this.img.onload=()=>{r(),s(null)}})}getTexture(e,r=1008,i=1006){let s=this._cache[e]?.[r]?.[i];if(s)return s;{let o;return this.isBuffer?o=this.img.texture:this.isVideo?o=new vy(this.img,void 0,e,e):o=new er(this.img,void 0,e,e,i,r),this.loaded&&(o.needsUpdate=!0),this._cache[e]===void 0&&(this._cache[e]={}),this._cache[e][r]===void 0&&(this._cache[e][r]={}),this._cache[e][r][i]=o,o}}setNeedsUpdate(e){for(let r of Object.values(this._cache))for(let i of Object.values(r))for(let s of Object.values(i))s&&(s.needsUpdate=e)}disposeTextures(){for(let[e,r]of Object.entries(this._cache))for(let[i,s]of Object.entries(r))for(let[o,a]of Object.entries(s))a?.dispose(),this._cache[e]!==void 0&&this._cache[e][i]!==void 0&&(this._cache[e][i][o]=void 0)}dispose(){super.dispose(),this.disposeTextures()}};var Jn=class extends rf{};function bE(n,t){var e=cX(t);return e.formatToParts?aX(e,n):lX(e,n)}var oX={year:0,month:1,day:2,hour:3,minute:4,second:5};function aX(n,t){try{for(var e=n.formatToParts(t),r=[],i=0;i=0&&(r[s]=parseInt(e[i].value,10))}return r}catch(o){if(o instanceof RangeError)return[NaN];throw o}}function lX(n,t){var e=n.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(e);return[r[3],r[1],r[2],r[4],r[5],r[6]]}var xE={};function cX(n){if(!xE[n]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),e=t==="06/25/2014, 00:00:00"||t==="\u200E06\u200E/\u200E25\u200E/\u200E2014\u200E \u200E00\u200E:\u200E00\u200E:\u200E00";xE[n]=e?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:n,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:n,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return xE[n]}function rx(n,t,e,r,i,s,o){var a=new Date(0);return a.setUTCFullYear(n,t,e),a.setUTCHours(r,i,s,o),a}var RR=36e5,uX=6e4,SE={timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-]\d{2})$/,timezoneHHMM:/^([+-]\d{2}):?(\d{2})$/};function Mm(n,t,e){var r,i;if(!n||(r=SE.timezoneZ.exec(n),r))return 0;var s;if(r=SE.timezoneHH.exec(n),r)return s=parseInt(r[1],10),LR(s)?-(s*RR):NaN;if(r=SE.timezoneHHMM.exec(n),r){s=parseInt(r[1],10);var o=parseInt(r[2],10);return LR(s,o)?(i=Math.abs(s)*RR+o*uX,s>0?-i:i):NaN}if(fX(n)){t=new Date(t||Date.now());var a=e?t:hX(t),l=wE(a,n),c=e?l:dX(t,l,n);return-c}return NaN}function hX(n){return rx(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds())}function wE(n,t){var e=bE(n,t),r=rx(e[0],e[1]-1,e[2],e[3]%24,e[4],e[5],0).getTime(),i=n.getTime(),s=i%1e3;return i-=s>=0?s:1e3+s,r-i}function dX(n,t,e){var r=n.getTime(),i=r-t,s=wE(new Date(i),e);if(t===s)return t;i-=s-t;var o=wE(new Date(i),e);return s===o?s:Math.max(s,o)}function LR(n,t){return-23<=n&&n<=23&&(t==null||0<=t&&t<=59)}var BR={};function fX(n){if(BR[n])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:n}),BR[n]=!0,!0}catch{return!1}}var WR=ta(FR(),1),TE=ta(kR(),1);var gX=/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/,UR=gX;var AE=36e5,zR=6e4,yX=2,Sn={dateTimePattern:/^([0-9W+-]+)(T| )(.*)/,datePattern:/^([0-9W+-]+)(.*)/,plainTime:/:/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timeZone:UR};function ME(n,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(n===null)return new Date(NaN);var e=t||{},r=e.additionalDigits==null?yX:(0,WR.default)(e.additionalDigits);if(r!==2&&r!==1&&r!==0)throw new RangeError("additionalDigits must be 0, 1 or 2");if(n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]")return new Date(n.getTime());if(typeof n=="number"||Object.prototype.toString.call(n)==="[object Number]")return new Date(n);if(!(typeof n=="string"||Object.prototype.toString.call(n)==="[object String]"))return new Date(NaN);var i=vX(n),s=xX(i.date,r),o=s.year,a=s.restDateString,l=bX(a,o);if(isNaN(l))return new Date(NaN);if(l){var c=l.getTime(),u=0,h;if(i.time&&(u=SX(i.time),isNaN(u)))return new Date(NaN);if(i.timeZone||e.timeZone){if(h=Mm(i.timeZone||e.timeZone,new Date(c+u)),isNaN(h))return new Date(NaN)}else h=(0,TE.default)(new Date(c+u)),h=(0,TE.default)(new Date(c+u+h));return new Date(c+u+h)}else return new Date(NaN)}function vX(n){var t={},e=Sn.dateTimePattern.exec(n),r;if(e?(t.date=e[1],r=e[3]):(e=Sn.datePattern.exec(n),e?(t.date=e[1],r=e[2]):(t.date=null,r=n)),r){var i=Sn.timeZone.exec(r);i?(t.time=r.replace(i[1],""),t.timeZone=i[1].trim()):t.time=r}return t}function xX(n,t){var e=Sn.YYY[t],r=Sn.YYYYY[t],i;if(i=Sn.YYYY.exec(n)||r.exec(n),i){var s=i[1];return{year:parseInt(s,10),restDateString:n.slice(s.length)}}if(i=Sn.YY.exec(n)||e.exec(n),i){var o=i[1];return{year:parseInt(o,10)*100,restDateString:n.slice(o.length)}}return{year:null}}function bX(n,t){if(t===null)return null;var e,r,i,s;if(n.length===0)return r=new Date(0),r.setUTCFullYear(t),r;if(e=Sn.MM.exec(n),e)return r=new Date(0),i=parseInt(e[1],10)-1,jR(t,i)?(r.setUTCFullYear(t,i),r):new Date(NaN);if(e=Sn.DDD.exec(n),e){r=new Date(0);var o=parseInt(e[1],10);return EX(t,o)?(r.setUTCFullYear(t,0,o),r):new Date(NaN)}if(e=Sn.MMDD.exec(n),e){r=new Date(0),i=parseInt(e[1],10)-1;var a=parseInt(e[2],10);return jR(t,i,a)?(r.setUTCFullYear(t,i,a),r):new Date(NaN)}if(e=Sn.Www.exec(n),e)return s=parseInt(e[1],10)-1,HR(t,s)?GR(t,s):new Date(NaN);if(e=Sn.WwwD.exec(n),e){s=parseInt(e[1],10)-1;var l=parseInt(e[2],10)-1;return HR(t,s,l)?GR(t,s,l):new Date(NaN)}return null}function SX(n){var t,e,r;if(t=Sn.HH.exec(n),t)return e=parseFloat(t[1].replace(",",".")),EE(e)?e%24*AE:NaN;if(t=Sn.HHMM.exec(n),t)return e=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),EE(e,r)?e%24*AE+r*zR:NaN;if(t=Sn.HHMMSS.exec(n),t){e=parseInt(t[1],10),r=parseInt(t[2],10);var i=parseFloat(t[3].replace(",","."));return EE(e,r,i)?e%24*AE+r*zR+i*1e3:NaN}return null}function GR(n,t,e){t=t||0,e=e||0;var r=new Date(0);r.setUTCFullYear(n,0,4);var i=r.getUTCDay()||7,s=t*7+e+1-i;return r.setUTCDate(r.getUTCDate()+s),r}var wX=[31,28,31,30,31,30,31,31,30,31,30,31],AX=[31,29,31,30,31,30,31,31,30,31,30,31];function qR(n){return n%400===0||n%4===0&&n%100!==0}function jR(n,t,e){if(t<0||t>11)return!1;if(e!=null){if(e<1)return!1;var r=qR(n);if(r&&e>AX[t]||!r&&e>wX[t])return!1}return!0}function EX(n,t){if(t<1)return!1;var e=qR(n);return!(e&&t>366||!e&&t>365)}function HR(n,t,e){return!(t<0||t>52||e!=null&&(e<0||e>6))}function EE(n,t,e){return!(n!=null&&(n<0||n>=25)||t!=null&&(t<0||t>=60)||e!=null&&(e<0||e>=60))}function sx(n,t,e){var r=ME(n,e),i=Mm(t,r,!0),s=new Date(r.getTime()-i),o=new Date(0);return o.setFullYear(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate()),o.setHours(s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),s.getUTCMilliseconds()),o}function Qi(n,t){return t.color(n)}function CE(n=new Date,t){let e=t.format,r=n.getSeconds(),i=n;t&&t.timeZone!==null&&(i=sx(new Date,t.timeZone));let s=i.getHours(),o=i.getMinutes(),a;t.format12h24h==="12ampm"&&(a=s>=12?"PM":"AM");let l=s;t.format12h24h!=="24"&&(l=s%12,l===0&&(l=12));let c,u;switch(e){case"HH:mm:ss":c=[l,o,r];break;case"HH:mm":c=[l,o];break;case"HH":c=[l],a=void 0;break;case"mm":c=[o],a=void 0;break;case"ss":c=[r],a=void 0;break;case"year":u=i.getFullYear();break;case"month":u=i.getMonth()+1;break;case"dayOfYear":u=Math.floor((i.getTime()-new Date(i.getFullYear(),0,0).getTime())/864e5);break;case"dayOfMonth":u=i.getDate();break;case"secondOfDay":u=s*60*60+o*60+r;break;default:console.error("Unknown time format",e),u=0;break}return c!==void 0?{textValue:c,suffix:a}:u}function YR(n,t){switch(n.type){case"fresnel":return CX(n,t);case"gradient":return PX(n,t);case"depth":return _X(n,t);case"normal":return IX(n,t);case"noise":return DX(n,t);case"rainbow":return OX(n,t);case"toon":return RX(n,t);case"outline":return LX(n,t);case"transmission":return BX(n,t);case"color":return MX(n,t);case"pattern":return NX(n,t)}}function TX(n){return{type:n.type}}function Qs(n,t){let{alpha:e,mode:r,isMask:i}=n,s=typeof e=="string"?(Number(t.getVariable(e))??100)/100:e;return{...TX(n),alpha:s,mode:r,isMask:i}}function MX(n,t){return{...Qs(n,t),color:Qi(n.color,t)}}function CX(n,t){let{bias:e,scale:r,intensity:i,factor:s,color:o}=n;return{...Qs(n,t),color:Qi(o,t),bias:e,scale:r,intensity:i,factor:s}}function PX(n,t){let{gradientType:e,smooth:r,colors:i,steps:s,angle:o,offset:a,morph:l}=n;return{...Qs(n,t),gradientType:e,smooth:r,colors:i.map(c=>new Ze(c[0],c[1],c[2],c[3])),num:i.length,steps:s,offset:new k(...a),morph:new k(...l),angle:o}}function _X(n,t){let{gradientType:e,near:r,far:i,isVector:s,isWorldSpace:o,origin:a,direction:l,colors:c,steps:u,smooth:h}=n;return{...Qs(n,t),gradientType:e,near:r,far:i,isVector:s,isWorldSpace:o,origin:new E(...a),direction:l?new E(...l):new E(1,0,0),colors:c.map(d=>d!==void 0?new Ze(d[0],d[1],d[2],d[3]):new Ze(0,0,0,0)),steps:u.slice(0,c.length),smooth:h}}function IX(n,t){let{cnormal:e}=n;return{...Qs(n,t),cnormal:new E(e[0],e[1],e[2])}}function DX(n,t){return{...Qs(n,t),scale:n.scale,move:n.move,fA:new k(...n.fA),fB:new k(...n.fB),size:new E(...n.size),distortion:new k(...n.distortion),colorA:Qi(n.colorA,t),colorB:Qi(n.colorB,t),colorC:Qi(n.colorC,t),colorD:Qi(n.colorD,t),noiseType:n.noiseType,voronoiStyle:n.voronoiStyle,highCut:n.highCut,lowCut:n.lowCut,smoothness:n.smoothness,seed:n.seed,quality:n.quality}}function OX(n,t){return{...Qs(n,t),filmThickness:n.filmThickness,movement:n.movement,wavelengths:new E(...n.wavelengths),noiseStrength:n.noiseStrength,noiseScale:n.noiseScale,offset:new E(...n.offset)}}function RX(n,t){return{...Qs(n,t),positioning:n.positioning,colors:n.colors.map(e=>new Ze(e[0],e[1],e[2],e[3])),num:n.colors.length,steps:n.steps,source:new E(...n.source),isWorldSpace:n.isWorldSpace,noiseStrength:n.noiseStrength,noiseScale:n.noiseScale,shadowColor:Qi(n.shadowColor,t),offset:new E(...n.offset)}}function LX(n,t){return{...Qs(n,t),outlineColor:Qi(n.outlineColor,t),contourColor:Qi(n.contourColor,t),outlineWidth:n.outlineWidth,contourWidth:n.contourWidth,outlineThreshold:n.outlineThreshold,contourThreshold:n.contourThreshold,outlineSmoothing:n.outlineSmoothing,contourFrequency:n.contourFrequency,contourDirection:new E(...n.contourDirection),positionalLines:n.positionalLines,compensation:n.compensation}}function BX(n,t){return{...Qs(n,t),thickness:n.thickness,ior:n.ior,roughness:n.roughness}}function NX(n,t){return{...Qs(n,t),style:n.style,projection:n.projection,axis:n.axis,blending:n.blending,offset:new k(...n.offset),colorA:Qi(n.colorA,t),colorB:Qi(n.colorB,t),frequency:new k(...n.frequency),size:n.size,variation:n.variation,smoothness:n.smoothness,zigzag:n.zigzag,rotation:n.rotation,vertical:new k(...n.vertical),horizontal:new k(...n.horizontal),sides:n.sides}}var jl=class extends vr{};var FX={noise:["noiseType"],texture:["projection","axis","side"],video:["projection","axis","side"],displace:["noiseType"],light:["roughnessMap","bumpMap"],depth:["smooth","isWorldSpace","gradientType","isVector"],pattern:["style","projection","axis"]},VX={depth:["colors"]};function kX(n,t,e){if(t==="isMask")return!0;let r=FX[n.type],i=VX[n.type];if(i!==void 0){let s=n.color;if(i.includes(t)){let o=s[t]?.value?.length;if(o!==void 0&&o!==e.length)return!0}}return r!==void 0?r.includes(t):!1}function PE(n,t,e){let r=e.uniforms[`f${e.id}_texture`];if(!r)return!1;let i=!1,s=n;if("image"in s){let o=s.image,a=t.image(o),l=r;l.image instanceof Jn||l.image.deref(),l.image=a}if("video"in s){let o=s.video,a=t.video(o),l=r;l.image instanceof Jn||l.image.deref(),l.image=a}if("wrapping"in s){let o=r;o.wrap=s.wrapping}if("minFilter"in s){let o=r;o.minFilter=s.minFilter}if("magFilter"in s){let o=r;o.magFilter=s.magFilter}if("rotation"in s&&e.uniforms[`f${e.id}_rotation`])return e.uniforms[`f${e.id}_rotation`].value=(s.rotation??0)*we.DEG2RAD,i;if("repeat"in s||"offset"in s||"rotation"in s){let o="mat",a=e.uniforms[`f${e.id}_${o}`];"repeat"in s&&(a.repeat=s.repeat),"offset"in s&&(a.offset=s.offset),"rotation"in s&&(a.rotation=s.rotation??0),a.updateMatrix()}return i}function XR(n,t,e,r){let i=!1;for(let[s,o]of Object.entries(n)){if(s==="bumpMap"||s==="roughnessMap"){i=!0;continue}if(!s||o===void 0)continue;if(_E(s,e,r,t)){s==="visible"&&e.type==="light"&&(i=!0);continue}e.visible=r.visible;let a=e.uniforms[`f${e.id}_${s}`];if(!!a&&!(a instanceof zl))switch(i=i||kX(e,s,o),a.constructor){case tr:if(typeof o=="string"){let l=t.getColor(o);l&&(a.value=l);break}else{let l=o;a.value instanceof jl?a.value=new vr(l.r,l.g,l.b,l.a):a.setRGBA(l);break}case Ln:if(typeof o=="string"){let l=t.getColor(o);l&&(a.value=l);break}else{let l=o;a.value instanceof jl?a.value=new vr(l.r,l.g,l.b,l.a):a.value.setRGBA(l.r,l.g,l.b,l.a);break}case Hr:{let l=o;a.value.setX(l[0]),a.value.setY(l[1]);break}case Xi:{let l=o;a.value.setX(l[0]),a.value.setY(l[1]),a.value.setZ(l[2]);break}case bn:{PE(o,t,e);break}case Ks:{a.value=o.map(l=>new Ze(...l));break}default:{a.value=o;break}}}return i}var Hl=(n,t,e)=>Math.max(0,Math.min(1,Number(t.getVariable(typeof n=="number"?n*100:n,e)??100)/100))??1,Wl=class{constructor(t,e,r,i,s){this.id=t;this.uuid=e;this.data=r;this.uniforms={};for(let o in i)this.uniforms[`f${this.id}_${o}`]=i[o];for(let o in r)_E(o,this,r,s)}get type(){return this.data.type}static create(t,e,r,i){if(r.type==="light")return wn.createLigherLayer(t,e,r,i);if(r.type==="texture"||r.type==="video"){let s=r.type==="texture"?i.uiBuffer(r.texture.image)??i.image(r.texture.image):i.video(r.texture.video),o=new Xc(s,r.texture.wrapping,r.texture.minFilter??1008,r.texture.magFilter??1006),a=new Q0(s),l=new Z0(r.texture.repeat,r.texture.offset,r.texture.rotation??0),c=new Fe(r.crop?1:0),u=new Dt(r.projection??0),h=new Dt(["x","y","z"].indexOf(r.axis)??0),d=new Dt(r.side??0),f=new Hr(r.size?new k(r.size[0],r.size[1]):new k(100,100)),p=new Fe(r.blending??0),m=new Fe(Hl(r.alpha,i)),g=new Dt(r.mode??0),y=new Qr(r.isMask??!1),v=new Gl(o,a,c,u,h,d,f,p,l,m,g,y),x=new Kt(v.calpha,"f");return new Or(t,e,r,{texture:o,textureSize:a,crop:c,projection:u,axis:h,side:d,size:f,blending:p,mat:l,alpha:m,mode:g,isMask:y},v,g,x,y,i)}else if(r.type==="matcap"){let s=i.image(r.texture.image),o=new Xc(s,r.texture.wrapping,r.texture.minFilter??1008,r.texture.magFilter??1006),a=new Fe(Hl(r.alpha,i)),l=new Dt(r.mode??0),c=new Qr(r.isMask??!1),u=new Fe((r.texture.rotation??0)*we.DEG2RAD),h=new Xd(o,a,l,c,u),d=new Kt(h.calpha,"f");return new Or(t,e,r,{texture:o,alpha:a,mode:l,isMask:c,rotation:u},h,l,d,c,i)}else if(r.type==="displace")if(r.displacementType==="noise"){let s=new Xi(new E(...r.offset)),o=new Fe(r.scale??10),a=new Fe(r.intensity??8),l=new Fe(r.movement??1),c=new Dt(r.noiseType??0),u=new Dt(r.voronoiStyle??0),h=new Fe(r.smoothness??.5),d=new Fe(r.seed??0),f=new Fe(r.highCut??1),p=new Fe(r.lowCut??0),m=new Dt(r.quality??1),g=new tf(a,l,s,u,h,d,f,p,m,o,c);return new Cm(t,e,r,{offset:s,scale:o,intensity:a,movement:l,noiseType:c,voronoiStyle:u,smoothness:h,seed:d,highCut:f,lowCut:p,quality:m},g,i)}else throw new Error;else return GX(t,e,r,i)}updateByOp(t,e,r){let i=t;if(i.path[0]===void 0){if(i.type===0)return"type"in i.props||"category"in i.props||"visible"in i.props?(r.scene.markNeedsUpdateRendererDirty(),!0):XR(i.props,r.shared,this,e)}else if(i.path[0]==="texture")return"texture"in e||"video"in e?PE(i.props,r.shared,this):!0;return!1}dispose(){if(UX(this)){let t=this.uniforms[`f${this.id}_texture`];if(!t)return!1;let e=t;e.image instanceof Jn||e.image.deref()}}hasValueByKey(t){return this.uniforms[t]!==void 0}hasValue(t){return this.hasValueByKey(`f${this.id}_${t}`)}setValue(t,e){let r=`f${this.id}_${t}`;this.hasValueByKey(r)&&e!==void 0&&(this.uniforms[r].value=e)}getNode(t){let e=`f${this.id}_${t}`;if(this.hasValueByKey(e))return this.uniforms[e]}getValue(t){let e=`f${this.id}_${t}`;if(this.hasValueByKey(e))return this.uniforms[e].value}getName(t){let r=/f\d+_(.*)/.exec(t);if(r&&r.length>1)return r[1];console.log(`Layer.getName: error ${t}`)}getNames(){let t=[];for(let e in this.uniforms){let r=this.getName(e);r&&t.push(r)}return t}},Or=class extends Wl{constructor(e,r,i,s,o,a,l,c,u){super(e,r,i,s,u);this.params=s;this.color=o;this.mode=a;this.alpha=l;this.isMask=c}},Cm=class extends Wl{constructor(e,r,i,s,o,a){super(e,r,i,s,a);this.position=o}},wn=class extends Wl{constructor(e,r,i,s,o,a){super(e,r,i,o,a);this.node=s}static createLigherLayer(e,r,i,s){let o,a=new Fe(Hl(i.alpha,s)),l=new Dt(i.mode),c=new Fe(i.bumpMapIntensity),u=new Fe(Hl(i.alphaOverride,s)),h;if(!i.visible)o=new Ra,h={};else if(i.category==="lambert"){o=new wm;let d=new tr(s.color(i.emissive)??0),f=new Qr(i.occlusion??!0);h={emissive:d,occlusion:f},o.emissive=d,o.occlusion=f}else if(i.category==="toon"){o=new Tm;let d=new Fe(i.shininess??30),f=new tr(s.color(i.specular)??1118481);h={shininess:d,specular:f},o.shininess=d,o.specular=f}else if(i.category==="physical"){o=new Em;let d=new Fe(i.roughness??.3),f=new Fe(i.metalness??0),p=new Fe(i.reflectivity??.5),m=new Qr(i.occlusion??!0);h={roughness:d,metalness:f,reflectivity:p,occlusion:m},o.roughness=d,o.metalness=f,o.reflectivity=p,o.occlusion=m}else{o=new Am;let d=new Fe(i.shininess??30),f=new tr(i.specular!==void 0?s.color(i.specular)??1118481:1118481),p=new Qr(i.occlusion??!0);h={shininess:d,specular:f,occlusion:p},o.shininess=d,o.specular=f,o.occlusion=p}return o.alpha=new Fe(1),o.shadingAlpha=a,o.shadingBlend=l,o.bumpMapIntensity=c,o.alphaOverride=u,h.alpha=o.shadingAlpha,h.mode=o.shadingBlend,h.bumpMapIntensity=o.bumpMapIntensity,h.alphaOverride=o.alphaOverride,new wn(e,r,i,o,h,s)}get category(){return this.node.category}};function UX(n){let t=n instanceof Wl?n.type:n;return t==="texture"||t==="video"||t==="displace_map"||t==="matcap"}function gs(n){return{alpha:new Fe(n.alpha??1),mode:new Dt(n.mode??0),isMask:new Qr(n.isMask??!1)}}function zX(n,t,e,r,i){switch(n.type){case"color":{let s=new tr(r.color??ii),o=gs(r),a=new Kc(s,o.alpha),l=new Kt(a.calpha,"f");return new Or(t,e,n,{color:s,...o},a,o.mode,l,o.isMask,i)}case"fresnel":{let s=new tr(r.color??16777215),o=new Fe(r.bias??.1),a=new Fe(r.scale??1),l=new Fe(r.intensity??2),c=new Fe(r.factor??1),u=gs(r),h=new bm(s,o,a,l,c,u.alpha,u.mode,u.isMask),d=new Kt(h.calpha,"f");return new Or(t,e,n,{color:s,bias:o,scale:a,intensity:l,factor:c,...u},h,u.mode,d,u.isMask,i)}case"rainbow":{let s=new Fe(r.filmThickness??30),o=new Fe(r.movement??0),a=new Xi(r.wavelengths??new E(0,0,0)),l=new Fe(r.noiseStrength??0),c=new Fe(r.noiseScale??1),u=new Xi(r.offset??new E(0,0,0)),h=gs(r),d=new Jd(s,o,a,l,c,u,h.alpha,h.isMask),f=new Kt(d.calpha,"f");return new Or(t,e,n,{filmThickness:s,movement:o,wavelengths:a,noiseStrength:l,noiseScale:c,offset:u,...h},d,h.mode,f,h.isMask,i)}case"transmission":{let s=new Fe(r.thickness??10),o=new Fe(r.ior??1.5),a=new Fe(r.roughness??.5),l=$e.transmissionSize,c=$e.transmissionRenderTarget,u=$e.transmissionRenderTargetDepth,h=window.innerWidth,d=window.innerHeight,f=h>=d?new Hr(d/h,1):new Hr(1,h/d),p=gs(r),m=new ef(s,o,a,l,c,u,f,p.alpha),g=new Kt(m.calpha,"f");return new Or(t,e,n,{thickness:s,ior:o,roughness:a,aspectRatio:f,...p},m,p.mode,g,p.isMask,i)}case"toon":{let s=new Dt(r.positioning??0),o;r.colors?o=new Ks(r.colors.length,r.colors):(o=new Ks(10,new Ze(0,0,0,1)),o.value[1]=new Ze(1,1,1,1));let a;r.steps?a=new Xs(r.steps.length,r.steps):(a=new Xs(10,1),a.value[0]=0);let l=new Xi(r.source??new E(0,0,0)),c=new Qr(r.isWorldSpace??!0),u=new Fe(r.noiseStrength??0),h=new Fe(r.noiseScale??1),d=new Ln(r.shadowColor),f=new Xi(r.offset??new E(0,0,0)),p=gs(r),m=new $d(s,o,a,l,c,u,h,d,f,p.alpha),g=new Kt(m.calpha,"f");return new Or(t,e,n,{positioning:s,colors:o,steps:a,source:l,isWorldSpace:c,noiseStrength:u,noiseScale:h,shadowColor:d,offset:f,...p},m,p.mode,g,p.isMask,i)}case"outline":{let s=new tr(r.outlineColor??16777215),o=new tr(r.contourColor??16777215),a=new Fe(r.outlineWidth??.1),l=new Fe(r.contourWidth??.1),c=new Fe(r.outlineThreshold??.1),u=new Fe(r.contourThreshold??.1),h=new Fe(r.outlineSmoothing??.1),d=new Fe(r.contourFrequency??.1),f=new Xi(r.contourDirection??new E(0,1,0)),p=new Qr(r.positionalLines??!1),m=new Qr(r.compensation??!0),g=$e.normalRenderTarget,y=$e.normalRenderTargetDepth,v=$e.pixelRatioNode,x=$e.resolution,S=gs(r),w=new Qd(s,o,a,l,c,u,h,d,f,p,m,x,g,y,v,S.alpha),A=new Kt(w.calpha,"f");return new Or(t,e,n,{outlineColor:s,contourColor:o,outlineWidth:a,contourWidth:l,outlineThreshold:c,contourThreshold:u,outlineSmoothing:h,contourFrequency:d,contourDirection:f,positionalLines:p,compensation:m,...S},w,S.mode,A,S.isMask,i)}case"depth":{let s=new Dt(r.gradientType??0),o=new Qr(r.smooth??!1),a=new Fe(r.near??50),l=new Fe(r.far??200),c=new Fe(r.isVector??1),u=new Fe(r.isWorldSpace??0),h=new Xi(r.origin??new E),d=new Xi(r.direction??new E),f;r.colors?f=new Ks(r.colors.length,r.colors):(f=new Ks(2,new Ze(0,0,0,1)),f.value[1]=new Ze(1,1,1,1));let p;r.steps?p=new Xs(r.steps.length,r.steps):(p=new Xs(2,1),p.value[0]=0);let m=gs(r),g=new qd(s,o,a,l,c,u,h,d,f,p,m.alpha,m.isMask),y=new Kt(g.calpha,"f");return new Or(t,e,n,{gradientType:s,smooth:o,near:a,far:l,isVector:c,isWorldSpace:u,origin:h,direction:d,colors:f,steps:p,...m},g,m.mode,y,m.isMask,i)}case"noise":{let s=new Fe(r.scale??1),o=new Xi(r.size??new E(100,100,100)),a=new Fe(r.move??1),l=new Hr(r.fA??new k(1.7,9.2)),c=new Hr(r.fB??new k(8.3,2.8)),u=new Hr(r.distortion??new k(1,1)),h=new Ln(r.colorA),d=new Ln(r.colorB),f=new Ln(r.colorC),p=new Ln(r.colorD),m=new Dt(r.noiseType??0),g=new Dt(r.voronoiStyle??0),y=new Fe(r.highCut??1),v=new Fe(r.lowCut??0),x=new Fe(r.smoothness??.5),S=new Fe(r.seed??.5),w=new Dt(r.quality??1),A=gs(r),T=new Kd(s,o,a,l,c,u,h,d,f,p,A.alpha,m,A.isMask,g,y,v,x,S,w),b=new Kt(T.calpha,"f");return new Or(t,e,n,{scale:s,size:o,move:a,fA:l,fB:c,distortion:u,colorA:h,colorB:d,colorC:f,colorD:p,noiseType:m,...A,voronoiStyle:g,highCut:y,lowCut:v,smoothness:x,seed:S,quality:w},T,A.mode,b,A.isMask,i)}case"normal":{let s=new Xi(r.cnormal??new E(1,1,1)),o=gs(r),a=new jd(s,o.alpha),l=new Kt(a.calpha,"f");return new Or(t,e,n,{cnormal:s,...o},a,o.mode,l,o.isMask,i)}case"gradient":{let s=new Dt(r.gradientType??0),o=new Qr(r.smooth??!1),a;r.colors?a=new Ks(r.colors.length,r.colors):(a=new Ks(10,new Ze(0,0,0,1)),a.value[1]=new Ze(1,1,1,1));let l;r.steps?l=new Xs(r.steps.length,r.steps):(l=new Xs(10,1),l.value[0]=0);let c=new Hr(r.offset??new k(0,0)),u=new Hr(r.morph??new k(0,0)),h=new Fe(r.angle??0),d=gs(r),f=new Yd(s,o,a,l,c,u,h,d.alpha,d.isMask),p=new Kt(f.calpha,"f");return new Or(t,e,n,{gradientType:s,smooth:o,colors:a,steps:l,offset:c,morph:u,angle:h,...d},f,d.mode,p,d.isMask,i)}case"pattern":{let s=new Dt(r.style??0),o=new Dt(r.projection??0),a=new Dt(["x","y","z"].indexOf(r.axis)??0),l=new Fe(r.blending??0),c=new Hr(r.offset??new k(0,0)),u=new Ln(r.colorA),h=new Ln(r.colorB),d=new Hr(r.frequency??new k(10,10)),f=new Fe(r.size??.5),p=new Fe(r.variation??0),m=new Fe(r.smoothness??.5),g=new Fe(r.zigzag??0),y=new Fe(r.rotation??0),v=new Hr(r.vertical??new k(0,1)),x=new Hr(r.horizontal??new k(0,1)),S=new Dt(r.sides??6),w=gs(r),A=new Zd(s,o,a,l,c,u,h,d,f,p,m,g,y,v,x,S,w.alpha,w.isMask),T=new Kt(A.calpha,"f");return new Or(t,e,n,{style:s,projection:o,axis:a,blending:l,offset:c,colorA:u,colorB:h,frequency:d,size:f,variation:p,smoothness:m,zigzag:g,rotation:y,vertical:v,horizontal:x,sides:S,...w},A,w.mode,T,w.isMask,i)}default:{let s=new tr(1,0,0,1),o=gs(r),a=new Kc(s,o.alpha),l=new Kt(a.calpha,"f");return new Or(t,e,n,{color:s,...o},a,o.mode,l,o.isMask,i)}}}function GX(n,t,e,r){let i=YR(e,r);return zX(e,n,t,i,r)}function _E(n,t,e,r){if(e.type==="displace"&&(n==="intensity"||n==="visible")){let i=t.uniforms[`f${t.id}_intensity`];return i?(i.value=e.intensity*(e.visible?1:0),i):void 0}if(e.type!=="displace"&&(n==="alpha"||n==="visible")){let i=t.uniforms[`f${t.id}_alpha`];if(!i)return;if(i.value=Hl(e.alpha,r)*(e.visible?1:0),e.type==="outline"&&n==="visible"){let s=t.uniforms[`f${t.id}_compensation`];s&&(s.value=e.compensation&&e.visible)}return i}}function Zc(n,t){let e=0,r=n.layers.find(i=>i.data.type==="light");if(r){let i=r.data,s=Number(t.getVariable(i.alphaOverride));if((typeof i.alphaOverride=="string"?s/100:i.alphaOverride)<1)return!0}for(let i of n.layers){if(i.data.type!=="displace"&&i.data.isMask)return!0;if(i.data.type!=="displace"&&"alpha"in i.data&&i.data.type!=="light"&&i.data.type!=="fresnel"&&i.data.type!=="texture"&&i.data.type!=="matcap"&&i.data.type!=="rainbow"&&i.data.type!=="outline"&&i.data.type!=="pattern"){let s=i.data.visible?i.data.alpha:0;if(typeof s=="string"&&(s=Math.max(0,Math.min(1,Number(t.getVariable(s)??100)/100))),s===1&&i.data.type==="depth"||i.data.type==="gradient"){for(let o of i.data.colors)if(o[3]<1){s=o[3];break}}else if(s===1&&i.data.type==="noise"){let o=t.color(i.data.colorA).a,a=t.color(i.data.colorB).a,l=t.color(i.data.colorC).a,c=t.color(i.data.colorD).a,u=Math.min(o,Math.min(a,Math.min(l,c)));u<1&&(s=u)}e+=(1-e)*s}}return e<1}var Nn=class extends it{constructor(){super(void 0);this.flatShading=!1;this.needsJitter=!0;this.nodeContextUuid=0;this.fog=!0,this.dithering=!0,this.vertexColors=!0,this.transparent=!0}customProgramCacheKey(){return""}},ox=class extends Nn{constructor(e,r,i,s){super();this.flatShading=e;this.side=r;this.wireframe=i;this.root=s}updateAfterBuild(){let e=this.root;this.lights=e.lights,this.vertexShader=e.vertexShader,this.fragmentShader=e.fragmentShader,this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.transparent=e.transparent,this.cacheKey=e.customProgramCacheKey()+"flat"+this.flatShading+this.side}onBeforeCompile(e,r){this.root.onBeforeCompile(e)}get data(){return this.root.data}get category(){return this.root.category}get hasAO(){return this.root.hasAO}getFlavor(e,r,i){return this.root.getFlavor(e,r,i)}get layers(){return this.root.layers}get fragment(){return this.root.fragment}getLayersOfType(e){return this.root.getLayersOfType(e)}getLayerByUuid(e){return this.root.getLayerByUuid(e)}updateByOp(e,r,i){this.root.updateByOp(e,r,i)}nodeMaterialDispose(){this.root.nodeMaterialDispose()}},Ba=class extends Nn{constructor(e,r,i=!0){super();this.data=e;this.allowVariableSaves=i;this.layerIdGen=0;this.flavors=[];this.masks={};this.type="NodeMaterial";this.updaters=[],this.needsJitter=r.shared.needsJitter,or.startContext(this),this.reset0(e,r),or.endContext(this)}get nodeMaterial(){return this}getFlavor(e,r,i){let s=i?6:(e?3:0)+r;if(s===0)return this;this.flavors===void 0&&(this.flavors=[]),s-=1;let o=this.flavors[s];return o===void 0&&(o=new ox(e,r,i,this),o.needsJitter=this.needsJitter,this.flavors[s]=o,o.flatShading=e,o.side=r,o.updateAfterBuild()),o}get fragment(){return this.lightLayer.node}get category(){return this.lightLayer.category}get hasAO(){return this.lightLayer.getNode("occlusion")?.value??!1}reset(e,r,i=!1){or.startContext(this),(this.data!==e||i)&&this.reset0(e,r),or.endContext(this)}reset0(e,r){this.data=e;let i=e.layers??Kr.defaultTwoLayerData("phong").layers;try{this.layers=i.map(s=>Wl.create(this.layerIdGen++,s.id,s.data,r.shared))}catch{this.layers=[]}this.layers.reverse(),this.name=e.name??"Untitled Material",this.onUpdate(r.shared),this.transparent=Zc(e,r.shared),this.saveVariableLocations(r)}onVariableUpdate(e,r,i){if(e[0]==="alphaOverride")this.transparent=Zc(this.data,i.shared),this.lightLayer.setValue("alphaOverride",Math.max(0,Math.min(Number(r)/100,1)));else if(e[0]==="layer"){let s=e[1],o=e[2];if(s&&o){let a=this.layers.find(l=>l.uuid===s);a?.hasValue(o)&&(o==="alpha"?(this.transparent=Zc(this.data,i.shared),a.setValue(o,Math.max(0,Math.min(Number(r)/100,1)))):a.setValue(o,r))}}}saveVariableLocations(e){if(!this.allowVariableSaves)return;let r=this.data.layers.find(i=>i.data.type==="light");r&&e.shared.getVariable(r.data.alphaOverride,["material",this.uuid,"alphaOverride"]),this.data.layers.forEach(i=>{"alpha"in i.data&&typeof i.data.alpha=="string"&&e.shared.getVariable(i.data.alpha,["material",this.uuid,"layer",i.id,"alpha"])})}getLayersOfType(e){return this.layers.filter(r=>r.type===e)}getLayerByUuid(e){return this.layers.find(r=>r.uuid===e)}onUpdate(e){this.lightLayer=this.layers.find(r=>r instanceof wn),this.lightLayer===void 0&&(this.lightLayer=new wn(0,"",{...Gr.defaultData("light","phong"),visible:!1},new Ra,{},e)),this.dispose();for(let r of this.flavors)r&&r.dispose();this.applyTextureMaps(),this.applyMasks(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.build(),this.nodeContextUuid=0}applyTextureMaps(){let e=this.layers.find(o=>o instanceof wn);if(!e)return;let r=e.data,i=r.bumpMap,s=r.roughnessMap;e.node.bumpMap=void 0,e.node.roughnessMap=void 0;for(let o=0;ol.uuid===o);if(a){let l=r.layers.data(o),c;e.type===0&&("alpha"in e.props||"alphaOverride"in e.props)&&("alpha"in e.props?c={...e.props,alpha:Hl(e.props.alpha,s,["material",this.uuid,"layer",o,"alpha"])}:c={...e.props,alphaOverride:Hl(e.props.alphaOverride,s,["material",this.uuid,"alphaOverride"])}),a.updateByOp({...e,...c?{props:c}:{},path:e.path.slice(2)},l,i)&&this.reset0(r,i)}}}else this.reset0(r,i);or.endContext(this)}applyMasks(){for(let e=0;e0){let i=e-1,s=this.layers[i];s instanceof wn?s.node.mask=new ki(r.color,r.alpha,ki.MUL):s instanceof Or&&(s.isMask.value||(s.color.mask=new ki(r.color,r.alpha,ki.MUL)))}}}blendColors(){let e=this.layers.findIndex(i=>i instanceof Or),r=this.layers.findIndex(i=>i instanceof wn);if(e!==-1&&ei instanceof wn);if(this.layers.length>r+1){for(let i=r+1;ir instanceof Cm);if(e.length>0){let r=e[0].position;for(let i=1;iMath.min(Math.max(s,o),a);for(let s of this.layers)if(s.type==="displace"){let o=i(s.uniforms[`f${s.id}_intensity`].value,e,r);s.uniforms[`f${s.id}_intensity`].value=o}}updateFrame(e){for(let r=0;re.dispose()),super.dispose();for(let e of this.flavors)e&&e.dispose()}assetsLoaded(){for(let e of this.layers)if(e instanceof Or){let r=e.params.texture;if(r instanceof Xc&&!r.image.loaded)return!1}return!0}};Object.defineProperties(Nn.prototype,{properties:{get:function(){return this.fragment.properties}}});var Jc=class extends Ba{constructor(t,e,r){super(t,e,!1),this.uuid=r,this.allowVariableSaves=!0,this.saveVariableLocations(e)}};var KR=new Map;function QR(n){if(typeof n=="string")return n;let t=KR.get(n);return t||(t={url:URL.createObjectURL(new Blob([n]))},KR.set(n,t)),t.url}var JR,$R=new Promise(n=>{JR=n}),ZR=!1;var ax;function e3(){if(ZR)return;if(ax)return ax;async function n(){await import("./howler.js"),JR(window!==void 0?window:global),ZR=!0}return ax=n(),ax}var t3;$R.then(n=>t3=n);function r3(n){let t=!1;return n.scene.objects.traverse((e,r)=>{if(r.events===void 0||Array.isArray(r.events)===!1)return!0;let i=[];r.events.forEach(s=>{"dragDropActions"in s.data?(i.push(...s.data.dragDropActions.drag),i.push(...s.data.dragDropActions.drop)):"inActions"in s.data?(i.push(...s.data.inActions),i.push(...s.data.outActions)):"gameActions"in s.data?(i.push(...s.data.gameActions.idle),i.push(...s.data.gameActions.move),i.push(...s.data.gameActions.jump),i.push(...s.data.gameActions.run)):"breakpoints"in s.data?s.data.breakpoints.forEach(o=>{i.push(...o.data.actions)}):"actions"in s.data&&i.push(...s.data.actions),t=t||i.some(o=>o.data.type==="Audio")})}),t}var Na=class{constructor({src:t,volume:e,delay:r,loop:i}){this._volume=1;this.delay=0;this._loop=1;this.loopsRemaining=0;this._status="stopped";this.onEnd=()=>{this.loopsRemaining===1/0?this.replay():this.loopsRemaining>1?(this.replay(),this.loopsRemaining--):(this._status="stopped",this.loopsRemaining=this._loop)};let s;typeof t=="string"?s={src:t}:s={src:QR(t),format:"wav"},this.sound=new t3.Howl(s),this.sound.on("end",this.onEnd),this.src=t,e!==void 0&&(this.volume=e),r!==void 0&&(this.delay=r),i!==void 0&&(this.loop=i)}get status(){return this._status}get volume(){return this._volume}set volume(t){this._volume=t,this.sound.volume(t)}get loop(){return this._loop}set loop(t){this._loop=t,this.loopsRemaining=t}replay(){this.clearDelay(),this.delayTimerId=window.setTimeout(()=>{this.sound.play(),this.clearDelay()},this.delay)}fade(t,e=1e3){t?(this.sound.volume(this._volume),this.clearFade(),this.fadeTimerId=window.setTimeout(()=>{this.sound.fade(this._volume,0,e),this.clearFade()},t)):this.sound.fade(this._volume,0,e)}on(t,e,r){this.sound.on(t,e,r)}off(t,e,r){this.sound.off(t,e,r)}play(){this._status==="playing"||this.sound.playing()||(this._status==="paused"?(this.sound.seek()===0?this.replay():this.sound.play(),this._status="playing"):this._status==="stopped"&&(this.replay(),this._status="playing"))}pause(){this._status==="playing"&&(this.sound.pause(),this.clearFade(),this.clearDelay(),this._status="paused")}stop(){this.sound.stop(),this.loopsRemaining=this._loop,this.clearFade(),this.clearDelay(),this._status="stopped"}clearFade(){this.fadeTimerId&&(clearTimeout(this.fadeTimerId),delete this.fadeTimerId)}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}dispose(t=!1){this.off(),this.stop(),this.clearFade(),this.clearDelay()}};var lx=class{constructor(){this.type="ShapePath";this.color=new We;this.subPaths=[];this.currentPath=null}moveTo(t,e){return this.currentPath=new Tc,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath?.lineTo(t,e),this}quadraticCurveTo(t,e,r,i){return this.currentPath?.quadraticCurveTo(t,e,r,i),this}bezierCurveTo(t,e,r,i,s,o){return this.currentPath?.bezierCurveTo(t,e,r,i,s,o),this}splineThru(t){return this.currentPath?.splineThru(t),this}toShapes(){let e={ORIGIN:0,DESTINATION:1,BETWEEN:2,LEFT:3,RIGHT:4,BEHIND:5,BEYOND:6},r={loc:e.ORIGIN,t:0};function i(m,g,y,v){let x=m.x,S=g.x,w=y.x,A=v.x,T=m.y,b=g.y,M=y.y,C=v.y,P=(A-w)*(T-M)-(C-M)*(x-w),I=(S-x)*(T-M)-(b-T)*(x-w),_=(C-M)*(S-x)-(A-w)*(b-T),D=P/_,L=I/_;if(_===0&&P!==0||D<=0||D>=1||L<0||L>1)return null;if(P===0&&_===0){for(let j=0;j<2;j++)if(s(j===0?y:v,m,g),r.loc===e.ORIGIN){let V=j===0?y:v;return{x:V.x,y:V.y,t:r.t}}else if(r.loc===e.BETWEEN){let V=+(x+r.t*(S-x)).toPrecision(10),H=+(T+r.t*(b-T)).toPrecision(10);return{x:V,y:H,t:r.t}}return null}else{for(let H=0;H<2;H++)if(s(H===0?y:v,m,g),r.loc===e.ORIGIN){let W=H===0?y:v;return{x:W.x,y:W.y,t:r.t}}let j=+(x+D*(S-x)).toPrecision(10),V=+(T+D*(b-T)).toPrecision(10);return{x:j,y:V,t:D}}}function s(m,g,y){let v=y.x-g.x,x=y.y-g.y,S=m.x-g.x,w=m.y-g.y,A=v*w-S*x;if(m.x===g.x&&m.y===g.y){r.loc=e.ORIGIN,r.t=0;return}if(m.x===y.x&&m.y===y.y){r.loc=e.DESTINATION,r.t=1;return}if(A<-Number.EPSILON){r.loc=e.LEFT;return}if(A>Number.EPSILON){r.loc=e.RIGHT;return}if(v*S<0||x*w<0){r.loc=e.BEHIND;return}if(Math.sqrt(v*v+x*x)C.t<=M.t+Number.EPSILON&&C.t>=M.t-Number.EPSILON)===void 0&&(y.push(M),v.push(new k(M.x,M.y)))}}return v}function a(m,g,y){let v=new k;g.getCenter(v);let x=[];return y.forEach(S=>{S.boundingBox.containsPoint(v)&&o(m,S.points).forEach(A=>{x.push({identifier:S.identifier,isCW:S.isCW,point:A})})}),x.sort((S,w)=>S.point.x-w.point.x),x}function l(m,g,y,v,x){(x==null||x==="")&&(x="nonzero");let S=new k;m.boundingBox.getCenter(S);let w=[new k(y,S.y),new k(v,S.y)],A=a(w,m.boundingBox,g);A.sort((I,_)=>I.point.x-_.point.x);let T=[],b=[];A.forEach(I=>{I.identifier===m.identifier?T.push(I):b.push(I)});let M=T[0].point.x,C=[],P=0;for(;P0&&C[C.length-1]===b[P].identifier?C.pop():C.push(b[P].identifier),P++;if(C.push(m.identifier),x==="evenodd"){let I=C.length%2===0,_=C[C.length-2];return{identifier:m.identifier,isHole:I,for:_}}else if(x==="nonzero"){let I=!0,_=null,D=null;for(let L=0;L{let g=m.getPoints(),y=-999999999,v=999999999,x=-999999999,S=999999999;for(let w=0;wy&&(y=A.y),A.yx&&(x=A.x),A.x=S&&(u=S-1),g.length&&d.push({curves:m.curves,points:g,isCW:ju.isClockWise(g),identifier:c++,boundingBox:new eh(new k(S,v),new k(x,y))})});let f=d.map(m=>l(m,d,u,h,this.userData?.style.fillRule)),p=[];return d.forEach(m=>{let g=f[m.identifier];if(g&&!g.isHole){let y=new ua;y.curves=m.curves,f.filter(x=>x?.isHole&&x.for===m.identifier).forEach(x=>{if(x){let S=d[x.identifier],w=new Tc;w.curves=S.curves,y.holes.push(w)}}),p.push(y)}}),p}};var IE=!1,n3,DE=new Promise(n=>{n3=n}),i3=!1;var cx;function s3(){if(IE=!0,i3)return;if(cx)return cx;async function n(){var va=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var Ne=va(()=>{});String.prototype.codePointAt||function(){var e=function(){try{var t={},a=Object.defineProperty,n=a(t,t,t)&&a}catch{}return n}(),r=function(t){if(this==null)throw TypeError();var a=String(this),n=a.length,s=t?Number(t):0;if(s!=s&&(s=0),!(s<0||s>=n)){var i=a.charCodeAt(s),u;return i>=55296&&i<=56319&&n>s+1&&(u=a.charCodeAt(s+1),u>=56320&&u<=57343)?(i-55296)*1024+u-56320+65536:i}};e?e(String.prototype,"codePointAt",{value:r,configurable:!0,writable:!0}):String.prototype.codePointAt=r}();var Sr=0,xt=-3;function Le(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function da(e,r){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=r,this.destLen=0,this.ltree=new Le,this.dtree=new Le}var bt=new Le,St=new Le,Tr=new Uint8Array(30),kr=new Uint16Array(30),Tt=new Uint8Array(30),kt=new Uint16Array(30),ga=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Br=new Le,se=new Uint8Array(288+32);function Ft(e,r,t,a){var n,s;for(n=0;n>>=1,r}function ie(e,r,t){if(!r)return t;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>16-r;return e.tag>>>=r,e.bitcount-=r,a+t}function hr(e,r){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>=1,++n,t+=r.table[n],a-=r.table[n];while(a>=0);return e.tag=s,e.bitcount-=n,r.trans[t+a]}function xa(e,r,t){var a,n,s,i,u,o;for(a=ie(e,5,257),n=ie(e,5,1),s=ie(e,4,4),i=0;i<19;++i)se[i]=0;for(i=0;i8;)e.sourceIndex--,e.bitcount-=8;if(r=e.source[e.sourceIndex+1],r=256*r+e.source[e.sourceIndex],t=e.source[e.sourceIndex+3],t=256*t+e.source[e.sourceIndex+2],r!==(~t&65535))return xt;for(e.sourceIndex+=4,a=r;a;--a)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,Sr}function Sa(e,r){var t=new da(e,r),a,n,s;do{switch(a=ya(t),n=ie(t,2,0),n){case 0:s=ba(t);break;case 1:s=Mr(t,bt,St);break;case 2:xa(t,t.ltree,t.dtree),s=Mr(t,t.ltree,t.dtree);break;default:s=xt}if(s!==Sr)throw new Error("Data error")}while(!a);return t.destLenthis.x2&&(this.x2=e)),typeof r=="number"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=r,this.y2=r),rthis.y2&&(this.y2=r))};pe.prototype.addX=function(e){this.addPoint(e,null)};pe.prototype.addY=function(e){this.addPoint(null,e)};pe.prototype.addBezier=function(e,r,t,a,n,s,i,u){var o=[e,r],l=[t,a],f=[n,s],h=[i,u];this.addPoint(e,r),this.addPoint(i,u);for(var p=0;p<=1;p++){var c=6*o[p]-12*l[p]+6*f[p],d=-3*o[p]+9*l[p]-9*f[p]+3*h[p],x=3*l[p]-3*o[p];if(d===0){if(c===0)continue;var m=-x/c;0=0&&o>0&&(u+=" "),u+=r(l)}return u}for(var a="",n=0;n=0&&e<=255,"Byte value should be between 0 and 255."),[e]};E.BYTE=ae(1);g.CHAR=function(e){return[e.charCodeAt(0)]};E.CHAR=ae(1);g.CHARARRAY=function(e){typeof e>"u"&&(e="",console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."));for(var r=[],t=0;t"u"?0:e.length};g.USHORT=function(e){return[e>>8&255,e&255]};E.USHORT=ae(2);g.SHORT=function(e){return e>=Gr&&(e=-(2*Gr-e)),[e>>8&255,e&255]};E.SHORT=ae(2);g.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]};E.UINT24=ae(3);g.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]};E.ULONG=ae(4);g.LONG=function(e){return e>=Nr&&(e=-(2*Nr-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]};E.LONG=ae(4);g.FIXED=g.ULONG;E.FIXED=E.ULONG;g.FWORD=g.SHORT;E.FWORD=E.SHORT;g.UFWORD=g.USHORT;E.UFWORD=E.USHORT;g.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]};E.LONGDATETIME=ae(8);g.TAG=function(e){return U.argument(e.length===4,"Tag should be exactly 4 ASCII characters."),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]};E.TAG=ae(4);g.Card8=g.BYTE;E.Card8=E.BYTE;g.Card16=g.USHORT;E.Card16=E.USHORT;g.OffSize=g.BYTE;E.OffSize=E.BYTE;g.SID=g.USHORT;E.SID=E.USHORT;g.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?(e=e-108,[(e>>8)+247,e&255]):e>=-1131&&e<=-108?(e=-e-108,[(e>>8)+251,e&255]):e>=-32768&&e<=32767?g.NUMBER16(e):g.NUMBER32(e)};E.NUMBER=function(e){return g.NUMBER(e).length};g.NUMBER16=function(e){return[28,e>>8&255,e&255]};E.NUMBER16=ae(3);g.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]};E.NUMBER32=ae(5);g.REAL=function(e){var r=e.toString(),t=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(r);if(t){var a=parseFloat("1e"+((t[2]?+t[2]:0)+t[1].length));r=(Math.round(e*a)/a).toString()}for(var n="",s=0,i=r.length;s>8&255,r[r.length]=a&255}return r};E.UTF16=function(e){return e.length*2};var cr={"x-mac-croatian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u03A9\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uF8FF\xA9\u2044\u20AC\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7","x-mac-cyrillic":"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E","x-mac-gaelic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u1E02\xB1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xE6\xF8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xFF\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xB7\u1EF2\u1EF3\u204A\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u2663\xD2\xDA\xDB\xD9\u0131\xDD\xFD\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83","x-mac-greek":"\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\u20AC\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\xB7\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xAD","x-mac-icelandic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-inuit":"\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xB0\u14A1\u14A5\u14A6\u2022\xB6\u14A7\xAE\xA9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026\xA0\u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142","x-mac-ce":"\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7",macintosh:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-romanian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u0218\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\u0103\u0219\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-turkish":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\uF8A0\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"};Fe.MACSTRING=function(e,r,t,a){var n=cr[a];if(n!==void 0){for(var s="",i=0;i=128&&(s=t[s],s===void 0))return;a[n]=s}return a}};E.MACSTRING=function(e,r){var t=g.MACSTRING(e,r);return t!==void 0?t.length:0};function vr(e){return e>=-128&&e<=127}function Fa(e,r,t){for(var a=0,n=e.length;r>8&255,o+256&255)}return s}g.VARDELTAS=function(e){for(var r=0,t=[];r=-128&&a<=127?r=Ua(e,r,t):r=Ca(e,r,t)}return t};g.INDEX=function(e){for(var r=1,t=[r],a=[],n=0;n>8,r[h+1]=p&255,r=r.concat(a[f])}return r};E.TABLE=function(e){for(var r=0,t=e.fields.length,a=0;a0)return new v(this.data,this.offset+r).parseStruct(e)};v.prototype.parsePointer32=function(e){var r=this.parseOffset32();if(r>0)return new v(this.data,this.offset+r).parseStruct(e)};v.prototype.parseListOfLists=function(e){for(var r=this.parseOffset16List(),t=r.length,a=this.relativeOffset,n=new Array(t),s=0;s>1,r.skip("uShort",3),e.glyphIndexMap={};for(var i=new k.Parser(t,a+n+14),u=new k.Parser(t,a+n+16+s*2),o=new k.Parser(t,a+n+16+s*4),l=new k.Parser(t,a+n+16+s*6),f=a+n+16+s*8,h=0;h=0;n-=1){var s=k.getUShort(e,r+4+n*8),i=k.getUShort(e,r+4+n*8+2);if(s===3&&(i===0||i===1||i===10)||s===0&&(i===0||i===1||i===2||i===3||i===4)){a=k.getULong(e,r+4+n*8+4);break}}if(a===-1)throw new Error("No valid cmap sub-tables found.");var u=new k.Parser(e,r+a);if(t.format=u.parseUShort(),t.format===12)Aa(t,u);else if(t.format===4)Ba(t,u,e,r,a);else throw new Error("Only format 4 and 12 cmap tables are supported (found format "+t.format+").");return t}function Ma(e,r,t){e.segments.push({end:r,start:r,delta:-(r-t),offset:0,glyphIndex:t})}function Pa(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function Ga(e){var r=!0,t;for(t=e.length-1;t>0;t-=1){var a=e.get(t);if(a.unicode>65535){console.log("Adding CMAP format 12 (needed!)"),r=!1;break}}var n=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:r?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:r?12:12+8}];r||(n=n.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),n=n.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var s=new b.Table("cmap",n);for(s.segments=[],t=0;t>4,i=n&15;if(s===t||(r+=a[s],i===t))break;r+=a[i]}return parseFloat(r)}function ja(e,r){var t,a,n,s;if(r===28)return t=e.parseByte(),a=e.parseByte(),t<<8|a;if(r===29)return t=e.parseByte(),a=e.parseByte(),n=e.parseByte(),s=e.parseByte(),t<<24|a<<16|n<<8|s;if(r===30)return Ja(e);if(r>=32&&r<=246)return r-139;if(r>=247&&r<=250)return t=e.parseByte(),(r-247)*256+t+108;if(r>=251&&r<=254)return t=e.parseByte(),-(r-251)*256-t-108;throw new Error("Invalid b0 "+r)}function $a(e){for(var r={},t=0;t>1,o.length=0,f=!0}function L(F){for(var G,Y,Z,j,$,M,N,W,_,V,H,X,A=0;A1&&!f&&(R=o.shift()+y,f=!0),c+=o.pop(),O(p,c);break;case 5:for(;o.length>0;)p+=o.shift(),c+=o.shift(),u.lineTo(p,c);break;case 6:for(;o.length>0&&(p+=o.shift(),u.lineTo(p,c),o.length!==0);)c+=o.shift(),u.lineTo(p,c);break;case 7:for(;o.length>0&&(c+=o.shift(),u.lineTo(p,c),o.length!==0);)p+=o.shift(),u.lineTo(p,c);break;case 8:for(;o.length>0;)a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i+o.shift(),u.curveTo(a,n,s,i,p,c);break;case 10:$=o.pop()+x,M=d[$],M&&L(M);break;case 11:return;case 12:switch(q=F[A],A+=1,q){case 35:a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),N=s+o.shift(),W=i+o.shift(),_=N+o.shift(),V=W+o.shift(),H=_+o.shift(),X=V+o.shift(),p=H+o.shift(),c=X+o.shift(),o.shift(),u.curveTo(a,n,s,i,N,W),u.curveTo(_,V,H,X,p,c);break;case 34:a=p+o.shift(),n=c,s=a+o.shift(),i=n+o.shift(),N=s+o.shift(),W=i,_=N+o.shift(),V=i,H=_+o.shift(),X=c,p=H+o.shift(),u.curveTo(a,n,s,i,N,W),u.curveTo(_,V,H,X,p,c);break;case 36:a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),N=s+o.shift(),W=i,_=N+o.shift(),V=i,H=_+o.shift(),X=V+o.shift(),p=H+o.shift(),u.curveTo(a,n,s,i,N,W),u.curveTo(_,V,H,X,p,c);break;case 37:a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),N=s+o.shift(),W=i+o.shift(),_=N+o.shift(),V=W+o.shift(),H=_+o.shift(),X=V+o.shift(),Math.abs(H-p)>Math.abs(X-c)?p=H+o.shift():c=X+o.shift(),u.curveTo(a,n,s,i,N,W),u.curveTo(_,V,H,X,p,c);break;default:console.log("Glyph "+r.index+": unknown operator "+1200+q),o.length=0}break;case 14:o.length>0&&!f&&(R=o.shift()+y,f=!0),h&&(u.closePath(),h=!1);break;case 18:D();break;case 19:case 20:D(),A+=l+7>>3;break;case 21:o.length>2&&!f&&(R=o.shift()+y,f=!0),c+=o.pop(),p+=o.pop(),O(p,c);break;case 22:o.length>1&&!f&&(R=o.shift()+y,f=!0),p+=o.pop(),O(p,c);break;case 23:D();break;case 24:for(;o.length>2;)a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i+o.shift(),u.curveTo(a,n,s,i,p,c);p+=o.shift(),c+=o.shift(),u.lineTo(p,c);break;case 25:for(;o.length>6;)p+=o.shift(),c+=o.shift(),u.lineTo(p,c);a=p+o.shift(),n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i+o.shift(),u.curveTo(a,n,s,i,p,c);break;case 26:for(o.length%2&&(p+=o.shift());o.length>0;)a=p,n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s,c=i+o.shift(),u.curveTo(a,n,s,i,p,c);break;case 27:for(o.length%2&&(c+=o.shift());o.length>0;)a=p+o.shift(),n=c,s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i,u.curveTo(a,n,s,i,p,c);break;case 28:G=F[A],Y=F[A+1],o.push((G<<24|Y<<16)>>16),A+=2;break;case 29:$=o.pop()+e.gsubrsBias,M=e.gsubrs[$],M&&L(M);break;case 30:for(;o.length>0&&(a=p,n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i+(o.length===1?o.shift():0),u.curveTo(a,n,s,i,p,c),o.length!==0);)a=p+o.shift(),n=c,s=a+o.shift(),i=n+o.shift(),c=i+o.shift(),p=s+(o.length===1?o.shift():0),u.curveTo(a,n,s,i,p,c);break;case 31:for(;o.length>0&&(a=p+o.shift(),n=c,s=a+o.shift(),i=n+o.shift(),c=i+o.shift(),p=s+(o.length===1?o.shift():0),u.curveTo(a,n,s,i,p,c),o.length!==0);)a=p,n=c+o.shift(),s=a+o.shift(),i=n+o.shift(),p=s+o.shift(),c=i+(o.length===1?o.shift():0),u.curveTo(a,n,s,i,p,c);break;default:q<32?console.log("Glyph "+r.index+": unknown operator "+q):q<247?o.push(q-139):q<251?(G=F[A],A+=1,o.push((q-247)*256+G+108)):q<255?(G=F[A],A+=1,o.push(-(q-251)*256-G-108)):(G=F[A],Y=F[A+1],Z=F[A+2],j=F[A+3],A+=4,o.push((G<<24|Y<<16|Z<<8|j)/65536))}}}return L(t),r.advanceWidth=R,u}function nn(e,r,t,a){var n=[],s,i=new k.Parser(e,r),u=i.parseCard8();if(u===0)for(var o=0;o=a)throw new Error("CFF table CID Font FDSelect has bad FD index value "+s+" (FD count "+a+")");n.push(s)}else if(u===3){var l=i.parseCard16(),f=i.parseCard16();if(f!==0)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+f);for(var h,p=0;p=a)throw new Error("CFF table CID Font FDSelect has bad FD index value "+s+" (FD count "+a+")");if(h>t)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+h);for(;f=0&&(t=a),a=r.indexOf(e),a>=0?t=a+qe.length:(t=qe.length+r.length,r.push(e)),t}function on(){return new b.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function un(e){var r=new b.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);r.names=[];for(var t=0;t=t.begin&&e=1&&(t.ulCodePageRange1=a.parseULong(),t.ulCodePageRange2=a.parseULong()),t.version>=2&&(t.sxHeight=a.parseShort(),t.sCapHeight=a.parseShort(),t.usDefaultChar=a.parseUShort(),t.usBreakChar=a.parseUShort(),t.usMaxContent=a.parseUShort()),t}function Pn(e){return new b.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],e)}var xr={parse:Mn,make:Pn,unicodeRanges:yr,getUnicodeRange:In};function Gn(e,r){var t={},a=new k.Parser(e,r);switch(t.version=a.parseVersion(),t.italicAngle=a.parseFixed(),t.underlinePosition=a.parseShort(),t.underlineThickness=a.parseShort(),t.isFixedPitch=a.parseULong(),t.minMemType42=a.parseULong(),t.maxMemType42=a.parseULong(),t.minMemType1=a.parseULong(),t.maxMemType1=a.parseULong(),t.version){case 1:t.names=xe.slice();break;case 2:t.numberOfGlyphs=a.parseUShort(),t.glyphNameIndex=new Array(t.numberOfGlyphs);for(var n=0;n=xe.length){var i=a.parseChar();t.names.push(a.parseString(i))}break;case 2.5:t.numberOfGlyphs=a.parseUShort(),t.offset=new Array(t.numberOfGlyphs);for(var u=0;uh.value.tag?1:-1}),r.fields=r.fields.concat(a),r.fields=r.fields.concat(n),r}function Kr(e,r,t){for(var a=0;a0){var s=e.glyphs.get(n);return s.getMetrics()}}return t}function Vn(e){for(var r=0,t=0;tm||o===void 0)&&m>0&&(o=m),l 123 are reserved for internal usage");if(x.name!==".notdef"){var C=x.getMetrics();r.push(C.xMin),t.push(C.yMin),a.push(C.xMax),n.push(C.yMax),i.push(C.leftSideBearing),u.push(C.rightSideBearing),s.push(x.advanceWidth)}}var S={xMin:Math.min.apply(null,r),yMin:Math.min.apply(null,t),xMax:Math.max.apply(null,a),yMax:Math.max.apply(null,n),advanceWidthMax:Math.max.apply(null,s),advanceWidthAvg:Vn(s),minLeftSideBearing:Math.min.apply(null,i),maxLeftSideBearing:Math.max.apply(null,i),minRightSideBearing:Math.min.apply(null,u)};S.ascender=e.ascender,S.descender=e.descender;var R=Nt.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:S.xMin,yMin:S.yMin,xMax:S.xMax,yMax:S.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),O=Ht.make({ascender:S.ascender,descender:S.descender,advanceWidthMax:S.advanceWidthMax,minLeftSideBearing:S.minLeftSideBearing,minRightSideBearing:S.minRightSideBearing,xMaxExtent:S.maxLeftSideBearing+(S.xMax-S.xMin),numberOfHMetrics:e.glyphs.length}),D=_t.make(e.glyphs.length),L=xr.make(Object.assign({xAvgCharWidth:Math.round(S.advanceWidthAvg),usFirstCharIndex:o,usLastCharIndex:l,ulUnicodeRange1:f,ulUnicodeRange2:h,ulUnicodeRange3:p,ulUnicodeRange4:c,sTypoAscender:S.ascender,sTypoDescender:S.descender,sTypoLineGap:0,usWinAscent:S.yMax,usWinDescent:Math.abs(S.yMin),ulCodePageRange1:1,sxHeight:Kr(e,"xyvw",{yMax:Math.round(S.ascender/2)}).yMax,sCapHeight:Kr(e,"HIKLEFJMNTZBDPRAGOQSUVWXY",S).yMax,usDefaultChar:e.hasChar(" ")?32:0,usBreakChar:e.hasChar(" ")?32:0},e.tables.os2)),F=zt.make(e.glyphs),G=Et.make(e.glyphs),Y=e.getEnglishName("fontFamily"),Z=e.getEnglishName("fontSubfamily"),j=Y+" "+Z,$=e.getEnglishName("postScriptName");$||($=Y.replace(/\s/g,"")+"-"+Z);var M={};for(var N in e.names)M[N]=e.names[N];M.uniqueID||(M.uniqueID={en:e.getEnglishName("manufacturer")+":"+j}),M.postScriptName||(M.postScriptName={en:$}),M.preferredFamily||(M.preferredFamily=e.names.fontFamily),M.preferredSubfamily||(M.preferredSubfamily=e.names.fontSubfamily);var W=[],_=Zt.make(M,W),V=W.length>0?Wt.make(W):void 0,H=Qt.make(),X=Gt.make(e.glyphs,{version:e.getEnglishName("version"),fullName:j,familyName:Y,weightName:Z,postScriptName:$,unitsPerEm:e.unitsPerEm,fontBBox:[0,S.yMin,S.ascender,S.advanceWidthMax]}),A=e.metas&&Object.keys(e.metas).length>0?Jt.make(e.metas):void 0,q=[R,O,D,L,_,G,H,X,F];V&&q.push(V),e.tables.gsub&&q.push(Kt.make(e.tables.gsub)),A&&q.push(A);for(var rr=jt(q),ha=rr.encode(),ca=Er(ha),tr=rr.fields,Ar=!1,Ge=0;Ge>>1,s=e[n].tag;if(s===r)return n;s>>1,s=e[n];if(s===r)return n;s>>1;t=e[s];var i=t.start;if(i===r)return t;i0)return t=e[a-1],r>t.end?0:t}function Ae(e,r){this.font=e,this.tableName=r}Ae.prototype={searchTag:sr,binSearch:Jr,getTable:function(e){var r=this.font.tables[this.tableName];return!r&&e&&(r=this.font.tables[this.tableName]=this.createDefaultTable()),r},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(r){return r.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(!!e){for(var r=!1,t=0;t=0)return a[n].script;if(r){var s={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return a.splice(-1-n,0,s),s.script}}},getLangSysTable:function(e,r,t){var a=this.getScriptTable(e,t);if(a){if(!r||r==="dflt"||r==="DFLT")return a.defaultLangSys;var n=sr(a.langSysRecords,r);if(n>=0)return a.langSysRecords[n].langSys;if(t){var s={tag:r,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return a.langSysRecords.splice(-1-n,0,s),s.langSys}}},getFeatureTable:function(e,r,t,a){var n=this.getLangSysTable(e,r,a);if(n){for(var s,i=n.featureIndexes,u=this.font.tables[this.tableName].features,o=0;o=u[l-1].tag,"Features must be added in alphabetical order."),s={tag:t,feature:{params:0,lookupListIndexes:[]}},u.push(s),i.push(l),s.feature}}},getLookupTables:function(e,r,t,a,n){var s=this.getFeatureTable(e,r,t,n),i=[];if(s){for(var u,o=s.lookupListIndexes,l=this.font.tables[this.tableName].lookups,f=0;f=0?t:-1;case 2:var a=jr(e.ranges,r);return a?a.index+r-a.start:-1}},expandCoverage:function(e){if(e.format===1)return e.glyphs;for(var r=[],t=e.ranges,a=0;a1,'Multiple: "by" must be an array of two or more ids');var n=this.getLookupTables(t,a,e,2,!0)[0],s=Or(n,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});U.assert(s.coverage.format===1,"Multiple: unable to modify coverage table format "+s.coverage.format);var i=r.sub,u=this.binSearch(s.coverage.glyphs,i);u<0&&(u=-1-u,s.coverage.glyphs.splice(u,0,i),s.sequences.splice(u,0,0)),s.sequences[u]=r.by};K.prototype.addAlternate=function(e,r,t,a){var n=this.getLookupTables(t,a,e,3,!0)[0],s=Or(n,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});U.assert(s.coverage.format===1,"Alternate: unable to modify coverage table format "+s.coverage.format);var i=r.sub,u=this.binSearch(s.coverage.glyphs,i);u<0&&(u=-1-u,s.coverage.glyphs.splice(u,0,i),s.alternateSets.splice(u,0,0)),s.alternateSets[u]=r.by};K.prototype.addLigature=function(e,r,t,a){var n=this.getLookupTables(t,a,e,4,!0)[0],s=n.subtables[0];s||(s={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},n.subtables[0]=s),U.assert(s.coverage.format===1,"Ligature: unable to modify coverage table format "+s.coverage.format);var i=r.sub[0],u=r.sub.slice(1),o={ligGlyph:r.by,components:u},l=this.binSearch(s.coverage.glyphs,i);if(l>=0){for(var f=s.ligatureSets[l],h=0;h0?(s=e.parseByte(),(r&n)===0&&(s=-s),s=t+s):(r&n)>0?s=t:s=t+e.parseShort(),s}function ea(e,r,t){var a=new k.Parser(r,t);e.numberOfContours=a.parseShort(),e._xMin=a.parseShort(),e._yMin=a.parseShort(),e._xMax=a.parseShort(),e._yMax=a.parseShort();var n,s;if(e.numberOfContours>0){for(var i=e.endPointIndices=[],u=0;u0)for(var h=a.parseByte(),p=0;p0){var c=[],d;if(l>0){for(var x=0;x=0,c.push(d);for(var m=0,y=0;y0?(n&2)>0?(O.dx=a.parseShort(),O.dy=a.parseShort()):O.matchedPoints=[a.parseUShort(),a.parseUShort()]:(n&2)>0?(O.dx=a.parseChar(),O.dy=a.parseChar()):O.matchedPoints=[a.parseByte(),a.parseByte()],(n&8)>0?O.xScale=O.yScale=a.parseF2Dot14():(n&64)>0?(O.xScale=a.parseF2Dot14(),O.yScale=a.parseF2Dot14()):(n&128)>0&&(O.xScale=a.parseF2Dot14(),O.scale01=a.parseF2Dot14(),O.scale10=a.parseF2Dot14(),O.yScale=a.parseF2Dot14()),e.components.push(O),R=!!(n&32)}if(n&256){e.instructionLength=a.parseUShort(),e.instructions=[];for(var D=0;Dr.points.length-1||a.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+r.name);var i=r.points[a.matchedPoints[0]],u=n.points[a.matchedPoints[1]],o={xScale:a.xScale,scale01:a.scale01,scale10:a.scale10,yScale:a.yScale,dx:0,dy:0};u=ir([u],o)[0],o.dx=i.x-u.x,o.dy=i.y-u.y,s=ir(n.points,o)}r.points=r.points.concat(s)}}return ra(r.points)}function Jn(e,r,t,a){for(var n=new ue.GlyphSet(a),s=0;s2)){var t=this.font,a=this._prepState;if(!a||a.ppem!==r){var n=this._fpgmState;if(!n){de.prototype=ss,n=this._fpgmState=new de("fpgm",t.tables.fpgm),n.funcs=[],n.font=t,exports.DEBUG&&(console.log("---EXEC FPGM---"),n.step=-1);try{Se(n)}catch(l){console.log("Hinting error in FPGM:"+l),this._errorState=3;return}}de.prototype=n,a=this._prepState=new de("prep",t.tables.prep),a.ppem=r;var s=t.tables.cvt;if(s)for(var i=a.cvt=new Array(s.length),u=r/t.unitsPerEm,o=0;o1))try{return sa(e,a)}catch(l){this._errorState<1&&(console.log("Hinting error:"+l),console.log("Note: further hinting errors are silenced")),this._errorState=1;return}}};sa=function(e,r){var t=r.ppem/r.font.unitsPerEm,a=t,n=e.components,s,i,u;if(de.prototype=r,!n)u=new de("glyf",e.instructions),exports.DEBUG&&(console.log("---EXEC GLYPH---"),u.step=-1),br(e,u,t,a),i=u.gZone;else{var o=r.font;i=[],s=[];for(var l=0;l=176&&s<=183)a+=s-176+1;else if(s>=184&&s<=191)a+=(s-184+1)*2;else if(r&&n===1&&s===27)break;while(n>0);e.ip=a}function et(e,r){exports.DEBUG&&console.log(r.step,"SVTCA["+e.axis+"]"),r.fv=r.pv=r.dpv=e}function rt(e,r){exports.DEBUG&&console.log(r.step,"SPVTCA["+e.axis+"]"),r.pv=r.dpv=e}function tt(e,r){exports.DEBUG&&console.log(r.step,"SFVTCA["+e.axis+"]"),r.fv=e}function at(e,r){var t=r.stack,a=t.pop(),n=t.pop(),s=r.z2[a],i=r.z1[n];exports.DEBUG&&console.log("SPVTL["+e+"]",a,n);var u,o;e?(u=s.y-i.y,o=i.x-s.x):(u=i.x-s.x,o=i.y-s.y),r.pv=r.dpv=Me(u,o)}function nt(e,r){var t=r.stack,a=t.pop(),n=t.pop(),s=r.z2[a],i=r.z1[n];exports.DEBUG&&console.log("SFVTL["+e+"]",a,n);var u,o;e?(u=s.y-i.y,o=i.x-s.x):(u=i.x-s.x,o=i.y-s.y),r.fv=Me(u,o)}function is(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"SPVFS[]",t,a),e.pv=e.dpv=Me(a,t)}function os(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"SPVFS[]",t,a),e.fv=Me(a,t)}function us(e){var r=e.stack,t=e.pv;exports.DEBUG&&console.log(e.step,"GPV[]"),r.push(t.x*16384),r.push(t.y*16384)}function ls(e){var r=e.stack,t=e.fv;exports.DEBUG&&console.log(e.step,"GFV[]"),r.push(t.x*16384),r.push(t.y*16384)}function fs(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,"SFVTPV[]")}function ps(e){var r=e.stack,t=r.pop(),a=r.pop(),n=r.pop(),s=r.pop(),i=r.pop(),u=e.z0,o=e.z1,l=u[t],f=u[a],h=o[n],p=o[s],c=e.z2[i];exports.DEBUG&&console.log("ISECT[], ",t,a,n,s,i);var d=l.x,x=l.y,m=f.x,y=f.y,C=h.x,S=h.y,R=p.x,O=p.y,D=(d-m)*(S-O)-(x-y)*(C-R),L=d*y-x*m,F=C*O-S*R;c.x=(L*(C-R)-F*(d-m))/D,c.y=(L*(S-O)-F*(x-y))/D}function hs(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP0[]",e.rp0)}function cs(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP1[]",e.rp1)}function vs(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP2[]",e.rp2)}function ds(e){var r=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP0[]",r),e.zp0=r,r){case 0:e.tZone||$e(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function gs(e){var r=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP1[]",r),e.zp1=r,r){case 0:e.tZone||$e(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function ms(e){var r=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP2[]",r),e.zp2=r,r){case 0:e.tZone||$e(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function ys(e){var r=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZPS[]",r),e.zp0=e.zp1=e.zp2=r,r){case 0:e.tZone||$e(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function xs(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SLOOP[]",e.loop)}function bs(e){exports.DEBUG&&console.log(e.step,"RTG[]"),e.round=oa}function Ss(e){exports.DEBUG&&console.log(e.step,"RTHG[]"),e.round=ts}function Ts(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"SMD[]",r),e.minDis=r/64}function ks(e){exports.DEBUG&&console.log(e.step,"ELSE[]"),la(e,!1)}function Fs(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"JMPR[]",r),e.ip+=r-1}function Us(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCVTCI[]",r),e.cvCutIn=r/64}function Cs(e){var r=e.stack;exports.DEBUG&&console.log(e.step,"DUP[]"),r.push(r[r.length-1])}function or(e){exports.DEBUG&&console.log(e.step,"POP[]"),e.stack.pop()}function Es(e){exports.DEBUG&&console.log(e.step,"CLEAR[]"),e.stack.length=0}function Os(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"SWAP[]"),r.push(t),r.push(a)}function Ls(e){var r=e.stack;exports.DEBUG&&console.log(e.step,"DEPTH[]"),r.push(r.length)}function Rs(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"LOOPCALL[]",t,a);var n=e.ip,s=e.prog;e.prog=e.funcs[t];for(var i=0;i1?"loop "+(r.loop-u)+": ":"")+"SHP["+(e?"rp1":"rp2")+"]",l)}r.loop=1}function ut(e,r){var t=r.stack,a=e?r.rp1:r.rp2,n=(e?r.z0:r.z1)[a],s=r.fv,i=r.pv,u=t.pop(),o=r.z2[r.contours[u]],l=o;exports.DEBUG&&console.log(r.step,"SHC["+e+"]",u);var f=i.distance(n,n,!1,!0);do l!==n&&s.setRelative(l,l,f,i),l=l.nextPointOnContour;while(l!==o)}function lt(e,r){var t=r.stack,a=e?r.rp1:r.rp2,n=(e?r.z0:r.z1)[a],s=r.fv,i=r.pv,u=t.pop();exports.DEBUG&&console.log(r.step,"SHZ["+e+"]",u);var o;switch(u){case 0:o=r.tZone;break;case 1:o=r.gZone;break;default:throw new Error("Invalid zone")}for(var l,f=i.distance(n,n,!1,!0),h=o.length-2,p=0;p1?"loop "+(e.loop-t)+": ":"")+"SHPIX[]",i,n),a.setRelative(u,u,n),a.touch(u)}e.loop=1}function Ms(e){for(var r=e.stack,t=e.rp1,a=e.rp2,n=e.loop,s=e.z0[t],i=e.z1[a],u=e.fv,o=e.dpv,l=e.z2;n--;){var f=r.pop(),h=l[f];exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-n)+": ":"")+"IP[]",f,t,"<->",a),u.interpolate(h,s,i,o),u.touch(h)}e.loop=1}function ft(e,r){var t=r.stack,a=t.pop()/64,n=t.pop(),s=r.z1[n],i=r.z0[r.rp0],u=r.fv,o=r.pv;u.setRelative(s,i,a,o),u.touch(s),exports.DEBUG&&console.log(r.step,"MSIRP["+e+"]",a,n),r.rp1=r.rp0,r.rp2=n,e&&(r.rp0=n)}function Ps(e){for(var r=e.stack,t=e.rp0,a=e.z0[t],n=e.loop,s=e.fv,i=e.pv,u=e.z1;n--;){var o=r.pop(),l=u[o];exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-n)+": ":"")+"ALIGNRP[]",o),s.setRelative(l,a,0,i),s.touch(l)}e.loop=1}function Gs(e){exports.DEBUG&&console.log(e.step,"RTDG[]"),e.round=rs}function pt(e,r){var t=r.stack,a=t.pop(),n=t.pop(),s=r.z0[n],i=r.fv,u=r.pv,o=r.cvt[a];exports.DEBUG&&console.log(r.step,"MIAP["+e+"]",a,"(",o,")",n);var l=u.distance(s,De);e&&(Math.abs(l-o)",u),r.stack.push(Math.round(u*64))}function qs(e){exports.DEBUG&&console.log(e.step,"MPPEM[]"),e.stack.push(e.ppem)}function Xs(e){exports.DEBUG&&console.log(e.step,"FLIPON[]"),e.autoFlip=!0}function Ys(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"LT[]",t,a),r.push(at?1:0)}function Ks(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"GTEQ[]",t,a),r.push(a>=t?1:0)}function Js(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"EQ[]",t,a),r.push(t===a?1:0)}function js(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"NEQ[]",t,a),r.push(t!==a?1:0)}function $s(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"ODD[]",t),r.push(Math.trunc(t)%2?1:0)}function ei(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"EVEN[]",t),r.push(Math.trunc(t)%2?0:1)}function ri(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"IF[]",r),r||(la(e,!0),exports.DEBUG&&console.log(e.step,"EIF[]"))}function ti(e){exports.DEBUG&&console.log(e.step,"EIF[]")}function ai(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"AND[]",t,a),r.push(t&&a?1:0)}function ni(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"OR[]",t,a),r.push(t||a?1:0)}function si(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"NOT[]",t),r.push(t?0:1)}function ur(e,r){var t=r.stack,a=t.pop(),n=r.fv,s=r.pv,i=r.ppem,u=r.deltaBase+(e-1)*16,o=r.deltaShift,l=r.z0;exports.DEBUG&&console.log(r.step,"DELTAP["+e+"]",a,t);for(var f=0;f>4);if(c===i){var d=(p&15)-8;d>=0&&d++,exports.DEBUG&&console.log(r.step,"DELTAPFIX",h,"by",d*o);var x=l[h];n.setRelative(x,x,d*o,s)}}}function ii(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"SDB[]",t),e.deltaBase=t}function oi(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"SDS[]",t),e.deltaShift=Math.pow(.5,t)}function ui(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"ADD[]",t,a),r.push(a+t)}function li(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"SUB[]",t,a),r.push(a-t)}function fi(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"DIV[]",t,a),r.push(a*64/t)}function pi(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"MUL[]",t,a),r.push(a*t/64)}function hi(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"ABS[]",t),r.push(Math.abs(t))}function ci(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"NEG[]",t),r.push(-t)}function vi(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"FLOOR[]",t),r.push(Math.floor(t/64)*64)}function di(e){var r=e.stack,t=r.pop();exports.DEBUG&&console.log(e.step,"CEILING[]",t),r.push(Math.ceil(t/64)*64)}function Ve(e,r){var t=r.stack,a=t.pop();exports.DEBUG&&console.log(r.step,"ROUND[]"),t.push(r.round(a/64)*64)}function gi(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"WCVTF[]",t,a),e.cvt[a]=t*e.ppem/e.font.unitsPerEm}function lr(e,r){var t=r.stack,a=t.pop(),n=r.ppem,s=r.deltaBase+(e-1)*16,i=r.deltaShift;exports.DEBUG&&console.log(r.step,"DELTAC["+e+"]",a,t);for(var u=0;u>4);if(f===n){var h=(l&15)-8;h>=0&&h++;var p=h*i;exports.DEBUG&&console.log(r.step,"DELTACFIX",o,"by",p),r.cvt[o]+=p}}}function mi(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"SROUND[]",r),e.round=ua;var t;switch(r&192){case 0:t=.5;break;case 64:t=1;break;case 128:t=2;break;default:throw new Error("invalid SROUND value")}switch(e.srPeriod=t,r&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*t;break;case 32:e.srPhase=.5*t;break;case 48:e.srPhase=.75*t;break;default:throw new Error("invalid SROUND value")}r&=15,r===0?e.srThreshold=0:e.srThreshold=(r/8-.5)*t}function yi(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"S45ROUND[]",r),e.round=ua;var t;switch(r&192){case 0:t=Math.sqrt(2)/2;break;case 64:t=Math.sqrt(2);break;case 128:t=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(e.srPeriod=t,r&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*t;break;case 32:e.srPhase=.5*t;break;case 48:e.srPhase=.75*t;break;default:throw new Error("invalid S45ROUND value")}r&=15,r===0?e.srThreshold=0:e.srThreshold=(r/8-.5)*t}function xi(e){exports.DEBUG&&console.log(e.step,"ROFF[]"),e.round=es}function bi(e){exports.DEBUG&&console.log(e.step,"RUTG[]"),e.round=as}function Si(e){exports.DEBUG&&console.log(e.step,"RDTG[]"),e.round=ns}function Ti(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCANCTRL[]",r)}function vt(e,r){var t=r.stack,a=t.pop(),n=t.pop(),s=r.z2[a],i=r.z1[n];exports.DEBUG&&console.log(r.step,"SDPVTL["+e+"]",a,n);var u,o;e?(u=s.y-i.y,o=i.x-s.x):(u=i.x-s.x,o=i.y-s.y),r.dpv=Me(u,o)}function ki(e){var r=e.stack,t=r.pop(),a=0;exports.DEBUG&&console.log(e.step,"GETINFO[]",t),t&1&&(a=35),t&32&&(a|=4096),r.push(a)}function Fi(e){var r=e.stack,t=r.pop(),a=r.pop(),n=r.pop();exports.DEBUG&&console.log(e.step,"ROLL[]"),r.push(a),r.push(t),r.push(n)}function Ui(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"MAX[]",t,a),r.push(Math.max(a,t))}function Ci(e){var r=e.stack,t=r.pop(),a=r.pop();exports.DEBUG&&console.log(e.step,"MIN[]",t,a),r.push(Math.min(a,t))}function Ei(e){var r=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCANTYPE[]",r)}function Oi(e){var r=e.stack.pop(),t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"INSTCTRL[]",r,t),r){case 1:e.inhibitGridFit=!!t;return;case 2:e.ignoreCvt=!!t;return;default:throw new Error("invalid INSTCTRL[] selector")}}function he(e,r){var t=r.stack,a=r.prog,n=r.ip;exports.DEBUG&&console.log(r.step,"PUSHB["+e+"]");for(var s=0;s=0?1:-1,m=Math.abs(m),e&&(C=s.cvt[u],a&&Math.abs(m-C)":"_")+(a?"R":"_")+(n===0?"Gr":n===1?"Bl":n===2?"Wh":"")+"]",e?u+"("+s.cvt[u]+","+C+")":"",o,"(d =",x,"->",y*m,")"),s.rp1=s.rp0,s.rp2=o,r&&(s.rp0=o)}na=[et.bind(void 0,le),et.bind(void 0,oe),rt.bind(void 0,le),rt.bind(void 0,oe),tt.bind(void 0,le),tt.bind(void 0,oe),at.bind(void 0,0),at.bind(void 0,1),nt.bind(void 0,0),nt.bind(void 0,1),is,os,us,ls,fs,ps,hs,cs,vs,ds,gs,ms,ys,xs,bs,Ss,Ts,ks,Fs,Us,void 0,void 0,Cs,or,Es,Os,Ls,Ds,As,void 0,void 0,void 0,Rs,ws,Bs,void 0,st.bind(void 0,0),st.bind(void 0,1),it.bind(void 0,le),it.bind(void 0,oe),ot.bind(void 0,0),ot.bind(void 0,1),ut.bind(void 0,0),ut.bind(void 0,1),lt.bind(void 0,0),lt.bind(void 0,1),Is,Ms,ft.bind(void 0,0),ft.bind(void 0,1),Ps,Gs,pt.bind(void 0,0),pt.bind(void 0,1),Ns,Hs,zs,Ws,_s,Vs,ht.bind(void 0,0),ht.bind(void 0,1),void 0,ct.bind(void 0,0),ct.bind(void 0,1),qs,void 0,Xs,void 0,void 0,Ys,Zs,Qs,Ks,Js,js,$s,ei,ri,ti,ai,ni,si,ur.bind(void 0,1),ii,oi,ui,li,fi,pi,hi,ci,vi,di,Ve.bind(void 0,0),Ve.bind(void 0,1),Ve.bind(void 0,2),Ve.bind(void 0,3),void 0,void 0,void 0,void 0,gi,ur.bind(void 0,2),ur.bind(void 0,3),lr.bind(void 0,1),lr.bind(void 0,2),lr.bind(void 0,3),mi,yi,void 0,void 0,xi,void 0,bi,Si,or,or,void 0,void 0,void 0,void 0,void 0,Ti,vt.bind(void 0,0),vt.bind(void 0,1),ki,void 0,Fi,Ui,Ci,Ei,Oi,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),he.bind(void 0,4),he.bind(void 0,5),he.bind(void 0,6),he.bind(void 0,7),he.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),T.bind(void 0,0,0,0,0,0),T.bind(void 0,0,0,0,0,1),T.bind(void 0,0,0,0,0,2),T.bind(void 0,0,0,0,0,3),T.bind(void 0,0,0,0,1,0),T.bind(void 0,0,0,0,1,1),T.bind(void 0,0,0,0,1,2),T.bind(void 0,0,0,0,1,3),T.bind(void 0,0,0,1,0,0),T.bind(void 0,0,0,1,0,1),T.bind(void 0,0,0,1,0,2),T.bind(void 0,0,0,1,0,3),T.bind(void 0,0,0,1,1,0),T.bind(void 0,0,0,1,1,1),T.bind(void 0,0,0,1,1,2),T.bind(void 0,0,0,1,1,3),T.bind(void 0,0,1,0,0,0),T.bind(void 0,0,1,0,0,1),T.bind(void 0,0,1,0,0,2),T.bind(void 0,0,1,0,0,3),T.bind(void 0,0,1,0,1,0),T.bind(void 0,0,1,0,1,1),T.bind(void 0,0,1,0,1,2),T.bind(void 0,0,1,0,1,3),T.bind(void 0,0,1,1,0,0),T.bind(void 0,0,1,1,0,1),T.bind(void 0,0,1,1,0,2),T.bind(void 0,0,1,1,0,3),T.bind(void 0,0,1,1,1,0),T.bind(void 0,0,1,1,1,1),T.bind(void 0,0,1,1,1,2),T.bind(void 0,0,1,1,1,3),T.bind(void 0,1,0,0,0,0),T.bind(void 0,1,0,0,0,1),T.bind(void 0,1,0,0,0,2),T.bind(void 0,1,0,0,0,3),T.bind(void 0,1,0,0,1,0),T.bind(void 0,1,0,0,1,1),T.bind(void 0,1,0,0,1,2),T.bind(void 0,1,0,0,1,3),T.bind(void 0,1,0,1,0,0),T.bind(void 0,1,0,1,0,1),T.bind(void 0,1,0,1,0,2),T.bind(void 0,1,0,1,0,3),T.bind(void 0,1,0,1,1,0),T.bind(void 0,1,0,1,1,1),T.bind(void 0,1,0,1,1,2),T.bind(void 0,1,0,1,1,3),T.bind(void 0,1,1,0,0,0),T.bind(void 0,1,1,0,0,1),T.bind(void 0,1,1,0,0,2),T.bind(void 0,1,1,0,0,3),T.bind(void 0,1,1,0,1,0),T.bind(void 0,1,1,0,1,1),T.bind(void 0,1,1,0,1,2),T.bind(void 0,1,1,0,1,3),T.bind(void 0,1,1,1,0,0),T.bind(void 0,1,1,1,0,1),T.bind(void 0,1,1,1,0,2),T.bind(void 0,1,1,1,0,3),T.bind(void 0,1,1,1,1,0),T.bind(void 0,1,1,1,1,1),T.bind(void 0,1,1,1,1,2),T.bind(void 0,1,1,1,1,3)];function Ce(e){this.char=e,this.state={},this.activeState=null}function Lr(e,r,t){this.contextName=t,this.startIndex=e,this.endOffset=r}function Li(e,r,t){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=r,this.checkEnd=t}function re(e,r){this.context=e,this.index=r,this.length=e.length,this.current=e[r],this.backtrack=e.slice(0,r),this.lookahead=e.slice(r+1)}function er(e){this.eventId=e,this.subscribers=[]}function Ri(e){var r=this,t=["start","end","next","newToken","contextStart","contextEnd","insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD","updateContextsRanges"];t.forEach(function(n){Object.defineProperty(r.events,n,{value:new er(n)})}),e&&t.forEach(function(n){var s=e[n];typeof s=="function"&&r.events[n].subscribe(s)});var a=["insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD"];a.forEach(function(n){r.events[n].subscribe(r.updateContextsRanges)})}function B(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],Ri.call(this,e)}Ce.prototype.setState=function(e,r){return this.state[e]=r,this.activeState={key:e,value:this.state[e]},this.activeState};Ce.prototype.getState=function(e){return this.state[e]||null};B.prototype.inboundIndex=function(e){return e>=0&&e0&&e<=this.lookahead.length):return this.lookahead[e-1];default:return null}};B.prototype.rangeToText=function(e){if(e instanceof Lr)return this.getRangeTokens(e).map(function(r){return r.char}).join("")};B.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join("")};B.prototype.getContext=function(e){var r=this.registeredContexts[e];return r||null};B.prototype.on=function(e,r){var t=this.events[e];return t?t.subscribe(r):null};B.prototype.dispatch=function(e,r){var t=this,a=this.events[e];a instanceof er&&a.subscribers.forEach(function(n){n.apply(t,r||[])})};B.prototype.registerContextChecker=function(e,r,t){if(this.getContext(e))return{FAIL:"context name '"+e+"' is already registered."};if(typeof r!="function")return{FAIL:"missing context start check."};if(typeof t!="function")return{FAIL:"missing context end check."};var a=new Li(e,r,t);return this.registeredContexts[e]=a,this.contextCheckers.push(a),a};B.prototype.getRangeTokens=function(e){var r=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,r))};B.prototype.getContextRanges=function(e){var r=this.getContext(e);return r?r.ranges:{FAIL:"context checker '"+e+"' is not registered."}};B.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var r in e)if(e.hasOwnProperty(r)){var t=e[r];t.ranges=[]}};B.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map(function(a){return a.char}),r=0;r=n.start&&e<=n.end){var s=e-n.start;return n.index+s}}break;default:return-1}return-1}function Di(e,r){var t=Pe(e,r.coverage);return t===-1?null:e+r.deltaGlyphId}function Ai(e,r){var t=Pe(e,r.coverage);return t===-1?null:r.substitute[t]}function fr(e,r){for(var t=[],a=0;a=0;t--){var a=r[t],n=fa(a),s=me(a);if(!n&&!s)return!0;if(n)return!1}return!1}function Zi(e){if(fa(e.current))return!1;for(var r=0;r0}t("fontFamily"),t("weightName"),t("manufacturer"),t("copyright"),t("version"),this.unitsPerEm>0};w.prototype.toTables=function(){return Xn.fontToTable(this)};w.prototype.toBuffer=function(){return console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."),this.toArrayBuffer()};w.prototype.toArrayBuffer=function(){for(var e=this.toTables(),r=e.encode(),t=new ArrayBuffer(r.length),a=new Uint8Array(t),n=0;n=1.2&&(n.markGlyphSets=t.parsePointer(yo)),n}var bo={parse:xo},te=new Array(10);te[1]=function(){var r=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(v.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(v.coverage),values:this.parseValueRecordList()};U.assert(!1,"0x"+r.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};te[2]=function(){var r=this.offset+this.relativeOffset,t=this.parseUShort();U.assert(t===1||t===2,"0x"+r.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");var a=this.parsePointer(v.coverage),n=this.parseUShort(),s=this.parseUShort();if(t===1)return{posFormat:t,coverage:a,valueFormat1:n,valueFormat2:s,pairSets:this.parseList(v.pointer(v.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(n),value2:this.parseValueRecord(s)}})))};if(t===2){var i=this.parsePointer(v.classDef),u=this.parsePointer(v.classDef),o=this.parseUShort(),l=this.parseUShort();return{posFormat:t,coverage:a,valueFormat1:n,valueFormat2:s,classDef1:i,classDef2:u,class1Count:o,class2Count:l,classRecords:this.parseList(o,v.list(l,function(){return{value1:this.parseValueRecord(n),value2:this.parseValueRecord(s)}}))}}};te[3]=function(){return{error:"GPOS Lookup 3 not supported"}};te[4]=function(){return{error:"GPOS Lookup 4 not supported"}};te[5]=function(){return{error:"GPOS Lookup 5 not supported"}};te[6]=function(){return{error:"GPOS Lookup 6 not supported"}};te[7]=function(){return{error:"GPOS Lookup 7 not supported"}};te[8]=function(){return{error:"GPOS Lookup 8 not supported"}};te[9]=function(){return{error:"GPOS Lookup 9 not supported"}};function So(e,r){r=r||0;var t=new v(e,r),a=t.parseVersion(1);return U.argument(a===1||a===1.1,"Unsupported GPOS table version "+a),a===1?{version:a,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(te)}:{version:a,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(te),variations:t.parseFeatureVariationsList()}}var To=new Array(10);function ko(e){return new b.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new b.ScriptList(e.scripts)},{name:"features",type:"TABLE",value:new b.FeatureList(e.features)},{name:"lookups",type:"TABLE",value:new b.LookupList(e.lookups,To)}])}var Fo={parse:So,make:ko};function Uo(e){var r={};e.skip("uShort");var t=e.parseUShort();U.argument(t===0,"Unsupported kern sub-table version."),e.skip("uShort",2);var a=e.parseUShort();e.skip("uShort",3);for(var n=0;n1&&console.warn("Only the first kern subtable is supported."),e.skip("uLong");var a=e.parseUShort(),n=a&255;if(e.skip("uShort"),n===0){var s=e.parseUShort();e.skip("uShort",3);for(var i=0;i"u",n=a&&!t.isUrl?wo:Do;return new Promise(function(s,i){n(e,function(u,o){if(u){if(r)return r(u);i(u)}var l;try{l=Dr(o,t)}catch(f){if(r)return r(f,null);i(f)}if(r)return r(null,l);s(l)})})}function Io(e,r){var t=Ne(),a=t.readFileSync(e);return Dr($t(a),r)}var Mo=Object.freeze({__proto__:null,Font:w,Glyph:Q,Path:P,BoundingBox:pe,_parse:k,parse:Dr,load:Bo,loadSync:Io}),Ho=Mo;let e={Bidi:ne,BoundingBox:pe,Font:w,Glyph:Q,Path:P,_parse:k,default:Ho,load:Bo,loadSync:Io,parse:Dr};n3(e),i3=!0}return cx=n(),cx}var Pm=class{async load(t,e,r=()=>{}){let{load:i}=await DE;i(t,(s,o)=>{s||!o?r(s??"Something went wrong"):e(o)})}async parse(t){let{parse:e,Bidi:r}=await DE;try{let i=e(t),s=new r,o=a=>i.charToGlyphIndex(a.char);return s.registerModifier("glyphIndex",null,o),s.applyFeatures(i,i.defaultRenderOptions.features),{font:i,bidi:s}}catch(i){console.error(i)}}};async function jX(n){return await(await fetch(n)).arrayBuffer()}var HX=new Pm;async function OE(n){let t,e,r=!1;if(n.url?(t=await jX(n.url),e=n.url,r=n.url.startsWith("/")):n.data&&(t=n.data.buffer.slice(n.data.byteOffset,n.data.byteOffset+n.data.byteLength)),t)if(IE){let i=await HX.parse(t);if(i)return{font:i.font,url:e,intercepted:r,arr:t,bidi:i.bidi}}else return{font:void 0,url:e,intercepted:r,arr:t,bidi:null}}function WX(n,t){return t.state.glyphIndex===n||t.state.fina===n||t.state.medi===n||t.state.init===n}var ux=class{constructor(t){this._arrayBuffer=new ArrayBuffer(1);this._isLoaded=!1;this._intercepted=!1;this._isUserFont=t.isUserFont??!1,this._loadingPromise=OE(t).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}update(t){this._isLoaded=!1,this._isUserFont=t.isUserFont??!1,this._loadingPromise=OE(t).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(t,e,r){if(!this._bidi)return[];let i=this._bidi;i.getTextGlyphs(e);let s=i.tokenizer.tokens,o=[],a=0,l=r.length===s.length;for(let c=0;ce.length&&(y=!0);o.push({char:h,index:u,replacements:m,replacementChars:Array.from(f)}),a++}}return o}generateShapes(t,e){if(!this._isLoaded)return;let r=this.font,i=e.fontSize/this.unitsPerEm,s=e.fontSize*e.lineHeight,o=t.map(v=>this.getTextWidth(v,e)),a=e.width,l=this.getCharWidth(` `,e),c=e.horizontalAlign===1?l:0,u=this.computeSpaceWidthForLine(t,0,e),h=this.getLineInitialOffsetX(o[0],a,e.horizontalAlign,t[0],l),d=this.getLineInitialOffsetY(s,t.length,e.height,i,e.verticalAlign),f=[],p=t.map(v=>[]),m=t.map(v=>[]),g;for(let v=0;v(r.glyphs.get(H).advanceWidth??0)*i),L=D.reduce((H,W)=>H+=W,0),j=D.map(H=>H/L),V=h;for(let H=0;H=0&&(t-=s),r===3?e*.5-t*.5:r===2?e-t:0}getLineInitialOffsetY(t,e,r,i,s){let o=e*t,a=Math.abs(this.ascender-this.descender)*i,l=t-a,c=-this.ascender*i-l/2;return s===3?-(r-o-c):s===2?-(r*.5-o*.5-c):c}createPath(t,e,r,i,s){let o=t.getPath(r,-i,s.fontSize,{kerning:!1,letterSpacing:s.letterSpacing});if(!o){console.error('THREE.Font: character "'+t+'" does not exists in font family '+this.familyName+".");return}let a=new lx,l=(t.advanceWidth??1)*e;if(t)for(let c of o.commands){let u=a.currentPath?.currentPoint;if(!(u&&c.type!=="Z"&&u.x===c.x&&-u.y===c.y))switch(c.type){case"M":a.moveTo(c.x,-c.y);break;case"L":a.lineTo(c.x,-c.y);break;case"Q":a.quadraticCurveTo(c.x1,-c.y1,c.x,-c.y);break;case"C":a.bezierCurveTo(c.x1,-c.y1,c.x2,-c.y2,c.x,-c.y);break}}return a.subPaths.forEach(c=>{let u=qX(c.curves);u!==void 0&&c.currentPoint.distanceTo(u)>0&&c.lineTo(u.x,u.y)}),{offsetX:l+s.fontSize*s.letterSpacing,path:a}}getCharWidth(t,e){return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}getTextWidth(t,e){return this.font?.getAdvanceWidth(t,e.fontSize,{kerning:!0,letterSpacing:e.letterSpacing})??0}computeSpaceWidthForLine(t,e,r){let i=this.getCharWidth(" ",r),s=t[e];if(s){let o=this.countSpaces(s.trimEnd());if(r.horizontalAlign===4&&e{this.disposeObject(this.objects.get(t)),this.objects.delete(t)}),this.unreachable.clear()}dispose(){this.objects.forEach(t=>{this.disposeObject(t)}),this.objects.clear()}},_m=class extends RE{constructor(e){super();this.flatShading=e}disposeObject(e){e.dispose()}createObject(e,r,i){let s=Da(e,r,this.flatShading,i);return s.computeBoundingSphere(),s}};var o3={markNeedsUpdateRendererDirty:()=>{}};var hx=1e3,a3=512*hx;function YX(n,t){let e=typeof n;return!!((t==="string"||t==="number")&&e===t||t==="boolean"&&(n==="true"||n==="false"||n===!0||n===!1)||t==="image"&&e==="string"&&n.startsWith("http"))}var l3="https://hooks.spline.design",XX=`${l3}/events?hashFile=`,PPe=`${l3}/`,dx=class{constructor(t,e){this.id=t;this.userWebhook=e;this.result=void 0;this._connected=!1;this.emitter=Ia();this.reconnectWaitFor=hx;this._onError=t=>{this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this._scheduleReconnect()};this._onConnected=t=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=hx,this._connected=!0};this._onDisconnected=()=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=hx,this._connected=!1};this._onMessage=t=>{let e=t.data,r;try{r=JSON.parse(e)}catch(i){console.error("Error parsing webhook message",i)}if(r){let i=!1;this.userWebhook.parametersSchemas.forEach(({data:s})=>{r[s.name]!==void 0&&YX(r[s.name],s.type)&&(this.result===void 0&&(this.result={}),this.result[s.name]=r[s.name],i=!0)}),i&&this.emitter.emit("message",{userWebhookId:this.id})}}}connect(){clearTimeout(this.scheduledReconnectHandle),this.userWebhook.url&&(this.eventSource=new EventSource(XX+this.userWebhook.url),this.eventSource.addEventListener("message",this._onMessage),this.eventSource.addEventListener("error",this._onError),this.eventSource.addEventListener("open",this._onConnected))}disconnect(){this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this.eventSource?.close(),this._onDisconnected(),clearTimeout(this.scheduledReconnectHandle)}_scheduleReconnect(){this.reconnectWaitFor*=2,this.reconnectWaitFor>a3&&(this.reconnectWaitFor=a3),clearTimeout(this.scheduledReconnectHandle),this.scheduledReconnectHandle=setTimeout(()=>{this.scheduledReconnectHandle=void 0,this.connect()},this.reconnectWaitFor)}update(t){this.userWebhook=t}dispose(){this._connected&&this.disconnect()}get connected(){return this._connected}on(t,e){this.emitter.on(t,e)}off(t,e){this.emitter.off(t,e)}getParametersKeys(){return this.userWebhook.parametersSchemas.map(t=>t.data.name)}getParameterValue(t){if(this.getParametersKeys().includes(t)){if(this.result)return this.result?.[t];for(let r of this.userWebhook.parametersSchemas)if(r.data.name===t)return n0.defaultParameterValueByType(r.data.type)}}};var KX=globalThis.atob,QX=globalThis.btoa,ys=class{static floatTo16BitPCM(t){let e=new ArrayBuffer(t.length*2),r=new DataView(e),i=0;for(let s=0;sr[Math.floor(Math.random()*r.length)]).join("");return`${t}${i}`}};var ZX=n=>new Promise(t=>setTimeout(()=>t(),n)),nf=class{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(t,e){return this.eventHandlers[t]=this.eventHandlers[t]||[],this.eventHandlers[t].push(e),e}onNext(t,e){return this.nextEventHandlers[t]=this.nextEventHandlers[t]||[],this.nextEventHandlers[t].push(e),e}off(t,e){let r=this.eventHandlers[t]||[];if(e){let i=r.indexOf(e);if(i===-1)throw new Error(`Could not turn off specified event listener for "${t}": not found as a listener`);r.splice(i,1)}else delete this.eventHandlers[t];return!0}offNext(t,e){let r=this.nextEventHandlers[t]||[];if(e){let i=r.indexOf(e);if(i===-1)throw new Error(`Could not turn off specified next event listener for "${t}": not found as a listener`);r.splice(i,1)}else delete this.nextEventHandlers[t];return!0}async waitForNext(t,e=null){let r=Date.now(),i;for(this.onNext(t,s=>i=s);!i;){if(e&&Date.now()-r>e)return null;await ZX(1)}return i}dispatch(t,e){let r=[].concat(this.eventHandlers[t]||[]);for(let s of r)s(e);let i=[].concat(this.nextEventHandlers[t]||[]);for(let s of i)s(e);return delete this.nextEventHandlers[t],!0}};var Im=class extends nf{constructor({url:t,apiKey:e,dangerouslyAllowAPIKeyInBrowser:r,debug:i}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=t||this.defaultUrl,this.apiKey=e||null,this.debug=!!i,this.ws=null,globalThis.document&&this.apiKey&&!r)throw new Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...t){let r=[`[Websocket/${new Date().toISOString()}]`].concat(t).map(i=>typeof i=="object"&&i!==null?JSON.stringify(i,null,2):i);return this.debug&&console.log(...r),!0}async connect({model:t}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(!this.apiKey&&this.url===this.defaultUrl&&console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw new Error("Already connected");if(globalThis.document){this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");let e=globalThis.WebSocket,r=new e(`${this.url}${t?`?model=${t}`:""}`,["realtime",`openai-insecure-api-key.${this.apiKey}`,"openai-beta.realtime-v1"]);return r.addEventListener("message",i=>{let s=JSON.parse(i.data);this.receive(s.type,s)}),new Promise((i,s)=>{let o=()=>{this.disconnect(r),s(new Error(`Could not connect to "${this.url}"`))};r.addEventListener("error",o),r.addEventListener("open",()=>{this.log(`Connected to "${this.url}"`),r.removeEventListener("error",o),r.addEventListener("error",()=>{this.disconnect(r),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})}),r.addEventListener("close",()=>{this.disconnect(r),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})}),this.ws=r,i(!0)})})}}disconnect(t){if(!t||this.ws===t)return this.ws&&this.ws.close(),this.ws=null,!0}receive(t,e){return this.log("received:",t,e),this.dispatch(`server.${t}`,e),this.dispatch("server.*",e),!0}send(t,e){if(!this.isConnected())throw new Error("RealtimeAPI is not connected");if(e=e||{},typeof e!="object")throw new Error("data must be an object");let r={event_id:ys.generateId("evt_"),type:t,...e};return this.dispatch(`client.${t}`,r),this.dispatch("client.*",r),this.log("sent:",t,r),this.ws.send(JSON.stringify(r)),!0}};var Dm=class{constructor(){uo(this,"defaultFrequency",24e3);uo(this,"EventProcessors",{"conversation.item.created":t=>{let{item:e}=t,r=JSON.parse(JSON.stringify(e));if(this.itemLookup[r.id]||(this.itemLookup[r.id]=r,this.items.push(r)),r.formatted={},r.formatted.audio=new Int16Array(0),r.formatted.text="",r.formatted.transcript="",this.queuedSpeechItems[r.id]&&(r.formatted.audio=this.queuedSpeechItems[r.id].audio,delete this.queuedSpeechItems[r.id]),r.content){let i=r.content.filter(s=>["text","input_text"].includes(s.type));for(let s of i)r.formatted.text+=s.text}return this.queuedTranscriptItems[r.id]&&(r.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[r.id]),r.type==="message"?r.role==="user"?(r.status="completed",this.queuedInputAudio&&(r.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):r.status="in_progress":r.type==="function_call"?(r.formatted.tool={type:"function",name:r.name,call_id:r.call_id,arguments:""},r.status="in_progress"):r.type==="function_call_output"&&(r.status="completed",r.formatted.output=r.output),{item:r,delta:null}},"conversation.item.truncated":t=>{let{item_id:e,audio_end_ms:r}=t,i=this.itemLookup[e];if(!i)throw new Error(`item.truncated: Item "${e}" not found`);let s=Math.floor(r*this.defaultFrequency/1e3);return i.formatted.transcript="",i.formatted.audio=i.formatted.audio.slice(0,s),{item:i,delta:null}},"conversation.item.deleted":t=>{let{item_id:e}=t,r=this.itemLookup[e];if(!r)throw new Error(`item.deleted: Item "${e}" not found`);delete this.itemLookup[r.id];let i=this.items.indexOf(r);return i>-1&&this.items.splice(i,1),{item:r,delta:null}},"conversation.item.input_audio_transcription.completed":t=>{let{item_id:e,content_index:r,transcript:i}=t,s=this.itemLookup[e],o=i||" ";return s?(s.content[r].transcript=i,s.formatted.transcript=o,{item:s,delta:{transcript:i}}):(this.queuedTranscriptItems[e]={transcript:o},{item:null,delta:null})},"input_audio_buffer.speech_started":t=>{let{item_id:e,audio_start_ms:r}=t;return this.queuedSpeechItems[e]={audio_start_ms:r},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(t,e)=>{let{item_id:r,audio_end_ms:i}=t;this.queuedSpeechItems[r]||(this.queuedSpeechItems[r]={audio_start_ms:i});let s=this.queuedSpeechItems[r];if(s.audio_end_ms=i,e){let o=Math.floor(s.audio_start_ms*this.defaultFrequency/1e3),a=Math.floor(s.audio_end_ms*this.defaultFrequency/1e3);s.audio=e.slice(o,a)}return{item:null,delta:null}},"response.created":t=>{let{response:e}=t;return this.responseLookup[e.id]||(this.responseLookup[e.id]=e,this.responses.push(e)),{item:null,delta:null}},"response.output_item.added":t=>{let{response_id:e,item:r}=t,i=this.responseLookup[e];if(!i)throw new Error(`response.output_item.added: Response "${e}" not found`);return i.output.push(r.id),{item:null,delta:null}},"response.output_item.done":t=>{let{item:e}=t;if(!e)throw new Error('response.output_item.done: Missing "item"');let r=this.itemLookup[e.id];if(!r)throw new Error(`response.output_item.done: Item "${e.id}" not found`);return r.status=e.status,{item:r,delta:null}},"response.content_part.added":t=>{let{item_id:e,part:r}=t,i=this.itemLookup[e];if(!i)throw new Error(`response.content_part.added: Item "${e}" not found`);return i.content.push(r),{item:i,delta:null}},"response.audio_transcript.delta":t=>{let{item_id:e,content_index:r,delta:i}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.audio_transcript.delta: Item "${e}" not found`);return s.content[r].transcript+=i,s.formatted.transcript+=i,{item:s,delta:{transcript:i}}},"response.audio.delta":t=>{let{item_id:e,content_index:r,delta:i}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.audio.delta: Item "${e}" not found`);let o=ys.base64ToArrayBuffer(i),a=new Int16Array(o);return s.formatted.audio=ys.mergeInt16Arrays(s.formatted.audio,a),{item:s,delta:{audio:a}}},"response.text.delta":t=>{let{item_id:e,content_index:r,delta:i}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.text.delta: Item "${e}" not found`);return s.content[r].text+=i,s.formatted.text+=i,{item:s,delta:{text:i}}},"response.function_call_arguments.delta":t=>{let{item_id:e,delta:r}=t,i=this.itemLookup[e];if(!i)throw new Error(`response.function_call_arguments.delta: Item "${e}" not found`);return i.arguments+=r,i.formatted.tool.arguments+=r,{item:i,delta:{arguments:r}}}});this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(t){return this.queuedInputAudio=t,t}processEvent(t,...e){if(!t.event_id)throw console.error(t),new Error('Missing "event_id" on event');if(!t.type)throw console.error(t),new Error('Missing "type" on event');let r=this.EventProcessors[t.type];if(!r)throw new Error(`Missing conversation event processor for "${t.type}"`);return r.call(this,t,...e)}getItem(t){return this.itemLookup[t]||null}getItems(){return this.items.slice()}};var sf=class extends nf{constructor({url:t,apiKey:e,dangerouslyAllowAPIKeyInBrowser:r,debug:i}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new Im({url:t,apiKey:e,dangerouslyAllowAPIKeyInBrowser:r,debug:i}),this.conversation=new Dm,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",i=>{let s={time:new Date().toISOString(),source:"client",event:i};this.dispatch("realtime.event",s)}),this.realtime.on("server.*",i=>{let s={time:new Date().toISOString(),source:"server",event:i};this.dispatch("realtime.event",s)}),this.realtime.on("server.session.created",()=>this.sessionCreated=!0);let t=(i,...s)=>{let{item:o,delta:a}=this.conversation.processEvent(i,...s);return{item:o,delta:a}},e=(i,...s)=>{let{item:o,delta:a}=t(i,...s);return o&&this.dispatch("conversation.updated",{item:o,delta:a}),{item:o,delta:a}},r=async i=>{try{let s=JSON.parse(i.arguments),o=this.tools[i.name];if(!o)throw new Error(`Tool "${i.name}" has not been added`);let a=await o.handler(s);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:i.call_id,output:JSON.stringify(a)}})}catch(s){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:i.call_id,output:JSON.stringify({error:s.message})}})}this.createResponse()};return this.realtime.on("server.response.created",t),this.realtime.on("server.response.output_item.added",t),this.realtime.on("server.response.content_part.added",t),this.realtime.on("server.input_audio_buffer.speech_started",i=>{t(i),this.dispatch("conversation.interrupted")}),this.realtime.on("server.input_audio_buffer.speech_stopped",i=>t(i,this.inputAudioBuffer)),this.realtime.on("server.conversation.item.created",i=>{let{item:s}=e(i);this.dispatch("conversation.item.appended",{item:s}),s.status==="completed"&&this.dispatch("conversation.item.completed",{item:s})}),this.realtime.on("server.conversation.item.truncated",e),this.realtime.on("server.conversation.item.deleted",e),this.realtime.on("server.conversation.item.input_audio_transcription.completed",e),this.realtime.on("server.response.audio_transcript.delta",e),this.realtime.on("server.response.audio.delta",e),this.realtime.on("server.response.text.delta",e),this.realtime.on("server.response.function_call_arguments.delta",e),this.realtime.on("server.response.output_item.done",async i=>{let{item:s}=e(i);s.status==="completed"&&this.dispatch("conversation.item.completed",{item:s}),s.formatted.tool&&r(s.formatted.tool)}),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw new Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw new Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise(t=>setTimeout(()=>t(),1));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(t,e){if(!t?.name)throw new Error("Missing tool name in definition");let r=t?.name;if(this.tools[r])throw new Error(`Tool "${r}" already added. Please use .removeTool("${r}") before trying to add again.`);if(typeof e!="function")throw new Error(`Tool "${r}" handler must be a function`);return this.tools[r]={definition:t,handler:e},this.updateSession(),this.tools[r]}removeTool(t){if(!this.tools[t])throw new Error(`Tool "${t}" does not exist, can not be removed.`);return delete this.tools[t],!0}deleteItem(t){return this.realtime.send("conversation.item.delete",{item_id:t}),!0}updateSession({modalities:t=void 0,instructions:e=void 0,voice:r=void 0,input_audio_format:i=void 0,output_audio_format:s=void 0,input_audio_transcription:o=void 0,turn_detection:a=void 0,tools:l=void 0,tool_choice:c=void 0,temperature:u=void 0,max_response_output_tokens:h=void 0}={}){t!==void 0&&(this.sessionConfig.modalities=t),e!==void 0&&(this.sessionConfig.instructions=e),r!==void 0&&(this.sessionConfig.voice=r),i!==void 0&&(this.sessionConfig.input_audio_format=i),s!==void 0&&(this.sessionConfig.output_audio_format=s),o!==void 0&&(this.sessionConfig.input_audio_transcription=o),a!==void 0&&(this.sessionConfig.turn_detection=a),l!==void 0&&(this.sessionConfig.tools=l),c!==void 0&&(this.sessionConfig.tool_choice=c),u!==void 0&&(this.sessionConfig.temperature=u),h!==void 0&&(this.sessionConfig.max_response_output_tokens=h);let d=[].concat((l||[]).map(p=>{let m={type:"function",...p};if(this.tools[m?.name])throw new Error(`Tool "${m?.name}" has already been defined`);return m}),Object.keys(this.tools).map(p=>({type:"function",...this.tools[p].definition}))),f={...this.sessionConfig};return f.tools=d,this.realtime.isConnected()&&this.realtime.send("session.update",{session:f}),!0}sendUserMessageContent(t=[]){if(t.length){for(let e of t)e.type==="input_audio"&&(e.audio instanceof ArrayBuffer||e.audio instanceof Int16Array)&&(e.audio=ys.arrayBufferToBase64(e.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:t}})}return this.createResponse(),!0}appendInputAudio(t){return t.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:ys.arrayBufferToBase64(t)}),this.inputAudioBuffer=ys.mergeInt16Arrays(this.inputAudioBuffer,t)),!0}createResponse(){return this.getTurnDetectionType()===null&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(t,e=0){if(t){if(t){let r=this.conversation.getItem(t);if(!r)throw new Error(`Could not find item "${t}"`);if(r.type!=="message")throw new Error('Can only cancelResponse messages with type "message"');if(r.role!=="assistant")throw new Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");let i=r.content.findIndex(s=>s.type==="audio");if(i===-1)throw new Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:t,content_index:i,audio_end_ms:Math.floor(e/this.conversation.defaultFrequency*1e3)}),{item:r}}}else return this.realtime.send("response.cancel"),{item:null}}async waitForNextItem(){let t=await this.waitForNext("conversation.item.appended"),{item:e}=t;return{item:e}}async waitForNextCompletedItem(){let t=await this.waitForNext("conversation.item.completed"),{item:e}=t;return{item:e}}};var JX=` class AudioProcessor extends AudioWorkletProcessor { constructor() { super(); this.port.onmessage = this.receive.bind(this); this.initialize(); } initialize() { this.foundAudio = false; this.recording = false; this.chunks = []; } /** * Concatenates sampled chunks into channels * Format is chunk[Left[], Right[]] */ readChannelData(chunks, channel = -1, maxChannels = 9) { let channelLimit; if (channel !== -1) { if (chunks[0] && chunks[0].length - 1 < channel) { throw new Error( \`Channel \${channel} out of range: max \${chunks[0].length}\` ); } channelLimit = channel + 1; } else { channel = 0; channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels); } const channels = []; for (let n = channel; n < channelLimit; n++) { const length = chunks.reduce((sum, chunk) => { return sum + chunk[n].length; }, 0); const buffers = chunks.map((chunk) => chunk[n]); const result = new Float32Array(length); let offset = 0; for (let i = 0; i < buffers.length; i++) { result.set(buffers[i], offset); offset += buffers[i].length; } channels[n] = result; } return channels; } /** * Combines parallel audio data into correct format, * channels[Left[], Right[]] to float32Array[LRLRLRLR...] */ formatAudioData(channels) { if (channels.length === 1) { // Simple case is only one channel const float32Array = channels[0].slice(); const meanValues = channels[0].slice(); return { float32Array, meanValues }; } else { const float32Array = new Float32Array( channels[0].length * channels.length ); const meanValues = new Float32Array(channels[0].length); for (let i = 0; i < channels[0].length; i++) { const offset = i * channels.length; let meanValue = 0; for (let n = 0; n < channels.length; n++) { float32Array[offset + n] = channels[n][i]; meanValue += channels[n][i]; } meanValues[i] = meanValue / channels.length; } return { float32Array, meanValues }; } } /** * Converts 32-bit float data to 16-bit integers */ floatTo16BitPCM(float32Array) { const buffer = new ArrayBuffer(float32Array.length * 2); const view = new DataView(buffer); let offset = 0; for (let i = 0; i < float32Array.length; i++, offset += 2) { let s = Math.max(-1, Math.min(1, float32Array[i])); view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true); } return buffer; } /** * Retrieves the most recent amplitude values from the audio stream * @param {number} channel */ getValues(channel = -1) { const channels = this.readChannelData(this.chunks, channel); const { meanValues } = this.formatAudioData(channels); return { meanValues, channels }; } /** * Exports chunks as an audio/wav file */ export() { const channels = this.readChannelData(this.chunks); const { float32Array, meanValues } = this.formatAudioData(channels); const audioData = this.floatTo16BitPCM(float32Array); return { meanValues: meanValues, audio: { bitsPerSample: 16, channels: channels, data: audioData, }, }; } receive(e) { const { event, id } = e.data; let receiptData = {}; switch (event) { case 'start': this.recording = true; break; case 'stop': this.recording = false; break; case 'clear': this.initialize(); break; case 'export': receiptData = this.export(); break; case 'read': receiptData = this.getValues(); break; default: break; } // Always send back receipt this.port.postMessage({ event: 'receipt', id, data: receiptData }); } sendChunk(chunk) { const channels = this.readChannelData([chunk]); const { float32Array, meanValues } = this.formatAudioData(channels); const rawAudioData = this.floatTo16BitPCM(float32Array); const monoAudioData = this.floatTo16BitPCM(meanValues); this.port.postMessage({ event: 'chunk', data: { mono: monoAudioData, raw: rawAudioData, }, }); } process(inputList, outputList, parameters) { // Copy input to output (e.g. speakers) // Note that this creates choppy sounds with Mac products const sourceLimit = Math.min(inputList.length, outputList.length); for (let inputNum = 0; inputNum < sourceLimit; inputNum++) { const input = inputList[inputNum]; const output = outputList[inputNum]; const channelCount = Math.min(input.length, output.length); for (let channelNum = 0; channelNum < channelCount; channelNum++) { input[channelNum].forEach((sample, i) => { output[channelNum][i] = sample; }); } } const inputs = inputList[0]; // There's latency at the beginning of a stream before recording starts // Make sure we actually receive audio data before we start storing chunks let sliceIndex = 0; if (!this.foundAudio) { for (const channel of inputs) { sliceIndex = 0; // reset for each channel if (this.foundAudio) { break; } if (channel) { for (const value of channel) { if (value !== 0) { // find only one non-zero entry in any channel this.foundAudio = true; break; } else { sliceIndex++; } } } } } if (inputs && inputs[0] && this.foundAudio && this.recording) { // We need to copy the TypedArray, because the \`process\` // internals will reuse the same buffer to hold each input const chunk = inputs.map((input) => input.slice(sliceIndex)); this.chunks.push(chunk); this.sendChunk(chunk); } return true; } } registerProcessor('audio_processor', AudioProcessor); `,$X=new Blob([JX],{type:"application/javascript"}),eK=URL.createObjectURL($X),c3=eK;var u3=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],tK=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],Fa=[],px=[];for(let n=1;n<=8;n++)for(let t=0;tFa[t]>fx[0]&&Fa[t]Fa[t]>fx[0]&&Fa[t]=0;x--)if(y>p[x]){m[x]=Math.max(m[x],v);break}}c=m,u=i==="voice"?LE:Fa,h=i==="voice"?h3:px}else c=Array.from(r),u=c.map((p,m)=>l*m),h=u.map(p=>`${p.toFixed(2)} Hz`);let d=c.map(p=>Math.max(0,Math.min((p-s)/(o-s),1)));return{values:new Float32Array(d),frequencies:u,labels:h}}constructor(t,e=null){if(this.fftResults=[],e){let{length:r,sampleRate:i}=e,s=new OfflineAudioContext({length:r,sampleRate:i}),o=s.createBufferSource();o.buffer=e;let a=s.createAnalyser();a.fftSize=8192,a.smoothingTimeConstant=.1,o.connect(a);let l=1/60,c=r/i,u=h=>{let d=l*h;d{let f=new Float32Array(a.frequencyBinCount);a.getFloatFrequencyData(f),this.fftResults.push(f),u(h+1)}),h===1?s.startRendering():s.resume()};o.start(0),u(1),this.audio=t,this.context=s,this.analyser=a,this.sampleRate=i,this.audioBuffer=e}else{let r=new AudioContext,i=r.createMediaElementSource(t),s=r.createAnalyser();s.fftSize=8192,s.smoothingTimeConstant=.1,i.connect(s),s.connect(r.destination),this.audio=t,this.context=r,this.analyser=s,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}getFrequencies(t="frequency",e=-100,r=-30){let i=null;if(this.audioBuffer&&this.fftResults.length){let s=this.audio.currentTime/this.audio.duration,o=Math.min(s*this.fftResults.length|0,this.fftResults.length-1);i=this.fftResults[o]}return ql.getFrequencies(this.analyser,this.sampleRate,i,t,e,r)}async resumeIfSuspended(){return this.context.state==="suspended"&&await this.context.resume(),!0}};var Va=class{static floatTo16BitPCM(t){let e=new ArrayBuffer(t.length*2),r=new DataView(e),i=0;for(let s=0;s>8]),new Uint8Array([e,e>>8,e>>16,e>>24])][t]}pack(t,e){if(e?.bitsPerSample)if(e?.channels){if(!e?.data)throw new Error('Missing "data"')}else throw new Error('Missing "channels"');else throw new Error('Missing "bitsPerSample"');let{bitsPerSample:r,channels:i,data:s}=e,o=["RIFF",this._packData(1,4+(8+24)+(8+8)),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,i.length),this._packData(1,t),this._packData(1,t*i.length*r/8),this._packData(0,i.length*r/8),this._packData(0,r),"data",this._packData(1,i[0].length*i.length*r/8),s],a=new Blob(o,{type:"audio/mpeg"}),l=URL.createObjectURL(a);return{blob:a,url:l,channelCount:i.length,sampleRate:t,duration:s.byteLength/(i.length*t*2)}}};var Om=class{constructor({sampleRate:t=44100,outputToSpeakers:e=!1,debug:r=!1}={}){this.scriptSrc=c3,this.sampleRate=t,this.outputToSpeakers=e,this.debug=!!r,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=()=>{},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}static async decode(t,e=44100,r=-1){let i=new AudioContext({sampleRate:e}),s,o;if(t instanceof Blob){if(r!==-1)throw new Error('Can not specify "fromSampleRate" when reading from Blob');o=t,s=await o.arrayBuffer()}else if(t instanceof ArrayBuffer){if(r!==-1)throw new Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');s=t,o=new Blob([s],{type:"audio/wav"})}else{let u,h;if(t instanceof Int16Array){h=t,u=new Float32Array(t.length);for(let m=0;m');if(r===-1)throw new Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(r<3e3)throw new Error('Minimum "fromSampleRate" is 3000 (3kHz)');h||(h=Va.floatTo16BitPCM(u));let d={bitsPerSample:16,channels:[u],data:h};o=new Va().pack(r,d).blob,s=await o.arrayBuffer()}let a=await i.decodeAudioData(s),l=a.getChannelData(0),c=URL.createObjectURL(o);return{blob:o,url:c,values:l,audioBuffer:a}}log(){return this.debug&&this.log(...arguments),!0}getSampleRate(){return this.sampleRate}getStatus(){return this.processor?this.recording?"recording":"paused":"ended"}async _event(t,e={},r=null){if(r=r||this.processor,!r)throw new Error("Can not send events without recording first");let i={event:t,id:this._lastEventId++,data:e};r.port.postMessage(i);let s=new Date().valueOf();for(;!this.eventReceipts[i.id];){if(new Date().valueOf()-s>this.eventTimeout)throw new Error(`Timeout waiting for "${t}" event`);await new Promise(a=>setTimeout(()=>a(!0),1))}let o=this.eventReceipts[i.id];return delete this.eventReceipts[i.id],o}listenForDeviceChange(t){if(t===null&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(t!==null){let e=0,r=[],i=o=>o.map(a=>a.deviceId).sort().join(","),s=async()=>{let o=++e,a=await this.listDevices();o===e&&i(r)!==i(a)&&(r=a,t(a.slice()))};navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}async requestPermission(){let t=await navigator.permissions.query({name:"microphone"});if(t.state==="denied")window.alert("You must grant microphone access to use this feature.");else if(t.state==="prompt")try{(await navigator.mediaDevices.getUserMedia({audio:!0})).getTracks().forEach(i=>i.stop())}catch{window.alert("You must grant microphone access to use this feature.")}return!0}async listDevices(){if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw new Error("Could not request user devices");await this.requestPermission();let e=(await navigator.mediaDevices.enumerateDevices()).filter(s=>s.kind==="audioinput"),r=e.findIndex(s=>s.deviceId==="default"),i=[];if(r!==-1){let s=e.splice(r,1)[0],o=e.findIndex(a=>a.groupId===s.groupId);o!==-1&&(s=e.splice(o,1)[0]),s.default=!0,i.push(s)}return i.concat(e)}async begin(t){if(this.processor)throw new Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw new Error("Could not request user media");try{let a={audio:!0};t&&(a.audio={deviceId:{exact:t}}),this.stream=await navigator.mediaDevices.getUserMedia(a)}catch{throw new Error("Could not start media stream")}let e=new AudioContext({sampleRate:this.sampleRate}),r=e.createMediaStreamSource(this.stream);try{await e.audioWorklet.addModule(this.scriptSrc)}catch(a){throw console.error(a),new Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let i=new AudioWorkletNode(e,"audio_processor");i.port.onmessage=a=>{let{event:l,id:c,data:u}=a.data;if(l==="receipt")this.eventReceipts[c]=u;else if(l==="chunk")if(this._chunkProcessorSize){let h=this._chunkProcessorBuffer;this._chunkProcessorBuffer={raw:Va.mergeBuffers(h.raw,u.raw),mono:Va.mergeBuffers(h.mono,u.mono)},this._chunkProcessorBuffer.mono.byteLength>=this._chunkProcessorSize&&(this._chunkProcessor(this._chunkProcessorBuffer),this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else this._chunkProcessor(u)};let s=r.connect(i),o=e.createAnalyser();return o.fftSize=8192,o.smoothingTimeConstant=.1,s.connect(o),this.outputToSpeakers&&(console.warn(`Warning: Output to speakers may affect sound quality, especially due to system audio feedback preventative measures. use only for debugging`),o.connect(e.destination)),this.source=r,this.node=s,this.analyser=o,this.processor=i,!0}getFrequencies(t="frequency",e=-100,r=-30){if(!this.processor)throw new Error("Session ended: please call .begin() first");return ql.getFrequencies(this.analyser,this.sampleRate,null,t,e,r)}async pause(){if(this.processor){if(!this.recording)throw new Error("Already paused: please call .record() first")}else throw new Error("Session ended: please call .begin() first");return this._chunkProcessorBuffer.raw.byteLength&&this._chunkProcessor(this._chunkProcessorBuffer),this.log("Pausing ..."),await this._event("stop"),this.recording=!1,!0}async record(t=()=>{},e=8192){if(this.processor){if(this.recording)throw new Error("Already recording: please call .pause() first");if(typeof t!="function")throw new Error("chunkProcessor must be a function")}else throw new Error("Session ended: please call .begin() first");return this._chunkProcessor=t,this._chunkProcessorSize=e,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},this.log("Recording ..."),await this._event("start"),this.recording=!0,!0}async clear(){if(!this.processor)throw new Error("Session ended: please call .begin() first");return await this._event("clear"),!0}async read(){if(!this.processor)throw new Error("Session ended: please call .begin() first");return this.log("Reading ..."),await this._event("read")}async save(t=!1){if(!this.processor)throw new Error("Session ended: please call .begin() first");if(!t&&this.recording)throw new Error("Currently recording: please call .pause() first, or call .save(true) to force");this.log("Exporting ...");let e=await this._event("export");return new Va().pack(this.sampleRate,e.audio)}async end(){if(!this.processor)throw new Error("Session ended: please call .begin() first");let t=this.processor;this.log("Stopping ..."),await this._event("stop"),this.recording=!1,this.stream.getTracks().forEach(o=>o.stop()),this.log("Exporting ...");let r=await this._event("export",{},t);return this.processor.disconnect(),this.source.disconnect(),this.node.disconnect(),this.analyser.disconnect(),this.stream=null,this.processor=null,this.source=null,this.node=null,new Va().pack(this.sampleRate,r.audio)}async quit(){return this.listenForDeviceChange(null),this.processor&&await this.end(),!0}};var rK=` class StreamProcessor extends AudioWorkletProcessor { constructor() { super(); this.hasStarted = false; this.hasInterrupted = false; this.outputBuffers = []; this.bufferLength = 128; this.write = { buffer: new Float32Array(this.bufferLength), trackId: null }; this.writeOffset = 0; this.trackSampleOffsets = {}; this.port.onmessage = (event) => { if (event.data) { const payload = event.data; if (payload.event === 'write') { const int16Array = payload.buffer; const float32Array = new Float32Array(int16Array.length); for (let i = 0; i < int16Array.length; i++) { float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32 } this.writeData(float32Array, payload.trackId); } else if ( payload.event === 'offset' || payload.event === 'interrupt' ) { const requestId = payload.requestId; const trackId = this.write.trackId; const offset = this.trackSampleOffsets[trackId] || 0; this.port.postMessage({ event: 'offset', requestId, trackId, offset, }); if (payload.event === 'interrupt') { this.hasInterrupted = true; } } else { throw new Error(\`Unhandled event "\${payload.event}"\`); } } }; } writeData(float32Array, trackId = null) { let { buffer } = this.write; let offset = this.writeOffset; for (let i = 0; i < float32Array.length; i++) { buffer[offset++] = float32Array[i]; if (offset >= buffer.length) { this.outputBuffers.push(this.write); this.write = { buffer: new Float32Array(this.bufferLength), trackId }; buffer = this.write.buffer; offset = 0; } } this.writeOffset = offset; return true; } process(inputs, outputs, parameters) { const output = outputs[0]; const outputChannelData = output[0]; const outputBuffers = this.outputBuffers; if (this.hasInterrupted) { this.port.postMessage({ event: 'stop' }); return false; } else if (outputBuffers.length) { this.hasStarted = true; const { buffer, trackId } = outputBuffers.shift(); for (let i = 0; i < outputChannelData.length; i++) { outputChannelData[i] = buffer[i] || 0; } if (trackId) { this.trackSampleOffsets[trackId] = this.trackSampleOffsets[trackId] || 0; this.trackSampleOffsets[trackId] += buffer.length; } return true; } else if (this.hasStarted) { this.port.postMessage({ event: 'stop' }); return false; } else { return true; } } } registerProcessor('stream_processor', StreamProcessor); `,iK=new Blob([rK],{type:"application/javascript"}),nK=URL.createObjectURL(iK),d3=nK;var mx=class{constructor({sampleRate:t=44100}={}){this.scriptSrc=d3,this.sampleRate=t,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}async connect(){this.context=new AudioContext({sampleRate:this.sampleRate}),this.context.state==="suspended"&&await this.context.resume();try{await this.context.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),new Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let t=this.context.createAnalyser();return t.fftSize=8192,t.smoothingTimeConstant=.1,this.analyser=t,!0}getFrequencies(t="frequency",e=-100,r=-30){if(!this.analyser)throw new Error("Not connected, please call .connect() first");return ql.getFrequencies(this.analyser,this.sampleRate,null,t,e,r)}_start(){let t=new AudioWorkletNode(this.context,"stream_processor");return t.connect(this.context.destination),t.port.onmessage=e=>{let{event:r}=e.data;if(r==="stop")t.disconnect(),this.stream=null;else if(r==="offset"){let{requestId:i,trackId:s,offset:o}=e.data,a=o/this.sampleRate;this.trackSampleOffsets[i]={trackId:s,offset:o,currentTime:a}}},this.analyser.disconnect(),t.connect(this.analyser),this.stream=t,!0}add16BitPCM(t,e="default"){if(typeof e!="string")throw new Error("trackId must be a string");if(this.interruptedTrackIds[e])return;this.stream||this._start();let r;if(t instanceof Int16Array)r=t;else if(t instanceof ArrayBuffer)r=new Int16Array(t);else throw new Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:r,trackId:e}),r}async getTrackSampleOffset(t=!1){if(!this.stream)return null;let e=crypto.randomUUID();this.stream.port.postMessage({event:t?"interrupt":"offset",requestId:e});let r;for(;!r;)r=this.trackSampleOffsets[e],await new Promise(s=>setTimeout(()=>s(),1));let{trackId:i}=r;return t&&i&&(this.interruptedTrackIds[i]=!0),r}async interrupt(){return this.getTrackSampleOffset(!0)}};var f3=()=>!1&&window.location.search.includes("api-dev")?"https://relayserver-dev.spline.design/":"https://relayserver.spline.design/",Rm=class{constructor(t,e,r){this.data=t;this.id=e;this.shared=r;this.items=[];this.isConnected=!1;this.rafId=0;this.emitter=Ia();this.voice=0;this.frequencies=new Float32Array([0]);this.onRealTimeEvent=({time:t,source:e,event:r})=>{e==="server"&&r.type==="spline.ready"?this.onSessionCreated(r):e==="server"&&r.type==="session.created"&&(this.client.createResponse(),this.client.on("realtime.event",this.onRealTimeEvent))};this.onSessionCreated=async t=>{let e=Object.values(this.client.tools).map(r=>({type:"function",...r.definition}));this.client.realtime.send("spline.tools",{tools:e}),this.client.realtime.send("spline.connect",{}),await this.wavRecorder.record(r=>this.client.isConnected()&&this.client.appendInputAudio(r.mono))};this.animate=()=>{if(this.rafId=requestAnimationFrame(this.animate),this.isConnected){let t=this.wavStreamPlayer.analyser?this.wavStreamPlayer.getFrequencies("voice"):{values:new Float32Array([0])},e=t.values.reduce((r,i)=>r+i,0)/t.values.length;this.voice=e,this.frequencies=t.values,this.emitter.emit("voice",{value:e,frequencies:t.values})}};this.client=new sf({url:f3()+"?uuidfile="+t.integration.hash}),this.wavRecorder=new Om({sampleRate:24e3}),this.wavStreamPlayer=new mx({sampleRate:24e3})}update(t){this.data=t,this.client=new sf({url:f3()+"?uuidfile="+t.integration.hash})}setColorByName(t,e){let r=this.shared.getColorByName(t);if(r){let{id:i}=r,{r:s,g:o,b:a}=sR.hexStringToRgb(e)??{r:0,g:0,b:0};this.shared.updateColor(i,{r:s/255,g:o/255,b:a/255})}}connect(){if(this.isConnected)return;this.isConnected=!0,this.client.updateSession({turn_detection:{type:"server_vad"}}),this.client.addTool({name:"set_personality_color",description:"returns a color based on the voice personality of the ai assistant. This should be called by the voice assistant each time it is asks to speak differently. If a color cannot be associated to the personality, the color should be a neutral color.",parameters:{type:"object",properties:{color:{type:"string",description:"css hex color string, reflecting the personality"},personality:{type:"string",description:"the personality of the voice assistant"}},required:["color","personality"]}},({color:s})=>{this.setColorByName("Voice Assistant Color",s)});let t=this.shared.getVariablesNames().join(", ");this.client.addTool({name:"set_variable",description:"Sets a Spline variable value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the variable that needs to be set. Here's a list of available variables: ${t}. It the variable does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"The new value for this variable, should always be a string even for number and boolean variables, assume that the value will be cast to the proper type afterwards."}},required:["name","value","type"]}},({name:s,value:o})=>{let a=this.shared.getVariableByName(s);if(a){let l=this.shared.getVariable(a.id),c;typeof l=="number"?c=parseFloat(o):typeof l=="boolean"?c=o.toLowerCase()==="true":c={textValue:o},this.shared.updateVariable(a.id,c)}});let e=this.shared.getColorNames().join(", ");this.client.addTool({name:"set_color",description:"Sets a Spline color asset value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the color asset that needs to be set. Here's a list of available color assets: ${e}. It the color asset does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"css hex color string"}},required:["name","value"]}},({name:s,value:o})=>{this.setColorByName(s,o)});let r=this.shared.scene,i=[];r.traverseEntity(s=>{s.data.events.forEach(o=>{if(o.data.type==="AIAssistantTrigger"){let{description:a}=o.data;i.push(a)}})}),this.client.addTool({name:"trigger_event",description:"Trigger an event by name, here are the available events, please match what the user is asking for to one of these if it applies, otherwise don't call the function and warn the user.",parameters:{type:"object",properties:{description:{type:"string",description:`The name of the event that needs to be triggered. Here's a list of available events: ${JSON.stringify(i)}.`},direction:{type:"string",description:"default is forward, but can be forward or backward. Always set to forward unless the user ask to reverse or cancel the event, then set to backward."}},required:["description","direction"]}},({description:s,direction:o})=>{this.emitter.emit("trigger_event",{description:s,direction:o})}),this.client.on("error",s=>console.error(s)),this.client.on("conversation.interrupted",async()=>{let s=await this.wavStreamPlayer.interrupt();if(s?.trackId){let{trackId:o,offset:a}=s;await this.client.cancelResponse(o,a)}}),this.client.on("conversation.updated",async({item:s,delta:o})=>{let a=this.client.conversation.getItems();if(o?.audio&&this.wavStreamPlayer.add16BitPCM(o.audio,s.id),s.status==="completed"&&s.formatted.audio?.length){let l=await Om.decode(s.formatted.audio,24e3,24e3);s.formatted.file=l}this.items=a}),this.animate()}disconnect(){cancelAnimationFrame(this.rafId),this.voice=0,this.isConnected=!1}async start(){try{await this.wavRecorder.end()}catch{}await this.wavRecorder.begin(),this.client.on("realtime.event",this.onRealTimeEvent),await this.wavStreamPlayer.connect(),await this.client.connect()}async stop(){try{this.client.off("realtime.event",this.onRealTimeEvent)}catch(t){console.error(t)}this.client.disconnect(),await this.wavRecorder.end(),await this.wavStreamPlayer.interrupt()}computeAnalysisForListenerEvent(t){if(t.analysis==="range"){let e=this.frequencies.slice(...t.analysisRange);return e.reduce((r,i)=>r+i,0)/e.length}return t.analysis==="single"?this.frequencies[t.analysisSingle]:this.voice}on(t,e){this.emitter.on(t,e)}off(t,e){this.emitter.off(t,e)}};function gx(n){return"variable_"+n}var BE=class extends tx{constructor(e){super();this.shared=e}create(e){return new rf(e,this.shared)}},$c=class{constructor(t,e={},r=!0,i=!1){this.data=t;this.needsJitter=r;this.enableLocalStorageForPersistentVariables=i;this.geometryCache=new _m(!0);this.geometryCache2=new _m(!1);this.imageHolderCache=new BE(this);this.thisContext={scene:o3,shared:this};this.deletedMaterial=new Jc(Kr.defaultTwoLayerData("phong"),this.thisContext,"");this.deletedImage=new Jn(o0.emptyImage,this);this.deletedVideo=new Jn(jh.defaultVideo,this);this.materials={};this.images={};this.uiBuffers={};this.videos={};this.colors={};this.audios={};this.particles={};this.fonts={};this.variables={};this.userAPIs={};this.userWebhooks={};this.mouseProperty=null;this.raycastProperty=null;this.requestRender=()=>{this._requestRender&&this._requestRender()};if(e.images)for(let[s,o]of Object.entries(e.images))this.addImage(s,o);if(e.videos)for(let[s,o]of Object.entries(e.videos))this.addVideo(s,o);if(e.audios)for(let[s,o]of Object.entries(e.audios))this.addAudio(s,o);if(e.particles)for(let[s,o]of Object.entries(e.particles))this.addParticle(s,o);this.reset(t)}setRequestRender(t){this._requestRender=t}getImageLoadPromises(){return Object.values(this.images).map(t=>t.loadPromise)}setEntityOpContext(t){this.entityOpContext=t}reset(t,e=!1){this.data=t,this.resetLib(t.lib);for(let{id:r,data:i}of t.variables)this.addVariableHolder(r,i),e&&this.updateVariableHolder(r,i);for(let[r,i]of Object.entries(t.userAPIs))this.addUserAPI(r,i);for(let[r,i]of Object.entries(t.userWebhooks))this.addUserWebhook(r,i);for(let[r,i]of Object.entries(t.images))this.addImage(r,i);for(let[r,i]of Object.entries(t.videos))this.addVideo(r,i);for(let[r,i]of Object.entries(t.colors))this.addColor(r,i);for(let[r,i]of Object.entries(t.materials))this.addMaterial(r,i);for(let[r,i]of Object.entries(t.audios))this.addAudio(r,i);for(let[r,i]of Object.entries(t.particles))this.addParticle(r,i);for(let[r,i]of Object.entries(t.fonts))this.addFont(r,i)}addMaterial(t,e){if(this.materials[t]){let r=this.materials[t];r.reset(e,this.thisContext),r.dispose()}else{let r=new Jc(e,this.thisContext,t);this.materials[t]=r}}deleteMaterial(t){this.materials[t]&&(this.materials[t].nodeMaterialDispose(),delete this.materials[t])}getMaterial(t){let e=this.materials[t];return e}getMaterialOrDeletedPlaceholder(t){return this.materials[t]??this.deletedMaterial}material(t){return typeof t=="string"?this.getMaterialOrDeletedPlaceholder(t):t==null?(console.error("material is undefined or null"),this.deletedMaterial):new Ba(t,this.thisContext)}getMaterials(){return this.materials}addImage(t,e){return this.images[t]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.images[t].updateSrc(e.data),!0):(this.images[t]=new Jn(e,this),!1)}deleteImage(t){let e=this.images[t];e&&(e.dispose(),delete this.images[t])}getDefaultImage(){return this.images.image_0}getImage(t){return this.images[t]??this.deletedImage}image(t){return typeof t=="string"?this.getImage(t):this.imageHolderCache.load(t)}addUIBuffer(t,e){return this.uiBuffers[t]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.uiBuffers[t].updateSrc(e),!0):(this.uiBuffers[t]=new Jn(e,this),!1)}uiBuffer(t){return this.uiBuffers[t]}addVideo(t,e){return this.videos[t]?(this.videos[t].updateSrc(e.data),!0):(this.videos[t]=new Jn(e,this),!1)}deleteVideo(t){let e=this.videos[t];e&&(e.dispose(),delete this.videos[t])}getVideo(t){return this.videos[t]??this.deletedVideo}video(t){return typeof t=="string"?this.getVideo(t):this.imageHolderCache.load(t)}addColor(t,e){return this.colors[t]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),"a"in e?this.colors[t].setRGBA(e.r,e.g,e.b,e.a):this.colors[t].setRGBA(e.r,e.g,e.b,1),!0):("a"in e?this.colors[t]=new jl(e.r,e.g,e.b,e.a):this.colors[t]=new jl(e.r,e.g,e.b,1),!1)}updateColor(t,e){if(this.colors[t]){this.onColorOrImageUpdate&&this.onColorOrImageUpdate();let r=this.colors[t];return this.colors[t].r=e.r??r.r,this.colors[t].g=e.g??r.g,this.colors[t].b=e.b??r.b,this.colors[t].a=e.a??r.a,!0}return!1}deleteColor(t){this.colors[t]&&delete this.colors[t]}getColor(t){return this.colors[t]}getColorNames(){return Object.values(this.data.colors).map(t=>t.name)}getColorByName(t){for(let e in this.data.colors)if(this.data.colors[e].name===t)return{color:this.colors[e],id:e}}color(t){let e;if(typeof t=="string"){let r=this.getColor(t);r?e=r:(console.warn("Tried to create color layer params with a color key that does not exist in the assets manager"),e=new vr(0,0,0,0))}else return"a"in t?new vr(t.r,t.g,t.b,t.a):new vr(t.r,t.g,t.b,1);return e}addAudio(t,e){this.audios[t]=e}getAudio(t){let e=this.audios[t];if(e instanceof Na)return e;{let r=new Na({src:e.data});return this.audios[t]=r,r}}addParticle(t,e){this.particles[t]=e}getParticle(t){return this.particles[t]}deleteParticle(t){this.particles[t]&&delete this.particles[t]}deleteAudio(t){let e=this.audios[t];e&&(e instanceof Na&&e.dispose(),delete this.audios[t])}addFont(t,e){this.fonts[t]=new ux(e),this.fonts[t].loadingPromise.then(()=>this.requestRender())}getFont(t){return this.fonts[t]}deleteFont(t){this.fonts[t]&&delete this.fonts[t]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this._requestRender=void 0,Object.values(this.audios).forEach(e=>{e instanceof Na&&e.dispose()}),this.audios={},this.particles={},this.geometryCache.dispose(),this.geometryCache2.dispose()}addVariableHolder(t,e){if(this.variables[t]===void 0){let r=e.value;if(this.enableLocalStorageForPersistentVariables&&e.persistent){let i=localStorage.getItem(gx(t));r=i!==null?JSON.parse(i):e.value}return this.variables[t]={value:r,locations:[],persistent:e.persistent},"dynamicVariableType"in e&&(this.variables[t].dynamicVariablePlayState="Playing",this.variables[t].dynamicVariableToggleIsForward=void 0),!0}return this.variables[t].value=e.value,!1}resetDynamicVariablePlayState(){for(let t in this.variables)this.variables[t].dynamicVariablePlayState!==void 0&&(this.variables[t].dynamicVariablePlayState="Playing",this.variables[t].dynamicVariableToggleIsForward=void 0)}updateVariableHolder(t,e){this.updateVariable(t,e.value)}updateVariable(t,e){if(this.variables[t]===void 0)return!1;this.variables[t].value=e,this.enableLocalStorageForPersistentVariables&&this.variables[t].persistent&&localStorage.setItem(gx(t),JSON.stringify(e));let r=e;for(;typeof r=="string";)r=this.variables[r].value;let i=this.entityOpContext.scene;for(let s=this.variables[t].locations.length-1;s>=0;s--){let o=this.variables[t].locations[s];if(o[0]==="material"){let a=o[1],l=r,c={scene:i,shared:this},u=o.slice(2);i.traverseMaterial(d=>{let f=d.root??d;f.uuid===a&&f.onVariableUpdate(u,l,c)});let h=this.materials[a];h&&h.onVariableUpdate(u,l,c)}else{let a=i.find(o[0]);if(a===void 0){this.variables[t].locations.splice(s,1);continue}if(o[1]!=="geometry"&&o[1]!=="particles"){for(let l=1;l{let h=u.dataPatched;u.chooseGeoemtryCache(this).forceDelete(h.geometry),u.createGeometryDelayed(this.entityOpContext),u.onVariableUpdate(!0),u.invalidateDownstreamBooleanData()})}else o[1]==="morphTargetInfluences"&&a.updateMorphInfluences(o[2],r)}}return this.requestRender(),!0}deleteVariable(t){this.variables[t]&&delete this.variables[t]}getVariable(t,e){if(Array.isArray(t)){if(t[0]==="mouse")return this.mouseProperty?.[t[1]]??0;if(t[0]==="raycast")return this.raycastProperty?.[t[1]]??0;let r=this.entityOpContext.scene.find(t[0]);if(t[1]==="width"||t[1]==="height"||t[1]==="depth")return r.geometry.userData.parameters[t[1]];for(let i=1;iSr.equal(o,e));s!==void 0&&s!==-1&&i.locations.splice(s,1)}if(typeof t=="string"){let r=t,i=t;do{if(i=r,this.variables[r]===void 0)break;let s=this.variables[r].value;e&&this.variables[i]!==void 0&&this.variables[i].locations.push(e),r=s}while(typeof r=="string");return r}else return t}getVariables(){return this.variables}getVariablesNames(){return this.data.variables.map(t=>t.data.name)}getVariableByName(t){for(let e of this.data.variables)if(e.data.name===t)return{variable:e.data,id:e.id}}getDynamicVariablePlayState(t){return this.variables[t]?.dynamicVariablePlayState}setDynamicVariablePlayState(t,e){this.variables[t]!==void 0&&(this.variables[t].dynamicVariablePlayState=e)}getDynamicVariableToggleIsForward(t){return this.variables[t]?.dynamicVariableToggleIsForward}setDynamicVariableToggleIsForward(t,e){this.variables[t]!==void 0&&(this.variables[t].dynamicVariableToggleIsForward=e)}resetLib(t){for(let[e,r]of Object.entries(t.images))this.addImage(e,r.asset);for(let[e,r]of Object.entries(t.audios))this.addAudio(e,r.asset);for(let[e,r]of Object.entries(t.particles))this.addParticle(e,r.asset);for(let[e,r]of Object.entries(t.colors))this.addColor(e,r.asset);for(let[e,r]of Object.entries(t.fonts))this.addFont(e,r.asset);for(let[e,r]of Object.entries(t.materials))this.addMaterial(e,r.asset);for(let[e,r]of Object.entries(t.videos))this.addVideo(e,r.asset);for(let[e,r]of Object.entries(t.variables))this.addVariableHolder(e,r.asset)}updateLibByOp(t,e){t.path[0]==="images"?t.path.length===1&&t.type===1?this.addImage(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteImage(t.id):t.path[0]==="videos"?t.path.length===1&&t.type===1?this.addVideo(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteVideo(t.id):t.path[0]==="audios"?t.path.length===1&&t.type===1?this.addAudio(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteAudio(t.id):t.path[0]==="particles"?t.path.length===1&&t.type===1?this.addParticle(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteParticle(t.id):t.path[0]==="colors"?t.path.length===1&&t.type===1?this.addColor(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteColor(t.id):t.path[0]==="materials"?t.path.length===1&&t.type===1?this.addMaterial(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteMaterial(t.id):t.path[0]==="fonts"?t.path.length===1&&t.type===1?this.addFont(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteFont(t.id):t.path[0]==="variables"?t.path.length===1&&t.type===1?this.addVariableHolder(t.id,t.data.asset):t.path.length===1&&t.type===2&&this.deleteVariable(t.id):t.path[0]==="components"&&e.updateByLibOp(t,this)}updateByOp(t,e,r){if(this.data=e,t.path[0]==="images")t.path.length===2&&t.type===0?t.props.data&&this.getImage(t.path[1]).updateSrc(t.props.data):t.path.length===1&&t.type===1?this.addImage(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteImage(t.id);else if(t.path[0]==="videos")t.path.length===2&&t.type===0?t.props.data&&this.getVideo(t.path[1]).updateSrc(t.props.data):t.path.length===1&&t.type===1?this.addVideo(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteVideo(t.id);else if(t.path[0]==="audios")t.path.length===2&&t.type===0?t.props.data&&this.addAudio(t.path[1],e.audios[t.path[1]]):t.path.length===1&&t.type===1?this.addAudio(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteAudio(t.id);else if(t.path[0]==="particles")t.path.length===2&&t.type===0?t.props.data&&this.addParticle(t.path[1],e.particles[t.path[1]]):t.path.length===1&&t.type===1?this.addParticle(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteParticle(t.id);else if(t.path[0]==="colors")t.path.length===2&&t.type===0?this.updateColor(t.path[1],t.props):t.path.length===1&&t.type===1?this.addColor(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteColor(t.id);else if(t.path[0]==="materials")t.path.length===1&&t.type===1?this.addMaterial(t.id,t.data):t.path.length===1&&t.type===2?this.deleteMaterial(t.id):t.path.length>1&&this.getMaterial(t.path[1]).updateByOp(Lr.drop(t,2),e.materials[t.path[1]],{shared:this,scene:r});else if(t.path[0]==="fonts")t.path.length===2&&t.type===0?this.updateFont(t.path[1],t,r):t.path.length===1&&t.type===1?this.addFont(t.id,t.data):t.path.length===1&&t.type===2&&this.deleteFont(t.id);else if(t.path[0]==="variables")t.path.length===2&&t.type===0?"value"in t.props?this.updateVariable(t.path[1],t.props.value):"persistent"in t.props&&(this.variables[t.path[1]].persistent=t.props.persistent):t.path.length===1&&t.type===4?this.addVariableHolder(t.id,t.data):t.path.length===1&&t.type===5&&this.deleteVariable(t.id);else if(t.path[0]==="userAPIs"){if(t.path.length===1&&t.type===1)this.addUserAPI(t.id,t.data);else if(t.path.length===1&&t.type===2)this.deleteUserAPI(t.id);else if(typeof t.path[1]=="string"){let i=e.userAPIs[t.path[1]];if(i){let s=t.type===0&&t.props.debounce===void 0,o=this.getUserAPI(t.path[1]);o instanceof Rm?o.update(i):o?.update(i,this,s)}}}else if(t.path[0]==="userWebhooks"){if(t.path.length===1&&t.type===1)this.addUserWebhook(t.id,t.data);else if(t.path.length===1&&t.type===2)this.deleteUserWebhook(t.id);else if(typeof t.path[1]=="string"){let i=e.userWebhooks[t.path[1]];i&&this.getUserWebhook(t.path[1])?.update(i)}}else t.path[0]==="lib"&&this.updateLibByOp(Lr.drop(t,1),r)}updateFont(t,e,r){if(e.props.url){let i=this.getFont(t),s={...this.data.fonts[t],url:e.props.url};i.update(s),i.loadingPromise.then(()=>this.requestRender()),r.updateFont(t,this)}}addUserAPI(t,e){return this.userAPIs[t]?(this.userAPIs[t].update(e,this),!0):this.openAIRealtime?.id===t?(this.openAIRealtime.update(e),!0):e.integration?.type==="VoiceAssistant"?(this.openAIRealtime=new Rm(e,t,this),!1):(this.userAPIs[t]=new Dd(t,e,this),!1)}getUserAPI(t){return this.openAIRealtime?.id===t?this.openAIRealtime:this.userAPIs[t]}getUserAPIs(){return this.userAPIs}deleteUserAPI(t){let e=this.userAPIs[t];e&&(e.dispose(),delete this.userAPIs[t])}addUserWebhook(t,e){return this.userWebhooks[t]?(this.userWebhooks[t].update(e),!0):(this.userWebhooks[t]=new dx(t,e),!1)}getUserWebhook(t){return this.userWebhooks[t]}getUserWebhooks(){return this.userWebhooks}deleteUserWebhook(t){let e=this.userWebhooks[t];e&&(e.dispose(),delete this.userWebhooks[t])}get scene(){return this.entityOpContext.scene}},Z_e=new $c(vn.emptyData());var vs=class extends mr{updateByPatchedOp(e,r,i){if(super.updateByPatchedOp(e,r,i),MI(e.path,["materials"])!==null&&e.type===0&&Array.isArray(this.material))for(let[s,o]of Object.entries(e.props)){let a=i.shared.material(o);this.material[Number(s)]=a}else if(Lt(e.path,["material"])&&this.material instanceof Nn)"material"in r&&typeof r.material!="string"&&this.material.updateByOp(Lr.drop(e,1),r.material,i);else if(Lt(e.path,["materials","*"])&&Array.isArray(this.material)){let s=e.path[1];if("materials"in r&&sr.shared.material(s).getFlavor(i.flatShading,i.side,i.wireframe)),r.scene.markNeedsUpdateRendererDirty()):"material"in e&&e.material!==void 0&&(this.disposeMaterial(),this.material=[r.shared.material(e.material).getFlavor(i.flatShading,i.side,i.wireframe)],r.scene.markNeedsUpdateRendererDirty())),e.flatShading!==void 0||e.wireframe!==void 0||e.side!==void 0)if(Array.isArray(this.material))for(let s=0;s{e instanceof Nn&&(e instanceof Jc||e.nodeMaterialDispose())})}dispose(){this.disposeMaterial(),super.dispose()}};var p3=new E,m3=new Ze,g3=new Ze,oK=new E,y3=new ue,cr=class extends vs{constructor(e,r,i){super(e,r);this.data=r;this.isSkinnedMesh=!1;this.localGeometry=void 0,r.bindMode&&r.bindMatrix&&(this.bindMode=r.bindMode,this.bindMatrix=new ue().fromArray(r.bindMatrix),this.bindMatrixInverse=new ue)}chooseGeoemtryCache(e){return e.geometryCache}markGeometryAsReachable(e){this.geometryCreateDeleyed instanceof _e&&this.chooseGeoemtryCache(e).markAsReachable(this.dataPatched.geometry,this.geometryCreateDeleyed)}get geometry(){if(this.localGeometry!==void 0)return this.localGeometry;if(this.geometryCreateDeleyed instanceof $c){let e=this.geometryCreateDeleyed,r=this.chooseGeoemtryCache(e);this.geometryCreateDeleyed=r.get(this.dataPatched.geometry,e,this)}return this.geometryCreateDeleyed}set geometry(e){this.localGeometry=e}get is2DAndNoDepth(){let e=this.dataPatched.geometry;return Kp.is2DParametricMesh(e.type)&&e.depth===0}get is2DType(){return Kp.is2DParametricMesh(this.geometry.userData.type)}get isNonParametric(){return this.geometry.userData.type==="NonParametricGeometry"}updateByPatchedOp(e,r,i){super.updateByPatchedOp(e,r,i),Lt(e.path,["geometry"])&&this.updateByPatchedOpGeometry(Lr.drop(e,1),r.geometry,i)}removeInteractionGeometry(e){this.localGeometry?.dispose(),this.localGeometry=void 0}updateGeometryInteractions(e,r){this.invalidateDownstreamBooleanData();let i=this.data.geometry.type;if(i==="NonParametricGeometry"||i==="SubdivGeometry"){let s=e;if(this.localGeometry===void 0){let u={...this.data.geometry,...s};this.localGeometry=Da(u,r,this.data.flatShading,this)}let o,a,l;s.scaleBaked?[o,a,l]=s.scaleBaked:{width:o,height:a,depth:l}=s;let c=this.localGeometry.userData;c.sxPrev!==void 0&&gm(this.localGeometry.attributes,o/c.sxPrev,a/c.syPrev,l/c.szPrev),c.sxPrev=o,c.syPrev=a,c.szPrev=l}else{let s={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=Da(s,r,this.data.flatShading,this)}}refreshAttachedClonersInteractions(){for(let e of this.attachedSurfaceCloners)e.update()}refreshAttachedCloners(e){for(let r of this.attachedSurfaceCloners)e.scene.addPendingUpdateCloner(r.object)}refreshAttachedPaths(e){for(let r of this.attachedPaths)e.scene.addPendingCommand(()=>r.updateShape())}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.refreshAttachedCloners(e),this.refreshAttachedPaths(e)}updateByPatchedOpGeometry(e,r,i){let s=!1;e.type===0&&e.path.length===0&&Object.keys(e.props).includes("scaleBaked")&&this.geometryCreateDeleyed instanceof ni&&this.chooseGeoemtryCache(i.shared).mutateIfUnique(this.geometryCreateDeleyed.data,r)===this.geometryCreateDeleyed&&(s=!0,this.geometryCreateDeleyed.mutateDirectlyScaleBaked(r,e.props.scaleBaked),this.refreshAttachedCloners(i),this.refreshAttachedPaths(i)),s||(i.scene?.markGeometryCacheDirty(),this.createGeometryDelayed(i)),this.resetBBoxNeedsUpdate(),this.invalidateDownstreamBooleanData()}updateGeometryOnStateUpdate(e,r){this.createGeometryDelayed(r)}updateState(e,r){e.geometry!==void 0&&this.updateGeometryOnStateUpdate(e.geometry,r);let i=e.morphTargetInfluences;if(i){this.updateMorphTargets(),this.geometry.morphTargetsRelative=!0;for(let{data:{name:s,value:o}}of i)this.updateMorphInfluences(s,r.shared.getVariable(o,[this.uuid,"morphTargetInfluences",s]))}super.updateState(e,r)}updateMorphInfluences(e,r){if(this.morphTargetDictionary===void 0)return;let i=this.morphTargetDictionary[e];i!==void 0&&(this.morphTargetInfluences[i]=r)}updateGeometryGroupsIfNeeded(){Array.isArray(this.material)&&this.geometry.groups.length===0&&this.geometry.addGroup(0,Math.max(this.geometry.getIndex()?.count??0,this.geometry.getAttribute("position").count),0)}updateEntityBoxSize(e,r){let i=this.geometry.userData.parameters;this.is2DType?e.set(0,0,i.depth*.5):this.isNonParametric?(e.setScalar(0),this.geometry.boundingSphere&&e.copy(this.geometry.boundingSphere.center),r.set(i.width,i.height,i.depth??0).multiplyScalar(.5)):e.setScalar(0),r.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.bindMode==="attached"?this.bindMatrixInverse.copy(this.matrixWorld).invert():this.bindMode==="detached"&&this.bindMatrixInverse.copy(this.bindMatrix).invert()}bind(e,r){this.skeleton=e,this.isSkinnedMesh=!0,r===void 0&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),r=this.matrixWorld),this.bindMatrix.copy(r),this.bindMatrixInverse.copy(r).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(e){let r=new Ze,i=this.geometry.attributes.skinWeight;for(let s=0,o=i.count;s{for(let l of o.normals)o.result.add(l);o.result.divideScalar(o.normals.length)});for(let o=0;o{r.type==="Mesh"&&r.geometry.type==="SubdivGeometry"&&(t=!0)}),t}var Zs=class extends cr{constructor(e,r,i){super(e,r,i);this.data=r;this.hiddenMatrixOld=new ue;this.smoothShading=!0;this.skipReactionUpdate=!1}chooseGeoemtryCache(e){return this.dataPatched.flatShading?e.geometryCache:e.geometryCache2}get subdivPointerNew(){return this.localGeometry!==void 0?this.subdivPointer:this.geometry.ensureSubdivPointer()}get originalGeometryNew(){return this.localGeometry!==void 0?this.originalGeometry:this.geometry.originalGeometry}get phongAngle(){return this.data.geometry.phongAngle??45}updateEntityBoxSize(e,r){let i=this.geometry.userData.parameters;e.copy(this.originalGeometryNew.boundingSphere.center),r.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}createGeometryByControls(e){if(this.skipReactionUpdate===!0)return;let r=this.localGeometry?.uuid,{originalGeometry:i,subdividedGeometry:s,subdivPointer:o}=ni.build(e,this.subdivPointer,this.smoothShading,this.hasNonUniformScale?this.shearScale:void 0);this.subdivPointer=o,i!==void 0&&(this.originalGeometry?.dispose(),this.originalGeometry=i),s!==void 0&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=s??void 0),this.localGeometry=this.subdividedGeometry??this.originalGeometry,of(this),af(this),this.calcBoundingBox(),r&&(this.localGeometry.uuid=r)}updateState(e,r){if(super.updateState(e,r),e.flatShading!==void 0){let i=this.material;this.material=Array.isArray(i)?i.map(s=>s.getFlavor(!1,s.side,s.wireframe)):i.getFlavor(!1,i.side,i.wireframe),this.smoothShading=!e.flatShading,this.createGeometryDelayed(r)}}updateMesh(e=!1){ni.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0),this.subdividedGeometry&&ni.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=ni.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=ni.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.localGeometry=this.subdividedGeometry??this.originalGeometry}raycast(e,r){let i=this.localGeometry;this.localGeometry=this.originalGeometryNew,mr.prototype.raycast.call(this,e,r),this.localGeometry=i}activateSVDCompensation(){!this.hasNonUniformScale||(this.matrix.copy(this.matrixWorldRigid),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){!this.hasNonUniformScale||(this.updateMatrix(),this.hasNonUniformScale=void 0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;e.boundingSphere===null&&(e.boundingSphere=new Rr,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let r=e.attributes.position,i=e.boundingSphere.center;Vo.setFromBufferAttribute(r),Vo.getCenter(i),e.boundingSphere.radius=i.distanceTo(Vo.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),Vo.getSize(Lm),this.hasNonUniformScale&&Lm.divide(this.scale);let s={width:Lm.x,height:Lm.y,depth:Lm.z};return this.geometry.userData.parameters=s,s}updateBoundingSphere(e){let r=this.originalGeometry;Vo.min.set(e[0],e[2],e[4]),Vo.max.set(e[1],e[3],e[5]),this.hasNonUniformScale&&(Vo.min.applyMatrix4(this.shearScaleInv),Vo.max.applyMatrix4(this.shearScaleInv)),r.boundingSphere===null&&(r.boundingSphere=new Rr);let i=r.boundingSphere.center;Vo.getCenter(i),r.boundingSphere.radius=i.distanceTo(Vo.max)}freeSubdivPointer(){this.subdivPointer&&(ni.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0),this.localGeometry=void 0,this.originalGeometry?.dispose(),this.subdividedGeometry?.dispose()}dispose(){super.dispose(),this.freeSubdivPointer()}updateByPatchedOpGeometry(e,r,i){super.updateByPatchedOpGeometry(e,r,i),this.localGeometry&&this.createGeometryByControls(r)}};var x3=-1,cK=1,b3={x:[1,0,0],"-x":[-1,0,0],y:[0,1,0],"-y":[0,-1,0],z:[0,0,1],"-z":[0,0,-1]},S3={polygon_center:0,edge:1,vertex:2},Bm=(n,t)=>(e,r)=>!t||e===0||n===0?0:n*r/100,vt=(n,t)=>{let e=Math.abs(t),r=e*-1;return(n-x3)*(e-r)/(cK-x3)+r};function w3(n){let t=[],e={};for(var r=0,i=n.length;rMath.round(o*1e4)/1e4));e[s]||(t.push(n[r]),e[s]=!0)}return t}var uK=new E,yx=new E,hK=new E,dK=new E;function lf(n,t){let e=hK.fromArray(n),r=dK.fromArray(t);yx.copy(r).sub(e);let i=yx.length();return yx.normalize().multiplyScalar(i*.5),uK.copy(e).add(yx).toArray()}var xs=new Cr,vx=new E,xx=new E,eu=new E;function A3(n){let t=[];for(let e=0;e<=n.index.count;e++)if(vx.fromArray(n.index.array,e*3),xs.setFromAttributeAndIndices(n.attributes.position,vx.x,vx.y,vx.z),xs.getNormal(xx),xs.getMidpoint(eu),!(isNaN(eu.x)||isNaN(eu.y)||isNaN(eu.z))){let{a:r,b:i,c:s}=xs,o=r.toArray(),a=i.toArray(),l=s.toArray(),c=r.distanceTo(i),u=i.distanceTo(s),h=s.distanceTo(r),d=lf(o,a),f=lf(a,l),p=lf(l,o),m=[c,u,h],g=Math.max(...m),y=m.filter(S=>Math.round(S)===Math.round(g)).length>1,v=[],x=xs.getMidpoint(eu).toArray();g===c&&!y&&(v=[f,p,p],x=d),g===u&&!y&&(v=[d,p,p],x=f),g===h&&!y&&(v=[d,f,f],x=p),y&&(v=[d,f,p]),t.push({vertices:[o,a,l],faceCenters:v,midpoint:x,norm:xs.getNormal(xx).toArray()})}return t}function E3(n){let t=[],{position:e}=n.attributes;for(let r=0;r.5*(1-Math.cos(n*Math.PI)),FE=class{constructor(){this.perlin=new Array(4095+1)}noise(t,e=0,r=0){if(this.perlin==null){this.perlin=new Array(4095+1);for(let y=0;y<4095+1;y++)this.perlin[y]=Math.random()}t<0&&(t=-t),e<0&&(e=-e),r<0&&(r=-r);let i=Math.floor(t),s=Math.floor(e),o=Math.floor(r),a=t-i,l=e-s,c=r-o,u,h,d=0,f=.5,p,m,g;for(let y=0;y=1&&(i++,a--),l>=1&&(s++,l--),c>=1&&(o++,c--)}return d}noiseSeed(t){let e=(()=>{let o,a;return{setSeed(l){a=o=(l??Math.random()*4294967296)>>>0},getSeed(){return o},rand(){return a=(1664525*a+1013904223)%4294967296,a/4294967296}}})();e.setSeed(t),this.perlin=new Array(4095+1);for(let r=0;r<4095+1;r++)this.perlin[r]=e.rand()}},T3=FE;var M3=new E,C3=new ue,P3=new Ls;function VE(n){let t=!1;return n.scene.objects.traverse((e,r)=>{r.type==="Mesh"&&(r.geometry.type==="TextGeometry"||r.geometry.type==="InputGeometry")&&(t=!0)}),t}var Yl=class extends cr{constructor(e,r,i){super(e,r,i);this.data=r}get textGeometry(){return this.geometry}get charWidths(){return this.textGeometry.charWidths}get charCoords(){return this.textGeometry.charCoords}get wrappedText(){return this.textGeometry.wrappedText}get font(){return this.textGeometry.font}get initialOffsetY(){let e=this.dataPatched;return this.font?.getLineInitialOffsetY(this.lineHeight,this.wrappedText.length,e.geometry.height,this.fontScale,e.geometry.verticalAlign)??0}get fontScale(){let e=this.dataPatched;return this.font?e.geometry.fontSize/this.font.unitsPerEm:1}get AD(){return Math.abs(this.ascender-this.descender)}get ascender(){return(this.font?.ascender??1)*this.fontScale}get descender(){return(this.font?.descender??1)*this.fontScale}get lineHeight(){let e=this.dataPatched;return e.geometry.fontSize*e.geometry.lineHeight}raycast(e,r){let{matrixWorld:i}=this;if(!(isNaN(e.ray.origin.x)||this.scale.x===0||this.scale.y===0||this.scale.z===0)&&(C3.copy(i).invert(),P3.copy(e.ray).applyMatrix4(C3),P3.intersectBox(this.singleBBox,M3))){let s=M3.applyMatrix4(i),o=e.ray.origin.distanceTo(s);r.push({distance:o,point:s.clone(),object:this})}}};var An=1e-4,ko,D3,O3,R3,_3=new E,I3=new E;j0.then(n=>{ko=n,D3=[ko.get_face_center,ko.get_edge_midpoint,ko.get_vertex_position],O3=[ko.get_face_normal,ko.get_edge_normal,ko.get_vertex_normal],R3=[ko.face_count,ko.edge_count,ko.vertex_count]});var mK=new ue,gK=new ue,Xl=new E,bx=new E,Nm=new E,kE=new E,yK=new E,vK=new E;var ka=new T3,Gi=class extends yd(Tt){constructor(e,r){super();this.parameters=r;this.objectForSample=void 0;this._pendingMediaLoad=!1;this.object=e}resetOnMove(){this.removeFromParent(),this.parent=null}expandClones(e){if(this.parent===null)this.updateState(this.parameters,e);else for(let r of this.children)r instanceof Nr&&r.expand()}invalidateTransform(e){this.matrixWorldNeedsUpdate=!0,this.traverse(r=>{r instanceof Nr&&r.object===e&&(r.matrixWorldNeedsUpdate=!0)})}onObjUpdateMatrix(){this.parameters.type!=="toObject"&&(this.matrixWorldNeedsUpdate=!0)}update(){switch(this._updateCount(),this.parameters.type){case"radial":this._updateRadial(this.parameters);break;case"linear":this._updateLinear(this.parameters);break;case"grid":this._updateGrid(this.parameters);break;case"toObject":this._updateToObject(this.parameters)}for(let e of this.children)e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD())}_updateCount(e){let r;if(e!==void 0?r=e:r=this.parameters.type==="grid"?Math.round(this.parameters.grid.count[0])*Math.round(this.parameters.grid.count[1])*Math.round(this.parameters.grid.count[2]):this.parameters.count,this.parameters.type==="toObject"&&!this.parameters.toObject.object&&(r=0),this.parameters.type==="toObject"&&this.objectForSample){for(let s=0,o=this.children.length;s{let v=y.length,x=y.map(A=>A[0]).reduce((A,T)=>A+T,0),S=y.map(A=>A[1]).reduce((A,T)=>A+T,0),w=y.map(A=>A[2]).reduce((A,T)=>A+T,0);return[x/v,S/v,w/v]},d=y=>Math.round(y*1e6)/1e6;c.forEach(y=>{let v=c.filter(x=>d(y.pos[0])===d(x.pos[0])&&d(y.pos[1])===d(x.pos[1])&&d(y.pos[2])===d(x.pos[2]));v.length>1?u.push({pos:y.pos,norm:h(v.map(x=>x.norm))}):u.push(y)});let f=w3(u);if(f.length>0){let y=Math.round(f.length*r.count/100);this._updateCount(y)}else{let y=this.objectForSample.geometry.getAttribute("position");if(!y||isNaN(y.count)||y.count===0){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) cannot be cloned on the surface of "${this.objectForSample.name}" (${this.objectForSample.uuid}) because the latter does not have a valid geometry.`);return}}this.objectForSample.updateMatrixWorld();let p=new E0(this.objectForSample).build(),m=b3[r.axis],g=this.children;p.setRandomGenerator((0,cf.default)(this.object.uuid+r.seed));for(let[y,v]of g.entries()){let x=y*(s.freqScale/10)+s.movement,S=o?ka.noise(x):a(x,x),w=y+1,A=l(w,vt(S,s.rotation[0])),T=l(w,vt(S,s.rotation[1])),b=l(w,vt(S,s.rotation[2]));r.spreadType==="random"?p.sample(Nm,kE):(f.length&&(Nm.fromArray(f[y].pos),kE.fromArray(f[y].norm)),this.objectForSample instanceof Zs&&Nm.applyMatrix4(mK.copy(this.objectForSample.matrixWorld).invert())),Nm.applyMatrix4(this.object.hiddenMatrix.clone().invert()),v.position.copy(Nm),Xl.fromArray(m);let M=r.align==="normal"?kE:this.object.getWorldDirection(vK),C=bx.fromArray(r.position);bx.x+=l(w,vt(S,s.position[0])),bx.y+=l(w,vt(S,s.position[1])),bx.z+=l(w,vt(S,s.position[2]));let P=Math.acos(M.dot(Xl)),I=yK.crossVectors(Xl,M).normalize(),_=gK.makeRotationAxis(I,P),D=M.clone().cross(this.object.up).normalize(),L=D.clone().cross(M).normalize(),j=new ue().makeBasis(D,M,L),V=new E(Xl.y,Xl.z,Xl.x).normalize(),H=V.clone().cross(Xl).normalize(),W=new ue().makeBasis(V,Xl,H).invert(),q=new ue().multiplyMatrices(j,W);v.rotation.setFromRotationMatrix(q),C.applyMatrix4(_),v.position.add(C),v.rotation.x=v.rotation.x+i.x+A,v.rotation.y=v.rotation.y+i.y+T,v.rotation.z=v.rotation.z+i.z+b,v.scale.setScalar(1),v.scale.x=v.scale.x+r.scale[0]+l(w,vt(S,s.scale[0]))||An,v.scale.y=v.scale.y+r.scale[1]+l(w,vt(S,s.scale[1]))||An,v.scale.z=v.scale.z+r.scale[2]+l(w,vt(S,s.scale[2]))||An,v.scale.multiply(this.object.scale),v.hiddenMatrix=this.object.hiddenMatrix}}getSubdivData(){if(!this.objectForSample)return[];let e=this.parameters.toObject.spreadType;if(e==="random")return[];if(this.objectForSample instanceof Zs){let r=this.objectForSample,i=S3[e],s=R3[i],o=D3[i],a=O3[i],l=[],c=s(r.subdivPointerNew);for(let u=0;u<=c-1;u++){let h=o(r.subdivPointerNew,u),d=a(r.subdivPointerNew,u);_3.fromArray(h).applyMatrix4(r.matrixWorld),I3.fromArray(d),l.push({pos:_3.toArray(),norm:I3.toArray()})}return l}else return(this.objectForSample.geometry.index?A3(this.objectForSample.geometry):E3(this.objectForSample.geometry)).map((i,s)=>e==="polygon_center"?{pos:i.midpoint,norm:i.norm}:e==="vertex"?[{pos:i.vertices[0],norm:i.norm},{pos:i.vertices[1],norm:i.norm},{pos:i.vertices[2],norm:i.norm}]:e==="edge"?[{pos:i.faceCenters[0],norm:i.norm},{pos:i.faceCenters[1],norm:i.norm},{pos:i.faceCenters[2],norm:i.norm}]:[]).flat()}updateState(e,r){if(this.parameters=ga(e),this.parameters.type!=="toObject")(this.parent===null||this.parent!==this.object)&&(this.removeFromParent(),this.object.parent?.add(this),this.matrix=this.object.matrix,this.hiddenMatrix=this.object.hiddenMatrix,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1);else if(this.parent===null||this.parent.uuid!==this.parameters.toObject.object){this.removeFromParent();let i=r.find(this.parameters.toObject.object);i instanceof mr?this.objectForSample=i:this.objectForSample=void 0,this.matrix=new ue,this.hiddenMatrix=new ue,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1,i&&i.add(this)}this.update()}get pendingMediaLoad(){return this._pendingMediaLoad}};var Uo=n=>{var t;return t=class extends n{},t.geometryHelper=new mi(30,30,30),t};var Sx=new Ls,UE=new Rr,L3=new ue,zo=(n,t,e,r,i=!1,s=n)=>{let o=t,a=s.matrixWorld;if(o.boundingSphere===null&&o.computeBoundingSphere(),UE.copy(o.boundingSphere),UE.applyMatrix4(a),e.ray.intersectsSphere(UE)===!1||(L3.copy(a).invert(),Sx.copy(e.ray).applyMatrix4(L3),o.boundingBox!==null&&Sx.intersectsBox(o.boundingBox)===!1))return;let l,c,u,h,d=o.index,f=o.attributes.position,p=o.drawRange,m,g;if(i===!1){let v=Math.max(0,p.start),x=Math.min(d.count,p.start+p.count);for(m=v,g=x;m