spessasynth_lib 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,22 @@
1
- var be=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ji=(e=>typeof be<"u"?be:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof be<"u"?be:A)[t]}):e)(function(e){if(typeof be<"u")return be.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function $e(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function We(e,A){let t=$e(e,A,e.currentIndex);return e.currentIndex+=A,t}function Rt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function L(e,A){let t=Ys(e,A,e.currentIndex);return e.currentIndex+=A,t}function Ys(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function lt(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function z(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function rA(e,A){lt(e,A,4)}function Wn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function qi(e){return e>127?e-256:e}var O=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function oe(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let i=e[t+s];if(i===0)return n;n+=String.fromCodePoint(i)}return n}function BA(e,A){let t=e.currentIndex;return e.currentIndex+=A,oe(e,A,t)}function re(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new O(n);return kA(s,e),s}function kA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function dA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function ln(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function Mn(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function ae(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Js;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),i=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),I=function(D,b){for(var v=new A(31),Y=0;Y<31;++Y)v[Y]=b+=1<<D[Y-1];for(var K=new t(v[30]),Y=1;Y<30;++Y)for(var SA=v[Y];SA<v[Y+1];++SA)K[SA]=SA-v[Y]<<5|Y;return{b:v,r:K}},g=I(n,2),r=g.b,a=g.r;r[28]=258,a[258]=28;var h=I(s,0),B=h.b,d=h.r,l=new A(32768);for(R=0;R<32768;++R)u=(R&43690)>>1|(R&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,l[R]=((u&65280)>>8|(u&255)<<8)>>1;var u,R,f=function(D,b,v){for(var Y=D.length,K=0,SA=new A(b);K<Y;++K)D[K]&&++SA[D[K]-1];var YA=new A(b);for(K=1;K<b;++K)YA[K]=YA[K-1]+SA[K-1]<<1;var LA;if(v){LA=new A(1<<b);var Ae=15-b;for(K=0;K<Y;++K)if(D[K])for(var Ue=K<<4|D[K],Ie=b-D[K],tA=YA[D[K]-1]++<<Ie,cA=tA|(1<<Ie)-1;tA<=cA;++tA)LA[l[tA]>>Ae]=Ue}else for(LA=new A(Y),K=0;K<Y;++K)D[K]&&(LA[K]=l[YA[D[K]-1]++]>>15-D[K]);return LA},p=new e(288);for(R=0;R<144;++R)p[R]=8;var R;for(R=144;R<256;++R)p[R]=9;var R;for(R=256;R<280;++R)p[R]=7;var R;for(R=280;R<288;++R)p[R]=8;var R,G=new e(32);for(R=0;R<32;++R)G[R]=5;var R,M=f(p,9,1),V=f(G,5,1),N=function(D){for(var b=D[0],v=1;v<D.length;++v)D[v]>b&&(b=D[v]);return b},C=function(D,b,v){var Y=b/8|0;return(D[Y]|D[Y+1]<<8)>>(b&7)&v},nA=function(D,b){var v=b/8|0;return(D[v]|D[v+1]<<8|D[v+2]<<16)>>(b&7)},AA=function(D){return(D+7)/8|0},j=function(D,b,v){return(b==null||b<0)&&(b=0),(v==null||v>D.length)&&(v=D.length),new e(D.subarray(b,v))},H=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Z=function(D,b,v){var Y=new Error(b||H[D]);if(Y.code=D,Error.captureStackTrace&&Error.captureStackTrace(Y,Z),!v)throw Y;return Y},P=function(D,b,v,Y){var K=D.length,SA=Y?Y.length:0;if(!K||b.f&&!b.l)return v||new e(0);var YA=!v,LA=YA||b.i!=2,Ae=b.i;YA&&(v=new e(K*3));var Ue=function(kt){var Se=v.length;if(kt>Se){var at=new e(Math.max(Se*2,kt));at.set(v),v=at}},Ie=b.f||0,tA=b.p||0,cA=b.b||0,ee=b.l,NA=b.d,ue=b.m,fe=b.n,et=K*8;do{if(!ee){Ie=C(D,tA,1);var xe=C(D,tA+1,3);if(tA+=3,xe)if(xe==1)ee=M,NA=V,ue=9,fe=5;else if(xe==2){var tt=C(D,tA,31)+257,tn=C(D,tA+10,15)+4,nn=tt+C(D,tA+5,31)+1;tA+=14;for(var He=new e(nn),me=new e(19),TA=0;TA<tn;++TA)me[i[TA]]=C(D,tA+TA*3,7);tA+=tn*3;for(var sn=N(me),mt=(1<<sn)-1,Ye=f(me,sn,1),TA=0;TA<nn;){var nt=Ye[C(D,tA,mt)];tA+=nt&15;var GA=nt>>4;if(GA<16)He[TA++]=GA;else{var ge=0,st=0;for(GA==16?(st=3+C(D,tA,3),tA+=2,ge=He[TA-1]):GA==17?(st=3+C(D,tA,7),tA+=3):GA==18&&(st=11+C(D,tA,127),tA+=7);st--;)He[TA++]=ge}}var an=He.subarray(0,tt),ce=He.subarray(tt);ue=N(an),fe=N(ce),ee=f(an,ue,1),NA=f(ce,fe,1)}else Z(1);else{var GA=AA(tA)+4,St=D[GA-4]|D[GA-3]<<8,pt=GA+St;if(pt>K){Ae&&Z(0);break}LA&&Ue(cA+St),v.set(D.subarray(GA,pt),cA),b.b=cA+=St,b.p=tA=pt*8,b.f=Ie;continue}if(tA>et){Ae&&Z(0);break}}LA&&Ue(cA+131072);for(var cs=(1<<ue)-1,hs=(1<<fe)-1,yt=tA;;yt=tA){var ge=ee[nA(D,tA)&cs],Fe=ge>>4;if(tA+=ge&15,tA>et){Ae&&Z(0);break}if(ge||Z(2),Fe<256)v[cA++]=Fe;else if(Fe==256){yt=tA,ee=null;break}else{var on=Fe-254;if(Fe>264){var TA=Fe-257,he=n[TA];on=C(D,tA,(1<<he)-1)+r[TA],tA+=he}var Je=NA[nA(D,tA)&hs],Ge=Je>>4;Je||Z(3),tA+=Je&15;var ce=B[Ge];if(Ge>3){var he=s[Ge];ce+=nA(D,tA)&(1<<he)-1,tA+=he}if(tA>et){Ae&&Z(0);break}LA&&Ue(cA+131072);var it=cA+on;if(cA<ce){var qe=SA-ce,yA=Math.min(ce,it);for(qe+cA<0&&Z(3);cA<yA;++cA)v[cA]=Y[qe+cA]}for(;cA<it;++cA)v[cA]=v[cA-ce]}}b.l=ee,b.p=yt,b.b=cA,b.f=Ie,ee&&(Ie=1,b.m=ue,b.d=NA,b.n=fe)}while(!Ie);return cA!=v.length&&YA?j(v,0,cA):v.subarray(0,cA)},J=new e(0);function gA(D,b){return P(D,{i:2},b&&b.out,b&&b.dictionary)}var aA=typeof TextDecoder<"u"&&new TextDecoder,q=0;try{aA.decode(J,{stream:!0}),q=1}catch{}Js=gA})();var qs=Js,Os=!1,Ks=!0,Pt=!1;function Ps(e,A,t){Os=e,Ks=A,Pt=t}function y(...e){Os&&console.info(...e)}function eA(...e){Ks&&console.warn(...e)}function HA(...e){Pt&&console.group(...e)}function RA(...e){Pt&&console.groupCollapsed(...e)}function X(){Pt&&console.groupEnd()}var Vs=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function iA(e,A=!0,t=!1){let n=BA(e,4),s=L(e,4);n===""&&(s=0);let i=A?e.slice(e.currentIndex,e.currentIndex+s):new O(0);return(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Vs(n,s,i)}function IA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,i=e,I=A.length;t&&I++;let g=I;n&&(s+=4,g+=4,i="LIST");let r=s+I;r%2!==0&&r++;let a=new O(r);return kA(a,i),rA(a,g),n&&kA(a,e),a.set(A,s),a}function MA(e,A,t=!1){let n=8,s=e,i=A.reduce((a,h)=>h.length+a,0),I=i;t&&(n+=4,I+=4,s="LIST");let g=n+i;g%2!==0&&g++;let r=new O(g);kA(r,s),rA(r,I),t&&kA(r,e);for(let a of A)r.set(a,n),n+=a.length;return r}function De(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,oe(t.data,4)===A))}function zn(e,A){return{...A,...e}}var de={consoleColors:c,SpessaSynthInfo:y,SpessaSynthWarn:eA,SpessaSynthGroupCollapsed:RA,SpessaSynthGroup:HA,SpessaSynthGroupEnd:X,readBytesAsUintBigEndian:$e,readLittleEndian:L,readBytesAsString:BA,readVariableLengthQuantity:dA,inflateSync:qs};var F={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},S={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},jA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Oi(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:{switch(t){case 0:{n=-3;break}case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:{n=-1;break}case 15:{n=-2;break}}break}default:n=-1}return n}function _n(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Ki={8:2,9:2,10:2,11:2,12:1,13:1,14:2},ms=(e,A)=>{for(let t=0;t<e.length;t++)A.push(e.charCodeAt(t))};function Pi(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let n of e.tracks){let s=[],i=0,I;for(let g of n.events){let r=Math.max(0,g.ticks-i);if(g.statusByte===F.endOfTrack){i+=r;continue}let a;g.statusByte<=F.sequenceSpecific?(a=[255,g.statusByte,...ln(g.data.length),...g.data],I=void 0):g.statusByte===F.systemExclusive?(a=[240,...ln(g.data.length),...g.data],I=void 0):(a=[],I!==g.statusByte&&(I=g.statusByte,a.push(g.statusByte)),a.push(...g.data)),s.push(...ln(r),...a),i+=r}s.push(0,255,F.endOfTrack,0),A.push(new Uint8Array(s))}let t=[];ms("MThd",t),t.push(...Rt(6,4),0,e.format,...Rt(e.tracks.length,2),...Rt(e.timeDivision,2));for(let n of A)ms("MTrk",t),t.push(...Rt(n.length,4),...n);return new Uint8Array(t).buffer}var Vi=350,we=9,Xs=16,jn="gs",Qe=-1,Mt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Zs=32767,Xi={time:0},Zi=.03,Wi=.07,zi=1,_i=64,Ss=121,fA=class{static getDefaultBank(e){return e==="gm2"?Ss:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===_i||e===Ss}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function $n(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Ws(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function As(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function es(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function ts(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function zs(e){return new jA(e,F.systemExclusive,new O([65,16,66,18,64,0,127,0,65,247]))}var $A=class _s{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${_s.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.slice(0,Math.max(0,t))),s=A.slice(Math.max(0,t+1));return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},ji="Created using SpessaSynth";function $i(e,A,t){let n="gm",s=[],i=new Array(e.tracks.length).fill(0),I=16+Math.max(...e.portChannelOffsetMap),g=[];for(let r=0;r<I;r++)g.push({program:0,drums:r%16===we,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});e.iterate((r,a)=>{let h=e.portChannelOffsetMap[i[a]];if(r.statusByte===F.midiPort){i[a]=r.data[0];return}let B=r.statusByte&240;if(B!==F.controllerChange&&B!==F.programChange&&B!==F.systemExclusive)return;if(B===F.systemExclusive){if(!Ws(r)){$n(r)?n="xg":As(r)?n="gs":es(r)?(n="gm",s.push({tNum:a,e:r})):ts(r)&&(n="gm2");return}let f=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][r.data[5]&15]+h;g[f].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let d=(r.statusByte&15)+h,l=g[d];if(B===F.programChange){let p={program:r.data[0],bankLSB:l.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(l.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:l.drums},G=t.getPreset(p,n);if(y(`%cInput patch: %c${$A.toMIDIString(p)}%c. Channel %c${d}%c. Changing patch to ${G.toString()}.`,c.info,c.unrecognized,c.info,c.recognized,c.info),r.data[0]=G.program,G.isGMGSDrum&&fA.isSystemXG(n)||l.lastBank===void 0||(l.lastBank.data[1]=fA.addBankOffset(G.bankMSB,A,G.isXGDrums),l.lastBankLSB===void 0))return;l.lastBankLSB.data[1]=G.bankLSB;return}let u=r.data[0]===S.bankSelectLSB;r.data[0]!==S.bankSelect&&!u||(l.hasBankSelect=!0,u?l.lastBankLSB=r:l.lastBank=r)});for(let[r,a]of g.entries()){if(a.hasBankSelect)continue;let h=r%16,B=F.programChange|h,d=Math.floor(r/16)*16,l=e.portChannelOffsetMap.indexOf(d),u=e.tracks.find(M=>M.port===l&&M.channels.has(h));if(u===void 0)continue;let f=u.events.findIndex(M=>M.statusByte===B);if(f===-1){let M=u.events.findIndex(C=>C.statusByte>128&&C.statusByte<240&&(C.statusByte&15)===h);if(M===-1)continue;let V=u.events[M].ticks,N=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;u.addEvent(new jA(V,F.programChange|h,new O([N])),M),f=M}y(`%cAdding bank select for %c${r}`,c.info,c.recognized);let p=u.events[f].ticks,G=t.getPreset({bankLSB:0,bankMSB:0,program:a.program,isGMGSDrum:a.drums},n),R=fA.addBankOffset(G.bankMSB,A,G.isXGDrums);u.addEvent(new jA(p,F.controllerChange|h,new O([S.bankSelect,R])),f)}if(n==="gm"&&!fA.isSystemXG(n)){for(let a of s){let h=e.tracks[a.tNum];h.deleteEvent(h.events.indexOf(a.e))}let r=0;e.tracks[0].events[0].statusByte===F.trackName&&r++,e.tracks[0].addEvent(zs(0),r)}}var ps={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Aa(e,A,t){let n=t.metadata;if(HA("%cWriting the RMIDI File...",c.info),y("metadata",n),y("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");$i(e,t.bankOffset,t.soundBank)}let s=new O(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=ji,n.software??="SpessaSynth",Object.entries(n).forEach(r=>{let a=r;a[1]&&e.setRMIDInfo(a[0],a[1])});let i=[],I=(r,a)=>{i.push(IA(r,a))};for(let r of Object.entries(e.rmidiInfo)){let a=r[0],h=r[1];switch(a){case"album":{I("IALB",h),I("IPRD",h);break}case"software":{I("ISFT",h);break}case"infoEncoding":{I("IENC",h);break}case"creationDate":{I("ICRD",h);break}case"picture":{I("IPIC",h);break}case"name":{I("INAM",h);break}case"artist":{I("IART",h);break}case"genre":{I("IGNR",h);break}case"copyright":{I("ICOP",h);break}case"comment":{I("ICMT",h);break}case"engineer":{I("IENG",h);break}case"subject":{I("ISBJ",h);break}case"midiEncoding":{I("MENC",h);break}}}let g=new O(2);return lt(g,t.bankOffset,2),i.push(IA("DBNK",g)),y("%cFinished!",c.info),X(),MA("RIFF",[re("RMID"),IA("data",s),MA("INFO",i,!0),new O(A)]).buffer}function ea(e,A){RA("%cSearching for all used programs and keys...",c.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let g=0;g<t;g++){let r=g%16===we;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:r,program:0},s),bankMSB:0,bankLSB:0,isDrum:r})}let i=new Map,I=e.tracks.map(g=>g.port);e.iterate((g,r)=>{if(g.statusByte===F.midiPort){I[r]=g.data[0];return}let a=g.statusByte&240;if(a!==F.noteOn&&a!==F.controllerChange&&a!==F.programChange&&a!==F.systemExclusive)return;let h=(g.statusByte&15)+e.portChannelOffsetMap[I[r]]||0,B=n[h];switch(a){case F.programChange:{B.preset=A.getPreset({bankMSB:B.bankMSB,bankLSB:B.bankLSB,program:g.data[0],isGMGSDrum:B.isDrum},s);break}case F.controllerChange:{switch(g.data[0]){default:return;case S.bankSelectLSB:{B.bankLSB=g.data[1];break}case S.bankSelect:B.bankMSB=g.data[1]}break}case F.noteOn:{if(g.data[1]===0||!B.preset)return;let d=i.get(B.preset);d||(d=new Set,i.set(B.preset,d)),d.add(`${g.data[0]}-${g.data[1]}`);break}case F.systemExclusive:{{if(!Ws(g)){$n(g)?(s="xg",y("%cXG on detected!",c.recognized)):ts(g)?(s="gm2",y("%cGM2 on detected!",c.recognized)):es(g)?(s="gm",y("%cGM on detected!",c.recognized)):As(g)&&(s="gs",y("%cGS on detected!",c.recognized));return}let d=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][g.data[5]&15]+e.portChannelOffsetMap[I[r]],l=!!(g.data[7]>0&&g.data[5]>>4);B=n[d],B.isDrum=l}break}}});for(let[g,r]of i.entries())r.size===0&&(y(`%cDetected change but no keys for %c${g.name}`,c.info,c.value),i.delete(g));return X(),i}var ta=e=>(e.data=new O(e.data.buffer),6e7/$e(e.data,3));function na(e,A=0){let t=[],s=e.tracks.map(B=>B.events).flat();s.sort((B,d)=>B.ticks-d.ticks);for(let B=0;B<16;B++)t.push([]);let i=0,I=60/(120*e.timeDivision),g=0,r=0,a=[];for(let B=0;B<16;B++)a.push([]);let h=(B,d)=>{let l=a[d].findIndex(f=>f.midiNote===B),u=a[d][l];if(u){let f=i-u.start;u.length=f,d===we&&(u.length=Math.max(f,A)),a[d].splice(l,1)}r--};for(;g<s.length;){let B=s[g],d=B.statusByte>>4,l=B.statusByte&15;if(d===8)h(B.data[0],l);else if(d===9)if(B.data[1]===0)h(B.data[0],l);else{h(B.data[0],l);let u={midiNote:B.data[0],start:i,length:-1,velocity:B.data[1]/127};t[l].push(u),a[l].push(u),r++}else B.statusByte===81&&(I=60/(ta(B)*e.timeDivision));if(++g>=s.length)break;i+=I*(s[g].ticks-B.ticks)}if(r>0)for(let[B,d]of a.entries())for(let l of d){let u=i-l.start;l.length=u,B===we&&(l.length=Math.max(u,A))}return t}var sa={linear:0,nearestNeighbor:1,hermite:2},xA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},oA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function Pe(e,A,t,n){return new jA(n,F.controllerChange|e%16,new O([A,t]))}function ia(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],i=128-(64+t+21+1)%128;return new jA(A,F.systemExclusive,new O([...n,i,247]))}function aa(e,A=[],t=[],n=[],s=[]){RA("%cApplying changes to the MIDI file...",c.info),y("Desired program changes:",A),y("Desired CC changes:",t),y("Desired channels to clear:",n),y("Desired channels to transpose:",s);let i=new Set;for(let p of A)i.add(p.channel);let I="gs",g=!1,r=e.tracks.map(p=>p.port),a={},h=0,B=(p,G)=>{e.tracks[p].channels.size!==0&&(h===0&&(h+=16,a[G]=0),a[G]===void 0&&(a[G]=h,h+=16),r[p]=G)};for(let[p,G]of e.tracks.entries())B(p,G.port);let d=h,l=new Array(d).fill(!0),u=new Array(d).fill(0),f=new Array(d).fill(0);for(let p of s){let G=Math.trunc(p.keyShift),R=p.keyShift-G;u[p.channel]=G,f[p.channel]=R}if(e.iterate((p,G,R)=>{let M=e.tracks[G],V=R[G],N=()=>{M.deleteEvent(V),R[G]--},C=(Z,P=0)=>{M.addEvent(Z,V+P),R[G]++},nA=a[r[G]]||0;if(p.statusByte===F.midiPort){B(G,p.data[0]);return}if(p.statusByte<=F.sequenceSpecific&&p.statusByte>=F.sequenceNumber)return;let AA=p.statusByte&240,j=p.statusByte&15,H=j+nA;if(n.includes(H)){N();return}switch(AA){case F.noteOn:{if(l[H]){l[H]=!1;for(let P of t.filter(J=>J.channel===H)){let J=Pe(j,P.controllerNumber,P.controllerValue,p.ticks);C(J)}let Z=f[H];if(Z!==0){let P=Z*64+64,J=Pe(j,S.registeredParameterMSB,0,p.ticks),gA=Pe(j,S.registeredParameterLSB,1,p.ticks),aA=Pe(H,S.dataEntryMSB,P,p.ticks),q=Pe(j,S.dataEntryLSB,0,p.ticks);C(q),C(aA),C(gA),C(J)}if(i.has(H)){let P=A.find(b=>b.channel===H);if(!P)return;y(`%cSetting %c${P.channel}%c to %c${$A.toMIDIString(P)}%c. Track num: %c${G}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let J=P.bankMSB,gA=P.bankLSB,aA=P.program,q=new jA(p.ticks,F.programChange|j,new O([aA]));C(q);let D=(b,v)=>{let Y=Pe(j,b?S.bankSelectLSB:S.bankSelect,v,p.ticks);C(Y)};fA.isSystemXG(I)&&P.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${G}`,c.recognized,c.value),J=fA.getDrumBank(I),gA=0),D(!1,J),D(!0,gA),P.isGMGSDrum&&!fA.isSystemXG(I)&&j!==we&&(y(`%cAdding GS Drum change on track %c${G}`,c.recognized,c.value),C(ia(j,p.ticks)))}}p.data[0]+=u[H];break}case F.noteOff:{p.data[0]+=u[H];break}case F.programChange:{if(i.has(H)){N();return}break}case F.controllerChange:{{let Z=p.data[0];if(t.find(J=>J.channel===H&&Z===J.controllerNumber)!==void 0){N();return}(Z===S.bankSelect||Z===S.bankSelectLSB)&&i.has(H)&&N()}break}case F.systemExclusive:if($n(p))y("%cXG system on detected",c.info),I="xg",g=!0;else if(p.data[0]===67&&p.data[2]===76&&p.data[3]===8&&p.data[5]===3)i.has(p.data[4]+nA)&&N();else if(ts(p))y("%cGM2 system on detected",c.info),I="gm2",g=!0;else if(As(p)){g=!0,y("%cGS on detected!",c.recognized);break}else es(p)&&(y("%cGM on detected, removing!",c.info),N(),g=!1)}}),!g&&A.length>0){let p=0;e.tracks[0].events[0].statusByte===F.trackName&&p++,e.tracks[0].addEvent(zs(0),p),y("%cGS on not detected. Adding it.",c.info)}e.flush(),X()}function oa(e,A){let t=[],n=[],s=[],i=[];for(let[I,g]of A.channelSnapshots.entries()){if(g.isMuted){n.push(I);continue}let r=g.channelTransposeKeyShift+g.customControllers[oA.channelTransposeFine]/100;r!==0&&t.push({channel:I,keyShift:r}),g.lockPreset&&s.push({channel:I,...g.patch});for(let[a,h]of g.lockedControllers.entries()){if(!h||a>127||a===S.bankSelect)continue;let B=g.midiControllers[a]>>7;i.push({channel:I,controllerNumber:a,controllerValue:B})}}e.modify(s,i,n,t)}var dn={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Ve={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Qn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},ra={standard:0,MMA:1,registered:2,nonRegistered:3},bt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ia=class js{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=dA(A),this.itemCount=dA(A);let n=dA(A),s=A.currentIndex-t,i=n-s,I=A.slice(A.currentIndex,A.currentIndex+i);A.currentIndex+=i,this.metadataLength=dA(I);let g=I.slice(I.currentIndex,I.currentIndex+this.metadataLength);I.currentIndex+=this.metadataLength;let r,a;for(;g.currentIndex<g.length;){if(g[g.currentIndex]===0)g.currentIndex++,r=dA(g),Object.values(dn).includes(r)?a=Object.keys(dn).find(f=>dn[f]===r)??"":(y(`Unknown field specifier: ${r}`),a=`unknown_${r}`);else{let f=dA(g);r=BA(g,f),a=r}let u=dA(g);if(u===0){let f=dA(g),p=g.slice(g.currentIndex,g.currentIndex+f);g.currentIndex+=f;let G=dA(p);this.metadata[a]=G<4?BA(p,f-1):p.slice(p.currentIndex)}else y(`International content: ${u}`),g.currentIndex+=dA(g)}let h=I.currentIndex,B=dA(I),d=I.slice(I.currentIndex,h+B);if(I.currentIndex=h+B,B>0)for(this.packedContent=!0;d.currentIndex<B;){let l={id:dA(d)};switch(l.id){case bt.nonRegistered:case bt.registered:throw X(),new Error(`Unsupported unpacker ID: ${l.id}`);default:throw X(),new Error(`Unknown unpacker ID: ${l.id}`);case bt.none:{l.standardID=dA(d);break}case bt.MMAUnpacker:{{let u=d[d.currentIndex++];u===0&&(u<<=8,u|=d[d.currentIndex++],u<<=8,u|=d[d.currentIndex++]);let f=dA(d);l.manufacturerID=u,l.manufacturerInternalID=f}break}}l.decodedSize=dA(d),this.nodeUnpackers.push(l)}switch(A.currentIndex=t+n,this.referenceTypeID=dA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Ve.inLineResource:break;case Ve.externalXMF:case Ve.inFileNode:case Ve.XMFFileURIandNodeID:case Ve.externalFile:case Ve.inFileResource:throw X(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw X(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new O(qs(u).buffer)}catch(f){if(X(),f instanceof Error)throw new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let l=this.metadata.resourceFormat;if(l===void 0)eA("No resource format for this file node!");else{l[0]!==ra.standard&&(y(`Non-standard formatTypeID: ${l.toString()}`),this.resourceFormat=l.toString());let f=l[1];Object.values(Qn).includes(f)?this.resourceFormat=Object.keys(Qn).find(p=>Qn[p]===f):y(`Unrecognized resource format: ${f}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let l=this.nodeData.currentIndex,u=dA(this.nodeData),f=this.nodeData.slice(l,l+u);this.nodeData.currentIndex=l+u,this.innerNodes.push(new js(f))}}get isFile(){return this.itemCount===0}};function ga(e,A){e.bankOffset=0;let t=BA(A,4);if(t!=="XMF_")throw X(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);HA("%cParsing XMF file...",c.info);let n=BA(A,4);if(y(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let r=We(A,4),a=We(A,4);y(`%cFile Type ID: %c${r}%c, File Type Revision ID: %c${a}`,c.info,c.recognized,c.info,c.recognized)}dA(A);let s=dA(A);A.currentIndex+=s,A.currentIndex=dA(A);let i=new Ia(A),I,g=r=>{let a=(h,B)=>{r.metadata[h]!==void 0&&typeof r.metadata[h]=="string"&&(e.rmidiInfo[B]=re(r.metadata[h]))};if(a("nodeName","name"),a("title","name"),a("copyrightNotice","copyright"),a("comment","comment"),r.isFile)switch(r.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":{y("%cFound embedded DLS!",c.recognized),e.embeddedSoundBank=r.nodeData.buffer;break}case"StandardMIDIFile":case"StandardMIDIFileType1":{y("%cFound embedded MIDI!",c.recognized),I=r.nodeData;break}}else for(let h of r.innerNodes)g(h)};if(g(i),X(),!I)throw new Error("No MIDI data in the XMF file!");return I}var Vt=class $s{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new $s;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new jA(t.ticks,t.statusByte,new O(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ys(e,A,t){RA("%cParsing MIDI File...",c.info),e.fileName=t;let n=new O(A),s=n,i=a=>{let h=BA(a,4),B=We(a,4),d=new O(B),l={type:h,size:B,data:d},u=a.slice(a.currentIndex,a.currentIndex+l.size);return l.data.set(u,0),a.currentIndex+=l.size,l},I=oe(n,4);if(I==="RIFF"){n.currentIndex+=8;let a=BA(n,4);if(a!=="RMID")throw X(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${a}"`);let h=iA(n);if(h.header!=="data")throw X(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a}"`);s=h.data;let B=!1,d=!1;for(;n.currentIndex<n.length;){let l=n.currentIndex,u=iA(n,!0);if(u.header==="RIFF"){let f=BA(u.data,4).toLowerCase();f==="sfbk"||f==="sfpk"||f==="dls "?(y("%cFound embedded soundbank!",c.recognized),e.embeddedSoundBank=n.slice(l,l+u.size).buffer):eA(`Unknown RIFF chunk: "${f}"`),f==="dls "?e.isDLSRMIDI=!0:B=!0}else if(u.header==="LIST"&&BA(u.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",c.recognized);u.data.currentIndex<u.size;){let p=iA(u.data,!0),G=p.header,R=p.data;switch(G){default:{eA(`Unknown RMIDI Info: ${G}`);break}case"INAM":{e.rmidiInfo.name=R;break}case"IALB":case"IPRD":{e.rmidiInfo.album=R;break}case"ICRT":case"ICRD":{e.rmidiInfo.creationDate=R;break}case"IART":{e.rmidiInfo.artist=R;break}case"IGNR":{e.rmidiInfo.genre=R;break}case"IPIC":{e.rmidiInfo.picture=R;break}case"ICOP":{e.rmidiInfo.copyright=R;break}case"ICMT":{e.rmidiInfo.comment=R;break}case"IENG":{e.rmidiInfo.engineer=R;break}case"ISFT":{e.rmidiInfo.software=R;break}case"ISBJ":{e.rmidiInfo.subject=R;break}case"IENC":{e.rmidiInfo.infoEncoding=R;break}case"MENC":{e.rmidiInfo.midiEncoding=R;break}case"DBNK":{e.bankOffset=Ys(R,2),d=!0;break}}}}B&&!d&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else I==="XMF_"?s=ga(e,n):s=n;let g=i(s);if(g.type!=="MThd")throw X(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${g.type}"`);if(g.size!==6)throw X(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${g.size}`);e.format=We(g.data,2);let r=We(g.data,2);e.timeDivision=We(g.data,2);for(let a=0;a<r;a++){let h=new Vt,B=i(s);if(B.type!=="MTrk")throw X(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${B.type}"`);let d,l=0;for(e.format===2&&a>0&&(l+=e.tracks[a-1].events[e.tracks[a-1].events.length-1].ticks);B.data.currentIndex<B.size;){l+=dA(B.data);let u=B.data[B.data.currentIndex],f;if(d!==void 0&&u<128)f=d;else{if(u<128)throw X(),new SyntaxError(`Unexpected byte with no running byte. (${u})`);f=B.data[B.data.currentIndex++]}let p=Oi(f),G;switch(p){case-1:{G=0;break}case-2:{f=B.data[B.data.currentIndex++],G=dA(B.data);break}case-3:{G=dA(B.data);break}default:{G=Ki[f>>4],d=f;break}}let R=new O(G);R.set(B.data.slice(B.data.currentIndex,B.data.currentIndex+G),0);let M=new jA(l,f,R);h.pushEvent(M),B.data.currentIndex+=G}e.tracks.push(h),y(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,c.info,c.value,c.info,c.value)}y("%cAll tracks parsed correctly!",c.recognized),e.flush(!1),X()}var ca=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),ha=[ca];function Ca(e){for(let A of ha){let t=e;for(let[s,i]of A.entries()){let I=new RegExp(s,"gi");t=t.replace(I,i)}let n=new Date(t);if(!Number.isNaN(n.getTime()))return n}}function Ba(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=Number.parseInt(A[1]),n=Number.parseInt(A[2])-1,s=Number.parseInt(A[3]),i=new Date(s,n,t);if(!Number.isNaN(i.getTime()))return i}}function Ea(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(Number.parseInt(A[2])+1).toString(),s=A[3],i=new Date(`${n}/${t}/${s}`);if(!Number.isNaN(i.getTime()))return i}}function la(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ns(e){if(e=e.trim(),e.length===0)return new Date;let A=e.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(A);if(Number.isNaN(t.getTime())){let n=Ca(e);if(n)return n;let s=Ba(e);if(s)return s;let i=Ea(e);if(i)return i;let I=la(e);return I||(eA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Te=class Ut{tracks=[];timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,oe(A,t)}static fromArrayBuffer(A,t=""){let n=new Ut;return ys(n,A,t),n}static async fromFile(A){let t=new Ut;return ys(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new Ut;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Vt.copyFrom(t))}midiTicksToSeconds(A){if(A=Math.max(A,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(s=>s.ticks<=A),n=0;for(;t<this.tempoChanges.length;){let s=this.tempoChanges[t++],i=A-s.ticks;n+=i*60/(s.tempo*this.timeDivision),A=s.ticks}return n}secondsToMIDITicks(A){if(A=Math.max(A,0),A===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=A,n=0;for(let s=this.tempoChanges.length-1;s>=0;s--){let i=this.tempoChanges[s],I=this.tempoChanges[s-1],g=I?I.ticks-i.ticks:1/0,r=60/(i.tempo*this.timeDivision),a=g*r;if(t<=a)return n+=Math.round(t/r),n;n+=g,t-=a}return n}getUsedProgramsAndKeys(A){return ea(this,A)}preloadSynth(A){RA("%cPreloading samples...",c.info);let t=this.getUsedProgramsAndKeys(A.soundBankManager);for(let[n,s]of t.entries()){y(`%cPreloading used samples on %c${n.name}%c...`,c.info,c.recognized,c.info);for(let i of s){let[I,g]=i.split("-").map(Number);A.getVoicesForPreset(n,I,g)}}X()}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return na(this,A)}writeMIDI(){return Pi(this)}writeRMIDI(A,t=ps){return Aa(this,A,zn(t,ps))}modify(A=[],t=[],n=[],s=[]){aa(this,A,t,n,s)}applySnapshot(A){oa(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){eA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=re("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=re(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ns(oe(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,-1)),n.decode(s.buffer).trim()}catch(n){eA(`Failed to decode ${A} name: ${n}`);return}}iterate(A){let t=new Array(this.tracks.length).fill(0),n=this.tracks.length,s=()=>{let i=0,I=1/0;for(let[g,{events:r}]of this.tracks.entries())t[g]>=r.length||r[t[g]].ticks<I&&(i=g,I=r[t[g]].ticks);return i};for(;n>0;){let i=s(),I=this.tracks[i].events;if(t[i]>=I.length){n--;continue}let g=I[t[i]];A(g,i,t),t[i]++}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new jA(t.ticks,t.statusByte,new O(t.data))),this.lyrics=A.lyrics.map(t=>new jA(t.ticks,t.statusByte,new O(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={};for(let t of Object.entries(A.rmidiInfo)){let n=t[0],s=t[1];this.rmidiInfo[n]=new Uint8Array(s)}}parseInternal(){HA("%cInterpreting MIDI events...",c.info);let A=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let n=null,s=null,i="hard";for(let a of this.tracks){let h=new Set,B=!1;for(let l=0;l<a.events.length;l++){let u=a.events[l];if(u.statusByte>=128&&u.statusByte<240)switch(B=!0,u.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=u.ticks),u.statusByte&240){case F.controllerChange:{switch(u.data[0]){case 2:case 111:case 116:{n=u.ticks;break}case 4:case 117:{s===null?(i="soft",s=u.ticks):s=0;break}case 0:this.isDLSRMIDI&&u.data[1]!==0&&u.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break}case F.noteOn:{h.add(u.statusByte&15);let p=u.data[0];this.keyRange.min=Math.min(this.keyRange.min,p),this.keyRange.max=Math.max(this.keyRange.max,p);break}}let f=oe(u.data);switch(u.statusByte){case F.endOfTrack:{l!==a.events.length-1&&(a.deleteEvent(l),l--,eA("Unexpected EndOfTrack. Removing!"));break}case F.setTempo:{this.tempoChanges.push({ticks:u.ticks,tempo:6e7/$e(u.data,3)});break}case F.marker:{switch(f.trim().toLowerCase()){default:break;case"start":case"loopstart":{n=u.ticks;break}case"loopend":s=u.ticks}break}case F.copyright:{this.extraMetadata.push(u);break}case F.lyric:f.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile?u.statusByte=F.text:this.lyrics.push(u);case F.text:{let p=f.trim();p.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(p.startsWith("@T")||p.startsWith("@A")?A?this.extraMetadata.push(u):(this.binaryName=u.data.slice(2),A=!0,t=!0):p.startsWith("@")||this.lyrics.push(u));break}}}a.channels=h,a.name="";let d=a.events.find(l=>l.statusByte===F.trackName);d&&this.tracks.indexOf(a)>0&&(a.name=oe(d.data),!B&&!a.name.toLowerCase().includes("setup")&&this.extraMetadata.push(d))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",c.info);let I=[];for(let a of this.tracks){let h=a.events.find(B=>(B.statusByte&240)===F.noteOn);h&&I.push(h.ticks)}this.firstNoteOn=Math.min(...I),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick),this.loop={start:n,end:s,type:i},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let g=0;this.portChannelOffsetMap=[];for(let a of this.tracks)if(a.port=-1,a.channels.size!==0)for(let h of a.events){if(h.statusByte!==F.midiPort)continue;let B=h.data[0];a.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=g,g+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(a=>a??0);let r=1/0;for(let a of this.tracks)a.port!==-1&&r>a.port&&(r=a.port);r===1/0&&(r=0);for(let a of this.tracks)(a.port===-1||a.port===void 0)&&(a.port=r);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",c.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(a=>a.statusByte>=F.noteOn&&a.statusByte<F.polyPressure)){let a=this.tracks[0].events.find(h=>h.statusByte===F.trackName);a&&(this.binaryName=a.data)}}else{let a=this.tracks[0].events.find(h=>h.statusByte===F.trackName);a&&(this.binaryName=a.data)}if(this.extraMetadata=this.extraMetadata.filter(a=>a.data.length>0),this.lyrics.sort((a,h)=>a.ticks-h.ticks),!this.tracks.some(a=>a.events[0].ticks===0)){let a=this.tracks[0],h=this?.binaryName?.buffer;h||(h=new Uint8Array(0).buffer),a.events.unshift(new jA(0,F.trackName,new O(h)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Mn(Math.ceil(this.duration)).time}`,c.info,c.recognized,c.info,c.recognized),X()}};function da(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=_n(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case F.noteOn:{let i=e.data[1];if(i>0)this.synth.noteOn(n.channel,e.data[0],i),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:i});else{this.synth.noteOff(n.channel,e.data[0]);let I=this.playingNotes.findIndex(g=>g.midiNote===e.data[0]&&g.channel===n.channel);I!==-1&&this.playingNotes.splice(I,1)}break}case F.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let i=this.playingNotes.findIndex(I=>I.midiNote===e.data[0]&&I.channel===n.channel);i!==-1&&this.playingNotes.splice(i,1);break}case F.pitchWheel:{this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break}case F.controllerChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break}case F.programChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break}case F.polyPressure:{this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break}case F.channelPressure:{this.synth.channelPressure(n.channel,e.data[0]);break}case F.systemExclusive:{this.synth.systemExclusive(e.data,s);break}case F.setTempo:{let i=6e7/$e(e.data,3);this.oneTickToSeconds=60/(i*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),y("invalid tempo! falling back to 120 BPM"),i=120);break}case F.timeSignature:case F.endOfTrack:case F.midiChannelPrefix:case F.songPosition:case F.activeSensing:case F.keySignature:case F.sequenceNumber:case F.sequenceSpecific:case F.text:case F.lyric:case F.copyright:case F.trackName:case F.marker:case F.cuePoint:case F.instrumentName:case F.programName:break;case F.midiPort:{this.assignMIDIPort(A,e.data[0]);break}case F.reset:{this.synth.stopAllChannels(),this.synth.resetAllControllers();break}default:{y(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(F).find(i=>F[i]===n.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Qa(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),i=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(i.events.length<=this.eventIndexes[s]||n.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let I=i.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(I.ticks-n.ticks)}}function ua(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function fa(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");if(e.duration===0){eA("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.isFinished=!1,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",c.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(A=>A.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[A,t]of this._midiData.tracks.entries())this.assignMIDIPort(A,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${Mn(Math.ceil(this._midiData.duration)).time}`,c.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(eA(`%cVery short song: (${Mn(Math.round(this._midiData.duration)).time}). Disabling loop!`,c.warn),this.loopCount=0),this.currentTime=0}var o=Object.freeze({INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62}),je=Object.keys(o).length,ma=Math.max(...Object.values(o)),XA=Object.freeze({[o.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[o.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[o.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[o.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[o.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[o.vibLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[o.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[o.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[o.pan]:{min:-500,max:500,def:0,nrpn:1},[o.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[o.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[o.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[o.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[o.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[o.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[o.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[o.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[o.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[o.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[o.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[o.velocity]:{min:-1,max:127,def:-1,nrpn:1},[o.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[o.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[o.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[o.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[o.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[o.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[o.sampleModes]:{min:0,max:3,def:0,nrpn:0}}),bn=new Int16Array(je);for(let e=0;e<bn.length;e++)XA[e]&&(bn[e]=XA[e].def);var wA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},W={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},CA={linear:0,concave:1,convex:2,switch:3};var U={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},w={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},ks={forward:0,loopAndRelease:1},uA=128,vn=147,Xt=new Int16Array(vn).fill(0),pA=(e,A)=>Xt[e]=A<<7;pA(S.mainVolume,100);pA(S.balance,64);pA(S.expressionController,127);pA(S.pan,64);pA(S.portamentoOnOff,127);pA(S.filterResonance,64);pA(S.releaseTime,64);pA(S.attackTime,64);pA(S.brightness,64);pA(S.decayTime,64);pA(S.vibratoRate,64);pA(S.vibratoDepth,64);pA(S.vibratoDelay,64);pA(S.generalPurposeController6,64);pA(S.generalPurposeController8,64);pA(S.registeredParameterLSB,127);pA(S.registeredParameterMSB,127);pA(S.nonRegisteredParameterLSB,127);pA(S.nonRegisteredParameterMSB,127);pA(uA+W.pitchWheel,64);pA(uA+W.pitchWheelRange,2);var Ai=Object.keys(oA).length,ei=new Float32Array(Ai);ei[oA.modulationMultiplier]=1;function ti(e){this.lockedControllers[S.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(S.portamentoControl,60,e):this.controllerChange(S.portamentoControl,0,e))}function Sa(e=!0){this.channelOctaveTuning.fill(0);for(let[t,n]of Xt.entries())this.lockedControllers[t]||(this.midiControllers[t]!==n&&t<127?t!==S.portamentoControl&&t!==S.dataEntryMSB&&t!==S.registeredParameterMSB&&t!==S.registeredParameterLSB&&t!==S.nonRegisteredParameterMSB&&t!==S.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n);ti.call(this,e),this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,!this.lockedControllers[S.monoModeOn]&&!this.lockedControllers[S.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let A=this.customControllers[oA.channelTransposeFine];this.customControllers.set(ei),this.setCustomController(oA.channelTransposeFine,A),this.resetParameters()}function pa(){this.setBankMSB(fA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===we),this.programChange(0)}var ni=new Set([S.bankSelect,S.bankSelectLSB,S.mainVolume,S.mainVolumeLSB,S.pan,S.panLSB,S.reverbDepth,S.tremoloDepth,S.chorusDepth,S.detuneDepth,S.phaserDepth,S.soundVariation,S.filterResonance,S.releaseTime,S.attackTime,S.brightness,S.decayTime,S.vibratoRate,S.vibratoDepth,S.vibratoDelay,S.soundController10,S.polyModeOn,S.monoModeOn]);function ya(){this.channelOctaveTuning.fill(0),this.perNotePitch=!1,this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Xt[e];!ni.has(e)&&A!==this.midiControllers[e]&&e!==S.portamentoControl&&this.controllerChange(e,A>>7)}ti.call(this,!0),this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function ka(){this.dataEntryState=xA.Idle,this.midiControllers[S.nonRegisteredParameterLSB]=16256,this.midiControllers[S.nonRegisteredParameterMSB]=16256,this.midiControllers[S.registeredParameterLSB]=16256,this.midiControllers[S.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var ct=Xt.slice(0,128),Da=new Set([S.dataDecrement,S.dataIncrement,S.dataEntryMSB,S.dataEntryLSB,S.registeredParameterLSB,S.registeredParameterMSB,S.nonRegisteredParameterLSB,S.nonRegisteredParameterMSB,S.bankSelect,S.bankSelectLSB,S.resetAllControllers,S.monoModeOn,S.polyModeOn]),Ds=e=>Da.has(e);function wa(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=new Array(t).fill(8192),s=[];for(let a=0;a<t;a++)s.push({program:-1,bank:0,actualBank:0});let i=[];for(let a=0;a<t;a++)i.push([...ct]);let I,g=0;function r(a){if(n[a]=8192,i?.[a]!==void 0)for(let[h,B]of ct.entries())ni.has(h)||(i[a][h]=B)}for(;;){let a=this.findFirstEventIndex(),h=this._midiData.tracks[a],B=h.events[this.eventIndexes[a]];if(A===void 0){if(this.playedTime>=e)break}else if(B.ticks>=A)break;let d=_n(B.statusByte),l=d.channel+(this.midiPortChannelOffsets[h.port]||0);switch(d.status){case F.noteOn:{i[l]??=[...ct],i[l][S.portamentoControl]=B.data[0];break}case F.noteOff:break;case F.pitchWheel:{n[l]=B.data[1]<<7|B.data[0];break}case F.programChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let f=s[l];f.program=B.data[0],f.actualBank=f.bank;break}case F.controllerChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let f=B.data[0];if(Ds(f)){let p=B.data[1];if(f===S.bankSelect){s[l].bank=p;break}else f===S.resetAllControllers&&r(l);this.sendMIDICC(l,f,p)}else i[l]??=[...ct],i[l][f]=B.data[1];break}case F.setTempo:{let f=6e7/$e(B.data,3);this.oneTickToSeconds=60/(f*this._midiData.timeDivision),I=B,g=a;break}default:{this.processEvent(B,a);break}}this.eventIndexes[a]++,a=this.findFirstEventIndex();let u=this._midiData.tracks[a].events[this.eventIndexes[a]];if(u===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(u.ticks-B.ticks)}for(let a=0;a<t;a++){if(n[a]!==void 0&&this.sendMIDIPitchWheel(a,n[a]),i[a]!==void 0)for(let[h,B]of i[a].entries())B!==ct[h]&&!Ds(h)&&this.sendMIDICC(a,h,B);if(s[a].actualBank>=0){let h=s[a];h.program===-1?this.sendMIDICC(a,S.bankSelect,h.bank):(this.sendMIDICC(a,S.bankSelect,h.actualBank),this.sendMIDIProgramChange(a,h.program))}}return I&&this.callEvent("metaEvent",{event:I,trackIndex:g}),this.paused&&(this.pausedTime=this.playedTime),!0}var si=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=Qa.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ua.bind(this);loadNewSequence=fa.bind(this);processEvent=da.bind(this);setTimeTo=wa.bind(this);constructor(e){this.synth=e,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.recalculateStartTime(A)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this.setTimeTo(e),this.recalculateStartTime(e)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){eA("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes)for(let e of this.playingNotes)this.sendMIDINoteOn(e.channel,e.midiNote,e.velocity);this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){if(this.songs=e,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){HA("%cPreloading all songs...",c.info);for(let A of this.songs)A.embeddedSoundBank===void 0&&A.preloadSynth(this.synth);X()}this.loadCurrentSong()}}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}),e&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let e=0,A=1/0,t=this._midiData.tracks.length;for(let n=0;n<t;n++){let s=this._midiData.tracks[n];if(this.eventIndexes[n]>=s.events.length)continue;let i=s.events[this.eventIndexes[n]];i.ticks<A&&(e=n,A=i.ticks)}return e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){if(!this.externalMIDIPlayback){eA(`Attempting to send ${ae(e)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:e,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let e=0;e<16;e++)this.sendMIDICC(e,S.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let e of this.playingNotes)this.sendMIDINoteOff(e.channel,e.midiNote);for(let e=0;e<Xs;e++)this.sendMIDICC(e,S.allNotesOff,0),this.sendMIDICC(e,S.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([F.reset])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}jumpToTick(e){if(!this._midiData)return;this.sendMIDIAllOff();let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A,this.eventIndexes.length=0;for(let n of this._midiData.tracks){let s=n.events.findIndex(i=>i.ticks>=e);this.eventIndexes.push(s===-1?n.events.length:s)}let t=this._midiData.tempoChanges.find(n=>n.ticks<=e);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(e,A,t){if(!this.externalMIDIPlayback){this.synth.noteOn(e,A,t);return}e%=16,this.sendMIDIMessage([F.noteOn|e,A,t])}sendMIDINoteOff(e,A){if(!this.externalMIDIPlayback){this.synth.noteOff(e,A);return}e%=16,this.sendMIDIMessage([F.noteOff|e,A,64])}sendMIDICC(e,A,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(e,A,t);return}e%=16,this.sendMIDIMessage([F.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){if(!this.externalMIDIPlayback){this.synth.programChange(e,A);return}e%=16,this.sendMIDIMessage([F.programChange|e,A])}sendMIDIPitchWheel(e,A){if(!this.externalMIDIPlayback){this.synth.pitchWheel(e,A);return}e%=16,this.sendMIDIMessage([F.pitchWheel|e,A&127,A>>7])}},dt=dt!==void 0?dt:{},ws=!1,ii;dt.isInitialized=new Promise(e=>ii=e);var Fa=function(e){var A,t,n,s,i,I,g,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="",h=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=r.indexOf(e.charAt(h++)),i=r.indexOf(e.charAt(h++)),I=r.indexOf(e.charAt(h++)),g=r.indexOf(e.charAt(h++)),A=s<<2|i>>4,t=(15&i)<<4|I>>2,n=(3&I)<<6|g,a+=String.fromCharCode(A),I!==64&&(a+=String.fromCharCode(t)),g!==64&&(a+=String.fromCharCode(n));while(h<e.length);return a};(function(){var e,A,t,n,s,i,I,g,r,a,h,B,d,l,u,f,p,G,R,M,V,N,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(Fa("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/Rw0ACwsLIAVBADYCACAGKAIAIQAgACABawwFCwwBCwwBCyAAQdQHaiEEIAQoAgAhBCAERQRAIAJBADYCACAAQdQAaiECIAAQGSEDAkAgA0F/RwRAA0AgAigCACEDIAMNAiAAEBkhAyADQX9HDQALCwsgBUEANgIAIAYoAgAhACAAIAFrDAMLCyAAEBMgAiADNgIAIAVBADYCAEEBBSAAQQIQFUEACwshACALJAYgAAsJACAAIAE2AlgLpgoBDH8gAEGAC2ohCiAKKAIAIQYCQAJAAkAgBkEATA0AA0AgACAEQRRsakGQC2ohAyADQQA2AgAgBEEBaiEEIAQgBkgNAAsgBkEESA0ADAELIAJBBEgEQEEAIQIFIAJBfWohBkEAIQIDQAJAIAEgAmohBCAELAAAIQMgA0HPAEYEQCAEQcATQQQQZCEEIARFBEAgAkEaaiEJIAkgBk4NAiACQRtqIQcgASAJaiELIAssAAAhAyADQf8BcSEFIAcgBWohBCAEIAZODQIgBUEbaiEEIAMEQEEAIQMDQCADIAdqIQggASAIaiEIIAgtAAAhCCAIQf8BcSEIIAQgCGohBCADQQFqIQMgAyAFRw0ACyAEIQMFIAQhAwtBACEEQQAhBQNAIAUgAmohByABIAdqIQcgBywAACEHIAQgBxApIQQgBUEBaiEFIAVBFkcNAAtBFiEFA0AgBEEAECkhBCAFQQFqIQUgBUEaRw0ACyAKKAIAIQUgBUEBaiEHIAogBzYCACADQWZqIQMgACAFQRRsakGIC2ohCCAIIAM2AgAgACAFQRRsakGMC2ohAyADIAQ2AgAgAkEWaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQRdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEYaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBGWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3IhBCAAQYQLaiAFQRRsaiEDIAMgBDYCACALLQAAIQQgBEH/AXEhBCAJIARqIQQgASAEaiEEIAQsAAAhBCAEQX9GBH9BfwUgAkEGaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQQdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEIaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBCWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3ILIQQgACAFQRRsakGUC2ohAyADIAQ2AgAgACAFQRRsakGQC2ohBCAEIAk2AgAgB0EERgRAIAYhAgwDCwsLIAJBAWohAiACIAZIDQEgBiECCwsgCigCACEGIAZBAEoNAQsMAQsgAiEEIAYhAkEAIQYDQAJAIABBhAtqIAZBFGxqIQkgACAGQRRsakGQC2ohAyADKAIAIQsgACAGQRRsakGIC2ohDSANKAIAIQggBCALayEDIAggA0ohBSADIAggBRshByAAIAZBFGxqQYwLaiEOIA4oAgAhAyAHQQBKBEBBACEFA0AgBSALaiEMIAEgDGohDCAMLAAAIQwgAyAMECkhAyAFQQFqIQUgBSAHSA0ACwsgCCAHayEFIA0gBTYCACAOIAM2AgAgBQRAIAZBAWohBgUgCSgCACEFIAMgBUYNASACQX9qIQIgCiACNgIAIAkgAEGEC2ogAkEUbGoiAikCADcCACAJIAIpAgg3AgggCSACKAIQNgIQIAooAgAhAgsgBiACSA0BIAQhAgwCCwsgByALaiECIApBfzYCACAAQdQHaiEBIAFBADYCACAAQdgKaiEBIAFBfzYCACAAIAZBFGxqQZQLaiEBIAEoAgAhASAAQZgIaiEEIAQgATYCACABQX9HIQEgAEGcCGohACAAIAE2AgALIAILhgUBCH8gAEHYCmohAiACKAIAIQMgAEEUaiECIAIoAgAhAgJ/AkAgA0F/RgR/QQEhAwwBBSAAQdAIaiEEIAQoAgAhBQJAIAMgBUgEQANAIABB1AhqIANqIQQgBCwAACEGIAZB/wFxIQQgAiAEaiECIAZBf0cNAiADQQFqIQMgAyAFSA0ACwsLIAFBAEchBiAFQX9qIQQgAyAESCEEIAYgBHEEQCAAQRUQFUEADAMLIABBHGohBCAEKAIAIQQgAiAESwR/IABBARAVQQAFIAMgBUYhBCADQX9GIQMgBCADcgR/QQAhAwwDBUEBCwsLDAELIAAoAhwhCCAAQdQHaiEGIAFBAEchBCACIQECQAJAAkACQAJAAkACQAJAAkADQCABQRpqIQUgBSAITw0BIAFBwBNBBBBkIQIgAg0CIAFBBGohAiACLAAAIQIgAg0DIAMEQCAGKAIAIQIgAgRAIAFBBWohAiACLAAAIQIgAkEBcSECIAINBgsFIAFBBWohAiACLAAAIQIgAkEBcSECIAJFDQYLIAUsAAAhAiACQf8BcSEHIAFBG2ohCSAJIAdqIQEgASAISw0GAkAgAgRAQQAhAgNAIAkgAmohAyADLAAAIQUgBUH/AXEhAyABIANqIQEgBUF/Rw0CIAJBAWohAiACIAdJDQALBUEAIQILCyAHQX9qIQMgAiADSCEDIAQgA3ENByABIAhLDQhBASACIAdHDQoaQQAhAwwAAAsACyAAQQEQFUEADAgLIABBFRAVQQAMBwsgAEEVEBVBAAwGCyAAQRUQFUEADAULIABBFRAVQQAMBAsgAEEBEBVBAAwDCyAAQRUQFUEADAILIABBARAVC0EACyEAIAALewEFfyMGIQUjBkEQaiQGIAVBCGohBiAFQQRqIQQgBSEHIAAgAiAEIAMgBSAGECohBCAEBH8gBigCACEEIABBkANqIARBBmxqIQggAigCACEGIAMoAgAhBCAHKAIAIQMgACABIAggBiAEIAMgAhArBUEACyEAIAUkBiAACxsBAX8gABAuIQEgAEHoCmohACAAQQA2AgAgAQv5AwIMfwN9IABB1AdqIQkgCSgCACEGIAYEfyAAIAYQSCELIABBBGohBCAEKAIAIQogCkEASgRAIAZBAEohDCAGQX9qIQ0DQCAMBEAgAEGUBmogBUECdGooAgAhDiAAQZQHaiAFQQJ0aigCACEPQQAhBANAIAQgAmohByAOIAdBAnRqIQcgByoCACEQIAsgBEECdGohCCAIKgIAIREgECARlCEQIA8gBEECdGohCCAIKgIAIREgDSAEayEIIAsgCEECdGohCCAIKgIAIRIgESASlCERIBAgEZIhECAHIBA4AgAgBEEBaiEEIAQgBkcNAAsLIAVBAWohBSAFIApIDQALCyAJKAIABSAAQQRqIQQgBCgCACEKQQALIQsgASADayEHIAkgBzYCACAKQQBKBEAgASADSiEJQQAhBQNAIAkEQCAAQZQGaiAFQQJ0aigCACEMIABBlAdqIAVBAnRqKAIAIQ1BACEGIAMhBANAIAwgBEECdGohBCAEKAIAIQQgDSAGQQJ0aiEOIA4gBDYCACAGQQFqIQYgBiADaiEEIAYgB0cNAAsLIAVBAWohBSAFIApIDQALCyALRSEEIAEgA0ghBSABIAMgBRshASABIAJrIQEgAEH8CmohACAEBEBBACEBBSAAKAIAIQIgAiABaiECIAAgAjYCAAsgAQvRAQECfyMGIQYjBkHgC2okBiAGIQUgBSAEEBwgBUEUaiEEIAQgADYCACAAIAFqIQEgBUEcaiEEIAQgATYCACAFQSRqIQEgAUEBOgAAIAUQHSEBIAEEQCAFEB4hASABBEAgASAFQdwLEHkaIAFBFGohBCAEKAIAIQQgBCAAayEAIAIgADYCACADQQA2AgAFIAUQEUEAIQELBSAFQdQAaiEAIAAoAgAhACAARSEAIAVB2ABqIQEgASgCACEBIAMgAUEBIAAbNgIAQQAhAQsgBiQGIAELrQECAX8BfiAAQQBB3AsQehogAQRAIABBxABqIQIgASkCACEDIAIgAzcCACAAQcgAaiECIANCIIghAyADpyEBIAFBA2ohASABQXxxIQEgAiABNgIAIABB0ABqIQIgAiABNgIACyAAQdQAaiEBIAFBADYCACAAQdgAaiEBIAFBADYCACAAQRRqIQEgAUEANgIAIABB8ABqIQEgAUEANgIAIABBgAtqIQAgAEF/NgIAC9BNAiN/A30jBiEZIwZBgAhqJAYgGUHwB2ohAiAZIgxB7AdqIR0gDEHoB2ohHiAAEDEhAQJ/IAEEQCAAQdMKaiEBIAEtAAAhASABQf8BcSEBIAFBAnEhAyADRQRAIABBIhAVQQAMAgsgAUEEcSEDIAMEQCAAQSIQFUEADAILIAFBAXEhASABBEAgAEEiEBVBAAwCCyAAQdAIaiEBIAEoAgAhASABQQFHBEAgAEEiEBVBAAwCCyAAQdQIaiEBAkACQCABLAAAQR5rIgEEQCABQSJGBEAMAgUMAwsACyAAEDAhASABQf8BcUEBRwRAIABBIhAVQQAMBAsgACACQQYQIiEBIAFFBEAgAEEKEBVBAAwECyACEEkhASABRQRAIABBIhAVQQAMBAsgABAjIQEgAQRAIABBIhAVQQAMBAsgABAwIQEgAUH/AXEhAyAAQQRqIRMgEyADNgIAIAFB/wFxRQRAIABBIhAVQQAMBAsgAUH/AXFBEEoEQCAAQQUQFUEADAQLIAAQIyEBIAAgATYCACABRQRAIABBIhAVQQAMBAsgABAjGiAAECMaIAAQIxogABAwIQMgA0H/AXEhBCAEQQ9xIQEgBEEEdiEEQQEgAXQhBSAAQeQAaiEaIBogBTYCAEEBIAR0IQUgAEHoAGohFCAUIAU2AgAgAUF6aiEFIAVBB0sEQCAAQRQQFUEADAQLIANBoH9qQRh0QRh1IQMgA0EASARAIABBFBAVQQAMBAsgASAESwRAIABBFBAVQQAMBAsgABAwIQEgAUEBcSEBIAFFBEAgAEEiEBVBAAwECyAAEDEhAUEAIAFFDQMaIAAQSiEBQQAgAUUNAxogAEHUCmohAwNAIAAQLyEBIAAgARBLIANBADoAACABDQALIAAQSiEBQQAgAUUNAxogAEEkaiEBIAEsAAAhAQJAIAEEQCAAQQEQFyEBIAENASAAQdgAaiEAIAAoAgAhAUEAIAFBFUcNBRogAEEUNgIAQQAMBQsLEEwgABAZIQEgAUEFRwRAIABBFBAVQQAMBAtBACEBA0AgABAZIQMgA0H/AXEhAyACIAFqIQQgBCADOgAAIAFBAWohASABQQZHDQALIAIQSSEBIAFFBEAgAEEUEBVBAAwECyAAQQgQLCEBIAFBAWohASAAQewAaiENIA0gATYCACABQbAQbCEBIAAgARBNIQEgAEHwAGohFSAVIAE2AgAgAUUEQCAAQQMQFUEADAQLIA0oAgAhAiACQbAQbCECIAFBACACEHoaIA0oAgAhAQJAIAFBAEoEQCAAQRBqIRYDQAJAIBUoAgAhCiAKIAZBsBBsaiEJIABBCBAsIQEgAUH/AXEhASABQcIARwRAQT8hAQwBCyAAQQgQLCEBIAFB/wFxIQEgAUHDAEcEQEHBACEBDAELIABBCBAsIQEgAUH/AXEhASABQdYARwRAQcMAIQEMAQsgAEEIECwhASAAQQgQLCECIAJBCHQhAiABQf8BcSEBIAIgAXIhASAJIAE2AgAgAEEIECwhASAAQQgQLCECIABBCBAsIQMgA0EQdCEDIAJBCHQhAiACQYD+A3EhAiABQf8BcSEBIAIgAXIhASABIANyIQEgCiAGQbAQbGpBBGohDiAOIAE2AgAgAEEBECwhASABQQBHIgMEf0EABSAAQQEQLAshASABQf8BcSECIAogBkGwEGxqQRdqIREgESACOgAAIAkoAgAhBCAOKAIAIQEgBEUEQCABBH9ByAAhAQwCBUEACyEBCyACQf8BcQRAIAAgARA8IQIFIAAgARBNIQIgCiAGQbAQbGpBCGohASABIAI2AgALIAJFBEBBzQAhAQwBCwJAIAMEQCAAQQUQLCEDIA4oAgAhASABQQBMBEBBACEDDAILQQAhBANAIANBAWohBSABIARrIQEgARAtIQEgACABECwhASABIARqIQMgDigCACEPIAMgD0oEQEHTACEBDAQLIAIgBGohBCAFQf8BcSEPIAQgDyABEHoaIA4oAgAhASABIANKBH8gAyEEIAUhAwwBBUEACyEDCwUgDigCACEBIAFBAEwEQEEAIQMMAgtBACEDQQAhAQNAIBEsAAAhBAJAAkAgBEUNACAAQQEQLCEEIAQNACACIANqIQQgBEF/OgAADAELIABBBRAsIQQgBEEBaiEEIARB/wFxIQUgAiADaiEPIA8gBToAACABQQFqIQEgBEH/AXEhBCAEQSBGBEBB2gAhAQwFCwsgA0EBaiEDIA4oAgAhBCADIARIDQALIAEhAyAEIQELCyARLAAAIQQCfwJAIAQEfyABQQJ1IQQgAyAETgRAIBYoAgAhAyABIANKBEAgFiABNgIACyAAIAEQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB4QAhAQwFCyAOKAIAIQQgASACIAQQeRogDigCACEBIAAgAiABEE4gAygCACECIBFBADoAACAOKAIAIQQMAgsgCiAGQbAQbGpBrBBqIQQgBCADNgIAIAMEfyAAIAMQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB6wAhAQwFCyAEKAIAIQEgAUECdCEBIAAgARA8IQEgCiAGQbAQbGpBIGohAyADIAE2AgAgAUUEQEHtACEBDAULIAQoAgAhASABQQJ0IQEgACABEDwhBSAFRQRAQfAAIQEMBQsgDigCACEBIAQoAgAhDyAFIQcgBQVBACEPQQAhB0EACyEDIA9BA3QhBSAFIAFqIQUgFigCACEPIAUgD00EQCABIQUgBAwDCyAWIAU2AgAgASEFIAQFIAEhBAwBCwwBCyAEQQBKBEBBACEBQQAhAwNAIAIgA2ohBSAFLAAAIQUgBUH/AXFBCkohDyAFQX9HIQUgDyAFcSEFIAVBAXEhBSABIAVqIQEgA0EBaiEDIAMgBEgNAAsFQQAhAQsgCiAGQbAQbGpBrBBqIQ8gDyABNgIAIARBAnQhASAAIAEQTSEBIAogBkGwEGxqQSBqIQMgAyABNgIAIAFFBEBB6QAhAQwCC0EAIQMgDigCACEFQQAhByAPCyEBIAkgAiAFIAMQTyEEIARFBEBB9AAhAQwBCyABKAIAIQQgBARAIARBAnQhBCAEQQRqIQQgACAEEE0hBCAKIAZBsBBsakGkEGohBSAFIAQ2AgAgBEUEQEH5ACEBDAILIAEoAgAhBCAEQQJ0IQQgBEEEaiEEIAAgBBBNIQQgCiAGQbAQbGpBqBBqIQUgBSAENgIAIARFBEBB+wAhAQwCCyAEQQRqIQ8gBSAPNgIAIARBfzYCACAJIAIgAxBQCyARLAAAIQMgAwRAIAEoAgAhAyADQQJ0IQMgACAHIAMQTiAKIAZBsBBsakEgaiEDIAMoAgAhBCABKAIAIQUgBUECdCEFIAAgBCAFEE4gDigCACEEIAAgAiAEEE4gA0EANgIACyAJEFEgAEEEECwhAiACQf8BcSEDIAogBkGwEGxqQRVqIQUgBSADOgAAIAJB/wFxIQIgAkECSwRAQYABIQEMAQsgAgRAIABBIBAsIQIgAhBSISUgCiAGQbAQbGpBDGohDyAPICU4AgAgAEEgECwhAiACEFIhJSAKIAZBsBBsakEQaiEbIBsgJTgCACAAQQQQLCECIAJBAWohAiACQf8BcSECIAogBkGwEGxqQRRqIQQgBCACOgAAIABBARAsIQIgAkH/AXEhAiAKIAZBsBBsakEWaiEcIBwgAjoAACAFLAAAIQsgDigCACECIAkoAgAhAyALQQFGBH8gAiADEFMFIAMgAmwLIQIgCiAGQbAQbGpBGGohCyALIAI2AgAgAkUEQEGGASEBDAILIAJBAXQhAiAAIAIQPCEQIBBFBEBBiAEhAQwCCyALKAIAIQIgAkEASgRAQQAhAgNAIAQtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0F/RgRAQYwBIQEMBAsgA0H//wNxIQMgECACQQF0aiEXIBcgAzsBACACQQFqIQIgCygCACEDIAIgA0gNAAsgAyECCyAFLAAAIQMCQCADQQFGBEAgESwAACEDIANBAEciFwRAIAEoAgAhAyADRQRAIAIhAQwDCwUgDigCACEDCyAKIAZBsBBsaiAAIANBAnQgCSgCAGwQTSIfNgIcIB9FBEBBkwEhAQwECyABIA4gFxshASABKAIAIQ4gDkEASgRAIAogBkGwEGxqQagQaiEgIAkoAgAiCkEASiEJQwAAAAAhJUEAIQEDQCAXBH8gICgCACECIAIgAUECdGohAiACKAIABSABCyEEIAkEQCALKAIAIRggHCwAAEUhISAKIAFsISJBACEDQQEhAgNAIAQgAm4hEiASIBhwIRIgECASQQF0aiESIBIvAQAhEiASQf//A3GyISQgGyoCACEmICYgJJQhJCAPKgIAISYgJCAmkiEkICUgJJIhJCAiIANqIRIgHyASQQJ0aiESIBIgJDgCACAlICQgIRshJSADQQFqIQMgAyAKSCISBEBBfyAYbiEjIAIgI0sEQEGeASEBDAkLIBggAmwhAgsgEg0ACwsgAUEBaiEBIAEgDkgNAAsLIAVBAjoAACALKAIAIQEFIAJBAnQhASAAIAEQTSECIAogBkGwEGxqQRxqIQEgASACNgIAIAsoAgAhCCACRQRAQaUBIQEMBAsgCEEATARAIAghAQwCCyAcLAAARSEDQwAAAAAhJUEAIQEDQCAQIAFBAXRqIQQgBC8BACEEIARB//8DcbIhJCAbKgIAISYgJiAklCEkIA8qAgAhJiAkICaSISQgJSAkkiEkIAIgAUECdGohBCAEICQ4AgAgJSAkIAMbISUgAUEBaiEBIAEgCEgNAAsgCCEBCwsgAUEBdCEBIAAgECABEE4LIAZBAWohBiANKAIAIQEgBiABSA0BDAMLCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUE/aw5nABYBFgIWFhYWAxYWFhYEFhYWFhYFFhYWFhYWBhYWFhYWFgcWFhYWFhYWCBYJFgoWFgsWFhYMFhYWFg0WDhYWFhYPFhYWFhYQFhEWFhYSFhYWFhYWExYWFhYWFhYWFhYUFhYWFhYWFRYLIABBFBAVQQAMGwsgAEEUEBVBAAwaCyAAQRQQFUEADBkLIABBFBAVQQAMGAsgAEEDEBVBAAwXCyAAQRQQFUEADBYLIABBFBAVQQAMFQsgAEEDEBVBAAwUCyAAQQMQFUEADBMLIABBAxAVQQAMEgsgAEEDEBVBAAwRCyAAQQMQFUEADBALIBEsAAAhASABBEAgACAHQQAQTgsgAEEUEBVBAAwPCyAAQQMQFUEADA4LIABBAxAVQQAMDQsgAEEUEBVBAAwMCyAAQRQQFUEADAsLIABBAxAVQQAMCgsgCygCACEBIAFBAXQhASAAIBAgARBOIABBFBAVQQAMCQsgCygCACEBIAFBAXQhASAAIBAgARBOIABBAxAVQQAMCAsgGEEBdCEBIAAgECABEE4gAEEUEBVBAAwHCyAIQQF0IQEgACAQIAEQTiAAQQMQFUEADAYLCwsgAEEGECwhASABQQFqIQEgAUH/AXEhAgJAIAIEQEEAIQEDQAJAIABBEBAsIQMgA0UhAyADRQ0AIAFBAWohASABIAJJDQEMAwsLIABBFBAVQQAMBQsLIABBBhAsIQEgAUEBaiEBIABB9ABqIQ8gDyABNgIAIAFBvAxsIQEgACABEE0hASAAQfgBaiEOIA4gATYCACABRQRAIABBAxAVQQAMBAsgDygCACEBAn8gAUEASgR/QQAhBEEAIQcCQAJAAkACQAJAAkADQCAAQRAQLCEBIAFB//8DcSECIABB+ABqIAdBAXRqIQMgAyACOwEAIAFB//8DcSEBIAFBAUsNASABRQ0CIA4oAgAhBSAAQQUQLCEBIAFB/wFxIQIgBSAHQbwMbGohCiAKIAI6AAAgAUH/AXEhASABBEBBfyEBQQAhAgNAIABBBBAsIQMgA0H/AXEhCCAFIAdBvAxsakEBaiACaiEGIAYgCDoAACADQf8BcSEDIAMgAUohCCADIAEgCBshAyACQQFqIQIgCi0AACEBIAFB/wFxIQEgAiABSQRAIAMhAQwBCwtBACEBA0AgAEEDECwhAiACQQFqIQIgAkH/AXEhAiAFIAdBvAxsakEhaiABaiEIIAggAjoAACAAQQIQLCECIAJB/wFxIQIgBSAHQbwMbGpBMWogAWohCCAIIAI6AAACQAJAIAJB/wFxRQ0AIABBCBAsIQIgAkH/AXEhBiAFIAdBvAxsakHBAGogAWohECAQIAY6AAAgAkH/AXEhAiANKAIAIQYgAiAGTg0HIAgsAAAhAiACQR9HDQAMAQtBACECA0AgAEEIECwhBiAGQf//A2ohBiAGQf//A3EhECAFIAdBvAxsakHSAGogAUEEdGogAkEBdGohCSAJIBA7AQAgBkEQdCEGIAZBEHUhBiANKAIAIRAgBiAQSCEGIAZFDQggAkEBaiECIAgtAAAhBiAGQf8BcSEGQQEgBnQhBiACIAZIDQALCyABQQFqIQIgASADSARAIAIhAQwBCwsLIABBAhAsIQEgAUEBaiEBIAFB/wFxIQEgBSAHQbwMbGpBtAxqIQIgAiABOgAAIABBBBAsIQEgAUH/AXEhAiAFIAdBvAxsakG1DGohECAQIAI6AAAgBSAHQbwMbGpB0gJqIQkgCUEAOwEAIAFB/wFxIQFBASABdCEBIAFB//8DcSEBIAUgB0G8DGxqQdQCaiECIAIgATsBACAFIAdBvAxsakG4DGohBiAGQQI2AgAgCiwAACEBAkACQCABBEBBACEIQQIhAwNAIAUgB0G8DGxqQQFqIAhqIQIgAi0AACECIAJB/wFxIQIgBSAHQbwMbGpBIWogAmohAiACLAAAIQsgCwRAQQAhAQNAIBAtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0H//wNxIQsgBigCACEDIAUgB0G8DGxqQdICaiADQQF0aiERIBEgCzsBACADQQFqIQMgBiADNgIAIAFBAWohASACLQAAIQsgC0H/AXEhCyABIAtJDQALIAosAAAhAgUgASECCyADIQEgCEEBaiEIIAJB/wFxIQMgCCADSQRAIAEhAyACIQEMAQsLIAFBAEoNAQVBAiEBDAELDAELQQAhAgNAIAUgB0G8DGxqQdICaiACQQF0aiEDIAMuAQAhAyAMIAJBAnRqIQggCCADOwEAIAJB//8DcSEDIAwgAkECdGpBAmohCCAIIAM7AQAgAkEBaiECIAIgAUgNAAsLIAwgAUEEQQEQZiAGKAIAIQECQCABQQBKBEBBACEBA0AgDCABQQJ0akECaiECIAIuAQAhAiACQf8BcSECIAUgB0G8DGxqQcYGaiABaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAkECTARAIAIhAQwCC0ECIQEDQCAJIAEgHSAeEFUgHSgCACECIAJB/wFxIQIgBSAHQbwMbGpBwAhqIAFBAXRqIQMgAyACOgAAIB4oAgAhAiACQf8BcSECIAUgB0G8DGxqIAFBAXRqQcEIaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAiEBCwsgASAESiECIAEgBCACGyEEIAdBAWohByAPKAIAIQEgByABSA0ADAUACwALIABBFBAVQQAMCgsgDigCACEBIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsaiEDIAMgAjoAACAAQRAQLCECIAJB//8DcSECIAEgB0G8DGxqQQJqIQMgAyACOwEAIABBEBAsIQIgAkH//wNxIQIgASAHQbwMbGpBBGohAyADIAI7AQAgAEEGECwhAiACQf8BcSECIAEgB0G8DGxqQQZqIQMgAyACOgAAIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsakEHaiEDIAMgAjoAACAAQQQQLCECIAJBAWohAiACQf8BcSEEIAEgB0G8DGxqQQhqIQMgAyAEOgAAIAJB/wFxIQIgAgRAIAEgB0G8DGxqQQlqIQJBACEBA0AgAEEIECwhByAHQf8BcSEHIAIgAWohBCAEIAc6AAAgAUEBaiEBIAMtAAAhByAHQf8BcSEHIAEgB0kNAAsLIABBBBAVQQAMCQsgAEEUEBUMAgsgAEEUEBUMAQsgBEEBdAwCC0EADAUFQQALCyEQIABBBhAsIQEgAUEBaiEBIABB/AFqIQUgBSABNgIAIAFBGGwhASAAIAEQTSEBIABBgANqIQ4gDiABNgIAIAFFBEAgAEEDEBVBAAwECyAFKAIAIQIgAkEYbCECIAFBACACEHoaIAUoAgAhAQJAIAFBAEoEQEEAIQcCQAJAAkACQAJAAkACQAJAA0AgDigCACEEIABBEBAsIQEgAUH//wNxIQIgAEGAAmogB0EBdGohAyADIAI7AQAgAUH//wNxIQEgAUECSw0BIABBGBAsIQIgBCAHQRhsaiEBIAEgAjYCACAAQRgQLCECIAQgB0EYbGpBBGohAyADIAI2AgAgASgCACEBIAIgAUkNAiAAQRgQLCEBIAFBAWohASAEIAdBGGxqQQhqIQIgAiABNgIAIABBBhAsIQEgAUEBaiEBIAFB/wFxIQEgBCAHQRhsakEMaiEIIAggAToAACAAQQgQLCEBIAFB/wFxIQIgBCAHQRhsakENaiEGIAYgAjoAACABQf8BcSEBIA0oAgAhAiABIAJODQMgCCwAACEBIAEEf0EAIQEDQCAAQQMQLCEDIABBARAsIQIgAgR/IABBBRAsBUEACyECIAJBA3QhAiACIANqIQIgAkH/AXEhAiAMIAFqIQMgAyACOgAAIAFBAWohASAILQAAIQIgAkH/AXEhAyABIANJDQALIAJB/wFxBUEACyEBIAFBBHQhASAAIAEQTSEBIAQgB0EYbGpBFGohCiAKIAE2AgAgAUUNBCAILAAAIQIgAgRAQQAhAgNAIAwgAmotAAAhC0EAIQMDQEEBIAN0IQkgCSALcSEJIAkEQCAAQQgQLCEJIAlB//8DcSERIAooAgAhASABIAJBBHRqIANBAXRqIRYgFiAROwEAIAlBEHQhCSAJQRB1IQkgDSgCACERIBEgCUwNCQUgASACQQR0aiADQQF0aiEJIAlBfzsBAAsgA0EBaiEDIANBCEkNAAsgAkEBaiECIAgtAAAhAyADQf8BcSEDIAIgA0kNAAsLIBUoAgAhASAGLQAAIQIgAkH/AXEhAiABIAJBsBBsakEEaiEBIAEoAgAhASABQQJ0IQEgACABEE0hASAEIAdBGGxqQRBqIQogCiABNgIAIAFFDQYgFSgCACECIAYtAAAhAyADQf8BcSEDIAIgA0GwEGxqQQRqIQIgAigCACECIAJBAnQhAiABQQAgAhB6GiAVKAIAIQIgBi0AACEBIAFB/wFxIQMgAiADQbAQbGpBBGohASABKAIAIQEgAUEASgRAQQAhAQNAIAIgA0GwEGxqIQIgAigCACEDIAAgAxBNIQIgCigCACEEIAQgAUECdGohBCAEIAI2AgAgCigCACECIAIgAUECdGohAiACKAIAIQQgBEUNCQJAIANBAEoEQCAILQAAIQkgA0F/aiECIAlB/wFxIQkgASAJcCEJIAlB/wFxIQkgBCACaiEEIAQgCToAACADQQFGDQEgASEDA0AgCC0AACEJIAlB/wFxIQQgAyAEbSEDIAooAgAgAUECdGohBCAEKAIAIQsgAkF/aiEEIAlB/wFxIQkgAyAJbyEJIAlB/wFxIQkgCyAEaiELIAsgCToAACACQQFKBEAgBCECDAELCwsLIAFBAWohASAVKAIAIQIgBi0AACEDIANB/wFxIQMgAiADQbAQbGpBBGohBCAEKAIAIQQgASAESA0ACwsgB0EBaiEHIAUoAgAhASAHIAFIDQAMCgALAAsgAEEUEBUMBgsgAEEUEBUMBQsgAEEUEBUMBAsgAEEDEBUMAwsgAEEUEBUMAgsgAEEDEBUMAQsgAEEDEBULQQAMBQsLIABBBhAsIQEgAUEBaiEBIABBhANqIQcgByABNgIAIAFBKGwhASAAIAEQTSEBIABBiANqIQogCiABNgIAIAFFBEAgAEEDEBVBAAwECyAHKAIAIQIgAkEobCECIAFBACACEHoaIAcoAgAhAQJAIAFBAEoEQEEAIQECQAJAAkACQAJAAkACQAJAAkACQANAIAooAgAhBCAEIAFBKGxqIQwgAEEQECwhAiACDQEgEygCACECIAJBA2whAiAAIAIQTSECIAQgAUEobGpBBGohCCAIIAI2AgAgAkUNAiAAQQEQLCECIAIEfyAAQQQQLCECIAJBAWohAiACQf8BcQVBAQshAiAEIAFBKGxqQQhqIQYgBiACOgAAIABBARAsIQICQCACBEAgAEEIECwhAiACQQFqIQIgAkH//wNxIQMgDCADOwEAIAJB//8DcSECIAJFDQFBACECIBMoAgAhAwNAIANBf2ohAyADEC0hAyAAIAMQLCEDIANB/wFxIQMgCCgCACENIA0gAkEDbGohDSANIAM6AAAgEygCACEDIANBf2ohAyADEC0hAyAAIAMQLCENIA1B/wFxIQkgCCgCACEDIAMgAkEDbGpBAWohCyALIAk6AAAgAyACQQNsaiEDIAMsAAAhCyALQf8BcSERIBMoAgAhAyADIBFMDQYgDUH/AXEhDSADIA1MDQcgCyAJQRh0QRh1RiENIA0NCCACQQFqIQIgDC8BACENIA1B//8DcSENIAIgDUkNAAsFIAxBADsBAAsLIABBAhAsIQIgAg0GIAYsAAAhAyATKAIAIgxBAEohAgJAAkAgA0H/AXFBAUoEQCACRQ0BQQAhAgNAIABBBBAsIQMgA0H/AXEhAyAIKAIAIQwgDCACQQNsakECaiEMIAwgAzoAACAGLQAAIQwgDEH/AXEgA0ohAyADRQ0LIAJBAWohAiATKAIAIQMgAiADSA0ACwwBBSACBEAgCCgCACEIQQAhAgNAIAggAkEDbGpBAmohDSANQQA6AAAgAkEBaiECIAIgDEgNAAsLIAMNAQsMAQtBACECA0AgAEEIECwaIABBCBAsIQMgA0H/AXEhCCAEIAFBKGxqQQlqIAJqIQMgAyAIOgAAIABBCBAsIQggCEH/AXEhDCAEIAFBKGxqQRhqIAJqIQ0gDSAMOgAAIAMtAAAhAyADQf8BcSEDIA8oAgAhDCAMIANMDQogCEH/AXEhAyAFKAIAIQggAyAISCEDIANFDQsgAkEBaiECIAYtAAAhAyADQf8BcSEDIAIgA0kNAAsLIAFBAWohASAHKAIAIQIgASACSA0ADAwACwALIABBFBAVQQAMDgsgAEEDEBVBAAwNCyAAQRQQFUEADAwLIABBFBAVQQAMCwsgAEEUEBVBAAwKCyAAQRQQFUEADAkLIABBFBAVQQAMCAsgAEEUEBVBAAwHCyAAQRQQFUEADAYACwALCyAAQQYQLCEBIAFBAWohASAAQYwDaiECIAIgATYCAAJAIAFBAEoEQEEAIQECQAJAAkACQANAIABBARAsIQMgA0H/AXEhAyAAQZADaiABQQZsaiEEIAQgAzoAACAAQRAQLCEDIANB//8DcSEEIAAgAUEGbGpBkgNqIQMgAyAEOwEAIABBEBAsIQQgBEH//wNxIQggACABQQZsakGUA2ohBCAEIAg7AQAgAEEIECwhCCAIQf8BcSEGIAAgAUEGbGpBkQNqIQwgDCAGOgAAIAMuAQAhAyADDQEgBC4BACEDIAMNAiAIQf8BcSEDIAcoAgAhBCADIARIIQMgA0UNAyABQQFqIQEgAigCACEDIAEgA0gNAAwGAAsACyAAQRQQFUEADAgLIABBFBAVQQAMBwsgAEEUEBVBAAwGAAsACwsgABAhIABB1AdqIQEgAUEANgIAIBMoAgAhAQJAIAFBAEoEQEEAIQEDQAJAIBQoAgAhAiACQQJ0IQIgACACEE0hAyAAQZQGaiABQQJ0aiECIAIgAzYCACAUKAIAIQMgA0EBdCEDIANB/v///wdxIQMgACADEE0hByAAQZQHaiABQQJ0aiEDIAMgBzYCACAAIBAQTSEHIABB2AdqIAFBAnRqIQQgBCAHNgIAIAIoAgAhAiACRQ0AIAMoAgAhAyADRSEDIAdFIQcgByADcg0AIBQoAgAhAyADQQJ0IQMgAkEAIAMQehogAUEBaiEBIBMoAgAhAiABIAJIDQEMAwsLIABBAxAVQQAMBQsLIBooAgAhASAAQQAgARBWIQFBACABRQ0DGiAUKAIAIQEgAEEBIAEQViEBQQAgAUUNAxogGigCACEBIABB3ABqIQIgAiABNgIAIBQoAgAhASAAQeAAaiECIAIgATYCACABQQF0IQIgAkH+////B3EhBCAFKAIAIQggCEEASgR/IA4oAgAhByABQQJtIQNBACECQQAhAQNAIAcgAUEYbGohBSAFKAIAIQUgBSADSSEGIAUgAyAGGyEGIAcgAUEYbGpBBGohBSAFKAIAIQUgBSADSSEMIAUgAyAMGyEFIAUgBmshBSAHIAFBGGxqQQhqIQYgBigCACEGIAUgBm4hBSAFIAJKIQYgBSACIAYbIQIgAUEBaiEBIAEgCEgNAAsgAkECdCEBIAFBBGoFQQQLIQEgEygCACECIAIgAWwhASAAQQxqIQIgBCABSyEDIAIgBCABIAMbIgI2AgAgAEHVCmohASABQQE6AAAgAEHEAGohASABKAIAIQECQCABBEAgAEHQAGohASABKAIAIQEgAEHIAGohAyADKAIAIQMgASADRwRAQcwWQcQTQaAgQYQXEAQLIABBzABqIQMgAygCACEDIAJB3AtqIQIgAiADaiECIAIgAU0NASAAQQMQFUEADAULCyAAEB8hASAAQShqIQAgACABNgIAQQEMAwsgACACQQYQIiEBIAFBAEchASACLAAAIQMgA0HmAEYhAyABIANxBEAgAkEBaiEBIAEsAAAhASABQekARgRAIAJBAmohASABLAAAIQEgAUHzAEYEQCACQQNqIQEgASwAACEBIAFB6ABGBEAgAkEEaiEBIAEsAAAhASABQeUARgRAIAJBBWohASABLAAAIQEgAUHhAEYEQCAAEDAhASABQf8BcUHkAEYEQCAAEDAhASABQf8BcUUEQCAAQSYQFUEADAoLCwsLCwsLCwsgAEEiEBULQQALIQAgGSQGIAALDwEBfyAAQdwLEE0hASABCz8BAX8gAEEkaiEBIAEsAAAhASABBH9BAAUgAEEUaiEBIAEoAgAhASAAQRhqIQAgACgCACEAIAEgAGsLIQAgAAuBAgECfyAAQdgKaiEBIAEoAgAhAQJ/AkAgAUF/Rw0AIAAQMCEBIABB1ABqIQIgAigCACECIAIEf0EABSABQf8BcUHPAEcEQCAAQR4QFUEADAMLIAAQMCEBIAFB/wFxQecARwRAIABBHhAVQQAMAwsgABAwIQEgAUH/AXFB5wBHBEAgAEEeEBVBAAwDCyAAEDAhASABQf8BcUHTAEcEQCAAQR4QFUEADAMLIAAQMyEBIAEEQCAAQdMKaiEBIAEsAAAhASABQQFxIQEgAUUNAiAAQdwKaiEBIAFBADYCACAAQdQKaiEBIAFBADoAACAAQSAQFQtBAAsMAQsgABBKCyEAIAALFAEBfwNAIAAQLiEBIAFBf0cNAAsLZQEEfyAAQRRqIQMgAygCACEFIAUgAmohBiAAQRxqIQQgBCgCACEEIAYgBEsEfyAAQdQAaiEAIABBATYCAEEABSABIAUgAhB5GiADKAIAIQAgACACaiEAIAMgADYCAEEBCyEAIAALaAECfyAAEDAhAiACQf8BcSECIAAQMCEBIAFB/wFxIQEgAUEIdCEBIAEgAnIhAiAAEDAhASABQf8BcSEBIAFBEHQhASACIAFyIQIgABAwIQAgAEH/AXEhACAAQRh0IQAgAiAAciEAIAALEwEBf0EEEF4hACAAQQA2AgAgAAsTAQF/IAAoAgAhASABEBAgABBfCyEAIAAoAgAhACAABH8gAEEEaiEAIAAoAgAFQQALIQAgAAsaACAAKAIAIQAgAAR/IAAoAgAFQQALIQAgAAvbBwISfwF9IwYhECMGQRBqJAYgEEEEaiELIBAhDCAEQQA2AgAgACgCACEGAkACQCAGDQBBICEFA0ACQCALQQA2AgAgDEEANgIAIAUgAkohBiACIAUgBhshBiABIAYgCyAMQQAQGyEKIAAgCjYCAAJAAkACQAJAIAwoAgAOAgEAAgsgAiAFTCEHIAdBAXMhBSAFQQFxIQUgBiAFdCEFQQFBAiAHGyEGIAYhCUEAIAggBxshCCAFIQYMAgsgCygCACEHIAQoAgAhBSAFIAdqIQUgBCAFNgIAIAEgB2ohAUEAIQkgAiAHayECDAELQQEhCUF/IQgLAkACQAJAIAlBA3EOAwABAAELDAELDAELIAoEQCAKIQYMAwUgBiEFDAILAAsLIAkEfyAIBSAKIQYMAQshEgwBCyAGQQRqIQogCigCACEIIAhBAnQhCCAIEF4hDSANRQRAEAYLIAooAgAhCCAIQQBKBEAgCEECdCEIIA1BACAIEHoaC0EAIQVBACEKIAEhCCAGIQECQAJAAkADQCALQQA2AgAgDEEANgIAIAJBIEghBiACQSAgBhshCSABIAggCUEAIAsgDBAUIQEgAUUEQEEgIQYgCSEBA0AgAiAGSiEGIAZFDQQgAUEBdCEGIAYgAkohASACIAYgARshASAAKAIAIQkgCSAIIAFBACALIAwQFCEJIAlFDQALIAkhAQsgBCgCACEGIAYgAWohBiAEIAY2AgAgCCABaiEIIAIgAWshBiAMKAIAIREgESAKaiEJAkACQCAFIAlIBEAgBUUhAiAFQQF0IQFBgCAgASACGyECIAAoAgAhASABQQRqIQUgBSgCACEFIAVBAEoEQCACQQJ0IQ5BACEBA0AgDSABQQJ0aiEHIAcoAgAhBSAFIA4QYCEFIAVFDQYgByAFNgIAIAFBAWohASAAKAIAIQcgB0EEaiEFIAUoAgAhBSABIAVIDQALIAUhDiAHIQEMAgsFIAAoAgAiAUEEaiEHIAUhAiAHKAIAIQ4MAQsMAQsgDkEASgRAIBFBAEohEyALKAIAIRRBACEHA0AgEwRAIBQgB0ECdGooAgAhFSANIAdBAnRqKAIAIRZBACEFA0AgFSAFQQJ0aiEPIA8qAgAhFyAXQwAAgD9eBEBDAACAPyEXBSAXQwAAgL9dBEBDAACAvyEXCwsgBSAKaiEPIBYgD0ECdGohDyAPIBc4AgAgBUEBaiEFIAUgEUcNAAsLIAdBAWohBSAFIA5IBEAgBSEHDAELCwsLIAIhBSAJIQogBiECDAAACwALEAYMAQsgAyANNgIAIAohEgsLIBAkBiASCzwBAX8gAEEIdCECIAFB/wFxIQEgAEEYdiEAIAAgAXMhACAAQQJ0QdAZaiEAIAAoAgAhACAAIAJzIQAgAAvvBAEFfyAAQdgLaiEGIAZBADYCACAAQdQLaiEGIAZBADYCACAAQdQAaiEIIAgoAgAhBgJ/IAYEf0EABSAAQSRqIQcCQAJAA0ACQCAAECAhBkEAIAZFDQUaIABBARAsIQYgBkUNACAHLAAAIQYgBg0CA0AgABAZIQYgBkF/Rw0ACyAIKAIAIQYgBkUNAUEADAULCwwBCyAAQSMQFUEADAILIABBxABqIQYgBigCACEGIAYEQCAAQcgAaiEGIAYoAgAhByAAQdAAaiEGIAYoAgAhBiAHIAZHBEBB0xNBxBNBuhhBixQQBAsLIABBjANqIQcgBygCACEGIAZBf2ohBiAGEC0hBiAAIAYQLCEIIAhBf0YEf0EABSAHKAIAIQYgCCAGSAR/IAUgCDYCACAAQZADaiAIQQZsaiEHIAcsAAAhBQJAAkAgBQR/IABB6ABqIQUgBSgCACEFIABBARAsIQYgAEEBECwhCCAGQQBHIQkgBywAACEGIAZFIQcgBUEBdSEGIAkgB3IEfwwCBSAAQeQAaiEKIAooAgAhCSAFIAlrIQkgCUECdSEJIAEgCTYCACAKKAIAIQEgASAFaiEJIAYhASAJQQJ1CwUgAEHkAGohBSAFKAIAIQZBACEIIAYhBSAGQQF1IQZBASEHDAELIQYMAQsgAUEANgIAIAYhAQsgAiAGNgIAIAhBAEchAiACIAdyBEAgAyABNgIABSAFQQNsIQIgAEHkAGohASABKAIAIQAgAiAAayEAIABBAnUhACADIAA2AgAgASgCACEAIAAgAmohACAAQQJ1IQULIAQgBTYCAEEBBUEACwsLCyEAIAALjB0CJ38DfSMGIRwjBkGAFGokBiAcQYAMaiEdIBxBgARqISQgHEGAAmohFCAcISAgAi0AACEHIAdB/wFxIQcgAEHcAGogB0ECdGohByAHKAIAIR4gAEGIA2ohByAHKAIAIRYgAkEBaiEHIActAAAhByAHQf8BcSEXIBYgF0EobGohIiAeQQF1IR9BACAfayEpIABBBGohGiAaKAIAIQcCfwJAIAdBAEoEfyAWIBdBKGxqQQRqISogAEH4AWohKyAAQfAAaiElIABB6ApqIRggAEHkCmohISAUQQFqISwDQAJAICooAgAhByAHIA1BA2xqQQJqIQcgBy0AACEHIAdB/wFxIQcgHSANQQJ0aiEVIBVBADYCACAWIBdBKGxqQQlqIAdqIQcgBy0AACEHIAdB/wFxIQ8gAEH4AGogD0EBdGohByAHLgEAIQcgB0UNACArKAIAIRAgAEEBECwhBwJAAkAgB0UNACAQIA9BvAxsakG0DGohByAHLQAAIQcgB0H/AXEhByAHQX9qIQcgB0ECdEGQCGohByAHKAIAISMgAEHYB2ogDUECdGohByAHKAIAIRkgIxAtIQcgB0F/aiEHIAAgBxAsIQggCEH//wNxIQggGSAIOwEAIAAgBxAsIQcgB0H//wNxIQcgGUECaiEIIAggBzsBACAQIA9BvAxsaiEmICYsAAAhByAHBEBBACETQQIhBwNAIBAgD0G8DGxqQQFqIBNqIQggCC0AACEIIAhB/wFxIRsgECAPQbwMbGpBIWogG2ohCCAILAAAIQwgDEH/AXEhJyAQIA9BvAxsakExaiAbaiEIIAgsAAAhCCAIQf8BcSEoQQEgKHQhCSAJQX9qIS0gCARAICUoAgAhCyAQIA9BvAxsakHBAGogG2ohCCAILQAAIQggCEH/AXEhCiALIApBsBBsaiEOIBgoAgAhCCAIQQpIBEAgABA0CyAhKAIAIQkgCUH/B3EhCCALIApBsBBsakEkaiAIQQF0aiEIIAguAQAhCCAIQX9KBEAgCyAKQbAQbGpBCGohDiAOKAIAIQ4gDiAIaiEOIA4tAAAhDiAOQf8BcSEOIAkgDnYhCSAhIAk2AgAgGCgCACEJIAkgDmshCSAJQQBIIQ5BACAJIA4bIRFBfyAIIA4bIQkgGCARNgIABSAAIA4QNSEJCyALIApBsBBsakEXaiEIIAgsAAAhCCAIBEAgCyAKQbAQbGpBqBBqIQggCCgCACEIIAggCUECdGohCCAIKAIAIQkLBUEAIQkLIAwEQEEAIQsgByEIA0AgCSAtcSEKIBAgD0G8DGxqQdIAaiAbQQR0aiAKQQF0aiEKIAouAQAhDCAJICh1IQogDEF/SgR/ICUoAgAhDiAOIAxBsBBsaiESIBgoAgAhCSAJQQpIBEAgABA0CyAhKAIAIREgEUH/B3EhCSAOIAxBsBBsakEkaiAJQQF0aiEJIAkuAQAhCSAJQX9KBEAgDiAMQbAQbGpBCGohEiASKAIAIRIgEiAJaiESIBItAAAhEiASQf8BcSESIBEgEnYhESAhIBE2AgAgGCgCACERIBEgEmshESARQQBIIRJBACARIBIbIRFBfyAJIBIbIQkgGCARNgIABSAAIBIQNSEJCyAOIAxBsBBsakEXaiERIBEsAAAhESARBEAgDiAMQbAQbGpBqBBqIQwgDCgCACEMIAwgCUECdGohCSAJKAIAIQkLIAlB//8DcQVBAAshCSAZIAhBAXRqIAk7AQAgCEEBaiEIIAtBAWohCyALICdHBEAgCiEJDAELCyAHICdqIQcLIBNBAWohEyAmLQAAIQggCEH/AXEhCCATIAhJDQALCyAYKAIAIQcgB0F/Rg0AICxBAToAACAUQQE6AAAgECAPQbwMbGpBuAxqIQcgBygCACETIBNBAkoEQCAjQf//A2ohG0ECIQcDQCAQIA9BvAxsakHACGogB0EBdGohCCAILQAAIQggCEH/AXEhCyAQIA9BvAxsaiAHQQF0akHBCGohCCAILQAAIQggCEH/AXEhCiAQIA9BvAxsakHSAmogB0EBdGohCCAILwEAIQggCEH//wNxIQggECAPQbwMbGpB0gJqIAtBAXRqIQkgCS8BACEJIAlB//8DcSEJIBAgD0G8DGxqQdICaiAKQQF0aiEMIAwvAQAhDCAMQf//A3EhDCAZIAtBAXRqIQ4gDi4BACEOIBkgCkEBdGohFSAVLgEAIRUgCCAJIAwgDiAVEDYhCCAZIAdBAXRqIQ4gDi4BACEJICMgCGshDAJAAkAgCQRAIAwgCEghFSAMIAggFRtBAXQhFSAUIApqIQogCkEBOgAAIBQgC2ohCyALQQE6AAAgFCAHaiELIAtBAToAACAVIAlMBEAgDCAISg0DIBsgCWshCAwCCyAJQQFxIQsgCwR/IAlBAWohCSAJQQF2IQkgCCAJawUgCUEBdSEJIAkgCGoLIQgFIBQgB2ohCSAJQQA6AAALCyAOIAg7AQALIAdBAWohByAHIBNIDQALCyATQQBKBEBBACEHA0AgFCAHaiEIIAgsAAAhCCAIRQRAIBkgB0EBdGohCCAIQX87AQALIAdBAWohByAHIBNHDQALCwwBCyAVQQE2AgALIA1BAWohDSAaKAIAIQcgDSAHSA0BDAMLCyAAQRUQFUEABQwBCwwBCyAAQcQAaiETIBMoAgAhCSAJBEAgAEHIAGohCCAIKAIAIQggAEHQAGohDSANKAIAIQ0gCCANRwRAQdMTQcQTQc8ZQecUEAQLCyAHQQJ0IQggJCAdIAgQeRogIi4BACEIIAgEQCAWIBdBKGxqKAIEIQ0gCEH//wNxIQxBACEIA0AgDSAIQQNsaiELIAstAAAhCyALQf8BcSELIB0gC0ECdGohCyALKAIAIQ8gHSANIAhBA2xqLQABQQJ0aiEKAkACQCAPRQ0AIAooAgAhDyAPRQ0ADAELIApBADYCACALQQA2AgALIAhBAWohCCAIIAxJDQALCyAWIBdBKGxqQQhqIQsgCywAACEIIAgEQCAWIBdBKGxqQQRqIQxBACEJIAchDQNAAkAgDUEASgRAIAwoAgAhD0EAIQdBACEIA0AgDyAIQQNsakECaiEKIAotAAAhCiAKQf8BcSEKIAkgCkYEQCAdIAhBAnRqIQogCigCACEQICAgB2ohCiAQBEAgCkEBOgAAIBQgB0ECdGohCiAKQQA2AgAFIApBADoAACAAQZQGaiAIQQJ0aiEKIAooAgAhCiAUIAdBAnRqIRAgECAKNgIACyAHQQFqIQcLIAhBAWohCCAIIA1IDQALBUEAIQcLIBYgF0EobGpBGGogCWohCCAILQAAIQggCEH/AXEhCCAAIBQgByAfIAggIBA3IAlBAWohCSALLQAAIQcgB0H/AXEhByAJIAdPDQAgGigCACENDAELCyATKAIAIQkLIAkEQCAAQcgAaiEHIAcoAgAhByAAQdAAaiEIIAgoAgAhCCAHIAhHBEBB0xNBxBNB8BlB5xQQBAsLICIuAQAhByAHBEAgFiAXQShsaigCBCENIB5BAUohDCAHQf//A3EhCANAIAhBf2ohCSANIAlBA2xqIQcgBy0AACEHIAdB/wFxIQcgAEGUBmogB0ECdGohByAHKAIAISAgDSAJQQNsakEBaiEHIActAAAhByAHQf8BcSEHIABBlAZqIAdBAnRqIQcgBygCACEPIAwEQEEAIQcDQCAgIAdBAnRqIQsgCyoCACEuIA8gB0ECdGoiECoCACIvQwAAAABeIQogLkMAAAAAXgRAIAoEQCAuITAgLiAvkyEuBSAuIC+SITALBSAKBEAgLiEwIC4gL5IhLgUgLiAvkyEwCwsgCyAwOAIAIBAgLjgCACAHQQFqIQcgByAfSA0ACwsgCEEBSgRAIAkhCAwBCwsLIBooAgAhByAHQQBKBEAgH0ECdCEJQQAhBwNAICQgB0ECdGohCCAIKAIAIQ0gAEGUBmogB0ECdGohCCANBEAgCCgCACEIIAhBACAJEHoaBSAIKAIAIQggAEHYB2ogB0ECdGohDSANKAIAIQ0gACAiIAcgHiAIIA0QOAsgB0EBaiEHIBooAgAhCCAHIAhIDQALIAhBAEoEQEEAIQcDQCAAQZQGaiAHQQJ0aiEIIAgoAgAhCCACLQAAIQkgCUH/AXEhCSAIIB4gACAJEDkgB0EBaiEHIBooAgAhCCAHIAhIDQALCwsgABAhIABB1QpqIQIgAiwAACEHIAcEQCAAQZgIaiEGIAYgKTYCACAeIAVrIQYgAEH4CmohByAHIAY2AgAgAEGcCGohBiAGQQE2AgAgAkEAOgAABSAAQfgKaiEHIAcoAgAhAiACBEAgBCADayEIIAIgCEgEQCACIANqIQMgBiADNgIAIAdBADYCAAUgAiAIayECIAcgAjYCACAGIAQ2AgAgBCEDCwsLIABB4ApqIQIgAigCACECIABB8ApqIQYgBigCACEHIABBnAhqIggoAgAhBgJAAkAgAiAHRgRAIAYEQCAAQdMKaiECIAIsAAAhAiACQQRxIQIgAgRAIABB9ApqIQIgAigCACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(E){return E.charCodeAt(0)});var C=C!==void 0?C:{},nA={};for(e in C)C.hasOwnProperty(e)&&(nA[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(E,Q){throw Q},C.preRun=[],C.postRun=[];var AA=!1,j=!1,H=!1,Z=!1;AA=typeof window=="object",j=typeof importScripts=="function",H=typeof process=="object"&&typeof Ji=="function"&&!AA&&!j,Z=!AA&&!H&&!j;var P="";function J(E){return C.locateFile?C.locateFile(E,P):P+E}H?(P="/",C.read=function(Q,m){var k;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),k=A.readFileSync(Q),m?k:k.toString()},C.readBinary=function(Q){var m=C.read(Q,!0);return m.buffer||(m=new Uint8Array(m)),NA(m.buffer),m},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(E){if(!(E instanceof rt))throw E}),process.on("unhandledRejection",function(E,Q){process.exit(1)}),C.quit=function(E){process.exit(E)},C.inspect=function(){return"[Emscripten Module object]"}):Z?(typeof read<"u"&&(C.read=function(Q){return read(Q)}),C.readBinary=function(Q){var m;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(NA(typeof(m=read(Q,"binary"))=="object"),m)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(E){quit(E)})):(AA||j)&&(AA?document.currentScript&&(P=document.currentScript.src):P=self.location.href,P=P.indexOf("blob:")!==0?P.split("/").slice(0,-1).join("/")+"/":"",C.read=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.send(null),m.responseText},j&&(C.readBinary=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.responseType="arraybuffer",m.send(null),new Uint8Array(m.response)}),C.readAsync=function(Q,m,k){var T=new XMLHttpRequest;T.open("GET",Q,!0),T.responseType="arraybuffer",T.onload=function(){if(T.status==200||T.status==0&&T.response){m(T.response);return}k()},T.onerror=k,T.send(null)},C.setWindowTitle=function(E){document.title=E});var gA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),aA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||gA);for(e in nA)nA.hasOwnProperty(e)&&(C[e]=nA[e]);function q(E){var Q=l;return l=l+E+15&-16,Q}function D(E){var Q=r[M>>2],m=Q+E+15&-16;return r[M>>2]=m,m>=yA&&!it()?(r[M>>2]=Q,0):Q}function b(E,Q){return Q||(Q=16),E=Math.ceil(E/Q)*Q}function v(E){switch(E){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(E[E.length-1]==="*")return 4;if(E[0]!=="i")return 0;var Q=parseInt(E.substr(1));return NA(Q%8==0),Q/8}}function Y(E){Y.shown||(Y.shown={}),Y.shown[E]||(Y.shown[E]=1,aA(E))}nA=void 0;var K={"f64-rem":function(E,Q){return E%Q},debugger:function(){}},SA=[];function YA(E,Q){for(var m=0,k=m;k<m+0;k++)if(!SA[k])return SA[k]=E,1+k;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function LA(E){SA[E-1]=null}var Ae={};function Ue(E,Q){if(E){NA(Q),Ae[Q]||(Ae[Q]={});var m=Ae[Q];return m[E]||(Q.length===1?m[E]=function(){return tA(Q,E)}:Q.length===2?m[E]=function(T){return tA(Q,E,[T])}:m[E]=function(){return tA(Q,E,Array.prototype.slice.call(arguments))}),m[E]}}function Ie(E,Q,m){return m?+(E>>>0)+4294967296*+(Q>>>0):+(E>>>0)+4294967296*+(0|Q)}function tA(E,Q,m){return m&&m.length?C["dynCall_"+E].apply(null,[Q].concat(m)):C["dynCall_"+E].call(null,Q)}var cA=0,ee=0;function NA(E,Q){E||Ce("Assertion failed: "+Q)}function ue(E){var Q=C["_"+E];return NA(Q,"Cannot call unknown function "+E+", make sure it is exported"),Q}var fe={stackSave:function(){hn()},stackRestore:function(){cn()},arrayToC:function(E){var Q,m,k=Ft(E.length);return Q=E,m=k,s.set(Q,m),k},stringToC:function(E){var Q=0;if(E!=null&&E!==0){var m=(E.length<<2)+1;Q=Ft(m),nt(E,Q,m)}return Q}},et={string:fe.stringToC,array:fe.arrayToC};function xe(E,Q,m,k,T){var $=ue(E),sA=[],x=0;if(k)for(var DA=0;DA<k.length;DA++){var EA=et[m[DA]];EA?(x===0&&(x=hn()),sA[DA]=EA(k[DA])):sA[DA]=k[DA]}var lA,hA=$.apply(null,sA);return hA=(lA=hA,Q==="string"?me(lA):Q==="boolean"?!!lA:lA),x!==0&&cn(x),hA}function tt(E,Q,m,k){switch((m=m||"i8").charAt(m.length-1)==="*"&&(m="i32"),m){case"i1":case"i8":s[E>>0]=Q;break;case"i16":I[E>>1]=Q;break;case"i32":r[E>>2]=Q;break;case"i64":tempI64=[Q>>>0,+Ti(tempDouble=Q)>=1?tempDouble>0?(0|xi(+ls(tempDouble/4294967296),4294967295))>>>0:~~+Ui((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],r[E>>2]=tempI64[0],r[E+4>>2]=tempI64[1];break;case"float":h[E>>2]=Q;break;case"double":B[E>>3]=Q;break;default:Ce("invalid type for setValue: "+m)}}function tn(E,Q,m){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[E>>0];case"i16":return I[E>>1];case"i32":case"i64":return r[E>>2];case"float":return h[E>>2];case"double":return B[E>>3];default:Ce("invalid type for getValue: "+Q)}return null}function nn(E,Q,m,k){typeof E=="number"?($=!0,sA=E):($=!1,sA=E.length);var T=typeof Q=="string"?Q:null;if(x=m==4?k:[typeof wt=="function"?wt:q,Ft,q,D][m===void 0?2:m](Math.max(sA,T?1:Q.length)),$){for(k=x,NA((3&x)==0),DA=x+(-4&sA);k<DA;k+=4)r[k>>2]=0;for(DA=x+sA;k<DA;)s[k++>>0]=0;return x}if(T==="i8")return E.subarray||E.slice?i.set(E,x):i.set(new Uint8Array(E),x),x;for(var $,sA,x,DA,EA,lA,hA,_=0;_<sA;){var bA=E[_];if((EA=T||Q[_])===0){_++;continue}EA=="i64"&&(EA="i32"),tt(x+_,bA,EA),hA!==EA&&(lA=v(EA),hA=EA),_+=lA}return x}function He(E){return u?In?wt(E):D(E):q(E)}function me(E,Q){if(Q===0||!E)return"";for(var m,k,T,$=0,sA=0;$|=k=i[E+sA>>0],(k!=0||Q)&&(sA++,!Q||sA!=Q););Q||(Q=sA);var x="";if($<128){for(;Q>0;)T=String.fromCharCode.apply(String,i.subarray(E,E+Math.min(Q,1024))),x=x?x+T:T,E+=1024,Q-=1024;return x}return m=E,(function(EA,lA){for(var hA=lA;EA[hA];)++hA;if(hA-lA>16&&EA.subarray&&mt)return mt.decode(EA.subarray(lA,hA));for(var _,bA,JA,qA,OA,Me,KA="";;){if(!(_=EA[lA++]))return KA;if(!(128&_)){KA+=String.fromCharCode(_);continue}if(bA=63&EA[lA++],(224&_)==192){KA+=String.fromCharCode((31&_)<<6|bA);continue}if(JA=63&EA[lA++],(240&_)==224?_=(15&_)<<12|bA<<6|JA:(qA=63&EA[lA++],(248&_)==240?_=(7&_)<<18|bA<<12|JA<<6|qA:(OA=63&EA[lA++],_=(252&_)==248?(3&_)<<24|bA<<18|JA<<12|qA<<6|OA:(1&_)<<30|bA<<24|JA<<18|qA<<12|OA<<6|(Me=63&EA[lA++]))),_<65536)KA+=String.fromCharCode(_);else{var It=_-65536;KA+=String.fromCharCode(55296|It>>10,56320|1023&It)}}})(i,m)}function TA(E){for(var Q="";;){var m=s[E++>>0];if(!m)return Q;Q+=String.fromCharCode(m)}}function sn(E,Q){return(function(k,T,$){for(var sA=0;sA<k.length;++sA)s[T++>>0]=k.charCodeAt(sA);$||(s[T>>0]=0)})(E,Q,!1)}var mt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ye(E,Q,m,k){if(!(k>0))return 0;for(var T=m,$=m+k-1,sA=0;sA<E.length;++sA){var x=E.charCodeAt(sA);if(x>=55296&&x<=57343&&(x=65536+((1023&x)<<10)|1023&E.charCodeAt(++sA)),x<=127){if(m>=$)break;Q[m++]=x}else if(x<=2047){if(m+1>=$)break;Q[m++]=192|x>>6,Q[m++]=128|63&x}else if(x<=65535){if(m+2>=$)break;Q[m++]=224|x>>12,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else if(x<=2097151){if(m+3>=$)break;Q[m++]=240|x>>18,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else if(x<=67108863){if(m+4>=$)break;Q[m++]=248|x>>24,Q[m++]=128|x>>18&63,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else{if(m+5>=$)break;Q[m++]=252|x>>30,Q[m++]=128|x>>24&63,Q[m++]=128|x>>18&63,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}}return Q[m]=0,m-T}function nt(E,Q,m){return Ye(E,i,Q,m)}function GA(E){for(var Q=0,m=0;m<E.length;++m){var k=E.charCodeAt(m);k>=55296&&k<=57343&&(k=65536+((1023&k)<<10)|1023&E.charCodeAt(++m)),k<=127?++Q:k<=2047?Q+=2:k<=65535?Q+=3:k<=2097151?Q+=4:k<=67108863?Q+=5:Q+=6}return Q}var ge=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function st(E){for(var Q=E,m=Q>>1;I[m];)++m;if((Q=m<<1)-E>32&&ge)return ge.decode(i.subarray(E,Q));for(var k=0,T="";;){var $=I[E+2*k>>1];if($==0)return T;++k,T+=String.fromCharCode($)}}function an(E,Q,m){if(m===void 0&&(m=2147483647),m<2)return 0;for(var k=Q,T=(m-=2)<2*E.length?m/2:E.length,$=0;$<T;++$){var sA=E.charCodeAt($);I[Q>>1]=sA,Q+=2}return I[Q>>1]=0,Q-k}function ce(E){return 2*E.length}function St(E){for(var Q=0,m="";;){var k=r[E+4*Q>>2];if(k==0)return m;if(++Q,k>=65536){var T=k-65536;m+=String.fromCharCode(55296|T>>10,56320|1023&T)}else m+=String.fromCharCode(k)}}function pt(E,Q,m){if(m===void 0&&(m=2147483647),m<4)return 0;for(var k=Q,T=k+m-4,$=0;$<E.length;++$){var sA=E.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&E.charCodeAt(++$)),r[Q>>2]=sA,(Q+=4)+4>T)break}return r[Q>>2]=0,Q-k}function cs(E){for(var Q=0,m=0;m<E.length;++m){var k=E.charCodeAt(m);k>=55296&&k<=57343&&++m,Q+=4}return Q}function hs(E){var Q=GA(E)+1,m=wt(Q);return m&&Ye(E,s,m,Q),m}function yt(E){var Q=GA(E)+1,m=Ft(Q);return Ye(E,s,m,Q),m}function Fe(E){return E}function on(){var E,Q=(function(){var k=Error();if(!k.stack){try{throw Error(0)}catch(T){k=T}if(!k.stack)return"(no stack trace available)"}return k.stack.toString()})();return C.extraStackTrace&&(Q+=`
2
- `+C.extraStackTrace()),(E=Q).replace(/__Z[\w\d_]+/g,function(m){var k,T=k=m;return m===T?m:m+" ["+T+"]"})}function he(E,Q){return E%Q>0&&(E+=Q-E%Q),E}function Je(E){C.buffer=n=E}function Ge(){C.HEAP8=s=new Int8Array(n),C.HEAP16=I=new Int16Array(n),C.HEAP32=r=new Int32Array(n),C.HEAPU8=i=new Uint8Array(n),C.HEAPU16=g=new Uint16Array(n),C.HEAPU32=a=new Uint32Array(n),C.HEAPF32=h=new Float32Array(n),C.HEAPF64=B=new Float64Array(n)}function it(){var E=C.usingWasm?65536:16777216,Q=2147483648-E;if(r[M>>2]>Q)return!1;var m=yA;for(yA=Math.max(yA,16777216);yA<r[M>>2];)yA=yA<=536870912?he(2*yA,E):Math.min(he((3*yA+2147483648)/4,E),Q);var k=C.reallocBuffer(yA);return k&&k.byteLength==yA?(Je(k),Ge(),!0):(yA=m,!1)}d=l=f=p=G=R=M=0,u=!1,C.reallocBuffer||(C.reallocBuffer=function(E){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,E);else{var Q,m=s;Q=new ArrayBuffer(E),new Int8Array(Q).set(m)}}catch{return!1}return!!Hi(Q)&&Q});try{(V=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{V=function(Q){return Q.byteLength}}var qe=C.TOTAL_STACK||5242880,yA=C.TOTAL_MEMORY||16777216;function kt(){return yA}function Se(E){for(;E.length>0;){var Q=E.shift();if(typeof Q=="function"){Q();continue}var m=Q.func;typeof m=="number"?Q.arg===void 0?C.dynCall_v(m):C.dynCall_vi(m,Q.arg):m(Q.arg===void 0?null:Q.arg)}}yA<qe&&aA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+qe+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:yA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(yA),C.buffer=n),Ge();var at=[],rn=[],Cs=[],Bs=[],Es=[],In=!1,vi=!1;function Li(E){at.unshift(E)}function Vo(E){rn.unshift(E)}function Xo(E){Cs.unshift(E)}function Zo(E){Bs.unshift(E)}function Ni(E){Es.unshift(E)}function Wo(E,Q,m){var k,T;Y("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),m&&(k=s[T=Q+GA(E)]),nt(E,Q,1/0),m&&(s[T]=k)}function zo(E,Q,m){return E>=0?E:Q<=32?2*Math.abs(1<<Q-1)+E:Math.pow(2,Q)+E}function _o(E,Q,m){if(E<=0)return E;var k=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return E>=k&&(Q<=32||E>k)&&(E=-2*k+E),E}var Ti=Math.abs,Ui=Math.ceil,ls=Math.floor,xi=Math.min,Re=0,gn=null,ot=null;function jo(E){return E}C.preloadedImages={},C.preloadedAudios={};var ds="data:application/octet-stream;base64,";function Dt(E){return String.prototype.startsWith?E.startsWith(ds):E.indexOf(ds)===0}(function(){var Q="main.wast",m="main.wasm",k="main.temp.asm";Dt(Q)||(Q=J(Q)),Dt(m)||(m=J(m)),Dt(k)||(k=J(k));var T={global:null,env:null,asm2wasm:K,parent:C},$=null;function sA(hA){return hA}function x(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(m);throw"both async and sync fetching of the wasm failed"}catch(hA){Ce(hA)}}C.asmPreload=C.asm;var DA=C.reallocBuffer,EA=function(hA){hA=he(hA,C.usingWasm?65536:16777216);var _=C.buffer.byteLength;if(C.usingWasm)try{var bA=C.wasmMemory.grow((hA-_)/65536);return bA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(hA){return lA==="asmjs"?DA(hA):EA(hA)};var lA="";C.asm=function(hA,_,bA){var JA;if(!(_=JA=_).table){var qA,OA=C.wasmTableSize;OA===void 0&&(OA=1024);var Me=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Me!==void 0?_.table=new WebAssembly.Table({initial:OA,maximum:Me,element:"anyfunc"}):_.table=new WebAssembly.Table({initial:OA,element:"anyfunc"}):_.table=Array(OA),C.wasmTable=_.table}return _.memoryBase||(_.memoryBase=C.STATIC_BASE),_.tableBase||(_.tableBase=0),qA=(function(It,Oe,Bn){if(typeof WebAssembly!="object")return aA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return aA("no native wasm Memory in use"),!1;function Gt(te,ne){if(($=te.exports).memory){var gt,En,fs;gt=$.memory,En=C.buffer,gt.byteLength<En.byteLength&&aA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),fs=new Int8Array(En),new Int8Array(gt).set(fs),Je(gt),Ge()}C.asm=$,C.usingWasm=!0,(function(ir){if(Re--,C.monitorRunDependencies&&C.monitorRunDependencies(Re),Re==0&&(gn!==null&&(clearInterval(gn),gn=null),ot)){var Yi=ot;ot=null,Yi()}})("wasm-instantiate")}if(Oe.memory=C.wasmMemory,T.global={NaN:NaN,Infinity:1/0},T["global.Math"]=Math,T.env=Oe,Re++,C.monitorRunDependencies&&C.monitorRunDependencies(Re),C.instantiateWasm)try{return C.instantiateWasm(T,Gt)}catch(te){return aA("Module.instantiateWasm callback failed with error: "+te),!1}function Ke(te){Gt(te.instance,te.module)}function us(te){(!C.wasmBinary&&(AA||j)&&typeof fetch=="function"?fetch(m,{credentials:"same-origin"}).then(function(ne){if(!ne.ok)throw"failed to load wasm binary file at '"+m+"'";return ne.arrayBuffer()}).catch(function(){return x()}):new Promise(function(ne,gt){ne(x())})).then(function(ne){return WebAssembly.instantiate(ne,T)}).then(te).catch(function(ne){aA("failed to asynchronously prepare wasm: "+ne),Ce(ne)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||Dt(m)||typeof fetch!="function"?us(Ke):WebAssembly.instantiateStreaming(fetch(m,{credentials:"same-origin"}),T).then(Ke).catch(function(te){aA("wasm streaming compile failed: "+te),aA("falling back to ArrayBuffer instantiation"),us(Ke)}),{}})(hA,_,bA),NA(qA,"no binaryen method succeeded."),qA},C.asm})(),l=(d=1024)+4816,rn.push(),C.STATIC_BASE=d,C.STATIC_BUMP=4816;var UA=l;function $o(E){s[UA]=s[E],s[UA+1]=s[E+1],s[UA+2]=s[E+2],s[UA+3]=s[E+3]}function Ar(E){s[UA]=s[E],s[UA+1]=s[E+1],s[UA+2]=s[E+2],s[UA+3]=s[E+3],s[UA+4]=s[E+4],s[UA+5]=s[E+5],s[UA+6]=s[E+6],s[UA+7]=s[E+7]}function er(E,Q,m){var k=m>0?m:GA(E)+1,T=Array(k),$=Ye(E,T,0,T.length);return Q&&(T.length=$),T}function tr(E){for(var Q=[],m=0;m<E.length;m++){var k=E[m];k>255&&(k&=255),Q.push(String.fromCharCode(k))}return Q.join("")}l+=16,M=q(4),G=(f=p=b(l))+qe,R=b(G),r[M>>2]=R,u=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:Ce,assert:NA,enlargeMemory:it,getTotalMemory:kt,abortOnCannotGrowMemory:function(){Ce("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+yA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,m,k){var T=hn();try{return C.dynCall_iii(Q,m,k)}catch($){if(cn(T),typeof $!="number"&&$!=="longjmp")throw $;C.setThrew(1,0)}},___assert_fail:function(Q,m,k,T){Ce("Assertion failed: "+me(Q)+", at: "+[m?me(m):"unknown filename",k,T?me(T):"unknown function"])},___setErrNo:function(Q){return C.___errno_location&&(r[C.___errno_location()>>2]=Q),Q},_abort:function(){C.abort()},_emscripten_memcpy_big:function(Q,m,k){return i.set(i.subarray(m,m+k),Q),Q},_llvm_floor_f64:ls,DYNAMICTOP_PTR:M,tempDoublePtr:UA,ABORT:cA,STACKTOP:p,STACK_MAX:G};var Qs=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=Qs,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var Hi=C._emscripten_replace_memory=function(){return C.asm._emscripten_replace_memory.apply(null,arguments)};C._free=function(){return C.asm._free.apply(null,arguments)};var wt=C._malloc=function(){return C.asm._malloc.apply(null,arguments)};C._memcpy=function(){return C.asm._memcpy.apply(null,arguments)},C._memset=function(){return C.asm._memset.apply(null,arguments)},C._sbrk=function(){return C.asm._sbrk.apply(null,arguments)},C._stb_vorbis_js_channels=function(){return C.asm._stb_vorbis_js_channels.apply(null,arguments)},C._stb_vorbis_js_close=function(){return C.asm._stb_vorbis_js_close.apply(null,arguments)},C._stb_vorbis_js_decode=function(){return C.asm._stb_vorbis_js_decode.apply(null,arguments)},C._stb_vorbis_js_open=function(){return C.asm._stb_vorbis_js_open.apply(null,arguments)},C._stb_vorbis_js_sample_rate=function(){return C.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},C.establishStackSpace=function(){return C.asm.establishStackSpace.apply(null,arguments)},C.getTempRet0=function(){return C.asm.getTempRet0.apply(null,arguments)},C.runPostSets=function(){return C.asm.runPostSets.apply(null,arguments)},C.setTempRet0=function(){return C.asm.setTempRet0.apply(null,arguments)},C.setThrew=function(){return C.asm.setThrew.apply(null,arguments)};var Ft=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},cn=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},hn=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function rt(E){this.name="ExitStatus",this.message="Program terminated with exit("+E+")",this.status=E}function Cn(E){E=E||C.arguments,!(Re>0)&&((function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)Li(C.preRun.shift());Se(at)})(),!(Re>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),Q()},1)):Q())));function Q(){!C.calledRun&&(C.calledRun=!0,cA||(In||(In=!0,Se(rn)),Se(Cs),C.onRuntimeInitialized&&C.onRuntimeInitialized(),(function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)Ni(C.postRun.shift());Se(Es)})()))}}function nr(E,Q){(!Q||!C.noExitRuntime||E!==0)&&(C.noExitRuntime||(cA=!0,ee=E,p=N,Se(Bs),vi=!0,C.onExit&&C.onExit(E)),C.quit(E,new rt(E)))}function Ce(E){throw C.onAbort&&C.onAbort(E),E!==void 0?(gA(E),aA(E),E=JSON.stringify(E)):E="",cA=!0,ee=1,"abort("+E+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=Qs,C.ccall=xe,C.cwrap=function(Q,m,k,T){var $=(k=k||[]).every(function(sA){return sA==="number"});return m!=="string"&&$&&!T?ue(Q):function(){return xe(Q,m,k,arguments,T)}},rt.prototype=Error(),rt.prototype.constructor=rt,ot=function E(){C.calledRun||Cn(),C.calledRun||(ot=E)},C.run=Cn,C.abort=Ce,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,Cn(),C.onRuntimeInitialized=()=>{ws=!0,ii()},dt.decode=function(E){return(function(m){if(!ws)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var k={};function T(Oe){return new Int32Array(C.HEAPU8.buffer,Oe,1)[0]}function $(Oe,Bn){var Gt=new ArrayBuffer(Bn*Float32Array.BYTES_PER_ELEMENT),Ke=new Float32Array(Gt);return Ke.set(new Float32Array(C.HEAPU8.buffer,Oe,Bn)),Ke}k.open=C.cwrap("stb_vorbis_js_open","number",[]),k.close=C.cwrap("stb_vorbis_js_close","void",["number"]),k.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),k.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),k.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var sA,x,DA,EA,lA=k.open(),hA=(sA=m,x=m.byteLength,DA=C._malloc(x),(EA=new Uint8Array(C.HEAPU8.buffer,DA,x)).set(new Uint8Array(sA,0,x)),EA),_=C._malloc(4),bA=C._malloc(4),JA=k.decode(lA,hA.byteOffset,hA.byteLength,_,bA);if(C._free(hA.byteOffset),JA<0)throw k.close(lA),C._free(_),Error("stbvorbis decode failed: "+JA);for(var qA=k.channels(lA),OA=Array(qA),Me=new Int32Array(C.HEAPU32.buffer,T(_),qA),KA=0;KA<qA;KA++)OA[KA]=$(Me[KA],JA),C._free(Me[KA]);var It=k.sampleRate(lA);return k.close(lA),C._free(T(_)),C._free(_),{data:OA,sampleRate:It,eof:!0,error:null}})(E)}})();var Zt=dt,Fs={enableEventSystem:!0,initialTime:0,enableEffects:!0},Gs=class Ln{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,i,I,g,r,a,h,B,d,l){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=i,this.customControllers=I,this.lockVibrato=g,this.channelVibrato=r,this.channelTransposeKeyShift=a,this.channelOctaveTuning=h,this.isMuted=B,this.drumChannel=d,this.channelNumber=l}static copyFrom(A){return new Ln({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning.slice(),A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new Ln({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ga=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},ss=class Nn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Gs.create(A,s));return new Nn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Nn(A.channelSnapshots.map(t=>Gs.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){let t=Object.entries(this.masterParameters);for(let[n,s]of t)A.setMasterParameter(n,s);for(A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(A)}},ai={masterGain:zi,masterPan:0,voiceCap:Vi,interpolationType:sa.hermite,midiSystem:jn,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Qe},is=-15e3,Ra=15e3,Tn=new Float32Array(Ra-is+1);for(let e=0;e<Tn.length;e++){let A=is+e;Tn[e]=Math.pow(2,A/1200)}function ye(e){return e<=-32767?0:Tn[e-is]}var Ot=-2e4,oi=16500,Un=new Float32Array(oi-Ot+1);for(let e=0;e<Un.length;e++){let A=Ot+e;Un[e]=440*Math.pow(2,(A-6900)/1200)}function xn(e){return e<Ot||e>oi?440*Math.pow(2,(e-6900)/1200):Un[e-Ot|0]}var as=-16600,Ma=16e3,Hn=new Float32Array(Ma-as+1);for(let e=0;e<Hn.length;e++){let A=as+e;Hn[e]=Math.pow(10,-A/200)}function Ee(e){return Hn[e-as|0]}var ba=.03,ri=class Xe{static cachedCoefficients=new Map;static smoothingConstant=1;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static initCache(A){Xe.smoothingConstant=ba*(44100/A);let t=new Xe(A);t.resonanceCb=0;for(let n=1500;n<13500;n++)t.currentInitialFc=n,t.calculateCoefficients(n)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}process(A,t,n,s){let i=t.modulatedGenerators[o.initialFilterFc];this.initialized?this.currentInitialFc+=(i-this.currentInitialFc)*Xe.smoothingConstant:(this.initialized=!0,this.currentInitialFc=i);let I=this.currentInitialFc+s,g=t.modulatedGenerators[o.initialFilterQ];if(this.currentInitialFc>13499&&I>13499&&g===0){this.currentInitialFc=13500;return}(Math.abs(this.lastTargetCutoff-I)>1||this.resonanceCb!==g)&&(this.lastTargetCutoff=I,this.resonanceCb=g,this.calculateCoefficients(I));for(let r=0;r<A;r++){let a=n[r],h=this.a0*a+this.a1*this.x1+this.a2*this.x2-this.a3*this.y1-this.y2*this.a4;this.x2=this.x1,this.x1=a,this.y2=this.y1,this.y1=h,n[r]=h}}calculateCoefficients(A){A=A|0;let t=this.resonanceCb,n=Xe.cachedCoefficients.get(t+A*961);if(n!==void 0){this.a0=n.a0,this.a1=n.a1,this.a2=n.a2,this.a3=n.a3,this.a4=n.a4;return}let s=xn(A);s=Math.min(s,this.maxCutoff);let i=Ee(-(t-3.01)),I=1/Math.sqrt(Ee(-t)),g=2*Math.PI*s/this.sampleRate,r=Math.cos(g),a=Math.sin(g)/(2*i),h=(1-r)*I,B=h/2,d=B,l=1+a,u=-2*r,f=1-a,p={a0:B/l,a1:h/l,a2:d/l,a3:u/l,a4:f/l};this.a0=p.a0,this.a1=p.a1,this.a2=p.a2,this.a3=p.a3,this.a4=p.a4,Xe.cachedCoefficients.set(t+A*961,p)}},PA=960,vt=900,va=.01,La=class{sampleRate;attenuationCb=PA;state=0;sampleTime=0;releaseStartCb=PA;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;gainSmoothing;currentGain=0;constructor(e){this.sampleRate=e,this.gainSmoothing=va*(44100/e)}process(e,A,t,n){if(this.enteredRelease)return this.releasePhase(e,A,t,n);switch(this.state){case 0:return this.delayPhase(e,A,t,n,0);case 1:return this.attackPhase(e,A,t,n,0);case 2:return this.holdPhase(e,A,t,n,0);case 3:return this.decayPhase(e,A,t,n,0);case 4:return this.sustainPhase(e,A,t,n,0)}}startRelease(e){this.releaseStartTimeSamples=this.sampleTime;let A=e.overrideReleaseVolEnv||e.modulatedGenerators[o.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,A)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let n=Math.max(0,Math.min(PA,this.sustainCb)),s=n/PA,i=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(e.modulatedGenerators[o.decayVolEnv]+i)*s,this.state){case 0:{this.releaseStartCb=PA;break}case 1:{let I=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(I)*-1;break}case 2:{this.releaseStartCb=0;break}case 3:{this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*n;break}case 4:{this.releaseStartCb=n;break}}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,PA)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(PA-this.releaseStartCb)/PA;this.releaseDuration*=t,this.releaseStartCb>=vt&&(e.isActive=!1)}init(e){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.canEndOnSilentSustain=e.modulatedGenerators[o.sustainVolEnv]>=vt,this.currentGain=Ee(e.modulatedGenerators[o.initialAttenuation]),this.sustainCb=Math.min(PA,e.modulatedGenerators[o.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(e.modulatedGenerators[o.attackVolEnv]);let A=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvDecay],t=this.sustainCb/PA;this.decayDuration=this.timecentsToSamples(e.modulatedGenerators[o.decayVolEnv]+A)*t,this.delayEnd=this.timecentsToSamples(e.modulatedGenerators[o.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let n=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(e.modulatedGenerators[o.holdVolEnv]+n)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}timecentsToSamples(e){return Math.max(0,Math.floor(ye(e)*this.sampleRate))}releasePhase(e,A,t,n){let{sampleTime:s,currentGain:i,attenuationCb:I}=this,{releaseStartTimeSamples:g,releaseStartCb:r,releaseDuration:a,gainSmoothing:h}=this,B=s-g,d=PA-r,l=!1;i!==t&&(l=!0);for(let u=0;u<e;u++)l&&(i+=(t-i)*h),I=B/a*d+r,A[u]*=Ee(I+n)*i,s++,B++;return this.sampleTime=s,this.currentGain=i,this.attenuationCb=I,I<vt}delayPhase(e,A,t,n,s){let{delayEnd:i}=this,{sampleTime:I}=this;if(I<i){this.attenuationCb=PA;let g=Math.min(i-I,e);if(A.fill(0,s,s+g),s+=g,I+=g,s>=e)return this.sampleTime=I,!0}return this.sampleTime=I,this.state++,this.attackPhase(e,A,t,n,s)}attackPhase(e,A,t,n,s){let{attackEnd:i,attackDuration:I,gainSmoothing:g}=this,{sampleTime:r,currentGain:a}=this,h=a!==t;if(r<i){this.attenuationCb=0;let B=Ee(n);for(;r<i;){h&&(a+=(t-a)*g);let d=1-(i-r)/I;if(A[s]*=d*a*B,r++,++s>=e)return this.sampleTime=r,this.currentGain=a,!0}}return this.sampleTime=r,this.currentGain=a,this.state++,this.holdPhase(e,A,t,n,s)}holdPhase(e,A,t,n,s){let{holdEnd:i,gainSmoothing:I}=this,{sampleTime:g,currentGain:r}=this,a=r!==t;if(g<i){this.attenuationCb=0;let h=Ee(n);for(;g<i;)if(a&&(r+=(t-r)*I),A[s]*=r*h,g++,++s>=e)return this.sampleTime=g,this.currentGain=r,!0}return this.sampleTime=g,this.currentGain=r,this.state++,this.decayPhase(e,A,t,n,s)}decayPhase(e,A,t,n,s){let{decayDuration:i,decayEnd:I,gainSmoothing:g,sustainCb:r}=this,{sampleTime:a,currentGain:h,attenuationCb:B}=this,d=h!==t;if(a<I){for(;a<I;)if(d&&(h+=(t-h)*g),B=(1-(I-a)/i)*r,A[s]*=h*Ee(B+n),a++,++s>=e)return this.sampleTime=a,this.currentGain=h,this.attenuationCb=B,!0}return this.sampleTime=a,this.currentGain=h,this.attenuationCb=B,this.state++,this.sustainPhase(e,A,t,n,s)}sustainPhase(e,A,t,n,s){let{sustainCb:i,gainSmoothing:I}=this;if(this.canEndOnSilentSustain&&i>=vt)return A.fill(0,s,e),!1;let{sampleTime:g,currentGain:r}=this,a=r!==t;if(s<e)for(this.attenuationCb=i;s<e;)a&&(r+=(t-r)*I),A[s]*=r*Ee(i+n),g++,s++;return this.sampleTime=g,this.currentGain=r,!0}},vA=16384,Kt=Object.keys(CA).length,Ii=4,le=new Float32Array(vA+1),Ne=new Float32Array(vA+1);le[0]=0;le[le.length-1]=1;Ne[0]=0;Ne[Ne.length-1]=1;for(let e=1;e<vA-1;e++){let A=-.4166666666666667*Math.log(e/(le.length-1))/Math.LN10;Ne[e]=1-A,le[le.length-1-e]=A}function gi(e,A,t){let n=!!(e&2);switch(e&1&&(t=1-t),A){case CA.linear:return n?t*2-1:t;case CA.switch:return t=t>.5?1:0,n?t*2-1:t;case CA.concave:return n?(t=t*2-1,t<0?-le[Math.trunc(t*-vA)]:le[Math.trunc(t*vA)]):le[Math.trunc(t*vA)];case CA.convex:return n?(t=t*2-1,t<0?-Ne[Math.trunc(t*-vA)]:Ne[Math.trunc(t*vA)]):Ne[Math.trunc(t*vA)]}}var un=1,Yn=new Float32Array(1e3);for(let e=0;e<Yn.length;e++)Yn[e]=gi(0,CA.convex,e/1e3);var Na=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(e,A){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(A-e.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(A<this.delayEnd?this.currentValue=0:A<this.attackEnd?this.currentValue=Yn[~~((1-(this.attackEnd-A)/this.attackDuration)*1e3)]:A<this.holdEnd?this.currentValue=un:A<this.decayEnd?this.currentValue=(1-(this.decayEnd-A)/this.decayDuration)*(this.sustainLevel-un)+un:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(e){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let A=ye(Math.max(e.modulatedGenerators[o.releaseModEnv],-7200));this.releaseDuration=A*this.releaseStartLevel}init(e){this.enteredRelease=!1,this.sustainLevel=1-e.modulatedGenerators[o.sustainModEnv]/1e3,this.attackDuration=ye(e.modulatedGenerators[o.attackModEnv]);let A=(60-e.midiNote)*e.modulatedGenerators[o.keyNumToModEnvDecay],t=ye(e.modulatedGenerators[o.decayModEnv]+A);this.decayDuration=t*(1-this.sustainLevel);let n=(60-e.midiNote)*e.modulatedGenerators[o.keyNumToModEnvHold];this.holdDuration=ye(n+e.modulatedGenerators[o.holdModEnv]),this.delayEnd=e.startTime+ye(e.modulatedGenerators[o.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}};function Le(e,A){return(e>>A&1)>0}function fn(e){return e?1:0}var _A=class Jn{isBipolar;isNegative;index;isCC;curveType;constructor(A=W.noController,t=CA.linear,n=!1,s=!1,i=!1){this.isBipolar=s,this.isNegative=i,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(S).find(A=>S[A]===this.index)??this.index.toString():Object.keys(W).find(A=>W[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(CA).find(A=>CA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Le(A,9),n=Le(A,8),s=Le(A,7),i=A&127,I=A>>10&3;return new Jn(i,I,s,t,n)}static copyFrom(A){return new Jn(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|fn(this.isBipolar)<<9|fn(this.isNegative)<<8|fn(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t,n){let s;if(this.isCC)s=A[this.index];else switch(this.index){case W.noController:{s=16383;break}case W.noteOnKeyNum:{s=n.midiNote<<7;break}case W.noteOnVelocity:{s=n.velocity<<7;break}case W.polyPressure:{s=n.pressure<<7;break}case W.pitchWheel:{s=t;break}default:{s=A[this.index+uA];break}}let i=(this.isBipolar?2:0)|(this.isNegative?1:0);return ci[vA*(this.curveType*Kt+i)+s]}},ci=new Float32Array(vA*Ii*Kt);for(let e=0;e<Kt;e++)for(let A=0;A<Ii;A++){let t=vA*(e*Kt+A);for(let n=0;n<vA;n++)ci[t+n]=gi(A,e,n/vA)}var Et=10;function VA(e,A,t,n,s){return new _A(s,e,n,A,t).toSourceEnum()}var hi=VA(CA.linear,!0,!1,!0,S.filterResonance),mA=class qn{destination=o.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new _A,t=new _A,n=o.INVALID,s=0,i=0,I=!1,g=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=i,this.isEffectModulator=I,this.isDefaultResonantModulator=g}get destinationName(){return Object.keys(o).find(A=>o[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new qn(_A.copyFrom(A.primarySource),_A.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
1
+ var Me=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ji=(e=>typeof Me<"u"?Me:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof Me<"u"?Me:A)[t]}):e)(function(e){if(typeof Me<"u")return Me.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function je(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Ze(e,A){let t=je(e,A,e.currentIndex);return e.currentIndex+=A,t}function Gt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function L(e,A){let t=Ys(e,A,e.currentIndex);return e.currentIndex+=A,t}function Ys(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function Et(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function z(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function rA(e,A){Et(e,A,4)}function Wn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function Oi(e){return e>127?e-256:e}var q=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function oe(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let i=e[t+s];if(i===0)return n;n+=String.fromCodePoint(i)}return n}function BA(e,A){let t=e.currentIndex;return e.currentIndex+=A,oe(e,A,t)}function re(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new q(n);return kA(s,e),s}function kA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function dA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function ln(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function Mn(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function ae(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Js;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),i=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),I=function(D,b){for(var v=new A(31),Y=0;Y<31;++Y)v[Y]=b+=1<<D[Y-1];for(var K=new t(v[30]),Y=1;Y<30;++Y)for(var SA=v[Y];SA<v[Y+1];++SA)K[SA]=SA-v[Y]<<5|Y;return{b:v,r:K}},g=I(n,2),r=g.b,a=g.r;r[28]=258,a[258]=28;var h=I(s,0),B=h.b,d=h.r,l=new A(32768);for(R=0;R<32768;++R)u=(R&43690)>>1|(R&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,l[R]=((u&65280)>>8|(u&255)<<8)>>1;var u,R,f=function(D,b,v){for(var Y=D.length,K=0,SA=new A(b);K<Y;++K)D[K]&&++SA[D[K]-1];var YA=new A(b);for(K=1;K<b;++K)YA[K]=YA[K-1]+SA[K-1]<<1;var LA;if(v){LA=new A(1<<b);var Ae=15-b;for(K=0;K<Y;++K)if(D[K])for(var Te=K<<4|D[K],Ie=b-D[K],tA=YA[D[K]-1]++<<Ie,cA=tA|(1<<Ie)-1;tA<=cA;++tA)LA[l[tA]>>Ae]=Te}else for(LA=new A(Y),K=0;K<Y;++K)D[K]&&(LA[K]=l[YA[D[K]-1]++]>>15-D[K]);return LA},p=new e(288);for(R=0;R<144;++R)p[R]=8;var R;for(R=144;R<256;++R)p[R]=9;var R;for(R=256;R<280;++R)p[R]=7;var R;for(R=280;R<288;++R)p[R]=8;var R,G=new e(32);for(R=0;R<32;++R)G[R]=5;var R,M=f(p,9,1),V=f(G,5,1),N=function(D){for(var b=D[0],v=1;v<D.length;++v)D[v]>b&&(b=D[v]);return b},C=function(D,b,v){var Y=b/8|0;return(D[Y]|D[Y+1]<<8)>>(b&7)&v},nA=function(D,b){var v=b/8|0;return(D[v]|D[v+1]<<8|D[v+2]<<16)>>(b&7)},AA=function(D){return(D+7)/8|0},j=function(D,b,v){return(b==null||b<0)&&(b=0),(v==null||v>D.length)&&(v=D.length),new e(D.subarray(b,v))},H=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Z=function(D,b,v){var Y=new Error(b||H[D]);if(Y.code=D,Error.captureStackTrace&&Error.captureStackTrace(Y,Z),!v)throw Y;return Y},P=function(D,b,v,Y){var K=D.length,SA=Y?Y.length:0;if(!K||b.f&&!b.l)return v||new e(0);var YA=!v,LA=YA||b.i!=2,Ae=b.i;YA&&(v=new e(K*3));var Te=function(yt){var Se=v.length;if(yt>Se){var it=new e(Math.max(Se*2,yt));it.set(v),v=it}},Ie=b.f||0,tA=b.p||0,cA=b.b||0,ee=b.l,NA=b.d,ue=b.m,fe=b.n,At=K*8;do{if(!ee){Ie=C(D,tA,1);var Ue=C(D,tA+1,3);if(tA+=3,Ue)if(Ue==1)ee=M,NA=V,ue=9,fe=5;else if(Ue==2){var et=C(D,tA,31)+257,tn=C(D,tA+10,15)+4,nn=et+C(D,tA+5,31)+1;tA+=14;for(var xe=new e(nn),me=new e(19),TA=0;TA<tn;++TA)me[i[TA]]=C(D,tA+TA*3,7);tA+=tn*3;for(var sn=N(me),ft=(1<<sn)-1,He=f(me,sn,1),TA=0;TA<nn;){var tt=He[C(D,tA,ft)];tA+=tt&15;var GA=tt>>4;if(GA<16)xe[TA++]=GA;else{var ge=0,nt=0;for(GA==16?(nt=3+C(D,tA,3),tA+=2,ge=xe[TA-1]):GA==17?(nt=3+C(D,tA,7),tA+=3):GA==18&&(nt=11+C(D,tA,127),tA+=7);nt--;)xe[TA++]=ge}}var an=xe.subarray(0,et),ce=xe.subarray(et);ue=N(an),fe=N(ce),ee=f(an,ue,1),NA=f(ce,fe,1)}else Z(1);else{var GA=AA(tA)+4,mt=D[GA-4]|D[GA-3]<<8,St=GA+mt;if(St>K){Ae&&Z(0);break}LA&&Te(cA+mt),v.set(D.subarray(GA,St),cA),b.b=cA+=mt,b.p=tA=St*8,b.f=Ie;continue}if(tA>At){Ae&&Z(0);break}}LA&&Te(cA+131072);for(var cs=(1<<ue)-1,hs=(1<<fe)-1,pt=tA;;pt=tA){var ge=ee[nA(D,tA)&cs],we=ge>>4;if(tA+=ge&15,tA>At){Ae&&Z(0);break}if(ge||Z(2),we<256)v[cA++]=we;else if(we==256){pt=tA,ee=null;break}else{var on=we-254;if(we>264){var TA=we-257,he=n[TA];on=C(D,tA,(1<<he)-1)+r[TA],tA+=he}var Ye=NA[nA(D,tA)&hs],Fe=Ye>>4;Ye||Z(3),tA+=Ye&15;var ce=B[Fe];if(Fe>3){var he=s[Fe];ce+=nA(D,tA)&(1<<he)-1,tA+=he}if(tA>At){Ae&&Z(0);break}LA&&Te(cA+131072);var st=cA+on;if(cA<ce){var Je=SA-ce,yA=Math.min(ce,st);for(Je+cA<0&&Z(3);cA<yA;++cA)v[cA]=Y[Je+cA]}for(;cA<st;++cA)v[cA]=v[cA-ce]}}b.l=ee,b.p=pt,b.b=cA,b.f=Ie,ee&&(Ie=1,b.m=ue,b.d=NA,b.n=fe)}while(!Ie);return cA!=v.length&&YA?j(v,0,cA):v.subarray(0,cA)},J=new e(0);function gA(D,b){return P(D,{i:2},b&&b.out,b&&b.dictionary)}var aA=typeof TextDecoder<"u"&&new TextDecoder,O=0;try{aA.decode(J,{stream:!0}),O=1}catch{}Js=gA})();var Os=Js,qs=!1,Ks=!0,Pt=!1;function Ps(e,A,t){qs=e,Ks=A,Pt=t}function y(...e){qs&&console.info(...e)}function eA(...e){Ks&&console.warn(...e)}function HA(...e){Pt&&console.group(...e)}function RA(...e){Pt&&console.groupCollapsed(...e)}function X(){Pt&&console.groupEnd()}var Vs=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function iA(e,A=!0,t=!1){let n=BA(e,4),s=L(e,4);n===""&&(s=0);let i=A?e.slice(e.currentIndex,e.currentIndex+s):new q(0);return(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Vs(n,s,i)}function IA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,i=e,I=A.length;t&&I++;let g=I;n&&(s+=4,g+=4,i="LIST");let r=s+I;r%2!==0&&r++;let a=new q(r);return kA(a,i),rA(a,g),n&&kA(a,e),a.set(A,s),a}function MA(e,A,t=!1){let n=8,s=e,i=A.reduce((a,h)=>h.length+a,0),I=i;t&&(n+=4,I+=4,s="LIST");let g=n+i;g%2!==0&&g++;let r=new q(g);kA(r,s),rA(r,I),t&&kA(r,e);for(let a of A)r.set(a,n),n+=a.length;return r}function ke(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,oe(t.data,4)===A))}function zn(e,A){return{...A,...e}}var de={consoleColors:c,SpessaSynthInfo:y,SpessaSynthWarn:eA,SpessaSynthGroupCollapsed:RA,SpessaSynthGroup:HA,SpessaSynthGroupEnd:X,readBytesAsUintBigEndian:je,readLittleEndian:L,readBytesAsString:BA,readVariableLengthQuantity:dA,inflateSync:Os};var F={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},S={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},jA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function qi(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:{switch(t){case 0:{n=-3;break}case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:{n=-1;break}case 15:{n=-2;break}}break}default:n=-1}return n}function _n(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Ki={8:2,9:2,10:2,11:2,12:1,13:1,14:2},ms=(e,A)=>{for(let t=0;t<e.length;t++)A.push(e.charCodeAt(t))};function Pi(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let n of e.tracks){let s=[],i=0,I;for(let g of n.events){let r=Math.max(0,g.ticks-i);if(g.statusByte===F.endOfTrack){i+=r;continue}let a;g.statusByte<=F.sequenceSpecific?(a=[255,g.statusByte,...ln(g.data.length),...g.data],I=void 0):g.statusByte===F.systemExclusive?(a=[240,...ln(g.data.length),...g.data],I=void 0):(a=[],I!==g.statusByte&&(I=g.statusByte,a.push(g.statusByte)),a.push(...g.data)),s.push(...ln(r),...a),i+=r}s.push(0,255,F.endOfTrack,0),A.push(new Uint8Array(s))}let t=[];ms("MThd",t),t.push(...Gt(6,4),0,e.format,...Gt(e.tracks.length,2),...Gt(e.timeDivision,2));for(let n of A)ms("MTrk",t),t.push(...Gt(n.length,4),...n);return new Uint8Array(t).buffer}var Vi=350,De=9,Xs=16,jn="gs",Qe=-1,Rt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Zs=32767,Xi={time:0},Zi=.03,Wi=.07,zi=1,_i=64,Ss=121,fA=class{static getDefaultBank(e){return e==="gm2"?Ss:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===_i||e===Ss}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function $n(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Ws(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function As(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function es(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function ts(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function zs(e){return new jA(e,F.systemExclusive,new q([65,16,66,18,64,0,127,0,65,247]))}var $A=class _s{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:Number.parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:Number.parseInt(t[0]),bankMSB:Number.parseInt(t[1]),program:Number.parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${_s.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t===-1)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.slice(0,Math.max(0,t))),s=A.slice(Math.max(0,t+1));return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},ji="Created using SpessaSynth";function $i(e,A,t){let n="gm",s=[],i=new Array(e.tracks.length).fill(0),I=16+Math.max(...e.portChannelOffsetMap),g=[];for(let r=0;r<I;r++)g.push({program:0,drums:r%16===De,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});e.iterate((r,a)=>{let h=e.portChannelOffsetMap[i[a]];if(r.statusByte===F.midiPort){i[a]=r.data[0];return}let B=r.statusByte&240;if(B!==F.controllerChange&&B!==F.programChange&&B!==F.systemExclusive)return;if(B===F.systemExclusive){if(!Ws(r)){$n(r)?n="xg":As(r)?n="gs":es(r)?(n="gm",s.push({tNum:a,e:r})):ts(r)&&(n="gm2");return}let f=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][r.data[5]&15]+h;g[f].drums=!!(r.data[7]>0&&r.data[5]>>4);return}let d=(r.statusByte&15)+h,l=g[d];if(B===F.programChange){let p={program:r.data[0],bankLSB:l.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(l.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:l.drums},G=t.getPreset(p,n);if(y(`%cInput patch: %c${$A.toMIDIString(p)}%c. Channel %c${d}%c. Changing patch to ${G.toString()}.`,c.info,c.unrecognized,c.info,c.recognized,c.info),r.data[0]=G.program,G.isGMGSDrum&&fA.isSystemXG(n)||l.lastBank===void 0||(l.lastBank.data[1]=fA.addBankOffset(G.bankMSB,A,G.isXGDrums),l.lastBankLSB===void 0))return;l.lastBankLSB.data[1]=G.bankLSB;return}let u=r.data[0]===S.bankSelectLSB;r.data[0]!==S.bankSelect&&!u||(l.hasBankSelect=!0,u?l.lastBankLSB=r:l.lastBank=r)});for(let[r,a]of g.entries()){if(a.hasBankSelect)continue;let h=r%16,B=F.programChange|h,d=Math.floor(r/16)*16,l=e.portChannelOffsetMap.indexOf(d),u=e.tracks.find(M=>M.port===l&&M.channels.has(h));if(u===void 0)continue;let f=u.events.findIndex(M=>M.statusByte===B);if(f===-1){let M=u.events.findIndex(C=>C.statusByte>128&&C.statusByte<240&&(C.statusByte&15)===h);if(M===-1)continue;let V=u.events[M].ticks,N=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;u.addEvent(new jA(V,F.programChange|h,new q([N])),M),f=M}y(`%cAdding bank select for %c${r}`,c.info,c.recognized);let p=u.events[f].ticks,G=t.getPreset({bankLSB:0,bankMSB:0,program:a.program,isGMGSDrum:a.drums},n),R=fA.addBankOffset(G.bankMSB,A,G.isXGDrums);u.addEvent(new jA(p,F.controllerChange|h,new q([S.bankSelect,R])),f)}if(n==="gm"&&!fA.isSystemXG(n)){for(let a of s){let h=e.tracks[a.tNum];h.deleteEvent(h.events.indexOf(a.e))}let r=0;e.tracks[0].events[0].statusByte===F.trackName&&r++,e.tracks[0].addEvent(zs(0),r)}}var ps={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function Aa(e,A,t){let n=t.metadata;if(HA("%cWriting the RMIDI File...",c.info),y("metadata",n),y("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");$i(e,t.bankOffset,t.soundBank)}let s=new q(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=ji,n.software??="SpessaSynth",Object.entries(n).forEach(r=>{let a=r;a[1]&&e.setRMIDInfo(a[0],a[1])});let i=[],I=(r,a)=>{i.push(IA(r,a))};for(let r of Object.entries(e.rmidiInfo)){let a=r[0],h=r[1];switch(a){case"album":{I("IALB",h),I("IPRD",h);break}case"software":{I("ISFT",h);break}case"infoEncoding":{I("IENC",h);break}case"creationDate":{I("ICRD",h);break}case"picture":{I("IPIC",h);break}case"name":{I("INAM",h);break}case"artist":{I("IART",h);break}case"genre":{I("IGNR",h);break}case"copyright":{I("ICOP",h);break}case"comment":{I("ICMT",h);break}case"engineer":{I("IENG",h);break}case"subject":{I("ISBJ",h);break}case"midiEncoding":{I("MENC",h);break}}}let g=new q(2);return Et(g,t.bankOffset,2),i.push(IA("DBNK",g)),y("%cFinished!",c.info),X(),MA("RIFF",[re("RMID"),IA("data",s),MA("INFO",i,!0),new q(A)]).buffer}function ea(e,A){RA("%cSearching for all used programs and keys...",c.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let g=0;g<t;g++){let r=g%16===De;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:r,program:0},s),bankMSB:0,bankLSB:0,isDrum:r})}let i=new Map,I=e.tracks.map(g=>g.port);e.iterate((g,r)=>{if(g.statusByte===F.midiPort){I[r]=g.data[0];return}let a=g.statusByte&240;if(a!==F.noteOn&&a!==F.controllerChange&&a!==F.programChange&&a!==F.systemExclusive)return;let h=(g.statusByte&15)+e.portChannelOffsetMap[I[r]]||0,B=n[h];switch(a){case F.programChange:{B.preset=A.getPreset({bankMSB:B.bankMSB,bankLSB:B.bankLSB,program:g.data[0],isGMGSDrum:B.isDrum},s);break}case F.controllerChange:{switch(g.data[0]){default:return;case S.bankSelectLSB:{B.bankLSB=g.data[1];break}case S.bankSelect:B.bankMSB=g.data[1]}break}case F.noteOn:{if(g.data[1]===0||!B.preset)return;let d=i.get(B.preset);d||(d=new Set,i.set(B.preset,d)),d.add(`${g.data[0]}-${g.data[1]}`);break}case F.systemExclusive:{{if(!Ws(g)){$n(g)?(s="xg",y("%cXG on detected!",c.recognized)):ts(g)?(s="gm2",y("%cGM2 on detected!",c.recognized)):es(g)?(s="gm",y("%cGM on detected!",c.recognized)):As(g)&&(s="gs",y("%cGS on detected!",c.recognized));return}let d=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][g.data[5]&15]+e.portChannelOffsetMap[I[r]],l=!!(g.data[7]>0&&g.data[5]>>4);B=n[d],B.isDrum=l}break}}});for(let[g,r]of i.entries())r.size===0&&(y(`%cDetected change but no keys for %c${g.name}`,c.info,c.value),i.delete(g));return X(),i}var ta=e=>(e.data=new q(e.data.buffer),6e7/je(e.data,3));function na(e,A=0){let t=[],s=e.tracks.map(B=>B.events).flat();s.sort((B,d)=>B.ticks-d.ticks);for(let B=0;B<16;B++)t.push([]);let i=0,I=60/(120*e.timeDivision),g=0,r=0,a=[];for(let B=0;B<16;B++)a.push([]);let h=(B,d)=>{let l=a[d].findIndex(f=>f.midiNote===B),u=a[d][l];if(u){let f=i-u.start;u.length=f,d===De&&(u.length=Math.max(f,A)),a[d].splice(l,1)}r--};for(;g<s.length;){let B=s[g],d=B.statusByte>>4,l=B.statusByte&15;if(d===8)h(B.data[0],l);else if(d===9)if(B.data[1]===0)h(B.data[0],l);else{h(B.data[0],l);let u={midiNote:B.data[0],start:i,length:-1,velocity:B.data[1]/127};t[l].push(u),a[l].push(u),r++}else B.statusByte===81&&(I=60/(ta(B)*e.timeDivision));if(++g>=s.length)break;i+=I*(s[g].ticks-B.ticks)}if(r>0)for(let[B,d]of a.entries())for(let l of d){let u=i-l.start;l.length=u,B===De&&(l.length=Math.max(u,A))}return t}var sa={linear:0,nearestNeighbor:1,hermite:2},xA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},oA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function Ke(e,A,t,n){return new jA(n,F.controllerChange|e%16,new q([A,t]))}function ia(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],i=128-(64+t+21+1)%128;return new jA(A,F.systemExclusive,new q([...n,i,247]))}function aa(e,A=[],t=[],n=[],s=[]){RA("%cApplying changes to the MIDI file...",c.info),y("Desired program changes:",A),y("Desired CC changes:",t),y("Desired channels to clear:",n),y("Desired channels to transpose:",s);let i=new Set;for(let p of A)i.add(p.channel);let I="gs",g=!1,r=e.tracks.map(p=>p.port),a={},h=0,B=(p,G)=>{e.tracks[p].channels.size!==0&&(h===0&&(h+=16,a[G]=0),a[G]===void 0&&(a[G]=h,h+=16),r[p]=G)};for(let[p,G]of e.tracks.entries())B(p,G.port);let d=h,l=new Array(d).fill(!0),u=new Array(d).fill(0),f=new Array(d).fill(0);for(let p of s){let G=Math.trunc(p.keyShift),R=p.keyShift-G;u[p.channel]=G,f[p.channel]=R}if(e.iterate((p,G,R)=>{let M=e.tracks[G],V=R[G],N=()=>{M.deleteEvent(V),R[G]--},C=(Z,P=0)=>{M.addEvent(Z,V+P),R[G]++},nA=a[r[G]]||0;if(p.statusByte===F.midiPort){B(G,p.data[0]);return}if(p.statusByte<=F.sequenceSpecific&&p.statusByte>=F.sequenceNumber)return;let AA=p.statusByte&240,j=p.statusByte&15,H=j+nA;if(n.includes(H)){N();return}switch(AA){case F.noteOn:{if(l[H]){l[H]=!1;for(let P of t.filter(J=>J.channel===H)){let J=Ke(j,P.controllerNumber,P.controllerValue,p.ticks);C(J)}let Z=f[H];if(Z!==0){let P=Z*64+64,J=Ke(j,S.registeredParameterMSB,0,p.ticks),gA=Ke(j,S.registeredParameterLSB,1,p.ticks),aA=Ke(H,S.dataEntryMSB,P,p.ticks),O=Ke(j,S.dataEntryLSB,0,p.ticks);C(O),C(aA),C(gA),C(J)}if(i.has(H)){let P=A.find(b=>b.channel===H);if(!P)return;y(`%cSetting %c${P.channel}%c to %c${$A.toMIDIString(P)}%c. Track num: %c${G}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let J=P.bankMSB,gA=P.bankLSB,aA=P.program,O=new jA(p.ticks,F.programChange|j,new q([aA]));C(O);let D=(b,v)=>{let Y=Ke(j,b?S.bankSelectLSB:S.bankSelect,v,p.ticks);C(Y)};fA.isSystemXG(I)&&P.isGMGSDrum&&(y(`%cAdding XG Drum change on track %c${G}`,c.recognized,c.value),J=fA.getDrumBank(I),gA=0),D(!1,J),D(!0,gA),P.isGMGSDrum&&!fA.isSystemXG(I)&&j!==De&&(y(`%cAdding GS Drum change on track %c${G}`,c.recognized,c.value),C(ia(j,p.ticks)))}}p.data[0]+=u[H];break}case F.noteOff:{p.data[0]+=u[H];break}case F.programChange:{if(i.has(H)){N();return}break}case F.controllerChange:{{let Z=p.data[0];if(t.find(J=>J.channel===H&&Z===J.controllerNumber)!==void 0){N();return}(Z===S.bankSelect||Z===S.bankSelectLSB)&&i.has(H)&&N()}break}case F.systemExclusive:if($n(p))y("%cXG system on detected",c.info),I="xg",g=!0;else if(p.data[0]===67&&p.data[2]===76&&p.data[3]===8&&p.data[5]===3)i.has(p.data[4]+nA)&&N();else if(ts(p))y("%cGM2 system on detected",c.info),I="gm2",g=!0;else if(As(p)){g=!0,y("%cGS on detected!",c.recognized);break}else es(p)&&(y("%cGM on detected, removing!",c.info),N(),g=!1)}}),!g&&A.length>0){let p=0;e.tracks[0].events[0].statusByte===F.trackName&&p++,e.tracks[0].addEvent(zs(0),p),y("%cGS on not detected. Adding it.",c.info)}e.flush(),X()}function oa(e,A){let t=[],n=[],s=[],i=[];for(let[I,g]of A.channelSnapshots.entries()){if(g.isMuted){n.push(I);continue}let r=g.channelTransposeKeyShift+g.customControllers[oA.channelTransposeFine]/100;r!==0&&t.push({channel:I,keyShift:r}),g.lockPreset&&s.push({channel:I,...g.patch});for(let[a,h]of g.lockedControllers.entries()){if(!h||a>127||a===S.bankSelect)continue;let B=g.midiControllers[a]>>7;i.push({channel:I,controllerNumber:a,controllerValue:B})}}e.modify(s,i,n,t)}var dn={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Pe={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},Qn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},ra={standard:0,MMA:1,registered:2,nonRegistered:3},Mt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},Ia=class js{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=dA(A),this.itemCount=dA(A);let n=dA(A),s=A.currentIndex-t,i=n-s,I=A.slice(A.currentIndex,A.currentIndex+i);A.currentIndex+=i,this.metadataLength=dA(I);let g=I.slice(I.currentIndex,I.currentIndex+this.metadataLength);I.currentIndex+=this.metadataLength;let r,a;for(;g.currentIndex<g.length;){if(g[g.currentIndex]===0)g.currentIndex++,r=dA(g),Object.values(dn).includes(r)?a=Object.keys(dn).find(f=>dn[f]===r)??"":(y(`Unknown field specifier: ${r}`),a=`unknown_${r}`);else{let f=dA(g);r=BA(g,f),a=r}let u=dA(g);if(u===0){let f=dA(g),p=g.slice(g.currentIndex,g.currentIndex+f);g.currentIndex+=f;let G=dA(p);this.metadata[a]=G<4?BA(p,f-1):p.slice(p.currentIndex)}else y(`International content: ${u}`),g.currentIndex+=dA(g)}let h=I.currentIndex,B=dA(I),d=I.slice(I.currentIndex,h+B);if(I.currentIndex=h+B,B>0)for(this.packedContent=!0;d.currentIndex<B;){let l={id:dA(d)};switch(l.id){case Mt.nonRegistered:case Mt.registered:throw X(),new Error(`Unsupported unpacker ID: ${l.id}`);default:throw X(),new Error(`Unknown unpacker ID: ${l.id}`);case Mt.none:{l.standardID=dA(d);break}case Mt.MMAUnpacker:{{let u=d[d.currentIndex++];u===0&&(u<<=8,u|=d[d.currentIndex++],u<<=8,u|=d[d.currentIndex++]);let f=dA(d);l.manufacturerID=u,l.manufacturerInternalID=f}break}}l.decodedSize=dA(d),this.nodeUnpackers.push(l)}switch(A.currentIndex=t+n,this.referenceTypeID=dA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Pe.inLineResource:break;case Pe.externalXMF:case Pe.inFileNode:case Pe.XMFFileURIandNodeID:case Pe.externalFile:case Pe.inFileResource:throw X(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw X(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2);y(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new q(Os(u).buffer)}catch(f){if(X(),f instanceof Error)throw new Error(`Error unpacking XMF file contents: ${f.message}.`)}}let l=this.metadata.resourceFormat;if(l===void 0)eA("No resource format for this file node!");else{l[0]!==ra.standard&&(y(`Non-standard formatTypeID: ${l.toString()}`),this.resourceFormat=l.toString());let f=l[1];Object.values(Qn).includes(f)?this.resourceFormat=Object.keys(Qn).find(p=>Qn[p]===f):y(`Unrecognized resource format: ${f}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let l=this.nodeData.currentIndex,u=dA(this.nodeData),f=this.nodeData.slice(l,l+u);this.nodeData.currentIndex=l+u,this.innerNodes.push(new js(f))}}get isFile(){return this.itemCount===0}};function ga(e,A){e.bankOffset=0;let t=BA(A,4);if(t!=="XMF_")throw X(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);HA("%cParsing XMF file...",c.info);let n=BA(A,4);if(y(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let r=Ze(A,4),a=Ze(A,4);y(`%cFile Type ID: %c${r}%c, File Type Revision ID: %c${a}`,c.info,c.recognized,c.info,c.recognized)}dA(A);let s=dA(A);A.currentIndex+=s,A.currentIndex=dA(A);let i=new Ia(A),I,g=r=>{let a=(h,B)=>{r.metadata[h]!==void 0&&typeof r.metadata[h]=="string"&&(e.rmidiInfo[B]=re(r.metadata[h]))};if(a("nodeName","name"),a("title","name"),a("copyrightNotice","copyright"),a("comment","comment"),r.isFile)switch(r.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":{y("%cFound embedded DLS!",c.recognized),e.embeddedSoundBank=r.nodeData.buffer;break}case"StandardMIDIFile":case"StandardMIDIFileType1":{y("%cFound embedded MIDI!",c.recognized),I=r.nodeData;break}}else for(let h of r.innerNodes)g(h)};if(g(i),X(),!I)throw new Error("No MIDI data in the XMF file!");return I}var Vt=class $s{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new $s;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new jA(t.ticks,t.statusByte,new q(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ys(e,A,t){RA("%cParsing MIDI File...",c.info),e.fileName=t;let n=new q(A),s=n,i=a=>{let h=BA(a,4),B=Ze(a,4),d=new q(B),l={type:h,size:B,data:d},u=a.slice(a.currentIndex,a.currentIndex+l.size);return l.data.set(u,0),a.currentIndex+=l.size,l},I=oe(n,4);if(I==="RIFF"){n.currentIndex+=8;let a=BA(n,4);if(a!=="RMID")throw X(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${a}"`);let h=iA(n);if(h.header!=="data")throw X(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${a}"`);s=h.data;let B=!1,d=!1;for(;n.currentIndex<n.length;){let l=n.currentIndex,u=iA(n,!0);if(u.header==="RIFF"){let f=BA(u.data,4).toLowerCase();f==="sfbk"||f==="sfpk"||f==="dls "?(y("%cFound embedded soundbank!",c.recognized),e.embeddedSoundBank=n.slice(l,l+u.size).buffer):eA(`Unknown RIFF chunk: "${f}"`),f==="dls "?e.isDLSRMIDI=!0:B=!0}else if(u.header==="LIST"&&BA(u.data,4)==="INFO")for(y("%cFound RMIDI INFO chunk!",c.recognized);u.data.currentIndex<u.size;){let p=iA(u.data,!0),G=p.header,R=p.data;switch(G){default:{eA(`Unknown RMIDI Info: ${G}`);break}case"INAM":{e.rmidiInfo.name=R;break}case"IALB":case"IPRD":{e.rmidiInfo.album=R;break}case"ICRT":case"ICRD":{e.rmidiInfo.creationDate=R;break}case"IART":{e.rmidiInfo.artist=R;break}case"IGNR":{e.rmidiInfo.genre=R;break}case"IPIC":{e.rmidiInfo.picture=R;break}case"ICOP":{e.rmidiInfo.copyright=R;break}case"ICMT":{e.rmidiInfo.comment=R;break}case"IENG":{e.rmidiInfo.engineer=R;break}case"ISFT":{e.rmidiInfo.software=R;break}case"ISBJ":{e.rmidiInfo.subject=R;break}case"IENC":{e.rmidiInfo.infoEncoding=R;break}case"MENC":{e.rmidiInfo.midiEncoding=R;break}case"DBNK":{e.bankOffset=Ys(R,2),d=!0;break}}}}B&&!d&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else I==="XMF_"?s=ga(e,n):s=n;let g=i(s);if(g.type!=="MThd")throw X(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${g.type}"`);if(g.size!==6)throw X(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${g.size}`);e.format=Ze(g.data,2);let r=Ze(g.data,2);e.timeDivision=Ze(g.data,2);for(let a=0;a<r;a++){let h=new Vt,B=i(s);if(B.type!=="MTrk")throw X(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${B.type}"`);let d,l=0;for(e.format===2&&a>0&&(l+=e.tracks[a-1].events[e.tracks[a-1].events.length-1].ticks);B.data.currentIndex<B.size;){l+=dA(B.data);let u=B.data[B.data.currentIndex],f;if(d!==void 0&&u<128)f=d;else{if(u<128)throw X(),new SyntaxError(`Unexpected byte with no running byte. (${u})`);f=B.data[B.data.currentIndex++]}let p=qi(f),G;switch(p){case-1:{G=0;break}case-2:{f=B.data[B.data.currentIndex++],G=dA(B.data);break}case-3:{G=dA(B.data);break}default:{G=Ki[f>>4],d=f;break}}let R=new q(G);R.set(B.data.slice(B.data.currentIndex,B.data.currentIndex+G),0);let M=new jA(l,f,R);h.pushEvent(M),B.data.currentIndex+=G}e.tracks.push(h),y(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,c.info,c.value,c.info,c.value)}y("%cAll tracks parsed correctly!",c.recognized),e.flush(!1),X()}var ca=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),ha=[ca];function Ca(e){for(let A of ha){let t=e;for(let[s,i]of A.entries()){let I=new RegExp(s,"gi");t=t.replace(I,i)}let n=new Date(t);if(!Number.isNaN(n.getTime()))return n}}function Ba(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=Number.parseInt(A[1]),n=Number.parseInt(A[2])-1,s=Number.parseInt(A[3]),i=new Date(s,n,t);if(!Number.isNaN(i.getTime()))return i}}function Ea(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(Number.parseInt(A[2])+1).toString(),s=A[3],i=new Date(`${n}/${t}/${s}`);if(!Number.isNaN(i.getTime()))return i}}function la(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ns(e){if(e=e.trim(),e.length===0)return new Date;let A=e.replaceAll(/\b(\d+)(st|nd|rd|th)\b/g,"$1").replace(/\s+at\s+/i," "),t=new Date(A);if(Number.isNaN(t.getTime())){let n=Ca(e);if(n)return n;let s=Ba(e);if(s)return s;let i=Ea(e);if(i)return i;let I=la(e);return I||(eA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Ne=class Tt{tracks=[];timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0,type:"hard"};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,oe(A,t)}static fromArrayBuffer(A,t=""){let n=new Tt;return ys(n,A,t),n}static async fromFile(A){let t=new Tt;return ys(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new Tt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Vt.copyFrom(t))}midiTicksToSeconds(A){if(A=Math.max(A,0),this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=this.tempoChanges.findIndex(s=>s.ticks<=A),n=0;for(;t<this.tempoChanges.length;){let s=this.tempoChanges[t++],i=A-s.ticks;n+=i*60/(s.tempo*this.timeDivision),A=s.ticks}return n}secondsToMIDITicks(A){if(A=Math.max(A,0),A===0)return 0;if(this.tempoChanges.length===0)throw new Error("There are no tempo changes in the sequence. At least one is needed.");if(this.tempoChanges[this.tempoChanges.length-1].ticks!==0)throw new Error(`The last tempo change is not at 0 ticks. Got ${this.tempoChanges[this.tempoChanges.length-1].ticks} ticks.`);let t=A,n=0;for(let s=this.tempoChanges.length-1;s>=0;s--){let i=this.tempoChanges[s],I=this.tempoChanges[s-1],g=I?I.ticks-i.ticks:1/0,r=60/(i.tempo*this.timeDivision),a=g*r;if(t<=a)return n+=Math.round(t/r),n;n+=g,t-=a}return n}getUsedProgramsAndKeys(A){return ea(this,A)}preloadSynth(A){RA("%cPreloading samples...",c.info);let t=this.getUsedProgramsAndKeys(A.soundBankManager);for(let[n,s]of t.entries()){y(`%cPreloading used samples on %c${n.name}%c...`,c.info,c.recognized,c.info);for(let i of s){let[I,g]=i.split("-").map(Number);A.getVoicesForPreset(n,I,g)}}X()}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return na(this,A)}writeMIDI(){return Pi(this)}writeRMIDI(A,t=ps){return Aa(this,A,zn(t,ps))}modify(A=[],t=[],n=[],s=[]){aa(this,A,t,n,s)}applySnapshot(A){oa(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){eA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replaceAll(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=re("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=re(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ns(oe(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,-1)),n.decode(s.buffer).trim()}catch(n){eA(`Failed to decode ${A} name: ${n}`);return}}iterate(A){let t=new Array(this.tracks.length).fill(0),n=this.tracks.length,s=()=>{let i=0,I=1/0;for(let[g,{events:r}]of this.tracks.entries())t[g]>=r.length||r[t[g]].ticks<I&&(i=g,I=r[t[g]].ticks);return i};for(;n>0;){let i=s(),I=this.tracks[i].events;if(t[i]>=I.length){n--;continue}let g=I[t[i]];A(g,i,t),t[i]++}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new jA(t.ticks,t.statusByte,new q(t.data))),this.lyrics=A.lyrics.map(t=>new jA(t.ticks,t.statusByte,new q(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={};for(let t of Object.entries(A.rmidiInfo)){let n=t[0],s=t[1];this.rmidiInfo[n]=new Uint8Array(s)}}parseInternal(){HA("%cInterpreting MIDI events...",c.info);let A=!1;this.tempoChanges=[{ticks:0,tempo:120}],this.extraMetadata=[],this.lyrics=[],this.firstNoteOn=0,this.keyRange={max:0,min:127},this.lastVoiceEventTick=0,this.portChannelOffsetMap=[0],this.loop={start:0,end:0,type:"hard"},this.isKaraokeFile=!1,this.isMultiPort=!1;let t=!1;this.rmidiInfo.name!==void 0&&(t=!0);let n=null,s=null,i="hard";for(let a of this.tracks){let h=new Set,B=!1;for(let l=0;l<a.events.length;l++){let u=a.events[l];if(u.statusByte>=128&&u.statusByte<240)switch(B=!0,u.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=u.ticks),u.statusByte&240){case F.controllerChange:{switch(u.data[0]){case 2:case 111:case 116:{n=u.ticks;break}case 4:case 117:{s===null?(i="soft",s=u.ticks):s=0;break}case 0:this.isDLSRMIDI&&u.data[1]!==0&&u.data[1]!==127&&(y("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break}case F.noteOn:{h.add(u.statusByte&15);let p=u.data[0];this.keyRange.min=Math.min(this.keyRange.min,p),this.keyRange.max=Math.max(this.keyRange.max,p);break}}let f=oe(u.data);switch(u.statusByte){case F.endOfTrack:{l!==a.events.length-1&&(a.deleteEvent(l),l--,eA("Unexpected EndOfTrack. Removing!"));break}case F.setTempo:{this.tempoChanges.push({ticks:u.ticks,tempo:6e7/je(u.data,3)});break}case F.marker:{switch(f.trim().toLowerCase()){default:break;case"start":case"loopstart":{n=u.ticks;break}case"loopend":s=u.ticks}break}case F.copyright:{this.extraMetadata.push(u);break}case F.lyric:f.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile?u.statusByte=F.text:this.lyrics.push(u);case F.text:{let p=f.trim();p.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,y("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(p.startsWith("@T")||p.startsWith("@A")?A?this.extraMetadata.push(u):(this.binaryName=u.data.slice(2),A=!0,t=!0):p.startsWith("@")||this.lyrics.push(u));break}}}a.channels=h,a.name="";let d=a.events.find(l=>l.statusByte===F.trackName);d&&this.tracks.indexOf(a)>0&&(a.name=oe(d.data),!B&&!a.name.toLowerCase().includes("setup")&&this.extraMetadata.push(d))}this.tempoChanges.reverse(),y("%cCorrecting loops, ports and detecting notes...",c.info);let I=[];for(let a of this.tracks){let h=a.events.find(B=>(B.statusByte&240)===F.noteOn);h&&I.push(h.ticks)}this.firstNoteOn=Math.min(...I),y(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick),this.loop={start:n,end:s,type:i},this.lastVoiceEventTick=Math.max(this.lastVoiceEventTick,this.loop.end),y(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let g=0;this.portChannelOffsetMap=[];for(let a of this.tracks)if(a.port=-1,a.channels.size!==0)for(let h of a.events){if(h.statusByte!==F.midiPort)continue;let B=h.data[0];a.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=g,g+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(a=>a??0);let r=1/0;for(let a of this.tracks)a.port!==-1&&r>a.port&&(r=a.port);r===1/0&&(r=0);for(let a of this.tracks)(a.port===-1||a.port===void 0)&&(a.port=r);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?y("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,y("%cMIDI Ports detected!",c.recognized)),!t)if(this.tracks.length>1){if(!this.tracks[0].events.some(a=>a.statusByte>=F.noteOn&&a.statusByte<F.polyPressure)){let a=this.tracks[0].events.find(h=>h.statusByte===F.trackName);a&&(this.binaryName=a.data)}}else{let a=this.tracks[0].events.find(h=>h.statusByte===F.trackName);a&&(this.binaryName=a.data)}if(this.extraMetadata=this.extraMetadata.filter(a=>a.data.length>0),this.lyrics.sort((a,h)=>a.ticks-h.ticks),!this.tracks.some(a=>a.events[0].ticks===0)){let a=this.tracks[0],h=this?.binaryName?.buffer;h||(h=new Uint8Array(0).buffer),a.events.unshift(new jA(0,F.trackName,new q(h)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName?.length===0&&(this.binaryName=void 0),y(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${Mn(Math.ceil(this.duration)).time}`,c.info,c.recognized,c.info,c.recognized),X()}};function da(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=_n(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case F.noteOn:{let i=e.data[1];if(i>0)this.synth.noteOn(n.channel,e.data[0],i),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:i});else{this.synth.noteOff(n.channel,e.data[0]);let I=this.playingNotes.findIndex(g=>g.midiNote===e.data[0]&&g.channel===n.channel);I!==-1&&this.playingNotes.splice(I,1)}break}case F.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let i=this.playingNotes.findIndex(I=>I.midiNote===e.data[0]&&I.channel===n.channel);i!==-1&&this.playingNotes.splice(i,1);break}case F.pitchWheel:{this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break}case F.controllerChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break}case F.programChange:{if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break}case F.polyPressure:{this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break}case F.channelPressure:{this.synth.channelPressure(n.channel,e.data[0]);break}case F.systemExclusive:{this.synth.systemExclusive(e.data,s);break}case F.setTempo:{let i=6e7/je(e.data,3);this.oneTickToSeconds=60/(i*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),y("invalid tempo! falling back to 120 BPM"),i=120);break}case F.timeSignature:case F.endOfTrack:case F.midiChannelPrefix:case F.songPosition:case F.activeSensing:case F.keySignature:case F.sequenceNumber:case F.sequenceSpecific:case F.text:case F.lyric:case F.copyright:case F.trackName:case F.marker:case F.cuePoint:case F.instrumentName:case F.programName:break;case F.midiPort:{this.assignMIDIPort(A,e.data[0]);break}case F.reset:{this.synth.stopAllChannels(),this.synth.resetAllControllers();break}default:{y(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(F).find(i=>F[i]===n.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Qa(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),i=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this._midiData.loop.type==="soft"?this.jumpToTick(this._midiData.loop.start):this.setTimeTicks(this._midiData.loop.start);return}if(i.events.length<=this.eventIndexes[s]||n.ticks>=this._midiData.lastVoiceEventTick){this.songIsFinished();return}let I=i.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(I.ticks-n.ticks)}}function ua(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function fa(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");if(e.duration===0){eA("This MIDI file has a duration of exactly 0 seconds."),this.pausedTime=0,this.isFinished=!0;return}this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.isFinished=!1,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(y("%cEmbedded soundbank detected! Using it.",c.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset),this.preload&&this._midiData.preloadSynth(this.synth)),this.currentMIDIPorts=this._midiData.tracks.map(A=>A.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={};for(let[A,t]of this._midiData.tracks.entries())this.assignMIDIPort(A,t.port);this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),y(`%cTotal song time: ${Mn(Math.ceil(this._midiData.duration)).time}`,c.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(eA(`%cVery short song: (${Mn(Math.round(this._midiData.duration)).time}). Disabling loop!`,c.warn),this.loopCount=0),this.currentTime=0}var o=Object.freeze({INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62}),_e=Object.keys(o).length,ma=Math.max(...Object.values(o)),XA=Object.freeze({[o.startAddrsOffset]:{min:0,max:32768,def:0,nrpn:1},[o.endAddrOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.startloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.endloopAddrsOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.startAddrsCoarseOffset]:{min:0,max:32768,def:0,nrpn:1},[o.modLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.vibLfoToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.modEnvToPitch]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.initialFilterFc]:{min:1500,max:13500,def:13500,nrpn:2},[o.initialFilterQ]:{min:0,max:960,def:0,nrpn:1},[o.modLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.vibLfoToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.modEnvToFilterFc]:{min:-12e3,max:12e3,def:0,nrpn:2},[o.endAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.modLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[o.vibLfoToVolume]:{min:-960,max:960,def:0,nrpn:1},[o.chorusEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[o.reverbEffectsSend]:{min:0,max:1e3,def:0,nrpn:1},[o.pan]:{min:-500,max:500,def:0,nrpn:1},[o.delayModLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.freqModLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[o.delayVibLFO]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.freqVibLFO]:{min:-16e3,max:4500,def:0,nrpn:4},[o.delayModEnv]:{min:-32768,max:5e3,def:-32768,nrpn:2},[o.attackModEnv]:{min:-32768,max:8e3,def:-32768,nrpn:2},[o.holdModEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.decayModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.sustainModEnv]:{min:0,max:1e3,def:0,nrpn:1},[o.releaseModEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.keyNumToModEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[o.keyNumToModEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[o.delayVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.attackVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.holdVolEnv]:{min:-12e3,max:5e3,def:-12e3,nrpn:2},[o.decayVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.sustainVolEnv]:{min:0,max:1440,def:0,nrpn:1},[o.releaseVolEnv]:{min:-12e3,max:8e3,def:-12e3,nrpn:2},[o.keyNumToVolEnvHold]:{min:-1200,max:1200,def:0,nrpn:1},[o.keyNumToVolEnvDecay]:{min:-1200,max:1200,def:0,nrpn:1},[o.startloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.keyNum]:{min:-1,max:127,def:-1,nrpn:1},[o.velocity]:{min:-1,max:127,def:-1,nrpn:1},[o.initialAttenuation]:{min:0,max:1440,def:0,nrpn:1},[o.endloopAddrsCoarseOffset]:{min:-32768,max:32768,def:0,nrpn:1},[o.coarseTune]:{min:-120,max:120,def:0,nrpn:1},[o.fineTune]:{min:-12700,max:12700,def:0,nrpn:1},[o.scaleTuning]:{min:0,max:1200,def:100,nrpn:1},[o.exclusiveClass]:{min:0,max:99999,def:0,nrpn:0},[o.overridingRootKey]:{min:-1,max:127,def:-1,nrpn:0},[o.sampleModes]:{min:0,max:3,def:0,nrpn:0}}),bn=new Int16Array(_e);for(let e=0;e<bn.length;e++)XA[e]&&(bn[e]=XA[e].def);var wA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},W={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},CA={linear:0,concave:1,convex:2,switch:3};var U={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},w={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},ks={forward:0,loopAndRelease:1},uA=128,vn=147,Xt=new Int16Array(vn).fill(0),pA=(e,A)=>Xt[e]=A<<7;pA(S.mainVolume,100);pA(S.balance,64);pA(S.expressionController,127);pA(S.pan,64);pA(S.portamentoOnOff,127);pA(S.filterResonance,64);pA(S.releaseTime,64);pA(S.attackTime,64);pA(S.brightness,64);pA(S.decayTime,64);pA(S.vibratoRate,64);pA(S.vibratoDepth,64);pA(S.vibratoDelay,64);pA(S.generalPurposeController6,64);pA(S.generalPurposeController8,64);pA(S.registeredParameterLSB,127);pA(S.registeredParameterMSB,127);pA(S.nonRegisteredParameterLSB,127);pA(S.nonRegisteredParameterMSB,127);pA(uA+W.pitchWheel,64);pA(uA+W.pitchWheelRange,2);var Ai=Object.keys(oA).length,ei=new Float32Array(Ai);ei[oA.modulationMultiplier]=1;function ti(e){this.lockedControllers[S.portamentoControl]||(this.channelSystem==="xg"?this.controllerChange(S.portamentoControl,60,e):this.controllerChange(S.portamentoControl,0,e))}function Sa(e=!0){this.channelOctaveTuning.fill(0);for(let[t,n]of Xt.entries())this.lockedControllers[t]||(this.midiControllers[t]!==n&&t<127?t!==S.portamentoControl&&t!==S.dataEntryMSB&&t!==S.registeredParameterMSB&&t!==S.registeredParameterLSB&&t!==S.nonRegisteredParameterMSB&&t!==S.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n);ti.call(this,e),this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,!this.lockedControllers[S.monoModeOn]&&!this.lockedControllers[S.polyModeOn]&&(this.polyMode=!0),this.perNotePitch=!1,this.pitchWheel(8192),this.sysExModulators.resetModulators();let A=this.customControllers[oA.channelTransposeFine];this.customControllers.set(ei),this.setCustomController(oA.channelTransposeFine,A),this.resetParameters()}function pa(){this.setBankMSB(fA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channel%16===De),this.programChange(0)}var ni=new Set([S.bankSelect,S.bankSelectLSB,S.mainVolume,S.mainVolumeLSB,S.pan,S.panLSB,S.reverbDepth,S.tremoloDepth,S.chorusDepth,S.detuneDepth,S.phaserDepth,S.soundVariation,S.filterResonance,S.releaseTime,S.attackTime,S.brightness,S.decayTime,S.vibratoRate,S.vibratoDepth,S.vibratoDelay,S.soundController10,S.polyModeOn,S.monoModeOn]);function ya(){this.channelOctaveTuning.fill(0),this.perNotePitch=!1,this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=Xt[e];!ni.has(e)&&A!==this.midiControllers[e]&&e!==S.portamentoControl&&this.controllerChange(e,A>>7)}ti.call(this,!0),this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function ka(){this.dataEntryState=xA.Idle,this.midiControllers[S.nonRegisteredParameterLSB]=16256,this.midiControllers[S.nonRegisteredParameterMSB]=16256,this.midiControllers[S.registeredParameterLSB]=16256,this.midiControllers[S.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var gt=Xt.slice(0,128),Da=new Set([S.dataDecrement,S.dataIncrement,S.dataEntryMSB,S.dataEntryLSB,S.registeredParameterLSB,S.registeredParameterMSB,S.nonRegisteredParameterLSB,S.nonRegisteredParameterMSB,S.bankSelect,S.bankSelectLSB,S.resetAllControllers,S.monoModeOn,S.polyModeOn]),Ds=e=>Da.has(e);function wa(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.sendMIDIReset(),this.playedTime=0,this.eventIndexes=new Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=new Array(t).fill(8192),s=[];for(let a=0;a<t;a++)s.push({program:-1,bank:0,actualBank:0});let i=[];for(let a=0;a<t;a++)i.push([...gt]);let I,g=0;function r(a){if(n[a]=8192,i?.[a]!==void 0)for(let[h,B]of gt.entries())ni.has(h)||(i[a][h]=B)}for(;;){let a=this.findFirstEventIndex(),h=this._midiData.tracks[a],B=h.events[this.eventIndexes[a]];if(A===void 0){if(this.playedTime>=e)break}else if(B.ticks>=A)break;let d=_n(B.statusByte),l=d.channel+(this.midiPortChannelOffsets[h.port]||0);switch(d.status){case F.noteOn:{i[l]??=[...gt],i[l][S.portamentoControl]=B.data[0];break}case F.noteOff:break;case F.pitchWheel:{n[l]=B.data[1]<<7|B.data[0];break}case F.programChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let f=s[l];f.program=B.data[0],f.actualBank=f.bank;break}case F.controllerChange:{if(this._midiData.isMultiPort&&h.channels.size===0)break;let f=B.data[0];if(Ds(f)){let p=B.data[1];if(f===S.bankSelect){s[l].bank=p;break}else f===S.resetAllControllers&&r(l);this.sendMIDICC(l,f,p)}else i[l]??=[...gt],i[l][f]=B.data[1];break}case F.setTempo:{let f=6e7/je(B.data,3);this.oneTickToSeconds=60/(f*this._midiData.timeDivision),I=B,g=a;break}default:{this.processEvent(B,a);break}}this.eventIndexes[a]++,a=this.findFirstEventIndex();let u=this._midiData.tracks[a].events[this.eventIndexes[a]];if(u===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(u.ticks-B.ticks)}for(let a=0;a<t;a++){if(n[a]!==void 0&&this.sendMIDIPitchWheel(a,n[a]),i[a]!==void 0)for(let[h,B]of i[a].entries())B!==gt[h]&&!Ds(h)&&this.sendMIDICC(a,h,B);if(s[a].actualBank>=0){let h=s[a];h.program===-1?this.sendMIDICC(a,S.bankSelect,h.bank):(this.sendMIDICC(a,S.bankSelect,h.actualBank),this.sendMIDIProgramChange(a,h.program))}}return I&&this.callEvent("metaEvent",{event:I,trackIndex:g}),this.paused&&(this.pausedTime=this.playedTime),!0}var si=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;retriggerPausedNotes=!0;loopCount=0;skipToFirstNoteOn=!0;isFinished=!1;preload=!0;onEventCall;processTick=Qa.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=ua.bind(this);loadNewSequence=fa.bind(this);processEvent=da.bind(this);setTimeTo=wa.bind(this);constructor(e){this.synth=e,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.recalculateStartTime(A)}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this.setTimeTo(e),this.recalculateStartTime(e)}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData){eA("No songs loaded in the sequencer. Ignoring the play call.");return}if(this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.retriggerPausedNotes)for(let e of this.playingNotes)this.sendMIDINoteOn(e.channel,e.midiNote,e.velocity);this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){if(this.songs=e,this.songs.length!==0){if(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.preload){HA("%cPreloading all songs...",c.info);for(let A of this.songs)A.embeddedSoundBank===void 0&&A.preloadSynth(this.synth);X()}this.loadCurrentSong()}}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}),e&&this.callEvent("songEnded",{}))}songIsFinished(){if(this.isFinished=!0,this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime,this.sendMIDIAllOff()}findFirstEventIndex(){let e=0,A=1/0,t=this._midiData.tracks.length;for(let n=0;n<t;n++){let s=this._midiData.tracks[n];if(this.eventIndexes[n]>=s.events.length)continue;let i=s.events[this.eventIndexes[n]];i.ticks<A&&(e=n,A=i.ticks)}return e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){if(!this.externalMIDIPlayback){eA(`Attempting to send ${ae(e)} to the synthesizer via sendMIDIMessage. This shouldn't happen!`);return}this.callEvent("midiMessage",{message:e,time:this.synth.currentSynthTime})}sendMIDIAllOff(){for(let e=0;e<16;e++)this.sendMIDICC(e,S.sustainPedal,0);if(!this.externalMIDIPlayback){this.synth.stopAllChannels();return}for(let e of this.playingNotes)this.sendMIDINoteOff(e.channel,e.midiNote);for(let e=0;e<Xs;e++)this.sendMIDICC(e,S.allNotesOff,0),this.sendMIDICC(e,S.allSoundOff,0)}sendMIDIReset(){if(this.sendMIDIAllOff(),!this.externalMIDIPlayback){this.synth.resetAllControllers();return}this.sendMIDIMessage([F.reset])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}jumpToTick(e){if(!this._midiData)return;this.sendMIDIAllOff();let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A}),this.recalculateStartTime(A),this.playedTime=A,this.eventIndexes.length=0;for(let n of this._midiData.tracks){let s=n.events.findIndex(i=>i.ticks>=e);this.eventIndexes.push(s===-1?n.events.length:s)}let t=this._midiData.tempoChanges.find(n=>n.ticks<=e);this.oneTickToSeconds=60/(t.tempo*this._midiData.timeDivision)}sendMIDINoteOn(e,A,t){if(!this.externalMIDIPlayback){this.synth.noteOn(e,A,t);return}e%=16,this.sendMIDIMessage([F.noteOn|e,A,t])}sendMIDINoteOff(e,A){if(!this.externalMIDIPlayback){this.synth.noteOff(e,A);return}e%=16,this.sendMIDIMessage([F.noteOff|e,A,64])}sendMIDICC(e,A,t){if(!this.externalMIDIPlayback){this.synth.controllerChange(e,A,t);return}e%=16,this.sendMIDIMessage([F.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){if(!this.externalMIDIPlayback){this.synth.programChange(e,A);return}e%=16,this.sendMIDIMessage([F.programChange|e,A])}sendMIDIPitchWheel(e,A){if(!this.externalMIDIPlayback){this.synth.pitchWheel(e,A);return}e%=16,this.sendMIDIMessage([F.pitchWheel|e,A&127,A>>7])}},lt=lt!==void 0?lt:{},ws=!1,ii;lt.isInitialized=new Promise(e=>ii=e);var Fa=function(e){var A,t,n,s,i,I,g,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="",h=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=r.indexOf(e.charAt(h++)),i=r.indexOf(e.charAt(h++)),I=r.indexOf(e.charAt(h++)),g=r.indexOf(e.charAt(h++)),A=s<<2|i>>4,t=(15&i)<<4|I>>2,n=(3&I)<<6|g,a+=String.fromCharCode(A),I!==64&&(a+=String.fromCharCode(t)),g!==64&&(a+=String.fromCharCode(n));while(h<e.length);return a};(function(){var e,A,t,n,s,i,I,g,r,a,h,B,d,l,u,f,p,G,R,M,V,N,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(Fa("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(E){return E.charCodeAt(0)});var C=C!==void 0?C:{},nA={};for(e in C)C.hasOwnProperty(e)&&(nA[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(E,Q){throw Q},C.preRun=[],C.postRun=[];var AA=!1,j=!1,H=!1,Z=!1;AA=typeof window=="object",j=typeof importScripts=="function",H=typeof process=="object"&&typeof Ji=="function"&&!AA&&!j,Z=!AA&&!H&&!j;var P="";function J(E){return C.locateFile?C.locateFile(E,P):P+E}H?(P="/",C.read=function(Q,m){var k;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),k=A.readFileSync(Q),m?k:k.toString()},C.readBinary=function(Q){var m=C.read(Q,!0);return m.buffer||(m=new Uint8Array(m)),NA(m.buffer),m},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(E){if(!(E instanceof ot))throw E}),process.on("unhandledRejection",function(E,Q){process.exit(1)}),C.quit=function(E){process.exit(E)},C.inspect=function(){return"[Emscripten Module object]"}):Z?(typeof read<"u"&&(C.read=function(Q){return read(Q)}),C.readBinary=function(Q){var m;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(NA(typeof(m=read(Q,"binary"))=="object"),m)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(E){quit(E)})):(AA||j)&&(AA?document.currentScript&&(P=document.currentScript.src):P=self.location.href,P=P.indexOf("blob:")!==0?P.split("/").slice(0,-1).join("/")+"/":"",C.read=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.send(null),m.responseText},j&&(C.readBinary=function(Q){var m=new XMLHttpRequest;return m.open("GET",Q,!1),m.responseType="arraybuffer",m.send(null),new Uint8Array(m.response)}),C.readAsync=function(Q,m,k){var T=new XMLHttpRequest;T.open("GET",Q,!0),T.responseType="arraybuffer",T.onload=function(){if(T.status==200||T.status==0&&T.response){m(T.response);return}k()},T.onerror=k,T.send(null)},C.setWindowTitle=function(E){document.title=E});var gA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),aA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||gA);for(e in nA)nA.hasOwnProperty(e)&&(C[e]=nA[e]);function O(E){var Q=l;return l=l+E+15&-16,Q}function D(E){var Q=r[M>>2],m=Q+E+15&-16;return r[M>>2]=m,m>=yA&&!st()?(r[M>>2]=Q,0):Q}function b(E,Q){return Q||(Q=16),E=Math.ceil(E/Q)*Q}function v(E){switch(E){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(E[E.length-1]==="*")return 4;if(E[0]!=="i")return 0;var Q=parseInt(E.substr(1));return NA(Q%8==0),Q/8}}function Y(E){Y.shown||(Y.shown={}),Y.shown[E]||(Y.shown[E]=1,aA(E))}nA=void 0;var K={"f64-rem":function(E,Q){return E%Q},debugger:function(){}},SA=[];function YA(E,Q){for(var m=0,k=m;k<m+0;k++)if(!SA[k])return SA[k]=E,1+k;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function LA(E){SA[E-1]=null}var Ae={};function Te(E,Q){if(E){NA(Q),Ae[Q]||(Ae[Q]={});var m=Ae[Q];return m[E]||(Q.length===1?m[E]=function(){return tA(Q,E)}:Q.length===2?m[E]=function(T){return tA(Q,E,[T])}:m[E]=function(){return tA(Q,E,Array.prototype.slice.call(arguments))}),m[E]}}function Ie(E,Q,m){return m?+(E>>>0)+4294967296*+(Q>>>0):+(E>>>0)+4294967296*+(0|Q)}function tA(E,Q,m){return m&&m.length?C["dynCall_"+E].apply(null,[Q].concat(m)):C["dynCall_"+E].call(null,Q)}var cA=0,ee=0;function NA(E,Q){E||Ce("Assertion failed: "+Q)}function ue(E){var Q=C["_"+E];return NA(Q,"Cannot call unknown function "+E+", make sure it is exported"),Q}var fe={stackSave:function(){hn()},stackRestore:function(){cn()},arrayToC:function(E){var Q,m,k=wt(E.length);return Q=E,m=k,s.set(Q,m),k},stringToC:function(E){var Q=0;if(E!=null&&E!==0){var m=(E.length<<2)+1;Q=wt(m),tt(E,Q,m)}return Q}},At={string:fe.stringToC,array:fe.arrayToC};function Ue(E,Q,m,k,T){var $=ue(E),sA=[],x=0;if(k)for(var DA=0;DA<k.length;DA++){var EA=At[m[DA]];EA?(x===0&&(x=hn()),sA[DA]=EA(k[DA])):sA[DA]=k[DA]}var lA,hA=$.apply(null,sA);return hA=(lA=hA,Q==="string"?me(lA):Q==="boolean"?!!lA:lA),x!==0&&cn(x),hA}function et(E,Q,m,k){switch((m=m||"i8").charAt(m.length-1)==="*"&&(m="i32"),m){case"i1":case"i8":s[E>>0]=Q;break;case"i16":I[E>>1]=Q;break;case"i32":r[E>>2]=Q;break;case"i64":tempI64=[Q>>>0,+Ti(tempDouble=Q)>=1?tempDouble>0?(0|xi(+ls(tempDouble/4294967296),4294967295))>>>0:~~+Ui((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],r[E>>2]=tempI64[0],r[E+4>>2]=tempI64[1];break;case"float":h[E>>2]=Q;break;case"double":B[E>>3]=Q;break;default:Ce("invalid type for setValue: "+m)}}function tn(E,Q,m){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[E>>0];case"i16":return I[E>>1];case"i32":case"i64":return r[E>>2];case"float":return h[E>>2];case"double":return B[E>>3];default:Ce("invalid type for getValue: "+Q)}return null}function nn(E,Q,m,k){typeof E=="number"?($=!0,sA=E):($=!1,sA=E.length);var T=typeof Q=="string"?Q:null;if(x=m==4?k:[typeof Dt=="function"?Dt:O,wt,O,D][m===void 0?2:m](Math.max(sA,T?1:Q.length)),$){for(k=x,NA((3&x)==0),DA=x+(-4&sA);k<DA;k+=4)r[k>>2]=0;for(DA=x+sA;k<DA;)s[k++>>0]=0;return x}if(T==="i8")return E.subarray||E.slice?i.set(E,x):i.set(new Uint8Array(E),x),x;for(var $,sA,x,DA,EA,lA,hA,_=0;_<sA;){var bA=E[_];if((EA=T||Q[_])===0){_++;continue}EA=="i64"&&(EA="i32"),et(x+_,bA,EA),hA!==EA&&(lA=v(EA),hA=EA),_+=lA}return x}function xe(E){return u?In?Dt(E):D(E):O(E)}function me(E,Q){if(Q===0||!E)return"";for(var m,k,T,$=0,sA=0;$|=k=i[E+sA>>0],(k!=0||Q)&&(sA++,!Q||sA!=Q););Q||(Q=sA);var x="";if($<128){for(;Q>0;)T=String.fromCharCode.apply(String,i.subarray(E,E+Math.min(Q,1024))),x=x?x+T:T,E+=1024,Q-=1024;return x}return m=E,(function(EA,lA){for(var hA=lA;EA[hA];)++hA;if(hA-lA>16&&EA.subarray&&ft)return ft.decode(EA.subarray(lA,hA));for(var _,bA,JA,OA,qA,Re,KA="";;){if(!(_=EA[lA++]))return KA;if(!(128&_)){KA+=String.fromCharCode(_);continue}if(bA=63&EA[lA++],(224&_)==192){KA+=String.fromCharCode((31&_)<<6|bA);continue}if(JA=63&EA[lA++],(240&_)==224?_=(15&_)<<12|bA<<6|JA:(OA=63&EA[lA++],(248&_)==240?_=(7&_)<<18|bA<<12|JA<<6|OA:(qA=63&EA[lA++],_=(252&_)==248?(3&_)<<24|bA<<18|JA<<12|OA<<6|qA:(1&_)<<30|bA<<24|JA<<18|OA<<12|qA<<6|(Re=63&EA[lA++]))),_<65536)KA+=String.fromCharCode(_);else{var rt=_-65536;KA+=String.fromCharCode(55296|rt>>10,56320|1023&rt)}}})(i,m)}function TA(E){for(var Q="";;){var m=s[E++>>0];if(!m)return Q;Q+=String.fromCharCode(m)}}function sn(E,Q){return(function(k,T,$){for(var sA=0;sA<k.length;++sA)s[T++>>0]=k.charCodeAt(sA);$||(s[T>>0]=0)})(E,Q,!1)}var ft=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function He(E,Q,m,k){if(!(k>0))return 0;for(var T=m,$=m+k-1,sA=0;sA<E.length;++sA){var x=E.charCodeAt(sA);if(x>=55296&&x<=57343&&(x=65536+((1023&x)<<10)|1023&E.charCodeAt(++sA)),x<=127){if(m>=$)break;Q[m++]=x}else if(x<=2047){if(m+1>=$)break;Q[m++]=192|x>>6,Q[m++]=128|63&x}else if(x<=65535){if(m+2>=$)break;Q[m++]=224|x>>12,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else if(x<=2097151){if(m+3>=$)break;Q[m++]=240|x>>18,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else if(x<=67108863){if(m+4>=$)break;Q[m++]=248|x>>24,Q[m++]=128|x>>18&63,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}else{if(m+5>=$)break;Q[m++]=252|x>>30,Q[m++]=128|x>>24&63,Q[m++]=128|x>>18&63,Q[m++]=128|x>>12&63,Q[m++]=128|x>>6&63,Q[m++]=128|63&x}}return Q[m]=0,m-T}function tt(E,Q,m){return He(E,i,Q,m)}function GA(E){for(var Q=0,m=0;m<E.length;++m){var k=E.charCodeAt(m);k>=55296&&k<=57343&&(k=65536+((1023&k)<<10)|1023&E.charCodeAt(++m)),k<=127?++Q:k<=2047?Q+=2:k<=65535?Q+=3:k<=2097151?Q+=4:k<=67108863?Q+=5:Q+=6}return Q}var ge=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function nt(E){for(var Q=E,m=Q>>1;I[m];)++m;if((Q=m<<1)-E>32&&ge)return ge.decode(i.subarray(E,Q));for(var k=0,T="";;){var $=I[E+2*k>>1];if($==0)return T;++k,T+=String.fromCharCode($)}}function an(E,Q,m){if(m===void 0&&(m=2147483647),m<2)return 0;for(var k=Q,T=(m-=2)<2*E.length?m/2:E.length,$=0;$<T;++$){var sA=E.charCodeAt($);I[Q>>1]=sA,Q+=2}return I[Q>>1]=0,Q-k}function ce(E){return 2*E.length}function mt(E){for(var Q=0,m="";;){var k=r[E+4*Q>>2];if(k==0)return m;if(++Q,k>=65536){var T=k-65536;m+=String.fromCharCode(55296|T>>10,56320|1023&T)}else m+=String.fromCharCode(k)}}function St(E,Q,m){if(m===void 0&&(m=2147483647),m<4)return 0;for(var k=Q,T=k+m-4,$=0;$<E.length;++$){var sA=E.charCodeAt($);if(sA>=55296&&sA<=57343&&(sA=65536+((1023&sA)<<10)|1023&E.charCodeAt(++$)),r[Q>>2]=sA,(Q+=4)+4>T)break}return r[Q>>2]=0,Q-k}function cs(E){for(var Q=0,m=0;m<E.length;++m){var k=E.charCodeAt(m);k>=55296&&k<=57343&&++m,Q+=4}return Q}function hs(E){var Q=GA(E)+1,m=Dt(Q);return m&&He(E,s,m,Q),m}function pt(E){var Q=GA(E)+1,m=wt(Q);return He(E,s,m,Q),m}function we(E){return E}function on(){var E,Q=(function(){var k=Error();if(!k.stack){try{throw Error(0)}catch(T){k=T}if(!k.stack)return"(no stack trace available)"}return k.stack.toString()})();return C.extraStackTrace&&(Q+=`
2
+ `+C.extraStackTrace()),(E=Q).replace(/__Z[\w\d_]+/g,function(m){var k,T=k=m;return m===T?m:m+" ["+T+"]"})}function he(E,Q){return E%Q>0&&(E+=Q-E%Q),E}function Ye(E){C.buffer=n=E}function Fe(){C.HEAP8=s=new Int8Array(n),C.HEAP16=I=new Int16Array(n),C.HEAP32=r=new Int32Array(n),C.HEAPU8=i=new Uint8Array(n),C.HEAPU16=g=new Uint16Array(n),C.HEAPU32=a=new Uint32Array(n),C.HEAPF32=h=new Float32Array(n),C.HEAPF64=B=new Float64Array(n)}function st(){var E=C.usingWasm?65536:16777216,Q=2147483648-E;if(r[M>>2]>Q)return!1;var m=yA;for(yA=Math.max(yA,16777216);yA<r[M>>2];)yA=yA<=536870912?he(2*yA,E):Math.min(he((3*yA+2147483648)/4,E),Q);var k=C.reallocBuffer(yA);return k&&k.byteLength==yA?(Ye(k),Fe(),!0):(yA=m,!1)}d=l=f=p=G=R=M=0,u=!1,C.reallocBuffer||(C.reallocBuffer=function(E){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,E);else{var Q,m=s;Q=new ArrayBuffer(E),new Int8Array(Q).set(m)}}catch{return!1}return!!Hi(Q)&&Q});try{(V=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{V=function(Q){return Q.byteLength}}var Je=C.TOTAL_STACK||5242880,yA=C.TOTAL_MEMORY||16777216;function yt(){return yA}function Se(E){for(;E.length>0;){var Q=E.shift();if(typeof Q=="function"){Q();continue}var m=Q.func;typeof m=="number"?Q.arg===void 0?C.dynCall_v(m):C.dynCall_vi(m,Q.arg):m(Q.arg===void 0?null:Q.arg)}}yA<Je&&aA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+yA+"! (TOTAL_STACK="+Je+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:yA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(yA),C.buffer=n),Fe();var it=[],rn=[],Cs=[],Bs=[],Es=[],In=!1,vi=!1;function Li(E){it.unshift(E)}function Vo(E){rn.unshift(E)}function Xo(E){Cs.unshift(E)}function Zo(E){Bs.unshift(E)}function Ni(E){Es.unshift(E)}function Wo(E,Q,m){var k,T;Y("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),m&&(k=s[T=Q+GA(E)]),tt(E,Q,1/0),m&&(s[T]=k)}function zo(E,Q,m){return E>=0?E:Q<=32?2*Math.abs(1<<Q-1)+E:Math.pow(2,Q)+E}function _o(E,Q,m){if(E<=0)return E;var k=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return E>=k&&(Q<=32||E>k)&&(E=-2*k+E),E}var Ti=Math.abs,Ui=Math.ceil,ls=Math.floor,xi=Math.min,Ge=0,gn=null,at=null;function jo(E){return E}C.preloadedImages={},C.preloadedAudios={};var ds="data:application/octet-stream;base64,";function kt(E){return String.prototype.startsWith?E.startsWith(ds):E.indexOf(ds)===0}(function(){var Q="main.wast",m="main.wasm",k="main.temp.asm";kt(Q)||(Q=J(Q)),kt(m)||(m=J(m)),kt(k)||(k=J(k));var T={global:null,env:null,asm2wasm:K,parent:C},$=null;function sA(hA){return hA}function x(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(m);throw"both async and sync fetching of the wasm failed"}catch(hA){Ce(hA)}}C.asmPreload=C.asm;var DA=C.reallocBuffer,EA=function(hA){hA=he(hA,C.usingWasm?65536:16777216);var _=C.buffer.byteLength;if(C.usingWasm)try{var bA=C.wasmMemory.grow((hA-_)/65536);return bA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(hA){return lA==="asmjs"?DA(hA):EA(hA)};var lA="";C.asm=function(hA,_,bA){var JA;if(!(_=JA=_).table){var OA,qA=C.wasmTableSize;qA===void 0&&(qA=1024);var Re=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Re!==void 0?_.table=new WebAssembly.Table({initial:qA,maximum:Re,element:"anyfunc"}):_.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):_.table=Array(qA),C.wasmTable=_.table}return _.memoryBase||(_.memoryBase=C.STATIC_BASE),_.tableBase||(_.tableBase=0),OA=(function(rt,Oe,Bn){if(typeof WebAssembly!="object")return aA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return aA("no native wasm Memory in use"),!1;function Ft(te,ne){if(($=te.exports).memory){var It,En,fs;It=$.memory,En=C.buffer,It.byteLength<En.byteLength&&aA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),fs=new Int8Array(En),new Int8Array(It).set(fs),Ye(It),Fe()}C.asm=$,C.usingWasm=!0,(function(ir){if(Ge--,C.monitorRunDependencies&&C.monitorRunDependencies(Ge),Ge==0&&(gn!==null&&(clearInterval(gn),gn=null),at)){var Yi=at;at=null,Yi()}})("wasm-instantiate")}if(Oe.memory=C.wasmMemory,T.global={NaN:NaN,Infinity:1/0},T["global.Math"]=Math,T.env=Oe,Ge++,C.monitorRunDependencies&&C.monitorRunDependencies(Ge),C.instantiateWasm)try{return C.instantiateWasm(T,Ft)}catch(te){return aA("Module.instantiateWasm callback failed with error: "+te),!1}function qe(te){Ft(te.instance,te.module)}function us(te){(!C.wasmBinary&&(AA||j)&&typeof fetch=="function"?fetch(m,{credentials:"same-origin"}).then(function(ne){if(!ne.ok)throw"failed to load wasm binary file at '"+m+"'";return ne.arrayBuffer()}).catch(function(){return x()}):new Promise(function(ne,It){ne(x())})).then(function(ne){return WebAssembly.instantiate(ne,T)}).then(te).catch(function(ne){aA("failed to asynchronously prepare wasm: "+ne),Ce(ne)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||kt(m)||typeof fetch!="function"?us(qe):WebAssembly.instantiateStreaming(fetch(m,{credentials:"same-origin"}),T).then(qe).catch(function(te){aA("wasm streaming compile failed: "+te),aA("falling back to ArrayBuffer instantiation"),us(qe)}),{}})(hA,_,bA),NA(OA,"no binaryen method succeeded."),OA},C.asm})(),l=(d=1024)+4816,rn.push(),C.STATIC_BASE=d,C.STATIC_BUMP=4816;var UA=l;function $o(E){s[UA]=s[E],s[UA+1]=s[E+1],s[UA+2]=s[E+2],s[UA+3]=s[E+3]}function Ar(E){s[UA]=s[E],s[UA+1]=s[E+1],s[UA+2]=s[E+2],s[UA+3]=s[E+3],s[UA+4]=s[E+4],s[UA+5]=s[E+5],s[UA+6]=s[E+6],s[UA+7]=s[E+7]}function er(E,Q,m){var k=m>0?m:GA(E)+1,T=Array(k),$=He(E,T,0,T.length);return Q&&(T.length=$),T}function tr(E){for(var Q=[],m=0;m<E.length;m++){var k=E[m];k>255&&(k&=255),Q.push(String.fromCharCode(k))}return Q.join("")}l+=16,M=O(4),G=(f=p=b(l))+Je,R=b(G),r[M>>2]=R,u=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:Ce,assert:NA,enlargeMemory:st,getTotalMemory:yt,abortOnCannotGrowMemory:function(){Ce("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+yA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,m,k){var T=hn();try{return C.dynCall_iii(Q,m,k)}catch($){if(cn(T),typeof $!="number"&&$!=="longjmp")throw $;C.setThrew(1,0)}},___assert_fail:function(Q,m,k,T){Ce("Assertion failed: "+me(Q)+", at: "+[m?me(m):"unknown filename",k,T?me(T):"unknown function"])},___setErrNo:function(Q){return C.___errno_location&&(r[C.___errno_location()>>2]=Q),Q},_abort:function(){C.abort()},_emscripten_memcpy_big:function(Q,m,k){return i.set(i.subarray(m,m+k),Q),Q},_llvm_floor_f64:ls,DYNAMICTOP_PTR:M,tempDoublePtr:UA,ABORT:cA,STACKTOP:p,STACK_MAX:G};var Qs=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=Qs,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var Hi=C._emscripten_replace_memory=function(){return C.asm._emscripten_replace_memory.apply(null,arguments)};C._free=function(){return C.asm._free.apply(null,arguments)};var Dt=C._malloc=function(){return C.asm._malloc.apply(null,arguments)};C._memcpy=function(){return C.asm._memcpy.apply(null,arguments)},C._memset=function(){return C.asm._memset.apply(null,arguments)},C._sbrk=function(){return C.asm._sbrk.apply(null,arguments)},C._stb_vorbis_js_channels=function(){return C.asm._stb_vorbis_js_channels.apply(null,arguments)},C._stb_vorbis_js_close=function(){return C.asm._stb_vorbis_js_close.apply(null,arguments)},C._stb_vorbis_js_decode=function(){return C.asm._stb_vorbis_js_decode.apply(null,arguments)},C._stb_vorbis_js_open=function(){return C.asm._stb_vorbis_js_open.apply(null,arguments)},C._stb_vorbis_js_sample_rate=function(){return C.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},C.establishStackSpace=function(){return C.asm.establishStackSpace.apply(null,arguments)},C.getTempRet0=function(){return C.asm.getTempRet0.apply(null,arguments)},C.runPostSets=function(){return C.asm.runPostSets.apply(null,arguments)},C.setTempRet0=function(){return C.asm.setTempRet0.apply(null,arguments)},C.setThrew=function(){return C.asm.setThrew.apply(null,arguments)};var wt=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},cn=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},hn=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function ot(E){this.name="ExitStatus",this.message="Program terminated with exit("+E+")",this.status=E}function Cn(E){E=E||C.arguments,!(Ge>0)&&((function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)Li(C.preRun.shift());Se(it)})(),!(Ge>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),Q()},1)):Q())));function Q(){!C.calledRun&&(C.calledRun=!0,cA||(In||(In=!0,Se(rn)),Se(Cs),C.onRuntimeInitialized&&C.onRuntimeInitialized(),(function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)Ni(C.postRun.shift());Se(Es)})()))}}function nr(E,Q){(!Q||!C.noExitRuntime||E!==0)&&(C.noExitRuntime||(cA=!0,ee=E,p=N,Se(Bs),vi=!0,C.onExit&&C.onExit(E)),C.quit(E,new ot(E)))}function Ce(E){throw C.onAbort&&C.onAbort(E),E!==void 0?(gA(E),aA(E),E=JSON.stringify(E)):E="",cA=!0,ee=1,"abort("+E+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=Qs,C.ccall=Ue,C.cwrap=function(Q,m,k,T){var $=(k=k||[]).every(function(sA){return sA==="number"});return m!=="string"&&$&&!T?ue(Q):function(){return Ue(Q,m,k,arguments,T)}},ot.prototype=Error(),ot.prototype.constructor=ot,at=function E(){C.calledRun||Cn(),C.calledRun||(at=E)},C.run=Cn,C.abort=Ce,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,Cn(),C.onRuntimeInitialized=()=>{ws=!0,ii()},lt.decode=function(E){return(function(m){if(!ws)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var k={};function T(Oe){return new Int32Array(C.HEAPU8.buffer,Oe,1)[0]}function $(Oe,Bn){var Ft=new ArrayBuffer(Bn*Float32Array.BYTES_PER_ELEMENT),qe=new Float32Array(Ft);return qe.set(new Float32Array(C.HEAPU8.buffer,Oe,Bn)),qe}k.open=C.cwrap("stb_vorbis_js_open","number",[]),k.close=C.cwrap("stb_vorbis_js_close","void",["number"]),k.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),k.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),k.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var sA,x,DA,EA,lA=k.open(),hA=(sA=m,x=m.byteLength,DA=C._malloc(x),(EA=new Uint8Array(C.HEAPU8.buffer,DA,x)).set(new Uint8Array(sA,0,x)),EA),_=C._malloc(4),bA=C._malloc(4),JA=k.decode(lA,hA.byteOffset,hA.byteLength,_,bA);if(C._free(hA.byteOffset),JA<0)throw k.close(lA),C._free(_),Error("stbvorbis decode failed: "+JA);for(var OA=k.channels(lA),qA=Array(OA),Re=new Int32Array(C.HEAPU32.buffer,T(_),OA),KA=0;KA<OA;KA++)qA[KA]=$(Re[KA],JA),C._free(Re[KA]);var rt=k.sampleRate(lA);return k.close(lA),C._free(T(_)),C._free(_),{data:qA,sampleRate:rt,eof:!0,error:null}})(E)}})();var Zt=lt,Fs={enableEventSystem:!0,initialTime:0,enableEffects:!0},Gs=class Ln{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,i,I,g,r,a,h,B,d,l){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=i,this.customControllers=I,this.lockVibrato=g,this.channelVibrato=r,this.channelTransposeKeyShift=a,this.channelOctaveTuning=h,this.isMuted=B,this.drumChannel=d,this.channelNumber=l}static copyFrom(A){return new Ln({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning.slice(),A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new Ln({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ga=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},ss=class Nn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Gs.create(A,s));return new Nn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Nn(A.channelSnapshots.map(t=>Gs.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){let t=Object.entries(this.masterParameters);for(let[n,s]of t)A.setMasterParameter(n,s);for(A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();for(let n of this.channelSnapshots)n.apply(A)}},ai={masterGain:zi,masterPan:0,voiceCap:Vi,interpolationType:sa.hermite,midiSystem:jn,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Qe},is=-15e3,Ra=15e3,Tn=new Float32Array(Ra-is+1);for(let e=0;e<Tn.length;e++){let A=is+e;Tn[e]=Math.pow(2,A/1200)}function Ot(e){return e<=-32767?0:Tn[e-is]}var qt=-2e4,oi=16500,Un=new Float32Array(oi-qt+1);for(let e=0;e<Un.length;e++){let A=qt+e;Un[e]=440*Math.pow(2,(A-6900)/1200)}function xn(e){return e<qt||e>oi?440*Math.pow(2,(e-6900)/1200):Un[e-qt|0]}var as=-16600,Ma=16e3,Hn=new Float32Array(Ma-as+1);for(let e=0;e<Hn.length;e++){let A=as+e;Hn[e]=Math.pow(10,-A/200)}function Ee(e){return Hn[e-as|0]}var ba=.03,ri=class Ve{static cachedCoefficients=new Map;static smoothingConstant=1;resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static initCache(A){Ve.smoothingConstant=ba*(44100/A);let t=new Ve(A);t.resonanceCb=0;for(let n=1500;n<13500;n++)t.currentInitialFc=n,t.calculateCoefficients(n)}init(){this.lastTargetCutoff=1/0,this.resonanceCb=0,this.currentInitialFc=13500,this.a0=0,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.x1=0,this.x2=0,this.y1=0,this.y2=0,this.initialized=!1}process(A,t,n,s){let i=t.modulatedGenerators[o.initialFilterFc];this.initialized?this.currentInitialFc+=(i-this.currentInitialFc)*Ve.smoothingConstant:(this.initialized=!0,this.currentInitialFc=i);let I=this.currentInitialFc+s,g=t.modulatedGenerators[o.initialFilterQ];if(this.currentInitialFc>13499&&I>13499&&g===0){this.currentInitialFc=13500;return}(Math.abs(this.lastTargetCutoff-I)>1||this.resonanceCb!==g)&&(this.lastTargetCutoff=I,this.resonanceCb=g,this.calculateCoefficients(I));for(let r=0;r<A;r++){let a=n[r],h=this.a0*a+this.a1*this.x1+this.a2*this.x2-this.a3*this.y1-this.y2*this.a4;this.x2=this.x1,this.x1=a,this.y2=this.y1,this.y1=h,n[r]=h}}calculateCoefficients(A){A=A|0;let t=this.resonanceCb,n=Ve.cachedCoefficients.get(t+A*961);if(n!==void 0){this.a0=n.a0,this.a1=n.a1,this.a2=n.a2,this.a3=n.a3,this.a4=n.a4;return}let s=xn(A);s=Math.min(s,this.maxCutoff);let i=Ee(-(t-3.01)),I=1/Math.sqrt(Ee(-t)),g=2*Math.PI*s/this.sampleRate,r=Math.cos(g),a=Math.sin(g)/(2*i),h=(1-r)*I,B=h/2,d=B,l=1+a,u=-2*r,f=1-a,p={a0:B/l,a1:h/l,a2:d/l,a3:u/l,a4:f/l};this.a0=p.a0,this.a1=p.a1,this.a2=p.a2,this.a3=p.a3,this.a4=p.a4,Ve.cachedCoefficients.set(t+A*961,p)}},PA=960,bt=900,va=.01,La=class{sampleRate;attenuationCb=PA;state=0;sampleTime=0;releaseStartCb=PA;releaseStartTimeSamples=0;attackDuration=0;decayDuration=0;releaseDuration=0;sustainCb=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;enteredRelease=!1;canEndOnSilentSustain=!1;gainSmoothing;currentGain=0;constructor(e){this.sampleRate=e,this.gainSmoothing=va*(44100/e)}process(e,A,t,n){if(this.enteredRelease)return this.releasePhase(e,A,t,n);switch(this.state){case 0:return this.delayPhase(e,A,t,n,0);case 1:return this.attackPhase(e,A,t,n,0);case 2:return this.holdPhase(e,A,t,n,0);case 3:return this.decayPhase(e,A,t,n,0);case 4:return this.sustainPhase(e,A,t,n,0)}}startRelease(e){this.releaseStartTimeSamples=this.sampleTime;let A=e.overrideReleaseVolEnv||e.modulatedGenerators[o.releaseVolEnv];if(this.releaseDuration=this.timecentsToSamples(Math.max(-7200,A)),this.enteredRelease)this.releaseStartCb=this.attenuationCb;else{let n=Math.max(0,Math.min(PA,this.sustainCb)),s=n/PA,i=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvDecay];switch(this.decayDuration=this.timecentsToSamples(e.modulatedGenerators[o.decayVolEnv]+i)*s,this.state){case 0:{this.releaseStartCb=PA;break}case 1:{let I=1-(this.attackEnd-this.releaseStartTimeSamples)/this.attackDuration;this.releaseStartCb=200*Math.log10(I)*-1;break}case 2:{this.releaseStartCb=0;break}case 3:{this.releaseStartCb=(1-(this.decayEnd-this.releaseStartTimeSamples)/this.decayDuration)*n;break}case 4:{this.releaseStartCb=n;break}}this.releaseStartCb=Math.max(0,Math.min(this.releaseStartCb,PA)),this.attenuationCb=this.releaseStartCb}this.enteredRelease=!0;let t=(PA-this.releaseStartCb)/PA;this.releaseDuration*=t,this.releaseStartCb>=bt&&(e.isActive=!1)}init(e){this.enteredRelease=!1,this.state=0,this.sampleTime=0,this.canEndOnSilentSustain=e.modulatedGenerators[o.sustainVolEnv]>=bt,this.currentGain=Ee(e.modulatedGenerators[o.initialAttenuation]),this.sustainCb=Math.min(PA,e.modulatedGenerators[o.sustainVolEnv]),this.attackDuration=this.timecentsToSamples(e.modulatedGenerators[o.attackVolEnv]);let A=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvDecay],t=this.sustainCb/PA;this.decayDuration=this.timecentsToSamples(e.modulatedGenerators[o.decayVolEnv]+A)*t,this.delayEnd=this.timecentsToSamples(e.modulatedGenerators[o.delayVolEnv]),this.attackEnd=this.attackDuration+this.delayEnd;let n=(60-e.targetKey)*e.modulatedGenerators[o.keyNumToVolEnvHold];this.holdEnd=this.timecentsToSamples(e.modulatedGenerators[o.holdVolEnv]+n)+this.attackEnd,this.decayEnd=this.decayDuration+this.holdEnd,this.attackEnd===0&&(this.state=2)}timecentsToSamples(e){return Math.max(0,Math.floor(Ot(e)*this.sampleRate))}releasePhase(e,A,t,n){let{sampleTime:s,currentGain:i,attenuationCb:I}=this,{releaseStartTimeSamples:g,releaseStartCb:r,releaseDuration:a,gainSmoothing:h}=this,B=s-g,d=PA-r,l=!1;i!==t&&(l=!0);for(let u=0;u<e;u++)l&&(i+=(t-i)*h),I=B/a*d+r,A[u]*=Ee(I+n)*i,s++,B++;return this.sampleTime=s,this.currentGain=i,this.attenuationCb=I,I<bt}delayPhase(e,A,t,n,s){let{delayEnd:i}=this,{sampleTime:I}=this;if(I<i){this.attenuationCb=PA;let g=Math.min(i-I,e);if(A.fill(0,s,s+g),s+=g,I+=g,s>=e)return this.sampleTime=I,!0}return this.sampleTime=I,this.state++,this.attackPhase(e,A,t,n,s)}attackPhase(e,A,t,n,s){let{attackEnd:i,attackDuration:I,gainSmoothing:g}=this,{sampleTime:r,currentGain:a}=this,h=a!==t;if(r<i){this.attenuationCb=0;let B=Ee(n);for(;r<i;){h&&(a+=(t-a)*g);let d=1-(i-r)/I;if(A[s]*=d*a*B,r++,++s>=e)return this.sampleTime=r,this.currentGain=a,!0}}return this.sampleTime=r,this.currentGain=a,this.state++,this.holdPhase(e,A,t,n,s)}holdPhase(e,A,t,n,s){let{holdEnd:i,gainSmoothing:I}=this,{sampleTime:g,currentGain:r}=this,a=r!==t;if(g<i){this.attenuationCb=0;let h=Ee(n);for(;g<i;)if(a&&(r+=(t-r)*I),A[s]*=r*h,g++,++s>=e)return this.sampleTime=g,this.currentGain=r,!0}return this.sampleTime=g,this.currentGain=r,this.state++,this.decayPhase(e,A,t,n,s)}decayPhase(e,A,t,n,s){let{decayDuration:i,decayEnd:I,gainSmoothing:g,sustainCb:r}=this,{sampleTime:a,currentGain:h,attenuationCb:B}=this,d=h!==t;if(a<I){for(;a<I;)if(d&&(h+=(t-h)*g),B=(1-(I-a)/i)*r,A[s]*=h*Ee(B+n),a++,++s>=e)return this.sampleTime=a,this.currentGain=h,this.attenuationCb=B,!0}return this.sampleTime=a,this.currentGain=h,this.attenuationCb=B,this.state++,this.sustainPhase(e,A,t,n,s)}sustainPhase(e,A,t,n,s){let{sustainCb:i,gainSmoothing:I}=this;if(this.canEndOnSilentSustain&&i>=bt)return A.fill(0,s,e),!1;let{sampleTime:g,currentGain:r}=this,a=r!==t;if(s<e)for(this.attenuationCb=i;s<e;)a&&(r+=(t-r)*I),A[s]*=r*Ee(i+n),g++,s++;return this.sampleTime=g,this.currentGain=r,!0}},vA=16384,Kt=Object.keys(CA).length,Ii=4,le=new Float32Array(vA+1),Le=new Float32Array(vA+1);le[0]=0;le[le.length-1]=1;Le[0]=0;Le[Le.length-1]=1;for(let e=1;e<vA-1;e++){let A=-.4166666666666667*Math.log(e/(le.length-1))/Math.LN10;Le[e]=1-A,le[le.length-1-e]=A}function gi(e,A,t){let n=!!(e&2);switch(e&1&&(t=1-t),A){case CA.linear:return n?t*2-1:t;case CA.switch:return t=t>.5?1:0,n?t*2-1:t;case CA.concave:return n?(t=t*2-1,t<0?-le[Math.trunc(t*-vA)]:le[Math.trunc(t*vA)]):le[Math.trunc(t*vA)];case CA.convex:return n?(t=t*2-1,t<0?-Le[Math.trunc(t*-vA)]:Le[Math.trunc(t*vA)]):Le[Math.trunc(t*vA)]}}var un=1,Yn=new Float32Array(1e3);for(let e=0;e<Yn.length;e++)Yn[e]=gi(0,CA.convex,e/1e3);var Na=class{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;releaseStartLevel=0;currentValue=0;enteredRelease=!1;decayEnd=0;process(e,A){return this.enteredRelease?this.releaseStartLevel===0?0:Math.max(0,(1-(A-e.releaseStartTime)/this.releaseDuration)*this.releaseStartLevel):(A<this.delayEnd?this.currentValue=0:A<this.attackEnd?this.currentValue=Yn[~~((1-(this.attackEnd-A)/this.attackDuration)*1e3)]:A<this.holdEnd?this.currentValue=un:A<this.decayEnd?this.currentValue=(1-(this.decayEnd-A)/this.decayDuration)*(this.sustainLevel-un)+un:this.currentValue=this.sustainLevel,this.currentValue)}startRelease(e){this.releaseStartLevel=this.currentValue,this.enteredRelease=!0;let A=this.tc2Sec(Math.max(e.modulatedGenerators[o.releaseModEnv],-7200));this.releaseDuration=A*this.releaseStartLevel}init(e){this.enteredRelease=!1,this.sustainLevel=1-e.modulatedGenerators[o.sustainModEnv]/1e3,this.attackDuration=this.tc2Sec(e.modulatedGenerators[o.attackModEnv]);let A=(60-e.midiNote)*e.modulatedGenerators[o.keyNumToModEnvDecay],t=this.tc2Sec(e.modulatedGenerators[o.decayModEnv]+A);this.decayDuration=t*(1-this.sustainLevel);let n=(60-e.midiNote)*e.modulatedGenerators[o.keyNumToModEnvHold];this.holdDuration=this.tc2Sec(n+e.modulatedGenerators[o.holdModEnv]),this.delayEnd=e.startTime+this.tc2Sec(e.modulatedGenerators[o.delayModEnv]),this.attackEnd=this.delayEnd+this.attackDuration,this.holdEnd=this.attackEnd+this.holdDuration,this.decayEnd=this.holdEnd+this.decayDuration}tc2Sec(e){return e<=-10114?0:Ot(e)}};function ve(e,A){return(e>>A&1)>0}function fn(e){return e?1:0}var _A=class Jn{isBipolar;isNegative;index;isCC;curveType;constructor(A=W.noController,t=CA.linear,n=!1,s=!1,i=!1){this.isBipolar=s,this.isNegative=i,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(S).find(A=>S[A]===this.index)??this.index.toString():Object.keys(W).find(A=>W[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(CA).find(A=>CA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=ve(A,9),n=ve(A,8),s=ve(A,7),i=A&127,I=A>>10&3;return new Jn(i,I,s,t,n)}static copyFrom(A){return new Jn(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|fn(this.isBipolar)<<9|fn(this.isNegative)<<8|fn(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t,n){let s;if(this.isCC)s=A[this.index];else switch(this.index){case W.noController:{s=16383;break}case W.noteOnKeyNum:{s=n.midiNote<<7;break}case W.noteOnVelocity:{s=n.velocity<<7;break}case W.polyPressure:{s=n.pressure<<7;break}case W.pitchWheel:{s=t;break}default:{s=A[this.index+uA];break}}let i=(this.isBipolar?2:0)|(this.isNegative?1:0);return ci[vA*(this.curveType*Kt+i)+s]}},ci=new Float32Array(vA*Ii*Kt);for(let e=0;e<Kt;e++)for(let A=0;A<Ii;A++){let t=vA*(e*Kt+A);for(let n=0;n<vA;n++)ci[t+n]=gi(A,e,n/vA)}var Bt=10;function VA(e,A,t,n,s){return new _A(s,e,n,A,t).toSourceEnum()}var hi=VA(CA.linear,!0,!1,!0,S.filterResonance),mA=class On{destination=o.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new _A,t=new _A,n=o.INVALID,s=0,i=0,I=!1,g=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=i,this.isEffectModulator=I,this.isDefaultResonantModulator=g}get destinationName(){return Object.keys(o).find(A=>o[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new On(_A.copyFrom(A.primarySource),_A.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
3
3
  Secondary source: ${this.secondarySource.toString()}
4
4
  to: ${this.destinationName}
5
- amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){z(A,this.primarySource.toSourceEnum()),z(A,this.destination),z(A,this.transformAmount),z(A,this.secondarySource.toSourceEnum()),z(A,this.transformType),t&&t.mod++}sumTransform(A){let t=qn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},QA=class extends mA{constructor(e,A,t,n,s){let i=(e===219||e===221)&&A===0&&(t===o.reverbEffectsSend||t===o.chorusEffectsSend),I=e===hi&&A===0&&t===o.initialFilterQ;super(_A.fromSourceEnum(e),_A.fromSourceEnum(A),t,n,s,i,I),this.destination>ma&&(this.destination=o.INVALID)}},mn=960,Sn=CA.concave,Ta=[new QA(VA(Sn,!1,!0,!1,W.noteOnVelocity),0,o.initialAttenuation,mn,0),new QA(129,0,o.vibLfoToPitch,50,0),new QA(VA(Sn,!1,!0,!0,S.mainVolume),0,o.initialAttenuation,mn,0),new QA(13,0,o.vibLfoToPitch,50,0),new QA(526,16,o.fineTune,12700,0),new QA(650,0,o.pan,500,0),new QA(VA(Sn,!1,!0,!0,S.expressionController),0,o.initialAttenuation,mn,0),new QA(219,0,o.reverbEffectsSend,200,0),new QA(221,0,o.chorusEffectsSend,200,0)],Ua=[new QA(VA(CA.linear,!1,!1,!0,S.tremoloDepth),0,o.modLfoToVolume,24,0),new QA(VA(CA.convex,!0,!1,!0,S.attackTime),0,o.attackVolEnv,6e3,0),new QA(VA(CA.linear,!0,!1,!0,S.releaseTime),0,o.releaseVolEnv,3600,0),new QA(VA(CA.linear,!0,!1,!0,S.decayTime),0,o.decayVolEnv,3600,0),new QA(VA(CA.linear,!0,!1,!0,S.brightness),0,o.initialFilterFc,9600,0),new QA(hi,0,o.initialFilterQ,200,0),new QA(VA(CA.switch,!1,!1,!0,S.softPedal),0,o.initialAttenuation,50,0),new QA(VA(CA.switch,!1,!1,!0,S.softPedal),0,o.initialFilterFc,-2400,0),new QA(VA(CA.linear,!0,!1,!0,S.balance),0,o.pan,500,0)],Ci=[...Ta,...Ua],os=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},xa=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopEnd:i,loopLength:I,loopStart:g,end:r}=this,a=this.cursor;if(this.isLooping)for(let h=0;h<e;h++){a>g&&(a=g+(a-g)%I);let B=a|0,d=B+1;d>=i&&(d-=I);let l=a-B,u=s[d],f=s[B];t[h]=f+(u-f)*l,a+=n}else for(let h=0;h<e;h++){let B=a|0,d=B+1;if(d>=r)return!1;let l=a-B,u=s[d],f=s[B];t[h]=f+(u-f)*l,a+=n}return this.cursor=a,!0}},Ha=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopLength:i,loopStart:I,end:g}=this,r=this.cursor;if(this.isLooping)for(let a=0;a<e;a++)r>I&&(r=I+(r-I)%i),t[a]=s[r|0],r+=n;else for(let a=0;a<e;a++){if(r>=g)return!1;t[a]=s[r|0],r+=n}return this.cursor=r,!0}},Ya=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopEnd:i,loopLength:I,loopStart:g,end:r}=this,a=this.cursor;if(this.isLooping)for(let h=0;h<e;h++){a>g&&(a=g+(a-g)%I);let B=a|0,d=B+1,l=B+2,u=B+3,f=a-B;d>=i&&(d-=I),l>=i&&(l-=I),u>=i&&(u-=I);let p=s[B],G=s[d],R=s[l],M=s[u],V=(R-p)*.5,N=G-R,C=V+N,nA=C+N+(M-G)*.5,AA=C+nA;t[h]=((nA*f-AA)*f+V)*f+G,a+=n}else for(let h=0;h<e;h++){let B=a|0,d=B+1,l=B+2,u=B+3,f=a-B;if(u>=r)return!1;let p=s[B],G=s[d],R=s[l],M=s[u],V=(R-p)*.5,N=G-R,C=V+N,nA=C+N+(M-G)*.5,AA=C+nA;t[h]=((nA*f-AA)*f+V)*f+G,a+=n}return this.cursor=a,!0}},Ja=-2320,qa=1e3/200,Bi=class{oscillators=[new xa,new Ha,new Ya];wavetable=this.oscillators[ai.interpolationType];filter;generators=new Int16Array(je);modulatedGenerators=new Int16Array(je);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Na;volEnv;buffer=new Float32Array(128);resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;overrideReleaseVolEnv=0;constructor(e){this.volEnv=new La(e),this.filter=new ri(e)}computeModulator(e,A,t){let n=this.modulators[t];if(n.transformAmount===0)return this.modulatorValues[t]=0,0;let s=n.primarySource.getValue(e,A,this),i=n.secondarySource.getValue(e,A,this),I=n.transformAmount;n.isEffectModulator&&I<=1e3&&(I*=qa,I=Math.min(I,1e3));let g=s*i*I;return n.transformType===2&&(g=Math.abs(g)),n.isDefaultResonantModulator&&(this.resonanceOffset=Math.max(0,g/2)),this.modulatorValues[t]=g,g}exclusiveRelease(e,A=Wi){this.overrideReleaseVolEnv=Ja,this.isInRelease=!1,this.releaseVoice(e,A)}releaseVoice(e,A=Zi){this.releaseStartTime=e,this.releaseStartTime-this.startTime<A&&(this.releaseStartTime=this.startTime+A)}setup(e,A,t,n,s){this.startTime=e,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=A,this.midiNote=t,this.velocity=n,this.realKey=s,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1}},Oa=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(e,A,t,n){let s=e.sample,i=e.generators;this.modulators=e.modulators,this.generators=i,this.rootKey=s.originalKey,i[o.overridingRootKey]>-1&&(this.rootKey=i[o.overridingRootKey]),this.targetKey=A,i[o.keyNum]>-1&&(this.targetKey=i[o.keyNum]),this.velocity=t,i[o.velocity]>-1&&(this.velocity=i[o.velocity]),this.exclusiveClass=i[o.exclusiveClass],this.loopStart=s.loopStart,this.loopEnd=s.loopEnd,this.sampleData=s.getAudioData(),this.playbackStep=s.sampleRate/n*Math.pow(2,s.pitchCorrection/1200),this.loopingMode=i[o.sampleModes]}};function pn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var Ka=3070,Pa=2e3,Rs=Math.PI/2,xt=-500,Ei=500,rs=Ei-xt,li=new Float32Array(rs+1),di=new Float32Array(rs+1);for(let e=xt;e<=Ei;e++){let A=(e-xt)/rs,t=e-xt;li[t]=Math.cos(Rs*A),di[t]=Math.sin(Rs*A)}function Va(e,A,t,n,s,i,I,g,r,a){if(!e.isInRelease&&A>=e.releaseStartTime&&(e.isInRelease=!0,e.volEnv.startRelease(e),e.modEnv.startRelease(e),e.loopingMode===3&&(e.wavetable.isLooping=!1)),e.hasRendered=!0,!e.isActive)return;let h=e.targetKey,B=e.modulatedGenerators[o.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,d=e.modulatedGenerators[o.coarseTune],l=this.synthCore.tunings[this.preset.program*128+e.realKey];if(l!==-1&&(h=Math.trunc(l),B+=(l-h)*100),e.portamentoFromKey>-1){let v=Math.min((A-e.startTime)/e.portamentoDuration,1),Y=h-e.portamentoFromKey;d-=Y*(1-v)}B+=(h-e.rootKey)*e.modulatedGenerators[o.scaleTuning];let u=0,f=0,p=e.modulatedGenerators[o.vibLfoToPitch],G=e.modulatedGenerators[o.vibLfoToVolume],R=e.modulatedGenerators[o.vibLfoToFilterFc];if(p!==0||G!==0||R!==0){let v=e.startTime+ye(e.modulatedGenerators[o.delayVibLFO]),Y=xn(e.modulatedGenerators[o.freqVibLFO]),K=pn(v,Y,A);B+=K*(p*this.customControllers[oA.modulationMultiplier]),f+=-K*G,u+=K*R}let M=e.modulatedGenerators[o.modLfoToPitch],V=e.modulatedGenerators[o.modLfoToVolume],N=e.modulatedGenerators[o.modLfoToFilterFc];if(M!==0||N!==0||V!==0){let v=e.startTime+ye(e.modulatedGenerators[o.delayModLFO]),Y=xn(e.modulatedGenerators[o.freqModLFO]),K=pn(v,Y,A);B+=K*(M*this.customControllers[oA.modulationMultiplier]),f+=-K*V,u+=K*N}this.midiControllers[S.modulationWheel]==0&&this.channelVibrato.depth>0&&(B+=pn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A)*this.channelVibrato.depth);let C=e.modulatedGenerators[o.modEnvToPitch],nA=e.modulatedGenerators[o.modEnvToFilterFc];if(nA!==0||C!==0){let v=e.modEnv.process(e,A);u+=v*nA,B+=v*C}f-=e.resonanceOffset;let AA=B+d*100|0;AA!==e.tuningCents&&(e.tuningCents=AA,e.tuningRatio=Math.pow(2,AA/1200));let j=Ee(e.modulatedGenerators[o.initialAttenuation]);e.buffer.length<a&&(eA(`Buffer size has changed from ${e.buffer.length} to ${a}!
6
- This will cause a memory allocation!`),e.buffer=new Float32Array(a));let H=e.buffer;if(e.loopingMode===2&&!e.isInRelease){e.isActive=e.volEnv.process(a,H,j,f);return}e.isActive=e.wavetable.process(a,e.tuningRatio,H),e.filter.process(a,e,H,u);let Z=e.volEnv.process(a,H,j,f);e.isActive=e.isActive&&Z;let P;e.overridePan?P=e.overridePan:(e.currentPan+=(e.modulatedGenerators[o.pan]-e.currentPan)*this.synthCore.panSmoothingFactor,P=e.currentPan);let J=this.synthCore.masterParameters.masterGain*this.synthCore.midiVolume*e.gainModifier,gA=P+500|0,aA=li[gA]*J*this.synthCore.panLeft,q=di[gA]*J*this.synthCore.panRight;for(let v=0;v<a;v++){let Y=H[v],K=v+r;t[K]+=aA*Y,n[K]+=q*Y}if(!this.synthCore.enableEffects)return;let D=e.modulatedGenerators[o.reverbEffectsSend];if(D>0){let v=this.synthCore.masterParameters.reverbGain*this.synthCore.reverbSend*J*(D/Ka);for(let Y=0;Y<a;Y++){let K=Y+r,SA=v*H[Y];s[K]+=SA,i[K]+=SA}}let b=e.modulatedGenerators[o.chorusEffectsSend];if(b>0){let v=this.synthCore.masterParameters.chorusGain*this.synthCore.chorusSend*(b/Pa),Y=aA*v,K=q*v;for(let SA=0;SA<a;SA++){let YA=SA+r,LA=H[SA];I[YA]+=Y*LA,g[YA]+=K*LA}}}var ke={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},ze={partParameter:1,awe32:127,SF2:120},pe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},se=(e,A,t,n)=>{n.length>0&&(n=" "+n),y(`%c${A} for %c${e}%c is now set to %c${t}%c${n}.`,c.info,c.recognized,c.info,c.value,c.info)},yn=e=>{e.channelVibrato.delay===0&&e.channelVibrato.rate===0&&e.channelVibrato.depth===0&&(e.channelVibrato.depth=50,e.channelVibrato.rate=8,e.channelVibrato.delay=.6)};function Xa(e){switch(this.midiControllers[S.dataEntryMSB]=e<<7,this.dataEntryState){default:case xA.Idle:break;case xA.NRPFine:{if(this.lockGSNRPNParams)return;let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7,n=this.midiControllers[S.dataEntryLSB]>>7;switch(A){default:{if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case ze.partParameter:{switch(t){default:{if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${A.toString(16)} 0x${t.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case pe.vibratoRate:{if(e===64)return;yn(this),this.channelVibrato.rate=e/64*8,se(this.channel,"Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break}case pe.vibratoDepth:{if(e===64)return;yn(this),this.channelVibrato.depth=e/2,se(this.channel,"Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break}case pe.vibratoDelay:{if(e===64)return;yn(this),this.channelVibrato.delay=e/64/3,se(this.channel,"Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break}case pe.TVFFilterCutoff:{this.controllerChange(S.brightness,e),se(this.channel,"Filter cutoff",e.toString(),"");break}case pe.TVFFilterResonance:{this.controllerChange(S.filterResonance,e),se(this.channel,"Filter resonance",e.toString(),"");break}case pe.EGAttackTime:{this.controllerChange(S.attackTime,e),se(this.channel,"EG attack time",e.toString(),"");break}case pe.EGDecayTime:{this.controllerChange(S.decayTime,e),se(this.channel,"EG decay time",e.toString(),"");break}case pe.EGReleaseTime:{this.controllerChange(S.releaseTime,e),se(this.channel,"EG release time",e.toString(),"");break}}break}case ze.awe32:break;case ze.SF2:{if(t>100)break;let s=this.customControllers[oA.sf2NPRNGeneratorLSB],i=(e<<7|n)-8192;this.setGeneratorOffset(s,i);break}}break}case xA.RPCoarse:case xA.RPFine:{let A=this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7;switch(A){default:{y(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${A.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case ke.pitchWheelRange:{this.midiControllers[uA+W.pitchWheelRange]=e<<7,se(this.channel,"Pitch wheel range",e.toString(),"semitones");break}case ke.coarseTuning:{let t=e-64;this.setCustomController(oA.channelTuningSemitones,t),se(this.channel,"Coarse tuning",t.toString(),"semitones");break}case ke.fineTuning:{this.setTuning(e-64,!1);break}case ke.modulationDepth:{this.setModulationDepth(e*100);break}case ke.resetParameters:{this.resetParameters();break}}}}}var Za=[o.delayModLFO,o.freqModLFO,o.delayVibLFO,o.freqVibLFO,o.delayModEnv,o.attackModEnv,o.holdModEnv,o.decayModEnv,o.sustainModEnv,o.releaseModEnv,o.delayVolEnv,o.attackVolEnv,o.holdVolEnv,o.decayVolEnv,o.sustainVolEnv,o.releaseVolEnv,o.fineTune,o.modLfoToPitch,o.vibLfoToPitch,o.modEnvToPitch,o.modLfoToVolume,o.initialFilterFc,o.initialFilterQ,o.modLfoToFilterFc,o.modEnvToFilterFc,o.chorusEffectsSend,o.reverbEffectsSend],Be=(e,A,t)=>Math.max(A,Math.min(t,e)),Lt=e=>Math.max(-32768,1200*Math.log2(e/1e3)),Wa=e=>6900+1200*Math.log2(e/440);function za(e,A,t){let n=t<<7|A;n-=8192;let s=Za[e];s||eA(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let i,I,g,r;switch(s){default:break;case o.delayModLFO:case o.delayVibLFO:case o.delayVolEnv:case o.delayModEnv:{i=4*Be(n,0,5900),this.setGeneratorOverride(s,Lt(i));break}case o.attackVolEnv:case o.attackModEnv:{i=Be(n,0,5940),this.setGeneratorOverride(s,Lt(i));break}case o.holdVolEnv:case o.holdModEnv:{i=Be(n,0,8191),this.setGeneratorOverride(s,Lt(i));break}case o.decayModEnv:case o.decayVolEnv:case o.releaseVolEnv:case o.releaseModEnv:{i=4*Be(n,0,5940),this.setGeneratorOverride(s,Lt(i));break}case o.freqVibLFO:case o.freqModLFO:{I=.084*A,this.setGeneratorOverride(s,Wa(I),!0);break}case o.sustainVolEnv:case o.sustainModEnv:{g=A*7.5,this.setGeneratorOverride(s,g);break}case o.fineTune:{this.setGeneratorOverride(s,n,!0);break}case o.modLfoToPitch:case o.vibLfoToPitch:{r=Be(n,-127,127)*9.375,this.setGeneratorOverride(s,r,!0);break}case o.modEnvToPitch:{r=Be(n,-127,127)*9.375,this.setGeneratorOverride(s,r);break}case o.modLfoToVolume:{g=1.875*A,this.setGeneratorOverride(s,g,!0);break}case o.initialFilterFc:{let a=4335+59*A;this.setGeneratorOverride(s,a,!0);break}case o.initialFilterQ:{g=215*(A/127),this.setGeneratorOverride(s,g,!0);break}case o.modLfoToFilterFc:{r=Be(n,-64,63)*56.25,this.setGeneratorOverride(s,r,!0);break}case o.modEnvToFilterFc:{r=Be(n,-64,63)*56.25,this.setGeneratorOverride(s,r);break}case o.chorusEffectsSend:case o.reverbEffectsSend:{this.setGeneratorOverride(s,Be(n,0,255)*(1e3/255));break}}}function _a(e){switch(this.midiControllers[S.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case xA.RPCoarse:case xA.RPFine:{switch(this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7){default:break;case ke.pitchWheelRange:{if(e===0)break;this.midiControllers[uA+W.pitchWheelRange]|=e;let t=(this.midiControllers[uA+W.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,c.info,c.value);break}case ke.fineTuning:{let n=this.customControllers[oA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ke.modulationDepth:{let n=this.customControllers[oA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:{this.resetParameters();break}}break}case xA.NRPFine:{let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7;if(A===ze.SF2)return;A===ze.awe32?za.call(this,t,e,this.midiControllers[S.dataEntryMSB]>>7):y(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value)}}}function ja(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=S.modulationWheelLSB&&e<=S.effectControl2LSB&&e!==S.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.computeModulatorsAll(1,n)}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case S.omniModeOff:case S.omniModeOn:case S.allNotesOff:{this.stopAllNotes();break}case S.allSoundOff:{this.stopAllNotes(!0);break}case S.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case S.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case S.bankSelect:{this.setBankMSB(A),this.channel%16===we&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case S.bankSelectLSB:{this.setBankLSB(A);break}case S.registeredParameterLSB:{this.dataEntryState=xA.RPFine;break}case S.registeredParameterMSB:{this.dataEntryState=xA.RPCoarse;break}case S.nonRegisteredParameterMSB:{this.customControllers[oA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=xA.NRPCoarse;break}case S.nonRegisteredParameterLSB:{if(this.midiControllers[S.nonRegisteredParameterMSB]>>7===ze.SF2)switch(this.customControllers[oA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[oA.sf2NPRNGeneratorLSB]=0),A){case 100:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e4;break}default:A<100&&(this.customControllers[oA.sf2NPRNGeneratorLSB]+=A)}this.dataEntryState=xA.NRPFine;break}case S.dataEntryMSB:{this.dataEntryCoarse(A);break}case S.dataEntryLSB:{this.dataEntryFine(A);break}case S.resetAllControllers:{this.resetControllersRP15Compliant();break}case S.sustainPedal:{if(A<64){let n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.isHeld&&(s.isHeld=!1,s.releaseVoice(this.synthCore.currentTime),++n>=this.voiceCount))break}}break}default:{this.computeModulatorsAll(1,e);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:e,controllerValue:A})}}var $a=40;function Ao(e){if(e<1)return 0;{let A=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],n=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],s=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],i=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],I=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],r=[2,4,8,16,32,64,80,96,112,120,124].findLastIndex(h=>h<e)+1,a=(e-A[r])*t[r];return Math.exp(2.302585092994046*(((n[r]*a+s[r])*a+i[r])*a+I[r]))/$a}}function eo(e,A){return Ao(e)*A}var Nt=(e,A,t)=>Math.max(A,Math.min(t,e));function to(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&A<40||this.synthCore.masterParameters.blackMIDIMode&&A<10||this._isMuted||!this.preset)return;let t=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset.program,i=this.synthCore.tunings[s*128+t];i>=0&&(n=Math.trunc(i)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(e);let I=this.synthCore.keyModifierManager.getVelocity(this.channel,t);I>-1&&(A=I);let g=this.synthCore.keyModifierManager.getGain(this.channel,t),r=-1,a=0,h=this.midiControllers[S.portamentoTime]>>7,B=this.midiControllers[S.portamentoControl]>>7;if(!this.drumChannel&&B!==n&&this.midiControllers[S.portamentoOnOff]>=8192&&h>0){if(B>0){let u=Math.abs(n-B);a=eo(h,u),r=B}this.controllerChange(S.portamentoControl,n)}if(!this.polyMode){let u=0;if(this.voiceCount>0){for(let f of this.synthCore.voices)if(f.isActive&&f.channel===this.channel&&(f.exclusiveRelease(this.synthCore.currentTime,0),++u>=this.voiceCount))break}}let d=this.synthCore.getVoices(this.channel,n,A),l=0;this.randomPan&&(l=Math.round(Math.random()*1e3-500));for(let u of d){let f=this.synthCore.assignVoice();if(f.setup(this.synthCore.currentTime,this.channel,n,A,t),f.wavetable=f.oscillators[this.synthCore.masterParameters.interpolationType],f.generators.set(u.generators),f.exclusiveClass=u.exclusiveClass,f.rootKey=u.rootKey,f.loopingMode=u.loopingMode,f.wavetable.sampleData=u.sampleData,f.wavetable.playbackStep=u.playbackStep,f.targetKey=u.targetKey,this.sysExModulators.modulatorList.length>0){f.modulators=[...u.modulators];for(let N of this.sysExModulators.modulatorList){let C=f.modulators.findIndex(nA=>mA.isIdentical(nA,N.mod));C===-1?f.modulators.push(N.mod):f.modulators[C]=N.mod}}else f.modulators=u.modulators;if(f.modulators.length>f.modulatorValues.length&&(eA(`${f.modulators.length} modulators! Increasing modulatorValues table.`),f.modulatorValues=new Int16Array(f.modulators.length)),this.generatorOverridesEnabled)for(let[N,C]of this.generatorOverrides.entries())C!==Zs&&(f.generators[N]=C);if(f.exclusiveClass!==0&&this.polyMode){let N=0;if(this.voiceCount>0){for(let C of this.synthCore.voices)if(C.isActive&&C.channel===this.channel&&C.exclusiveClass===f.exclusiveClass&&C.hasRendered&&(C.exclusiveRelease(this.synthCore.currentTime),++N>=this.voiceCount))break}}this.computeModulators(f),f.volEnv.init(f),f.modEnv.init(f),f.filter.init();let p=f.modulatedGenerators[o.startAddrsOffset]+f.modulatedGenerators[o.startAddrsCoarseOffset]*32768,G=f.modulatedGenerators[o.endAddrOffset]+f.modulatedGenerators[o.endAddrsCoarseOffset]*32768,R=f.modulatedGenerators[o.startloopAddrsOffset]+f.modulatedGenerators[o.startloopAddrsCoarseOffset]*32768,M=f.modulatedGenerators[o.endloopAddrsOffset]+f.modulatedGenerators[o.endloopAddrsCoarseOffset]*32768,V=u.sampleData.length-1;if(f.wavetable.cursor=Nt(p,0,V),f.wavetable.end=Nt(V+G,0,V),f.wavetable.loopStart=Nt(u.loopStart+R,0,V),f.wavetable.loopEnd=Nt(u.loopEnd+M,0,V),f.wavetable.loopEnd<f.wavetable.loopStart){let N=f.wavetable.loopStart;f.wavetable.loopStart=f.wavetable.loopEnd,f.wavetable.loopEnd=N}f.wavetable.loopEnd-f.wavetable.loopStart<1&&(f.loopingMode===1||f.loopingMode===3)&&(f.loopingMode=0),f.wavetable.loopLength=f.wavetable.loopEnd-f.wavetable.loopStart,f.wavetable.isLooping=f.loopingMode===1||f.loopingMode===3,f.portamentoFromKey=r,f.portamentoDuration=a,f.overridePan=l,f.gainModifier=g,f.currentPan=Math.max(-500,Math.min(500,f.modulatedGenerators[o.pan]))}this.voiceCount+=d.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:e,channel:this.channel,velocity:A})}function no(e){if(e>127||e<0){eA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A),this.synthCore.callEvent("noteOff",{midiNote:e,channel:this.channel});return}let t=this.midiControllers[S.sustainPedal]>=8192,n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&!s.isInRelease&&(t?s.isHeld=!0:s.releaseVoice(this.synthCore.currentTime),++n>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:e,channel:this.channel})}function so(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!A&&(A=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!A)||(this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}var io=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let i=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(i);let I=this.modulatorList.find(g=>g.id===i);if(I)I.mod.transformAmount=t;else{let g,r;e>=uA?(g=e-uA,r=!1):(g=e,r=!0);let a=new mA(new _A(g,CA.linear,r,n),new _A,A,t,0);this.modulatorList.push({mod:a,id:i})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}};function ao(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let r=0;r<s.length;r++)s[r]+=this.generatorOffsets[r]}let i=e.modulatedGenerators,I=this.perNotePitch?this.pitchWheels[e.realKey]:this.midiControllers[W.pitchWheel+uA];if(A===-1){i.set(s);for(let r=0;r<n.length;r++){let a=n[r];i[a.destination]=Math.min(32767,Math.max(-32768,i[a.destination]+e.computeModulator(this.midiControllers,I,r)))}for(let r=0;r<i.length;r++){let a=XA[r];a&&(i[r]=Math.min(a.max,Math.max(a.min,i[r])))}return}let g=!!A;for(let r=0;r<n.length;r++){let a=n[r];if(a.primarySource.isCC===g&&a.primarySource.index===t||a.secondarySource.isCC===g&&a.secondarySource.index===t){let h=a.destination,B=s[h];e.computeModulator(this.midiControllers,I,r);for(let l=0;l<n.length;l++)n[l].destination===h&&(B+=e.modulatorValues[l]);let d=XA[h];i[h]=Math.max(d.min,Math.min(B,d.max))}}}var oo=class{midiControllers=new Int16Array(vn);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(vn).fill(!1);customControllers=new Float32Array(Ai);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new io;drumChannel=!1;randomPan=!1;dataEntryState=xA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;synthCore;noteOn=to.bind(this);noteOff=no.bind(this);programChange=so.bind(this);controllerChange=ja.bind(this);resetControllers=Sa.bind(this);resetPreset=pa.bind(this);resetControllersRP15Compliant=ya.bind(this);resetParameters=ka.bind(this);dataEntryFine=_a.bind(this);dataEntryCoarse=Xa.bind(this);renderVoice=Va.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(je);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(je);generatorOverridesEnabled=!1;computeModulators=ao.bind(this);previousVoiceCount=0;constructor(e,A,t){this.synthCore=e,this.preset=A,this.channel=t,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthCore.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(oA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),y(`%cChannel ${this.channel} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(oA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(oA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channel}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}pitchWheel(e,A=-1){if(!this.lockedControllers[uA+W.pitchWheel]){if(A===-1)this.perNotePitch=!1,this.midiControllers[uA+W.pitchWheel]=e,this.computeModulatorsAll(0,W.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[uA+W.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[A]=e;let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.isActive&&n.channel===this.channel&&n.midiNote===A&&(this.computeModulators(n,0,W.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:e,midiNote:A})}}channelPressure(e){this.midiControllers[uA+W.channelPressure]=e<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,W.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:e})}polyPressure(e,A){let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.isActive&&n.channel===this.channel&&n.midiNote===e&&(n.pressure=A,this.computeModulators(n,0,W.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[oA.channelTuning]+this.customControllers[oA.channelTransposeFine]+this.customControllers[oA.masterTuning]+this.customControllers[oA.channelTuningSemitones]*100}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(e){if(fA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(fA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===we)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Zs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){if(this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t){let n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(s.generators[e]=A,this.computeModulators(s),++n>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*XA[e].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(this.computeModulators(n),++t>=this.voiceCount))break}}killNote(e,A=-12e3){e+=this.customControllers[oA.channelKeyShift];let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&(n.overrideReleaseVolEnv=A,n.isInRelease=!1,n.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(e=!1){if(e){let A=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++A>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let A=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++A>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:e})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let e={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[uA+W.pitchWheel],pitchWheelRange:this.midiControllers[uA+W.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:e})}computeModulatorsAll(e,A){let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(this.computeModulators(n,e,A),++t>=this.voiceCount))break}}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},Ms=4,FA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=XA[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e){z(e,this.generatorType),z(e,this.generatorValue)}toString(){return`${Object.keys(o).find(e=>o[e]===this.generatorType)}: ${this.generatorValue}`}},ro=4,Wt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let e=this.getGenerator(o.coarseTune,0),A=this.getGenerator(o.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(o.coarseTune,A),this.setGenerator(o.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,XA[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case o.sampleID:throw new Error("Use setSample()");case o.instrument:throw new Error("Use setInstrument()");case o.velRange:case o.keyRange:throw new Error("Set the range manually")}if(A===null){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n===-1?this.addGenerators(new FA(e,A,t)):this.generators[n]=new FA(e,A,t)}addGenerators(...e){for(let A of e)switch(A.generatorType){default:{this.generators.push(A);break}case o.sampleID:case o.instrument:break;case o.velRange:{this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break}case o.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new FA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(mA.copyFrom.bind(mA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==o.sampleID&&t.generatorType!==o.instrument&&t.generatorType!==o.keyRange&&t.generatorType!==o.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new FA(o.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new FA(o.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},Qi=class extends Wt{},ui=class extends Wt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=e.instruments.indexOf(this.instrument);if(t===-1)throw new Error(`${this.instrument.name} does not exist in ${e.soundBankInfo.name}! Cannot write instrument generator.`);return A.push(new FA(o.instrument,t,!1)),A}},fi=class extends Wt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getWriteGenerators(e){let A=super.getWriteGenerators(e),t=e.samples.indexOf(this.sample);if(t===-1)throw new Error(`${this.sample.name} does not exist in ${e.soundBankInfo.name}! Cannot write sampleID generator.`);return A.push(new FA(o.sampleID,t,!1)),A}},Io=22,go=new Set([o.velRange,o.keyRange,o.instrument,o.sampleID,o.exclusiveClass,o.endOper,o.sampleModes,o.startloopAddrsOffset,o.startloopAddrsCoarseOffset,o.endloopAddrsOffset,o.endloopAddrsCoarseOffset,o.startAddrsOffset,o.startAddrsCoarseOffset,o.endAddrOffset,o.endAddrsCoarseOffset,o.initialAttenuation,o.fineTune,o.coarseTune,o.keyNumToVolEnvHold,o.keyNumToVolEnvDecay,o.keyNumToModEnvHold,o.keyNumToModEnvDecay]),Qt=class{name="";zones=[];globalZone=new Qi;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new fi(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e);for(let A of this.zones)A.useCount++}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A===-1){eA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1);for(let t of this.zones)t.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);for(let e of this.zones)e.sample.unlinkFrom(this)}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(go.has(n))continue;n=n;let s={},i=XA[n]?.def||0;s[i]=0;for(let I of this.zones){let g=I.getGenerator(n,void 0);g===void 0?s[i]++:s[g]===void 0?s[g]=1:s[g]++;let r;switch(n){default:continue;case o.decayVolEnv:{r=o.keyNumToVolEnvDecay;break}case o.holdVolEnv:{r=o.keyNumToVolEnvHold;break}case o.decayModEnv:{r=o.keyNumToModEnvDecay;break}case o.holdModEnv:r=o.keyNumToModEnvHold}if(I.getGenerator(r,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let I=["0",0];for(let[r,a]of Object.entries(s))a>I[1]&&(I=[r,a]);let g=Number.parseInt(I[0]);g!==i&&e.setGenerator(n,g,!1);for(let r of this.zones){let a=r.getGenerator(n,void 0);a===void 0?g!==i&&r.setGenerator(n,i):a===g&&r.setGenerator(n,null)}}}let t=this.zones[0].modulators.map(n=>mA.copyFrom(n));for(let n of t){let s=!0;for(let i of this.zones){if(!s)continue;i.modulators.find(g=>mA.isIdentical(g,n))||(s=!1)}if(s){e.addModulators(mA.copyFrom(n));for(let i of this.zones){let I=i.modulators.find(g=>mA.isIdentical(g,n));I&&I.transformAmount===n.transformAmount&&i.modulators.splice(i.modulators.indexOf(I),1)}}}}write(e,A){y(`%cWriting ${this.name}...`,c.info),kA(e.pdta,this.name.slice(0,20),20),kA(e.xdta,this.name.slice(20),20),z(e.pdta,A&65535),z(e.xdta,A>>>16)}},co=38,ut=class ie{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(A,t=new Qi){this.parentSoundBank=A,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&fA.isXGDrums(this.bankMSB)}get isAnyDrums(){let A=this.parentSoundBank.isXGBank;return this.isGMGSDrum||A&&fA.isXGDrums(this.bankMSB)}static isInRange(A,t){return t>=A.min&&t<=A.max}static addUniqueModulators(A,t){for(let n of t)A.some(s=>mA.isIdentical(n,s))||A.push(n)}static subtractRanges(A,t){return{min:Math.max(A.min,t.min),max:Math.min(A.max,t.max)}}delete(){for(let A of this.zones)A.instrument?.unlinkFrom(this)}deleteZone(A){this.zones[A]?.instrument?.unlinkFrom(this),this.zones.splice(A,1)}createZone(A){let t=new ui(this,A);return this.zones.push(t),t}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)for(let i of this.getVoiceParameters(n,s))i.sample.getAudioData()}matches(A){return $A.matches(this,A)}getVoiceParameters(A,t){let n=new Array;for(let s of this.zones){if(!ie.isInRange(s.hasKeyRange?s.keyRange:this.globalZone.keyRange,A)||!ie.isInRange(s.hasVelRange?s.velRange:this.globalZone.velRange,t))continue;let i=s.instrument;if(!i||i.zones.length===0)continue;let I=new Int16Array(je);for(let r of this.globalZone.generators)I[r.generatorType]=r.generatorValue;for(let r of s.generators)I[r.generatorType]=r.generatorValue;let g=[...s.modulators];ie.addUniqueModulators(g,this.globalZone.modulators);for(let r of i.zones){if(!ie.isInRange(r.hasKeyRange?r.keyRange:i.globalZone.keyRange,A)||!ie.isInRange(r.hasVelRange?r.velRange:i.globalZone.velRange,t))continue;let a=[...r.modulators];ie.addUniqueModulators(a,i.globalZone.modulators),ie.addUniqueModulators(a,this.parentSoundBank.defaultModulators);for(let B of g){let d=a.findIndex(l=>mA.isIdentical(B,l));d===-1?a.push(B):a[d]=a[d].sumTransform(B)}let h=new Int16Array(bn);for(let B of i.globalZone.generators)h[B.generatorType]=B.generatorValue;for(let B of r.generators)h[B.generatorType]=B.generatorValue;for(let B=0;B<h.length;B++)h[B]=Math.max(-32768,Math.min(32767,h[B]+I[B]));h[o.initialAttenuation]=Math.floor(h[o.initialAttenuation]*.4),n.push({sample:r.sample,generators:h,modulators:a})}}return n}toMIDIString(){return $A.toMIDIString(this)}toString(){return $A.toNamedMIDIString(this)}toFlattenedInstrument(){let A=(a,h)=>{a.push(...h.filter(B=>!a.some(d=>d.generatorType===B.generatorType)))},t=(a,h)=>{a.push(...h.filter(B=>!a.some(d=>mA.isIdentical(B,d))))},n=new Qt;n.name=this.name;let s=[],i=[],I=this.globalZone;s.push(...I.generators),i.push(...I.modulators);let g=I.keyRange,r=I.velRange;for(let a of this.zones){if(!a.instrument)throw new Error("No instrument in a preset zone.");let h=a.keyRange;a.hasKeyRange||(h=g);let B=a.velRange;a.hasVelRange||(B=r);let d=a.generators.map(N=>new FA(N.generatorType,N.generatorValue));A(d,s);let l=[...a.modulators];t(l,i);let u=a.instrument,f=u.zones,p=[],G=[],R=u.globalZone;p.push(...R.generators),G.push(...R.modulators);let M=R.keyRange,V=R.velRange;for(let N of f){if(!N.sample)throw new Error("No sample in an instrument zone.");let C=N.keyRange;N.hasKeyRange||(C=M);let nA=N.velRange;if(N.hasVelRange||(nA=V),C=ie.subtractRanges(C,h),nA=ie.subtractRanges(nA,B),C.max<C.min||nA.max<nA.min)continue;let AA=N.generators.map(J=>new FA(J.generatorType,J.generatorValue));A(AA,p);let j=[...N.modulators];t(j,G);let H=[...j];for(let J of l){let gA=H.findIndex(aA=>mA.isIdentical(J,aA));gA===-1?H.push(J):H[gA]=H[gA].sumTransform(J)}let Z=AA.map(J=>new FA(J.generatorType,J.generatorValue));for(let J of d){if(J.generatorType===o.velRange||J.generatorType===o.keyRange||J.generatorType===o.instrument||J.generatorType===o.endOper||J.generatorType===o.sampleModes)continue;let gA=AA.findIndex(aA=>aA.generatorType===J.generatorType);if(gA===-1){let aA=XA[J.generatorType].def+J.generatorValue;Z.push(new FA(J.generatorType,aA))}else{let aA=Z[gA].generatorValue+J.generatorValue;Z[gA]=new FA(J.generatorType,aA)}}Z=Z.filter(J=>J.generatorType!==o.sampleID&&J.generatorType!==o.keyRange&&J.generatorType!==o.velRange&&J.generatorType!==o.endOper&&J.generatorType!==o.instrument&&J.generatorValue!==XA[J.generatorType].def);let P=n.createZone(N.sample);P.keyRange=C,P.velRange=nA,P.keyRange.min===0&&P.keyRange.max===127&&(P.keyRange.min=-1),P.velRange.min===0&&P.velRange.max===127&&(P.velRange.min=-1),P.addGenerators(...Z),P.addModulators(...H)}}return n}write(A,t){y(`%cWriting ${this.name}...`,c.info),kA(A.pdta,this.name.slice(0,20),20),kA(A.xdta,this.name.slice(20),20),z(A.pdta,this.program);let n=this.bankMSB;this.isGMGSDrum?n=128:this.bankMSB===0&&(n=this.bankLSB),z(A.pdta,n),A.xdta.currentIndex+=4,z(A.pdta,t&65535),z(A.xdta,t>>16),rA(A.pdta,this.library),rA(A.pdta,this.genre),rA(A.pdta,this.morphology),A.xdta.currentIndex+=12}};function bs(e,A){let t=A?e.find(n=>n.isXGDrums):e.find(n=>n.isGMGSDrum);return t||(e.find(n=>n.isAnyDrums)??e[0])}function mi(e,A,t){if(e.length===0)throw new Error("No presets!");A.isGMGSDrum&&fA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:fA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:i,program:I}=A,g=fA.isSystemXG(t),r=fA.isXGDrums(i)&&g,a=e.find(d=>d.matches(A));if(a&&(!r||r&&a.isXGDrums))return a;let h=d=>{y(`%cPreset %c${$A.toMIDIString(A)}%c not found. (${t}) Replaced with %c${d.toString()}`,c.warn,c.unrecognized,c.warn,c.value)};if(n){let d=e.find(l=>l.isGMGSDrum&&l.program===I);return d||(d=e.find(l=>l.isAnyDrums&&l.program===I),d)?(h(d),d):(d=bs(e,!1),h(d),d)}if(r){let d=e.find(l=>l.program===I&&l.isXGDrums);return d||(d=e.find(l=>l.isAnyDrums&&l.program===I),d)?(h(d),d):(d=bs(e,!0),h(d),d)}let B=e.filter(d=>d.program===I&&!d.isAnyDrums);if(B.length===0)return h(e[0]),e[0];if(a=g?B.find(d=>d.bankLSB===s):B.find(d=>d.bankMSB===i),a)return h(a),a;if(s!==64||!g){let d=Math.max(i,s);if(a=B.find(l=>l.bankLSB===d||l.bankMSB===d),a)return h(a),a}return h(B[0]),B[0]}var ho=class extends ut{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=fA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Co=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){eA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n===void 0?this.soundBankList.push({id:A,soundBank:e,bankOffset:t}):(n.soundBank=e,n.bankOffset=t),this.generatePresetList()}getPreset(e,A){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return mi(this.selectablePresetList,e,A)}destroy(){for(let e of this.soundBankList)e.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;for(let t of this.soundBankList){let n=t.soundBank,s=t.bankOffset;for(let i of n.presets){let I=new ho(i,s);A.has(I.toMIDIString())||(A.add(I.toMIDIString()),e.push(I))}}e.sort($A.sorter.bind($A)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Bo(e,A){switch(this.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.panLeft=1-t,this.panRight=t;break}case"masterGain":break;case"voiceCap":{let t=Math.min(A,1e6);this.masterParameters.voiceCap=t;for(let n=t;n<this.voices.length;n++)this.voices[n].isActive=!1;if(t>this.voices.length){eA(`Allocating ${t-this.voices.length} new voices!`);for(let n=this.voices.length;n<t;n++)this.voices.push(new Bi(this.sampleRate))}break}case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Eo(e){return this.masterParameters[e]}function lo(){return{...this.masterParameters}}function ZA(e,A,t,n,s){y(`%cChannel %c${A}%c ${n}. %c${t} ${s}%c, with %c${ae(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}function zA(e,A){y(`%cUnrecognized %c${A} %cSysEx: %c${ae(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)}function vs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?-1:n+s*61e-6}function Qo(e,A=0){switch(e[2]){case 4:{let t;switch(e[3]){case 1:{let n=e[5]<<7|e[4];this.setMIDIVolume(n/16384),y(`%cMaster Volume. Volume: %c${n}`,c.info,c.value);break}case 2:{let s=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",s),y(`%cMaster Pan. Pan: %c${s}`,c.info,c.value);break}case 3:{let n=(e[5]<<7|e[6])-8192;t=Math.floor(n/81.92),this.setMasterTuning(t),y(`%cMaster Fine Tuning. Cents: %c${t}`,c.info,c.value);break}case 4:{t=(e[5]-64)*100,this.setMasterTuning(t),y(`%cMaster Coarse Tuning. Cents: %c${t}`,c.info,c.value);break}default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${ae(e)}`,c.warn,c.unrecognized)}break}case 9:{e[3]===1?(y("%cGM1 system on",c.info),this.resetAllControllers("gm")):e[3]===3?(y("%cGM2 system on",c.info),this.resetAllControllers("gm2")):(y("%cGM system off, defaulting to GS",c.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(e[3]){case 1:{let n=e[t++],s=oe(e,16,t);if(t+=16,e.length<384){eA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let i=0;i<128;i++)this.tunings[n*128+i]=vs(e[t++],e[t++],e[t++]);y(`%cBulk Tuning Dump %c${s}%c Program: %c${n}`,c.info,c.value,c.info,c.recognized);break}case 2:case 7:{e[3]===7&&t++;let n=e[t++],s=e[t++];for(let i=0;i<s;i++){let I=e[t++];this.tunings[n*128+I]=vs(e[t++],e[t++],e[t++])}y(`%cSingle Note Tuning. Program: %c${n}%c Keys affected: %c${s}`,c.info,c.recognized,c.info,c.recognized);break}case 9:case 8:{let n=new Int8Array(12);if(e[3]===8)for(let s=0;s<12;s++)n[s]=e[7+s]-64;else for(let s=0;s<24;s+=2){let i=(e[7+s]<<7|e[8+s])-8192;n[s/2]=Math.floor(i/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(n),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[5]>>s&1)===1&&this.midiChannels[7+s+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[6]>>s&1)===1&&this.midiChannels[s+A].setOctaveTuning(n);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${n.join(" ")}`,c.info,c.value);break}default:{zA(e,"MIDI Tuning Standard");break}}break}default:zA(e,"General MIDI")}}function uo(e,A=0){if(e[3]===18)switch(e[2]){case 66:{let t=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n];switch(e[6]){default:{zA(e,"Roland GS");break}case 21:{let i=t>0&&e[5]>>4>0;s.setGSDrums(i),y(`%cChannel %c${n}%c ${i?"is now a drum channel":"now isn't a drum channel"}%c via: %c${ae(e)}`,c.info,c.value,c.recognized,c.info,c.value);return}case 22:{let i=t-64;s.setCustomController(oA.channelKeyShift,i),ZA(e,n,i,"key shift","keys");return}case 28:{let i=t;i===0?(s.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${n}`,c.info,c.recognized,c.info,c.value)):(s.randomPan=!1,s.controllerChange(S.pan,i));break}case 33:{s.controllerChange(S.chorusDepth,t);break}case 34:{s.controllerChange(S.reverbDepth,t);break}case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let i=e.length-9,I=new Int8Array(12);for(let r=0;r<i;r++)I[r]=e[r+7]-64;s.setOctaveTuning(I);let g=t-64;ZA(e,n,I.join(" "),"octave scale tuning","cents"),s.setTuning(g);break}}return}else if((e[5]&32)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n],i=t-64,I=i/64,g=t/128,r=(a,h,B=!1)=>{switch(e[6]&15){case 0:{a===uA+W.pitchWheel?(s.controllerChange(S.registeredParameterMSB,0),s.controllerChange(S.registeredParameterLSB,0),s.controllerChange(S.dataEntryMSB,Math.floor(i))):(s.sysExModulators.setModulator(a,o.fineTune,i*100,B),ZA(e,n,i,`${h} pitch control`,"semitones"));break}case 1:{s.sysExModulators.setModulator(a,o.initialFilterFc,I*9600,B),ZA(e,n,I*9600,`${h} pitch control`,"cents");break}case 2:{s.sysExModulators.setModulator(a,o.initialAttenuation,I*960,B),ZA(e,n,I*960,`${h} amplitude`,"cB");break}case 4:{s.sysExModulators.setModulator(a,o.vibLfoToPitch,g*600,B),ZA(e,n,g*600,`${h} LFO1 pitch depth`,"cents");break}case 5:{s.sysExModulators.setModulator(a,o.vibLfoToFilterFc,g*2400,B),ZA(e,n,g*2400,`${h} LFO1 filter depth`,"cents");break}case 6:{s.sysExModulators.setModulator(a,o.vibLfoToVolume,I*960,B),ZA(e,n,I*960,`${h} LFO1 amplitude depth`,"cB");break}case 8:{s.sysExModulators.setModulator(a,o.modLfoToPitch,g*600,B),ZA(e,n,g*600,`${h} LFO2 pitch depth`,"cents");break}case 9:{s.sysExModulators.setModulator(a,o.modLfoToFilterFc,g*2400,B),ZA(e,n,g*2400,`${h} LFO2 filter depth`,"cents");break}case 10:{s.sysExModulators.setModulator(a,o.modLfoToVolume,I*960,B),ZA(e,n,I*960,`${h} LFO2 amplitude depth`,"cB");break}}};switch(e[6]&240){default:{zA(e,"Roland GS");break}case 0:{r(S.modulationWheel,"mod wheel");break}case 16:{r(uA+W.pitchWheel,"pitch wheel",!0);break}case 32:{r(uA+W.channelPressure,"channel pressure");break}case 48:{r(uA+W.polyPressure,"poly pressure");break}}return}else if(e[5]===0){switch(e[6]){default:{zA(e,"Roland GS");break}case 127:{t===0?(y("%cGS Reset received!",c.info),this.resetAllControllers("gs")):t===127&&(y("%cGS system off, switching to GM",c.info),this.resetAllControllers("gm"));break}case 6:{y(`%cRoland GS Master Pan set to: %c${t}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter("masterPan",(t-64)/64);break}case 4:{y(`%cRoland GS Master Volume set to: %c${t}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(t/127);break}case 5:{let n=t-64;y(`%cRoland GS Master Key-Shift set to: %c${n}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(n*100);break}}return}else if(e[5]===1)switch(e[6]){default:{zA(e,"Roland GS");break}case 0:{let n=oe(e,16,7);y(`%cGS Patch name: %c${n}`,c.info,c.value);break}case 51:{y(`%cGS Reverb level: %c${t}`,c.info,c.value),this.reverbSend=t/64;break}case 48:case 49:case 50:case 52:case 53:case 55:{y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}case 58:{y(`%cGS Chorus level: %c${t}`,c.info,c.value),this.chorusSend=t/64;break}case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:{y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}}else zA(e,"Roland GS");return}case 69:{e[4]===16&&(e[5]===0?this.callEvent("synthDisplay",[...e]):e[5]===1?this.callEvent("synthDisplay",[...e]):zA(e,"Roland GS"));return}case 22:if(e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${ae(e)}`,c.info,c.value,c.info,c.value);return}}else{zA(e,"Roland GS");return}}function fo(e,A=0){if(e[2]===76){let t=e[3],n=e[4];if(t===0&&n===0)switch(e[5]){case 0:{{let i=(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10;this.setMasterTuning(i),y(`%cXG master tune. Cents: %c${i}`,c.info,c.recognized)}break}case 4:{let s=e[6];this.setMIDIVolume(s/127),y(`%cXG master volume. Volume: %c${s}`,c.info,c.recognized);break}case 5:{let s=127-e[6];this.setMIDIVolume(s/127),y(`%cXG master attenuation. Volume: %c${s}`,c.info,c.recognized);break}case 6:{let s=e[6]-64;this.setMasterParameter("transposition",s),y(`%cXG master transpose. Volume: %c${s}`,c.info,c.recognized);break}case 126:{y("%cXG system on",c.info),this.resetAllControllers("xg");break}}else if(t===2&&n===1){let s,i=e[5];i<=21?s="Reverb":i<=35?s="Chorus":s="Variation",y(`%cUnsupported XG ${s} Parameter: %c${i.toString(16)}`,c.warn,c.unrecognized)}else if(t===8){if(!fA.isSystemXG(this.masterParameters.midiSystem))return;let s=n+A;if(s>=this.midiChannels.length)return;let i=this.midiChannels[s],I=e[6];switch(e[5]){case 1:{i.controllerChange(S.bankSelect,I);break}case 2:{i.controllerChange(S.bankSelectLSB,I);break}case 3:{i.programChange(I);break}case 7:{i.setDrums(I!=0);break}case 8:{if(i.drumChannel)break;i.setCustomController(oA.channelKeyShift,I-64);break}case 11:{i.controllerChange(S.mainVolume,I);break}case 14:{let g=I;g===0?(i.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${s}`,c.info,c.recognized,c.info,c.value)):i.controllerChange(S.pan,g);break}case 17:{i.controllerChange(S.mainVolume,I);break}case 18:{i.controllerChange(S.chorusDepth,I);break}case 19:{i.controllerChange(S.reverbDepth,I);break}case 21:{i.controllerChange(S.vibratoRate,I);break}case 22:{i.controllerChange(S.vibratoDepth,I);break}case 23:{i.controllerChange(S.vibratoDelay,I);break}case 24:{i.controllerChange(S.brightness,I);break}case 25:{i.controllerChange(S.filterResonance,I);break}case 26:{i.controllerChange(S.attackTime,I);break}case 27:{i.controllerChange(S.decayTime,I);break}case 28:{i.controllerChange(S.releaseTime,I);break}default:y(`%cUnsupported Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}%c for channel ${s}`,c.warn,c.unrecognized,c.warn)}}else t===6||t===7?this.callEvent("synthDisplay",[...e]):fA.isSystemXG(this.masterParameters.midiSystem)&&zA(e,"Yamaha XG")}else zA(e,"Yamaha")}function mo(e,A){let t=e[0];if(!(this.masterParameters.deviceID!==Qe&&e[1]!==127&&this.masterParameters.deviceID!==e[1]))switch(t){default:{y(`%cUnrecognized SysEx: %c${ae(e)} (unknown manufacturer)`,c.warn,c.unrecognized);break}case 126:case 127:{Qo.call(this,e,A);break}case 65:{uo.call(this,e,A);break}case 67:{fo.call(this,e,A);break}}}var So=.01,po=.05,yo=class{voices;midiChannels=[];soundBankManager=new Co(this.updatePresetList.bind(this));keyModifierManager=new Ga;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters=ai;currentTime=0;midiVolume=1;reverbSend=1;enableEffects;enableEventSystem;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Bo.bind(this);getMasterParameter=Eo.bind(this);getAllMasterParameters=lo.bind(this);systemExclusive=mo.bind(this);voiceCount=0;lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(e,A,t,n){this.eventCallbackHandler=e,this.missingPresetHandler=A,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=n.initialTime,this.enableEffects=n.enableEffects,this.enableEventSystem=n.enableEventSystem,this.gainSmoothingFactor=So*(44100/t),this.panSmoothingFactor=po*(44100/t),ri.initCache(this.sampleRate),this.voices=[];for(let s=0;s<this.masterParameters.voiceCap;s++)this.voices.push(new Bi(this.sampleRate))}assignVoice(){for(let A=0;A<this.masterParameters.voiceCap;A++){let t=this.voices[A];if(!t.isActive)return t.priority=1/0,t}this.assignVoicePriorities();let e=this.voices[0];for(let A=0;A<this.masterParameters.voiceCap;A++){let t=this.voices[A];t.priority<e.priority&&(e=t)}return e.priority=1/0,e}stopAllChannels(e){y("%cStop all received!",c.info);for(let A of this.midiChannels)A.stopAllNotes(e)}processMessage(e,A,t,n){let s=()=>{let I=_n(e[0]),g=I.channel+A;switch(I.status){case F.noteOn:{let r=e[2];r>0?this.midiChannels[g].noteOn(e[1],r):this.midiChannels[g].noteOff(e[1]);break}case F.noteOff:{t?this.midiChannels[g].killNote(e[1]):this.midiChannels[g].noteOff(e[1]);break}case F.pitchWheel:{this.midiChannels[g].pitchWheel(e[2]<<7|e[1]);break}case F.controllerChange:{this.midiChannels[g].controllerChange(e[1],e[2]);break}case F.programChange:{this.midiChannels[g].programChange(e[1]);break}case F.polyPressure:{this.midiChannels[g].polyPressure(e[0],e[1]);break}case F.channelPressure:{this.midiChannels[g].channelPressure(e[1]);break}case F.systemExclusive:{this.systemExclusive(new O(e.slice(1)),A);break}case F.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}},i=n.time;i>this.currentTime?(this.eventQueue.push({callback:s.bind(this),time:i}),this.eventQueue.sort((I,g)=>I.time-g.time)):s()}destroySynthProcessor(){this.voices.length=0;for(let e of this.midiChannels)e.lockedControllers=[],e.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(e,A,t){let n=this.midiChannels[e],s=this.keyModifierManager.hasOverridePatch(e,A),i=n.preset;if(s){let I=this.keyModifierManager.getPatch(e,A);i=this.soundBankManager.getPreset(I,this.masterParameters.midiSystem)}return i?this.getVoicesForPreset(i,A,t):[]}createMIDIChannel(e){let A=new oo(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),A.setDrums(!0))}resetAllControllers(e=jn){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",e),this.tunings.fill(-1),this.setMIDIVolume(1),this.reverbSend=1,this.chorusSend=1,!(!this.drumPreset||!this.defaultPreset))for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[uA+W.pitchWheel]){let n=this.midiChannels[A].midiControllers[uA+W.pitchWheel];this.callEvent("pitchWheel",{channel:A,pitch:n,midiNote:-1})}if(!this.midiChannels[A].lockedControllers[uA+W.channelPressure]){let n=this.midiChannels[A].midiControllers[uA+W.channelPressure]>>7;this.callEvent("channelPressure",{channel:A,pressure:n})}}}renderAudio(e,A,t,n=0,s=0){if(this.eventQueue.length>0){let B=this.currentTime;for(;this.eventQueue[0]?.time<=B;)this.eventQueue.shift()?.callback()}let i=A[0],I=A[1],g=t[0],r=t[1];n=Math.max(n,0);let a=s||e[0].length-n;for(let B of this.midiChannels)B.clearVoiceCount();this.voiceCount=0;let h=this.masterParameters.voiceCap;for(let B=0;B<h;B++){let d=this.voices[B];if(!d.isActive)continue;let l=this.midiChannels[d.channel];l.isMuted||(l.voiceCount++,this.voiceCount++,l.renderVoice(d,this.currentTime,e[0],e[1],i,I,g,r,n,a))}for(let B of this.midiChannels)B.updateVoiceCount();this.currentTime+=a*this.sampleTime}renderAudioSplit(e,A,t,n=0,s=0){if(this.eventQueue.length>0){let B=this.currentTime;for(;this.eventQueue[0]?.time<=B;)this.eventQueue.shift()?.callback()}let i=e[0],I=e[1],g=A[0],r=A[1];n=Math.max(n,0);let a=s||t[0][0].length-n;for(let B of this.midiChannels)B.clearVoiceCount();this.voiceCount=0;let h=this.masterParameters.voiceCap;for(let B=0;B<h;B++){let d=this.voices[B];if(!d.isActive)continue;let l=this.midiChannels[d.channel];if(l.isMuted)continue;let u=d.channel%t.length;l.voiceCount++,this.voiceCount++,l.renderVoice(d,this.currentTime,t[u][0],t[u][1],i,I,g,r,n,a)}for(let B of this.midiChannels)B.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(e,A,t){let n=this.getCachedVoice(e,A,t);if(n!==void 0)return n;let s=new Array;for(let i of e.getVoiceParameters(A,t)){let I=i.sample;if(i.sample.getAudioData()===void 0){eA(`Discarding invalid sample: ${I.name}`);continue}s.push(new Oa(i,A,t,this.sampleRate))}return this.setCachedVoice(e,A,t,s),s}clearCache(){this.cachedVoices.clear()}callEvent(e,A){this.eventCallbackHandler(e,A)}setMIDIVolume(e){this.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(oA.masterTuning,e)}getCachedVoice(e,A,t){return this.cachedVoices.get(this.getCachedVoiceIndex(e,A,t))}setCachedVoice(e,A,t,n){this.cachedVoices.set(this.getCachedVoiceIndex(e,A,t),n)}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;this.lastPriorityAssignmentTime=this.currentTime;let e=this.masterParameters.voiceCap;for(let A=0;A<e;A++){let t=this.voices[A];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",e),this.getDefaultPresets();for(let A of this.midiChannels)A.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:i,program:I}=e;return i&&(n=128,s=0),n+s*128+I*16384+2097152*A+268435456*t}},kn=20;async function ko(e,A,t,n,s,i,I){let g=0,r=0,a=[];for(let d of e.samples){n&&i&&await d.compressSample(i),s&&d.setAudioData(d.getAudioData(),d.sampleRate);let l=d.getRawData(!0);g++,await I?.(d.name,g,e.samples.length),y(`%cEncoded sample %c${g}. ${d.name}%c of %c${e.samples.length}%c. Compressed: %c${d.isCompressed}%c.`,c.info,c.recognized,c.info,c.recognized,c.info,d.isCompressed?c.recognized:c.unrecognized,c.info),r+=l.length+(d.isCompressed?0:92),a.push(l)}r%2!==0&&r++;let h=new O(r+kn);kA(h,"LIST"),lt(h,r+kn-8,4),kA(h,"sdta"),kA(h,"smpl"),lt(h,r,4);let B=0;for(let[d,l]of e.samples.entries()){let u=a[d];h.set(u,B+kn);let f,p;l.isCompressed?(f=B,p=f+u.length):(f=B/2,p=f+u.length/2,B+=92),B+=u.length,A.push(f),t.push(p)}return h}var Do=48e3,zt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,i,I){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=i,this.loopEnd=I,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===wA.rightSample||this.sampleType===wA.leftSample||this.sampleType===wA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Do),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){eA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(wA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=e,e.linkedSample=this,A){case wA.leftSample:{this.setSampleType(wA.leftSample),e.setSampleType(wA.rightSample);break}case wA.rightSample:{this.setSampleType(wA.rightSample),e.setSampleType(wA.leftSample);break}case wA.linkedSample:{this.setSampleType(wA.linkedSample),e.setSampleType(wA.linkedSample);break}default:throw new Error("Invalid sample type: "+A)}}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A===-1){eA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new O(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Zt.decode(this.compressedData).data[0];if(A===void 0)return eA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return eA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},wo=class extends zt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},On=16,Fo=class extends zt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,i,I,g,r,a,h,B){let d=(a&On)>0;a&=~On,super(e,i,I,g,a,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=B;let l=h instanceof O?h.currentIndex:0;h instanceof O?d?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(h.slice(this.startByteOffset/2+l,this.endByteOffset/2+l))):this.s16leData=h.slice(l+this.startByteOffset,l+this.endByteOffset):this.setAudioData(h.slice(this.startByteOffset/2,this.endByteOffset/2),i),this.linkedSampleIndex=r}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(y(`%cInvalid linked sample for ${this.name}: ${A.name} is already linked to ${A.linkedSample.name}`,c.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(y(`%cInvalid linked sample for ${this.name}. Setting to mono.`,c.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let e=this.endByteOffset-this.startByteOffset;if(e<1)return eA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let[n,s]of t.entries())A[n]=s/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function Ls(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let i=Go(s,e.data,A);n.push(i),s++}if(n.pop(),t)for(let i of n)i.getLinkedSample(n);return n}function Go(e,A,t){let n=BA(A,20),s=L(A,4)*2,i=L(A,4)*2,I=L(A,4),g=L(A,4),r=L(A,4),a=A[A.currentIndex++];a>127&&(a=60);let h=qi(A[A.currentIndex++]),B=L(A,2),d=L(A,2);return new Fo(n,s,i,I,g,r,a,h,B,d,t,e)}function Ro(e,A,t){let s=46*(e.samples.length+1),i=new O(s),I=new O(s),g=0;for(let[h,B]of e.samples.entries()){kA(i,B.name.slice(0,20),20),kA(I,B.name.slice(20),20);let d=A[h];rA(i,d),I.currentIndex+=4;let l=t[h];rA(i,l),I.currentIndex+=4;let u=B.loopStart+d,f=B.loopEnd+d;B.isCompressed&&(u-=d,f-=d),rA(i,u),rA(i,f),rA(i,B.sampleRate),i[i.currentIndex++]=B.originalKey,i[i.currentIndex++]=B.pitchCorrection,I.currentIndex+=14;let p=B.linkedSample?e.samples.indexOf(B.linkedSample):0;z(i,Math.max(0,p)&65535),z(I,Math.max(0,p)>>16),g=Math.max(g,p);let G=B.sampleType;B.isCompressed&&(G|=On),z(i,G),I.currentIndex+=2}kA(i,"EOS",46),kA(I,"EOS",46);let r=IA("shdr",i),a=IA("shdr",I);return{pdta:r,xdta:a}}function Ns(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",i=A?"pbag":"ibag",I=A?"phdr":"inst",g=A?co:Io,r=0,a=new Array,h=0,B=new Array,d=new Array,l=new Array,u=0,f=new Array,p=j=>{a.push(r);let H=j.getWriteGenerators(e);r+=H.length,d.push(...H),B.push(h);let Z=j.modulators;h+=Z.length,l.push(...Z)};for(let j of t){f.push(u),p(j.globalZone);for(let H of j.zones)p(H);u+=j.zones.length+1}d.push(new FA(0,0,!1)),l.push(new QA(0,0,0,0,0)),a.push(r),B.push(h),f.push(u);let G=d.length*Ms,R=new O(G);for(let j of d)j.write(R);let M=l.length*Et,V=new O(M);for(let j of l)j.write(V);let N=B.length*ro,C={pdta:new O(N),xdta:new O(N)};for(let[j,H]of B.entries()){let Z=a[j];z(C.pdta,Z&65535),z(C.pdta,H&65535),z(C.xdta,Z>>16),z(C.xdta,H>>16)}let nA=(t.length+1)*g,AA={pdta:new O(nA),xdta:new O(nA)};for(let[j,H]of t.entries())H.write(AA,f[j]);return A?(kA(AA.pdta,"EOP",20),AA.pdta.currentIndex+=4,z(AA.pdta,u&65535),AA.pdta.currentIndex+=12,kA(AA.xdta,"",20),AA.xdta.currentIndex+=4,z(AA.xdta,u>>16),AA.xdta.currentIndex+=12):(kA(AA.pdta,"EOI",20),z(AA.pdta,u&65535),kA(AA.xdta,"",20),z(AA.xdta,u>>16)),{writeXdta:Math.max(r,h,u)>65535,gen:{pdta:IA(n,R),xdta:IA(s,new O(Ms))},mod:{pdta:IA(s,V),xdta:IA(s,new O(Et))},bag:{pdta:IA(i,C.pdta),xdta:IA(i,C.xdta)},hdr:{pdta:IA(I,AA.pdta),xdta:IA(I,AA.xdta)}}}var Kn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function Mo(e,A=Kn){let t=zn(A,Kn);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}RA("%cSaving soundbank...",c.info),y(`%cCompression: %c${t?.compress||"false"}%c`,c.info,c.recognized,c.info,c.recognized),HA("%cWriting INFO...",c.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(M=>M.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(M,V)=>{n.push(IA(M,re(V,!0,!0)))},i=new O(4);if(z(i,e.soundBankInfo.version.major),z(i,e.soundBankInfo.version.minor),n.push(IA("ifil",i)),e.soundBankInfo.romVersion){let M=new O(4);z(M,e.soundBankInfo.romVersion.major),z(M,e.soundBankInfo.romVersion.minor),n.push(IA("iver",M))}let I=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
7
- ${e.soundBankInfo.subject}`:"");for(let[M,V]of Object.entries(e.soundBankInfo)){let N=M,C=V;if(C)switch(N){case"name":{s("INAM",C);break}case"comment":{s("ICMT",I);break}case"copyright":{s("ICOP",C);break}case"creationDate":{s("ICRD",C.toISOString());break}case"engineer":{s("IENG",C);break}case"product":{s("IPRD",C);break}case"romInfo":{s("irom",C);break}case"software":{s("ISFT",C);break}case"soundEngine":{s("isng",C);break}case"subject":break}}if(e.defaultModulators.some(M=>!Ci.some(V=>mA.isIdentical(V,M,!0)))&&t?.writeDefaultModulators){let M=e.defaultModulators;y(`%cWriting %c${M.length}%c default modulators...`,c.info,c.recognized,c.info);let V=Et+M.length*Et,N=new O(V);for(let C of M)C.write(N);lt(N,0,Et),n.push(IA("DMOD",N))}X(),y("%cWriting SDTA...",c.info);let r=[],a=[],h=await ko(e,r,a,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",c.info),y("%cWriting SHDR...",c.info);let B=Ro(e,r,a);HA("%cWriting instruments...",c.info);let d=Ns(e,!1);X(),HA("%cWriting presets...",c.info);let l=Ns(e,!0);X();let u=[l.hdr,l.bag,l.mod,l.gen,d.hdr,d.bag,d.mod,d.gen,B],f=MA("pdta",u.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(d.writeXdta||l.writeXdta||e.presets.some(M=>M.name.length>20)||e.instruments.some(M=>M.name.length>20)||e.samples.some(M=>M.name.length>20))){y("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",c.info,c.value);let M=MA("xdta",u.map(V=>V.xdta),!0);n.push(M)}let G=MA("INFO",n,!0);y("%cWriting the output file...",c.info);let R=MA("RIFF",[re("sfbk"),G,h,f]);return y(`%cSaved succesfully! Final file size: %c${R.length}`,c.info,c.recognized),X(),R.buffer}var At=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw X(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(BA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(iA(e.data));return t}},ht=20,Dn=16,_e=class Bt extends At{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Bt;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Bt,n=L(A.data,4);if(n!==ht&&eA(`Wsmp cbSize mismatch: got ${n}, expected ${ht}.`),t.unityNote=L(A.data,2),t.fineTune=Wn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=L(A.data,4)|0,t.fulOptions=L(A.data,4),L(A.data,4)!==0){let i=L(A.data,4);i!==Dn&&eA(`CbSize for loop in wsmp mismatch. Expected ${ht}, got ${i}.`);let I=L(A.data,4),g=L(A.data,4),r=L(A.data,4);t.loops.push({loopStart:g,loopLength:r,loopType:I})}return t}static fromSFSample(A){let t=new Bt;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ks.forward}),t}static fromSFZone(A){let t=new Bt;t.unityNote=A.getGenerator(o.overridingRootKey,A.sample.originalKey),A.getGenerator(o.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(o.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(o.sampleModes,0);if(s!==0){let i=A.sample.loopStart+A.getGenerator(o.startloopAddrsOffset,0)+A.getGenerator(o.startloopAddrsCoarseOffset,0)*32768,I=A.sample.loopEnd+A.getGenerator(o.endloopAddrsOffset,0)+A.getGenerator(o.endloopAddrsCoarseOffset,0)*32768,g;switch(s){case 1:default:{g=0;break}case 3:g=1}t.loops.push({loopType:g,loopStart:i,loopLength:I-i})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ks.loopAndRelease?3:1),n!==0&&A.setGenerator(o.sampleModes,n);let g=-(this.gain>>16)/.4;if(g!==0&&A.setGenerator(o.initialAttenuation,g),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(o.overridingRootKey,this.unityNote),s){let r=s.loopStart-t.loopStart,h=s.loopStart+s.loopLength-t.loopEnd;if(r!==0){let B=r%32768;A.setGenerator(o.startloopAddrsOffset,B);let d=Math.trunc(r/32768);d!==0&&A.setGenerator(o.startloopAddrsCoarseOffset,d)}if(h!==0){let B=h%32768;A.setGenerator(o.endloopAddrsOffset,B);let d=Math.trunc(h/32768);d!==0&&A.setGenerator(o.endloopAddrsCoarseOffset,d)}}}write(){let A=new O(ht+this.loops.length*Dn);rA(A,ht),z(A,this.unityNote),z(A,this.fineTune),rA(A,this.gain),rA(A,this.fulOptions),rA(A,this.loops.length);for(let t of this.loops)rA(A,Dn),rA(A,t.loopType),rA(A,t.loopStart),rA(A,t.loopLength);return IA("wsmp",A)}},wn={PCM:1,ALAW:6};function bo(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,i=!1;A===1?(s=255,i=!0):s=t;let I=e.length/A,g=new Float32Array(I);if(A===2){let r=new Int16Array(e.buffer);for(let[a,h]of r.entries())g[a]=h/32768}else for(let r=0;r<g.length;r++){let a=L(e,A);i?g[r]=a/s-.5:(a>=t&&(a-=n),g[r]=a/s)}return g}function vo(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let i=L(e,A),I=i^85;I&=127;let g=I>>4,r=I&15;g>0&&(r+=16),r=(r<<4)+8,g>1&&(r=r<<g-1);let a=i>127?r:-r;n[s]=a/32678}return n}var Lo=class extends zt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,i,I,g,r){super(e,A,t,n,wA.monoSample,s,i),this.dataOverridden=!1,this.rawData=I.data,this.wFormatTag=g,this.bytesPerSample=r}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let e;switch(this.wFormatTag){default:{eA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break}case wn.PCM:{e=bo(this.rawData,this.bytesPerSample);break}case wn.ALAW:{e=vo(this.rawData,this.bytesPerSample);break}}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===wn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ts=class Pn extends At{waveSample=new _e;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(l=>l.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=L(n.data,2),i=L(n.data,2);if(i!==1)throw new Error(`Only mono samples are supported. Fmt reports ${i} channels.`);let I=L(n.data,4);L(n.data,4),L(n.data,2);let r=L(n.data,2)/8,a=t.find(l=>l.header==="data");if(!a)throw new Error("No data chunk in the WAVE chunk!");let h=new Pn(s,r,I,a),B=De(t,"INFO");if(B){let l=iA(B.data);for(;l.header!=="INAM"&&B.data.currentIndex<B.data.length;)l=iA(B.data);l.header==="INAM"&&(h.name=BA(l.data,l.size).trim())}let d=t.find(l=>l.header==="wsmp");return d&&(h.waveSample=_e.read(d)),h}static fromSFSample(A){let t=A.getRawData(!1),n=new Pn(1,2,A.sampleRate,new Vs("data",t.length,new O(t.buffer)));return n.name=A.name,n.waveSample=_e.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let i=0,I=0,g=this.waveSample.loops?.[0];g&&(i=g.loopStart,I=g.loopStart+g.loopLength);let r=new Lo(this.name,this.sampleRate,t,n,i,I,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(r)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=IA("data",this.dataChunk.data),s=IA("INAM",re(this.name,!0)),i=IA("INFO",s,!1,!0);return y(`%cSaved %c${this.name}%c successfully!`,c.recognized,c.value,c.recognized),MA("wave",[A,t,n,i],!0)}writeFmt(){let A=new O(18);return z(A,this.wFormatTag),z(A,1),rA(A,this.sampleRate),rA(A,this.sampleRate*2),z(A,2),z(A,this.bytesPerSample*8),IA("fmt ",A)}},Si=new QA(219,0,o.reverbEffectsSend,1e3,0),pi=new QA(221,0,o.chorusEffectsSend,1e3,0),No=new QA(129,0,o.vibLfoToPitch,0,0),To=new QA(13,0,o.vibLfoToPitch,0,0),WA=class Vn{source;transform;bipolar;invert;constructor(A=U.none,t=CA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(U).find(A=>U[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(CA).find(A=>CA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new Vn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case S.modulationWheel:{t=U.modulationWheel;break}case S.mainVolume:{t=U.volume;break}case S.pan:{t=U.pan;break}case S.expressionController:{t=U.expression;break}case S.chorusDepth:{t=U.chorus;break}case S.reverbDepth:{t=U.reverb;break}}else switch(A.index){case W.noController:{t=U.none;break}case W.noteOnKeyNum:{t=U.keyNum;break}case W.noteOnVelocity:{t=U.velocity;break}case W.pitchWheel:{t=U.pitchWheel;break}case W.pitchWheelRange:{t=U.pitchWheelRange;break}case W.polyPressure:{t=U.polyPressure;break}case W.channelPressure:t=U.channelPressure}if(t!==void 0)return new Vn(t,A.curveType,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let A,t=!1;switch(this.source){default:case U.modLfo:case U.vibratoLfo:case U.coarseTune:case U.fineTune:case U.modEnv:return;case U.keyNum:{A=W.noteOnKeyNum;break}case U.none:{A=W.noController;break}case U.modulationWheel:{A=S.modulationWheel,t=!0;break}case U.pan:{A=S.pan,t=!0;break}case U.reverb:{A=S.reverbDepth,t=!0;break}case U.chorus:{A=S.chorusDepth,t=!0;break}case U.expression:{A=S.expressionController,t=!0;break}case U.volume:{A=S.mainVolume,t=!0;break}case U.velocity:{A=W.noteOnVelocity;break}case U.polyPressure:{A=W.polyPressure;break}case U.channelPressure:{A=W.channelPressure;break}case U.pitchWheel:{A=W.pitchWheel;break}case U.pitchWheelRange:{A=W.pitchWheelRange;break}}if(A!==void 0)return new _A(A,this.transform,t,this.bipolar,this.invert)}},Uo=new Set([o.sampleModes,o.initialAttenuation,o.keyRange,o.velRange,o.sampleID,o.fineTune,o.coarseTune,o.startAddrsOffset,o.startAddrsCoarseOffset,o.endAddrOffset,o.endAddrsCoarseOffset,o.startloopAddrsOffset,o.startloopAddrsCoarseOffset,o.endloopAddrsOffset,o.endloopAddrsCoarseOffset,o.overridingRootKey,o.exclusiveClass]),Ct=class ve{source;control;destination;scale;transform;constructor(A=new WA,t=new WA,n,s,i){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=i}get isStaticParameter(){return this.source.source===U.none&&this.control.source===U.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(CA).find(A=>CA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(w).find(A=>w[A]===this.destination)??this.destination.toString()}static read(A){let t=L(A,2),n=L(A,2),s=L(A,2),i=L(A,2),I=L(A,4)|0,g=i&15,r=i>>4&15,a=Le(i,8),h=Le(i,9),B=new WA(n,r,a,h),d=i>>10&15,l=Le(i,14),u=Le(i,15),f=new WA(t,d,l,u);return new ve(f,B,s,g,I)}static fromSFModulator(A,t){let n=h=>{eA(`Failed converting SF modulator into DLS:
5
+ amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){z(A,this.primarySource.toSourceEnum()),z(A,this.destination),z(A,this.transformAmount),z(A,this.secondarySource.toSourceEnum()),z(A,this.transformType),t&&t.mod++}sumTransform(A){let t=On.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},QA=class extends mA{constructor(e,A,t,n,s){let i=(e===219||e===221)&&A===0&&(t===o.reverbEffectsSend||t===o.chorusEffectsSend),I=e===hi&&A===0&&t===o.initialFilterQ;super(_A.fromSourceEnum(e),_A.fromSourceEnum(A),t,n,s,i,I),this.destination>ma&&(this.destination=o.INVALID)}},mn=960,Sn=CA.concave,Ta=[new QA(VA(Sn,!1,!0,!1,W.noteOnVelocity),0,o.initialAttenuation,mn,0),new QA(129,0,o.vibLfoToPitch,50,0),new QA(VA(Sn,!1,!0,!0,S.mainVolume),0,o.initialAttenuation,mn,0),new QA(13,0,o.vibLfoToPitch,50,0),new QA(526,16,o.fineTune,12700,0),new QA(650,0,o.pan,500,0),new QA(VA(Sn,!1,!0,!0,S.expressionController),0,o.initialAttenuation,mn,0),new QA(219,0,o.reverbEffectsSend,200,0),new QA(221,0,o.chorusEffectsSend,200,0)],Ua=[new QA(VA(CA.linear,!1,!1,!0,S.tremoloDepth),0,o.modLfoToVolume,24,0),new QA(VA(CA.convex,!0,!1,!0,S.attackTime),0,o.attackVolEnv,6e3,0),new QA(VA(CA.linear,!0,!1,!0,S.releaseTime),0,o.releaseVolEnv,3600,0),new QA(VA(CA.linear,!0,!1,!0,S.decayTime),0,o.decayVolEnv,3600,0),new QA(VA(CA.linear,!0,!1,!0,S.brightness),0,o.initialFilterFc,9600,0),new QA(hi,0,o.initialFilterQ,200,0),new QA(VA(CA.switch,!1,!1,!0,S.softPedal),0,o.initialAttenuation,50,0),new QA(VA(CA.switch,!1,!1,!0,S.softPedal),0,o.initialFilterFc,-2400,0),new QA(VA(CA.linear,!0,!1,!0,S.balance),0,o.pan,500,0)],Ci=[...Ta,...Ua],os=class{isLooping=!1;sampleData;playbackStep=0;loopStart=0;loopEnd=0;loopLength=0;end=0;cursor=0},xa=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopEnd:i,loopLength:I,loopStart:g,end:r}=this,a=this.cursor;if(this.isLooping)for(let h=0;h<e;h++){a>g&&(a=g+(a-g)%I);let B=a|0,d=B+1;d>=i&&(d-=I);let l=a-B,u=s[d],f=s[B];t[h]=f+(u-f)*l,a+=n}else for(let h=0;h<e;h++){let B=a|0,d=B+1;if(d>=r)return!1;let l=a-B,u=s[d],f=s[B];t[h]=f+(u-f)*l,a+=n}return this.cursor=a,!0}},Ha=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopLength:i,loopStart:I,end:g}=this,r=this.cursor;if(this.isLooping)for(let a=0;a<e;a++)r>I&&(r=I+(r-I)%i),t[a]=s[r|0],r+=n;else for(let a=0;a<e;a++){if(r>=g)return!1;t[a]=s[r|0],r+=n}return this.cursor=r,!0}},Ya=class extends os{process(e,A,t){let n=A*this.playbackStep,s=this.sampleData,{loopEnd:i,loopLength:I,loopStart:g,end:r}=this,a=this.cursor;if(this.isLooping)for(let h=0;h<e;h++){a>g&&(a=g+(a-g)%I);let B=a|0,d=B+1,l=B+2,u=B+3,f=a-B;d>=i&&(d-=I),l>=i&&(l-=I),u>=i&&(u-=I);let p=s[B],G=s[d],R=s[l],M=s[u],V=(R-p)*.5,N=G-R,C=V+N,nA=C+N+(M-G)*.5,AA=C+nA;t[h]=((nA*f-AA)*f+V)*f+G,a+=n}else for(let h=0;h<e;h++){let B=a|0,d=B+1,l=B+2,u=B+3,f=a-B;if(u>=r)return!1;let p=s[B],G=s[d],R=s[l],M=s[u],V=(R-p)*.5,N=G-R,C=V+N,nA=C+N+(M-G)*.5,AA=C+nA;t[h]=((nA*f-AA)*f+V)*f+G,a+=n}return this.cursor=a,!0}},Ja=-2320,Oa=1e3/200,Bi=class{oscillators=[new xa,new Ha,new Ya];wavetable=this.oscillators[ai.interpolationType];filter;generators=new Int16Array(_e);modulatedGenerators=new Int16Array(_e);modulators=new Array;modulatorValues=new Int16Array(64);modEnv=new Na;volEnv;buffer=new Float32Array(128);resonanceOffset=0;priority=0;isActive=!1;hasRendered=!1;isInRelease=!1;isHeld=!1;channel=0;velocity=0;midiNote=0;rootKey=0;targetKey=0;pressure=0;gainModifier=1;loopingMode=0;startTime=0;releaseStartTime=1/0;tuningCents=0;tuningRatio=1;currentPan=0;realKey=60;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;overrideReleaseVolEnv=0;constructor(e){this.volEnv=new La(e),this.filter=new ri(e)}computeModulator(e,A,t){let n=this.modulators[t];if(n.transformAmount===0)return this.modulatorValues[t]=0,0;let s=n.primarySource.getValue(e,A,this),i=n.secondarySource.getValue(e,A,this),I=n.transformAmount;n.isEffectModulator&&I<=1e3&&(I*=Oa,I=Math.min(I,1e3));let g=s*i*I;return n.transformType===2&&(g=Math.abs(g)),n.isDefaultResonantModulator&&(this.resonanceOffset=Math.max(0,g/2)),this.modulatorValues[t]=g,g}exclusiveRelease(e,A=Wi){this.overrideReleaseVolEnv=Ja,this.isInRelease=!1,this.releaseVoice(e,A)}releaseVoice(e,A=Zi){this.releaseStartTime=e,this.releaseStartTime-this.startTime<A&&(this.releaseStartTime=this.startTime+A)}setup(e,A,t,n,s){this.startTime=e,this.isActive=!0,this.isInRelease=!1,this.hasRendered=!1,this.releaseStartTime=1/0,this.pressure=0,this.channel=A,this.midiNote=t,this.velocity=n,this.realKey=s,this.overrideReleaseVolEnv=0,this.portamentoDuration=0,this.portamentoFromKey=-1}},qa=class{sampleData;generators;modulators;exclusiveClass;targetKey;velocity;rootKey;loopStart;loopEnd;playbackStep;loopingMode;constructor(e,A,t,n){let s=e.sample,i=e.generators;this.modulators=e.modulators,this.generators=i,this.rootKey=s.originalKey,i[o.overridingRootKey]>-1&&(this.rootKey=i[o.overridingRootKey]),this.targetKey=A,i[o.keyNum]>-1&&(this.targetKey=i[o.keyNum]),this.velocity=t,i[o.velocity]>-1&&(this.velocity=i[o.velocity]),this.exclusiveClass=i[o.exclusiveClass],this.loopStart=s.loopStart,this.loopEnd=s.loopEnd,this.sampleData=s.getAudioData(),this.playbackStep=s.sampleRate/n*Math.pow(2,s.pitchCorrection/1200),this.loopingMode=i[o.sampleModes]}};function pn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var Ka=3070,Pa=2e3,Rs=Math.PI/2,Ut=-500,Ei=500,rs=Ei-Ut,li=new Float32Array(rs+1),di=new Float32Array(rs+1);for(let e=Ut;e<=Ei;e++){let A=(e-Ut)/rs,t=e-Ut;li[t]=Math.cos(Rs*A),di[t]=Math.sin(Rs*A)}function Va(e,A,t,n,s,i,I,g,r,a){if(!e.isInRelease&&A>=e.releaseStartTime&&(e.isInRelease=!0,e.volEnv.startRelease(e),e.modEnv.startRelease(e),e.loopingMode===3&&(e.wavetable.isLooping=!1)),e.hasRendered=!0,!e.isActive)return;let h=e.targetKey,B=e.modulatedGenerators[o.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,d=e.modulatedGenerators[o.coarseTune],l=this.synthCore.tunings[this.preset.program*128+e.realKey];if(l!==-1&&(h=Math.trunc(l),B+=(l-h)*100),e.portamentoFromKey>-1){let v=Math.min((A-e.startTime)/e.portamentoDuration,1),Y=h-e.portamentoFromKey;d-=Y*(1-v)}B+=(h-e.rootKey)*e.modulatedGenerators[o.scaleTuning];let u=0,f=0,p=e.modulatedGenerators[o.vibLfoToPitch],G=e.modulatedGenerators[o.vibLfoToVolume],R=e.modulatedGenerators[o.vibLfoToFilterFc];if(p!==0||G!==0||R!==0){let v=e.startTime+Ot(e.modulatedGenerators[o.delayVibLFO]),Y=xn(e.modulatedGenerators[o.freqVibLFO]),K=pn(v,Y,A);B+=K*(p*this.customControllers[oA.modulationMultiplier]),f+=-K*G,u+=K*R}let M=e.modulatedGenerators[o.modLfoToPitch],V=e.modulatedGenerators[o.modLfoToVolume],N=e.modulatedGenerators[o.modLfoToFilterFc];if(M!==0||N!==0||V!==0){let v=e.startTime+Ot(e.modulatedGenerators[o.delayModLFO]),Y=xn(e.modulatedGenerators[o.freqModLFO]),K=pn(v,Y,A);B+=K*(M*this.customControllers[oA.modulationMultiplier]),f+=-K*V,u+=K*N}this.midiControllers[S.modulationWheel]==0&&this.channelVibrato.depth>0&&(B+=pn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A)*this.channelVibrato.depth);let C=e.modulatedGenerators[o.modEnvToPitch],nA=e.modulatedGenerators[o.modEnvToFilterFc];if(nA!==0||C!==0){let v=e.modEnv.process(e,A);u+=v*nA,B+=v*C}f-=e.resonanceOffset;let AA=B+d*100|0;AA!==e.tuningCents&&(e.tuningCents=AA,e.tuningRatio=Math.pow(2,AA/1200));let j=Ee(e.modulatedGenerators[o.initialAttenuation]);e.buffer.length<a&&(eA(`Buffer size has changed from ${e.buffer.length} to ${a}!
6
+ This will cause a memory allocation!`),e.buffer=new Float32Array(a));let H=e.buffer;if(e.loopingMode===2&&!e.isInRelease){e.isActive=e.volEnv.process(a,H,j,f);return}e.isActive=e.wavetable.process(a,e.tuningRatio,H),e.filter.process(a,e,H,u);let Z=e.volEnv.process(a,H,j,f);e.isActive=e.isActive&&Z;let P;e.overridePan?P=e.overridePan:(e.currentPan+=(e.modulatedGenerators[o.pan]-e.currentPan)*this.synthCore.panSmoothingFactor,P=e.currentPan);let J=this.synthCore.masterParameters.masterGain*this.synthCore.midiVolume*e.gainModifier,gA=P+500|0,aA=li[gA]*J*this.synthCore.panLeft,O=di[gA]*J*this.synthCore.panRight;for(let v=0;v<a;v++){let Y=H[v],K=v+r;t[K]+=aA*Y,n[K]+=O*Y}if(!this.synthCore.enableEffects)return;let D=e.modulatedGenerators[o.reverbEffectsSend];if(D>0){let v=this.synthCore.masterParameters.reverbGain*this.synthCore.reverbSend*J*(D/Ka);for(let Y=0;Y<a;Y++){let K=Y+r,SA=v*H[Y];s[K]+=SA,i[K]+=SA}}let b=e.modulatedGenerators[o.chorusEffectsSend];if(b>0){let v=this.synthCore.masterParameters.chorusGain*this.synthCore.chorusSend*(b/Pa),Y=aA*v,K=O*v;for(let SA=0;SA<a;SA++){let YA=SA+r,LA=H[SA];I[YA]+=Y*LA,g[YA]+=K*LA}}}var ye={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},We={partParameter:1,awe32:127,SF2:120},pe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGDecayTime:100,EGReleaseTime:102},se=(e,A,t,n)=>{n.length>0&&(n=" "+n),y(`%c${A} for %c${e}%c is now set to %c${t}%c${n}.`,c.info,c.recognized,c.info,c.value,c.info)},yn=e=>{e.channelVibrato.delay===0&&e.channelVibrato.rate===0&&e.channelVibrato.depth===0&&(e.channelVibrato.depth=50,e.channelVibrato.rate=8,e.channelVibrato.delay=.6)};function Xa(e){switch(this.midiControllers[S.dataEntryMSB]=e<<7,this.dataEntryState){default:case xA.Idle:break;case xA.NRPFine:{if(this.lockGSNRPNParams)return;let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7,n=this.midiControllers[S.dataEntryLSB]>>7;switch(A){default:{if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case We.partParameter:{switch(t){default:{if(e===64)return;y(`%cUnrecognized NRPN for %c${this.channel}%c: %c(0x${A.toString(16)} 0x${t.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case pe.vibratoRate:{if(e===64)return;yn(this),this.channelVibrato.rate=e/64*8,se(this.channel,"Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break}case pe.vibratoDepth:{if(e===64)return;yn(this),this.channelVibrato.depth=e/2,se(this.channel,"Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break}case pe.vibratoDelay:{if(e===64)return;yn(this),this.channelVibrato.delay=e/64/3,se(this.channel,"Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break}case pe.TVFFilterCutoff:{this.controllerChange(S.brightness,e),se(this.channel,"Filter cutoff",e.toString(),"");break}case pe.TVFFilterResonance:{this.controllerChange(S.filterResonance,e),se(this.channel,"Filter resonance",e.toString(),"");break}case pe.EGAttackTime:{this.controllerChange(S.attackTime,e),se(this.channel,"EG attack time",e.toString(),"");break}case pe.EGDecayTime:{this.controllerChange(S.decayTime,e),se(this.channel,"EG decay time",e.toString(),"");break}case pe.EGReleaseTime:{this.controllerChange(S.releaseTime,e),se(this.channel,"EG release time",e.toString(),"");break}}break}case We.awe32:break;case We.SF2:{if(t>100)break;let s=this.customControllers[oA.sf2NPRNGeneratorLSB],i=(e<<7|n)-8192;this.setGeneratorOffset(s,i);break}}break}case xA.RPCoarse:case xA.RPFine:{let A=this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7;switch(A){default:{y(`%cUnrecognized RPN for %c${this.channel}%c: %c(0x${A.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break}case ye.pitchWheelRange:{this.midiControllers[uA+W.pitchWheelRange]=e<<7,se(this.channel,"Pitch wheel range",e.toString(),"semitones");break}case ye.coarseTuning:{let t=e-64;this.setCustomController(oA.channelTuningSemitones,t),se(this.channel,"Coarse tuning",t.toString(),"semitones");break}case ye.fineTuning:{this.setTuning(e-64,!1);break}case ye.modulationDepth:{this.setModulationDepth(e*100);break}case ye.resetParameters:{this.resetParameters();break}}}}}var Za=[o.delayModLFO,o.freqModLFO,o.delayVibLFO,o.freqVibLFO,o.delayModEnv,o.attackModEnv,o.holdModEnv,o.decayModEnv,o.sustainModEnv,o.releaseModEnv,o.delayVolEnv,o.attackVolEnv,o.holdVolEnv,o.decayVolEnv,o.sustainVolEnv,o.releaseVolEnv,o.fineTune,o.modLfoToPitch,o.vibLfoToPitch,o.modEnvToPitch,o.modLfoToVolume,o.initialFilterFc,o.initialFilterQ,o.modLfoToFilterFc,o.modEnvToFilterFc,o.chorusEffectsSend,o.reverbEffectsSend],Be=(e,A,t)=>Math.max(A,Math.min(t,e)),vt=e=>Math.max(-32768,1200*Math.log2(e/1e3)),Wa=e=>6900+1200*Math.log2(e/440);function za(e,A,t){let n=t<<7|A;n-=8192;let s=Za[e];s||eA(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let i,I,g,r;switch(s){default:break;case o.delayModLFO:case o.delayVibLFO:case o.delayVolEnv:case o.delayModEnv:{i=4*Be(n,0,5900),this.setGeneratorOverride(s,vt(i));break}case o.attackVolEnv:case o.attackModEnv:{i=Be(n,0,5940),this.setGeneratorOverride(s,vt(i));break}case o.holdVolEnv:case o.holdModEnv:{i=Be(n,0,8191),this.setGeneratorOverride(s,vt(i));break}case o.decayModEnv:case o.decayVolEnv:case o.releaseVolEnv:case o.releaseModEnv:{i=4*Be(n,0,5940),this.setGeneratorOverride(s,vt(i));break}case o.freqVibLFO:case o.freqModLFO:{I=.084*A,this.setGeneratorOverride(s,Wa(I),!0);break}case o.sustainVolEnv:case o.sustainModEnv:{g=A*7.5,this.setGeneratorOverride(s,g);break}case o.fineTune:{this.setGeneratorOverride(s,n,!0);break}case o.modLfoToPitch:case o.vibLfoToPitch:{r=Be(n,-127,127)*9.375,this.setGeneratorOverride(s,r,!0);break}case o.modEnvToPitch:{r=Be(n,-127,127)*9.375,this.setGeneratorOverride(s,r);break}case o.modLfoToVolume:{g=1.875*A,this.setGeneratorOverride(s,g,!0);break}case o.initialFilterFc:{let a=4335+59*A;this.setGeneratorOverride(s,a,!0);break}case o.initialFilterQ:{g=215*(A/127),this.setGeneratorOverride(s,g,!0);break}case o.modLfoToFilterFc:{r=Be(n,-64,63)*56.25,this.setGeneratorOverride(s,r,!0);break}case o.modEnvToFilterFc:{r=Be(n,-64,63)*56.25,this.setGeneratorOverride(s,r);break}case o.chorusEffectsSend:case o.reverbEffectsSend:{this.setGeneratorOverride(s,Be(n,0,255)*(1e3/255));break}}}function _a(e){switch(this.midiControllers[S.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case xA.RPCoarse:case xA.RPFine:{switch(this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7){default:break;case ye.pitchWheelRange:{if(e===0)break;this.midiControllers[uA+W.pitchWheelRange]|=e;let t=(this.midiControllers[uA+W.pitchWheelRange]>>7)+e/128;y(`%cChannel ${this.channel} pitch wheel range. Semitones: %c${t}`,c.info,c.value);break}case ye.fineTuning:{let n=this.customControllers[oA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ye.modulationDepth:{let n=this.customControllers[oA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:{this.resetParameters();break}}break}case xA.NRPFine:{let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7;if(A===We.SF2)return;A===We.awe32?za.call(this,t,e,this.midiControllers[S.dataEntryMSB]>>7):y(`%cUnrecognized NRPN LSB for %c${this.channel}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value)}}}function ja(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=S.modulationWheelLSB&&e<=S.effectControl2LSB&&e!==S.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.computeModulatorsAll(1,n)}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case S.omniModeOff:case S.omniModeOn:case S.allNotesOff:{this.stopAllNotes();break}case S.allSoundOff:{this.stopAllNotes(!0);break}case S.polyModeOn:{this.stopAllNotes(!0),this.polyMode=!0;break}case S.monoModeOn:{this.stopAllNotes(!0),this.polyMode=!1;break}case S.bankSelect:{this.setBankMSB(A),this.channel%16===De&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break}case S.bankSelectLSB:{this.setBankLSB(A);break}case S.registeredParameterLSB:{this.dataEntryState=xA.RPFine;break}case S.registeredParameterMSB:{this.dataEntryState=xA.RPCoarse;break}case S.nonRegisteredParameterMSB:{this.customControllers[oA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=xA.NRPCoarse;break}case S.nonRegisteredParameterLSB:{if(this.midiControllers[S.nonRegisteredParameterMSB]>>7===We.SF2)switch(this.customControllers[oA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[oA.sf2NPRNGeneratorLSB]=0),A){case 100:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=100;break}case 101:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e3;break}case 102:{this.customControllers[oA.sf2NPRNGeneratorLSB]+=1e4;break}default:A<100&&(this.customControllers[oA.sf2NPRNGeneratorLSB]+=A)}this.dataEntryState=xA.NRPFine;break}case S.dataEntryMSB:{this.dataEntryCoarse(A);break}case S.dataEntryLSB:{this.dataEntryFine(A);break}case S.resetAllControllers:{this.resetControllersRP15Compliant();break}case S.sustainPedal:{if(A<64){let n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.isHeld&&(s.isHeld=!1,s.releaseVoice(this.synthCore.currentTime),++n>=this.voiceCount))break}}break}default:{this.computeModulatorsAll(1,e);break}}t&&this.synthCore.callEvent("controllerChange",{channel:this.channel,controllerNumber:e,controllerValue:A})}}var $a=40;function Ao(e){if(e<1)return 0;{let A=[1,2,4,8,16,32,64,80,96,112,120,124],t=[1,.5,.25,.125,.0625,.03125,.0625,.0625,.0625,.125,.25,1/3],n=[-.16653127382501215,.11863875218299408,.029479047361245264,-.005442312089231738,.1451520875973037,-.005056281449558275,-.005095486882876532,.03334009551111544,-.09361368678020432,.14132569702451822,-.15805565301011382,-.09918856955881927],s=[.028212773333433472,-.3388502064992847,-.15839529890929713,-.12398131766775483,-.2874848552685111,.012254866302537692,.005957797193345771,-.03745899330347374,.12911781869810196,-.15867193224162568,.504406322732748,.3786845131875458],i=[.7218950861255283,.5574536226347168,.47133893237025826,.48597095327079914,.44336276333518854,.6076986311801551,.30851975971827794,.30514889345633955,.3302511933827384,.153822885219165,.1302280559047337,.49865530675491687],I=[-2.2218487496163566,-1.6382721639824072,-1.3010299956639813,-.958607314841775,-.6020599913279624,-.3010299956639812,.31386722036915343,.6232492903979004,.9242792860618817,1.290034611362518,1.4265112613645752,1.9030899869919435],r=[2,4,8,16,32,64,80,96,112,120,124].findLastIndex(h=>h<e)+1,a=(e-A[r])*t[r];return Math.exp(2.302585092994046*(((n[r]*a+s[r])*a+i[r])*a+I[r]))/$a}}function eo(e,A){return Ao(e)*A}var Lt=(e,A,t)=>Math.max(A,Math.min(t,e));function to(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthCore.masterParameters.blackMIDIMode&&this.synthCore.voiceCount>200&&A<40||this.synthCore.masterParameters.blackMIDIMode&&A<10||this._isMuted||!this.preset)return;let t=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset.program,i=this.synthCore.tunings[s*128+t];i>=0&&(n=Math.trunc(i)),this.synthCore.masterParameters.monophonicRetriggerMode&&this.killNote(e);let I=this.synthCore.keyModifierManager.getVelocity(this.channel,t);I>-1&&(A=I);let g=this.synthCore.keyModifierManager.getGain(this.channel,t),r=-1,a=0,h=this.midiControllers[S.portamentoTime]>>7,B=this.midiControllers[S.portamentoControl]>>7;if(!this.drumChannel&&B!==n&&this.midiControllers[S.portamentoOnOff]>=8192&&h>0){if(B>0){let u=Math.abs(n-B);a=eo(h,u),r=B}this.controllerChange(S.portamentoControl,n)}if(!this.polyMode){let u=0;if(this.voiceCount>0){for(let f of this.synthCore.voices)if(f.isActive&&f.channel===this.channel&&(f.exclusiveRelease(this.synthCore.currentTime,0),++u>=this.voiceCount))break}}let d=this.synthCore.getVoices(this.channel,n,A),l=0;this.randomPan&&(l=Math.round(Math.random()*1e3-500));for(let u of d){let f=this.synthCore.assignVoice();if(f.setup(this.synthCore.currentTime,this.channel,n,A,t),f.wavetable=f.oscillators[this.synthCore.masterParameters.interpolationType],f.generators.set(u.generators),f.exclusiveClass=u.exclusiveClass,f.rootKey=u.rootKey,f.loopingMode=u.loopingMode,f.wavetable.sampleData=u.sampleData,f.wavetable.playbackStep=u.playbackStep,f.targetKey=u.targetKey,this.sysExModulators.modulatorList.length>0){f.modulators=[...u.modulators];for(let N of this.sysExModulators.modulatorList){let C=f.modulators.findIndex(nA=>mA.isIdentical(nA,N.mod));C===-1?f.modulators.push(N.mod):f.modulators[C]=N.mod}}else f.modulators=u.modulators;if(f.modulators.length>f.modulatorValues.length&&(eA(`${f.modulators.length} modulators! Increasing modulatorValues table.`),f.modulatorValues=new Int16Array(f.modulators.length)),this.generatorOverridesEnabled)for(let[N,C]of this.generatorOverrides.entries())C!==Zs&&(f.generators[N]=C);if(f.exclusiveClass!==0&&this.polyMode){let N=0;if(this.voiceCount>0){for(let C of this.synthCore.voices)if(C.isActive&&C.channel===this.channel&&C.exclusiveClass===f.exclusiveClass&&C.hasRendered&&(C.exclusiveRelease(this.synthCore.currentTime),++N>=this.voiceCount))break}}this.computeModulators(f),f.volEnv.init(f),f.modEnv.init(f),f.filter.init();let p=f.modulatedGenerators[o.startAddrsOffset]+f.modulatedGenerators[o.startAddrsCoarseOffset]*32768,G=f.modulatedGenerators[o.endAddrOffset]+f.modulatedGenerators[o.endAddrsCoarseOffset]*32768,R=f.modulatedGenerators[o.startloopAddrsOffset]+f.modulatedGenerators[o.startloopAddrsCoarseOffset]*32768,M=f.modulatedGenerators[o.endloopAddrsOffset]+f.modulatedGenerators[o.endloopAddrsCoarseOffset]*32768,V=u.sampleData.length-1;if(f.wavetable.cursor=Lt(p,0,V),f.wavetable.end=Lt(V+G,0,V),f.wavetable.loopStart=Lt(u.loopStart+R,0,V),f.wavetable.loopEnd=Lt(u.loopEnd+M,0,V),f.wavetable.loopEnd<f.wavetable.loopStart){let N=f.wavetable.loopStart;f.wavetable.loopStart=f.wavetable.loopEnd,f.wavetable.loopEnd=N}f.wavetable.loopEnd-f.wavetable.loopStart<1&&(f.loopingMode===1||f.loopingMode===3)&&(f.loopingMode=0),f.wavetable.loopLength=f.wavetable.loopEnd-f.wavetable.loopStart,f.wavetable.isLooping=f.loopingMode===1||f.loopingMode===3,f.portamentoFromKey=r,f.portamentoDuration=a,f.overridePan=l,f.gainModifier=g,f.currentPan=Math.max(-500,Math.min(500,f.modulatedGenerators[o.pan]))}this.voiceCount+=d.length,this.sendChannelProperty(),this.synthCore.callEvent("noteOn",{midiNote:e,channel:this.channel,velocity:A})}function no(e){if(e>127||e<0){eA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[oA.channelKeyShift];if(this.synthCore.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A),this.synthCore.callEvent("noteOff",{midiNote:e,channel:this.channel});return}let t=this.midiControllers[S.sustainPedal]>=8192,n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&s.realKey===A&&!s.isInRelease&&(t?s.isHeld=!0:s.releaseVoice(this.synthCore.currentTime),++n>=this.voiceCount))break}this.synthCore.callEvent("noteOff",{midiNote:e,channel:this.channel})}function so(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synthCore.soundBankManager.getPreset(this.patch,this.channelSystem);!A&&(A=this.synthCore.missingPresetHandler(this.patch,this.channelSystem),!A)||(this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthCore.callEvent("programChange",{channel:this.channel,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty())}var io=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let i=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(i);let I=this.modulatorList.find(g=>g.id===i);if(I)I.mod.transformAmount=t;else{let g,r;e>=uA?(g=e-uA,r=!1):(g=e,r=!0);let a=new mA(new _A(g,CA.linear,r,n),new _A,A,t,0);this.modulatorList.push({mod:a,id:i})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}};function ao(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let r=0;r<s.length;r++)s[r]+=this.generatorOffsets[r]}let i=e.modulatedGenerators,I=this.perNotePitch?this.pitchWheels[e.realKey]:this.midiControllers[W.pitchWheel+uA];if(A===-1){i.set(s);for(let r=0;r<n.length;r++){let a=n[r];i[a.destination]=Math.min(32767,Math.max(-32768,i[a.destination]+e.computeModulator(this.midiControllers,I,r)))}for(let r=0;r<i.length;r++){let a=XA[r];a&&(i[r]=Math.min(a.max,Math.max(a.min,i[r])))}return}let g=!!A;for(let r=0;r<n.length;r++){let a=n[r];if(a.primarySource.isCC===g&&a.primarySource.index===t||a.secondarySource.isCC===g&&a.secondarySource.index===t){let h=a.destination,B=s[h];e.computeModulator(this.midiControllers,I,r);for(let l=0;l<n.length;l++)n[l].destination===h&&(B+=e.modulatorValues[l]);let d=XA[h];i[h]=Math.max(d.min,Math.min(B,d.max))}}}var oo=class{midiControllers=new Int16Array(vn);pitchWheels=new Int16Array(128).fill(8192);lockedControllers=new Array(vn).fill(!1);customControllers=new Float32Array(Ai);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new io;drumChannel=!1;randomPan=!1;dataEntryState=xA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};polyMode=!0;voiceCount=0;channel;synthCore;noteOn=to.bind(this);noteOff=no.bind(this);programChange=so.bind(this);controllerChange=ja.bind(this);resetControllers=Sa.bind(this);resetPreset=pa.bind(this);resetControllersRP15Compliant=ya.bind(this);resetParameters=ka.bind(this);dataEntryFine=_a.bind(this);dataEntryCoarse=Xa.bind(this);renderVoice=Va.bind(this);perNotePitch=!1;channelTuningCents=0;generatorOffsets=new Int16Array(_e);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(_e);generatorOverridesEnabled=!1;computeModulators=ao.bind(this);previousVoiceCount=0;constructor(e,A,t){this.synthCore=e,this.preset=A,this.channel=t,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthCore.masterParameters.midiSystem}clearVoiceCount(){this.previousVoiceCount=this.voiceCount,this.voiceCount=0}updateVoiceCount(){this.voiceCount!==this.previousVoiceCount&&this.sendChannelProperty()}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthCore.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(oA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),y(`%cChannel ${this.channel} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(oA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(oA.channelTuning,e),A&&y(`%cFine tuning for %c${this.channel}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}pitchWheel(e,A=-1){if(!this.lockedControllers[uA+W.pitchWheel]){if(A===-1)this.perNotePitch=!1,this.midiControllers[uA+W.pitchWheel]=e,this.computeModulatorsAll(0,W.pitchWheel),this.sendChannelProperty();else{this.perNotePitch||this.pitchWheels.fill(this.midiControllers[uA+W.pitchWheel]),this.perNotePitch=!0,this.pitchWheels[A]=e;let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.isActive&&n.channel===this.channel&&n.midiNote===A&&(this.computeModulators(n,0,W.polyPressure),++t>=this.voiceCount))break}}this.synthCore.callEvent("pitchWheel",{channel:this.channel,pitch:e,midiNote:A})}}channelPressure(e){this.midiControllers[uA+W.channelPressure]=e<<7,this.updateChannelTuning(),this.computeModulatorsAll(0,W.channelPressure),this.synthCore.callEvent("channelPressure",{channel:this.channel,pressure:e})}polyPressure(e,A){let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.isActive&&n.channel===this.channel&&n.midiNote===e&&(n.pressure=A,this.computeModulators(n,0,W.polyPressure),++t>=this.voiceCount))break}this.synthCore.callEvent("polyPressure",{channel:this.channel,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[oA.channelTuning]+this.customControllers[oA.channelTransposeFine]+this.customControllers[oA.masterTuning]+this.customControllers[oA.channelTuningSemitones]*100}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthCore.masterParameters.midiSystem))}setDrums(e){if(fA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(fA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channel%16===De)throw new Error(`Cannot disable drums on channel ${this.channel} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Zs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){if(this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t){let n=0;if(this.voiceCount>0){for(let s of this.synthCore.voices)if(s.channel===this.channel&&s.isActive&&(s.generators[e]=A,this.computeModulators(s),++n>=this.voiceCount))break}}}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*XA[e].nrpn,this.generatorOffsetsEnabled=!0;let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(this.computeModulators(n),++t>=this.voiceCount))break}}killNote(e,A=-12e3){e+=this.customControllers[oA.channelKeyShift];let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&n.realKey===e&&(n.overrideReleaseVolEnv=A,n.isInRelease=!1,n.releaseVoice(this.synthCore.currentTime),++t>=this.voiceCount))break}}stopAllNotes(e=!1){if(e){let A=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.isActive=!1,++A>=this.voiceCount))break}this.clearVoiceCount(),this.updateVoiceCount()}else{let A=0;if(this.voiceCount>0){for(let t of this.synthCore.voices)if(t.channel===this.channel&&t.isActive&&(t.releaseVoice(this.synthCore.currentTime),++A>=this.voiceCount))break}}this.synthCore.callEvent("stopAll",{channel:this.channel,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthCore.callEvent("muteChannel",{channel:this.channel,isMuted:e})}sendChannelProperty(){if(!this.synthCore.enableEventSystem)return;let e={voicesAmount:this.voiceCount,pitchWheel:this.midiControllers[uA+W.pitchWheel],pitchWheelRange:this.midiControllers[uA+W.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[oA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthCore.callEvent("channelPropertyChange",{channel:this.channel,property:e})}computeModulatorsAll(e,A){let t=0;if(this.voiceCount>0){for(let n of this.synthCore.voices)if(n.channel===this.channel&&n.isActive&&(this.computeModulators(n,e,A),++t>=this.voiceCount))break}}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthCore.callEvent("drumChange",{channel:this.channel,isDrumChannel:this.drumChannel}))}},Ms=4,FA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=XA[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e){z(e,this.generatorType),z(e,this.generatorValue)}toString(){return`${Object.keys(o).find(e=>o[e]===this.generatorType)}: ${this.generatorValue}`}},ro=4,Wt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let e=this.getGenerator(o.coarseTune,0),A=this.getGenerator(o.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(o.coarseTune,A),this.setGenerator(o.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,XA[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case o.sampleID:throw new Error("Use setSample()");case o.instrument:throw new Error("Use setInstrument()");case o.velRange:case o.keyRange:throw new Error("Set the range manually")}if(A===null){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n===-1?this.addGenerators(new FA(e,A,t)):this.generators[n]=new FA(e,A,t)}addGenerators(...e){for(let A of e)switch(A.generatorType){default:{this.generators.push(A);break}case o.sampleID:case o.instrument:break;case o.velRange:{this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break}case o.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new FA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(mA.copyFrom.bind(mA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==o.sampleID&&t.generatorType!==o.instrument&&t.generatorType!==o.keyRange&&t.generatorType!==o.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new FA(o.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new FA(o.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},Qi=class extends Wt{},ui=class extends Wt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");let t=e.instruments.indexOf(this.instrument);if(t===-1)throw new Error(`${this.instrument.name} does not exist in ${e.soundBankInfo.name}! Cannot write instrument generator.`);return A.push(new FA(o.instrument,t,!1)),A}},fi=class extends Wt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getWriteGenerators(e){let A=super.getWriteGenerators(e),t=e.samples.indexOf(this.sample);if(t===-1)throw new Error(`${this.sample.name} does not exist in ${e.soundBankInfo.name}! Cannot write sampleID generator.`);return A.push(new FA(o.sampleID,t,!1)),A}},Io=22,go=new Set([o.velRange,o.keyRange,o.instrument,o.sampleID,o.exclusiveClass,o.endOper,o.sampleModes,o.startloopAddrsOffset,o.startloopAddrsCoarseOffset,o.endloopAddrsOffset,o.endloopAddrsCoarseOffset,o.startAddrsOffset,o.startAddrsCoarseOffset,o.endAddrOffset,o.endAddrsCoarseOffset,o.initialAttenuation,o.fineTune,o.coarseTune,o.keyNumToVolEnvHold,o.keyNumToVolEnvDecay,o.keyNumToModEnvHold,o.keyNumToModEnvDecay]),dt=class{name="";zones=[];globalZone=new Qi;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new fi(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e);for(let A of this.zones)A.useCount++}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A===-1){eA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1);for(let t of this.zones)t.useCount--}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);for(let e of this.zones)e.sample.unlinkFrom(this)}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(go.has(n))continue;n=n;let s={},i=XA[n]?.def||0;s[i]=0;for(let I of this.zones){let g=I.getGenerator(n,void 0);g===void 0?s[i]++:s[g]===void 0?s[g]=1:s[g]++;let r;switch(n){default:continue;case o.decayVolEnv:{r=o.keyNumToVolEnvDecay;break}case o.holdVolEnv:{r=o.keyNumToVolEnvHold;break}case o.decayModEnv:{r=o.keyNumToModEnvDecay;break}case o.holdModEnv:r=o.keyNumToModEnvHold}if(I.getGenerator(r,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let I=["0",0];for(let[r,a]of Object.entries(s))a>I[1]&&(I=[r,a]);let g=Number.parseInt(I[0]);g!==i&&e.setGenerator(n,g,!1);for(let r of this.zones){let a=r.getGenerator(n,void 0);a===void 0?g!==i&&r.setGenerator(n,i):a===g&&r.setGenerator(n,null)}}}let t=this.zones[0].modulators.map(n=>mA.copyFrom(n));for(let n of t){let s=!0;for(let i of this.zones){if(!s)continue;i.modulators.find(g=>mA.isIdentical(g,n))||(s=!1)}if(s){e.addModulators(mA.copyFrom(n));for(let i of this.zones){let I=i.modulators.find(g=>mA.isIdentical(g,n));I&&I.transformAmount===n.transformAmount&&i.modulators.splice(i.modulators.indexOf(I),1)}}}}write(e,A){y(`%cWriting ${this.name}...`,c.info),kA(e.pdta,this.name.slice(0,20),20),kA(e.xdta,this.name.slice(20),20),z(e.pdta,A&65535),z(e.xdta,A>>>16)}},co=38,Qt=class ie{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(A,t=new Qi){this.parentSoundBank=A,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&fA.isXGDrums(this.bankMSB)}get isAnyDrums(){let A=this.parentSoundBank.isXGBank;return this.isGMGSDrum||A&&fA.isXGDrums(this.bankMSB)}static isInRange(A,t){return t>=A.min&&t<=A.max}static addUniqueModulators(A,t){for(let n of t)A.some(s=>mA.isIdentical(n,s))||A.push(n)}static subtractRanges(A,t){return{min:Math.max(A.min,t.min),max:Math.min(A.max,t.max)}}delete(){for(let A of this.zones)A.instrument?.unlinkFrom(this)}deleteZone(A){this.zones[A]?.instrument?.unlinkFrom(this),this.zones.splice(A,1)}createZone(A){let t=new ui(this,A);return this.zones.push(t),t}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)for(let i of this.getVoiceParameters(n,s))i.sample.getAudioData()}matches(A){return $A.matches(this,A)}getVoiceParameters(A,t){let n=new Array;for(let s of this.zones){if(!ie.isInRange(s.hasKeyRange?s.keyRange:this.globalZone.keyRange,A)||!ie.isInRange(s.hasVelRange?s.velRange:this.globalZone.velRange,t))continue;let i=s.instrument;if(!i||i.zones.length===0)continue;let I=new Int16Array(_e);for(let r of this.globalZone.generators)I[r.generatorType]=r.generatorValue;for(let r of s.generators)I[r.generatorType]=r.generatorValue;let g=[...s.modulators];ie.addUniqueModulators(g,this.globalZone.modulators);for(let r of i.zones){if(!ie.isInRange(r.hasKeyRange?r.keyRange:i.globalZone.keyRange,A)||!ie.isInRange(r.hasVelRange?r.velRange:i.globalZone.velRange,t))continue;let a=[...r.modulators];ie.addUniqueModulators(a,i.globalZone.modulators),ie.addUniqueModulators(a,this.parentSoundBank.defaultModulators);for(let B of g){let d=a.findIndex(l=>mA.isIdentical(B,l));d===-1?a.push(B):a[d]=a[d].sumTransform(B)}let h=new Int16Array(bn);for(let B of i.globalZone.generators)h[B.generatorType]=B.generatorValue;for(let B of r.generators)h[B.generatorType]=B.generatorValue;for(let B=0;B<h.length;B++)h[B]=Math.max(-32768,Math.min(32767,h[B]+I[B]));h[o.initialAttenuation]=Math.floor(h[o.initialAttenuation]*.4),n.push({sample:r.sample,generators:h,modulators:a})}}return n}toMIDIString(){return $A.toMIDIString(this)}toString(){return $A.toNamedMIDIString(this)}toFlattenedInstrument(){let A=(a,h)=>{a.push(...h.filter(B=>!a.some(d=>d.generatorType===B.generatorType)))},t=(a,h)=>{a.push(...h.filter(B=>!a.some(d=>mA.isIdentical(B,d))))},n=new dt;n.name=this.name;let s=[],i=[],I=this.globalZone;s.push(...I.generators),i.push(...I.modulators);let g=I.keyRange,r=I.velRange;for(let a of this.zones){if(!a.instrument)throw new Error("No instrument in a preset zone.");let h=a.keyRange;a.hasKeyRange||(h=g);let B=a.velRange;a.hasVelRange||(B=r);let d=a.generators.map(N=>new FA(N.generatorType,N.generatorValue));A(d,s);let l=[...a.modulators];t(l,i);let u=a.instrument,f=u.zones,p=[],G=[],R=u.globalZone;p.push(...R.generators),G.push(...R.modulators);let M=R.keyRange,V=R.velRange;for(let N of f){if(!N.sample)throw new Error("No sample in an instrument zone.");let C=N.keyRange;N.hasKeyRange||(C=M);let nA=N.velRange;if(N.hasVelRange||(nA=V),C=ie.subtractRanges(C,h),nA=ie.subtractRanges(nA,B),C.max<C.min||nA.max<nA.min)continue;let AA=N.generators.map(J=>new FA(J.generatorType,J.generatorValue));A(AA,p);let j=[...N.modulators];t(j,G);let H=[...j];for(let J of l){let gA=H.findIndex(aA=>mA.isIdentical(J,aA));gA===-1?H.push(J):H[gA]=H[gA].sumTransform(J)}let Z=AA.map(J=>new FA(J.generatorType,J.generatorValue));for(let J of d){if(J.generatorType===o.velRange||J.generatorType===o.keyRange||J.generatorType===o.instrument||J.generatorType===o.endOper||J.generatorType===o.sampleModes)continue;let gA=AA.findIndex(aA=>aA.generatorType===J.generatorType);if(gA===-1){let aA=XA[J.generatorType].def+J.generatorValue;Z.push(new FA(J.generatorType,aA))}else{let aA=Z[gA].generatorValue+J.generatorValue;Z[gA]=new FA(J.generatorType,aA)}}Z=Z.filter(J=>J.generatorType!==o.sampleID&&J.generatorType!==o.keyRange&&J.generatorType!==o.velRange&&J.generatorType!==o.endOper&&J.generatorType!==o.instrument&&J.generatorValue!==XA[J.generatorType].def);let P=n.createZone(N.sample);P.keyRange=C,P.velRange=nA,P.keyRange.min===0&&P.keyRange.max===127&&(P.keyRange.min=-1),P.velRange.min===0&&P.velRange.max===127&&(P.velRange.min=-1),P.addGenerators(...Z),P.addModulators(...H)}}return n}write(A,t){y(`%cWriting ${this.name}...`,c.info),kA(A.pdta,this.name.slice(0,20),20),kA(A.xdta,this.name.slice(20),20),z(A.pdta,this.program);let n=this.bankMSB;this.isGMGSDrum?n=128:this.bankMSB===0&&(n=this.bankLSB),z(A.pdta,n),A.xdta.currentIndex+=4,z(A.pdta,t&65535),z(A.xdta,t>>16),rA(A.pdta,this.library),rA(A.pdta,this.genre),rA(A.pdta,this.morphology),A.xdta.currentIndex+=12}};function bs(e,A){let t=A?e.find(n=>n.isXGDrums):e.find(n=>n.isGMGSDrum);return t||(e.find(n=>n.isAnyDrums)??e[0])}function mi(e,A,t){if(e.length===0)throw new Error("No presets!");A.isGMGSDrum&&fA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:fA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:i,program:I}=A,g=fA.isSystemXG(t),r=fA.isXGDrums(i)&&g,a=e.find(d=>d.matches(A));if(a&&(!r||r&&a.isXGDrums))return a;let h=d=>{y(`%cPreset %c${$A.toMIDIString(A)}%c not found. (${t}) Replaced with %c${d.toString()}`,c.warn,c.unrecognized,c.warn,c.value)};if(n){let d=e.find(l=>l.isGMGSDrum&&l.program===I);return d||(d=e.find(l=>l.isAnyDrums&&l.program===I),d)?(h(d),d):(d=bs(e,!1),h(d),d)}if(r){let d=e.find(l=>l.program===I&&l.isXGDrums);return d||(d=e.find(l=>l.isAnyDrums&&l.program===I),d)?(h(d),d):(d=bs(e,!0),h(d),d)}let B=e.filter(d=>d.program===I&&!d.isAnyDrums);if(B.length===0)return h(e[0]),e[0];if(a=g?B.find(d=>d.bankLSB===s):B.find(d=>d.bankMSB===i),a)return h(a),a;if(s!==64||!g){let d=Math.max(i,s);if(a=B.find(l=>l.bankLSB===d||l.bankMSB===d),a)return h(a),a}return h(B[0]),B[0]}var ho=class extends Qt{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=fA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Co=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){eA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n===void 0?this.soundBankList.push({id:A,soundBank:e,bankOffset:t}):(n.soundBank=e,n.bankOffset=t),this.generatePresetList()}getPreset(e,A){if(!(this.soundBankList.length===0||this.selectablePresetList.length===0))return mi(this.selectablePresetList,e,A)}destroy(){for(let e of this.soundBankList)e.soundBank.destroySoundBank();this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;for(let t of this.soundBankList){let n=t.soundBank,s=t.bankOffset;for(let i of n.presets){let I=new ho(i,s);A.has(I.toMIDIString())||(A.add(I.toMIDIString()),e.push(I))}}e.sort($A.sorter.bind($A)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}};function Bo(e,A){switch(this.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.panLeft=1-t,this.panRight=t;break}case"masterGain":break;case"voiceCap":{let t=Math.min(A,1e6);this.masterParameters.voiceCap=t;for(let n=t;n<this.voices.length;n++)this.voices[n].isActive=!1;if(t>this.voices.length){eA(`Allocating ${t-this.voices.length} new voices!`);for(let n=this.voices.length;n<t;n++)this.voices.push(new Bi(this.sampleRate))}break}case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Eo(e){return this.masterParameters[e]}function lo(){return{...this.masterParameters}}function ZA(e,A,t,n,s){y(`%cChannel %c${A}%c ${n}. %c${t} ${s}%c, with %c${ae(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}function zA(e,A){y(`%cUnrecognized %c${A} %cSysEx: %c${ae(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)}function vs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?-1:n+s*61e-6}function Qo(e,A=0){switch(e[2]){case 4:{let t;switch(e[3]){case 1:{let n=e[5]<<7|e[4];this.setMIDIVolume(n/16384),y(`%cMaster Volume. Volume: %c${n}`,c.info,c.value);break}case 2:{let s=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",s),y(`%cMaster Pan. Pan: %c${s}`,c.info,c.value);break}case 3:{let n=(e[5]<<7|e[6])-8192;t=Math.floor(n/81.92),this.setMasterTuning(t),y(`%cMaster Fine Tuning. Cents: %c${t}`,c.info,c.value);break}case 4:{t=(e[5]-64)*100,this.setMasterTuning(t),y(`%cMaster Coarse Tuning. Cents: %c${t}`,c.info,c.value);break}default:y(`%cUnrecognized MIDI Device Control Real-time message: %c${ae(e)}`,c.warn,c.unrecognized)}break}case 9:{e[3]===1?(y("%cGM1 system on",c.info),this.resetAllControllers("gm")):e[3]===3?(y("%cGM2 system on",c.info),this.resetAllControllers("gm2")):(y("%cGM system off, defaulting to GS",c.info),this.setMasterParameter("midiSystem","gs"));break}case 8:{let t=4;switch(e[3]){case 1:{let n=e[t++],s=oe(e,16,t);if(t+=16,e.length<384){eA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let i=0;i<128;i++)this.tunings[n*128+i]=vs(e[t++],e[t++],e[t++]);y(`%cBulk Tuning Dump %c${s}%c Program: %c${n}`,c.info,c.value,c.info,c.recognized);break}case 2:case 7:{e[3]===7&&t++;let n=e[t++],s=e[t++];for(let i=0;i<s;i++){let I=e[t++];this.tunings[n*128+I]=vs(e[t++],e[t++],e[t++])}y(`%cSingle Note Tuning. Program: %c${n}%c Keys affected: %c${s}`,c.info,c.recognized,c.info,c.recognized);break}case 9:case 8:{let n=new Int8Array(12);if(e[3]===8)for(let s=0;s<12;s++)n[s]=e[7+s]-64;else for(let s=0;s<24;s+=2){let i=(e[7+s]<<7|e[8+s])-8192;n[s/2]=Math.floor(i/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(n),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[5]>>s&1)===1&&this.midiChannels[7+s+A].setOctaveTuning(n);for(let s=0;s<7;s++)(e[6]>>s&1)===1&&this.midiChannels[s+A].setOctaveTuning(n);y(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${n.join(" ")}`,c.info,c.value);break}default:{zA(e,"MIDI Tuning Standard");break}}break}default:zA(e,"General MIDI")}}function uo(e,A=0){if(e[3]===18)switch(e[2]){case 66:{let t=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n];switch(e[6]){default:{zA(e,"Roland GS");break}case 21:{let i=t>0&&e[5]>>4>0;s.setGSDrums(i),y(`%cChannel %c${n}%c ${i?"is now a drum channel":"now isn't a drum channel"}%c via: %c${ae(e)}`,c.info,c.value,c.recognized,c.info,c.value);return}case 22:{let i=t-64;s.setCustomController(oA.channelKeyShift,i),ZA(e,n,i,"key shift","keys");return}case 28:{let i=t;i===0?(s.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${n}`,c.info,c.recognized,c.info,c.value)):(s.randomPan=!1,s.controllerChange(S.pan,i));break}case 33:{s.controllerChange(S.chorusDepth,t);break}case 34:{s.controllerChange(S.reverbDepth,t);break}case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let i=e.length-9,I=new Int8Array(12);for(let r=0;r<i;r++)I[r]=e[r+7]-64;s.setOctaveTuning(I);let g=t-64;ZA(e,n,I.join(" "),"octave scale tuning","cents"),s.setTuning(g);break}}return}else if((e[5]&32)>0){let n=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,s=this.midiChannels[n],i=t-64,I=i/64,g=t/128,r=(a,h,B=!1)=>{switch(e[6]&15){case 0:{a===uA+W.pitchWheel?(s.controllerChange(S.registeredParameterMSB,0),s.controllerChange(S.registeredParameterLSB,0),s.controllerChange(S.dataEntryMSB,Math.floor(i))):(s.sysExModulators.setModulator(a,o.fineTune,i*100,B),ZA(e,n,i,`${h} pitch control`,"semitones"));break}case 1:{s.sysExModulators.setModulator(a,o.initialFilterFc,I*9600,B),ZA(e,n,I*9600,`${h} pitch control`,"cents");break}case 2:{s.sysExModulators.setModulator(a,o.initialAttenuation,I*960,B),ZA(e,n,I*960,`${h} amplitude`,"cB");break}case 4:{s.sysExModulators.setModulator(a,o.vibLfoToPitch,g*600,B),ZA(e,n,g*600,`${h} LFO1 pitch depth`,"cents");break}case 5:{s.sysExModulators.setModulator(a,o.vibLfoToFilterFc,g*2400,B),ZA(e,n,g*2400,`${h} LFO1 filter depth`,"cents");break}case 6:{s.sysExModulators.setModulator(a,o.vibLfoToVolume,I*960,B),ZA(e,n,I*960,`${h} LFO1 amplitude depth`,"cB");break}case 8:{s.sysExModulators.setModulator(a,o.modLfoToPitch,g*600,B),ZA(e,n,g*600,`${h} LFO2 pitch depth`,"cents");break}case 9:{s.sysExModulators.setModulator(a,o.modLfoToFilterFc,g*2400,B),ZA(e,n,g*2400,`${h} LFO2 filter depth`,"cents");break}case 10:{s.sysExModulators.setModulator(a,o.modLfoToVolume,I*960,B),ZA(e,n,I*960,`${h} LFO2 amplitude depth`,"cB");break}}};switch(e[6]&240){default:{zA(e,"Roland GS");break}case 0:{r(S.modulationWheel,"mod wheel");break}case 16:{r(uA+W.pitchWheel,"pitch wheel",!0);break}case 32:{r(uA+W.channelPressure,"channel pressure");break}case 48:{r(uA+W.polyPressure,"poly pressure");break}}return}else if(e[5]===0){switch(e[6]){default:{zA(e,"Roland GS");break}case 127:{t===0?(y("%cGS Reset received!",c.info),this.resetAllControllers("gs")):t===127&&(y("%cGS system off, switching to GM",c.info),this.resetAllControllers("gm"));break}case 6:{y(`%cRoland GS Master Pan set to: %c${t}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter("masterPan",(t-64)/64);break}case 4:{y(`%cRoland GS Master Volume set to: %c${t}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(t/127);break}case 5:{let n=t-64;y(`%cRoland GS Master Key-Shift set to: %c${n}%c with: %c${ae(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(n*100);break}}return}else if(e[5]===1)switch(e[6]){default:{zA(e,"Roland GS");break}case 0:{let n=oe(e,16,7);y(`%cGS Patch name: %c${n}`,c.info,c.value);break}case 51:{y(`%cGS Reverb level: %c${t}`,c.info,c.value),this.reverbSend=t/64;break}case 48:case 49:case 50:case 52:case 53:case 55:{y(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}case 58:{y(`%cGS Chorus level: %c${t}`,c.info,c.value),this.chorusSend=t/64;break}case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:{y(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}}else zA(e,"Roland GS");return}case 69:{e[4]===16&&(e[5]===0?this.callEvent("synthDisplay",[...e]):e[5]===1?this.callEvent("synthDisplay",[...e]):zA(e,"Roland GS"));return}case 22:if(e[4]===16){this.setMIDIVolume(e[7]/100),y(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${ae(e)}`,c.info,c.value,c.info,c.value);return}}else{zA(e,"Roland GS");return}}function fo(e,A=0){if(e[2]===76){let t=e[3],n=e[4];if(t===0&&n===0)switch(e[5]){case 0:{{let i=(((e[6]&15)<<12|(e[7]&15)<<8|(e[8]&15)<<4|e[9]&15)-1024)/10;this.setMasterTuning(i),y(`%cXG master tune. Cents: %c${i}`,c.info,c.recognized)}break}case 4:{let s=e[6];this.setMIDIVolume(s/127),y(`%cXG master volume. Volume: %c${s}`,c.info,c.recognized);break}case 5:{let s=127-e[6];this.setMIDIVolume(s/127),y(`%cXG master attenuation. Volume: %c${s}`,c.info,c.recognized);break}case 6:{let s=e[6]-64;this.setMasterParameter("transposition",s),y(`%cXG master transpose. Volume: %c${s}`,c.info,c.recognized);break}case 126:{y("%cXG system on",c.info),this.resetAllControllers("xg");break}}else if(t===2&&n===1){let s,i=e[5];i<=21?s="Reverb":i<=35?s="Chorus":s="Variation",y(`%cUnsupported XG ${s} Parameter: %c${i.toString(16)}`,c.warn,c.unrecognized)}else if(t===8){if(!fA.isSystemXG(this.masterParameters.midiSystem))return;let s=n+A;if(s>=this.midiChannels.length)return;let i=this.midiChannels[s],I=e[6];switch(e[5]){case 1:{i.controllerChange(S.bankSelect,I);break}case 2:{i.controllerChange(S.bankSelectLSB,I);break}case 3:{i.programChange(I);break}case 7:{i.setDrums(I!=0);break}case 8:{if(i.drumChannel)break;i.setCustomController(oA.channelKeyShift,I-64);break}case 11:{i.controllerChange(S.mainVolume,I);break}case 14:{let g=I;g===0?(i.randomPan=!0,y(`%cRandom pan is set to %cON%c for %c${s}`,c.info,c.recognized,c.info,c.value)):i.controllerChange(S.pan,g);break}case 17:{i.controllerChange(S.mainVolume,I);break}case 18:{i.controllerChange(S.chorusDepth,I);break}case 19:{i.controllerChange(S.reverbDepth,I);break}case 21:{i.controllerChange(S.vibratoRate,I);break}case 22:{i.controllerChange(S.vibratoDepth,I);break}case 23:{i.controllerChange(S.vibratoDelay,I);break}case 24:{i.controllerChange(S.brightness,I);break}case 25:{i.controllerChange(S.filterResonance,I);break}case 26:{i.controllerChange(S.attackTime,I);break}case 27:{i.controllerChange(S.decayTime,I);break}case 28:{i.controllerChange(S.releaseTime,I);break}default:y(`%cUnsupported Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}%c for channel ${s}`,c.warn,c.unrecognized,c.warn)}}else t===6||t===7?this.callEvent("synthDisplay",[...e]):fA.isSystemXG(this.masterParameters.midiSystem)&&zA(e,"Yamaha XG")}else zA(e,"Yamaha")}function mo(e,A){let t=e[0];if(!(this.masterParameters.deviceID!==Qe&&e[1]!==127&&this.masterParameters.deviceID!==e[1]))switch(t){default:{y(`%cUnrecognized SysEx: %c${ae(e)} (unknown manufacturer)`,c.warn,c.unrecognized);break}case 126:case 127:{Qo.call(this,e,A);break}case 65:{uo.call(this,e,A);break}case 67:{fo.call(this,e,A);break}case 245:{if(e.length<2)return;for(this.channelOffset=(e[1]-1)*16;this.midiChannels.length<=this.channelOffset;){y(`%cPort select, channel offset %c${this.channelOffset}%c. Creating a new port!`,c.info,c.value,c.info);for(let n=0;n<16;n++)this.createMIDIChannel(!0)}break}}}var So=.01,po=.05,yo=class{voices;midiChannels=[];soundBankManager=new Co(this.updatePresetList.bind(this));keyModifierManager=new Ga;sampleRate;tunings=new Float32Array(16384).fill(-1);masterParameters=ai;currentTime=0;midiVolume=1;reverbSend=1;enableEffects;enableEventSystem;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;gainSmoothingFactor;panSmoothingFactor;eventCallbackHandler;missingPresetHandler;cachedVoices=new Map;setMasterParameter=Bo.bind(this);getMasterParameter=Eo.bind(this);getAllMasterParameters=lo.bind(this);systemExclusive=mo.bind(this);voiceCount=0;channelOffset=0;lastPriorityAssignmentTime=0;eventQueue=[];sampleTime;constructor(e,A,t,n){this.eventCallbackHandler=e,this.missingPresetHandler=A,this.sampleRate=t,this.sampleTime=1/t,this.currentTime=n.initialTime,this.enableEffects=n.enableEffects,this.enableEventSystem=n.enableEventSystem,this.gainSmoothingFactor=So*(44100/t),this.panSmoothingFactor=po*(44100/t),ri.initCache(this.sampleRate),this.voices=[];for(let s=0;s<this.masterParameters.voiceCap;s++)this.voices.push(new Bi(this.sampleRate))}assignVoice(){for(let A=0;A<this.masterParameters.voiceCap;A++){let t=this.voices[A];if(!t.isActive)return t.priority=1/0,t}this.assignVoicePriorities();let e=this.voices[0];for(let A=0;A<this.masterParameters.voiceCap;A++){let t=this.voices[A];t.priority<e.priority&&(e=t)}return e.priority=1/0,e}stopAllChannels(e){y("%cStop all received!",c.info);for(let A of this.midiChannels)A.stopAllNotes(e)}processMessage(e,A,t,n){let s=()=>{let I=_n(e[0]),g=I.channel+A;switch(I.status){case F.noteOn:{let r=e[2];r>0?this.midiChannels[g].noteOn(e[1],r):this.midiChannels[g].noteOff(e[1]);break}case F.noteOff:{t?this.midiChannels[g].killNote(e[1]):this.midiChannels[g].noteOff(e[1]);break}case F.pitchWheel:{this.midiChannels[g].pitchWheel(e[2]<<7|e[1]);break}case F.controllerChange:{this.midiChannels[g].controllerChange(e[1],e[2]);break}case F.programChange:{this.midiChannels[g].programChange(e[1]);break}case F.polyPressure:{this.midiChannels[g].polyPressure(e[0],e[1]);break}case F.channelPressure:{this.midiChannels[g].channelPressure(e[1]);break}case F.systemExclusive:{this.systemExclusive(new q(e.slice(1)),A);break}case F.reset:{this.stopAllChannels(!1),this.resetAllControllers();break}default:break}},i=n.time;i>this.currentTime?(this.eventQueue.push({callback:s.bind(this),time:i}),this.eventQueue.sort((I,g)=>I.time-g.time)):s()}destroySynthProcessor(){this.voices.length=0;for(let e of this.midiChannels)e.lockedControllers=[],e.preset=void 0;this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}getVoices(e,A,t){let n=this.midiChannels[e],s=this.keyModifierManager.hasOverridePatch(e,A),i=n.preset;if(s){let I=this.keyModifierManager.getPatch(e,A);i=this.soundBankManager.getPreset(I,this.masterParameters.midiSystem)}return i?this.getVoicesForPreset(i,A,t):[]}createMIDIChannel(e){let A=new oo(this,this.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),A.setDrums(!0))}resetAllControllers(e=jn){if(this.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",e),this.tunings.fill(-1),this.setMIDIVolume(1),this.reverbSend=1,this.chorusSend=1,this.channelOffset=0,!(!this.drumPreset||!this.defaultPreset))for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[uA+W.pitchWheel]){let n=this.midiChannels[A].midiControllers[uA+W.pitchWheel];this.callEvent("pitchWheel",{channel:A,pitch:n,midiNote:-1})}if(!this.midiChannels[A].lockedControllers[uA+W.channelPressure]){let n=this.midiChannels[A].midiControllers[uA+W.channelPressure]>>7;this.callEvent("channelPressure",{channel:A,pressure:n})}}}renderAudio(e,A,t,n=0,s=0){if(this.eventQueue.length>0){let B=this.currentTime;for(;this.eventQueue[0]?.time<=B;)this.eventQueue.shift()?.callback()}let i=A[0],I=A[1],g=t[0],r=t[1];n=Math.max(n,0);let a=s||e[0].length-n;for(let B of this.midiChannels)B.clearVoiceCount();this.voiceCount=0;let h=this.masterParameters.voiceCap;for(let B=0;B<h;B++){let d=this.voices[B];if(!d.isActive)continue;let l=this.midiChannels[d.channel];l.isMuted||(l.voiceCount++,this.voiceCount++,l.renderVoice(d,this.currentTime,e[0],e[1],i,I,g,r,n,a))}for(let B of this.midiChannels)B.updateVoiceCount();this.currentTime+=a*this.sampleTime}renderAudioSplit(e,A,t,n=0,s=0){if(this.eventQueue.length>0){let B=this.currentTime;for(;this.eventQueue[0]?.time<=B;)this.eventQueue.shift()?.callback()}let i=e[0],I=e[1],g=A[0],r=A[1];n=Math.max(n,0);let a=s||t[0][0].length-n;for(let B of this.midiChannels)B.clearVoiceCount();this.voiceCount=0;let h=this.masterParameters.voiceCap;for(let B=0;B<h;B++){let d=this.voices[B];if(!d.isActive)continue;let l=this.midiChannels[d.channel];if(l.isMuted)continue;let u=d.channel%t.length;l.voiceCount++,this.voiceCount++,l.renderVoice(d,this.currentTime,t[u][0],t[u][1],i,I,g,r,n,a)}for(let B of this.midiChannels)B.updateVoiceCount();this.currentTime+=a*this.sampleTime}getVoicesForPreset(e,A,t){let n=this.getCachedVoice(e,A,t);if(n!==void 0)return n;let s=new Array;for(let i of e.getVoiceParameters(A,t)){let I=i.sample;if(i.sample.getAudioData()===void 0){eA(`Discarding invalid sample: ${I.name}`);continue}s.push(new qa(i,A,t,this.sampleRate))}return this.setCachedVoice(e,A,t,s),s}clearCache(){this.cachedVoices.clear()}callEvent(e,A){this.eventCallbackHandler(e,A)}setMIDIVolume(e){this.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(oA.masterTuning,e)}getCachedVoice(e,A,t){return this.cachedVoices.get(this.getCachedVoiceIndex(e,A,t))}setCachedVoice(e,A,t,n){this.cachedVoices.set(this.getCachedVoiceIndex(e,A,t),n)}assignVoicePriorities(){if(this.lastPriorityAssignmentTime===this.currentTime)return;this.lastPriorityAssignmentTime=this.currentTime;let e=this.masterParameters.voiceCap;for(let A=0;A<e;A++){let t=this.voices[A];t.priority=0,this.midiChannels[t.channel].drumChannel&&(t.priority+=5),t.isInRelease&&(t.priority-=5),t.priority+=t.velocity/25,t.priority-=t.volEnv.state,t.isInRelease&&(t.priority-=5),t.priority-=t.volEnv.attenuationCb/200}}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.callEvent("presetListChange",e),this.getDefaultPresets();for(let A of this.midiChannels)A.setPresetLock(!1);this.resetAllControllers()}getDefaultPresets(){this.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}getCachedVoiceIndex(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:i,program:I}=e;return i&&(n=128,s=0),n+s*128+I*16384+2097152*A+268435456*t}},kn=20;async function ko(e,A,t,n,s,i,I){let g=0,r=0,a=[];for(let d of e.samples){n&&i&&await d.compressSample(i),s&&d.setAudioData(d.getAudioData(),d.sampleRate);let l=d.getRawData(!0);g++,await I?.(d.name,g,e.samples.length),y(`%cEncoded sample %c${g}. ${d.name}%c of %c${e.samples.length}%c. Compressed: %c${d.isCompressed}%c.`,c.info,c.recognized,c.info,c.recognized,c.info,d.isCompressed?c.recognized:c.unrecognized,c.info),r+=l.length+(d.isCompressed?0:92),a.push(l)}r%2!==0&&r++;let h=new q(r+kn);kA(h,"LIST"),Et(h,r+kn-8,4),kA(h,"sdta"),kA(h,"smpl"),Et(h,r,4);let B=0;for(let[d,l]of e.samples.entries()){let u=a[d];h.set(u,B+kn);let f,p;l.isCompressed?(f=B,p=f+u.length):(f=B/2,p=f+u.length/2,B+=92),B+=u.length,A.push(f),t.push(p)}return h}var Do=48e3,zt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,i,I){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=i,this.loopEnd=I,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===wA.rightSample||this.sampleType===wA.leftSample||this.sampleType===wA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Do),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){eA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(wA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);switch(this.linkedSample=e,e.linkedSample=this,A){case wA.leftSample:{this.setSampleType(wA.leftSample),e.setSampleType(wA.rightSample);break}case wA.rightSample:{this.setSampleType(wA.rightSample),e.setSampleType(wA.leftSample);break}case wA.linkedSample:{this.setSampleType(wA.linkedSample),e.setSampleType(wA.linkedSample);break}default:throw new Error("Invalid sample type: "+A)}}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A===-1){eA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new q(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Zt.decode(this.compressedData).data[0];if(A===void 0)return eA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return eA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},wo=class extends zt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},qn=16,Fo=class extends zt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,i,I,g,r,a,h,B){let d=(a&qn)>0;a&=~qn,super(e,i,I,g,a,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=B;let l=h instanceof q?h.currentIndex:0;h instanceof q?d?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(h.slice(this.startByteOffset/2+l,this.endByteOffset/2+l))):this.s16leData=h.slice(l+this.startByteOffset,l+this.endByteOffset):this.setAudioData(h.slice(this.startByteOffset/2,this.endByteOffset/2),i),this.linkedSampleIndex=r}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(y(`%cInvalid linked sample for ${this.name}: ${A.name} is already linked to ${A.linkedSample.name}`,c.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(y(`%cInvalid linked sample for ${this.name}. Setting to mono.`,c.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let e=this.endByteOffset-this.startByteOffset;if(e<1)return eA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let[n,s]of t.entries())A[n]=s/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function Ls(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let i=Go(s,e.data,A);n.push(i),s++}if(n.pop(),t)for(let i of n)i.getLinkedSample(n);return n}function Go(e,A,t){let n=BA(A,20),s=L(A,4)*2,i=L(A,4)*2,I=L(A,4),g=L(A,4),r=L(A,4),a=A[A.currentIndex++];a>127&&(a=60);let h=Oi(A[A.currentIndex++]),B=L(A,2),d=L(A,2);return new Fo(n,s,i,I,g,r,a,h,B,d,t,e)}function Ro(e,A,t){let s=46*(e.samples.length+1),i=new q(s),I=new q(s),g=0;for(let[h,B]of e.samples.entries()){kA(i,B.name.slice(0,20),20),kA(I,B.name.slice(20),20);let d=A[h];rA(i,d),I.currentIndex+=4;let l=t[h];rA(i,l),I.currentIndex+=4;let u=B.loopStart+d,f=B.loopEnd+d;B.isCompressed&&(u-=d,f-=d),rA(i,u),rA(i,f),rA(i,B.sampleRate),i[i.currentIndex++]=B.originalKey,i[i.currentIndex++]=B.pitchCorrection,I.currentIndex+=14;let p=B.linkedSample?e.samples.indexOf(B.linkedSample):0;z(i,Math.max(0,p)&65535),z(I,Math.max(0,p)>>16),g=Math.max(g,p);let G=B.sampleType;B.isCompressed&&(G|=qn),z(i,G),I.currentIndex+=2}kA(i,"EOS",46),kA(I,"EOS",46);let r=IA("shdr",i),a=IA("shdr",I);return{pdta:r,xdta:a}}function Ns(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",i=A?"pbag":"ibag",I=A?"phdr":"inst",g=A?co:Io,r=0,a=new Array,h=0,B=new Array,d=new Array,l=new Array,u=0,f=new Array,p=j=>{a.push(r);let H=j.getWriteGenerators(e);r+=H.length,d.push(...H),B.push(h);let Z=j.modulators;h+=Z.length,l.push(...Z)};for(let j of t){f.push(u),p(j.globalZone);for(let H of j.zones)p(H);u+=j.zones.length+1}d.push(new FA(0,0,!1)),l.push(new QA(0,0,0,0,0)),a.push(r),B.push(h),f.push(u);let G=d.length*Ms,R=new q(G);for(let j of d)j.write(R);let M=l.length*Bt,V=new q(M);for(let j of l)j.write(V);let N=B.length*ro,C={pdta:new q(N),xdta:new q(N)};for(let[j,H]of B.entries()){let Z=a[j];z(C.pdta,Z&65535),z(C.pdta,H&65535),z(C.xdta,Z>>16),z(C.xdta,H>>16)}let nA=(t.length+1)*g,AA={pdta:new q(nA),xdta:new q(nA)};for(let[j,H]of t.entries())H.write(AA,f[j]);return A?(kA(AA.pdta,"EOP",20),AA.pdta.currentIndex+=4,z(AA.pdta,u&65535),AA.pdta.currentIndex+=12,kA(AA.xdta,"",20),AA.xdta.currentIndex+=4,z(AA.xdta,u>>16),AA.xdta.currentIndex+=12):(kA(AA.pdta,"EOI",20),z(AA.pdta,u&65535),kA(AA.xdta,"",20),z(AA.xdta,u>>16)),{writeXdta:Math.max(r,h,u)>65535,gen:{pdta:IA(n,R),xdta:IA(s,new q(Ms))},mod:{pdta:IA(s,V),xdta:IA(s,new q(Bt))},bag:{pdta:IA(i,C.pdta),xdta:IA(i,C.xdta)},hdr:{pdta:IA(I,AA.pdta),xdta:IA(I,AA.xdta)}}}var Kn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function Mo(e,A=Kn){let t=zn(A,Kn);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}RA("%cSaving soundbank...",c.info),y(`%cCompression: %c${t?.compress||"false"}%c`,c.info,c.recognized,c.info,c.recognized),HA("%cWriting INFO...",c.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(M=>M.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(M,V)=>{n.push(IA(M,re(V,!0,!0)))},i=new q(4);if(z(i,e.soundBankInfo.version.major),z(i,e.soundBankInfo.version.minor),n.push(IA("ifil",i)),e.soundBankInfo.romVersion){let M=new q(4);z(M,e.soundBankInfo.romVersion.major),z(M,e.soundBankInfo.romVersion.minor),n.push(IA("iver",M))}let I=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
7
+ ${e.soundBankInfo.subject}`:"");for(let[M,V]of Object.entries(e.soundBankInfo)){let N=M,C=V;if(C)switch(N){case"name":{s("INAM",C);break}case"comment":{s("ICMT",I);break}case"copyright":{s("ICOP",C);break}case"creationDate":{s("ICRD",C.toISOString());break}case"engineer":{s("IENG",C);break}case"product":{s("IPRD",C);break}case"romInfo":{s("irom",C);break}case"software":{s("ISFT",C);break}case"soundEngine":{s("isng",C);break}case"subject":break}}if(e.defaultModulators.some(M=>!Ci.some(V=>mA.isIdentical(V,M,!0)))&&t?.writeDefaultModulators){let M=e.defaultModulators;y(`%cWriting %c${M.length}%c default modulators...`,c.info,c.recognized,c.info);let V=Bt+M.length*Bt,N=new q(V);for(let C of M)C.write(N);Et(N,0,Bt),n.push(IA("DMOD",N))}X(),y("%cWriting SDTA...",c.info);let r=[],a=[],h=await ko(e,r,a,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);y("%cWriting PDTA...",c.info),y("%cWriting SHDR...",c.info);let B=Ro(e,r,a);HA("%cWriting instruments...",c.info);let d=Ns(e,!1);X(),HA("%cWriting presets...",c.info);let l=Ns(e,!0);X();let u=[l.hdr,l.bag,l.mod,l.gen,d.hdr,d.bag,d.mod,d.gen,B],f=MA("pdta",u.map(M=>M.pdta),!0);if(t.writeExtendedLimits&&(d.writeXdta||l.writeXdta||e.presets.some(M=>M.name.length>20)||e.instruments.some(M=>M.name.length>20)||e.samples.some(M=>M.name.length>20))){y("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",c.info,c.value);let M=MA("xdta",u.map(V=>V.xdta),!0);n.push(M)}let G=MA("INFO",n,!0);y("%cWriting the output file...",c.info);let R=MA("RIFF",[re("sfbk"),G,h,f]);return y(`%cSaved succesfully! Final file size: %c${R.length}`,c.info,c.recognized),X(),R.buffer}var $e=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw X(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(BA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(iA(e.data));return t}},ct=20,Dn=16,ze=class Ct extends $e{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Ct;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Ct,n=L(A.data,4);if(n!==ct&&eA(`Wsmp cbSize mismatch: got ${n}, expected ${ct}.`),t.unityNote=L(A.data,2),t.fineTune=Wn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=L(A.data,4)|0,t.fulOptions=L(A.data,4),L(A.data,4)!==0){let i=L(A.data,4);i!==Dn&&eA(`CbSize for loop in wsmp mismatch. Expected ${ct}, got ${i}.`);let I=L(A.data,4),g=L(A.data,4),r=L(A.data,4);t.loops.push({loopStart:g,loopLength:r,loopType:I})}return t}static fromSFSample(A){let t=new Ct;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ks.forward}),t}static fromSFZone(A){let t=new Ct;t.unityNote=A.getGenerator(o.overridingRootKey,A.sample.originalKey),A.getGenerator(o.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(o.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(o.sampleModes,0);if(s!==0){let i=A.sample.loopStart+A.getGenerator(o.startloopAddrsOffset,0)+A.getGenerator(o.startloopAddrsCoarseOffset,0)*32768,I=A.sample.loopEnd+A.getGenerator(o.endloopAddrsOffset,0)+A.getGenerator(o.endloopAddrsCoarseOffset,0)*32768,g;switch(s){case 1:default:{g=0;break}case 3:g=1}t.loops.push({loopType:g,loopStart:i,loopLength:I-i})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ks.loopAndRelease?3:1),n!==0&&A.setGenerator(o.sampleModes,n);let g=-(this.gain>>16)/.4;if(g!==0&&A.setGenerator(o.initialAttenuation,g),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(o.overridingRootKey,this.unityNote),s){let r=s.loopStart-t.loopStart,h=s.loopStart+s.loopLength-t.loopEnd;if(r!==0){let B=r%32768;A.setGenerator(o.startloopAddrsOffset,B);let d=Math.trunc(r/32768);d!==0&&A.setGenerator(o.startloopAddrsCoarseOffset,d)}if(h!==0){let B=h%32768;A.setGenerator(o.endloopAddrsOffset,B);let d=Math.trunc(h/32768);d!==0&&A.setGenerator(o.endloopAddrsCoarseOffset,d)}}}write(){let A=new q(ct+this.loops.length*Dn);rA(A,ct),z(A,this.unityNote),z(A,this.fineTune),rA(A,this.gain),rA(A,this.fulOptions),rA(A,this.loops.length);for(let t of this.loops)rA(A,Dn),rA(A,t.loopType),rA(A,t.loopStart),rA(A,t.loopLength);return IA("wsmp",A)}},wn={PCM:1,ALAW:6};function bo(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,i=!1;A===1?(s=255,i=!0):s=t;let I=e.length/A,g=new Float32Array(I);if(A===2){let r=new Int16Array(e.buffer);for(let[a,h]of r.entries())g[a]=h/32768}else for(let r=0;r<g.length;r++){let a=L(e,A);i?g[r]=a/s-.5:(a>=t&&(a-=n),g[r]=a/s)}return g}function vo(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let i=L(e,A),I=i^85;I&=127;let g=I>>4,r=I&15;g>0&&(r+=16),r=(r<<4)+8,g>1&&(r=r<<g-1);let a=i>127?r:-r;n[s]=a/32678}return n}var Lo=class extends zt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,i,I,g,r){super(e,A,t,n,wA.monoSample,s,i),this.dataOverridden=!1,this.rawData=I.data,this.wFormatTag=g,this.bytesPerSample=r}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let e;switch(this.wFormatTag){default:{eA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break}case wn.PCM:{e=bo(this.rawData,this.bytesPerSample);break}case wn.ALAW:{e=vo(this.rawData,this.bytesPerSample);break}}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===wn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ts=class Pn extends $e{waveSample=new ze;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(l=>l.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=L(n.data,2),i=L(n.data,2);if(i!==1)throw new Error(`Only mono samples are supported. Fmt reports ${i} channels.`);let I=L(n.data,4);L(n.data,4),L(n.data,2);let r=L(n.data,2)/8,a=t.find(l=>l.header==="data");if(!a)throw new Error("No data chunk in the WAVE chunk!");let h=new Pn(s,r,I,a),B=ke(t,"INFO");if(B){let l=iA(B.data);for(;l.header!=="INAM"&&B.data.currentIndex<B.data.length;)l=iA(B.data);l.header==="INAM"&&(h.name=BA(l.data,l.size).trim())}let d=t.find(l=>l.header==="wsmp");return d&&(h.waveSample=ze.read(d)),h}static fromSFSample(A){let t=A.getRawData(!1),n=new Pn(1,2,A.sampleRate,new Vs("data",t.length,new q(t.buffer)));return n.name=A.name,n.waveSample=ze.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let i=0,I=0,g=this.waveSample.loops?.[0];g&&(i=g.loopStart,I=g.loopStart+g.loopLength);let r=new Lo(this.name,this.sampleRate,t,n,i,I,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(r)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=IA("data",this.dataChunk.data),s=IA("INAM",re(this.name,!0)),i=IA("INFO",s,!1,!0);return y(`%cSaved %c${this.name}%c successfully!`,c.recognized,c.value,c.recognized),MA("wave",[A,t,n,i],!0)}writeFmt(){let A=new q(18);return z(A,this.wFormatTag),z(A,1),rA(A,this.sampleRate),rA(A,this.sampleRate*2),z(A,2),z(A,this.bytesPerSample*8),IA("fmt ",A)}},Si=new QA(219,0,o.reverbEffectsSend,1e3,0),pi=new QA(221,0,o.chorusEffectsSend,1e3,0),No=new QA(129,0,o.vibLfoToPitch,0,0),To=new QA(13,0,o.vibLfoToPitch,0,0),WA=class Vn{source;transform;bipolar;invert;constructor(A=U.none,t=CA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(U).find(A=>U[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(CA).find(A=>CA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new Vn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case S.modulationWheel:{t=U.modulationWheel;break}case S.mainVolume:{t=U.volume;break}case S.pan:{t=U.pan;break}case S.expressionController:{t=U.expression;break}case S.chorusDepth:{t=U.chorus;break}case S.reverbDepth:{t=U.reverb;break}}else switch(A.index){case W.noController:{t=U.none;break}case W.noteOnKeyNum:{t=U.keyNum;break}case W.noteOnVelocity:{t=U.velocity;break}case W.pitchWheel:{t=U.pitchWheel;break}case W.pitchWheelRange:{t=U.pitchWheelRange;break}case W.polyPressure:{t=U.polyPressure;break}case W.channelPressure:t=U.channelPressure}if(t!==void 0)return new Vn(t,A.curveType,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let A,t=!1;switch(this.source){default:case U.modLfo:case U.vibratoLfo:case U.coarseTune:case U.fineTune:case U.modEnv:return;case U.keyNum:{A=W.noteOnKeyNum;break}case U.none:{A=W.noController;break}case U.modulationWheel:{A=S.modulationWheel,t=!0;break}case U.pan:{A=S.pan,t=!0;break}case U.reverb:{A=S.reverbDepth,t=!0;break}case U.chorus:{A=S.chorusDepth,t=!0;break}case U.expression:{A=S.expressionController,t=!0;break}case U.volume:{A=S.mainVolume,t=!0;break}case U.velocity:{A=W.noteOnVelocity;break}case U.polyPressure:{A=W.polyPressure;break}case U.channelPressure:{A=W.channelPressure;break}case U.pitchWheel:{A=W.pitchWheel;break}case U.pitchWheelRange:{A=W.pitchWheelRange;break}}if(A!==void 0)return new _A(A,this.transform,t,this.bipolar,this.invert)}},Uo=new Set([o.sampleModes,o.initialAttenuation,o.keyRange,o.velRange,o.sampleID,o.fineTune,o.coarseTune,o.startAddrsOffset,o.startAddrsCoarseOffset,o.endAddrOffset,o.endAddrsCoarseOffset,o.startloopAddrsOffset,o.startloopAddrsCoarseOffset,o.endloopAddrsOffset,o.endloopAddrsCoarseOffset,o.overridingRootKey,o.exclusiveClass]),ht=class be{source;control;destination;scale;transform;constructor(A=new WA,t=new WA,n,s,i){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=i}get isStaticParameter(){return this.source.source===U.none&&this.control.source===U.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(CA).find(A=>CA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(w).find(A=>w[A]===this.destination)??this.destination.toString()}static read(A){let t=L(A,2),n=L(A,2),s=L(A,2),i=L(A,2),I=L(A,4)|0,g=i&15,r=i>>4&15,a=ve(i,8),h=ve(i,9),B=new WA(n,r,a,h),d=i>>10&15,l=ve(i,14),u=ve(i,15),f=new WA(t,d,l,u);return new be(f,B,s,g,I)}static fromSFModulator(A,t){let n=h=>{eA(`Failed converting SF modulator into DLS:
8
8
  ${A.toString()}
9
- (${h})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(mA.isIdentical(A,pi,!0)||mA.isIdentical(A,Si,!0))return;let s=WA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let i=WA.fromSFSource(A.secondarySource);if(!i){n("Invalid secondary source");return}let I=ve.fromSFDestination(A.destination,A.transformAmount);if(I===void 0){n("Invalid destination");return}let g=A.transformAmount,r;if(typeof I=="number")r=I;else if(r=I.destination,g=I.amount,I.source!==U.none){if(i.source!==U.none&&s.source!==U.none){n("Articulation generators with secondary source are not supported");return}s.source!==U.none&&(i=s),s=new WA(I.source,CA.linear,I.isBipolar)}let a=new ve(s,i,r,0,g<<16);t.connectionBlocks.push(a)}static copyFrom(A){return new ve(WA.copyFrom(A.source),WA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Uo.has(A.generatorType))return;let n=r=>{eA(`Failed converting SF2 generator into DLS:
9
+ (${h})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(mA.isIdentical(A,pi,!0)||mA.isIdentical(A,Si,!0))return;let s=WA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let i=WA.fromSFSource(A.secondarySource);if(!i){n("Invalid secondary source");return}let I=be.fromSFDestination(A.destination,A.transformAmount);if(I===void 0){n("Invalid destination");return}let g=A.transformAmount,r;if(typeof I=="number")r=I;else if(r=I.destination,g=I.amount,I.source!==U.none){if(i.source!==U.none&&s.source!==U.none){n("Articulation generators with secondary source are not supported");return}s.source!==U.none&&(i=s),s=new WA(I.source,CA.linear,I.isBipolar)}let a=new be(s,i,r,0,g<<16);t.connectionBlocks.push(a)}static copyFrom(A){return new be(WA.copyFrom(A.source),WA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Uo.has(A.generatorType))return;let n=r=>{eA(`Failed converting SF2 generator into DLS:
10
10
  ${A.toString()}
11
- (${r})`)},s=ve.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let i=new WA,I,g=A.generatorValue;typeof s=="number"?I=s:(I=s.destination,g=s.amount,i.source=s.source,i.bipolar=s.isBipolar),t.connectionBlocks.push(new ve(i,new WA,I,0,g<<16))}static fromSFDestination(A,t){switch(A){default:return;case o.initialAttenuation:return{destination:w.gain,amount:-t,isBipolar:!1,source:U.none};case o.fineTune:return w.pitch;case o.pan:return w.pan;case o.keyNum:return w.keyNum;case o.reverbEffectsSend:return w.reverbSend;case o.chorusEffectsSend:return w.chorusSend;case o.freqModLFO:return w.modLfoFreq;case o.delayModLFO:return w.modLfoDelay;case o.delayVibLFO:return w.vibLfoDelay;case o.freqVibLFO:return w.vibLfoFreq;case o.delayVolEnv:return w.volEnvDelay;case o.attackVolEnv:return w.volEnvAttack;case o.holdVolEnv:return w.volEnvHold;case o.decayVolEnv:return w.volEnvDecay;case o.sustainVolEnv:return{destination:w.volEnvSustain,amount:1e3-t,isBipolar:!1,source:U.none};case o.releaseVolEnv:return w.volEnvRelease;case o.delayModEnv:return w.modEnvDelay;case o.attackModEnv:return w.modEnvAttack;case o.holdModEnv:return w.modEnvHold;case o.decayModEnv:return w.modEnvDecay;case o.sustainModEnv:return{destination:w.modEnvSustain,amount:1e3-t,isBipolar:!1,source:U.none};case o.releaseModEnv:return w.modEnvRelease;case o.initialFilterFc:return w.filterCutoff;case o.initialFilterQ:return w.filterQ;case o.modEnvToFilterFc:return{source:U.modEnv,destination:w.filterCutoff,amount:t,isBipolar:!1};case o.modEnvToPitch:return{source:U.modEnv,destination:w.pitch,amount:t,isBipolar:!1};case o.modLfoToFilterFc:return{source:U.modLfo,destination:w.filterCutoff,amount:t,isBipolar:!0};case o.modLfoToVolume:return{source:U.modLfo,destination:w.gain,amount:t,isBipolar:!0};case o.modLfoToPitch:return{source:U.modLfo,destination:w.pitch,amount:t,isBipolar:!0};case o.vibLfoToPitch:return{source:U.vibratoLfo,destination:w.pitch,amount:t,isBipolar:!0};case o.keyNumToVolEnvHold:return{source:U.keyNum,destination:w.volEnvHold,amount:t,isBipolar:!0};case o.keyNumToVolEnvDecay:return{source:U.keyNum,destination:w.volEnvDecay,amount:t,isBipolar:!0};case o.keyNumToModEnvHold:return{source:U.keyNum,destination:w.modEnvHold,amount:t,isBipolar:!0};case o.keyNumToModEnvDecay:return{source:U.keyNum,destination:w.modEnvDecay,amount:t,isBipolar:!0};case o.scaleTuning:return{source:U.keyNum,destination:w.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
11
+ (${r})`)},s=be.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let i=new WA,I,g=A.generatorValue;typeof s=="number"?I=s:(I=s.destination,g=s.amount,i.source=s.source,i.bipolar=s.isBipolar),t.connectionBlocks.push(new be(i,new WA,I,0,g<<16))}static fromSFDestination(A,t){switch(A){default:return;case o.initialAttenuation:return{destination:w.gain,amount:-t,isBipolar:!1,source:U.none};case o.fineTune:return w.pitch;case o.pan:return w.pan;case o.keyNum:return w.keyNum;case o.reverbEffectsSend:return w.reverbSend;case o.chorusEffectsSend:return w.chorusSend;case o.freqModLFO:return w.modLfoFreq;case o.delayModLFO:return w.modLfoDelay;case o.delayVibLFO:return w.vibLfoDelay;case o.freqVibLFO:return w.vibLfoFreq;case o.delayVolEnv:return w.volEnvDelay;case o.attackVolEnv:return w.volEnvAttack;case o.holdVolEnv:return w.volEnvHold;case o.decayVolEnv:return w.volEnvDecay;case o.sustainVolEnv:return{destination:w.volEnvSustain,amount:1e3-t,isBipolar:!1,source:U.none};case o.releaseVolEnv:return w.volEnvRelease;case o.delayModEnv:return w.modEnvDelay;case o.attackModEnv:return w.modEnvAttack;case o.holdModEnv:return w.modEnvHold;case o.decayModEnv:return w.modEnvDecay;case o.sustainModEnv:return{destination:w.modEnvSustain,amount:1e3-t,isBipolar:!1,source:U.none};case o.releaseModEnv:return w.modEnvRelease;case o.initialFilterFc:return w.filterCutoff;case o.initialFilterQ:return w.filterQ;case o.modEnvToFilterFc:return{source:U.modEnv,destination:w.filterCutoff,amount:t,isBipolar:!1};case o.modEnvToPitch:return{source:U.modEnv,destination:w.pitch,amount:t,isBipolar:!1};case o.modLfoToFilterFc:return{source:U.modLfo,destination:w.filterCutoff,amount:t,isBipolar:!0};case o.modLfoToVolume:return{source:U.modLfo,destination:w.gain,amount:t,isBipolar:!0};case o.modLfoToPitch:return{source:U.modLfo,destination:w.pitch,amount:t,isBipolar:!0};case o.vibLfoToPitch:return{source:U.vibratoLfo,destination:w.pitch,amount:t,isBipolar:!0};case o.keyNumToVolEnvHold:return{source:U.keyNum,destination:w.volEnvHold,amount:t,isBipolar:!0};case o.keyNumToVolEnvDecay:return{source:U.keyNum,destination:w.volEnvDecay,amount:t,isBipolar:!0};case o.keyNumToModEnvHold:return{source:U.keyNum,destination:w.modEnvHold,amount:t,isBipolar:!0};case o.keyNumToModEnvDecay:return{source:U.keyNum,destination:w.modEnvDecay,amount:t,isBipolar:!0};case o.scaleTuning:return{source:U.keyNum,destination:w.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
12
12
  Control: ${this.control.toString()},
13
13
  Scale: ${this.scale} >> 16 = ${this.shortScale},
14
14
  Output transform: ${this.transformName}
15
- Destination: ${this.destinationName}`}write(){let A=new O(12);z(A,this.source.source),z(A,this.control.source),z(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return z(A,t),rA(A,this.scale),A}toSFGenerator(A){let t=this.destination,n=this.shortScale;switch(t){default:{y(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
15
+ Destination: ${this.destinationName}`}write(){let A=new q(12);z(A,this.source.source),z(A,this.control.source),z(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return z(A,t),rA(A,this.scale),A}toSFGenerator(A){let t=this.destination,n=this.shortScale;switch(t){default:{y(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
16
16
  (invalid destination)`,c.warn,c.value,c.unrecognized);return}case w.pan:{A.setGenerator(o.pan,n);break}case w.gain:{A.addToGenerator(o.initialAttenuation,-n/.4);break}case w.filterCutoff:{A.setGenerator(o.initialFilterFc,n);break}case w.filterQ:{A.setGenerator(o.initialFilterQ,n);break}case w.modLfoFreq:{A.setGenerator(o.freqModLFO,n);break}case w.modLfoDelay:{A.setGenerator(o.delayModLFO,n);break}case w.vibLfoFreq:{A.setGenerator(o.freqVibLFO,n);break}case w.vibLfoDelay:{A.setGenerator(o.delayVibLFO,n);break}case w.volEnvDelay:{A.setGenerator(o.delayVolEnv,n);break}case w.volEnvAttack:{A.setGenerator(o.attackVolEnv,n);break}case w.volEnvHold:{A.setGenerator(o.holdVolEnv,n);break}case w.volEnvDecay:{A.setGenerator(o.decayVolEnv,n);break}case w.volEnvRelease:{A.setGenerator(o.releaseVolEnv,n);break}case w.volEnvSustain:{A.setGenerator(o.sustainVolEnv,1e3-n);break}case w.modEnvDelay:{A.setGenerator(o.delayModEnv,n);break}case w.modEnvAttack:{A.setGenerator(o.attackModEnv,n);break}case w.modEnvHold:{A.setGenerator(o.holdModEnv,n);break}case w.modEnvDecay:{A.setGenerator(o.decayModEnv,n);break}case w.modEnvRelease:{A.setGenerator(o.releaseModEnv,n);break}case w.modEnvSustain:{A.setGenerator(o.sustainModEnv,1e3-n);break}case w.reverbSend:{A.setGenerator(o.reverbEffectsSend,n);break}case w.chorusSend:{A.setGenerator(o.chorusEffectsSend,n);break}case w.pitch:{A.fineTuning+=n;break}}}toSFModulator(A){let t=this.shortScale,n,s,i=new _A,I=this.toCombinedSFDestination();if(I){n=I;let r=this.control.toSFSource();if(!r){this.failedConversion("Invalid control");return}s=r}else{let r=this.toSFDestination();if(!r){this.failedConversion("Invalid destination");return}typeof r=="object"?(t=r.newAmount,n=r.gen):n=r;let a=this.source.toSFSource();if(!a){this.failedConversion("Invalid source");return}s=a;let h=this.control.toSFSource();if(!h){this.failedConversion("Invalid control");return}i=h}this.transform!==CA.linear&&s.curveType===CA.linear&&(s.curveType=this.transform),n===o.initialAttenuation&&((this.source.source===U.velocity||this.source.source===U.volume||this.source.source===U.expression)&&(s.isNegative=!0),t=Math.min(960,Math.max(0,t)));let g=new mA(s,i,n,t,0);A.addModulators(g)}toCombinedSFDestination(){let A=this.source.source,t=this.destination;return A===U.vibratoLfo&&t===w.pitch?o.vibLfoToPitch:A===U.modLfo&&t===w.pitch?o.modLfoToPitch:A===U.modLfo&&t===w.filterCutoff?o.modLfoToFilterFc:A===U.modLfo&&t===w.gain?o.modLfoToVolume:A===U.modEnv&&t===w.filterCutoff?o.modEnvToFilterFc:A===U.modEnv&&t===w.pitch?o.modEnvToPitch:void 0}failedConversion(A){y(`%cFailed converting DLS articulator into SF2:
17
17
  %c${this.toString()}%c
18
- (${A})`,c.warn,c.value,c.unrecognized)}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case w.none:return;case w.pan:return o.pan;case w.gain:return{gen:o.initialAttenuation,newAmount:-A};case w.pitch:return o.fineTune;case w.keyNum:return o.overridingRootKey;case w.volEnvDelay:return o.delayVolEnv;case w.volEnvAttack:return o.attackVolEnv;case w.volEnvHold:return o.holdVolEnv;case w.volEnvDecay:return o.decayVolEnv;case w.volEnvSustain:return{gen:o.sustainVolEnv,newAmount:1e3-A};case w.volEnvRelease:return o.releaseVolEnv;case w.modEnvDelay:return o.delayModEnv;case w.modEnvAttack:return o.attackModEnv;case w.modEnvHold:return o.holdModEnv;case w.modEnvDecay:return o.decayModEnv;case w.modEnvSustain:return{gen:o.sustainModEnv,newAmount:1e3-A};case w.modEnvRelease:return o.releaseModEnv;case w.filterCutoff:return o.initialFilterFc;case w.filterQ:return o.initialFilterQ;case w.chorusSend:return o.chorusEffectsSend;case w.reverbSend:return o.reverbEffectsSend;case w.modLfoFreq:return o.freqModLFO;case w.modLfoDelay:return o.delayModLFO;case w.vibLfoFreq:return o.freqVibLFO;case w.vibLfoDelay:return o.delayVibLFO}}},yi=class Xn extends At{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode;for(let t of A.connectionBlocks)this.connectionBlocks.push(Ct.copyFrom(t))}fromSFZone(A){this.mode="dls2";let t=new Wt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case o.keyNumToVolEnvDecay:{s=o.decayVolEnv;break}case o.keyNumToVolEnvHold:{s=o.holdVolEnv;break}case o.keyNumToModEnvDecay:{s=o.decayModEnv;break}case o.keyNumToModEnvHold:s=o.holdModEnv}let i=t.getGenerator(s,void 0),I=n.generatorValue*-128;if(i===void 0)continue;let g=60/128*I,r=i-g;t.setGenerator(n.generatorType,I,!1),t.setGenerator(s,r,!1)}for(let n of t.generators)Ct.fromSFGenerator(n,this);for(let n of t.modulators)Ct.fromSFModulator(n,this)}read(A){let t=De(A,"lart"),n=De(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=iA(t.data);Xn.verifyHeader(s,"art1","art2");let i=s.data,I=L(i,4);I!==8&&eA(`CbSize in articulation mismatch. Expected 8, got ${I}`);let g=L(i,4);for(let r=0;r<g;r++)this.connectionBlocks.push(Ct.read(i))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=iA(n.data);Xn.verifyHeader(s,"art2","art1");let i=s.data,I=L(i,4);I!==8&&eA(`CbSize in articulation mismatch. Expected 8, got ${I}`);let g=L(i,4);for(let r=0;r<g;r++)this.connectionBlocks.push(Ct.read(i))}}write(){let A=new O(8);rA(A,8),rA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=MA(this.mode==="dls2"?"art2":"art1",[A,...t]);return IA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,i,I)=>{let g=n/-128;if(A.setGenerator(s,g),g<=120){let r=Math.round(.46875*n),a=this.connectionBlocks.find(h=>h.isStaticParameter&&h.destination===I);a&&A.setGenerator(i,r+a.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,i=n.source.source,I=n.control.source,g=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(I===U.none)if(i===U.keyNum){if(g===w.pitch){A.setGenerator(o.scaleTuning,s/128);continue}if(g===w.modEnvHold||g===w.modEnvDecay||g===w.volEnvHold||g==w.volEnvDecay)continue}else{let r=n.toCombinedSFDestination();if(r){A.setGenerator(r,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(mA.copyFrom(No),mA.copyFrom(To));for(let n of this.connectionBlocks){if(n.source.source!==U.keyNum)continue;let s=n.shortScale;switch(n.destination){default:case w.volEnvHold:{t(s,o.keyNumToVolEnvHold,o.holdVolEnv,w.volEnvHold);break}case w.volEnvDecay:{t(s,o.keyNumToVolEnvDecay,o.decayVolEnv,w.volEnvDecay);break}case w.modEnvHold:{t(s,o.keyNumToModEnvHold,o.holdModEnv,w.modEnvHold);break}case w.modEnvDecay:{t(s,o.keyNumToModEnvDecay,o.decayModEnv,w.modEnvDecay);break}}}}},Fn=class Ht{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Ht(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=L(A.data,2),n=L(A.data,2),s=L(A.data,4),i=L(A.data,4),I=new Ht(i);return I.channel=s,I.fusOptions=t,I.phaseGroup=n,I}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new Ht(n);switch(t.sample.sampleType){default:case wA.leftSample:case wA.monoSample:{s.channel=Math.trunc(1);break}case wA.rightSample:s.channel=2}return s}write(){let A=new O(12);return z(A,this.fusOptions),z(A,this.phaseGroup),rA(A,this.channel),rA(A,this.tableIndex),IA("wlnk",A)}},Yt=class Ze extends At{articulation=new yi;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Ze(Fn.copyFrom(A.waveLink),_e.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(f=>f.header==="wsmp"),i=s?_e.read(s):void 0,I=n.find(f=>f.header==="wlnk");if(!I){eA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let g=Fn.read(I),r=n.find(f=>f.header==="rgnh");if(!r){eA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let a=A[g.tableIndex];a||Ze.parsingError(`Invalid sample index: ${g.tableIndex}. Samples available: ${A.length}`),i??=a.waveSample;let h=new Ze(g,i),B=L(r.data,2),d=L(r.data,2),l=L(r.data,2),u=L(r.data,2);return l===0&&u===0&&(u=127,l=0),h.keyRange.max=d,h.keyRange.min=B,h.velRange.max=u,h.velRange.min=l,h.fusOptions=L(r.data,2),h.keyGroup=L(r.data,2),r.data.length-r.data.currentIndex>=2&&(h.usLayer=L(r.data,2)),h.articulation.read(n),h}static fromSFZone(A,t){let n=_e.fromSFZone(A),s=Fn.fromSFZone(t,A),i=new Ze(s,n);return i.keyRange.min=Math.max(A.keyRange.min,0),i.keyRange.max=A.keyRange.max,i.velRange.min=Math.max(A.velRange.min,0),i.velRange.max=A.velRange.max,i.keyGroup=A.getGenerator(o.exclusiveClass,0),i.articulation.fromSFZone(A),i}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return MA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Ze.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(o.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(i=>i.generatorValue!==XA[i.generatorType].def),s}writeHeader(){let A=new O(12);return z(A,Math.max(this.keyRange.min,0)),z(A,this.keyRange.max),z(A,Math.max(this.velRange.min,0)),z(A,this.velRange.max),z(A,this.fusOptions),z(A,this.keyGroup),z(A,this.usLayer),IA("rgnh",A)}},Gn=class Jt extends At{articulation=new yi;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new Jt;t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation);for(let n of A.regions)t.regions.push(Yt.copyFrom(n));return t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(d=>d.header==="insh");if(!s)throw X(),new Error("No instrument header!");let i="",I=De(n,"INFO");if(I){let d=iA(I.data);for(;d.header!=="INAM";)d=iA(I.data);i=BA(d.data,d.data.length).trim()}i.length===0&&(i="Unnamed Instrument");let g=new Jt;g.name=i;let r=L(s.data,4),a=L(s.data,4),h=L(s.data,4);g.program=h&127,g.bankMSB=a>>>8&127,g.bankLSB=a&127,g.isGMGSDrum=a>>>31>0,RA(`%cParsing %c"${i}"%c...`,c.info,c.recognized,c.info);let B=De(n,"lrgn");if(!B)throw X(),new Error("No region list!");g.articulation.read(n);for(let d=0;d<r;d++){let l=iA(B.data);this.verifyHeader(l,"LIST");let u=BA(l.data,4);u!=="rgn "&&u!=="rgn2"&&(X(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${u}"`));let f=Yt.read(A,l);f&&g.regions.push(f)}return X(),g}static fromSFPreset(A,t){let n=new Jt;n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,HA(`%cConverting %c${A.toString()}%c to DLS...`,c.info,c.value,c.info);let s=A.toFlattenedInstrument();for(let i of s.zones)n.regions.push(Yt.fromSFZone(i,t));return X(),n}write(){RA(`%cWriting %c${this.name}%c...`,c.info,c.recognized,c.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(MA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=IA("INAM",re(this.name,!0));return A.push(IA("INFO",n,!1,!0)),X(),MA("ins ",A,!0)}toSFPreset(A){let t=new ut(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new Qt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone);for(let s of this.regions)s.toSFZone(n,A.samples);n.globalize(),n.globalZone.modulators.some(s=>s.destination===o.reverbEffectsSend)||n.globalZone.addModulators(mA.copyFrom(Si)),n.globalZone.modulators.some(s=>s.destination===o.chorusEffectsSend)||n.globalZone.addModulators(mA.copyFrom(pi)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==XA[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new O(12);rA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),rA(A,t),rA(A,this.program&127),IA("insh",A)}},ki={progressFunction:void 0},Di=class Zn extends At{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(A){if(!A)throw new Error("No data provided!");let t=new O(A);HA("%cParsing DLS file...",c.info);let n=iA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(BA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(iA(t));let i=new Zn;i.soundBankInfo.name="Unnamed DLS",i.soundBankInfo.product="SpessaSynth DLS",i.soundBankInfo.comment="(no description)";let I=De(s,"INFO");if(I)for(;I.data.currentIndex<I.data.length;){let u=iA(I.data),f=u.header,p=BA(u.data,u.size);switch(f){case"INAM":{i.soundBankInfo.name=p;break}case"ICRD":{i.soundBankInfo.creationDate=ns(p);break}case"ICMT":{i.soundBankInfo.comment=p;break}case"ISBJ":{i.soundBankInfo.subject=p;break}case"ICOP":{i.soundBankInfo.copyright=p;break}case"IENG":{i.soundBankInfo.engineer=p;break}case"IPRD":{i.soundBankInfo.product=p;break}case"ISFT":i.soundBankInfo.software=p}}this.printInfo(i);let g=s.find(u=>u.header==="colh");if(!g)return this.parsingError("No colh chunk!"),5;let r=L(g.data,4);y(`%cInstruments amount: %c${r}`,c.info,c.recognized);let a=De(s,"wvpl");if(!a)return this.parsingError("No wvpl chunk!"),5;let h=this.verifyAndReadList(a,"wvpl");for(let u of h)i.samples.push(Ts.read(u));let B=De(s,"lins");if(!B)return this.parsingError("No lins chunk!"),5;let d=this.verifyAndReadList(B,"lins");RA("%cLoading instruments...",c.info),d.length!==r&&eA(`Colh reported invalid amount of instruments. Detected ${d.length}, expected ${r}`);for(let u of d)i.instruments.push(Gn.read(i.samples,u));X();let l=s.find(u=>u.header==="pgal");if(l){y("%cFound the instrument aliasing chunk!",c.recognized);let u=l.data;(u[0]!==0||u[1]!==1||u[2]!==2||u[3]!==3)&&(u.currentIndex+=4);let f=i.instruments.find(G=>fA.isXGDrums(G.bankMSB)||G.isGMGSDrum);if(!f)return eA("MobileBAE aliasing chunk without a drum preset. Aborting!"),i;let p=u.slice(u.currentIndex,u.currentIndex+128);u.currentIndex+=128;for(let G=0;G<128;G++){let R=p[G];if(R===G)continue;let M=f.regions.find(N=>N.keyRange.max===R&&N.keyRange.min===R);if(!M){eA(`Invalid drum alias ${G} to ${R}: region does not exist.`);continue}let V=Yt.copyFrom(M);V.keyRange.max=G,V.keyRange.min=G,f.regions.push(V)}for(u.currentIndex+=4;u.currentIndex<u.length;){let G=L(u,2),R=G&127,M=G>>7&127,V=u[u.currentIndex++],N=u[u.currentIndex++];N!==0&&eA(`Invalid alias byte. Expected 0, got ${N}`);let C=L(u,2),nA=C&127,AA=C>>7&127,j=u[u.currentIndex++];N=u[u.currentIndex++],N!==0&&eA(`Invalid alias header. Expected 0, got ${N}`);let H=i.instruments.find(P=>P.bankLSB===nA&&P.bankMSB===AA&&P.program===j&&!P.isGMGSDrum);if(!H){eA(`Invalid alias. Missing instrument: ${nA}:${AA}:${j}`);continue}let Z=Gn.copyFrom(H);Z.bankMSB=M,Z.bankLSB=R,Z.program=V,i.instruments.push(Z)}}return y(`%cParsing finished! %c"${i.soundBankInfo.name||"UNNAMED"}"%c has %c${i.instruments.length}%c instruments and %c${i.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X(),i}static fromSF(A){RA("%cSaving SF2 to DLS level 2...",c.info);let t=new Zn;t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
19
- Converted from SF2 to DLS with SpessaSynth`;for(let n of A.samples)t.samples.push(Ts.fromSFSample(n));for(let n of A.presets)t.instruments.push(Gn.fromSFPreset(n,A.samples));return y("%cConversion complete!",c.recognized),X(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;y(`%c${t}: %c"${s.major}.${s.minor}"`,c.info,c.recognized)}y(`%c${t}: %c${n.toLocaleString()}`,c.info,c.recognized)}}async write(A=ki){RA("%cSaving DLS...",c.info);let t=new O(4);rA(t,this.instruments.length);let n=IA("colh",t);RA("%cWriting instruments...",c.info);let s=MA("lins",this.instruments.map(p=>p.write()),!0);y("%cSuccess!",c.recognized),X(),RA("%cWriting WAVE samples...",c.info);let i=0,I=[],g=[],r=0;for(let p of this.samples){let G=p.write();await A?.progressFunction?.(p.name,r,this.samples.length),I.push(i),i+=G.length,g.push(G),r++}let a=MA("wvpl",g,!0);y("%cSucceeded!",c.recognized);let h=new O(8+4*I.length);rA(h,8),rA(h,I.length);for(let p of I)rA(h,p);let B=IA("ptbl",h);this.soundBankInfo.software="SpessaSynth";let d=[],l=(p,G)=>{d.push(IA(p,re(G,!0)))};for(let[p,G]of Object.entries(this.soundBankInfo)){let R=p,M=G;if(M)switch(R){case"name":{l("INAM",M);break}case"comment":{l("ICMT",M);break}case"copyright":{l("ICOP",M);break}case"creationDate":{l("ICRD",M.toISOString());break}case"engineer":{l("IENG",M);break}case"product":{l("IPRD",M);break}case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":{l("ISFT",M);break}case"subject":l("ISBJ",M)}}let u=MA("INFO",d,!0);y("%cCombining everything...");let f=MA("RIFF",[re("DLS "),n,s,B,a,u]);return y("%cSaved successfully!",c.recognized),X(),f.buffer}toSF(){HA("%cConverting DLS to SF2...",c.info);let A=new wi;A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
20
- Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(A);for(let t of this.instruments)t.toSFPreset(A);return A.flush(),y("%cConversion complete!",c.recognized),X(),A}},wi=class qt{static isSF3DecoderReady=Zt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Ci.map(mA.copyFrom.bind(mA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length>0;){let i=A?.shift()?.presets;if(i)for(let I of i)n.some(g=>I.matches(g))||n.push(I)}let s=new qt;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new qt,t=new Float32Array(128);for(let g=0;g<128;g++)t[g]=g/128*2-1;let n=new wo;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new Qt;s.name="Saw Wave",s.globalZone.addGenerators(new FA(o.initialAttenuation,375),new FA(o.releaseVolEnv,-1e3),new FA(o.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new FA(o.fineTune,-9)),A.addInstruments(s);let I=new ut(A);return I.name="Saw Wave",I.createZone(s),A.addPresets(I),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new qt;for(let n of A.presets)t.clonePreset(n);return t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let i of s.zones)i.instrument&&!t.includes(i.instrument)&&t.push(i.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let i of s.zones)i.sample&&!n.includes(i.sample)&&n.push(i.sample);this.addSamples(...n)}async writeDLS(A=ki){return Di.fromSF(this).write(A)}async writeSF2(A=Kn){return Mo(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new zt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new Qt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new ut(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort($A.sorter.bind($A)),this.parseInternal()}trimSoundBank(A){let t=(s,i)=>{let I=0;for(let g=0;g<s.zones.length;g++){let r=s.zones[g],a=r.keyRange,h=r.velRange,B=!1;for(let d of i)if(d.key>=a.min&&d.key<=a.max&&d.velocity>=h.min&&d.velocity<=h.max){B=!0;break}!B&&r.sample&&(y(`%c${r.sample.name}%c removed from %c${s.name}%c.`,c.recognized,c.info,c.recognized,c.info),s.deleteZone(g)&&(I++,g--,y(`%c${r.sample.name}%c deleted`,c.recognized,c.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return I};HA("%cTrimming sound bank...",c.info);let n=A.getUsedProgramsAndKeys(this);RA("%cModifying sound bank...",c.info),y("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let i=this.presets[s],I=n.get(i);if(I===void 0)y(`%cDeleting preset %c${i.name}%c and its zones`,c.info,c.recognized,c.info),this.deletePreset(i),s--;else{let g=[...I].map(a=>{let h=a.split("-");return{key:Number.parseInt(h[0]),velocity:Number.parseInt(h[1])}});RA(`%cTrimming %c${i.name}`,c.info,c.recognized),y(`Keys for ${i.name}:`,g);let r=0;for(let a=0;a<i.zones.length;a++){let h=i.zones[a],B=h.keyRange,d=h.velRange,l=!1;for(let u of g)if(u.key>=B.min&&u.key<=B.max&&u.velocity>=d.min&&u.velocity<=d.max&&h.instrument){l=!0;let f=t(h.instrument,g);y(`%cTrimmed off %c${f}%c zones from %c${h.instrument.name}`,c.info,c.recognized,c.info,c.recognized);break}!l&&h.instrument&&(r++,i.deleteZone(a),h.instrument.useCount<1&&this.deleteInstrument(h.instrument),a--)}y(`%cTrimmed off %c${r}%c zones from %c${i.name}`,c.info,c.recognized,c.info,c.recognized),X()}}this.removeUnusedElements(),y("%cSound bank modified!",c.recognized),X(),X()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return mi(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(fA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,y(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,c.info,c.value,c.info);break}}printInfo(){for(let[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;y(`%c${A}: %c"${n.major}.${n.minor}"`,c.info,c.recognized)}y(`%c${A}: %c${t.toLocaleString()}`,c.info,c.recognized)}}},xo=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=Wn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Us(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new xo(e.data));return A.pop(),A}var Ho=class extends ui{constructor(e,A,t,n){let s=t.find(I=>I.generatorType===o.instrument),i;if(s)i=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!i)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${n.length}`);super(e,i),this.addGenerators(...t),this.addModulators(...A)}};function Yo(e,A,t,n,s){let i=e.gen,I=e.mod,g=0,r=0;for(let a of s)for(let h=0;h<a.zonesCount;h++){let B=i[r++],d=i[r],l=A.slice(B,d),u=I[g++],f=I[g],p=t.slice(u,f);l.some(G=>G.generatorType===o.instrument)?a.createSoundFontZone(p,l,n):(a.globalZone.addGenerators(...l),a.globalZone.addModulators(...p))}}var Jo=class extends ut{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=BA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=L(e.data,2);let t=L(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=L(e.data,2),this.library=L(e.data,4),this.genre=L(e.data,4),this.morphology=L(e.data,4)}createSoundFontZone(e,A,t){let n=new Ho(this,e,A,t);return this.zones.push(n),n}};function xs(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Jo(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var qo=class extends fi{constructor(e,A,t,n){let s=t.find(I=>I.generatorType===o.sampleID),i;if(s)i=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!i)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${n.length}`);super(e,i),this.addGenerators(...t),this.addModulators(...A)}};function Oo(e,A,t,n,s){let i=e.gen,I=e.mod,g=0,r=0;for(let a of s)for(let h=0;h<a.zonesCount;h++){let B=i[r++],d=i[r],l=A.slice(B,d),u=I[g++],f=I[g],p=t.slice(u,f);l.some(G=>G.generatorType===o.sampleID)?a.createSoundFontZone(p,l,n):(a.globalZone.addGenerators(...l),a.globalZone.addModulators(...p))}}var Ko=class extends Qt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=BA(e.data,20),this.zoneStartIndex=L(e.data,2)}createSoundFontZone(e,A,t){let n=new qo(this,e,A,t);return this.zones.push(n),n}};function Hs(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new Ko(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function Rn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=L(t,2),s=L(t,2),i=Wn(t[t.currentIndex++],t[t.currentIndex++]),I=L(t,2),g=L(t,2);A.push(new QA(n,I,s,i,g))}return A.pop(),A}function Tt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(L(e.data,2)),A.push(L(e.data,2));return{mod:A,gen:t}}var Po=class extends wi{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new O(e);HA("%cParsing a SoundFont2 file...",c.info),t||(X(),this.parsingError("No data provided!"));let n=iA(t,!1);this.verifyHeader(n,"riff");let s=BA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw X(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let i=s==="sfpk",I=iA(t);this.verifyHeader(I,"list");let g=BA(I.data,4);if(g!=="INFO")throw X(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${g}"`);let r;for(;I.data.length>I.data.currentIndex;){let q=iA(I.data),D=oe(q.data,q.data.length),b=q.header;switch(b){case"ifil":case"iver":{let v=L(q.data,2),Y=L(q.data,2);b==="ifil"?this.soundBankInfo.version={major:v,minor:Y}:this.soundBankInfo.romVersion={major:v,minor:Y};break}case"DMOD":{this.defaultModulators=Rn(q),this.customDefaultModulators=!0;break}case"LIST":{BA(q.data,4)==="xdta"&&(y("%cExtended SF2 found!",c.recognized),r=q);break}case"ICRD":{this.soundBankInfo.creationDate=ns(BA(q.data,q.data.length));break}case"ISFT":{this.soundBankInfo.software=D;break}case"IPRD":{this.soundBankInfo.product=D;break}case"IENG":{this.soundBankInfo.engineer=D;break}case"ICOP":{this.soundBankInfo.copyright=D;break}case"INAM":{this.soundBankInfo.name=D;break}case"ICMT":{this.soundBankInfo.comment=D;break}case"irom":{this.soundBankInfo.romInfo=D;break}case"isng":this.soundBankInfo.soundEngine=D}}this.printInfo();let a={};r!==void 0&&(a.phdr=iA(r.data),a.pbag=iA(r.data),a.pmod=iA(r.data),a.pgen=iA(r.data),a.inst=iA(r.data),a.ibag=iA(r.data),a.imod=iA(r.data),a.igen=iA(r.data),a.shdr=iA(r.data));let h=iA(t,!1);this.verifyHeader(h,"list"),this.verifyText(BA(t,4),"sdta"),y("%cVerifying smpl chunk...",c.warn);let B=iA(t,!1);this.verifyHeader(B,"smpl");let d;if(i){y("%cSF2Pack detected, attempting to decode the smpl chunk...",c.info);try{d=Zt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+h.size-12)).data[0]}catch(q){throw X(),new Error(`SF2Pack Ogg Vorbis decode error: ${q}`)}y(`%cDecoded the smpl chunk! Length: %c${d.length}`,c.info,c.value)}else d=t,this.sampleDataStartIndex=t.currentIndex;y(`%cSkipping sample chunk, length: %c${h.size-12}`,c.info,c.value),t.currentIndex+=h.size-12,y("%cLoading preset data chunk...",c.warn);let l=iA(t);this.verifyHeader(l,"list"),BA(l.data,4);let u=iA(l.data);this.verifyHeader(u,"phdr");let f=iA(l.data);this.verifyHeader(f,"pbag");let p=iA(l.data);this.verifyHeader(p,"pmod");let G=iA(l.data);this.verifyHeader(G,"pgen");let R=iA(l.data);this.verifyHeader(R,"inst");let M=iA(l.data);this.verifyHeader(M,"ibag");let V=iA(l.data);this.verifyHeader(V,"imod");let N=iA(l.data);this.verifyHeader(N,"igen");let C=iA(l.data);this.verifyHeader(C,"shdr"),y("%cParsing samples...",c.info),t.currentIndex=this.sampleDataStartIndex;let nA=Ls(C,d,r===void 0);if(r&&a.shdr){let q=Ls(a.shdr,new Float32Array(1),!1);if(q.length===nA.length)for(let[D,b]of nA.entries())b.name+=q[D].name,b.linkedSampleIndex|=q[D].linkedSampleIndex<<16}for(let q of nA)q.name=q.name.trim();this.samples.push(...nA);let AA=Us(N),j=Rn(V),H=Hs(R);if(r&&a.inst){let q=Hs(a.inst);if(q.length===H.length){for(let[D,b]of H.entries())b.name+=q[D].name,b.zoneStartIndex|=q[D].zoneStartIndex;for(let[D,b]of H.entries())D<H.length-1&&(b.zonesCount=H[D+1].zoneStartIndex-b.zoneStartIndex)}}for(let q of H)q.name=q.name.trim();this.instruments.push(...H);let Z=Tt(M);if(r&&a.ibag){let q=Tt(a.ibag);for(let D=0;D<Z.mod.length;D++)Z.mod[D]|=q.mod[D]<<16;for(let D=0;D<Z.gen.length;D++)Z.gen[D]|=q.gen[D]<<16}Oo(Z,AA,j,this.samples,H);let P=Us(G),J=Rn(p),gA=xs(u,this);if(r&&a.phdr){let q=xs(a.phdr,this);if(q.length===gA.length){for(let[D,b]of gA.entries())b.name+=q[D].name,b.zoneStartIndex|=q[D].zoneStartIndex;for(let[D,b]of gA.entries())D<gA.length-1&&(b.zonesCount=gA[D+1].zoneStartIndex-b.zoneStartIndex)}}for(let q of gA)q.name=q.name.trim();this.addPresets(...gA);let aA=Tt(f);if(r&&a.pbag){let q=Tt(a.pbag);for(let D=0;D<aA.mod.length;D++)aA.mod[D]|=q.mod[D]<<16;for(let D=0;D<aA.gen.length;D++)aA.gen[D]|=q.gen[D]<<16}Yo(aA,P,J,this.instruments,gA),this.flush(),y(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
21
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},ft=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new O(A);return BA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new Po(e,!1)}static loadDLS(e){return Di.read(e).toSF()}},Fi=class{processorInitialized=Zt.isInitialized;sampleRate;onEventCall;renderAudio;renderAudioSplit;synthCore;savedSnapshot;constructor(e,A=Fs){let t=zn(A,Fs);if(this.sampleRate=e,!Number.isFinite(t.initialTime)||!Number.isFinite(e))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${e}`);this.synthCore=new yo(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t),this.renderAudio=this.synthCore.renderAudio.bind(this.synthCore),this.renderAudioSplit=this.synthCore.renderAudioSplit.bind(this.synthCore);for(let n=0;n<Xs;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",c.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(e){this.synthCore.enableEffects=e}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(e){this.synthCore.enableEventSystem=e}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(e,A)=>{eA(`No preset found for ${$A.toMIDIString(e)}! Did you forget to add a sound bank?`)};systemExclusive(e,A=0){this.synthCore.systemExclusive(e,A)}setMasterParameter(e,A){this.synthCore.setMasterParameter(e,A)}getMasterParameter(e){return this.synthCore.getMasterParameter(e)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(e=jn){this.synthCore.resetAllControllers(e)}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),y("%cFinished applying snapshot!",c.info),this.resetAllControllers()}getSnapshot(){return ss.create(this)}setEmbeddedSoundBank(e,A){let t=ft.fromArrayBuffer(e);this.synthCore.soundBankManager.addSoundBank(t,Mt,A);let n=this.synthCore.soundBankManager.priorityOrder;n.pop(),n.unshift(Mt),this.synthCore.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(e=>e.id===Mt)&&this.synthCore.soundBankManager.deleteSoundBank(Mt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(e=!1){this.synthCore.stopAllChannels(e)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}controllerChange(e,A,t){this.synthCore.midiChannels[e].controllerChange(A,t)}noteOn(e,A,t){this.synthCore.midiChannels[e].noteOn(A,t)}noteOff(e,A){this.synthCore.midiChannels[e].noteOff(A)}polyPressure(e,A,t){this.synthCore.midiChannels[e].polyPressure(A,t)}channelPressure(e,A){this.synthCore.midiChannels[e].channelPressure(A)}pitchWheel(e,A,t=-1){this.synthCore.midiChannels[e].pitchWheel(A,t)}programChange(e,A){this.synthCore.midiChannels[e].programChange(A)}killVoices(e){eA(`killVoices is deprecated, don't use it! Amount requested: ${e}`)}processMessage(e,A=0,t=!1,n=Xi){this.synthCore.processMessage(e,A,t,n)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(e,A,t){return this.synthCore.getVoicesForPreset(e,A,t)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}missingPreset(e,A){return this.onMissingPreset(e,A)}};var _t=de.consoleColors;var Gi="spessasynth-worklet-processor";function Ri(e,A){return{...A,...e}}var Mi={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Is=class extends Vt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},jt=class e extends Te{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new Is(t)),this.embeddedSoundBankSize=A instanceof e?A.embeddedSoundBankSize:A?.embeddedSoundBank?.byteLength}};var $t={shuffleOn:1,shuffleOff:2,index:3};var bi=1,An=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;constructor(A,t,n){this.synthesizer=new Fi(A,t),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let A=new si(this.synthesizer),t=this.sequencers.length;this.sequencers.push(A),A.onEventCall=n=>{if(n.type==="songListChange"){let i=n.data.newSongList.map(I=>new jt(I));this.post({type:"sequencerReturn",data:{type:n.type,data:{newSongList:i},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...n,id:t},currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){de.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":{this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break}case"customCcChange":{n?.setCustomController(A.data.ccNumber,A.data.ccValue);break}case"ccReset":{t===Qe?this.synthesizer.resetAllControllers():n?.resetControllers();break}case"setChannelVibrato":{if(t===Qe)for(let s of this.synthesizer.midiChannels)A.data.rate===Qe?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Qe?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break}case"stopAll":{t===Qe?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break}case"muteChannel":{n?.muteChannel(A.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(A.data.type,A.data.data);break}case"setDrums":{n?.setDrums(A.data);break}case"transposeChannel":{n?.transposeChannel(A.data.semitones,A.data.force);break}case"lockController":{if(A.data.controllerNumber===Qe)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break}case"sequencerSpecific":{let s=this.sequencers[A.data.id];if(!s)return;let i=A.data;switch(i.type){default:break;case"loadNewSongList":{try{let g=i.data.map(r=>"duration"in r?Te.copyFrom(r):Te.fromArrayBuffer(r.binary,r.fileName));s.loadNewSongList(g)}catch(I){console.error(I),this.post({type:"sequencerReturn",data:{type:"midiError",data:I,id:A.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{s.pause();break}case"play":{s.play();break}case"setTime":{s.currentTime=i.data;break}case"changeMIDIMessageSending":{s.externalMIDIPlayback=i.data;break}case"setPlaybackRate":{s.playbackRate=i.data;break}case"setLoopCount":{s.loopCount=i.data;break}case"changeSong":{switch(i.data.changeType){case $t.shuffleOff:{s.shuffleMode=!1;break}case $t.shuffleOn:{s.shuffleMode=!0;break}case $t.index:{i.data.data!==void 0&&(s.songIndex=i.data.data);break}}break}case"getMIDI":{if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData,id:A.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{s.skipToFirstNoteOn=i.data;break}}break}case"soundBankManager":{try{let s=this.synthesizer.soundBankManager,i=A.data,I;switch(i.type){case"addSoundBank":{I=ft.fromArrayBuffer(i.data.soundBankBuffer),s.addSoundBank(I,i.data.id,i.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{s.deleteSoundBank(i.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":s.priorityOrder=i.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let s=A.data,i=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":{i.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break}case"clearMappings":{i.clearMappings();break}case"deleteMapping":i.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=ss.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{Ps(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{de.SpessaSynthWarn("Unrecognized event!",A);break}}}};var en=class extends An{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(i,I)=>{n.postMessage(i,I)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=i=>this.handleMessage(i.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;for(let s of this.sequencers)s.processTick();if(this.oneOutputMode){let s=t[0],i=[];for(let I=0;I<32;I+=2)i.push([s[I],s[I+1]]);this.synthesizer.renderAudioSplit([],[],i)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));let n=this.synthesizer.currentSynthTime;if(n-this.lastSequencerSync>bi){for(let s=0;s<this.sequencers.length;s++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[s].currentTime,id:s},currentTime:n});this.lastSequencerSync=n}return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){let t=this.sequencers[0];if(!t)return;for(let[s,i]of A.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(ft.fromArrayBuffer(i.soundBankBuffer),`bank-${s}`,i.bankOffset)}catch(I){this.post({type:"soundBankError",data:I,currentTime:this.synthesizer.currentSynthTime})}A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),de.SpessaSynthInfo("%cRendering enabled! Starting render.",_t.info),t.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1e4);let n=Ri(A.sequencerOptions,Mi);t.skipToFirstNoteOn=n.skipToFirstNoteOn,t.playbackRate=n.initialPlaybackRate;try{t.loadNewSongList([Te.copyFrom(A.midiSequence)]),t.play()}catch(s){console.error(s),this.post({type:"sequencerReturn",data:{type:"midiError",data:s,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var gs=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new en(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Gi,gs);de.SpessaSynthInfo("%cProcessor successfully registered!",_t.recognized);
18
+ (${A})`,c.warn,c.value,c.unrecognized)}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case w.none:return;case w.pan:return o.pan;case w.gain:return{gen:o.initialAttenuation,newAmount:-A};case w.pitch:return o.fineTune;case w.keyNum:return o.overridingRootKey;case w.volEnvDelay:return o.delayVolEnv;case w.volEnvAttack:return o.attackVolEnv;case w.volEnvHold:return o.holdVolEnv;case w.volEnvDecay:return o.decayVolEnv;case w.volEnvSustain:return{gen:o.sustainVolEnv,newAmount:1e3-A};case w.volEnvRelease:return o.releaseVolEnv;case w.modEnvDelay:return o.delayModEnv;case w.modEnvAttack:return o.attackModEnv;case w.modEnvHold:return o.holdModEnv;case w.modEnvDecay:return o.decayModEnv;case w.modEnvSustain:return{gen:o.sustainModEnv,newAmount:1e3-A};case w.modEnvRelease:return o.releaseModEnv;case w.filterCutoff:return o.initialFilterFc;case w.filterQ:return o.initialFilterQ;case w.chorusSend:return o.chorusEffectsSend;case w.reverbSend:return o.reverbEffectsSend;case w.modLfoFreq:return o.freqModLFO;case w.modLfoDelay:return o.delayModLFO;case w.vibLfoFreq:return o.freqVibLFO;case w.vibLfoDelay:return o.delayVibLFO}}},yi=class Xn extends $e{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode;for(let t of A.connectionBlocks)this.connectionBlocks.push(ht.copyFrom(t))}fromSFZone(A){this.mode="dls2";let t=new Wt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case o.keyNumToVolEnvDecay:{s=o.decayVolEnv;break}case o.keyNumToVolEnvHold:{s=o.holdVolEnv;break}case o.keyNumToModEnvDecay:{s=o.decayModEnv;break}case o.keyNumToModEnvHold:s=o.holdModEnv}let i=t.getGenerator(s,void 0),I=n.generatorValue*-128;if(i===void 0)continue;let g=60/128*I,r=i-g;t.setGenerator(n.generatorType,I,!1),t.setGenerator(s,r,!1)}for(let n of t.generators)ht.fromSFGenerator(n,this);for(let n of t.modulators)ht.fromSFModulator(n,this)}read(A){let t=ke(A,"lart"),n=ke(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=iA(t.data);Xn.verifyHeader(s,"art1","art2");let i=s.data,I=L(i,4);I!==8&&eA(`CbSize in articulation mismatch. Expected 8, got ${I}`);let g=L(i,4);for(let r=0;r<g;r++)this.connectionBlocks.push(ht.read(i))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=iA(n.data);Xn.verifyHeader(s,"art2","art1");let i=s.data,I=L(i,4);I!==8&&eA(`CbSize in articulation mismatch. Expected 8, got ${I}`);let g=L(i,4);for(let r=0;r<g;r++)this.connectionBlocks.push(ht.read(i))}}write(){let A=new q(8);rA(A,8),rA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=MA(this.mode==="dls2"?"art2":"art1",[A,...t]);return IA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,i,I)=>{let g=n/-128;if(A.setGenerator(s,g),g<=120){let r=Math.round(.46875*n),a=this.connectionBlocks.find(h=>h.isStaticParameter&&h.destination===I);a&&A.setGenerator(i,r+a.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,i=n.source.source,I=n.control.source,g=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(I===U.none)if(i===U.keyNum){if(g===w.pitch){A.setGenerator(o.scaleTuning,s/128);continue}if(g===w.modEnvHold||g===w.modEnvDecay||g===w.volEnvHold||g==w.volEnvDecay)continue}else{let r=n.toCombinedSFDestination();if(r){A.setGenerator(r,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(mA.copyFrom(No),mA.copyFrom(To));for(let n of this.connectionBlocks){if(n.source.source!==U.keyNum)continue;let s=n.shortScale;switch(n.destination){default:case w.volEnvHold:{t(s,o.keyNumToVolEnvHold,o.holdVolEnv,w.volEnvHold);break}case w.volEnvDecay:{t(s,o.keyNumToVolEnvDecay,o.decayVolEnv,w.volEnvDecay);break}case w.modEnvHold:{t(s,o.keyNumToModEnvHold,o.holdModEnv,w.modEnvHold);break}case w.modEnvDecay:{t(s,o.keyNumToModEnvDecay,o.decayModEnv,w.modEnvDecay);break}}}}},Fn=class xt{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new xt(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=L(A.data,2),n=L(A.data,2),s=L(A.data,4),i=L(A.data,4),I=new xt(i);return I.channel=s,I.fusOptions=t,I.phaseGroup=n,I}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n===-1)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new xt(n);switch(t.sample.sampleType){default:case wA.leftSample:case wA.monoSample:{s.channel=Math.trunc(1);break}case wA.rightSample:s.channel=2}return s}write(){let A=new q(12);return z(A,this.fusOptions),z(A,this.phaseGroup),rA(A,this.channel),rA(A,this.tableIndex),IA("wlnk",A)}},Ht=class Xe extends $e{articulation=new yi;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Xe(Fn.copyFrom(A.waveLink),ze.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(f=>f.header==="wsmp"),i=s?ze.read(s):void 0,I=n.find(f=>f.header==="wlnk");if(!I){eA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let g=Fn.read(I),r=n.find(f=>f.header==="rgnh");if(!r){eA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let a=A[g.tableIndex];a||Xe.parsingError(`Invalid sample index: ${g.tableIndex}. Samples available: ${A.length}`),i??=a.waveSample;let h=new Xe(g,i),B=L(r.data,2),d=L(r.data,2),l=L(r.data,2),u=L(r.data,2);return l===0&&u===0&&(u=127,l=0),h.keyRange.max=d,h.keyRange.min=B,h.velRange.max=u,h.velRange.min=l,h.fusOptions=L(r.data,2),h.keyGroup=L(r.data,2),r.data.length-r.data.currentIndex>=2&&(h.usLayer=L(r.data,2)),h.articulation.read(n),h}static fromSFZone(A,t){let n=ze.fromSFZone(A),s=Fn.fromSFZone(t,A),i=new Xe(s,n);return i.keyRange.min=Math.max(A.keyRange.min,0),i.keyRange.max=A.keyRange.max,i.velRange.min=Math.max(A.velRange.min,0),i.velRange.max=A.velRange.max,i.keyGroup=A.getGenerator(o.exclusiveClass,0),i.articulation.fromSFZone(A),i}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return MA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Xe.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(o.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(i=>i.generatorValue!==XA[i.generatorType].def),s}writeHeader(){let A=new q(12);return z(A,Math.max(this.keyRange.min,0)),z(A,this.keyRange.max),z(A,Math.max(this.velRange.min,0)),z(A,this.velRange.max),z(A,this.fusOptions),z(A,this.keyGroup),z(A,this.usLayer),IA("rgnh",A)}},Gn=class Yt extends $e{articulation=new yi;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new Yt;t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation);for(let n of A.regions)t.regions.push(Ht.copyFrom(n));return t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(d=>d.header==="insh");if(!s)throw X(),new Error("No instrument header!");let i="",I=ke(n,"INFO");if(I){let d=iA(I.data);for(;d.header!=="INAM";)d=iA(I.data);i=BA(d.data,d.data.length).trim()}i.length===0&&(i="Unnamed Instrument");let g=new Yt;g.name=i;let r=L(s.data,4),a=L(s.data,4),h=L(s.data,4);g.program=h&127,g.bankMSB=a>>>8&127,g.bankLSB=a&127,g.isGMGSDrum=a>>>31>0,RA(`%cParsing %c"${i}"%c...`,c.info,c.recognized,c.info);let B=ke(n,"lrgn");if(!B)throw X(),new Error("No region list!");g.articulation.read(n);for(let d=0;d<r;d++){let l=iA(B.data);this.verifyHeader(l,"LIST");let u=BA(l.data,4);u!=="rgn "&&u!=="rgn2"&&(X(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${u}"`));let f=Ht.read(A,l);f&&g.regions.push(f)}return X(),g}static fromSFPreset(A,t){let n=new Yt;n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,HA(`%cConverting %c${A.toString()}%c to DLS...`,c.info,c.value,c.info);let s=A.toFlattenedInstrument();for(let i of s.zones)n.regions.push(Ht.fromSFZone(i,t));return X(),n}write(){RA(`%cWriting %c${this.name}%c...`,c.info,c.recognized,c.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(MA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=IA("INAM",re(this.name,!0));return A.push(IA("INFO",n,!1,!0)),X(),MA("ins ",A,!0)}toSFPreset(A){let t=new Qt(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new dt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone);for(let s of this.regions)s.toSFZone(n,A.samples);n.globalize(),n.globalZone.modulators.some(s=>s.destination===o.reverbEffectsSend)||n.globalZone.addModulators(mA.copyFrom(Si)),n.globalZone.modulators.some(s=>s.destination===o.chorusEffectsSend)||n.globalZone.addModulators(mA.copyFrom(pi)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==XA[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new q(12);rA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),rA(A,t),rA(A,this.program&127),IA("insh",A)}},ki={progressFunction:void 0},Di=class Zn extends $e{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(A){if(!A)throw new Error("No data provided!");let t=new q(A);HA("%cParsing DLS file...",c.info);let n=iA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(BA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(iA(t));let i=new Zn;i.soundBankInfo.name="Unnamed DLS",i.soundBankInfo.product="SpessaSynth DLS",i.soundBankInfo.comment="(no description)";let I=ke(s,"INFO");if(I)for(;I.data.currentIndex<I.data.length;){let u=iA(I.data),f=u.header,p=BA(u.data,u.size);switch(f){case"INAM":{i.soundBankInfo.name=p;break}case"ICRD":{i.soundBankInfo.creationDate=ns(p);break}case"ICMT":{i.soundBankInfo.comment=p;break}case"ISBJ":{i.soundBankInfo.subject=p;break}case"ICOP":{i.soundBankInfo.copyright=p;break}case"IENG":{i.soundBankInfo.engineer=p;break}case"IPRD":{i.soundBankInfo.product=p;break}case"ISFT":i.soundBankInfo.software=p}}this.printInfo(i);let g=s.find(u=>u.header==="colh");if(!g)return this.parsingError("No colh chunk!"),5;let r=L(g.data,4);y(`%cInstruments amount: %c${r}`,c.info,c.recognized);let a=ke(s,"wvpl");if(!a)return this.parsingError("No wvpl chunk!"),5;let h=this.verifyAndReadList(a,"wvpl");for(let u of h)i.samples.push(Ts.read(u));let B=ke(s,"lins");if(!B)return this.parsingError("No lins chunk!"),5;let d=this.verifyAndReadList(B,"lins");RA("%cLoading instruments...",c.info),d.length!==r&&eA(`Colh reported invalid amount of instruments. Detected ${d.length}, expected ${r}`);for(let u of d)i.instruments.push(Gn.read(i.samples,u));X();let l=s.find(u=>u.header==="pgal");if(l){y("%cFound the instrument aliasing chunk!",c.recognized);let u=l.data;(u[0]!==0||u[1]!==1||u[2]!==2||u[3]!==3)&&(u.currentIndex+=4);let f=i.instruments.find(G=>fA.isXGDrums(G.bankMSB)||G.isGMGSDrum);if(!f)return eA("MobileBAE aliasing chunk without a drum preset. Aborting!"),i;let p=u.slice(u.currentIndex,u.currentIndex+128);u.currentIndex+=128;for(let G=0;G<128;G++){let R=p[G];if(R===G)continue;let M=f.regions.find(N=>N.keyRange.max===R&&N.keyRange.min===R);if(!M){eA(`Invalid drum alias ${G} to ${R}: region does not exist.`);continue}let V=Ht.copyFrom(M);V.keyRange.max=G,V.keyRange.min=G,f.regions.push(V)}for(u.currentIndex+=4;u.currentIndex<u.length;){let G=L(u,2),R=G&127,M=G>>7&127,V=u[u.currentIndex++],N=u[u.currentIndex++];N!==0&&eA(`Invalid alias byte. Expected 0, got ${N}`);let C=L(u,2),nA=C&127,AA=C>>7&127,j=u[u.currentIndex++];N=u[u.currentIndex++],N!==0&&eA(`Invalid alias header. Expected 0, got ${N}`);let H=i.instruments.find(P=>P.bankLSB===nA&&P.bankMSB===AA&&P.program===j&&!P.isGMGSDrum);if(!H){eA(`Invalid alias. Missing instrument: ${nA}:${AA}:${j}`);continue}let Z=Gn.copyFrom(H);Z.bankMSB=M,Z.bankLSB=R,Z.program=V,i.instruments.push(Z)}}return y(`%cParsing finished! %c"${i.soundBankInfo.name||"UNNAMED"}"%c has %c${i.instruments.length}%c instruments and %c${i.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X(),i}static fromSF(A){RA("%cSaving SF2 to DLS level 2...",c.info);let t=new Zn;t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
19
+ Converted from SF2 to DLS with SpessaSynth`;for(let n of A.samples)t.samples.push(Ts.fromSFSample(n));for(let n of A.presets)t.instruments.push(Gn.fromSFPreset(n,A.samples));return y("%cConversion complete!",c.recognized),X(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;y(`%c${t}: %c"${s.major}.${s.minor}"`,c.info,c.recognized)}y(`%c${t}: %c${n.toLocaleString()}`,c.info,c.recognized)}}async write(A=ki){RA("%cSaving DLS...",c.info);let t=new q(4);rA(t,this.instruments.length);let n=IA("colh",t);RA("%cWriting instruments...",c.info);let s=MA("lins",this.instruments.map(p=>p.write()),!0);y("%cSuccess!",c.recognized),X(),RA("%cWriting WAVE samples...",c.info);let i=0,I=[],g=[],r=0;for(let p of this.samples){let G=p.write();await A?.progressFunction?.(p.name,r,this.samples.length),I.push(i),i+=G.length,g.push(G),r++}let a=MA("wvpl",g,!0);y("%cSucceeded!",c.recognized);let h=new q(8+4*I.length);rA(h,8),rA(h,I.length);for(let p of I)rA(h,p);let B=IA("ptbl",h);this.soundBankInfo.software="SpessaSynth";let d=[],l=(p,G)=>{d.push(IA(p,re(G,!0)))};for(let[p,G]of Object.entries(this.soundBankInfo)){let R=p,M=G;if(M)switch(R){case"name":{l("INAM",M);break}case"comment":{l("ICMT",M);break}case"copyright":{l("ICOP",M);break}case"creationDate":{l("ICRD",M.toISOString());break}case"engineer":{l("IENG",M);break}case"product":{l("IPRD",M);break}case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":{l("ISFT",M);break}case"subject":l("ISBJ",M)}}let u=MA("INFO",d,!0);y("%cCombining everything...");let f=MA("RIFF",[re("DLS "),n,s,B,a,u]);return y("%cSaved successfully!",c.recognized),X(),f.buffer}toSF(){HA("%cConverting DLS to SF2...",c.info);let A=new wi;A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
20
+ Converted from DLS to SF2 with SpessaSynth`;for(let t of this.samples)t.toSFSample(A);for(let t of this.instruments)t.toSFPreset(A);return A.flush(),y("%cConversion complete!",c.recognized),X(),A}},wi=class Jt{static isSF3DecoderReady=Zt.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Ci.map(mA.copyFrom.bind(mA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length>0;){let i=A?.shift()?.presets;if(i)for(let I of i)n.some(g=>I.matches(g))||n.push(I)}let s=new Jt;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new Jt,t=new Float32Array(128);for(let g=0;g<128;g++)t[g]=g/128*2-1;let n=new wo;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new dt;s.name="Saw Wave",s.globalZone.addGenerators(new FA(o.initialAttenuation,375),new FA(o.releaseVolEnv,-1e3),new FA(o.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new FA(o.fineTune,-9)),A.addInstruments(s);let I=new Qt(A);return I.name="Saw Wave",I.createZone(s),A.addPresets(I),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new Jt;for(let n of A.presets)t.clonePreset(n);return t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let i of s.zones)i.instrument&&!t.includes(i.instrument)&&t.push(i.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let i of s.zones)i.sample&&!n.includes(i.sample)&&n.push(i.sample);this.addSamples(...n)}async writeDLS(A=ki){return Di.fromSF(this).write(A)}async writeSF2(A=Kn){return Mo(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new zt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new dt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new Qt(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort($A.sorter.bind($A)),this.parseInternal()}trimSoundBank(A){let t=(s,i)=>{let I=0;for(let g=0;g<s.zones.length;g++){let r=s.zones[g],a=r.keyRange,h=r.velRange,B=!1;for(let d of i)if(d.key>=a.min&&d.key<=a.max&&d.velocity>=h.min&&d.velocity<=h.max){B=!0;break}!B&&r.sample&&(y(`%c${r.sample.name}%c removed from %c${s.name}%c.`,c.recognized,c.info,c.recognized,c.info),s.deleteZone(g)&&(I++,g--,y(`%c${r.sample.name}%c deleted`,c.recognized,c.info)),r.sample.useCount<1&&this.deleteSample(r.sample))}return I};HA("%cTrimming sound bank...",c.info);let n=A.getUsedProgramsAndKeys(this);RA("%cModifying sound bank...",c.info),y("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let i=this.presets[s],I=n.get(i);if(I===void 0)y(`%cDeleting preset %c${i.name}%c and its zones`,c.info,c.recognized,c.info),this.deletePreset(i),s--;else{let g=[...I].map(a=>{let h=a.split("-");return{key:Number.parseInt(h[0]),velocity:Number.parseInt(h[1])}});RA(`%cTrimming %c${i.name}`,c.info,c.recognized),y(`Keys for ${i.name}:`,g);let r=0;for(let a=0;a<i.zones.length;a++){let h=i.zones[a],B=h.keyRange,d=h.velRange,l=!1;for(let u of g)if(u.key>=B.min&&u.key<=B.max&&u.velocity>=d.min&&u.velocity<=d.max&&h.instrument){l=!0;let f=t(h.instrument,g);y(`%cTrimmed off %c${f}%c zones from %c${h.instrument.name}`,c.info,c.recognized,c.info,c.recognized);break}!l&&h.instrument&&(r++,i.deleteZone(a),h.instrument.useCount<1&&this.deleteInstrument(h.instrument),a--)}y(`%cTrimmed off %c${r}%c zones from %c${i.name}`,c.info,c.recognized,c.info,c.recognized),X()}}this.removeUnusedElements(),y("%cSound bank modified!",c.recognized),X(),X()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return mi(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(fA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,y(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,c.info,c.value,c.info);break}}printInfo(){for(let[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;y(`%c${A}: %c"${n.major}.${n.minor}"`,c.info,c.recognized)}y(`%c${A}: %c${t.toLocaleString()}`,c.info,c.recognized)}}},xo=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=Wn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Us(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new xo(e.data));return A.pop(),A}var Ho=class extends ui{constructor(e,A,t,n){let s=t.find(I=>I.generatorType===o.instrument),i;if(s)i=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");if(!i)throw new Error(`Invalid instrument ID: ${s.generatorValue}, available instruments: ${n.length}`);super(e,i),this.addGenerators(...t),this.addModulators(...A)}};function Yo(e,A,t,n,s){let i=e.gen,I=e.mod,g=0,r=0;for(let a of s)for(let h=0;h<a.zonesCount;h++){let B=i[r++],d=i[r],l=A.slice(B,d),u=I[g++],f=I[g],p=t.slice(u,f);l.some(G=>G.generatorType===o.instrument)?a.createSoundFontZone(p,l,n):(a.globalZone.addGenerators(...l),a.globalZone.addModulators(...p))}}var Jo=class extends Qt{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=BA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=L(e.data,2);let t=L(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=L(e.data,2),this.library=L(e.data,4),this.genre=L(e.data,4),this.morphology=L(e.data,4)}createSoundFontZone(e,A,t){let n=new Ho(this,e,A,t);return this.zones.push(n),n}};function xs(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Jo(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var Oo=class extends fi{constructor(e,A,t,n){let s=t.find(I=>I.generatorType===o.sampleID),i;if(s)i=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");if(!i)throw new Error(`Invalid sample ID: ${s.generatorValue}, available samples: ${n.length}`);super(e,i),this.addGenerators(...t),this.addModulators(...A)}};function qo(e,A,t,n,s){let i=e.gen,I=e.mod,g=0,r=0;for(let a of s)for(let h=0;h<a.zonesCount;h++){let B=i[r++],d=i[r],l=A.slice(B,d),u=I[g++],f=I[g],p=t.slice(u,f);l.some(G=>G.generatorType===o.sampleID)?a.createSoundFontZone(p,l,n):(a.globalZone.addGenerators(...l),a.globalZone.addModulators(...p))}}var Ko=class extends dt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=BA(e.data,20),this.zoneStartIndex=L(e.data,2)}createSoundFontZone(e,A,t){let n=new Oo(this,e,A,t);return this.zones.push(n),n}};function Hs(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new Ko(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function Rn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=L(t,2),s=L(t,2),i=Wn(t[t.currentIndex++],t[t.currentIndex++]),I=L(t,2),g=L(t,2);A.push(new QA(n,I,s,i,g))}return A.pop(),A}function Nt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(L(e.data,2)),A.push(L(e.data,2));return{mod:A,gen:t}}var Po=class extends wi{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new q(e);HA("%cParsing a SoundFont2 file...",c.info),t||(X(),this.parsingError("No data provided!"));let n=iA(t,!1);this.verifyHeader(n,"riff");let s=BA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw X(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let i=s==="sfpk",I=iA(t);this.verifyHeader(I,"list");let g=BA(I.data,4);if(g!=="INFO")throw X(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${g}"`);let r;for(;I.data.length>I.data.currentIndex;){let O=iA(I.data),D=oe(O.data,O.data.length),b=O.header;switch(b){case"ifil":case"iver":{let v=L(O.data,2),Y=L(O.data,2);b==="ifil"?this.soundBankInfo.version={major:v,minor:Y}:this.soundBankInfo.romVersion={major:v,minor:Y};break}case"DMOD":{this.defaultModulators=Rn(O),this.customDefaultModulators=!0;break}case"LIST":{BA(O.data,4)==="xdta"&&(y("%cExtended SF2 found!",c.recognized),r=O);break}case"ICRD":{this.soundBankInfo.creationDate=ns(BA(O.data,O.data.length));break}case"ISFT":{this.soundBankInfo.software=D;break}case"IPRD":{this.soundBankInfo.product=D;break}case"IENG":{this.soundBankInfo.engineer=D;break}case"ICOP":{this.soundBankInfo.copyright=D;break}case"INAM":{this.soundBankInfo.name=D;break}case"ICMT":{this.soundBankInfo.comment=D;break}case"irom":{this.soundBankInfo.romInfo=D;break}case"isng":this.soundBankInfo.soundEngine=D}}this.printInfo();let a={};r!==void 0&&(a.phdr=iA(r.data),a.pbag=iA(r.data),a.pmod=iA(r.data),a.pgen=iA(r.data),a.inst=iA(r.data),a.ibag=iA(r.data),a.imod=iA(r.data),a.igen=iA(r.data),a.shdr=iA(r.data));let h=iA(t,!1);this.verifyHeader(h,"list"),this.verifyText(BA(t,4),"sdta"),y("%cVerifying smpl chunk...",c.warn);let B=iA(t,!1);this.verifyHeader(B,"smpl");let d;if(i){y("%cSF2Pack detected, attempting to decode the smpl chunk...",c.info);try{d=Zt.decode(t.buffer.slice(t.currentIndex,t.currentIndex+h.size-12)).data[0]}catch(O){throw X(),new Error(`SF2Pack Ogg Vorbis decode error: ${O}`)}y(`%cDecoded the smpl chunk! Length: %c${d.length}`,c.info,c.value)}else d=t,this.sampleDataStartIndex=t.currentIndex;y(`%cSkipping sample chunk, length: %c${h.size-12}`,c.info,c.value),t.currentIndex+=h.size-12,y("%cLoading preset data chunk...",c.warn);let l=iA(t);this.verifyHeader(l,"list"),BA(l.data,4);let u=iA(l.data);this.verifyHeader(u,"phdr");let f=iA(l.data);this.verifyHeader(f,"pbag");let p=iA(l.data);this.verifyHeader(p,"pmod");let G=iA(l.data);this.verifyHeader(G,"pgen");let R=iA(l.data);this.verifyHeader(R,"inst");let M=iA(l.data);this.verifyHeader(M,"ibag");let V=iA(l.data);this.verifyHeader(V,"imod");let N=iA(l.data);this.verifyHeader(N,"igen");let C=iA(l.data);this.verifyHeader(C,"shdr"),y("%cParsing samples...",c.info),t.currentIndex=this.sampleDataStartIndex;let nA=Ls(C,d,r===void 0);if(r&&a.shdr){let O=Ls(a.shdr,new Float32Array(1),!1);if(O.length===nA.length)for(let[D,b]of nA.entries())b.name+=O[D].name,b.linkedSampleIndex|=O[D].linkedSampleIndex<<16}for(let O of nA)O.name=O.name.trim();this.samples.push(...nA);let AA=Us(N),j=Rn(V),H=Hs(R);if(r&&a.inst){let O=Hs(a.inst);if(O.length===H.length){for(let[D,b]of H.entries())b.name+=O[D].name,b.zoneStartIndex|=O[D].zoneStartIndex;for(let[D,b]of H.entries())D<H.length-1&&(b.zonesCount=H[D+1].zoneStartIndex-b.zoneStartIndex)}}for(let O of H)O.name=O.name.trim();this.instruments.push(...H);let Z=Nt(M);if(r&&a.ibag){let O=Nt(a.ibag);for(let D=0;D<Z.mod.length;D++)Z.mod[D]|=O.mod[D]<<16;for(let D=0;D<Z.gen.length;D++)Z.gen[D]|=O.gen[D]<<16}qo(Z,AA,j,this.samples,H);let P=Us(G),J=Rn(p),gA=xs(u,this);if(r&&a.phdr){let O=xs(a.phdr,this);if(O.length===gA.length){for(let[D,b]of gA.entries())b.name+=O[D].name,b.zoneStartIndex|=O[D].zoneStartIndex;for(let[D,b]of gA.entries())D<gA.length-1&&(b.zonesCount=gA[D+1].zoneStartIndex-b.zoneStartIndex)}}for(let O of gA)O.name=O.name.trim();this.addPresets(...gA);let aA=Nt(f);if(r&&a.pbag){let O=Nt(a.pbag);for(let D=0;D<aA.mod.length;D++)aA.mod[D]|=O.mod[D]<<16;for(let D=0;D<aA.gen.length;D++)aA.gen[D]|=O.gen[D]<<16}Yo(aA,P,J,this.instruments,gA),this.flush(),y(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
21
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},ut=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new q(A);return BA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new Po(e,!1)}static loadDLS(e){return Di.read(e).toSF()}},Fi=class{processorInitialized=Zt.isInitialized;sampleRate;onEventCall;renderAudio;renderAudioSplit;synthCore;savedSnapshot;constructor(e,A=Fs){let t=zn(A,Fs);if(this.sampleRate=e,!Number.isFinite(t.initialTime)||!Number.isFinite(e))throw new TypeError(`Initial time or sample rate is invalid! initial time: ${t.initialTime}, sample rate: ${e}`);this.synthCore=new yo(this.callEvent.bind(this),this.missingPreset.bind(this),this.sampleRate,t),this.renderAudio=this.synthCore.renderAudio.bind(this.synthCore),this.renderAudioSplit=this.synthCore.renderAudioSplit.bind(this.synthCore);for(let n=0;n<Xs;n++)this.synthCore.createMIDIChannel(!1);this.processorInitialized.then(()=>{y("%cSpessaSynth is ready!",c.recognized)})}get enableEffects(){return this.synthCore.enableEffects}set enableEffects(e){this.synthCore.enableEffects=e}get enableEventSystem(){return this.synthCore.enableEventSystem}set enableEventSystem(e){this.synthCore.enableEventSystem=e}get midiChannels(){return this.synthCore.midiChannels}get totalVoicesAmount(){return this.synthCore.voiceCount}get currentSynthTime(){return this.synthCore.currentTime}get soundBankManager(){return this.synthCore.soundBankManager}get keyModifierManager(){return this.synthCore.keyModifierManager}onMissingPreset=(e,A)=>{eA(`No preset found for ${$A.toMIDIString(e)}! Did you forget to add a sound bank?`)};systemExclusive(e,A=0){this.synthCore.systemExclusive(e,A+this.synthCore.channelOffset)}setMasterParameter(e,A){this.synthCore.setMasterParameter(e,A)}getMasterParameter(e){return this.synthCore.getMasterParameter(e)}getAllMasterParameters(){return this.synthCore.getAllMasterParameters()}resetAllControllers(e=jn){this.synthCore.resetAllControllers(e)}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),y("%cFinished applying snapshot!",c.info),this.resetAllControllers()}getSnapshot(){return ss.create(this)}setEmbeddedSoundBank(e,A){let t=ut.fromArrayBuffer(e);this.synthCore.soundBankManager.addSoundBank(t,Rt,A);let n=this.synthCore.soundBankManager.priorityOrder;n.pop(),n.unshift(Rt),this.synthCore.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),y(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}clearEmbeddedBank(){this.synthCore.soundBankManager.soundBankList.some(e=>e.id===Rt)&&this.synthCore.soundBankManager.deleteSoundBank(Rt)}createMIDIChannel(){this.synthCore.createMIDIChannel(!0)}stopAllChannels(e=!1){this.synthCore.stopAllChannels(e)}destroySynthProcessor(){this.synthCore.destroySynthProcessor()}controllerChange(e,A,t){this.synthCore.midiChannels[e+this.synthCore.channelOffset].controllerChange(A,t)}noteOn(e,A,t){this.synthCore.midiChannels[e+this.synthCore.channelOffset].noteOn(A,t)}noteOff(e,A){this.synthCore.midiChannels[e+this.synthCore.channelOffset].noteOff(A)}polyPressure(e,A,t){this.synthCore.midiChannels[e+this.synthCore.channelOffset].polyPressure(A,t)}channelPressure(e,A){this.synthCore.midiChannels[e+this.synthCore.channelOffset].channelPressure(A)}pitchWheel(e,A,t=-1){this.synthCore.midiChannels[e+this.synthCore.channelOffset].pitchWheel(A,t)}programChange(e,A){this.synthCore.midiChannels[e+this.synthCore.channelOffset].programChange(A)}killVoices(e){eA(`killVoices is deprecated, don't use it! Amount requested: ${e}`)}processMessage(e,A=0,t=!1,n=Xi){this.synthCore.processMessage(e,A+this.synthCore.channelOffset,t,n)}clearCache(){this.synthCore.clearCache()}getVoicesForPreset(e,A,t){return this.synthCore.getVoicesForPreset(e,A,t)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}missingPreset(e,A){return this.onMissingPreset(e,A)}};var _t=de.consoleColors;var Gi="spessasynth-worklet-processor";function Ri(e,A){return{...A,...e}}var Mi={skipToFirstNoteOn:!0,initialPlaybackRate:1};var Is=class extends Vt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},jt=class e extends Ne{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new Is(t)),this.embeddedSoundBankSize=A instanceof e?A.embeddedSoundBankSize:A?.embeddedSoundBank?.byteLength}};var $t={shuffleOn:1,shuffleOff:2,index:3};var bi=1,An=class{synthesizer;sequencers=new Array;post;lastSequencerSync=0;alive=!1;constructor(A,t,n){this.synthesizer=new Fi(A,t),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})}}createNewSequencer(){let A=new si(this.synthesizer),t=this.sequencers.length;this.sequencers.push(A),A.onEventCall=n=>{if(n.type==="songListChange"){let i=n.data.newSongList.map(I=>new jt(I));this.post({type:"sequencerReturn",data:{type:n.type,data:{newSongList:i},id:t},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:{...n,id:t},currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){de.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":{this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break}case"customCcChange":{n?.setCustomController(A.data.ccNumber,A.data.ccValue);break}case"ccReset":{t===Qe?this.synthesizer.resetAllControllers():n?.resetControllers();break}case"setChannelVibrato":{if(t===Qe)for(let s of this.synthesizer.midiChannels)A.data.rate===Qe?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Qe?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break}case"stopAll":{t===Qe?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break}case"muteChannel":{n?.muteChannel(A.data);break}case"addNewChannel":{this.synthesizer.createMIDIChannel();break}case"setMasterParameter":{this.synthesizer.setMasterParameter(A.data.type,A.data.data);break}case"setDrums":{n?.setDrums(A.data);break}case"transposeChannel":{n?.transposeChannel(A.data.semitones,A.data.force);break}case"lockController":{if(A.data.controllerNumber===Qe)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break}case"sequencerSpecific":{let s=this.sequencers[A.data.id];if(!s)return;let i=A.data;switch(i.type){default:break;case"loadNewSongList":{try{let g=i.data.map(r=>"duration"in r?Ne.copyFrom(r):Ne.fromArrayBuffer(r.binary,r.fileName));s.loadNewSongList(g)}catch(I){console.error(I),this.post({type:"sequencerReturn",data:{type:"midiError",data:I,id:A.data.id},currentTime:this.synthesizer.currentSynthTime})}break}case"pause":{s.pause();break}case"play":{s.play();break}case"setTime":{s.currentTime=i.data;break}case"changeMIDIMessageSending":{s.externalMIDIPlayback=i.data;break}case"setPlaybackRate":{s.playbackRate=i.data;break}case"setLoopCount":{s.loopCount=i.data;break}case"changeSong":{switch(i.data.changeType){case $t.shuffleOff:{s.shuffleMode=!1;break}case $t.shuffleOn:{s.shuffleMode=!0;break}case $t.index:{i.data.data!==void 0&&(s.songIndex=i.data.data);break}}break}case"getMIDI":{if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData,id:A.data.id},currentTime:this.synthesizer.currentSynthTime});break}case"setSkipToFirstNote":{s.skipToFirstNoteOn=i.data;break}}break}case"soundBankManager":{try{let s=this.synthesizer.soundBankManager,i=A.data,I;switch(i.type){case"addSoundBank":{I=ut.fromArrayBuffer(i.data.soundBankBuffer),s.addSoundBank(I,i.data.id,i.data.bankOffset),this.postReady("soundBankManager",null);break}case"deleteSoundBank":{s.deleteSoundBank(i.data),this.postReady("soundBankManager",null);break}case"rearrangeSoundBanks":s.priorityOrder=i.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break}case"keyModifierManager":{let s=A.data,i=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":{i.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break}case"clearMappings":{i.clearMappings();break}case"deleteMapping":i.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=ss.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"requestNewSequencer":{this.createNewSequencer();break}case"setLogLevel":{Ps(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break}case"destroyWorklet":{this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break}default:{de.SpessaSynthWarn("Unrecognized event!",A);break}}}};var en=class extends An{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(i,I)=>{n.postMessage(i,I)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=i=>this.handleMessage(i.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;for(let s of this.sequencers)s.processTick();if(this.oneOutputMode){let s=t[0],i=[];for(let I=0;I<32;I+=2)i.push([s[I],s[I+1]]);this.synthesizer.renderAudioSplit([],[],i)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));let n=this.synthesizer.currentSynthTime;if(n-this.lastSequencerSync>bi){for(let s=0;s<this.sequencers.length;s++)this.post({type:"sequencerReturn",data:{type:"sync",data:this.sequencers[s].currentTime,id:s},currentTime:n});this.lastSequencerSync=n}return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){let t=this.sequencers[0];if(!t)return;for(let[s,i]of A.soundBankList.entries())try{this.synthesizer.soundBankManager.addSoundBank(ut.fromArrayBuffer(i.soundBankBuffer),`bank-${s}`,i.bankOffset)}catch(I){this.post({type:"soundBankError",data:I,currentTime:this.synthesizer.currentSynthTime})}A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),de.SpessaSynthInfo("%cRendering enabled! Starting render.",_t.info),t.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1e4);let n=Ri(A.sequencerOptions,Mi);t.skipToFirstNoteOn=n.skipToFirstNoteOn,t.playbackRate=n.initialPlaybackRate;try{t.loadNewSongList([Ne.copyFrom(A.midiSequence)]),t.play()}catch(s){console.error(s),this.post({type:"sequencerReturn",data:{type:"midiError",data:s,id:0},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var gs=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new en(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Gi,gs);de.SpessaSynthInfo("%cProcessor successfully registered!",_t.recognized);
22
22
  //# sourceMappingURL=spessasynth_processor.min.js.map