Last active
May 20, 2023 07:32
-
-
Save EtaoinWu/27096a376a78e0427eb860c08ca85759 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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