Skip to content

Instantly share code, notes, and snippets.

@EtaoinWu
Last active May 20, 2023 07:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EtaoinWu/27096a376a78e0427eb860c08ca85759 to your computer and use it in GitHub Desktop.
Save EtaoinWu/27096a376a78e0427eb860c08ca85759 to your computer and use it in GitHub Desktop.
/* esm.sh - esbuild bundle(ffjavascript@0.2.57) deno production */
import __Process$ from "https://deno.land/std@0.177.0/node/process.ts";import { Buffer as __Buffer$ } from "https://deno.land/std@0.177.0/node/buffer.ts";var Ae=Object.defineProperty;var Fe=(i,t)=>{for(var e in t)Ae(i,e,{get:t[e],enumerable:!0})};var U={};Fe(U,{abs:()=>Ie,add:()=>yt,band:()=>Ct,bitLength:()=>V,bits:()=>Yt,bor:()=>Ue,bxor:()=>ke,div:()=>it,e:()=>M,eq:()=>P,exp:()=>Me,fromArray:()=>_e,fromRprBE:()=>ne,fromRprLE:()=>Y,fromString:()=>Mt,geq:()=>se,gt:()=>ft,isNegative:()=>Wt,isOdd:()=>bt,isZero:()=>It,land:()=>Ze,leq:()=>Ge,lnot:()=>Pe,lor:()=>Ne,lt:()=>ze,mod:()=>T,mul:()=>ee,naf:()=>Vt,neg:()=>te,neq:()=>Ce,one:()=>tt,pow:()=>ht,shiftLeft:()=>wt,shiftRight:()=>st,shl:()=>ve,shr:()=>Oe,square:()=>Re,sub:()=>X,toArray:()=>qe,toLEBuff:()=>H,toNumber:()=>we,toRprBE:()=>ie,toRprLE:()=>nt,toString:()=>lt,zero:()=>re});var Se=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];function Mt(i,t){if(!t||t==10)return BigInt(i);if(t==16)return i.slice(0,2)=="0x"?BigInt(i):BigInt("0x"+i)}var M=Mt;function _e(i,t){let e=BigInt(0);t=BigInt(t);for(let s=0;s<i.length;s++)e=e*t+BigInt(i[s]);return e}function V(i){let t=i.toString(16);return(t.length-1)*4+Se[parseInt(t[0],16)]}function Wt(i){return BigInt(i)<BigInt(0)}function It(i){return!i}function wt(i,t){return BigInt(i)<<BigInt(t)}function st(i,t){return BigInt(i)>>BigInt(t)}var ve=wt,Oe=st;function bt(i){return(BigInt(i)&BigInt(1))==BigInt(1)}function Vt(i){let t=BigInt(i),e=[];for(;t;){if(t&BigInt(1)){let s=2-Number(t%BigInt(4));e.push(s),t=t-BigInt(s)}else e.push(0);t=t>>BigInt(1)}return e}function Yt(i){let t=BigInt(i),e=[];for(;t;)t&BigInt(1)?e.push(1):e.push(0),t=t>>BigInt(1);return e}function we(i){if(i>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(i)}function qe(i,t){let e=[],s=BigInt(i);for(t=BigInt(t);s;)e.unshift(Number(s%t)),s=s/t;return e}function yt(i,t){return BigInt(i)+BigInt(t)}function X(i,t){return BigInt(i)-BigInt(t)}function te(i){return-BigInt(i)}function ee(i,t){return BigInt(i)*BigInt(t)}function Re(i){return BigInt(i)*BigInt(i)}function ht(i,t){return BigInt(i)**BigInt(t)}function Me(i,t){return BigInt(i)**BigInt(t)}function Ie(i){return BigInt(i)>=0?BigInt(i):-BigInt(i)}function it(i,t){return BigInt(i)/BigInt(t)}function T(i,t){return BigInt(i)%BigInt(t)}function P(i,t){return BigInt(i)==BigInt(t)}function Ce(i,t){return BigInt(i)!=BigInt(t)}function ze(i,t){return BigInt(i)<BigInt(t)}function ft(i,t){return BigInt(i)>BigInt(t)}function Ge(i,t){return BigInt(i)<=BigInt(t)}function se(i,t){return BigInt(i)>=BigInt(t)}function Ct(i,t){return BigInt(i)&BigInt(t)}function Ue(i,t){return BigInt(i)|BigInt(t)}function ke(i,t){return BigInt(i)^BigInt(t)}function Ze(i,t){return BigInt(i)&&BigInt(t)}function Ne(i,t){return BigInt(i)||BigInt(t)}function Pe(i){return!BigInt(i)}function nt(i,t,e,s){let n="0000000"+e.toString(16),r=new Uint32Array(i.buffer,t,s/4),h=((n.length-7)*4-1>>5)+1;for(let o=0;o<h;o++)r[o]=parseInt(n.substring(n.length-8*o-8,n.length-8*o),16);for(let o=h;o<r.length;o++)r[o]=0;for(let o=r.length*4;o<s;o++)i[o]=we(Ct(st(e,o*8),255))}function ie(i,t,e,s){let n="0000000"+e.toString(16),r=new DataView(i.buffer,i.byteOffset+t,s),h=((n.length-7)*4-1>>5)+1;for(let o=0;o<h;o++)r.setUint32(s-o*4-4,parseInt(n.substring(n.length-8*o-8,n.length-8*o),16),!1);for(let o=0;o<s/4-h;o++)r[o]=0}function Y(i,t,e){e=e||i.byteLength,t=t||0;let s=new Uint32Array(i.buffer,t,e/4),n=new Array(e/4);return s.forEach((r,h)=>n[n.length-h-1]=r.toString(16).padStart(8,"0")),Mt(n.join(""),16)}function ne(i,t,e){e=e||i.byteLength,t=t||0;let s=new DataView(i.buffer,i.byteOffset+t,e),n=new Array(e/4);for(let r=0;r<e/4;r++)n[r]=s.getUint32(r*4,!1).toString(16).padStart(8,"0");return Mt(n.join(""),16)}function lt(i,t){return i.toString(t)}function H(i){let t=new Uint8Array(Math.floor((V(i)-1)/8)+1);return nt(t,0,i,t.byteLength),t}var re=M(0),tt=M(1);var zt=class{constructor(t){this.F=t;let e=t.sqrt_t,s=t.sqrt_s,n=this.F.add(this.F.add(this.F.two,this.F.two),this.F.one);this.w=new Array(s+1),this.wi=new Array(s+1),this.w[s]=this.F.pow(n,e),this.wi[s]=this.F.inv(this.w[s]);let r=s-1;for(;r>=0;)this.w[r]=this.F.square(this.w[r+1]),this.wi[r]=this.F.square(this.wi[r+1]),r--;this.roots=[],this._setRoots(15)}_setRoots(t){t>this.F.sqrt_s&&(t=this.s);for(let e=t;e>=0&&!this.roots[e];e--){let s=this.F.one,n=1<<e,r=new Array(n);for(let h=0;h<n;h++)r[h]=s,s=this.F.mul(s,this.w[e]);this.roots[e]=r}}add(t,e){let s=Math.max(t.length,e.length),n=new Array(s);for(let r=0;r<s;r++)n[r]=this.F.add(t[r]||this.F.zero,e[r]||this.F.zero);return this.reduce(n)}double(t){return this.add(t,t)}sub(t,e){let s=Math.max(t.length,e.length),n=new Array(s);for(let r=0;r<s;r++)n[r]=this.F.sub(t[r]||this.F.zero,e[r]||this.F.zero);return this.reduce(n)}mulScalar(t,e){if(this.F.eq(e,this.F.zero))return[];if(this.F.eq(e,this.F.one))return t;let s=new Array(t.length);for(let n=0;n<t.length;n++)s[n]=this.F.mul(t[n],e);return s}mul(t,e){return t.length==0?[]:e.length==0?[]:t.length==1?this.mulScalar(e,t[0]):e.length==1?this.mulScalar(t,e[0]):(e.length>t.length&&([e,t]=[t,e]),e.length<=2||e.length<D(t.length)?this.mulNormal(t,e):this.mulFFT(t,e))}mulNormal(t,e){let s=[];for(let n=0;n<e.length;n++)s=this.add(s,this.scaleX(this.mulScalar(t,e[n]),n));return s}mulFFT(t,e){let s=Math.max(t.length,e.length),n=D(s-1)+2;this._setRoots(n);let r=1<<n,h=this.extend(t,r),o=this.extend(e,r),c=rt(this,h,n,0,1,!1),u=rt(this,o,n,0,1,!1),f=new Array(r);for(let p=0;p<r;p++)f[p]=this.F.mul(c[p],u[p]);let l=rt(this,f,n,0,1,!0),a=this.F.inv(this.F.mulScalar(this.F.one,r)),m=new Array(r);for(let p=0;p<r;p++)m[p]=this.F.mul(l[(r-p)%r],a);return this.reduce(m)}square(t){return this.mul(t,t)}scaleX(t,e){return e==0?t:e>0?new Array(e).fill(this.F.zero).concat(t):-e>=t.length?[]:t.slice(-e)}eval2(t,e){let s=this.F.zero,n=this.F.one;for(let r=0;r<t.length;r++)s=this.F.add(s,this.F.mul(t[r],n)),n=this.F.mul(n,e);return s}eval(t,e){let s=this.F;if(t.length==0)return s.zero;let n=this._next2Power(t.length),r=this.extend(t,n);return h(r,e,0,1,n);function h(o,c,u,f,l){if(l==1)return o[u];let a=s.square(c);return s.add(h(o,a,u,f<<1,l>>1),s.mul(c,h(o,a,u+f,f<<1,l>>1)))}}lagrange(t){let e=[this.F.one];for(let n=0;n<t.length;n++)e=this.mul(e,[this.F.neg(t[n][0]),this.F.one]);let s=[];for(let n=0;n<t.length;n++){let r=this.ruffini(e,t[n][0]),h=this.F.mul(this.F.inv(this.eval(r,t[n][0])),t[n][1]);r=this.mulScalar(r,h),s=this.add(s,r)}return s}fft(t){if(t.length<=1)return t;let e=D(t.length-1)+1;this._setRoots(e);let s=1<<e,n=this.extend(t,s);return rt(this,n,e,0,1)}fft2(t){if(t.length<=1)return t;let e=D(t.length-1)+1;this._setRoots(e);let s=1<<e,n=this.extend(t,s);return be(n,e),Gt(this,n,e)}ifft(t){if(t.length<=1)return t;let e=D(t.length-1)+1;this._setRoots(e);let s=1<<e,n=this.extend(t,s),r=rt(this,n,e,0,1),h=this.F.inv(this.F.mulScalar(this.F.one,s)),o=new Array(s);for(let c=0;c<s;c++)o[c]=this.F.mul(r[(s-c)%s],h);return o}ifft2(t){if(t.length<=1)return t;let e=D(t.length-1)+1;this._setRoots(e);let s=1<<e,n=this.extend(t,s);be(n,e);let r=Gt(this,n,e,0,1),h=this.F.inv(this.F.mulScalar(this.F.one,s)),o=new Array(s);for(let c=0;c<s;c++)o[c]=this.F.mul(r[(s-c)%s],h);return o}_fft(t,e,s,n){let r=1<<e;if(r==1)return[t[s]];let h=r>>1,o=this._fft(t,e-1,s,n*2),c=this._fft(t,e-1,s+n,n*2),u=new Array(r),f=this.F.one;for(let l=0;l<h;l++)u[l]=this.F.add(o[l],this.F.mul(f,c[l])),u[l+h]=this.F.sub(o[l],this.F.mul(f,c[l])),f=this.F.mul(f,this.w[e]);return u}extend(t,e){if(e==t.length)return t;let s=new Array(e-t.length).fill(this.F.zero);return t.concat(s)}reduce(t){if(t.length==0||!this.F.eq(t[t.length-1],this.F.zero))return t;let e=t.length-1;for(;e>0&&this.F.eq(t[e],this.F.zero);)e--;return t.slice(0,e+1)}eq(t,e){let s=this.reduce(t),n=this.reduce(e);if(s.length!=n.length)return!1;for(let r=0;r<n.length;r++)if(!this.F.eq(s[r],n[r]))return!1;return!0}ruffini(t,e){let s=new Array(t.length-1);s[s.length-1]=t[t.length-1];for(let n=s.length-2;n>=0;n--)s[n]=this.F.add(this.F.mul(s[n+1],e),t[n+1]);return s}_next2Power(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t}toString(t){let e=this.normalize(t),s="";for(let n=e.length-1;n>=0;n--)this.F.eq(t[n],this.F.zero)||(s!=""&&(s+=" + "),s=s+t[n].toString(10),n>0&&(s=s+"x",n>1&&(s=s+"^"+n)));return s}normalize(t){let e=new Array(t.length);for(let s=0;s<t.length;s++)e[s]=this.F.normalize(t[s]);return e}_reciprocal(t,e){let s=1<<e;if(s==1)return[this.F.inv(t[0])];let n=this.scaleX(t,-s/2),r=this._reciprocal(n,e-1),h=this.scaleX(this.double(r),3*s/2-2),o=this.mul(this.square(r),t);return this.scaleX(this.sub(h,o),-(s-2))}_div2(t,e){let s=D(e.length-1)+1,n=1<<s,r=n-e.length,h=this._reciprocal(this.scaleX(e,r),s);return this.scaleX(h,t-2*n+2+r)}div(t,e){if(t.length<e.length)return[];let s=D(e.length-1)+1,n=1<<s,r=this.scaleX(t,n-e.length),h=this.scaleX(e,n-e.length),o=h.length-1,c=r.length-1,u=this._reciprocal(h,s),f;c>2*o&&(f=this.sub(this.scaleX([this.F.one],2*o),this.mul(u,h)));let l=[],a=r,m,p,g=!1;for(;!g;)m=this.mul(a,u),l=this.add(l,this.scaleX(m,-2*o)),c>2*o?(p=this.mul(a,f),a=this.scaleX(p,-2*o),c=a.length-1):g=!0;return l}oneRoot(t,e){let s=D(t-1)+1,n=this.F.one,r=e;if(e>=t)throw new Error("Given 'i' should be lower than 'n'");if(1<<s!==t)throw new Error(`Internal errlr: ${t} should equal ${1<<s}`);for(;r>0;)r&!0&&(n=this.F.mul(n,this.w[s])),r=r>>1,s--;return n}computeVanishingPolinomial(t,e){let s=1<<t;return this.F.sub(this.F.pow(e,s),this.F.one)}evaluateLagrangePolynomials(t,e){let s=1<<t,n=this.F.pow(e,s),r=new Array(s).fill(this.F.zero);this._setRoots(t);let h=this.w[t];if(this.F.eq(n,this.F.one)){for(let u=0;u<s;u++)if(this.F.eq(this.roots[t][0],e))return r[u]=this.F.one,r}let o=this.F.sub(n,this.F.one),c=this.F.mul(o,this.F.inv(this.F.e(s)));for(let u=0;u<s;u++)r[u]=this.F.mul(c,this.F.inv(this.F.sub(e,this.roots[t][u]))),c=this.F.mul(c,h);return r}log2(t){return D(t)}};function D(i){return(i&4294901760?(i&=4294901760,16):0)|(i&4278255360?(i&=4278255360,8):0)|(i&4042322160?(i&=4042322160,4):0)|(i&3435973836?(i&=3435973836,2):0)|(i&2863311530)!==0}function rt(i,t,e,s,n){let r=1<<e;if(r==1)return[t[s]];if(r==2)return[i.F.add(t[s],t[s+n]),i.F.sub(t[s],t[s+n])];let h=r>>1,o=rt(i,t,e-1,s,n*2),c=rt(i,t,e-1,s+n,n*2),u=new Array(r);for(let f=0;f<h;f++)u[f]=i.F.add(o[f],i.F.mul(i.roots[e][f],c[f])),u[f+h]=i.F.sub(o[f],i.F.mul(i.roots[e][f],c[f]));return u}function Gt(i,t,e){let s=1<<e;if(s==1)return[t[0]];let n=s>>1,r=Gt(i,t.slice(0,n),e-1),h=Gt(i,t.slice(n),e-1),o=new Array(s);for(let c=0;c<n;c++)o[c]=i.F.add(r[c],i.F.mul(i.roots[e][c],h[c])),o[c+n]=i.F.sub(r[c],i.F.mul(i.roots[e][c],h[c]));return o}var Bt=[];for(let i=0;i<256;i++)Bt[i]=je(i,8);function je(i,t){let e=0,s=i;for(let n=0;n<t;n++)e<<=1,e=e|s&1,s>>=1;return e}function Te(i,t){return(Bt[i>>>24]|Bt[i>>>16&255]<<8|Bt[i>>>8&255]<<16|Bt[i&255]<<24)>>>32-t}function be(i,t){for(let e=0;e<i.length;e++){let s=Te(e,t);if(s>e){let n=i[e];i[e]=i[s],i[s]=n}}}function ot(i,t,e){let s;if(It(e))return i.zero;let n=Vt(e);if(n[n.length-1]==1)s=t;else if(n[n.length-1]==-1)s=i.neg(t);else throw new Error("invlaud NAF");for(let r=n.length-2;r>=0;r--)s=i.double(s),n[r]==1?s=i.add(s,t):n[r]==-1&&(s=i.sub(s,t));return s}function W(i,t,e){if(It(e))return i.one;let s=Yt(e);if(s.length==0)return i.one;let n=t;for(let r=s.length-2;r>=0;r--)n=i.square(n),s[r]&&(n=i.mul(n,t));return n}function Et(i){if(i.m%2==1)if(P(T(i.p,4),1))if(P(T(i.p,8),1))if(P(T(i.p,16),1))$e(i);else if(P(T(i.p,16),9))Je(i);else throw new Error("Field withot sqrt");else if(P(T(i.p,8),5))Xe(i);else throw new Error("Field withot sqrt");else P(T(i.p,4),3)&&Ke(i);else{let t=T(ht(i.p,i.m/2),4);t==1?Qe(i):t==3?He(i):De(i)}}function $e(i){for(i.sqrt_q=ht(i.p,i.m),i.sqrt_s=0,i.sqrt_t=X(i.sqrt_q,1);!bt(i.sqrt_t);)i.sqrt_s=i.sqrt_s+1,i.sqrt_t=it(i.sqrt_t,2);let t=i.one;for(;i.eq(t,i.one);){let e=i.random();i.sqrt_z=i.pow(e,i.sqrt_t),t=i.pow(i.sqrt_z,2**(i.sqrt_s-1))}i.sqrt_tm1d2=it(X(i.sqrt_t,1),2),i.sqrt=function(e){let s=this;if(s.isZero(e))return s.zero;let n=s.pow(e,s.sqrt_tm1d2),r=s.pow(s.mul(s.square(n),e),2**(s.sqrt_s-1));if(s.eq(r,s.negone))return null;let h=s.sqrt_s,o=s.mul(e,n),c=s.mul(o,n),u=s.sqrt_z;for(;!s.eq(c,s.one);){let f=s.square(c),l=1;for(;!s.eq(f,s.one);)f=s.square(f),l++;n=u;for(let a=0;a<h-l-1;a++)n=s.square(n);u=s.square(n),c=s.mul(c,u),o=s.mul(o,n),h=l}return s.geq(o,s.zero)?o:s.neg(o)}}function Je(i){i.sqrt=function(){throw new Error("Sqrt alg 4 not implemented")}}function Xe(i){i.sqrt=function(){throw new Error("Sqrt alg 3 not implemented")}}function Ke(i){i.sqrt_q=ht(i.p,i.m),i.sqrt_e1=it(X(i.sqrt_q,3),4),i.sqrt=function(t){if(this.isZero(t))return this.zero;let e=this.pow(t,this.sqrt_e1),s=this.mul(this.square(e),t);if(this.eq(s,this.negone))return null;let n=this.mul(e,t);return i.geq(n,i.zero)?n:i.neg(n)}}function Qe(i){i.sqrt=function(){throw new Error("Sqrt alg 10 not implemented")}}function He(i){i.sqrt_q=ht(i.p,i.m/2),i.sqrt_e34=it(X(i.sqrt_q,3),4),i.sqrt_e12=it(X(i.sqrt_q,1),2),i.frobenius=function(t,e){return t%2==1?i.conjugate(e):e},i.sqrt=function(t){let e=this,s=e.pow(t,e.sqrt_e34),n=e.mul(e.square(s),t),r=e.mul(e.frobenius(1,n),n);if(e.eq(r,e.negone))return null;let h=e.mul(s,t),o;if(e.eq(n,e.negone))o=e.mul(h,[e.F.zero,e.F.one]);else{let c=e.pow(e.add(e.one,n),e.sqrt_e12);o=e.mul(c,h)}return e.geq(o,e.zero)?o:e.neg(o)}}function De(i){i.sqrt=function(){throw new Error("Sqrt alg 8 not implemented")}}function et(i,t,e,s,n){i[t]=i[t]+i[e]>>>0,i[n]=(i[n]^i[t])>>>0,i[n]=(i[n]<<16|i[n]>>>16&65535)>>>0,i[s]=i[s]+i[n]>>>0,i[e]=(i[e]^i[s])>>>0,i[e]=(i[e]<<12|i[e]>>>20&4095)>>>0,i[t]=i[t]+i[e]>>>0,i[n]=(i[n]^i[t])>>>0,i[n]=(i[n]<<8|i[n]>>>24&255)>>>0,i[s]=i[s]+i[n]>>>0,i[e]=(i[e]^i[s])>>>0,i[e]=(i[e]<<7|i[e]>>>25&127)>>>0}function We(i){et(i,0,4,8,12),et(i,1,5,9,13),et(i,2,6,10,14),et(i,3,7,11,15),et(i,0,5,10,15),et(i,1,6,11,12),et(i,2,7,8,13),et(i,3,4,9,14)}var ut=class{constructor(t){t=t||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],0,0,0,0],this.idx=16,this.buff=new Array(16)}nextU32(){return this.idx==16&&this.update(),this.buff[this.idx++]}nextU64(){return yt(ee(this.nextU32(),4294967296),this.nextU32())}nextBool(){return(this.nextU32()&1)==1}update(){for(let t=0;t<16;t++)this.buff[t]=this.state[t];for(let t=0;t<10;t++)We(this.buff);for(let t=0;t<16;t++)this.buff[t]=this.buff[t]+this.state[t]>>>0;this.idx=0,this.state[12]=this.state[12]+1>>>0,this.state[12]==0&&(this.state[13]=this.state[13]+1>>>0,this.state[13]==0&&(this.state[14]=this.state[14]+1>>>0,this.state[14]==0&&(this.state[15]=this.state[15]+1>>>0)))}};import Ve from"https://deno.land/std@0.177.0/node/crypto.ts";function oe(i){let t=new Uint8Array(i);if(__Process$.browser)if(typeof globalThis.crypto<"u")globalThis.crypto.getRandomValues(t);else for(let e=0;e<i;e++)t[e]=Math.random()*4294967296>>>0;else Ve.randomFillSync(t);return t}function Ye(){let i=oe(32),t=new Uint32Array(i.buffer),e=[];for(let s=0;s<8;s++)e.push(t[s]);return e}var kt=null;function ct(){return kt||(kt=new ut(Ye()),kt)}var Lt=class{constructor(t,e,s){this.F=e,this.G=t,this.opMulGF=s;let n=e.sqrt_t||e.t,r=e.sqrt_s||e.s,h=e.one;for(;e.eq(e.pow(h,e.half),e.one);)h=e.add(h,e.one);this.w=new Array(r+1),this.wi=new Array(r+1),this.w[r]=this.F.pow(h,n),this.wi[r]=this.F.inv(this.w[r]);let o=r-1;for(;o>=0;)this.w[o]=this.F.square(this.w[o+1]),this.wi[o]=this.F.square(this.wi[o+1]),o--;this.roots=[],this._setRoots(Math.min(r,15))}_setRoots(t){for(let e=t;e>=0&&!this.roots[e];e--){let s=this.F.one,n=1<<e,r=new Array(n);for(let h=0;h<n;h++)r[h]=s,s=this.F.mul(s,this.w[e]);this.roots[e]=r}}fft(t){if(t.length<=1)return t;let e=ye(t.length-1)+1;this._setRoots(e);let s=1<<e;if(t.length!=s)throw new Error("Size must be multiple of 2");return Zt(this,t,e,0,1)}ifft(t){if(t.length<=1)return t;let e=ye(t.length-1)+1;this._setRoots(e);let s=1<<e;if(t.length!=s)throw new Error("Size must be multiple of 2");let n=Zt(this,t,e,0,1),r=this.F.inv(this.F.mulScalar(this.F.one,s)),h=new Array(s);for(let o=0;o<s;o++)h[o]=this.opMulGF(n[(s-o)%s],r);return h}};function ye(i){return(i&4294901760?(i&=4294901760,16):0)|(i&4278255360?(i&=4278255360,8):0)|(i&4042322160?(i&=4042322160,4):0)|(i&3435973836?(i&=3435973836,2):0)|(i&2863311530)!==0}function Zt(i,t,e,s,n){let r=1<<e;if(r==1)return[t[s]];if(r==2)return[i.G.add(t[s],t[s+n]),i.G.sub(t[s],t[s+n])];let h=r>>1,o=Zt(i,t,e-1,s,n*2),c=Zt(i,t,e-1,s+n,n*2),u=new Array(r);for(let f=0;f<h;f++)u[f]=i.G.add(o[f],i.opMulGF(c[f],i.roots[e][f])),u[f+h]=i.G.sub(o[f],i.opMulGF(c[f],i.roots[e][f]));return u}var xt=class{constructor(t){this.type="F1",this.one=BigInt(1),this.zero=BigInt(0),this.p=BigInt(t),this.m=1,this.negone=this.p-this.one,this.two=BigInt(2),this.half=this.p>>this.one,this.bitLength=V(this.p),this.mask=(this.one<<BigInt(this.bitLength))-this.one,this.n64=Math.floor((this.bitLength-1)/64)+1,this.n32=this.n64*2,this.n8=this.n64*8,this.R=this.e(this.one<<BigInt(this.n64*64)),this.Ri=this.inv(this.R);let e=this.negone>>this.one;this.nqr=this.two;let s=this.pow(this.nqr,e);for(;!this.eq(s,this.negone);)this.nqr=this.nqr+this.one,s=this.pow(this.nqr,e);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),Et(this),this.FFT=new Lt(this,this,this.mul.bind(this)),this.fft=this.FFT.fft.bind(this.FFT),this.ifft=this.FFT.ifft.bind(this.FFT),this.w=this.FFT.w,this.wi=this.FFT.wi,this.shift=this.square(this.nqr),this.k=this.exp(this.nqr,2**this.s)}e(t,e){let s;if(e?e==16&&(s=BigInt("0x"+t)):s=BigInt(t),s<0){let n=-s;return n>=this.p&&(n=n%this.p),this.p-n}else return s>=this.p?s%this.p:s}add(t,e){let s=t+e;return s>=this.p?s-this.p:s}sub(t,e){return t>=e?t-e:this.p-e+t}neg(t){return t&&this.p-t}mul(t,e){return t*e%this.p}mulScalar(t,e){return t*this.e(e)%this.p}square(t){return t*t%this.p}eq(t,e){return t==e}neq(t,e){return t!=e}lt(t,e){let s=t>this.half?t-this.p:t,n=e>this.half?e-this.p:e;return s<n}gt(t,e){let s=t>this.half?t-this.p:t,n=e>this.half?e-this.p:e;return s>n}leq(t,e){let s=t>this.half?t-this.p:t,n=e>this.half?e-this.p:e;return s<=n}geq(t,e){let s=t>this.half?t-this.p:t,n=e>this.half?e-this.p:e;return s>=n}div(t,e){return this.mul(t,this.inv(e))}idiv(t,e){if(!e)throw new Error("Division by zero");return t/e}inv(t){if(!t)throw new Error("Division by zero");let e=this.zero,s=this.p,n=this.one,r=t%this.p;for(;r;){let h=s/r;[e,n]=[n,e-h*n],[s,r]=[r,s-h*r]}return e<this.zero&&(e+=this.p),e}mod(t,e){return t%e}pow(t,e){return W(this,t,e)}exp(t,e){return W(this,t,e)}band(t,e){let s=t&e&this.mask;return s>=this.p?s-this.p:s}bor(t,e){let s=(t|e)&this.mask;return s>=this.p?s-this.p:s}bxor(t,e){let s=(t^e)&this.mask;return s>=this.p?s-this.p:s}bnot(t){let e=t^this.mask;return e>=this.p?e-this.p:e}shl(t,e){if(Number(e)<this.bitLength){let s=t<<e&this.mask;return s>=this.p?s-this.p:s}else{let s=this.p-e;return Number(s)<this.bitLength?t>>s:this.zero}}shr(t,e){if(Number(e)<this.bitLength)return t>>e;{let s=this.p-e;if(Number(s)<this.bitLength){let n=t<<s&this.mask;return n>=this.p?n-this.p:n}else return 0}}land(t,e){return t&&e?this.one:this.zero}lor(t,e){return t||e?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let s=this.s,n=this.nqr_to_t,r=this.pow(t,this.t),h=this.pow(t,this.add(this.t,this.one)>>this.one);for(;r!=this.one;){let o=this.square(r),c=1;for(;o!=this.one;)c++,o=this.square(o);let u=n;for(let f=0;f<s-c-1;f++)u=this.square(u);s=c,n=this.square(u),r=this.mul(r,n),h=this.mul(h,u)}return h>this.p>>this.one&&(h=this.neg(h)),h}normalize(t,e){if(t=BigInt(t,e),t<0){let s=-t;return s>=this.p&&(s=s%this.p),this.p-s}else return t>=this.p?t%this.p:t}random(){let t=this.bitLength*2/8,e=this.zero;for(let s=0;s<t;s++)e=(e<<BigInt(8))+BigInt(oe(1)[0]);return e%this.p}toString(t,e){e=e||10;let s;return t>this.half&&e==10?s="-"+(this.p-t).toString(e):s=t.toString(e),s}isZero(t){return t==this.zero}fromRng(t){let e;do{e=this.zero;for(let s=0;s<this.n64;s++)e+=t.nextU64()<<BigInt(64*s);e&=this.mask}while(e>=this.p);return e=e*this.Ri%this.p,e}fft(t){return this.FFT.fft(t)}ifft(t){return this.FFT.ifft(t)}toRprLE(t,e,s){nt(t,e,s,this.n64*8)}toRprBE(t,e,s){ie(t,e,s,this.n64*8)}toRprBEM(t,e,s){return this.toRprBE(t,e,this.mul(this.R,s))}toRprLEM(t,e,s){return this.toRprLE(t,e,this.mul(this.R,s))}fromRprLE(t,e){return Y(t,e,this.n8)}fromRprBE(t,e){return ne(t,e,this.n8)}fromRprLEM(t,e){return this.mul(this.fromRprLE(t,e),this.Ri)}fromRprBEM(t,e){return this.mul(this.fromRprBE(t,e),this.Ri)}toObject(t){return t}};var Nt=class{constructor(t,e){this.type="F2",this.F=t,this.zero=[this.F.zero,this.F.zero],this.one=[this.F.one,this.F.zero],this.negone=this.neg(this.one),this.nonResidue=e,this.m=t.m*2,this.p=t.p,this.n64=t.n64*2,this.n32=this.n64*2,this.n8=this.n64*8,Et(this)}_mulByNonResidue(t){return this.F.mul(this.nonResidue,t)}copy(t){return[this.F.copy(t[0]),this.F.copy(t[1])]}add(t,e){return[this.F.add(t[0],e[0]),this.F.add(t[1],e[1])]}double(t){return this.add(t,t)}sub(t,e){return[this.F.sub(t[0],e[0]),this.F.sub(t[1],e[1])]}neg(t){return this.sub(this.zero,t)}conjugate(t){return[t[0],this.F.neg(t[1])]}mul(t,e){let s=this.F.mul(t[0],e[0]),n=this.F.mul(t[1],e[1]);return[this.F.add(s,this._mulByNonResidue(n)),this.F.sub(this.F.mul(this.F.add(t[0],t[1]),this.F.add(e[0],e[1])),this.F.add(s,n))]}inv(t){let e=this.F.square(t[0]),s=this.F.square(t[1]),n=this.F.sub(e,this._mulByNonResidue(s)),r=this.F.inv(n);return[this.F.mul(t[0],r),this.F.neg(this.F.mul(t[1],r))]}div(t,e){return this.mul(t,this.inv(e))}square(t){let e=this.F.mul(t[0],t[1]);return[this.F.sub(this.F.mul(this.F.add(t[0],t[1]),this.F.add(t[0],this._mulByNonResidue(t[1]))),this.F.add(e,this._mulByNonResidue(e))),this.F.add(e,e)]}isZero(t){return this.F.isZero(t[0])&&this.F.isZero(t[1])}eq(t,e){return this.F.eq(t[0],e[0])&&this.F.eq(t[1],e[1])}mulScalar(t,e){return ot(this,t,e)}pow(t,e){return W(this,t,e)}exp(t,e){return W(this,t,e)}toString(t){return`[ ${this.F.toString(t[0])} , ${this.F.toString(t[1])} ]`}fromRng(t){let e=this.F.fromRng(t),s=this.F.fromRng(t);return[e,s]}gt(t,e){return this.F.gt(t[0],e[0])?!0:this.F.gt(e[0],t[0])?!1:!!this.F.gt(t[1],e[1])}geq(t,e){return this.gt(t,e)||this.eq(t,e)}lt(t,e){return!this.geq(t,e)}leq(t,e){return!this.gt(t,e)}neq(t,e){return!this.eq(t,e)}random(){return[this.F.random(),this.F.random()]}toRprLE(t,e,s){this.F.toRprLE(t,e,s[0]),this.F.toRprLE(t,e+this.F.n8,s[1])}toRprBE(t,e,s){this.F.toRprBE(t,e,s[1]),this.F.toRprBE(t,e+this.F.n8,s[0])}toRprLEM(t,e,s){this.F.toRprLEM(t,e,s[0]),this.F.toRprLEM(t,e+this.F.n8,s[1])}toRprBEM(t,e,s){this.F.toRprBEM(t,e,s[1]),this.F.toRprBEM(t,e+this.F.n8,s[0])}fromRprLE(t,e){e=e||0;let s=this.F.fromRprLE(t,e),n=this.F.fromRprLE(t,e+this.F.n8);return[s,n]}fromRprBE(t,e){e=e||0;let s=this.F.fromRprBE(t,e);return[this.F.fromRprBE(t,e+this.F.n8),s]}fromRprLEM(t,e){e=e||0;let s=this.F.fromRprLEM(t,e),n=this.F.fromRprLEM(t,e+this.F.n8);return[s,n]}fromRprBEM(t,e){e=e||0;let s=this.F.fromRprBEM(t,e);return[this.F.fromRprBEM(t,e+this.F.n8),s]}toObject(t){return t}};var Pt=class{constructor(t,e){this.type="F3",this.F=t,this.zero=[this.F.zero,this.F.zero,this.F.zero],this.one=[this.F.one,this.F.zero,this.F.zero],this.negone=this.neg(this.one),this.nonResidue=e,this.m=t.m*3,this.p=t.p,this.n64=t.n64*3,this.n32=this.n64*2,this.n8=this.n64*8}_mulByNonResidue(t){return this.F.mul(this.nonResidue,t)}copy(t){return[this.F.copy(t[0]),this.F.copy(t[1]),this.F.copy(t[2])]}add(t,e){return[this.F.add(t[0],e[0]),this.F.add(t[1],e[1]),this.F.add(t[2],e[2])]}double(t){return this.add(t,t)}sub(t,e){return[this.F.sub(t[0],e[0]),this.F.sub(t[1],e[1]),this.F.sub(t[2],e[2])]}neg(t){return this.sub(this.zero,t)}mul(t,e){let s=this.F.mul(t[0],e[0]),n=this.F.mul(t[1],e[1]),r=this.F.mul(t[2],e[2]);return[this.F.add(s,this._mulByNonResidue(this.F.sub(this.F.mul(this.F.add(t[1],t[2]),this.F.add(e[1],e[2])),this.F.add(n,r)))),this.F.add(this.F.sub(this.F.mul(this.F.add(t[0],t[1]),this.F.add(e[0],e[1])),this.F.add(s,n)),this._mulByNonResidue(r)),this.F.add(this.F.sub(this.F.mul(this.F.add(t[0],t[2]),this.F.add(e[0],e[2])),this.F.add(s,r)),n)]}inv(t){let e=this.F.square(t[0]),s=this.F.square(t[1]),n=this.F.square(t[2]),r=this.F.mul(t[0],t[1]),h=this.F.mul(t[0],t[2]),o=this.F.mul(t[1],t[2]),c=this.F.sub(e,this._mulByNonResidue(o)),u=this.F.sub(this._mulByNonResidue(n),r),f=this.F.sub(s,h),l=this.F.inv(this.F.add(this.F.mul(t[0],c),this._mulByNonResidue(this.F.add(this.F.mul(t[2],u),this.F.mul(t[1],f)))));return[this.F.mul(l,c),this.F.mul(l,u),this.F.mul(l,f)]}div(t,e){return this.mul(t,this.inv(e))}square(t){let e=this.F.square(t[0]),s=this.F.mul(t[0],t[1]),n=this.F.add(s,s),r=this.F.square(this.F.add(this.F.sub(t[0],t[1]),t[2])),h=this.F.mul(t[1],t[2]),o=this.F.add(h,h),c=this.F.square(t[2]);return[this.F.add(e,this._mulByNonResidue(o)),this.F.add(n,this._mulByNonResidue(c)),this.F.sub(this.F.add(this.F.add(n,r),o),this.F.add(e,c))]}isZero(t){return this.F.isZero(t[0])&&this.F.isZero(t[1])&&this.F.isZero(t[2])}eq(t,e){return this.F.eq(t[0],e[0])&&this.F.eq(t[1],e[1])&&this.F.eq(t[2],e[2])}affine(t){return[this.F.affine(t[0]),this.F.affine(t[1]),this.F.affine(t[2])]}mulScalar(t,e){return ot(this,t,e)}pow(t,e){return W(this,t,e)}exp(t,e){return W(this,t,e)}toString(t){return`[ ${this.F.toString(t[0])} , ${this.F.toString(t[1])}, ${this.F.toString(t[2])} ]`}fromRng(t){let e=this.F.fromRng(t),s=this.F.fromRng(t),n=this.F.fromRng(t);return[e,s,n]}gt(t,e){return this.F.gt(t[0],e[0])?!0:this.F.gt(e[0],t[0])?!1:this.F.gt(t[1],e[1])?!0:this.F.gt(e[1],t[1])?!1:!!this.F.gt(t[2],e[2])}geq(t,e){return this.gt(t,e)||this.eq(t,e)}lt(t,e){return!this.geq(t,e)}leq(t,e){return!this.gt(t,e)}neq(t,e){return!this.eq(t,e)}random(){return[this.F.random(),this.F.random(),this.F.random()]}toRprLE(t,e,s){this.F.toRprLE(t,e,s[0]),this.F.toRprLE(t,e+this.F.n8,s[1]),this.F.toRprLE(t,e+this.F.n8*2,s[2])}toRprBE(t,e,s){this.F.toRprBE(t,e,s[2]),this.F.toRprBE(t,e+this.F.n8,s[1]),this.F.toRprBE(t,e+this.F.n8*2,s[0])}toRprLEM(t,e,s){this.F.toRprLEM(t,e,s[0]),this.F.toRprLEM(t,e+this.F.n8,s[1]),this.F.toRprLEM(t,e+this.F.n8*2,s[2])}toRprBEM(t,e,s){this.F.toRprBEM(t,e,s[2]),this.F.toRprBEM(t,e+this.F.n8,s[1]),this.F.toRprBEM(t,e+this.F.n8*2,s[0])}fromRprLE(t,e){e=e||0;let s=this.F.fromRprLE(t,e),n=this.F.fromRprLE(t,e+this.n8),r=this.F.fromRprLE(t,e+this.n8*2);return[s,n,r]}fromRprBE(t,e){e=e||0;let s=this.F.fromRprBE(t,e),n=this.F.fromRprBE(t,e+this.n8);return[this.F.fromRprBE(t,e+this.n8*2),n,s]}fromRprLEM(t,e){e=e||0;let s=this.F.fromRprLEM(t,e),n=this.F.fromRprLEM(t,e+this.n8),r=this.F.fromRprLEM(t,e+this.n8*2);return[s,n,r]}fromRprBEM(t,e){e=e||0;let s=this.F.fromRprBEM(t,e),n=this.F.fromRprBEM(t,e+this.n8);return[this.F.fromRprBEM(t,e+this.n8*2),n,s]}toObject(t){return t}};function jt(i,t){if(Array.isArray(t)){for(let e=t.length-1;e>=0;e--)if(!i.F.isZero(t[e]))return jt(i.F,t[e]);return 0}else{let e=i.neg(t);return ft(t,e)}}var Tt=class{constructor(t,e){this.F=t,this.g=e,this.g.length==2&&(this.g[2]=this.F.one),this.zero=[this.F.zero,this.F.one,this.F.zero]}add(t,e){let s=this.F;if(this.eq(t,this.zero))return e;if(this.eq(e,this.zero))return t;let n=new Array(3),r=s.square(t[2]),h=s.square(e[2]),o=s.mul(t[0],h),c=s.mul(e[0],r),u=s.mul(t[2],r),f=s.mul(e[2],h),l=s.mul(t[1],f),a=s.mul(e[1],u);if(s.eq(o,c)&&s.eq(l,a))return this.double(t);let m=s.sub(c,o),p=s.sub(a,l),g=s.square(s.add(m,m)),b=s.mul(m,g),F=s.add(p,p),d=s.mul(o,g);n[0]=s.sub(s.sub(s.square(F),b),s.add(d,d));let v=s.mul(l,b);return n[1]=s.sub(s.mul(F,s.sub(d,n[0])),s.add(v,v)),n[2]=s.mul(m,s.sub(s.square(s.add(t[2],e[2])),s.add(r,h))),n}neg(t){return[t[0],this.F.neg(t[1]),t[2]]}sub(t,e){return this.add(t,this.neg(e))}double(t){let e=this.F,s=new Array(3);if(this.eq(t,this.zero))return t;let n=e.square(t[0]),r=e.square(t[1]),h=e.square(r),o=e.sub(e.square(e.add(t[0],r)),e.add(n,h));o=e.add(o,o);let c=e.add(e.add(n,n),n),u=e.square(c);s[0]=e.sub(u,e.add(o,o));let f=e.add(h,h);f=e.add(f,f),f=e.add(f,f),s[1]=e.sub(e.mul(c,e.sub(o,s[0])),f);let l=e.mul(t[1],t[2]);return s[2]=e.add(l,l),s}timesScalar(t,e){return ot(this,t,e)}mulScalar(t,e){return ot(this,t,e)}affine(t){let e=this.F;if(this.isZero(t))return this.zero;if(e.eq(t[2],e.one))return t;{let s=e.inv(t[2]),n=e.square(s),r=e.mul(n,s),h=new Array(3);return h[0]=e.mul(t[0],n),h[1]=e.mul(t[1],r),h[2]=e.one,h}}multiAffine(t){let e=Object.keys(t),s=this.F,n=new Array(e.length+1);n[0]=s.one;for(let r=0;r<e.length;r++)s.eq(t[e[r]][2],s.zero)?n[r+1]=n[r]:n[r+1]=s.mul(n[r],t[e[r]][2]);n[e.length]=s.inv(n[e.length]);for(let r=e.length-1;r>=0;r--)if(s.eq(t[e[r]][2],s.zero))n[r]=n[r+1],t[e[r]]=this.zero;else{let h=s.mul(n[r],n[r+1]);n[r]=s.mul(t[e[r]][2],n[r+1]);let o=s.square(h),c=s.mul(o,h);t[e[r]][0]=s.mul(t[e[r]][0],o),t[e[r]][1]=s.mul(t[e[r]][1],c),t[e[r]][2]=s.one}}eq(t,e){let s=this.F;if(this.F.eq(t[2],this.F.zero))return this.F.eq(e[2],this.F.zero);if(this.F.eq(e[2],this.F.zero))return!1;let n=s.square(t[2]),r=s.square(e[2]),h=s.mul(t[0],r),o=s.mul(e[0],n),c=s.mul(t[2],n),u=s.mul(e[2],r),f=s.mul(t[1],u),l=s.mul(e[1],c);return s.eq(h,o)&&s.eq(f,l)}isZero(t){return this.F.isZero(t[2])}toString(t){let e=this.affine(t);return`[ ${this.F.toString(e[0])} , ${this.F.toString(e[1])} ]`}fromRng(t){let e=this.F,s=[],n;do{s[0]=e.fromRng(t),n=t.nextBool();let h=e.add(e.mul(e.square(s[0]),s[0]),this.b);s[1]=e.sqrt(h)}while(s[1]==null||e.isZero[s]);let r=jt(e,s[1]);return n^r&&(s[1]=e.neg(s[1])),s[2]=e.one,this.cofactor&&(s=this.mulScalar(s,this.cofactor)),s=this.affine(s),s}toRprLE(t,e,s){if(s=this.affine(s),this.isZero(s)){new Uint8Array(t,e,this.F.n8*2).fill(0);return}this.F.toRprLE(t,e,s[0]),this.F.toRprLE(t,e+this.F.n8,s[1])}toRprBE(t,e,s){if(s=this.affine(s),this.isZero(s)){new Uint8Array(t,e,this.F.n8*2).fill(0);return}this.F.toRprBE(t,e,s[0]),this.F.toRprBE(t,e+this.F.n8,s[1])}toRprLEM(t,e,s){if(s=this.affine(s),this.isZero(s)){new Uint8Array(t,e,this.F.n8*2).fill(0);return}this.F.toRprLEM(t,e,s[0]),this.F.toRprLEM(t,e+this.F.n8,s[1])}toRprLEJM(t,e,s){if(s=this.affine(s),this.isZero(s)){new Uint8Array(t,e,this.F.n8*2).fill(0);return}this.F.toRprLEM(t,e,s[0]),this.F.toRprLEM(t,e+this.F.n8,s[1]),this.F.toRprLEM(t,e+2*this.F.n8,s[2])}toRprBEM(t,e,s){if(s=this.affine(s),this.isZero(s)){new Uint8Array(t,e,this.F.n8*2).fill(0);return}this.F.toRprBEM(t,e,s[0]),this.F.toRprBEM(t,e+this.F.n8,s[1])}fromRprLE(t,e){e=e||0;let s=this.F.fromRprLE(t,e),n=this.F.fromRprLE(t,e+this.F.n8);return this.F.isZero(s)&&this.F.isZero(n)?this.zero:[s,n,this.F.one]}fromRprBE(t,e){e=e||0;let s=this.F.fromRprBE(t,e),n=this.F.fromRprBE(t,e+this.F.n8);return this.F.isZero(s)&&this.F.isZero(n)?this.zero:[s,n,this.F.one]}fromRprLEM(t,e){e=e||0;let s=this.F.fromRprLEM(t,e),n=this.F.fromRprLEM(t,e+this.F.n8);return this.F.isZero(s)&&this.F.isZero(n)?this.zero:[s,n,this.F.one]}fromRprLEJM(t,e){e=e||0;let s=this.F.fromRprLEM(t,e),n=this.F.fromRprLEM(t,e+this.F.n8),r=this.F.fromRprLEM(t,e+this.F.n8*2);return this.F.isZero(s)&&this.F.isZero(n)?this.zero:[s,n,r]}fromRprBEM(t,e){e=e||0;let s=this.F.fromRprBEM(t,e),n=this.F.fromRprBEM(t,e+this.F.n8);return this.F.isZero(s)&&this.F.isZero(n)?this.zero:[s,n,this.F.one]}fromRprCompressed(t,e){let s=this.F,n=new Uint8Array(t.buffer,e,s.n8);if(n[0]&64)return this.zero;let r=new Array(3),h=(n[0]&128)!=0;n[0]=n[0]&127,r[0]=s.fromRprBE(t,e),h&&(n[0]=n[0]|128);let o=s.add(s.mul(s.square(r[0]),r[0]),this.b);if(r[1]=s.sqrt(o),r[1]===null)throw new Error("Invalid Point!");let c=jt(s,r[1]);return h^c&&(r[1]=s.neg(r[1])),r[2]=s.one,r}toRprCompressed(t,e,s){s=this.affine(s);let n=new Uint8Array(t.buffer,e,this.F.n8);if(this.isZero(s)){n.fill(0),n[0]=64;return}this.F.toRprBE(t,e,s[0]),jt(this.F,s[1])&&(n[0]=n[0]|128)}fromRprUncompressed(t,e){return t[0]&64?this.zero:this.fromRprBE(t,e)}toRprUncompressed(t,e,s){this.toRprBE(t,e,s),this.isZero(s)&&(t[e]=t[e]|64)}};import{buildBn128 as us}from"https://esm.sh/v122/wasmcurves@0.2.0/deno/wasmcurves.mjs";var $t={};Fe($t,{array2buffer:()=>St,beBuff2int:()=>ts,beInt2Buff:()=>es,bitReverse:()=>Be,buffReverseBits:()=>ae,buffer2array:()=>at,leBuff2int:()=>ss,leInt2Buff:()=>ce,log2:()=>k,stringifyBigInts:()=>he,stringifyFElements:()=>le,unstringifyBigInts:()=>fe,unstringifyFElements:()=>ue});function he(i){if(typeof i=="bigint"||i.eq!==void 0)return i.toString(10);if(i instanceof Uint8Array)return Y(i,0);if(Array.isArray(i))return i.map(he);if(typeof i=="object"){let t={};return Object.keys(i).forEach(s=>{t[s]=he(i[s])}),t}else return i}function fe(i){if(typeof i=="string"&&/^[0-9]+$/.test(i))return BigInt(i);if(typeof i=="string"&&/^0x[0-9a-fA-F]+$/.test(i))return BigInt(i);if(Array.isArray(i))return i.map(fe);if(typeof i=="object"){if(i===null)return null;let t={};return Object.keys(i).forEach(s=>{t[s]=fe(i[s])}),t}else return i}function ts(i){let t=BigInt(0),e=i.length,s=0,n=new DataView(i.buffer,i.byteOffset,i.byteLength);for(;e>0;)e>=4?(e-=4,t+=BigInt(n.getUint32(e))<<BigInt(s*8),s+=4):e>=2?(e-=2,t+=BigInt(n.getUint16(e))<<BigInt(s*8),s+=2):(e-=1,t+=BigInt(n.getUint8(e))<<BigInt(s*8),s+=1);return t}function es(i,t){let e=i,s=new Uint8Array(t),n=new DataView(s.buffer),r=t;for(;r>0;)r-4>=0?(r-=4,n.setUint32(r,Number(e&BigInt(4294967295))),e=e>>BigInt(32)):r-2>=0?(r-=2,n.setUint16(r,Number(e&BigInt(65535))),e=e>>BigInt(16)):(r-=1,n.setUint8(r,Number(e&BigInt(255))),e=e>>BigInt(8));if(e)throw new Error("Number does not fit in this length");return s}function ss(i){let t=BigInt(0),e=0,s=new DataView(i.buffer,i.byteOffset,i.byteLength);for(;e<i.length;)e+4<=i.length?(t+=BigInt(s.getUint32(e,!0))<<BigInt(e*8),e+=4):e+2<=i.length?(t+=BigInt(s.getUint16(e,!0))<<BigInt(e*8),e+=2):(t+=BigInt(s.getUint8(e,!0))<<BigInt(e*8),e+=1);return t}function ce(i,t){let e=i;typeof t>"u"&&(t=Math.floor((V(i)-1)/8)+1,t==0&&(t=1));let s=new Uint8Array(t),n=new DataView(s.buffer),r=0;for(;r<t;)r+4<=t?(n.setUint32(r,Number(e&BigInt(4294967295)),!0),r+=4,e=e>>BigInt(32)):r+2<=t?(n.setUint16(r,Number(e&BigInt(65535)),!0),r+=2,e=e>>BigInt(16)):(n.setUint8(r,Number(e&BigInt(255)),!0),r+=1,e=e>>BigInt(8));if(e)throw new Error("Number does not fit in this length");return s}function le(i,t){if(typeof t=="bigint"||t.eq!==void 0)return t.toString(10);if(t instanceof Uint8Array)return i.toString(i.e(t));if(Array.isArray(t))return t.map(le.bind(this,i));if(typeof t=="object"){let e={};return Object.keys(t).forEach(n=>{e[n]=le(i,t[n])}),e}else return t}function ue(i,t){if(typeof t=="string"&&/^[0-9]+$/.test(t))return i.e(t);if(typeof t=="string"&&/^0x[0-9a-fA-F]+$/.test(t))return i.e(t);if(Array.isArray(t))return t.map(ue.bind(this,i));if(typeof t=="object"){if(t===null)return null;let e={};return Object.keys(t).forEach(n=>{e[n]=ue(i,t[n])}),e}else return t}var At=[];for(let i=0;i<256;i++)At[i]=is(i,8);function is(i,t){let e=0,s=i;for(let n=0;n<t;n++)e<<=1,e=e|s&1,s>>=1;return e}function Be(i,t){return(At[i>>>24]|At[i>>>16&255]<<8|At[i>>>8&255]<<16|At[i&255]<<24)>>>32-t}function k(i){return(i&4294901760?(i&=4294901760,16):0)|(i&4278255360?(i&=4278255360,8):0)|(i&4042322160?(i&=4042322160,4):0)|(i&3435973836?(i&=3435973836,2):0)|(i&2863311530)!==0}function ae(i,t){let e=i.byteLength/t,s=k(e);if(e!=1<<s)throw new Error("Invalid number of pointers");for(let n=0;n<e;n++){let r=Be(n,s);if(n>r){let h=i.slice(n*t,(n+1)*t);i.set(i.slice(r*t,(r+1)*t),n*t),i.set(h,r*t)}}}function St(i,t){let e=new Uint8Array(t*i.length);for(let s=0;s<i.length;s++)e.set(i[s],s*t);return e}function at(i,t){let e=i.byteLength/t,s=new Array(e);for(let n=0;n<e;n++)s[n]=i.slice(n*t,n*t+t);return s}var q=class{constructor(t){this.buffers=[],this.byteLength=t;for(let e=0;e<t;e+=1073741824){let s=Math.min(t-e,1073741824);this.buffers.push(new Uint8Array(s))}}slice(t,e){e===void 0&&(e=this.byteLength),t===void 0&&(t=0);let s=e-t,n=Math.floor(t/1073741824),r=Math.floor((t+s-1)/1073741824);if(n==r||s==0)return this.buffers[n].slice(t%1073741824,t%1073741824+s);let h,o=n,c=t%1073741824,u=s;for(;u>0;){let f=c+u>1073741824?1073741824-c:u,l=new Uint8Array(this.buffers[o].buffer,this.buffers[o].byteOffset+c,f);if(f==s)return l.slice();h||(s<=1073741824?h=new Uint8Array(s):h=new q(s)),h.set(l,s-u),u=u-f,o++,c=0}return h}set(t,e){e===void 0&&(e=0);let s=t.byteLength;if(s==0)return;let n=Math.floor(e/1073741824),r=Math.floor((e+s-1)/1073741824);if(n==r)return t instanceof q&&t.buffers.length==1?this.buffers[n].set(t.buffers[0],e%1073741824):this.buffers[n].set(t,e%1073741824);let h=n,o=e%1073741824,c=s;for(;c>0;){let u=o+c>1073741824?1073741824-o:c,f=t.slice(s-c,s-c+u);new Uint8Array(this.buffers[h].buffer,this.buffers[h].byteOffset+o,u).set(f),c=c-u,h++,o=0}}};function K(i,t,e,s){return async function(r){let h=Math.floor(r.byteLength/e);if(h*e!==r.byteLength)throw new Error("Invalid buffer size");let o=Math.floor(h/i.concurrency),c=[];for(let a=0;a<i.concurrency;a++){let m;if(a<i.concurrency-1?m=o:m=h-a*o,m==0)continue;let g=[{cmd:"ALLOCSET",var:0,buff:r.slice(a*o*e,a*o*e+m*e)},{cmd:"ALLOC",var:1,len:s*m},{cmd:"CALL",fnName:t,params:[{var:0},{val:m},{var:1}]},{cmd:"GET",out:0,var:1,len:s*m}];c.push(i.queueAction(g))}let u=await Promise.all(c),f;r instanceof q?f=new q(h*s):f=new Uint8Array(h*s);let l=0;for(let a=0;a<u.length;a++)f.set(u[a][0],l),l+=u[a][0].byteLength;return f}}var pt=class{constructor(t,e,s,n){if(this.tm=t,this.prefix=e,this.p=n,this.n8=s,this.type="F1",this.m=1,this.half=st(n,tt),this.bitLength=V(n),this.mask=X(wt(tt,this.bitLength),tt),this.pOp1=t.alloc(s),this.pOp2=t.alloc(s),this.pOp3=t.alloc(s),this.tm.instance.exports[e+"_zero"](this.pOp1),this.zero=this.tm.getBuff(this.pOp1,this.n8),this.tm.instance.exports[e+"_one"](this.pOp1),this.one=this.tm.getBuff(this.pOp1,this.n8),this.negone=this.neg(this.one),this.two=this.add(this.one,this.one),this.n64=Math.floor(s/8),this.n32=Math.floor(s/4),this.n64*8!=this.n8)throw new Error("n8 must be a multiple of 8");this.half=st(this.p,tt),this.nqr=this.two;let r=this.exp(this.nqr,this.half);for(;!this.eq(r,this.negone);)this.nqr=this.add(this.nqr,this.one),r=this.exp(this.nqr,this.half);this.shift=this.mul(this.nqr,this.nqr),this.shiftInv=this.inv(this.shift),this.s=0;let h=X(this.p,tt);for(;!bt(h);)this.s=this.s+1,h=st(h,tt);this.w=[],this.w[this.s]=this.exp(this.nqr,h);for(let o=this.s-1;o>=0;o--)this.w[o]=this.square(this.w[o+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=K(t,e+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=K(t,e+"_batchFromMontgomery",this.n8,this.n8)}op2(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,e){return this.op2("_add",t,e)}eq(t,e){return this.op2Bool("_eq",t,e)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,e){return this.op2("_sub",t,e)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,e){return this.op2("_mul",t,e)}div(t,e){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,e){return e instanceof Uint8Array||(e=H(M(e))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(t){return this.op1Bool("_isNegative",t)}e(t,e){if(t instanceof Uint8Array)return t;let s=M(t,e);Wt(s)?(s=te(s),ft(s,this.p)&&(s=T(s,this.p)),s=X(this.p,s)):ft(s,this.p)&&(s=T(s,this.p));let n=ce(s,this.n8);return this.toMontgomery(n)}toString(t,e){let s=this.fromMontgomery(t),n=Y(s,0);return lt(n,e)}fromRng(t){let e,s=new Uint8Array(this.n8);do{e=re;for(let n=0;n<this.n64;n++)e=yt(e,wt(t.nextU64(),64*n));e=Ct(e,this.mask)}while(se(e,this.p));return nt(s,0,e,this.n8),s}random(){return this.fromRng(ct())}toObject(t){let e=this.fromMontgomery(t);return Y(e,0)}fromObject(t){let e=new Uint8Array(this.n8);return nt(e,0,t,this.n8),this.toMontgomery(e)}toRprLE(t,e,s){t.set(this.fromMontgomery(s),e)}toRprBE(t,e,s){let n=this.fromMontgomery(s);for(let r=0;r<this.n8/2;r++){let h=n[r];n[r]=n[this.n8-1-r],n[this.n8-1-r]=h}t.set(n,e)}fromRprLE(t,e){e=e||0;let s=t.slice(e,e+this.n8);return this.toMontgomery(s)}async batchInverse(t){let e=!1,s=this.n8,n=this.n8;Array.isArray(t)?(t=St(t,s),e=!0):t=t.slice(0,t.byteLength);let r=Math.floor(t.byteLength/s);if(r*s!==t.byteLength)throw new Error("Invalid buffer size");let h=Math.floor(r/this.tm.concurrency),o=[];for(let l=0;l<this.tm.concurrency;l++){let a;if(l<this.tm.concurrency-1?a=h:a=r-l*h,a==0)continue;let p=[{cmd:"ALLOCSET",var:0,buff:t.slice(l*h*s,l*h*s+a*s)},{cmd:"ALLOC",var:1,len:n*a},{cmd:"CALL",fnName:this.prefix+"_batchInverse",params:[{var:0},{val:s},{val:a},{var:1},{val:n}]},{cmd:"GET",out:0,var:1,len:n*a}];o.push(this.tm.queueAction(p))}let c=await Promise.all(o),u;t instanceof q?u=new q(r*n):u=new Uint8Array(r*n);let f=0;for(let l=0;l<c.length;l++)u.set(c[l][0],f),f+=c[l][0].byteLength;return e?at(u,n):u}};var mt=class{constructor(t,e,s){this.tm=t,this.prefix=e,this.F=s,this.type="F2",this.m=s.m*2,this.n8=this.F.n8*2,this.n32=this.F.n32*2,this.n64=this.F.n64*2,this.pOp1=t.alloc(s.n8*2),this.pOp2=t.alloc(s.n8*2),this.pOp3=t.alloc(s.n8*2),this.tm.instance.exports[e+"_zero"](this.pOp1),this.zero=t.getBuff(this.pOp1,this.n8),this.tm.instance.exports[e+"_one"](this.pOp1),this.one=t.getBuff(this.pOp1,this.n8),this.negone=this.neg(this.one),this.two=this.add(this.one,this.one)}op2(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,e){return this.op2("_add",t,e)}eq(t,e){return this.op2Bool("_eq",t,e)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,e){return this.op2("_sub",t,e)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}isNegative(t){return this.op1Bool("_isNegative",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,e){return this.op2("_mul",t,e)}mul1(t,e){return this.op2("_mul1",t,e)}div(t,e){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,e){return e instanceof Uint8Array||(e=H(M(e))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}e(t,e){if(t instanceof Uint8Array)return t;if(Array.isArray(t)&&t.length==2){let s=this.F.e(t[0],e),n=this.F.e(t[1],e),r=new Uint8Array(this.F.n8*2);return r.set(s),r.set(n,this.F.n8*2),r}else throw new Error("invalid F2")}toString(t,e){let s=this.F.toString(t.slice(0,this.F.n8),e),n=this.F.toString(t.slice(this.F.n8),e);return`[${s}, ${n}]`}fromRng(t){let e=this.F.fromRng(t),s=this.F.fromRng(t),n=new Uint8Array(this.F.n8*2);return n.set(e),n.set(s,this.F.n8),n}random(){return this.fromRng(ct())}toObject(t){let e=this.F.toObject(t.slice(0,this.F.n8)),s=this.F.toObject(t.slice(this.F.n8,this.F.n8*2));return[e,s]}fromObject(t){let e=new Uint8Array(this.F.n8*2),s=this.F.fromObject(t[0]),n=this.F.fromObject(t[1]);return e.set(s),e.set(n,this.F.n8),e}c1(t){return t.slice(0,this.F.n8)}c2(t){return t.slice(this.F.n8)}};var _t=class{constructor(t,e,s){this.tm=t,this.prefix=e,this.F=s,this.type="F3",this.m=s.m*3,this.n8=this.F.n8*3,this.n32=this.F.n32*3,this.n64=this.F.n64*3,this.pOp1=t.alloc(s.n8*3),this.pOp2=t.alloc(s.n8*3),this.pOp3=t.alloc(s.n8*3),this.tm.instance.exports[e+"_zero"](this.pOp1),this.zero=t.getBuff(this.pOp1,this.n8),this.tm.instance.exports[e+"_one"](this.pOp1),this.one=t.getBuff(this.pOp1,this.n8),this.negone=this.neg(this.one),this.two=this.add(this.one,this.one)}op2(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}eq(t,e){return this.op2Bool("_eq",t,e)}isZero(t){return this.op1Bool("_isZero",t)}add(t,e){return this.op2("_add",t,e)}sub(t,e){return this.op2("_sub",t,e)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}isNegative(t){return this.op1Bool("_isNegative",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,e){return this.op2("_mul",t,e)}div(t,e){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,e){return e instanceof Uint8Array||(e=H(M(e))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.getBuff(this.pOp3,this.n8)}e(t,e){if(t instanceof Uint8Array)return t;if(Array.isArray(t)&&t.length==3){let s=this.F.e(t[0],e),n=this.F.e(t[1],e),r=this.F.e(t[2],e),h=new Uint8Array(this.F.n8*3);return h.set(s),h.set(n,this.F.n8),h.set(r,this.F.n8*2),h}else throw new Error("invalid F3")}toString(t,e){let s=this.F.toString(t.slice(0,this.F.n8),e),n=this.F.toString(t.slice(this.F.n8,this.F.n8*2),e),r=this.F.toString(t.slice(this.F.n8*2),e);return`[${s}, ${n}, ${r}]`}fromRng(t){let e=this.F.fromRng(t),s=this.F.fromRng(t),n=this.F.fromRng(t),r=new Uint8Array(this.F.n8*3);return r.set(e),r.set(s,this.F.n8),r.set(n,this.F.n8*2),r}random(){return this.fromRng(ct())}toObject(t){let e=this.F.toObject(t.slice(0,this.F.n8)),s=this.F.toObject(t.slice(this.F.n8,this.F.n8*2)),n=this.F.toObject(t.slice(this.F.n8*2,this.F.n8*3));return[e,s,n]}fromObject(t){let e=new Uint8Array(this.F.n8*3),s=this.F.fromObject(t[0]),n=this.F.fromObject(t[1]),r=this.F.fromObject(t[2]);return e.set(s),e.set(n,this.F.n8),e.set(r,this.F.n8*2),e}c1(t){return t.slice(0,this.F.n8)}c2(t){return t.slice(this.F.n8,this.F.n8*2)}c3(t){return t.slice(this.F.n8*2)}};var dt=class{constructor(t,e,s,n,r,h){this.tm=t,this.prefix=e,this.F=s,this.pOp1=t.alloc(s.n8*3),this.pOp2=t.alloc(s.n8*3),this.pOp3=t.alloc(s.n8*3),this.tm.instance.exports[e+"_zero"](this.pOp1),this.zero=this.tm.getBuff(this.pOp1,s.n8*3),this.tm.instance.exports[e+"_zeroAffine"](this.pOp1),this.zeroAffine=this.tm.getBuff(this.pOp1,s.n8*2),this.one=this.tm.getBuff(n,s.n8*3),this.g=this.one,this.oneAffine=this.tm.getBuff(n,s.n8*2),this.gAffine=this.oneAffine,this.b=this.tm.getBuff(r,s.n8),h&&(this.cofactor=H(h)),this.negone=this.neg(this.one),this.two=this.add(this.one,this.one),this.batchLEMtoC=K(t,e+"_batchLEMtoC",s.n8*2,s.n8),this.batchLEMtoU=K(t,e+"_batchLEMtoU",s.n8*2,s.n8*2),this.batchCtoLEM=K(t,e+"_batchCtoLEM",s.n8,s.n8*2),this.batchUtoLEM=K(t,e+"_batchUtoLEM",s.n8*2,s.n8*2),this.batchToJacobian=K(t,e+"_batchToJacobian",s.n8*2,s.n8*3),this.batchToAffine=K(t,e+"_batchToAffine",s.n8*3,s.n8*2)}op2(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.F.n8*3)}op2bool(t,e,s){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,s),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.F.n8*3)}op1Affine(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.F.n8*2)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,e){if(t.byteLength==this.F.n8*3){if(e.byteLength==this.F.n8*3)return this.op2("_add",t,e);if(e.byteLength==this.F.n8*2)return this.op2("_addMixed",t,e);throw new Error("invalid point size")}else if(t.byteLength==this.F.n8*2){if(e.byteLength==this.F.n8*3)return this.op2("_addMixed",e,t);if(e.byteLength==this.F.n8*2)return this.op2("_addAffine",t,e);throw new Error("invalid point size")}else throw new Error("invalid point size")}sub(t,e){if(t.byteLength==this.F.n8*3){if(e.byteLength==this.F.n8*3)return this.op2("_sub",t,e);if(e.byteLength==this.F.n8*2)return this.op2("_subMixed",t,e);throw new Error("invalid point size")}else if(t.byteLength==this.F.n8*2){if(e.byteLength==this.F.n8*3)return this.op2("_subMixed",e,t);if(e.byteLength==this.F.n8*2)return this.op2("_subAffine",t,e);throw new Error("invalid point size")}else throw new Error("invalid point size")}neg(t){if(t.byteLength==this.F.n8*3)return this.op1("_neg",t);if(t.byteLength==this.F.n8*2)return this.op1Affine("_negAffine",t);throw new Error("invalid point size")}double(t){if(t.byteLength==this.F.n8*3)return this.op1("_double",t);if(t.byteLength==this.F.n8*2)return this.op1("_doubleAffine",t);throw new Error("invalid point size")}isZero(t){if(t.byteLength==this.F.n8*3)return this.op1Bool("_isZero",t);if(t.byteLength==this.F.n8*2)return this.op1Bool("_isZeroAffine",t);throw new Error("invalid point size")}timesScalar(t,e){e instanceof Uint8Array||(e=H(M(e)));let s;if(t.byteLength==this.F.n8*3)s=this.prefix+"_timesScalar";else if(t.byteLength==this.F.n8*2)s=this.prefix+"_timesScalarAffine";else throw new Error("invalid point size");return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[s](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.F.n8*3)}timesFr(t,e){let s;if(t.byteLength==this.F.n8*3)s=this.prefix+"_timesFr";else if(t.byteLength==this.F.n8*2)s=this.prefix+"_timesFrAffine";else throw new Error("invalid point size");return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[s](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.F.n8*3)}eq(t,e){if(t.byteLength==this.F.n8*3){if(e.byteLength==this.F.n8*3)return this.op2bool("_eq",t,e);if(e.byteLength==this.F.n8*2)return this.op2bool("_eqMixed",t,e);throw new Error("invalid point size")}else if(t.byteLength==this.F.n8*2){if(e.byteLength==this.F.n8*3)return this.op2bool("_eqMixed",e,t);if(e.byteLength==this.F.n8*2)return this.op2bool("_eqAffine",t,e);throw new Error("invalid point size")}else throw new Error("invalid point size")}toAffine(t){if(t.byteLength==this.F.n8*3)return this.op1Affine("_toAffine",t);if(t.byteLength==this.F.n8*2)return t;throw new Error("invalid point size")}toJacobian(t){if(t.byteLength==this.F.n8*3)return t;if(t.byteLength==this.F.n8*2)return this.op1("_toJacobian",t);throw new Error("invalid point size")}toRprUncompressed(t,e,s){if(this.tm.setBuff(this.pOp1,s),s.byteLength==this.F.n8*3)this.tm.instance.exports[this.prefix+"_toAffine"](this.pOp1,this.pOp1);else if(s.byteLength!=this.F.n8*2)throw new Error("invalid point size");this.tm.instance.exports[this.prefix+"_LEMtoU"](this.pOp1,this.pOp1);let n=this.tm.getBuff(this.pOp1,this.F.n8*2);t.set(n,e)}fromRprUncompressed(t,e){let s=t.slice(e,e+this.F.n8*2);return this.tm.setBuff(this.pOp1,s),this.tm.instance.exports[this.prefix+"_UtoLEM"](this.pOp1,this.pOp1),this.tm.getBuff(this.pOp1,this.F.n8*2)}toRprCompressed(t,e,s){if(this.tm.setBuff(this.pOp1,s),s.byteLength==this.F.n8*3)this.tm.instance.exports[this.prefix+"_toAffine"](this.pOp1,this.pOp1);else if(s.byteLength!=this.F.n8*2)throw new Error("invalid point size");this.tm.instance.exports[this.prefix+"_LEMtoC"](this.pOp1,this.pOp1);let n=this.tm.getBuff(this.pOp1,this.F.n8);t.set(n,e)}fromRprCompressed(t,e){let s=t.slice(e,e+this.F.n8);return this.tm.setBuff(this.pOp1,s),this.tm.instance.exports[this.prefix+"_CtoLEM"](this.pOp1,this.pOp2),this.tm.getBuff(this.pOp2,this.F.n8*2)}toUncompressed(t){let e=new Uint8Array(this.F.n8*2);return this.toRprUncompressed(e,0,t),e}toRprLEM(t,e,s){if(s.byteLength==this.F.n8*2){t.set(s,e);return}else if(s.byteLength==this.F.n8*3){this.tm.setBuff(this.pOp1,s),this.tm.instance.exports[this.prefix+"_toAffine"](this.pOp1,this.pOp1);let n=this.tm.getBuff(this.pOp1,this.F.n8*2);t.set(n,e)}else throw new Error("invalid point size")}fromRprLEM(t,e){return e=e||0,t.slice(e,e+this.F.n8*2)}toString(t,e){if(t.byteLength==this.F.n8*3){let s=this.F.toString(t.slice(0,this.F.n8),e),n=this.F.toString(t.slice(this.F.n8,this.F.n8*2),e),r=this.F.toString(t.slice(this.F.n8*2),e);return`[ ${s}, ${n}, ${r} ]`}else if(t.byteLength==this.F.n8*2){let s=this.F.toString(t.slice(0,this.F.n8),e),n=this.F.toString(t.slice(this.F.n8),e);return`[ ${s}, ${n} ]`}else throw new Error("invalid point size")}isValid(t){if(this.isZero(t))return!0;let e=this.F,s=this.toAffine(t),n=s.slice(0,this.F.n8),r=s.slice(this.F.n8,this.F.n8*2),h=e.add(e.mul(e.square(n),n),this.b),o=e.square(r);return e.eq(h,o)}fromRng(t){let e=this.F,s=[],n,r;do s[0]=e.fromRng(t),n=t.nextBool(),r=e.add(e.mul(e.square(s[0]),s[0]),this.b);while(!e.isSquare(r));s[1]=e.sqrt(r);let h=e.isNegative(s[1]);n^h&&(s[1]=e.neg(s[1]));let o=new Uint8Array(this.F.n8*2);return o.set(s[0]),o.set(s[1],this.F.n8),this.cofactor&&(o=this.timesScalar(o,this.cofactor)),o}toObject(t){if(this.isZero(t))return[this.F.toObject(this.F.zero),this.F.toObject(this.F.one),this.F.toObject(this.F.zero)];let e=this.F.toObject(t.slice(0,this.F.n8)),s=this.F.toObject(t.slice(this.F.n8,this.F.n8*2)),n;return t.byteLength==this.F.n8*3?n=this.F.toObject(t.slice(this.F.n8*2,this.F.n8*3)):n=this.F.toObject(this.F.one),[e,s,n]}fromObject(t){let e=this.F.fromObject(t[0]),s=this.F.fromObject(t[1]),n;if(t.length==3?n=this.F.fromObject(t[2]):n=this.F.one,this.F.isZero(n,this.F.one))return this.zeroAffine;if(this.F.eq(n,this.F.one)){let r=new Uint8Array(this.F.n8*2);return r.set(e),r.set(s,this.F.n8),r}else{let r=new Uint8Array(this.F.n8*3);return r.set(e),r.set(s,this.F.n8),r.set(n,this.F.n8*2),r}}e(t){return t instanceof Uint8Array?t:this.fromObject(t)}x(t){return this.toAffine(t).slice(0,this.F.n8)}y(t){return this.toAffine(t).slice(this.F.n8)}};function Jt(i){let e,s;i&&(i.onmessage=function(f){let l;if(f.data?l=f.data:l=f,l[0].cmd=="INIT")n(l[0]).then(function(){i.postMessage(l.result)});else if(l[0].cmd=="TERMINATE")i.close();else{let a=u(l);i.postMessage(a)}});async function n(f){let l=new Uint8Array(f.code),a=await WebAssembly.compile(l);s=new WebAssembly.Memory({initial:f.init,maximum:32767}),e=await WebAssembly.instantiate(a,{env:{memory:s}})}function r(f){let l=new Uint32Array(s.buffer,0,1);for(;l[0]&3;)l[0]++;let a=l[0];if(l[0]+=f,l[0]+f>s.buffer.byteLength){let m=s.buffer.byteLength/65536,p=Math.floor((l[0]+f)/65536)+1;p>32767&&(p=32767),s.grow(p-m)}return a}function h(f){let l=r(f.byteLength);return c(l,f),l}function o(f,l){let a=new Uint8Array(s.buffer);return new Uint8Array(a.buffer,a.byteOffset+f,l)}function c(f,l){new Uint8Array(s.buffer).set(new Uint8Array(l),f)}function u(f){if(f[0].cmd=="INIT")return n(f[0]);let l={vars:[],out:[]},m=new Uint32Array(s.buffer,0,1)[0];for(let g=0;g<f.length;g++)switch(f[g].cmd){case"ALLOCSET":l.vars[f[g].var]=h(f[g].buff);break;case"ALLOC":l.vars[f[g].var]=r(f[g].len);break;case"SET":c(l.vars[f[g].var],f[g].buff);break;case"CALL":{let b=[];for(let F=0;F<f[g].params.length;F++){let d=f[g].params[F];typeof d.var<"u"?b.push(l.vars[d.var]+(d.offset||0)):typeof d.val<"u"&&b.push(d.val)}e.exports[f[g].fnName](...b);break}case"GET":l.out[f[g].out]=o(l.vars[f[g].var],f[g].len).slice();break;default:throw new Error("Invalid cmd")}let p=new Uint32Array(s.buffer,0,1);return p[0]=m,l.out}return u}import ns from"https://deno.land/std@0.177.0/node/os.ts";import rs from"https://esm.sh/v122/web-worker@1.2.0/deno/web-worker.mjs";var pe=25,Xt=class{constructor(){this.promise=new Promise((t,e)=>{this.reject=e,this.resolve=t})}};function os(i){return new Promise(t=>setTimeout(t,i))}function hs(i){return __Process$.browser?globalThis.btoa(i):__Buffer$.from(i).toString("base64")}var fs=hs("("+Jt.toString()+")(self)"),ls="data:application/javascript;base64,"+fs;async function de(i,t){let e=new me;e.memory=new WebAssembly.Memory({initial:pe}),e.u8=new Uint8Array(e.memory.buffer),e.u32=new Uint32Array(e.memory.buffer);let s=await WebAssembly.compile(i.code);if(e.instance=await WebAssembly.instantiate(s,{env:{memory:e.memory}}),e.singleThread=t,e.initalPFree=e.u32[0],e.pq=i.pq,e.pr=i.pr,e.pG1gen=i.pG1gen,e.pG1zero=i.pG1zero,e.pG2gen=i.pG2gen,e.pG2zero=i.pG2zero,e.pOneT=i.pOneT,t)e.code=i.code,e.taskManager=Jt(),await e.taskManager([{cmd:"INIT",init:pe,code:e.code.slice()}]),e.concurrency=1;else{e.workers=[],e.pendingDeferreds=[],e.working=[];let r;typeof navigator=="object"&&navigator.hardwareConcurrency?r=navigator.hardwareConcurrency:r=ns.cpus().length,r==0&&(r=2),r>64&&(r=64),e.concurrency=r;for(let o=0;o<r;o++)e.workers[o]=new rs(ls),e.workers[o].addEventListener("message",n(o)),e.working[o]=!1;let h=[];for(let o=0;o<e.workers.length;o++){let c=i.code.slice();h.push(e.postAction(o,[{cmd:"INIT",init:pe,code:c}],[c.buffer]))}await Promise.all(h)}return e;function n(r){return function(h){let o;h&&h.data?o=h.data:o=h,e.working[r]=!1,e.pendingDeferreds[r].resolve(o),e.processWorks()}}}var me=class{constructor(){this.actionQueue=[],this.oldPFree=0}startSyncOp(){if(this.oldPFree!=0)throw new Error("Sync operation in progress");this.oldPFree=this.u32[0]}endSyncOp(){if(this.oldPFree==0)throw new Error("No sync operation in progress");this.u32[0]=this.oldPFree,this.oldPFree=0}postAction(t,e,s,n){if(this.working[t])throw new Error("Posting a job t a working worker");return this.working[t]=!0,this.pendingDeferreds[t]=n||new Xt,this.workers[t].postMessage(e,s),this.pendingDeferreds[t].promise}processWorks(){for(let t=0;t<this.workers.length&&this.actionQueue.length>0;t++)if(this.working[t]==!1){let e=this.actionQueue.shift();this.postAction(t,e.data,e.transfers,e.deferred)}}queueAction(t,e){let s=new Xt;if(this.singleThread){let n=this.taskManager(t);s.resolve(n)}else this.actionQueue.push({data:t,transfers:e,deferred:s}),this.processWorks();return s.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(t){let e=this.alloc(t.byteLength);return this.setBuff(e,t),e}getBuff(t,e){return this.u8.slice(t,t+e)}setBuff(t,e){this.u8.set(new Uint8Array(e),t)}alloc(t){for(;this.u32[0]&3;)this.u32[0]++;let e=this.u32[0];return this.u32[0]+=t,e}async terminate(){for(let t=0;t<this.workers.length;t++)this.workers[t].postMessage([{cmd:"TERMINATE"}]);await os(200)}};function vt(i,t){let e=i[t],s=i.Fr,n=i.tm;i[t].batchApplyKey=async function(r,h,o,c,u){c=c||"affine",u=u||"affine";let f,l,a,m,p;if(t=="G1")c=="jacobian"?(a=e.F.n8*3,f="g1m_batchApplyKey"):(a=e.F.n8*2,f="g1m_batchApplyKeyMixed"),m=e.F.n8*3,u=="jacobian"?p=e.F.n8*3:(l="g1m_batchToAffine",p=e.F.n8*2);else if(t=="G2")c=="jacobian"?(a=e.F.n8*3,f="g2m_batchApplyKey"):(a=e.F.n8*2,f="g2m_batchApplyKeyMixed"),m=e.F.n8*3,u=="jacobian"?p=e.F.n8*3:(l="g2m_batchToAffine",p=e.F.n8*2);else if(t=="Fr")f="frm_batchApplyKey",a=e.n8,m=e.n8,p=e.n8;else throw new Error("Invalid group: "+t);let g=Math.floor(r.byteLength/a),b=Math.floor(g/n.concurrency),F=[];o=s.e(o);let d=s.e(h);for(let y=0;y<n.concurrency;y++){let B;if(y<n.concurrency-1?B=b:B=g-y*b,B==0)continue;let w=[];w.push({cmd:"ALLOCSET",var:0,buff:r.slice(y*b*a,y*b*a+B*a)}),w.push({cmd:"ALLOCSET",var:1,buff:d}),w.push({cmd:"ALLOCSET",var:2,buff:o}),w.push({cmd:"ALLOC",var:3,len:B*Math.max(m,p)}),w.push({cmd:"CALL",fnName:f,params:[{var:0},{val:B},{var:1},{var:2},{var:3}]}),l&&w.push({cmd:"CALL",fnName:l,params:[{var:3},{val:B},{var:3}]}),w.push({cmd:"GET",out:0,var:3,len:B*p}),F.push(n.queueAction(w)),d=s.mul(d,s.exp(o,B))}let v=await Promise.all(F),L;r instanceof q?L=new q(g*p):L=new Uint8Array(g*p);let A=0;for(let y=0;y<v.length;y++)L.set(v[y][0],A),A+=v[y][0].byteLength;return L}}function ge(i){let t=i.tm;i.pairing=function(s,n){t.startSyncOp();let r=t.allocBuff(i.G1.toJacobian(s)),h=t.allocBuff(i.G2.toJacobian(n)),o=t.alloc(i.Gt.n8);t.instance.exports[i.name+"_pairing"](r,h,o);let c=t.getBuff(o,i.Gt.n8);return t.endSyncOp(),c},i.pairingEq=async function(){let s,n;arguments.length%2==1?(s=arguments[arguments.length-1],n=(arguments.length-1)/2):(s=i.Gt.one,n=arguments.length/2);let r=[];for(let f=0;f<n;f++){let l=[],a=i.G1.toJacobian(arguments[f*2]);l.push({cmd:"ALLOCSET",var:0,buff:a}),l.push({cmd:"ALLOC",var:1,len:i.prePSize});let m=i.G2.toJacobian(arguments[f*2+1]);l.push({cmd:"ALLOCSET",var:2,buff:m}),l.push({cmd:"ALLOC",var:3,len:i.preQSize}),l.push({cmd:"ALLOC",var:4,len:i.Gt.n8}),l.push({cmd:"CALL",fnName:i.name+"_prepareG1",params:[{var:0},{var:1}]}),l.push({cmd:"CALL",fnName:i.name+"_prepareG2",params:[{var:2},{var:3}]}),l.push({cmd:"CALL",fnName:i.name+"_millerLoop",params:[{var:1},{var:3},{var:4}]}),l.push({cmd:"GET",out:0,var:4,len:i.Gt.n8}),r.push(t.queueAction(l))}let h=await Promise.all(r);t.startSyncOp();let o=t.alloc(i.Gt.n8);t.instance.exports.ftm_one(o);for(let f=0;f<h.length;f++){let l=t.allocBuff(h[f][0]);t.instance.exports.ftm_mul(o,l,o)}t.instance.exports[i.name+"_finalExponentiation"](o,o);let c=t.allocBuff(s),u=!!t.instance.exports.ftm_eq(o,c);return t.endSyncOp(),u},i.prepareG1=function(e){this.tm.startSyncOp();let s=this.tm.allocBuff(e),n=this.tm.alloc(this.prePSize);this.tm.instance.exports[this.name+"_prepareG1"](s,n);let r=this.tm.getBuff(n,this.prePSize);return this.tm.endSyncOp(),r},i.prepareG2=function(e){this.tm.startSyncOp();let s=this.tm.allocBuff(e),n=this.tm.alloc(this.preQSize);this.tm.instance.exports[this.name+"_prepareG2"](s,n);let r=this.tm.getBuff(n,this.preQSize);return this.tm.endSyncOp(),r},i.millerLoop=function(e,s){this.tm.startSyncOp();let n=this.tm.allocBuff(e),r=this.tm.allocBuff(s),h=this.tm.alloc(this.Gt.n8);this.tm.instance.exports[this.name+"_millerLoop"](n,r,h);let o=this.tm.getBuff(h,this.Gt.n8);return this.tm.endSyncOp(),o},i.finalExponentiation=function(e){this.tm.startSyncOp();let s=this.tm.allocBuff(e),n=this.tm.alloc(this.Gt.n8);this.tm.instance.exports[this.name+"_finalExponentiation"](s,n);let r=this.tm.getBuff(n,this.Gt.n8);return this.tm.endSyncOp(),r}}var Ee=[1,1,1,1,2,3,4,5,6,7,7,8,9,10,11,12,13,13,14,15,16,16,17,17,17,17,17,17,17,17,17,17];function Kt(i,t){let e=i[t],s=e.tm;async function n(h,o,c,u,f){if(!(h instanceof Uint8Array))throw u&&u.error(`${f} _multiExpChunk buffBases is not Uint8Array`),new Error(`${f} _multiExpChunk buffBases is not Uint8Array`);if(!(o instanceof Uint8Array))throw u&&u.error(`${f} _multiExpChunk buffScalars is not Uint8Array`),new Error(`${f} _multiExpChunk buffScalars is not Uint8Array`);c=c||"affine";let l,a;if(t=="G1")c=="affine"?(a="g1m_multiexpAffine_chunk",l=e.F.n8*2):(a="g1m_multiexp_chunk",l=e.F.n8*3);else if(t=="G2")c=="affine"?(a="g2m_multiexpAffine_chunk",l=e.F.n8*2):(a="g2m_multiexp_chunk",l=e.F.n8*3);else throw new Error("Invalid group");let m=Math.floor(h.byteLength/l);if(m==0)return e.zero;let p=Math.floor(o.byteLength/m);if(p*m!=o.byteLength)throw new Error("Scalar size does not match");let g=Ee[k(m)],b=Math.floor((p*8-1)/g)+1,F=[];for(let L=0;L<b;L++){let A=[{cmd:"ALLOCSET",var:0,buff:h},{cmd:"ALLOCSET",var:1,buff:o},{cmd:"ALLOC",var:2,len:e.F.n8*3},{cmd:"CALL",fnName:a,params:[{var:0},{var:1},{val:p},{val:m},{val:L*g},{val:Math.min(p*8-L*g,g)},{var:2}]},{cmd:"GET",out:0,var:2,len:e.F.n8*3}];F.push(e.tm.queueAction(A))}let d=await Promise.all(F),v=e.zero;for(let L=d.length-1;L>=0;L--){if(!e.isZero(v))for(let A=0;A<g;A++)v=e.double(v);v=e.add(v,d[L][0])}return v}async function r(h,o,c,u,f){let m;if(t=="G1")c=="affine"?m=e.F.n8*2:m=e.F.n8*3;else if(t=="G2")c=="affine"?m=e.F.n8*2:m=e.F.n8*3;else throw new Error("Invalid group");let p=Math.floor(h.byteLength/m),g=Math.floor(o.byteLength/p);if(g*p!=o.byteLength)throw new Error("Scalar size does not match");let b=Ee[k(p)],F=Math.floor((g*8-1)/b)+1,d;d=Math.floor(p/(s.concurrency/F)),d>4194304&&(d=4194304),d<1024&&(d=1024);let v=[];for(let y=0;y<p;y+=d){u&&u.debug(`Multiexp start: ${f}: ${y}/${p}`);let B=Math.min(p-y,d),w=h.slice(y*m,(y+B)*m),_=o.slice(y*g,(y+B)*g);v.push(n(w,_,c,u,f).then(S=>(u&&u.debug(`Multiexp end: ${f}: ${y}/${p}`),S)))}let L=await Promise.all(v),A=e.zero;for(let y=L.length-1;y>=0;y--)A=e.add(A,L[y]);return A}e.multiExp=async function(o,c,u,f){return await r(o,c,"jacobian",u,f)},e.multiExpAffine=async function(o,c,u,f){return await r(o,c,"affine",u,f)}}function Ot(i,t){let e=i[t],s=i.Fr,n=e.tm;async function r(u,f,l,a,m,p){l=l||"affine",a=a||"affine";let g=14,b,F,d,v,L,A,y,B;t=="G1"?(l=="affine"?(b=e.F.n8*2,v="g1m_batchToJacobian"):b=e.F.n8*3,F=e.F.n8*3,f&&(B="g1m_fftFinal"),y="g1m_fftJoin",A="g1m_fftMix",a=="affine"?(d=e.F.n8*2,L="g1m_batchToAffine"):d=e.F.n8*3):t=="G2"?(l=="affine"?(b=e.F.n8*2,v="g2m_batchToJacobian"):b=e.F.n8*3,F=e.F.n8*3,f&&(B="g2m_fftFinal"),y="g2m_fftJoin",A="g2m_fftMix",a=="affine"?(d=e.F.n8*2,L="g2m_batchToAffine"):d=e.F.n8*3):t=="Fr"&&(b=e.n8,F=e.n8,d=e.n8,f&&(B="frm_fftFinal"),A="frm_fftMix",y="frm_fftJoin");let w=!1;Array.isArray(u)?(u=St(u,b),w=!0):u=u.slice(0,u.byteLength);let _=u.byteLength/b,S=k(_);if(1<<S!=_)throw new Error("fft must be multiple of 2");if(S==s.s+1){let E;return f?E=await o(u,l,a,m,p):E=await h(u,l,a,m,p),w?at(E,d):E}let z;f&&(z=s.inv(s.e(_)));let Z;ae(u,b);let R,x=Math.min(1<<g,_),G=_/x;for(;G<n.concurrency&&x>=16;)G*=2,x/=2;let $=k(x),C=[];for(let E=0;E<G;E++){m&&m.debug(`${p}: fft ${S} mix start: ${E}/${G}`);let O=[];O.push({cmd:"ALLOC",var:0,len:F*x});let I=u.slice(x*E*b,x*(E+1)*b);O.push({cmd:"SET",var:0,buff:I}),v&&O.push({cmd:"CALL",fnName:v,params:[{var:0},{val:x},{var:0}]});for(let Q=1;Q<=$;Q++)O.push({cmd:"CALL",fnName:A,params:[{var:0},{val:x},{val:Q}]});$==S?(B&&(O.push({cmd:"ALLOCSET",var:1,buff:z}),O.push({cmd:"CALL",fnName:B,params:[{var:0},{val:x},{var:1}]})),L&&O.push({cmd:"CALL",fnName:L,params:[{var:0},{val:x},{var:0}]}),O.push({cmd:"GET",out:0,var:0,len:x*d})):O.push({cmd:"GET",out:0,var:0,len:F*x}),C.push(n.queueAction(O).then(Q=>(m&&m.debug(`${p}: fft ${S} mix end: ${E}/${G}`),Q)))}R=await Promise.all(C);for(let E=0;E<G;E++)R[E]=R[E][0];for(let E=$+1;E<=S;E++){m&&m.debug(`${p}: fft ${S} join: ${E}/${S}`);let O=1<<S-E,I=G/O,Q=[];for(let j=0;j<O;j++)for(let J=0;J<I/2;J++){let Ht=s.exp(s.w[E],J*x),Dt=s.w[E],Rt=j*I+J,Le=j*I+J+I/2,N=[];N.push({cmd:"ALLOCSET",var:0,buff:R[Rt]}),N.push({cmd:"ALLOCSET",var:1,buff:R[Le]}),N.push({cmd:"ALLOCSET",var:2,buff:Ht}),N.push({cmd:"ALLOCSET",var:3,buff:Dt}),N.push({cmd:"CALL",fnName:y,params:[{var:0},{var:1},{val:x},{var:2},{var:3}]}),E==S?(B&&(N.push({cmd:"ALLOCSET",var:4,buff:z}),N.push({cmd:"CALL",fnName:B,params:[{var:0},{val:x},{var:4}]}),N.push({cmd:"CALL",fnName:B,params:[{var:1},{val:x},{var:4}]})),L&&(N.push({cmd:"CALL",fnName:L,params:[{var:0},{val:x},{var:0}]}),N.push({cmd:"CALL",fnName:L,params:[{var:1},{val:x},{var:1}]})),N.push({cmd:"GET",out:0,var:0,len:x*d}),N.push({cmd:"GET",out:1,var:1,len:x*d})):(N.push({cmd:"GET",out:0,var:0,len:x*F}),N.push({cmd:"GET",out:1,var:1,len:x*F})),Q.push(n.queueAction(N).then(xe=>(m&&m.debug(`${p}: fft ${S} join ${E}/${S} ${j+1}/${O} ${J}/${I/2}`),xe)))}let Qt=await Promise.all(Q);for(let j=0;j<O;j++)for(let J=0;J<I/2;J++){let Ht=j*I+J,Dt=j*I+J+I/2,Rt=Qt.shift();R[Ht]=Rt[0],R[Dt]=Rt[1]}}if(u instanceof q?Z=new q(_*d):Z=new Uint8Array(_*d),f){Z.set(R[0].slice((x-1)*d));let E=d;for(let O=G-1;O>0;O--)Z.set(R[O],E),E+=x*d,delete R[O];Z.set(R[0].slice(0,(x-1)*d),E),delete R[0]}else for(let E=0;E<G;E++)Z.set(R[E],x*d*E),delete R[E];return w?at(Z,d):Z}async function h(u,f,l,a,m){let p,g;p=u.slice(0,u.byteLength/2),g=u.slice(u.byteLength/2,u.byteLength);let b=[];[p,g]=await c(p,g,"fftJoinExt",s.one,s.shift,f,"jacobian",a,m),b.push(r(p,!1,"jacobian",l,a,m)),b.push(r(g,!1,"jacobian",l,a,m));let F=await Promise.all(b),d;return F[0].byteLength>1<<28?d=new q(F[0].byteLength*2):d=new Uint8Array(F[0].byteLength*2),d.set(F[0]),d.set(F[1],F[0].byteLength),d}async function o(u,f,l,a,m){let p,g;p=u.slice(0,u.byteLength/2),g=u.slice(u.byteLength/2,u.byteLength);let b=[];b.push(r(p,!0,f,"jacobian",a,m)),b.push(r(g,!0,f,"jacobian",a,m)),[p,g]=await Promise.all(b);let F=await c(p,g,"fftJoinExtInv",s.one,s.shiftInv,"jacobian",l,a,m),d;return F[0].byteLength>1<<28?d=new q(F[0].byteLength*2):d=new Uint8Array(F[0].byteLength*2),d.set(F[0]),d.set(F[1],F[0].byteLength),d}async function c(u,f,l,a,m,p,g,b,F){let L,A,y,B,w,_;if(t=="G1")p=="affine"?(w=e.F.n8*2,A="g1m_batchToJacobian"):w=e.F.n8*3,_=e.F.n8*3,L="g1m_"+l,g=="affine"?(y="g1m_batchToAffine",B=e.F.n8*2):B=e.F.n8*3;else if(t=="G2")p=="affine"?(w=e.F.n8*2,A="g2m_batchToJacobian"):w=e.F.n8*3,L="g2m_"+l,_=e.F.n8*3,g=="affine"?(y="g2m_batchToAffine",B=e.F.n8*2):B=e.F.n8*3;else if(t=="Fr")w=s.n8,B=s.n8,_=s.n8,L="frm_"+l;else throw new Error("Invalid group");if(u.byteLength!=f.byteLength)throw new Error("Invalid buffer size");let S=Math.floor(u.byteLength/w);if(S!=1<<k(S))throw new Error("Invalid number of points");let z=Math.floor(S/n.concurrency);z<16&&(z=16),z>65536&&(z=65536);let Z=[];for(let C=0;C<S;C+=z){b&&b.debug(`${F}: fftJoinExt Start: ${C}/${S}`);let E=Math.min(S-C,z),O=s.mul(a,s.exp(m,C)),I=[],Q=u.slice(C*w,(C+E)*w),Qt=f.slice(C*w,(C+E)*w);I.push({cmd:"ALLOC",var:0,len:_*E}),I.push({cmd:"SET",var:0,buff:Q}),I.push({cmd:"ALLOC",var:1,len:_*E}),I.push({cmd:"SET",var:1,buff:Qt}),I.push({cmd:"ALLOCSET",var:2,buff:O}),I.push({cmd:"ALLOCSET",var:3,buff:m}),A&&(I.push({cmd:"CALL",fnName:A,params:[{var:0},{val:E},{var:0}]}),I.push({cmd:"CALL",fnName:A,params:[{var:1},{val:E},{var:1}]})),I.push({cmd:"CALL",fnName:L,params:[{var:0},{var:1},{val:E},{var:2},{var:3},{val:s.s}]}),y&&(I.push({cmd:"CALL",fnName:y,params:[{var:0},{val:E},{var:0}]}),I.push({cmd:"CALL",fnName:y,params:[{var:1},{val:E},{var:1}]})),I.push({cmd:"GET",out:0,var:0,len:E*B}),I.push({cmd:"GET",out:1,var:1,len:E*B}),Z.push(n.queueAction(I).then(j=>(b&&b.debug(`${F}: fftJoinExt End: ${C}/${S}`),j)))}let R=await Promise.all(Z),x,G;S*B>1<<28?(x=new q(S*B),G=new q(S*B)):(x=new Uint8Array(S*B),G=new Uint8Array(S*B));let $=0;for(let C=0;C<R.length;C++)x.set(R[C][0],$),G.set(R[C][1],$),$+=R[C][0].byteLength;return[x,G]}e.fft=async function(u,f,l,a,m){return await r(u,!1,f,l,a,m)},e.ifft=async function(u,f,l,a,m){return await r(u,!0,f,l,a,m)},e.lagrangeEvaluations=async function(u,f,l,a,m){f=f||"affine",l=l||"affine";let p;if(t=="G1")f=="affine"?p=e.F.n8*2:p=e.F.n8*3;else if(t=="G2")f=="affine"?p=e.F.n8*2:p=e.F.n8*3;else if(t=="Fr")p=s.n8;else throw new Error("Invalid group");let g=u.byteLength/p,b=k(g);if(2**b*p!=u.byteLength)throw a&&a.error("lagrangeEvaluations iinvalid input size"),new Error("lagrangeEvaluations invalid Input size");if(b<=s.s)return await e.ifft(u,f,l,a,m);if(b>s.s+1)throw a&&a.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let F=u.slice(0,u.byteLength/2),d=u.slice(u.byteLength/2,u.byteLength),v=s.exp(s.shift,g/2),L=s.inv(s.sub(s.one,v));[F,d]=await c(F,d,"prepareLagrangeEvaluation",L,s.shiftInv,f,"jacobian",a,m+" prep");let A=[];A.push(r(F,!0,"jacobian",l,a,m+" t0")),A.push(r(d,!0,"jacobian",l,a,m+" t1")),[F,d]=await Promise.all(A);let y;return F.byteLength>1<<28?y=new q(F.byteLength*2):y=new Uint8Array(F.byteLength*2),y.set(F),y.set(d,F.byteLength),y},e.fftMix=async function(f){let l=e.F.n8*3,a,m;if(t=="G1")a="g1m_fftMix",m="g1m_fftJoin";else if(t=="G2")a="g2m_fftMix",m="g2m_fftJoin";else if(t=="Fr")a="frm_fftMix",m="frm_fftJoin";else throw new Error("Invalid group");let p=Math.floor(f.byteLength/l),g=k(p),b=1<<k(n.concurrency);p<=b*2&&(b=1);let F=p/b,d=k(F),v=[];for(let w=0;w<b;w++){let _=[],S=f.slice(w*F*l,(w+1)*F*l);_.push({cmd:"ALLOCSET",var:0,buff:S});for(let z=1;z<=d;z++)_.push({cmd:"CALL",fnName:a,params:[{var:0},{val:F},{val:z}]});_.push({cmd:"GET",out:0,var:0,len:F*l}),v.push(n.queueAction(_))}let L=await Promise.all(v),A=[];for(let w=0;w<L.length;w++)A[w]=L[w][0];for(let w=d+1;w<=g;w++){let _=1<<g-w,S=b/_,z=[];for(let R=0;R<_;R++)for(let x=0;x<S/2;x++){let G=s.exp(s.w[w],x*F),$=s.w[w],C=R*S+x,E=R*S+x+S/2,O=[];O.push({cmd:"ALLOCSET",var:0,buff:A[C]}),O.push({cmd:"ALLOCSET",var:1,buff:A[E]}),O.push({cmd:"ALLOCSET",var:2,buff:G}),O.push({cmd:"ALLOCSET",var:3,buff:$}),O.push({cmd:"CALL",fnName:m,params:[{var:0},{var:1},{val:F},{var:2},{var:3}]}),O.push({cmd:"GET",out:0,var:0,len:F*l}),O.push({cmd:"GET",out:1,var:1,len:F*l}),z.push(n.queueAction(O))}let Z=await Promise.all(z);for(let R=0;R<_;R++)for(let x=0;x<S/2;x++){let G=R*S+x,$=R*S+x+S/2,C=Z.shift();A[G]=C[0],A[$]=C[1]}}let y;f instanceof q?y=new q(p*l):y=new Uint8Array(p*l);let B=0;for(let w=0;w<b;w++)y.set(A[w],B),B+=A[w].byteLength;return y},e.fftJoin=async function(f,l,a,m){let p=e.F.n8*3,g;if(t=="G1")g="g1m_fftJoin";else if(t=="G2")g="g2m_fftJoin";else if(t=="Fr")g="frm_fftJoin";else throw new Error("Invalid group");if(f.byteLength!=l.byteLength)throw new Error("Invalid buffer size");let b=Math.floor(f.byteLength/p);if(b!=1<<k(b))throw new Error("Invalid number of points");let F=1<<k(n.concurrency);b<=F*2&&(F=1);let d=b/F,v=[];for(let w=0;w<F;w++){let _=[],S=s.mul(a,s.exp(m,w*d)),z=f.slice(w*d*p,(w+1)*d*p),Z=l.slice(w*d*p,(w+1)*d*p);_.push({cmd:"ALLOCSET",var:0,buff:z}),_.push({cmd:"ALLOCSET",var:1,buff:Z}),_.push({cmd:"ALLOCSET",var:2,buff:S}),_.push({cmd:"ALLOCSET",var:3,buff:m}),_.push({cmd:"CALL",fnName:g,params:[{var:0},{var:1},{val:d},{var:2},{var:3}]}),_.push({cmd:"GET",out:0,var:0,len:d*p}),_.push({cmd:"GET",out:1,var:1,len:d*p}),v.push(n.queueAction(_))}let L=await Promise.all(v),A,y;f instanceof q?(A=new q(b*p),y=new q(b*p)):(A=new Uint8Array(b*p),y=new Uint8Array(b*p));let B=0;for(let w=0;w<L.length;w++)A.set(L[w][0],B),y.set(L[w][1],B),B+=L[w][0].byteLength;return[A,y]},e.fftFinal=async function(f,l){let a=e.F.n8*3,m=e.F.n8*2,p,g;if(t=="G1")p="g1m_fftFinal",g="g1m_batchToAffine";else if(t=="G2")p="g2m_fftFinal",g="g2m_batchToAffine";else throw new Error("Invalid group");let b=Math.floor(f.byteLength/a);if(b!=1<<k(b))throw new Error("Invalid number of points");let F=Math.floor(b/n.concurrency),d=[];for(let y=0;y<n.concurrency;y++){let B;if(y<n.concurrency-1?B=F:B=b-y*F,B==0)continue;let w=[],_=f.slice(y*F*a,(y*F+B)*a);w.push({cmd:"ALLOCSET",var:0,buff:_}),w.push({cmd:"ALLOCSET",var:1,buff:l}),w.push({cmd:"CALL",fnName:p,params:[{var:0},{val:B},{var:1}]}),w.push({cmd:"CALL",fnName:g,params:[{var:0},{val:B},{var:0}]}),w.push({cmd:"GET",out:0,var:0,len:B*m}),d.push(n.queueAction(w))}let v=await Promise.all(d),L;f instanceof q?L=new q(b*m):L=new Uint8Array(b*m);let A=0;for(let y=v.length-1;y>=0;y--)L.set(v[y][0],A),A+=v[y][0].byteLength;return L}}async function qt(i){let t=await de(i.wasm,i.singleThread),e={};return e.q=M(i.wasm.q.toString()),e.r=M(i.wasm.r.toString()),e.name=i.name,e.tm=t,e.prePSize=i.wasm.prePSize,e.preQSize=i.wasm.preQSize,e.Fr=new pt(t,"frm",i.n8r,i.r),e.F1=new pt(t,"f1m",i.n8q,i.q),e.F2=new mt(t,"f2m",e.F1),e.G1=new dt(t,"g1m",e.F1,i.wasm.pG1gen,i.wasm.pG1b,i.cofactorG1),e.G2=new dt(t,"g2m",e.F2,i.wasm.pG2gen,i.wasm.pG2b,i.cofactorG2),e.F6=new _t(t,"f6m",e.F2),e.F12=new mt(t,"ftm",e.F6),e.Gt=e.F12,vt(e,"G1"),vt(e,"G2"),vt(e,"Fr"),Kt(e,"G1"),Kt(e,"G2"),Ot(e,"G1"),Ot(e,"G2"),Ot(e,"Fr"),ge(e),e.array2buffer=function(s,n){let r=new Uint8Array(n*s.length);for(let h=0;h<s.length;h++)r.set(s[h],h*n);return r},e.buffer2array=function(s,n){let r=s.byteLength/n,h=new Array(r);for(let o=0;o<r;o++)h[o]=s.slice(o*n,o*n+n);return h},e}import{ModuleBuilder as cs}from"https://esm.sh/v122/wasmbuilder@0.0.16/deno/wasmbuilder.mjs";globalThis.curve_bn128=null;async function gt(i,t){i=1;let e=new cs;e.setMemory(25),us(e),t&&t(e);let s={};if(s.code=e.build(),s.pq=e.modules.f1m.pq,s.pr=e.modules.frm.pq,s.pG1gen=e.modules.bn128.pG1gen,s.pG1zero=e.modules.bn128.pG1zero,s.pG1b=e.modules.bn128.pG1b,s.pG2gen=e.modules.bn128.pG2gen,s.pG2zero=e.modules.bn128.pG2zero,s.pG2b=e.modules.bn128.pG2b,s.pOneT=e.modules.bn128.pOneT,s.prePSize=e.modules.bn128.prePSize,s.preQSize=e.modules.bn128.preQSize,s.n8q=32,s.n8r=32,s.q=e.modules.bn128.q,s.r=e.modules.bn128.r,!i&&globalThis.curve_bn128)return globalThis.curve_bn128;let n={name:"bn128",wasm:s,q:M("21888242871839275222246405745257275088696311157297823662689037894645226208583"),r:M("21888242871839275222246405745257275088548364400416034343698204186575808495617"),n8q:32,n8r:32,cofactorG2:M("30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d",16),singleThread:!!i},r=await qt(n);return r.terminate=async function(){n.singleThread||(globalThis.curve_bn128=null,await this.tm.terminate())},i||(globalThis.curve_bn128=r),r}import{buildBls12381 as as}from"https://esm.sh/v122/wasmcurves@0.2.0/deno/wasmcurves.mjs";import{ModuleBuilder as ps}from"https://esm.sh/v122/wasmbuilder@0.0.16/deno/wasmbuilder.mjs";globalThis.curve_bls12381=null;async function Ft(i,t){let e=new ps;e.setMemory(25),as(e),t&&t(e);let s={};if(s.code=e.build(),s.pq=e.modules.f1m.pq,s.pr=e.modules.frm.pq,s.pG1gen=e.modules.bls12381.pG1gen,s.pG1zero=e.modules.bls12381.pG1zero,s.pG1b=e.modules.bls12381.pG1b,s.pG2gen=e.modules.bls12381.pG2gen,s.pG2zero=e.modules.bls12381.pG2zero,s.pG2b=e.modules.bls12381.pG2b,s.pOneT=e.modules.bls12381.pOneT,s.prePSize=e.modules.bls12381.prePSize,s.preQSize=e.modules.bls12381.preQSize,s.n8q=48,s.n8r=32,s.q=e.modules.bls12381.q,s.r=e.modules.bls12381.r,!i&&globalThis.curve_bls12381)return globalThis.curve_bls12381;let n={name:"bls12381",wasm:s,q:M("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab",16),r:M("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001",16),n8q:48,n8r:32,cofactorG1:M("0x396c8c005555e1568c00aaab0000aaab",16),cofactorG2:M("0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5",16),singleThread:!!i},r=await qt(n);return r.terminate=async function(){n.singleThread||(globalThis.curve_bls12381=null,await this.tm.terminate())},i||(globalThis.curve_bls12381=r),r}var ms=M("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001",16),ds=M("21888242871839275222246405745257275088548364400416034343698204186575808495617"),gs=M("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab",16),Fs=M("21888242871839275222246405745257275088696311157297823662689037894645226208583");async function ws(i,t,e){let s;if(P(i,ds))s=await gt(t,e);else if(P(i,ms))s=await Ft(t,e);else throw new Error(`Curve not supported: ${lt(i)}`);return s}async function bs(i,t,e){let s;if(P(i,Fs))s=await gt(t,e);else if(P(i,gs))s=await Ft(t,e);else throw new Error(`Curve not supported: ${lt(i,16)}`);return s}async function ys(i,t,e){let s,n=r(i);if(["BN128","BN254","ALTBN128"].indexOf(n)>=0)s=await gt(t,e);else if(["BLS12381"].indexOf(n)>=0)s=await Ft(t,e);else throw new Error(`Curve not supported: ${i}`);return s;function r(h){return h.toUpperCase().match(/[A-Za-z0-9]+/g).join("")}}var qi=U,Ri=$t;export{q as BigBuffer,ut as ChaCha,Tt as EC,xt as F1Field,Nt as F2Field,Pt as F3Field,zt as PolField,qi as Scalar,xt as ZqField,Ft as buildBls12381,gt as buildBn128,ys as getCurveFromName,bs as getCurveFromQ,ws as getCurveFromR,Ri as utils};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment