mirror of https://github.com/vladmandic/human
5156 lines
1.3 MiB
5156 lines
1.3 MiB
|
|
/*
|
|
Human library
|
|
homepage: <https://github.com/vladmandic/human>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
var M8=Object.defineProperty;var xr=(e,t)=>{for(var n in t)M8(e,n,{get:t[n],enumerable:!0})};var e5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},ar=(e,t,n)=>(e5(e,t,"read from private field"),n?n.call(e):t.get(e)),hs=(e,t,n,r)=>(e5(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);function Ee(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}var et=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function no(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,r)=>(Object.keys(r||{}).forEach(a=>{let s=n[a],i=r[a];Array.isArray(s)&&Array.isArray(i)?n[a]=s.concat(...i):t(s)&&t(i)?n[a]=no(s,i):n[a]=i}),n),{})}function t5(){let e,t;if(typeof navigator!="undefined"){let n=navigator.userAgent.match(/\(([^()]+)\)/g);n&&n[0]&&(e=n[0].match(/\(([^()]+)\)/g)[0].replace(/\(|\)/g,""),t=navigator.userAgent.replace(n[0],""),e[1]&&(t=t.replace(n[1],"")),t=t.replace(/ /g," "))}else typeof process!="undefined"&&(e=`${process.platform} ${process.arch}`,t=`NodeJS ${process.version}`);return{platform:e,agent:t}}var Eh={};xr(Eh,{Abs:()=>io,Acos:()=>oo,Acosh:()=>lo,AdadeltaOptimizer:()=>tp,AdagradOptimizer:()=>np,AdamOptimizer:()=>rp,AdamaxOptimizer:()=>ap,Add:()=>Ca,AddN:()=>fs,All:()=>Dh,Any:()=>Oh,ArgMax:()=>ms,ArgMin:()=>bc,Asin:()=>co,Asinh:()=>uo,Atan:()=>ho,Atan2:()=>fo,Atanh:()=>po,AvgPool:()=>As,AvgPool3D:()=>_c,AvgPool3DGrad:()=>Ph,AvgPoolGrad:()=>zh,BackendWasm:()=>j3,BatchMatMul:()=>ys,BatchToSpaceND:()=>vc,Bincount:()=>Lh,BroadcastTo:()=>g5,Callback:()=>Dv,CallbackList:()=>F7,Cast:()=>gs,Ceil:()=>xs,ClipByValue:()=>Ra,Complex:()=>Wh,ComplexAbs:()=>kc,Concat:()=>mo,Conv2D:()=>ws,Conv2DBackpropFilter:()=>Bh,Conv2DBackpropInput:()=>bs,Conv3D:()=>Ic,Conv3DBackpropFilterV2:()=>Vh,Conv3DBackpropInputV2:()=>Uh,Cos:()=>_s,Cosh:()=>Ao,CropAndResize:()=>yo,Cumsum:()=>vs,CustomCallback:()=>D7,DataStorage:()=>Rh,DenseBincount:()=>jh,DepthToSpace:()=>go,DepthwiseConv2dNative:()=>ks,DepthwiseConv2dNativeBackpropFilter:()=>Hh,DepthwiseConv2dNativeBackpropInput:()=>Gh,Diag:()=>qh,Dilation2D:()=>Sc,Dilation2DBackpropFilter:()=>Kh,Dilation2DBackpropInput:()=>Xh,ENV:()=>wr,EarlyStopping:()=>zv,Elu:()=>xo,EluGrad:()=>Zh,Environment:()=>A5,Equal:()=>bo,Erf:()=>wo,Exp:()=>Ss,ExpandDims:()=>_o,Expm1:()=>vo,FFT:()=>Yh,Fill:()=>Nc,FlipLeftRight:()=>ko,Floor:()=>Ns,FloorDiv:()=>Ts,FromPixels:()=>dd,FusedBatchNorm:()=>Es,FusedConv2D:()=>oi,FusedDepthwiseConv2D:()=>li,GPGPUContext:()=>bp,GatherNd:()=>So,GatherV2:()=>Io,GraphModel:()=>p6,Greater:()=>No,GreaterEqual:()=>Cs,History:()=>$7,IFFT:()=>Jh,Identity:()=>Rs,Imag:()=>Qh,InputSpec:()=>Zt,IsFinite:()=>To,IsInf:()=>Eo,IsNan:()=>Co,KernelBackend:()=>gc,LRN:()=>Cc,LRNGrad:()=>td,LayerVariable:()=>T7,LayersModel:()=>Aa,LeakyRelu:()=>Ms,Less:()=>Ro,LessEqual:()=>Mo,LinSpace:()=>ed,Log:()=>Fs,Log1p:()=>Fo,LogSoftmax:()=>x5,LogicalAnd:()=>$o,LogicalNot:()=>Tc,LogicalOr:()=>Ec,MathBackendCPU:()=>lp,MathBackendWebGL:()=>Wl,Max:()=>$s,MaxPool:()=>Os,MaxPool3D:()=>Rc,MaxPool3DGrad:()=>rd,MaxPoolGrad:()=>nd,MaxPoolWithArgmax:()=>ad,Maximum:()=>Ds,Mean:()=>zs,Min:()=>Ps,Minimum:()=>Ls,MirrorPad:()=>Mc,Mod:()=>Do,MomentumOptimizer:()=>sp,Multinomial:()=>sd,Multiply:()=>Ws,Neg:()=>Oo,NonMaxSuppressionV3:()=>Po,NonMaxSuppressionV4:()=>Lo,NonMaxSuppressionV5:()=>Wo,NotEqual:()=>zo,OP_SCOPE_SUFFIX:()=>C5,OneHot:()=>Bs,OnesLike:()=>Bo,Optimizer:()=>da,Pack:()=>Vo,PadV2:()=>Vs,Pool:()=>Fk,Pow:()=>Us,Prelu:()=>js,Prod:()=>Uo,RMSPropOptimizer:()=>ip,RNN:()=>Zr,Range:()=>Fc,Rank:()=>Ef,Real:()=>id,RealDiv:()=>Is,Reciprocal:()=>jo,Reduction:()=>fn,Relu:()=>Hs,Relu6:()=>qs,Reshape:()=>Ho,ResizeBilinear:()=>Gs,ResizeBilinearGrad:()=>ld,ResizeNearestNeighbor:()=>$c,ResizeNearestNeighborGrad:()=>od,Reverse:()=>Xs,RotateWithOffset:()=>sl,Round:()=>Ks,Rsqrt:()=>Zs,SGDOptimizer:()=>du,ScatterNd:()=>Go,Select:()=>qo,Selu:()=>Xo,Sequential:()=>Zl,Sigmoid:()=>Js,Sign:()=>Yo,Sin:()=>Ys,Sinh:()=>Zo,Slice:()=>Ko,Softmax:()=>ti,Softplus:()=>Jo,SpaceToBatchND:()=>Dc,SparseToDense:()=>cd,SplitV:()=>Qo,Sqrt:()=>Qs,Square:()=>Oc,SquaredDifference:()=>ni,Step:()=>Fa,StridedSlice:()=>el,Sub:()=>ri,Sum:()=>ei,SymbolicTensor:()=>Er,Tan:()=>tl,Tanh:()=>ai,Tensor:()=>He,TensorBuffer:()=>Pt,Tile:()=>Ma,TopK:()=>nl,Transform:()=>ud,Transpose:()=>si,Unique:()=>hd,Unpack:()=>rl,UnsortedSegmentSum:()=>zc,Variable:()=>jc,ZerosLike:()=>al,_FusedMatMul:()=>ii,abs:()=>Lt,acos:()=>tm,acosh:()=>nm,add:()=>ie,addN:()=>Pa,all:()=>kd,any:()=>Kc,argMax:()=>fi,argMin:()=>rm,asin:()=>am,asinh:()=>sm,atan:()=>im,atan2:()=>om,atanh:()=>lm,avgPool:()=>Yc,avgPool3d:()=>hm,backend:()=>hx,backend_util:()=>R,basicLSTMCell:()=>hS,batchNorm:()=>Ai,batchNorm2d:()=>mx,batchNorm3d:()=>Ax,batchNorm4d:()=>yx,batchToSpaceND:()=>Jc,bincount:()=>gx,booleanMaskAsync:()=>AE,broadcastTo:()=>Qc,browser:()=>pl,buffer:()=>Ue,callbacks:()=>One,cast:()=>we,ceil:()=>dm,clipByValue:()=>In,clone:()=>zr,complex:()=>$a,concat:()=>it,concat1d:()=>xx,concat2d:()=>gl,concat3d:()=>wx,concat4d:()=>bx,constraints:()=>t7,conv1d:()=>Sd,conv2d:()=>la,conv2dTranspose:()=>Nd,conv3d:()=>fm,conv3dTranspose:()=>FS,copyRegisteredKernels:()=>Ok,cos:()=>eu,cosh:()=>Td,cosineWindow:()=>Bm,cumsum:()=>Ed,customGrad:()=>Wr,data:()=>f6,denseBincount:()=>vx,deprecationWarn:()=>Qf,depthToSpace:()=>mm,depthwiseConv2d:()=>xl,deregisterOp:()=>Pne,device_util:()=>Gc,diag:()=>BS,dilation2d:()=>Am,disableDeprecationWarnings:()=>II,dispose:()=>Ie,disposeVariables:()=>SI,div:()=>ge,divNoNan:()=>ym,dot:()=>kx,dropout:()=>Hx,elu:()=>wl,enableDebugMode:()=>kI,enableProdMode:()=>vI,enclosingPowerOfTwo:()=>Gx,engine:()=>Pr,env:()=>J,equal:()=>Wa,erf:()=>gm,exp:()=>Yn,expandDims:()=>tn,expm1:()=>xm,eye:()=>wm,fft:()=>uu,fill:()=>tu,findBackend:()=>em,findBackendFactory:()=>MI,floor:()=>bl,floorDiv:()=>vd,forceHalfFloat:()=>r_,fused:()=>ja,gather:()=>yi,gatherND:()=>jx,gather_util:()=>Gf,getBackend:()=>CI,getGradient:()=>Sf,getKernel:()=>pd,getKernelsForBackend:()=>ol,gpgpu_util:()=>Nb,grad:()=>AN,grads:()=>yN,greater:()=>lr,greaterEqual:()=>Va,ifft:()=>Sl,imag:()=>Cd,image:()=>We,inTopKAsync:()=>NE,initializers:()=>l7,input:()=>b7,io:()=>kn,irfft:()=>Gd,isFinite:()=>Ix,isInf:()=>Sx,isNaN:()=>Nx,keep:()=>qt,kernel_impls:()=>jr,layers:()=>w7,leakyRelu:()=>nu,less:()=>Rd,lessEqual:()=>gi,linalg:()=>aw,linspace:()=>Tx,loadGraphModel:()=>pt,loadLayersModel:()=>nne,localResponseNormalization:()=>bm,log:()=>zn,log1p:()=>Md,logSigmoid:()=>Cx,logSoftmax:()=>$d,logSumExp:()=>km,logicalAnd:()=>cr,logicalNot:()=>ru,logicalOr:()=>Dd,logicalXor:()=>$x,losses:()=>jC,matMul:()=>Ke,math:()=>G5,max:()=>Nn,maxPool:()=>au,maxPool3d:()=>Im,maxPoolWithArgmax:()=>Dx,maximum:()=>Br,mean:()=>Nt,memory:()=>_d,metrics:()=>Mv,min:()=>vl,minimum:()=>kl,mirrorPad:()=>Sm,mod:()=>Nm,model:()=>ene,models:()=>Fv,moments:()=>Od,movingAverage:()=>xE,mul:()=>O,multiRNNCell:()=>GN,multinomial:()=>Ox,neg:()=>St,nextFrame:()=>op,norm:()=>Zd,notEqual:()=>wi,oneHot:()=>dl,ones:()=>Vr,onesLike:()=>Pn,op:()=>D,outerProduct:()=>YN,pad:()=>ca,pad1d:()=>eT,pad2d:()=>nT,pad3d:()=>aT,pad4d:()=>iT,pool:()=>zx,pow:()=>ua,prelu:()=>iu,print:()=>W5,prod:()=>zd,profile:()=>cn,rand:()=>mT,randomGamma:()=>xT,randomNormal:()=>Px,randomUniform:()=>Il,range:()=>Pd,ready:()=>EI,real:()=>ou,reciprocal:()=>Cm,registerBackend:()=>ml,registerCallbackConstructor:()=>rne,registerGradient:()=>w5,registerKernel:()=>ci,registerOp:()=>zne,regularizers:()=>$v,relu:()=>Ur,relu6:()=>Ld,removeBackend:()=>RI,reshape:()=>j,reverse:()=>Ln,reverse1d:()=>TT,reverse2d:()=>CT,reverse3d:()=>MT,reverse4d:()=>$T,rfft:()=>hu,round:()=>Rm,rsqrt:()=>Wd,scalar:()=>be,scatterND:()=>Ux,scatter_util:()=>qf,selu:()=>Bd,separableConv2d:()=>Mm,sequential:()=>tne,serialization:()=>ae,setBackend:()=>TI,setPlatform:()=>FI,setWasmPath:()=>YZ,setWasmPaths:()=>JZ,setWebGLContext:()=>yp,setdiff1dAsync:()=>Lx,shared:()=>Hm,sigmoid:()=>On,sign:()=>Fm,signal:()=>UC,sin:()=>Vd,sinh:()=>Ud,slice:()=>Fe,slice1d:()=>jd,slice2d:()=>$m,slice3d:()=>Hd,slice4d:()=>lu,slice_util:()=>dn,softmax:()=>cu,softplus:()=>_l,spaceToBatchND:()=>su,sparseToDense:()=>Wm,spectral:()=>VC,split:()=>Bt,sqrt:()=>nn,square:()=>ct,squaredDifference:()=>qd,squeeze:()=>Ua,stack:()=>pn,step:()=>Nl,stridedSlice:()=>Dm,sub:()=>xe,sum:()=>Me,sumOutType:()=>yd,tan:()=>Om,tanh:()=>yl,tensor:()=>vr,tensor1d:()=>un,tensor2d:()=>Tn,tensor3d:()=>wd,tensor4d:()=>iE,tensor5d:()=>oE,tensor6d:()=>lE,tensor_util:()=>br,test_util:()=>lx,tidy:()=>z,tile:()=>Ba,time:()=>NI,topk:()=>zm,train:()=>_i,transpose:()=>st,truncatedNormal:()=>Xd,unique:()=>Kd,unregisterGradient:()=>Dk,unregisterKernel:()=>$k,unsortedSegmentSum:()=>Pm,unstack:()=>ur,upcastType:()=>or,util:()=>v,valueAndGrad:()=>gN,valueAndGrads:()=>xN,variable:()=>Wx,variableGrads:()=>Ex,version:()=>vae,version_converter:()=>zre,version_core:()=>_I,version_cpu:()=>$w,version_layers:()=>uy,version_wasm:()=>G3,version_webgl:()=>n_,webgl:()=>mL,webgl_util:()=>tb,where:()=>Sn,whereAsync:()=>Lm,zeros:()=>Ft,zerosLike:()=>qe});var F8=Object.create,Ch=Object.defineProperty,$8=Object.getPrototypeOf,D8=Object.prototype.hasOwnProperty,O8=Object.getOwnPropertyNames,z8=Object.getOwnPropertyDescriptor,P8=e=>Ch(e,"__esModule",{value:!0}),kt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Le=(e,t)=>{for(var n in t)Ch(e,n,{get:t[n],enumerable:!0})},L8=(e,t,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of O8(t))!D8.call(e,r)&&r!=="default"&&Ch(e,r,{get:()=>t[r],enumerable:!(n=z8(t,r))||n.enumerable});return e},ro=e=>L8(P8(Ch(e!=null?F8($8(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),W8=kt(()=>{}),B8=kt((e,t)=>{(function(n,r,a){function s(u){var c=this,h=l();c.next=function(){var d=2091639*c.s0+c.c*23283064365386963e-26;return c.s0=c.s1,c.s1=c.s2,c.s2=d-(c.c=d|0)},c.c=1,c.s0=h(" "),c.s1=h(" "),c.s2=h(" "),c.s0-=h(u),c.s0<0&&(c.s0+=1),c.s1-=h(u),c.s1<0&&(c.s1+=1),c.s2-=h(u),c.s2<0&&(c.s2+=1),h=null}function i(u,c){return c.c=u.c,c.s0=u.s0,c.s1=u.s1,c.s2=u.s2,c}function o(u,c){var h=new s(u),d=c&&c.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var u=4022871197,c=function(h){h=h.toString();for(var d=0;d<h.length;d++){u+=h.charCodeAt(d);var p=.02519603282416938*u;u=p>>>0,p-=u,p*=u,u=p>>>0,p-=u,u+=p*4294967296}return(u>>>0)*23283064365386963e-26};return c}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),V8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var h=0;h<c.length+64;h++)u.x^=c.charCodeAt(h)|0,u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),U8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var h=0;h<c.length+64;h++)u.x^=c.charCodeAt(h)|0,h==c.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),j8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this;u.next=function(){var h=u.x,d=u.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,u.i=d+1&7,f};function c(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}c(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(h.x&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),H8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this;u.next=function(){var h=u.w,d=u.X,p=u.i,f,m;return u.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,u.i=p,m+(h^h>>>16)|0};function c(h,d){var p,f,m,A,y,g=[],w=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,w=Math.max(w,d.length)),m=0,A=-32;A<w;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}c(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(h.X&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),G8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.next=function(){var d=u.b,p=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^p,u.c=p=p-f|0,u.d=f<<16^p>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=2654435769|0,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var h=0;h<c.length+20;h++)u.b^=c.charCodeAt(h)|0,u.next()}function i(l,u){return u.a=l.a,u.b=l.b,u.c=l.c,u.d=l.d,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),n5=kt(()=>{}),q8=kt((e,t)=>{(function(n,r){var a=this,s=256,i=6,o=52,l="random",u=r.pow(s,i),c=r.pow(2,o),h=c*2,d=s-1,p;function f(_,x,S){var T=[];x=x==!0?{entropy:!0}:x||{};var E=g(y(x.entropy?[_,b(n)]:_==null?w():_,3),T),F=new m(T),P=function(){for(var W=F.g(i),V=u,U=0;W<c;)W=(W+U)*s,V*=s,U=F.g(1);for(;W>=h;)W/=2,V/=2,U>>>=1;return(W+U)/V};return P.int32=function(){return F.g(4)|0},P.quick=function(){return F.g(4)/4294967296},P.double=P,g(b(F.S),n),(x.pass||S||function(W,V,U,H){return H&&(H.S&&A(H,F),W.state=function(){return A(F,{})}),U?(r[l]=W,V):W})(P,E,"global"in x?x.global:this==r,x.state)}r["seed"+l]=f;function m(_){var x,S=_.length,T=this,E=0,F=T.i=T.j=0,P=T.S=[];for(S||(_=[S++]);E<s;)P[E]=E++;for(E=0;E<s;E++)P[E]=P[F=d&F+_[E%S]+(x=P[E])],P[F]=x;(T.g=function(W){for(var V,U=0,H=T.i,X=T.j,G=T.S;W--;)V=G[H=d&H+1],U=U*s+G[d&(G[H]=G[X=d&X+V])+(G[X]=V)];return T.i=H,T.j=X,U})(s)}function A(_,x){return x.i=_.i,x.j=_.j,x.S=_.S.slice(),x}function y(_,x){var S=[],T=typeof _,E;if(x&&T=="object")for(E in _)try{S.push(y(_[E],x-1))}catch(F){}return S.length?S:T=="string"?_:_+"\0"}function g(_,x){for(var S=_+"",T,E=0;E<S.length;)x[d&E]=d&(T^=x[d&E]*19)+S.charCodeAt(E++);return b(x)}function w(){try{var _;return p&&(_=p.randomBytes)?_=_(s):(_=new Uint8Array(s),(a.crypto||a.msCrypto).getRandomValues(_)),b(_)}catch(T){var x=a.navigator,S=x&&x.plugins;return[+new Date,a,S,a.screen,b(n)]}}function b(_){return String.fromCharCode.apply(0,_)}if(g(r.random(),n),typeof t=="object"&&t.exports){t.exports=f;try{p=n5()}catch(_){}}else typeof define=="function"&&define.amd&&define(function(){return f})})([],Math)}),r5=kt((e,t)=>{var n=B8(),r=V8(),a=U8(),s=j8(),i=H8(),o=G8(),l=q8();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),yc=kt(()=>{}),X8=kt(()=>{}),K8=kt(()=>{}),Z8=kt((e,t)=>{var n=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(a){a=a||{};function s(){return Q.buffer!=je&&Qt(Q.buffer),xn}function i(){return Q.buffer!=je&&Qt(Q.buffer),vt}function o(){return Q.buffer!=je&&Qt(Q.buffer),wn}function l(){return Q.buffer!=je&&Qt(Q.buffer),Xn}function u(){return Q.buffer!=je&&Qt(Q.buffer),hn}var c=typeof a!="undefined"?a:{},h,d;c.ready=new Promise(function(I,N){h=I,d=N});var p={},f;for(f in c)c.hasOwnProperty(f)&&(p[f]=c[f]);var m=[],A="./this.program",y=function(I,N){throw N},g=!1,w=!1,b=!1,_=!1;g=typeof window=="object",w=typeof importScripts=="function",b=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",_=!g&&!b&&!w;var x=c.ENVIRONMENT_IS_PTHREAD||!1;x&&(je=c.buffer);var S="";function T(I){return c.locateFile?c.locateFile(I,S):S+I}var E,F,P,W,V,U;if(b){w?S=yc().dirname(S)+"/":S=__dirname+"/",E=function(I,N){return V||(V=require("fs")),U||(U=yc()),I=U.normalize(I),V.readFileSync(I,N?null:"utf8")},P=function(I){var N=E(I,!0);return N.buffer||(N=new Uint8Array(N)),me(N.buffer),N},process.argv.length>1&&(A=process.argv[1].replace(/\\/g,"/")),m=process.argv.slice(2),process.on("uncaughtException",function(I){if(!(I instanceof Ac))throw I}),process.on("unhandledRejection",ra),y=function(I){process.exit(I)},c.inspect=function(){return"[Emscripten Module object]"};var H;try{H=X8()}catch(I){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),I}global.Worker=H.Worker}else _?(typeof read!="undefined"&&(E=function(I){return read(I)}),P=function(I){var N;return typeof readbuffer=="function"?new Uint8Array(readbuffer(I)):(N=read(I,"binary"),me(typeof N=="object"),N)},typeof scriptArgs!="undefined"?m=scriptArgs:typeof arguments!="undefined"&&(m=arguments),typeof quit=="function"&&(y=function(I){quit(I)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(g||w)&&(w?S=self.location.href:typeof document!="undefined"&&document.currentScript&&(S=document.currentScript.src),typeof r!="undefined"&&r&&(S=r),S.indexOf("blob:")!==0?S=S.substr(0,S.lastIndexOf("/")+1):S="",b?(E=function(I,N){return V||(V=require("fs")),U||(U=yc()),I=U.normalize(I),V.readFileSync(I,N?null:"utf8")},P=function(I){var N=E(I,!0);return N.buffer||(N=new Uint8Array(N)),me(N.buffer),N}):(E=function(I){var N=new XMLHttpRequest;return N.open("GET",I,!1),N.send(null),N.responseText},w&&(P=function(I){var N=new XMLHttpRequest;return N.open("GET",I,!1),N.responseType="arraybuffer",N.send(null),new Uint8Array(N.response)}),F=function(I,N,L){var q=new XMLHttpRequest;q.open("GET",I,!0),q.responseType="arraybuffer",q.onload=function(){if(q.status==200||q.status==0&&q.response){N(q.response);return}L()},q.onerror=L,q.send(null)}),W=function(I){document.title=I});b&&typeof performance=="undefined"&&(global.performance=K8().performance);var X=c.print||console.log.bind(console),G=c.printErr||console.warn.bind(console);for(f in p)p.hasOwnProperty(f)&&(c[f]=p[f]);p=null,c.arguments&&(m=c.arguments),c.thisProgram&&(A=c.thisProgram),c.quit&&(y=c.quit);var ee=Atomics.load,Y=Atomics.store,se=Atomics.compareExchange,te;c.wasmBinary&&(te=c.wasmBinary);var le=c.noExitRuntime||!0;typeof WebAssembly!="object"&&ra("no native wasm support detected");var Q,pe,ce=!1,ye;function me(I,N){I||ra("Assertion failed: "+N)}function Ne(I){var N=c["_"+I];return me(N,"Cannot call unknown function "+I+", make sure it is exported"),N}function Ce(I,N,L,q,fe){var ue={string:function(vn){var to=0;if(vn!=null&&vn!==0){var Q2=(vn.length<<2)+1;to=Ji(Q2),rt(vn,to,Q2)}return to},array:function(vn){var to=Ji(vn.length);return Je(vn,to),to}};function de(vn){return N==="string"?Oe(vn):N==="boolean"?Boolean(vn):vn}var ke=Ne(I),at=[],Ht=0;if(q)for(var Ot=0;Ot<q.length;Ot++){var Na=ue[L[Ot]];Na?(Ht===0&&(Ht=mc()),at[Ot]=Na(q[Ot])):at[Ot]=q[Ot]}var eo=ke.apply(null,at);return eo=de(eo),Ht!==0&&Yi(Ht),eo}function De(I,N,L,q){L=L||[];var fe=L.every(function(de){return de==="number"}),ue=N!=="string";return ue&&fe&&!q?Ne(I):function(){return Ce(I,N,L,arguments,q)}}function Pe(I,N,L){for(var q=N+L,fe="";!(N>=q);){var ue=I[N++];if(!ue)return fe;if(!(ue&128)){fe+=String.fromCharCode(ue);continue}var de=I[N++]&63;if((ue&224)==192){fe+=String.fromCharCode((ue&31)<<6|de);continue}var ke=I[N++]&63;if((ue&240)==224?ue=(ue&15)<<12|de<<6|ke:ue=(ue&7)<<18|de<<12|ke<<6|I[N++]&63,ue<65536)fe+=String.fromCharCode(ue);else{var at=ue-65536;fe+=String.fromCharCode(55296|at>>10,56320|at&1023)}}return fe}function Oe(I,N){return I?Pe(i(),I,N):""}function nt(I,N,L,q){if(!(q>0))return 0;for(var fe=L,ue=L+q-1,de=0;de<I.length;++de){var ke=I.charCodeAt(de);if(ke>=55296&&ke<=57343){var at=I.charCodeAt(++de);ke=65536+((ke&1023)<<10)|at&1023}if(ke<=127){if(L>=ue)break;N[L++]=ke}else if(ke<=2047){if(L+1>=ue)break;N[L++]=192|ke>>6,N[L++]=128|ke&63}else if(ke<=65535){if(L+2>=ue)break;N[L++]=224|ke>>12,N[L++]=128|ke>>6&63,N[L++]=128|ke&63}else{if(L+3>=ue)break;N[L++]=240|ke>>18,N[L++]=128|ke>>12&63,N[L++]=128|ke>>6&63,N[L++]=128|ke&63}}return N[L]=0,L-fe}function rt(I,N,L){return nt(I,i(),N,L)}function lt(I){for(var N=0,L=0;L<I.length;++L){var q=I.charCodeAt(L);q>=55296&&q<=57343&&(q=65536+((q&1023)<<10)|I.charCodeAt(++L)&1023),q<=127?++N:q<=2047?N+=2:q<=65535?N+=3:N+=4}return N}function Je(I,N){s().set(I,N)}function ft(I,N){return I%N>0&&(I+=N-I%N),I}var je,xn,vt,qn,Jt,wn,Xn,Dn,hn;function Qt(I){je=I,c.HEAP8=xn=new Int8Array(I),c.HEAP16=qn=new Int16Array(I),c.HEAP32=wn=new Int32Array(I),c.HEAPU8=vt=new Uint8Array(I),c.HEAPU16=Jt=new Uint16Array(I),c.HEAPU32=Xn=new Uint32Array(I),c.HEAPF32=Dn=new Float32Array(I),c.HEAPF64=hn=new Float64Array(I)}var $r=c.INITIAL_MEMORY||16777216;if(x)Q=c.wasmMemory,je=c.buffer;else if(c.wasmMemory)Q=c.wasmMemory;else if(Q=new WebAssembly.Memory({initial:$r/65536,maximum:2147483648/65536,shared:!0}),!(Q.buffer instanceof SharedArrayBuffer))throw G("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),b&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Q&&(je=Q.buffer),$r=je.byteLength,Qt(je);var nr,rr=[],ba=[],ta=[],_a=[],ji=[],gr=!1,ih=!1;x||ba.push({func:function(){_h()}}),x&&(gr=!0);function r1(){if(!x){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)ch(c.preRun.shift());Gi(rr)}}function oh(){gr=!0,Gi(ba)}function a1(){x||Gi(ta)}function lh(){x||(ih=!0)}function bn(){if(!x){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)s1(c.postRun.shift());Gi(ji)}}function ch(I){rr.unshift(I)}function s1(I){ji.unshift(I)}var na=0,va=null,ls=null;function i1(I){me(!x,"addRunDependency cannot be used in a pthread worker"),na++,c.monitorRunDependencies&&c.monitorRunDependencies(na)}function o1(I){if(na--,c.monitorRunDependencies&&c.monitorRunDependencies(na),na==0&&(va!==null&&(clearInterval(va),va=null),ls)){var N=ls;ls=null,N()}}c.preloadedImages={},c.preloadedAudios={};function ra(I){c.onAbort&&c.onAbort(I),x&&console.error("Pthread aborting at "+new Error().stack),I+="",G(I),ce=!0,ye=1,I="abort("+I+"). Build with -s ASSERTIONS=1 for more info.";var N=new WebAssembly.RuntimeError(I);throw d(N),N}function uh(I,N){return String.prototype.startsWith?I.startsWith(N):I.indexOf(N)===0}var Hi="data:application/octet-stream;base64,";function hh(I){return uh(I,Hi)}var l1="file://";function dh(I){return uh(I,l1)}var _n="tfjs-backend-wasm-threaded-simd.wasm";hh(_n)||(_n=T(_n));function c1(I){try{if(I==_n&&te)return new Uint8Array(te);if(P)return P(I);throw"both async and sync fetching of the wasm failed"}catch(N){ra(N)}}function ph(){if(!te&&(g||w)){if(typeof fetch=="function"&&!dh(_n))return fetch(_n,{credentials:"same-origin"}).then(function(I){if(!I.ok)throw"failed to load wasm binary file at '"+_n+"'";return I.arrayBuffer()}).catch(function(){return c1(_n)});if(F)return new Promise(function(I,N){F(_n,function(L){I(new Uint8Array(L))},N)})}return Promise.resolve().then(function(){return c1(_n)})}function u1(){var I={a:ef};function N(de,ke){var at=de.exports;if(c.asm=at,nr=c.asm.F,pe=ke,!x){var Ht=Te.unusedWorkers.length;Te.unusedWorkers.forEach(function(Ot){Te.loadWasmModuleToWorker(Ot,function(){--Ht||o1("wasm-instantiate")})})}}x||i1("wasm-instantiate");function L(de){N(de.instance,de.module)}function q(de){return ph().then(function(ke){return WebAssembly.instantiate(ke,I)}).then(de,function(ke){G("failed to asynchronously prepare wasm: "+ke),ra(ke)})}function fe(){return!te&&typeof WebAssembly.instantiateStreaming=="function"&&!hh(_n)&&!dh(_n)&&typeof fetch=="function"?fetch(_n,{credentials:"same-origin"}).then(function(de){var ke=WebAssembly.instantiateStreaming(de,I);return ke.then(L,function(at){return G("wasm streaming compile failed: "+at),G("falling back to ArrayBuffer instantiation"),q(L)})}):q(L)}if(c.instantiateWasm)try{var ue=c.instantiateWasm(I,N);return ue}catch(de){return G("Module.instantiateWasm callback failed with error: "+de),!1}return fe().catch(d),{}}var fh={8991:function(I,N){setTimeout(function(){q2(I,N)},0)}};function h1(){Te.initRuntime()}function Gi(I){for(;I.length>0;){var N=I.shift();if(typeof N=="function"){N(c);continue}var L=N.func;typeof L=="number"?N.arg===void 0?nr.get(L)():nr.get(L)(N.arg):L(N.arg===void 0?null:N.arg)}}function qi(I,N){if(I<=0||I>s().length||I&!0||N<0)return-28;if(N==0)return 0;N>=2147483647&&(N=Infinity);var L=Atomics.load(o(),Qi>>2),q=0;if(L==I){var fe=Atomics.compareExchange(o(),Qi>>2,L,0);if(fe==L&&(--N,q=1,N<=0))return 1}var ue=Atomics.notify(o(),I>>2,N);if(ue>=0)return ue+q;throw"Atomics.notify returned an unexpected value "+ue}c._emscripten_futex_wake=qi;function d1(I){if(x)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in killThread!";o()[I+12>>2]=0;var N=Te.pthreads[I];N.worker.terminate(),Te.freeThreadData(N),Te.runningWorkers.splice(Te.runningWorkers.indexOf(N.worker),1),N.worker.pthread=void 0}function p1(I){if(x)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in cancelThread!";var N=Te.pthreads[I];N.worker.postMessage({cmd:"cancel"})}function f1(I){if(x)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in cleanupThread!";o()[I+12>>2]=0;var N=Te.pthreads[I];if(N){var L=N.worker;Te.returnWorkerToPool(L)}}var Te={unusedWorkers:[],runningWorkers:[],initMainThreadBlock:function(){for(var I=8,N=0;N<I;++N)Te.allocateUnusedWorker()},initRuntime:function(){for(var I=us(228),N=0;N<228/4;++N)l()[I/4+N]=0;o()[I+12>>2]=I;var L=I+152;o()[L>>2]=L;for(var q=us(512),N=0;N<128;++N)l()[q/4+N]=0;Atomics.store(l(),I+100>>2,q),Atomics.store(l(),I+40>>2,I),Nh(I,!w,1),G2(I)},initWorker:function(){},pthreads:{},threadExitHandlers:[],setThreadStatus:function(){},runExitHandlers:function(){for(;Te.threadExitHandlers.length>0;)Te.threadExitHandlers.pop()();x&&Zi()&&H2()},threadExit:function(I){var N=Zi();N&&(Atomics.store(l(),N+4>>2,I),Atomics.store(l(),N+0>>2,1),Atomics.store(l(),N+56>>2,1),Atomics.store(l(),N+60>>2,0),Te.runExitHandlers(),qi(N+0,2147483647),Nh(0,0,0),x&&postMessage({cmd:"exit"}))},threadCancel:function(){Te.runExitHandlers();var I=Zi();Atomics.store(l(),I+4>>2,-1),Atomics.store(l(),I+0>>2,1),qi(I+0,2147483647),Nh(0,0,0),postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var I in Te.pthreads){var N=Te.pthreads[I];N&&N.worker&&Te.returnWorkerToPool(N.worker)}Te.pthreads={};for(var L=0;L<Te.unusedWorkers.length;++L){var q=Te.unusedWorkers[L];q.terminate()}Te.unusedWorkers=[];for(var L=0;L<Te.runningWorkers.length;++L){var q=Te.runningWorkers[L],N=q.pthread;Te.freeThreadData(N),q.terminate()}Te.runningWorkers=[]},freeThreadData:function(I){if(I){if(I.threadInfoStruct){var N=o()[I.threadInfoStruct+100>>2];o()[I.threadInfoStruct+100>>2]=0,fc(N),fc(I.threadInfoStruct)}I.threadInfoStruct=0,I.allocatedOwnStack&&I.stackBase&&fc(I.stackBase),I.stackBase=0,I.worker&&(I.worker.pthread=null)}},returnWorkerToPool:function(I){Te.runWithoutMainThreadQueuedCalls(function(){delete Te.pthreads[I.pthread.threadInfoStruct],Te.unusedWorkers.push(I),Te.runningWorkers.splice(Te.runningWorkers.indexOf(I),1),Te.freeThreadData(I.pthread),I.pthread=void 0})},runWithoutMainThreadQueuedCalls:function(I){o()[J2>>2]=0;try{I()}finally{o()[J2>>2]=1}},receiveObjectTransfer:function(I){},loadWasmModuleToWorker:function(I,N){I.onmessage=function(L){var q=L.data,fe=q.cmd;if(I.pthread&&(Te.currentProxiedOperationCallerThread=I.pthread.threadInfoStruct),q.targetThread&&q.targetThread!=Zi()){var ue=Te.pthreads[q.targetThread];ue?ue.worker.postMessage(L.data,q.transferList):console.error('Internal error! Worker sent a message "'+fe+'" to target pthread '+q.targetThread+", but that thread no longer exists!"),Te.currentProxiedOperationCallerThread=void 0;return}if(fe==="processQueuedMainThreadWork")Af();else if(fe==="spawnThread")wh(L.data);else if(fe==="cleanupThread")f1(q.thread);else if(fe==="killThread")d1(q.thread);else if(fe==="cancelThread")p1(q.thread);else if(fe==="loaded")I.loaded=!0,N&&N(I),I.runPthread&&(I.runPthread(),delete I.runPthread);else if(fe==="print")X("Thread "+q.threadId+": "+q.text);else if(fe==="printErr")G("Thread "+q.threadId+": "+q.text);else if(fe==="alert")alert("Thread "+q.threadId+": "+q.text);else if(fe==="exit"){var de=I.pthread&&Atomics.load(l(),I.pthread.threadInfoStruct+64>>2);de&&Te.returnWorkerToPool(I)}else if(fe==="exitProcess")try{R8(q.returnCode)}catch(ke){if(ke instanceof Ac)return;throw ke}else fe==="cancelDone"?Te.returnWorkerToPool(I):fe==="objectTransfer"?Te.receiveObjectTransfer(L.data):L.data.target==="setimmediate"?I.postMessage(L.data):G("worker sent an unknown command "+fe);Te.currentProxiedOperationCallerThread=void 0},I.onerror=function(L){G("pthread sent an error! "+L.filename+":"+L.lineno+": "+L.message)},b&&(I.on("message",function(L){I.onmessage({data:L})}),I.on("error",function(L){I.onerror(L)}),I.on("exit",function(L){})),I.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||r,wasmMemory:Q,wasmModule:pe})},allocateUnusedWorker:function(){var I=T("tfjs-backend-wasm-threaded-simd.worker.js");Te.unusedWorkers.push(new Worker(I))},getNewWorker:function(){return Te.unusedWorkers.length==0&&(Te.allocateUnusedWorker(),Te.loadWasmModuleToWorker(Te.unusedWorkers[0])),Te.unusedWorkers.length>0?Te.unusedWorkers.pop():null},busySpinWait:function(I){for(var N=performance.now()+I;performance.now()<N;);}};function m1(I,N){Z2(I,N),Yi(I)}c.establishStackSpace=m1;function A1(){return le}c.getNoExitRuntime=A1;function y1(I,N){return nr.get(I)(N)}c.invokeEntryPoint=y1;function g1(I,N,L,q){ra("Assertion failed: "+Oe(I)+", at: "+[N?Oe(N):"unknown filename",L,q?Oe(q):"unknown function"])}function x1(I,N){var L=_main(I,N)}var cs;b?cs=function(){var I=process.hrtime();return I[0]*1e3+I[1]/1e6}:x?cs=function(){return performance.now()-c.__performance_now_clock_drift}:typeof dateNow!="undefined"?cs=dateNow:cs=function(){return performance.now()};function w1(I){return o()[U2()>>2]=I,I}function b1(I,N){if(x)return ka(1,1,I,N)}function _1(I,N){if(I==N)postMessage({cmd:"processQueuedMainThreadWork"});else if(x)postMessage({targetThread:I,cmd:"processThreadQueue"});else{var L=Te.pthreads[I],q=L&&L.worker;if(!q)return;q.postMessage({cmd:"processThreadQueue"})}return 1}function v1(){ra()}function k1(I,N,L){var q=E1(N,L);return fh[I].apply(null,q)}function I1(I,N){}function S1(I,N,L){if(I<=0||I>s().length||I&!0)return-28;if(g){if(Atomics.load(o(),I>>2)!=N)return-6;for(var q=performance.now(),fe=q+L,ue=Atomics.exchange(o(),Qi>>2,I);;){if(q=performance.now(),q>fe)return ue=Atomics.exchange(o(),Qi>>2,0),-73;if(ue=Atomics.exchange(o(),Qi>>2,0),ue==0)break;if(Af(),Atomics.load(o(),I>>2)!=N)return-6;ue=Atomics.exchange(o(),Qi>>2,I)}return 0}else{var de=Atomics.wait(o(),I>>2,N,L);if(de==="timed-out")return-73;if(de==="not-equal")return-6;if(de==="ok")return 0;throw"Atomics.wait returned an unexpected value "+de}}function N1(I,N,L){i().copyWithin(I,N,N+L)}function T1(){return b?require("os").cpus().length:navigator.hardwareConcurrency}function ka(I,N){for(var L=arguments.length-2,q=mc(),fe=L,ue=Ji(fe*8),de=ue>>3,ke=0;ke<L;ke++){var at=arguments[2+ke];u()[de+ke]=at}var Ht=K2(I,fe,ue,N);return Yi(q),Ht}var lc=[],cc=[];function E1(I,N){cc.length=0;var L;for(N>>=2;L=i()[I++];){var q=L<105;q&&N&1&&N++,cc.push(q?u()[N++>>1]:o()[N]),++N}return cc}function C1(I,N,L){lc.length=N;for(var q=L>>3,fe=0;fe<N;fe++)lc[fe]=u()[q+fe];var ue=I<0,de=ue?fh[-I-1]:Q1[I];return de.apply(null,lc)}function R1(){return i().length}function M1(I){try{return Q.grow(I-je.byteLength+65535>>>16),Qt(Q.buffer),1}catch(N){}}function F1(I){var N=R1();if(I<=N)return!1;var L=2147483648;if(I>L)return!1;for(var q=1;q<=4;q*=2){var fe=N*(1+.2/q);fe=Math.min(fe,I+100663296);var ue=Math.min(L,ft(Math.max(I,fe),65536)),de=M1(ue);if(de)return!0}return!1}var Ve={inEventHandler:0,removeAllEventListeners:function(){for(var I=Ve.eventHandlers.length-1;I>=0;--I)Ve._removeHandler(I);Ve.eventHandlers=[],Ve.deferredCalls=[]},registerRemoveEventListeners:function(){Ve.removeEventListenersRegistered||(_a.push(Ve.removeAllEventListeners),Ve.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(I,N,L){function q(de,ke){if(de.length!=ke.length)return!1;for(var at in de)if(de[at]!=ke[at])return!1;return!0}for(var fe in Ve.deferredCalls){var ue=Ve.deferredCalls[fe];if(ue.targetFunction==I&&q(ue.argsList,L))return}Ve.deferredCalls.push({targetFunction:I,precedence:N,argsList:L}),Ve.deferredCalls.sort(function(de,ke){return de.precedence<ke.precedence})},removeDeferredCalls:function(I){for(var N=0;N<Ve.deferredCalls.length;++N)Ve.deferredCalls[N].targetFunction==I&&(Ve.deferredCalls.splice(N,1),--N)},canPerformEventHandlerRequests:function(){return Ve.inEventHandler&&Ve.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(Ve.canPerformEventHandlerRequests())for(var I=0;I<Ve.deferredCalls.length;++I){var N=Ve.deferredCalls[I];Ve.deferredCalls.splice(I,1),--I,N.targetFunction.apply(null,N.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(I,N){for(var L=0;L<Ve.eventHandlers.length;++L)Ve.eventHandlers[L].target==I&&(!N||N==Ve.eventHandlers[L].eventTypeString)&&Ve._removeHandler(L--)},_removeHandler:function(I){var N=Ve.eventHandlers[I];N.target.removeEventListener(N.eventTypeString,N.eventListenerFunc,N.useCapture),Ve.eventHandlers.splice(I,1)},registerOrRemoveHandler:function(I){var N=function(q){++Ve.inEventHandler,Ve.currentEventHandler=I,Ve.runDeferredCalls(),I.handlerFunc(q),Ve.runDeferredCalls(),--Ve.inEventHandler};if(I.callbackfunc)I.eventListenerFunc=N,I.target.addEventListener(I.eventTypeString,N,I.useCapture),Ve.eventHandlers.push(I),Ve.registerRemoveEventListeners();else for(var L=0;L<Ve.eventHandlers.length;++L)Ve.eventHandlers[L].target==I.target&&Ve.eventHandlers[L].eventTypeString==I.eventTypeString&&Ve._removeHandler(L--)},queueEventHandlerOnThread_iiii:function(I,N,L,q,fe){var ue=mc(),de=Ji(12);o()[de>>2]=L,o()[de+4>>2]=q,o()[de+8>>2]=fe,yf(0,I,637534208,N,q,de),Yi(ue)},getTargetThreadForEventCallback:function(I){switch(I){case 1:return 0;case 2:return Te.currentProxiedOperationCallerThread;default:return I}},getNodeNameForTarget:function(I){return I?I==window?"#window":I==screen?"#screen":I&&I.nodeName?I.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function $1(I){var N=lt(I)+1,L=us(N);return rt(I,L,N),L}function D1(I,N,L,q){var fe=mc(),ue=Ji(12),de=0;N&&(de=$1(N)),o()[ue>>2]=de,o()[ue+4>>2]=L,o()[ue+8>>2]=q,yf(0,I,657457152,0,de,ue),Yi(fe)}function O1(I,N,L,q){N=N?Oe(N):"",D1(I,N,L,q)}function z1(I){return I>2?Oe(I):I}var P1=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function L1(I){I=z1(I);var N=P1[I]||(typeof document!="undefined"?document.querySelector(I):void 0);return N}function uc(I){return L1(I)}function mh(I,N,L){var q=uc(I);if(!q)return-4;if(q.canvasSharedPtr&&(o()[q.canvasSharedPtr>>2]=N,o()[q.canvasSharedPtr+4>>2]=L),q.offscreenCanvas||!q.controlTransferredOffscreen){q.offscreenCanvas&&(q=q.offscreenCanvas);var fe=!1;if(q.GLctxObject&&q.GLctxObject.GLctx){var ue=q.GLctxObject.GLctx.getParameter(2978);fe=ue[0]===0&&ue[1]===0&&ue[2]===q.width&&ue[3]===q.height}q.width=N,q.height=L,fe&&q.GLctxObject.GLctx.viewport(0,0,N,L)}else if(q.canvasSharedPtr){var de=o()[q.canvasSharedPtr+8>>2];return O1(de,I,N,L),1}else return-4;return 0}function Ah(I,N,L){return x?ka(2,1,I,N,L):mh(I,N,L)}function W1(I,N,L){var q=uc(I);return q?mh(I,N,L):Ah(I,N,L)}function B1(I){}function V1(I,N){}function U1(I){var N=I.getExtension("ANGLE_instanced_arrays");if(N)return I.vertexAttribDivisor=function(L,q){N.vertexAttribDivisorANGLE(L,q)},I.drawArraysInstanced=function(L,q,fe,ue){N.drawArraysInstancedANGLE(L,q,fe,ue)},I.drawElementsInstanced=function(L,q,fe,ue,de){N.drawElementsInstancedANGLE(L,q,fe,ue,de)},1}function j1(I){var N=I.getExtension("OES_vertex_array_object");if(N)return I.createVertexArray=function(){return N.createVertexArrayOES()},I.deleteVertexArray=function(L){N.deleteVertexArrayOES(L)},I.bindVertexArray=function(L){N.bindVertexArrayOES(L)},I.isVertexArray=function(L){return N.isVertexArrayOES(L)},1}function H1(I){var N=I.getExtension("WEBGL_draw_buffers");if(N)return I.drawBuffers=function(L,q){N.drawBuffersWEBGL(L,q)},1}function G1(I){return!!(I.multiDrawWebgl=I.getExtension("WEBGL_multi_draw"))}var tt={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,recordError:function(I){tt.lastError||(tt.lastError=I)},getNewId:function(I){for(var N=tt.counter++,L=I.length;L<N;L++)I[L]=null;return N},getSource:function(I,N,L,q){for(var fe="",ue=0;ue<N;++ue){var de=q?o()[q+ue*4>>2]:-1;fe+=Oe(o()[L+ue*4>>2],de<0?void 0:de)}return fe},createContext:function(I,N){var L=I.getContext("webgl",N);if(!L)return 0;var q=tt.registerContext(L,N);return q},registerContext:function(I,N){var L=us(8);o()[L+4>>2]=Zi();var q={handle:L,attributes:N,version:N.majorVersion,GLctx:I};return I.canvas&&(I.canvas.GLctxObject=q),tt.contexts[L]=q,(typeof N.enableExtensionsByDefault=="undefined"||N.enableExtensionsByDefault)&&tt.initExtensions(q),L},makeContextCurrent:function(I){return tt.currentContext=tt.contexts[I],c.ctx=Ia=tt.currentContext&&tt.currentContext.GLctx,!(I&&!Ia)},getContext:function(I){return tt.contexts[I]},deleteContext:function(I){tt.currentContext===tt.contexts[I]&&(tt.currentContext=null),typeof Ve=="object"&&Ve.removeAllHandlersOnTarget(tt.contexts[I].GLctx.canvas),tt.contexts[I]&&tt.contexts[I].GLctx.canvas&&(tt.contexts[I].GLctx.canvas.GLctxObject=void 0),fc(tt.contexts[I].handle),tt.contexts[I]=null},initExtensions:function(I){if(I||(I=tt.currentContext),!I.initExtensionsDone){I.initExtensionsDone=!0;var N=I.GLctx;U1(N),j1(N),H1(N),N.disjointTimerQueryExt=N.getExtension("EXT_disjoint_timer_query"),G1(N);var L=N.getSupportedExtensions()||[];L.forEach(function(q){q.indexOf("lose_context")<0&&q.indexOf("debug")<0&&N.getExtension(q)})}},populateUniformTable:function(I){for(var N=tt.programs[I],L=tt.programInfos[I]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1},q=L.uniforms,fe=Ia.getProgramParameter(N,35718),ue=0;ue<fe;++ue){var de=Ia.getActiveUniform(N,ue),ke=de.name;L.maxUniformLength=Math.max(L.maxUniformLength,ke.length+1),ke.slice(-1)=="]"&&(ke=ke.slice(0,ke.lastIndexOf("[")));var at=Ia.getUniformLocation(N,ke);if(at){var Ht=tt.getNewId(tt.uniforms);q[ke]=[de.size,Ht],tt.uniforms[Ht]=at;for(var Ot=1;Ot<de.size;++Ot){var Na=ke+"["+Ot+"]";at=Ia.getUniformLocation(N,Na),Ht=tt.getNewId(tt.uniforms),tt.uniforms[Ht]=at}}}}},q1=["default","low-power","high-performance"];function X1(I,N){var L=N>>2,q=o()[L+(24>>2)],fe={alpha:!!o()[L+(0>>2)],depth:!!o()[L+(4>>2)],stencil:!!o()[L+(8>>2)],antialias:!!o()[L+(12>>2)],premultipliedAlpha:!!o()[L+(16>>2)],preserveDrawingBuffer:!!o()[L+(20>>2)],powerPreference:q1[q],failIfMajorPerformanceCaveat:!!o()[L+(28>>2)],majorVersion:o()[L+(32>>2)],minorVersion:o()[L+(36>>2)],enableExtensionsByDefault:o()[L+(40>>2)],explicitSwapControl:o()[L+(44>>2)],proxyContextToMainThread:o()[L+(48>>2)],renderViaOffscreenBackBuffer:o()[L+(52>>2)]},ue=uc(I);if(!ue||fe.explicitSwapControl)return 0;var de=tt.createContext(ue,fe);return de}function K1(I,N){return X1(I,N)}var Xi={mappings:{},buffers:[null,[],[]],printChar:function(I,N){var L=Xi.buffers[I];N===0||N===10?((I===1?X:G)(Pe(L,0)),L.length=0):L.push(N)},varargs:void 0,get:function(){Xi.varargs+=4;var I=o()[Xi.varargs-4>>2];return I},getStr:function(I){var N=Oe(I);return N},get64:function(I,N){return I}};function yh(I){return x?ka(3,1,I):0}function gh(I,N,L,q,fe){if(x)return ka(4,1,I,N,L,q,fe)}function xh(I,N,L,q){if(x)return ka(5,1,I,N,L,q);for(var fe=0,ue=0;ue<L;ue++){for(var de=o()[N+ue*8>>2],ke=o()[N+(ue*8+4)>>2],at=0;at<ke;at++)Xi.printChar(I,i()[de+at]);fe+=ke}return o()[q>>2]=fe,0}function Z1(I){var N=Te.threadExitHandlers.pop();I&&N()}function Y1(I,N){Te.threadExitHandlers.push(function(){nr.get(I)(N)})}function wh(I){if(x)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var N=Te.getNewWorker();if(N.pthread!==void 0)throw"Internal error!";if(!I.pthread_ptr)throw"Internal error, no pthread ptr!";Te.runningWorkers.push(N);for(var L=us(128*4),q=0;q<128;++q)o()[L+q*4>>2]=0;var fe=I.stackBase+I.stackSize,ue=Te.pthreads[I.pthread_ptr]={worker:N,stackBase:I.stackBase,stackSize:I.stackSize,allocatedOwnStack:I.allocatedOwnStack,threadInfoStruct:I.pthread_ptr},de=ue.threadInfoStruct>>2;Atomics.store(l(),de+(64>>2),I.detached),Atomics.store(l(),de+(100>>2),L),Atomics.store(l(),de+(40>>2),ue.threadInfoStruct),Atomics.store(l(),de+(80>>2),I.stackSize),Atomics.store(l(),de+(76>>2),fe),Atomics.store(l(),de+(104>>2),I.stackSize),Atomics.store(l(),de+(104+8>>2),fe),Atomics.store(l(),de+(104+12>>2),I.detached);var ke=j2(),at=ke+40;Atomics.store(l(),de+(172>>2),at),N.pthread=ue;var Ht={cmd:"run",start_routine:I.startRoutine,arg:I.arg,threadInfoStruct:I.pthread_ptr,stackBase:I.stackBase,stackSize:I.stackSize};N.runPthread=function(){Ht.time=performance.now(),N.postMessage(Ht,I.transferList)},N.loaded&&(N.runPthread(),delete N.runPthread)}function J1(I,N,L,q){if(typeof SharedArrayBuffer=="undefined")return G("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!I)return G("pthread_create called with a null thread pointer!"),28;var fe=[],ue=0;if(x&&(fe.length===0||ue))return X2(687865856,I,N,L,q);if(ue)return ue;var de=0,ke=0,at=0;N&&N!=-1?(de=o()[N>>2],de+=81920,ke=o()[N+8>>2],at=o()[N+12>>2]!==0):de=2097152;var Ht=ke==0;Ht?ke=Y2(16,de):(ke-=de,me(ke>0));for(var Ot=us(228),Na=0;Na<228>>2;++Na)l()[(Ot>>2)+Na]=0;o()[I>>2]=Ot,o()[Ot+12>>2]=Ot;var eo=Ot+152;o()[eo>>2]=eo;var vn={stackBase:ke,stackSize:de,allocatedOwnStack:Ht,detached:at,startRoutine:L,pthread_ptr:Ot,arg:q,transferList:fe};return x?(vn.cmd="spawnThread",postMessage(vn,fe)):wh(vn),0}function bh(I){if(x)return ka(6,1,I);switch(I){case 30:return 16384;case 85:var N=2147483648;return N/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return typeof navigator=="object"&&navigator.hardwareConcurrency||1}return w1(28),-1}x||Te.initMainThreadBlock();var Ia,Q1=[null,b1,Ah,yh,gh,xh,bh],ef={e:g1,r:x1,x:_1,b:v1,y:k1,j:I1,c:S1,d:qi,f:cs,p:N1,z:T1,u:C1,q:F1,v:W1,i:B1,t:V1,w:K1,m:yh,n:gh,g:xh,o:h1,a:Q||c.wasmMemory,k:Z1,l:Y1,h:J1,s:bh},V2=u1(),_h=c.___wasm_call_ctors=function(){return(_h=c.___wasm_call_ctors=c.asm.A).apply(null,arguments)},tf=c._init=function(){return(tf=c._init=c.asm.B).apply(null,arguments)},nf=c._register_tensor=function(){return(nf=c._register_tensor=c.asm.C).apply(null,arguments)},rf=c._dispose_data=function(){return(rf=c._dispose_data=c.asm.D).apply(null,arguments)},af=c._dispose=function(){return(af=c._dispose=c.asm.E).apply(null,arguments)},sf=c._Abs=function(){return(sf=c._Abs=c.asm.G).apply(null,arguments)},of=c._Add=function(){return(of=c._Add=c.asm.H).apply(null,arguments)},lf=c._AddN=function(){return(lf=c._AddN=c.asm.I).apply(null,arguments)},cf=c._ArgMax=function(){return(cf=c._ArgMax=c.asm.J).apply(null,arguments)},uf=c._AvgPool=function(){return(uf=c._AvgPool=c.asm.K).apply(null,arguments)},hf=c._BatchMatMul=function(){return(hf=c._BatchMatMul=c.asm.L).apply(null,arguments)},df=c._Ceil=function(){return(df=c._Ceil=c.asm.M).apply(null,arguments)},pf=c._ClipByValue=function(){return(pf=c._ClipByValue=c.asm.N).apply(null,arguments)},ff=c._Conv2D=function(){return(ff=c._Conv2D=c.asm.O).apply(null,arguments)},vh=c._Conv2DBackpropInput=function(){return(vh=c._Conv2DBackpropInput=c.asm.P).apply(null,arguments)},kh=c._Cos=function(){return(kh=c._Cos=c.asm.Q).apply(null,arguments)},hc=c._CropAndResize=function(){return(hc=c._CropAndResize=c.asm.R).apply(null,arguments)},Ki=c._Cumsum=function(){return(Ki=c._Cumsum=c.asm.S).apply(null,arguments)},mf=c._DepthToSpace=function(){return(mf=c._DepthToSpace=c.asm.T).apply(null,arguments)},dc=c._DepthwiseConv2dNative=function(){return(dc=c._DepthwiseConv2dNative=c.asm.U).apply(null,arguments)},K=c._Equal=function(){return(K=c._Equal=c.asm.V).apply(null,arguments)},ne=c._Exp=function(){return(ne=c._Exp=c.asm.W).apply(null,arguments)},Re=c._FlipLeftRight=function(){return(Re=c._FlipLeftRight=c.asm.X).apply(null,arguments)},Qe=c._Floor=function(){return(Qe=c._Floor=c.asm.Y).apply(null,arguments)},Et=c._FloorDiv=function(){return(Et=c._FloorDiv=c.asm.Z).apply(null,arguments)},yt=c._FusedBatchNorm=function(){return(yt=c._FusedBatchNorm=c.asm._).apply(null,arguments)},Ge=c._FusedConv2D=function(){return(Ge=c._FusedConv2D=c.asm.$).apply(null,arguments)},Xe=c._FusedDepthwiseConv2D=function(){return(Xe=c._FusedDepthwiseConv2D=c.asm.aa).apply(null,arguments)},en=c._Gather=function(){return(en=c._Gather=c.asm.ba).apply(null,arguments)},aa=c._GatherNd=function(){return(aa=c._GatherNd=c.asm.ca).apply(null,arguments)},sa=c._Greater=function(){return(sa=c._Greater=c.asm.da).apply(null,arguments)},Ih=c._GreaterEqual=function(){return(Ih=c._GreaterEqual=c.asm.ea).apply(null,arguments)},pc=c._LeakyRelu=function(){return(pc=c._LeakyRelu=c.asm.fa).apply(null,arguments)},Kn=c._Less=function(){return(Kn=c._Less=c.asm.ga).apply(null,arguments)},Sa=c._LessEqual=function(){return(Sa=c._LessEqual=c.asm.ha).apply(null,arguments)},Sh=c._Log=function(){return(Sh=c._Log=c.asm.ia).apply(null,arguments)},W4=c._LogicalAnd=function(){return(W4=c._LogicalAnd=c.asm.ja).apply(null,arguments)},B4=c._Max=function(){return(B4=c._Max=c.asm.ka).apply(null,arguments)},V4=c._MaxPool=function(){return(V4=c._MaxPool=c.asm.la).apply(null,arguments)},U4=c._Maximum=function(){return(U4=c._Maximum=c.asm.ma).apply(null,arguments)},j4=c._Mean=function(){return(j4=c._Mean=c.asm.na).apply(null,arguments)},H4=c._Min=function(){return(H4=c._Min=c.asm.oa).apply(null,arguments)},G4=c._Minimum=function(){return(G4=c._Minimum=c.asm.pa).apply(null,arguments)},q4=c._Multiply=function(){return(q4=c._Multiply=c.asm.qa).apply(null,arguments)},X4=c._Neg=function(){return(X4=c._Neg=c.asm.ra).apply(null,arguments)},K4=c._NonMaxSuppressionV3=function(){return(K4=c._NonMaxSuppressionV3=c.asm.sa).apply(null,arguments)},Z4=c._NonMaxSuppressionV4=function(){return(Z4=c._NonMaxSuppressionV4=c.asm.ta).apply(null,arguments)},Y4=c._NonMaxSuppressionV5=function(){return(Y4=c._NonMaxSuppressionV5=c.asm.ua).apply(null,arguments)},J4=c._NotEqual=function(){return(J4=c._NotEqual=c.asm.va).apply(null,arguments)},Q4=c._OneHot=function(){return(Q4=c._OneHot=c.asm.wa).apply(null,arguments)},e8=c._PadV2=function(){return(e8=c._PadV2=c.asm.xa).apply(null,arguments)},t8=c._Pow=function(){return(t8=c._Pow=c.asm.ya).apply(null,arguments)},n8=c._Prelu=function(){return(n8=c._Prelu=c.asm.za).apply(null,arguments)},r8=c._Prod=function(){return(r8=c._Prod=c.asm.Aa).apply(null,arguments)},a8=c._RealDiv=function(){return(a8=c._RealDiv=c.asm.Ba).apply(null,arguments)},s8=c._Relu=function(){return(s8=c._Relu=c.asm.Ca).apply(null,arguments)},i8=c._Relu6=function(){return(i8=c._Relu6=c.asm.Da).apply(null,arguments)},o8=c._ResizeBilinear=function(){return(o8=c._ResizeBilinear=c.asm.Ea).apply(null,arguments)},l8=c._Reverse=function(){return(l8=c._Reverse=c.asm.Fa).apply(null,arguments)},c8=c._RotateWithOffset=function(){return(c8=c._RotateWithOffset=c.asm.Ga).apply(null,arguments)},u8=c._Round=function(){return(u8=c._Round=c.asm.Ha).apply(null,arguments)},h8=c._Rsqrt=function(){return(h8=c._Rsqrt=c.asm.Ia).apply(null,arguments)},d8=c._ScatterNd=function(){return(d8=c._ScatterNd=c.asm.Ja).apply(null,arguments)},p8=c._SelectV2=function(){return(p8=c._SelectV2=c.asm.Ka).apply(null,arguments)},f8=c._Sigmoid=function(){return(f8=c._Sigmoid=c.asm.La).apply(null,arguments)},m8=c._Sin=function(){return(m8=c._Sin=c.asm.Ma).apply(null,arguments)},A8=c._Softmax=function(){return(A8=c._Softmax=c.asm.Na).apply(null,arguments)},y8=c._Sqrt=function(){return(y8=c._Sqrt=c.asm.Oa).apply(null,arguments)},g8=c._Square=function(){return(g8=c._Square=c.asm.Pa).apply(null,arguments)},x8=c._SquaredDifference=function(){return(x8=c._SquaredDifference=c.asm.Qa).apply(null,arguments)},w8=c._Step=function(){return(w8=c._Step=c.asm.Ra).apply(null,arguments)},b8=c._StridedSlice=function(){return(b8=c._StridedSlice=c.asm.Sa).apply(null,arguments)},_8=c._Sub=function(){return(_8=c._Sub=c.asm.Ta).apply(null,arguments)},v8=c._Sum=function(){return(v8=c._Sum=c.asm.Ua).apply(null,arguments)},k8=c._Tanh=function(){return(k8=c._Tanh=c.asm.Va).apply(null,arguments)},I8=c._Tile=function(){return(I8=c._Tile=c.asm.Wa).apply(null,arguments)},S8=c._TopK=function(){return(S8=c._TopK=c.asm.Xa).apply(null,arguments)},N8=c._Transpose=function(){return(N8=c._Transpose=c.asm.Ya).apply(null,arguments)},T8=c.__FusedMatMul=function(){return(T8=c.__FusedMatMul=c.asm.Za).apply(null,arguments)},us=c._malloc=function(){return(us=c._malloc=c.asm._a).apply(null,arguments)},fc=c._free=function(){return(fc=c._free=c.asm.$a).apply(null,arguments)},U2=c.___errno_location=function(){return(U2=c.___errno_location=c.asm.ab).apply(null,arguments)},j2=c._emscripten_get_global_libc=function(){return(j2=c._emscripten_get_global_libc=c.asm.bb).apply(null,arguments)},Zi=c._pthread_self=function(){return(Zi=c._pthread_self=c.asm.cb).apply(null,arguments)},H2=c.___pthread_tsd_run_dtors=function(){return(H2=c.___pthread_tsd_run_dtors=c.asm.db).apply(null,arguments)},Af=c._emscripten_main_thread_process_queued_calls=function(){return(Af=c._emscripten_main_thread_process_queued_calls=c.asm.eb).apply(null,arguments)},E8=c._emscripten_current_thread_process_queued_calls=function(){return(E8=c._emscripten_current_thread_process_queued_calls=c.asm.fb).apply(null,arguments)},G2=c._emscripten_register_main_browser_thread_id=function(){return(G2=c._emscripten_register_main_browser_thread_id=c.asm.gb).apply(null,arguments)},q2=c.__emscripten_do_dispatch_to_thread=function(){return(q2=c.__emscripten_do_dispatch_to_thread=c.asm.hb).apply(null,arguments)},X2=c._emscripten_sync_run_in_main_thread_4=function(){return(X2=c._emscripten_sync_run_in_main_thread_4=c.asm.ib).apply(null,arguments)},K2=c._emscripten_run_in_main_runtime_thread_js=function(){return(K2=c._emscripten_run_in_main_runtime_thread_js=c.asm.jb).apply(null,arguments)},yf=c.__emscripten_call_on_thread=function(){return(yf=c.__emscripten_call_on_thread=c.asm.kb).apply(null,arguments)},C8=c._emscripten_tls_init=function(){return(C8=c._emscripten_tls_init=c.asm.lb).apply(null,arguments)},Nh=c.__emscripten_thread_init=function(){return(Nh=c.__emscripten_thread_init=c.asm.mb).apply(null,arguments)},mc=c.stackSave=function(){return(mc=c.stackSave=c.asm.nb).apply(null,arguments)},Yi=c.stackRestore=function(){return(Yi=c.stackRestore=c.asm.ob).apply(null,arguments)},Ji=c.stackAlloc=function(){return(Ji=c.stackAlloc=c.asm.pb).apply(null,arguments)},Z2=c._emscripten_stack_set_limits=function(){return(Z2=c._emscripten_stack_set_limits=c.asm.qb).apply(null,arguments)},Y2=c._memalign=function(){return(Y2=c._memalign=c.asm.rb).apply(null,arguments)},J2=c.__emscripten_allow_main_runtime_queued_calls=9880,Qi=c.__emscripten_main_thread_futex=11368;c.cwrap=De,c.PThread=Te,c.PThread=Te,c.wasmMemory=Q,c.ExitStatus=Ac;var Th;function Ac(I){this.name="ExitStatus",this.message="Program terminated with exit("+I+")",this.status=I}ls=function I(){Th||gf(),Th||(ls=I)};function gf(I){if(I=I||m,na>0)return;if(x){h(c),postMessage({cmd:"loaded"});return}if(r1(),na>0)return;function N(){Th||(Th=!0,c.calledRun=!0,!ce&&(oh(),a1(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),bn()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),N()},1)):N()}c.run=gf;function R8(I,N){if(!(N&&le&&I===0)){if(!N&&x)throw postMessage({cmd:"exitProcess",returnCode:I}),new Ac(I);le||(Te.terminateAllThreads(),ye=I,lh(),c.onExit&&c.onExit(I),ce=!0),y(I,new Ac(I))}}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();return x&&(le=!1,Te.initWorker()),gf(),a.ready}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),Y8=kt((e,t)=>{var n=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(a){a=a||{};var s=typeof a!="undefined"?a:{},i,o;s.ready=new Promise(function(K,ne){i=K,o=ne});var l={},u;for(u in s)s.hasOwnProperty(u)&&(l[u]=s[u]);var c=[],h="./this.program",d=function(K,ne){throw ne},p=!1,f=!1,m=!1,A=!1;p=typeof window=="object",f=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",A=!p&&!m&&!f;var y="";function g(K){return s.locateFile?s.locateFile(K,y):y+K}var w,b,_,x,S,T;m?(f?y=yc().dirname(y)+"/":y=__dirname+"/",w=function(K,ne){return S||(S=require("fs")),T||(T=yc()),K=T.normalize(K),S.readFileSync(K,ne?null:"utf8")},_=function(K){var ne=w(K,!0);return ne.buffer||(ne=new Uint8Array(ne)),X(ne.buffer),ne},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),c=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof mf))throw K}),process.on("unhandledRejection",gr),d=function(K){process.exit(K)},s.inspect=function(){return"[Emscripten Module object]"}):A?(typeof read!="undefined"&&(w=function(K){return read(K)}),_=function(K){var ne;return typeof readbuffer=="function"?new Uint8Array(readbuffer(K)):(ne=read(K,"binary"),X(typeof ne=="object"),ne)},typeof scriptArgs!="undefined"?c=scriptArgs:typeof arguments!="undefined"&&(c=arguments),typeof quit=="function"&&(d=function(K){quit(K)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(p||f)&&(f?y=self.location.href:typeof document!="undefined"&&document.currentScript&&(y=document.currentScript.src),r&&(y=r),y.indexOf("blob:")!==0?y=y.substr(0,y.lastIndexOf("/")+1):y="",w=function(K){var ne=new XMLHttpRequest;return ne.open("GET",K,!1),ne.send(null),ne.responseText},f&&(_=function(K){var ne=new XMLHttpRequest;return ne.open("GET",K,!1),ne.responseType="arraybuffer",ne.send(null),new Uint8Array(ne.response)}),b=function(K,ne,Re){var Qe=new XMLHttpRequest;Qe.open("GET",K,!0),Qe.responseType="arraybuffer",Qe.onload=function(){if(Qe.status==200||Qe.status==0&&Qe.response){ne(Qe.response);return}Re()},Qe.onerror=Re,Qe.send(null)},x=function(K){document.title=K});var E=s.print||console.log.bind(console),F=s.printErr||console.warn.bind(console);for(u in l)l.hasOwnProperty(u)&&(s[u]=l[u]);l=null,s.arguments&&(c=s.arguments),s.thisProgram&&(h=s.thisProgram),s.quit&&(d=s.quit);var P;s.wasmBinary&&(P=s.wasmBinary);var W=s.noExitRuntime||!0;typeof WebAssembly!="object"&&gr("no native wasm support detected");var V,U=!1,H;function X(K,ne){K||gr("Assertion failed: "+ne)}function G(K){var ne=s["_"+K];return X(ne,"Cannot call unknown function "+K+", make sure it is exported"),ne}function ee(K,ne,Re,Qe,Et){var yt={string:function(Kn){var Sa=0;if(Kn!=null&&Kn!==0){var Sh=(Kn.length<<2)+1;Sa=hc(Sh),pe(Kn,Sa,Sh)}return Sa},array:function(Kn){var Sa=hc(Kn.length);return ce(Kn,Sa),Sa}};function Ge(Kn){return ne==="string"?le(Kn):ne==="boolean"?Boolean(Kn):Kn}var Xe=G(K),en=[],aa=0;if(Qe)for(var sa=0;sa<Qe.length;sa++){var Ih=yt[Re[sa]];Ih?(aa===0&&(aa=vh()),en[sa]=Ih(Qe[sa])):en[sa]=Qe[sa]}var pc=Xe.apply(null,en);return pc=Ge(pc),aa!==0&&kh(aa),pc}function Y(K,ne,Re,Qe){Re=Re||[];var Et=Re.every(function(Ge){return Ge==="number"}),yt=ne!=="string";return yt&&Et&&!Qe?G(K):function(){return ee(K,ne,Re,arguments,Qe)}}var se=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function te(K,ne,Re){for(var Qe=ne+Re,Et=ne;K[Et]&&!(Et>=Qe);)++Et;if(Et-ne>16&&K.subarray&&se)return se.decode(K.subarray(ne,Et));for(var yt="";ne<Et;){var Ge=K[ne++];if(!(Ge&128)){yt+=String.fromCharCode(Ge);continue}var Xe=K[ne++]&63;if((Ge&224)==192){yt+=String.fromCharCode((Ge&31)<<6|Xe);continue}var en=K[ne++]&63;if((Ge&240)==224?Ge=(Ge&15)<<12|Xe<<6|en:Ge=(Ge&7)<<18|Xe<<12|en<<6|K[ne++]&63,Ge<65536)yt+=String.fromCharCode(Ge);else{var aa=Ge-65536;yt+=String.fromCharCode(55296|aa>>10,56320|aa&1023)}}return yt}function le(K,ne){return K?te(Ce,K,ne):""}function Q(K,ne,Re,Qe){if(!(Qe>0))return 0;for(var Et=Re,yt=Re+Qe-1,Ge=0;Ge<K.length;++Ge){var Xe=K.charCodeAt(Ge);if(Xe>=55296&&Xe<=57343){var en=K.charCodeAt(++Ge);Xe=65536+((Xe&1023)<<10)|en&1023}if(Xe<=127){if(Re>=yt)break;ne[Re++]=Xe}else if(Xe<=2047){if(Re+1>=yt)break;ne[Re++]=192|Xe>>6,ne[Re++]=128|Xe&63}else if(Xe<=65535){if(Re+2>=yt)break;ne[Re++]=224|Xe>>12,ne[Re++]=128|Xe>>6&63,ne[Re++]=128|Xe&63}else{if(Re+3>=yt)break;ne[Re++]=240|Xe>>18,ne[Re++]=128|Xe>>12&63,ne[Re++]=128|Xe>>6&63,ne[Re++]=128|Xe&63}}return ne[Re]=0,Re-Et}function pe(K,ne,Re){return Q(K,Ce,ne,Re)}function ce(K,ne){Ne.set(K,ne)}function ye(K,ne){return K%ne>0&&(K+=ne-K%ne),K}var me,Ne,Ce,De,Pe,Oe,nt,rt,lt;function Je(K){me=K,s.HEAP8=Ne=new Int8Array(K),s.HEAP16=De=new Int16Array(K),s.HEAP32=Oe=new Int32Array(K),s.HEAPU8=Ce=new Uint8Array(K),s.HEAPU16=Pe=new Uint16Array(K),s.HEAPU32=nt=new Uint32Array(K),s.HEAPF32=rt=new Float32Array(K),s.HEAPF64=lt=new Float64Array(K)}var ft=s.INITIAL_MEMORY||16777216,je,xn=[],vt=[],qn=[],Jt=[],wn=!1;vt.push({func:function(){ph()}});function Xn(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)$r(s.preRun.shift());va(xn)}function Dn(){wn=!0,va(vt)}function hn(){va(qn)}function Qt(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)nr(s.postRun.shift());va(Jt)}function $r(K){xn.unshift(K)}function nr(K){Jt.unshift(K)}var rr=0,ba=null,ta=null;function _a(K){rr++,s.monitorRunDependencies&&s.monitorRunDependencies(rr)}function ji(K){if(rr--,s.monitorRunDependencies&&s.monitorRunDependencies(rr),rr==0&&(ba!==null&&(clearInterval(ba),ba=null),ta)){var ne=ta;ta=null,ne()}}s.preloadedImages={},s.preloadedAudios={};function gr(K){s.onAbort&&s.onAbort(K),K+="",F(K),U=!0,H=1,K="abort("+K+"). Build with -s ASSERTIONS=1 for more info.";var ne=new WebAssembly.RuntimeError(K);throw o(ne),ne}function ih(K,ne){return String.prototype.startsWith?K.startsWith(ne):K.indexOf(ne)===0}var r1="data:application/octet-stream;base64,";function oh(K){return ih(K,r1)}var a1="file://";function lh(K){return ih(K,a1)}var bn="tfjs-backend-wasm.wasm";oh(bn)||(bn=g(bn));function ch(K){try{if(K==bn&&P)return new Uint8Array(P);if(_)return _(K);throw"both async and sync fetching of the wasm failed"}catch(ne){gr(ne)}}function s1(){if(!P&&(p||f)){if(typeof fetch=="function"&&!lh(bn))return fetch(bn,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+bn+"'";return K.arrayBuffer()}).catch(function(){return ch(bn)});if(b)return new Promise(function(K,ne){b(bn,function(Re){K(new Uint8Array(Re))},ne)})}return Promise.resolve().then(function(){return ch(bn)})}function na(){var K={a:_n};function ne(Ge,Xe){var en=Ge.exports;s.asm=en,V=s.asm.g,Je(V.buffer),je=s.asm.m,ji("wasm-instantiate")}_a("wasm-instantiate");function Re(Ge){ne(Ge.instance)}function Qe(Ge){return s1().then(function(Xe){return WebAssembly.instantiate(Xe,K)}).then(Ge,function(Xe){F("failed to asynchronously prepare wasm: "+Xe),gr(Xe)})}function Et(){return!P&&typeof WebAssembly.instantiateStreaming=="function"&&!oh(bn)&&!lh(bn)&&typeof fetch=="function"?fetch(bn,{credentials:"same-origin"}).then(function(Ge){var Xe=WebAssembly.instantiateStreaming(Ge,K);return Xe.then(Re,function(en){return F("wasm streaming compile failed: "+en),F("falling back to ArrayBuffer instantiation"),Qe(Re)})}):Qe(Re)}if(s.instantiateWasm)try{var yt=s.instantiateWasm(K,ne);return yt}catch(Ge){return F("Module.instantiateWasm callback failed with error: "+Ge),!1}return Et().catch(o),{}}function va(K){for(;K.length>0;){var ne=K.shift();if(typeof ne=="function"){ne(s);continue}var Re=ne.func;typeof Re=="number"?ne.arg===void 0?je.get(Re)():je.get(Re)(ne.arg):Re(ne.arg===void 0?null:ne.arg)}}function ls(){gr()}function i1(K,ne,Re){Ce.copyWithin(K,ne,ne+Re)}function o1(){return Ce.length}function ra(K){try{return V.grow(K-me.byteLength+65535>>>16),Je(V.buffer),1}catch(ne){}}function uh(K){var ne=o1(),Re=2147483648;if(K>Re)return!1;for(var Qe=1;Qe<=4;Qe*=2){var Et=ne*(1+.2/Qe);Et=Math.min(Et,K+100663296);var yt=Math.min(Re,ye(Math.max(K,Et),65536)),Ge=ra(yt);if(Ge)return!0}return!1}var Hi={mappings:{},buffers:[null,[],[]],printChar:function(K,ne){var Re=Hi.buffers[K];ne===0||ne===10?((K===1?E:F)(te(Re,0)),Re.length=0):Re.push(ne)},varargs:void 0,get:function(){Hi.varargs+=4;var K=Oe[Hi.varargs-4>>2];return K},getStr:function(K){var ne=le(K);return ne},get64:function(K,ne){return K}};function hh(K){return 0}function l1(K,ne,Re,Qe,Et){}function dh(K,ne,Re,Qe){for(var Et=0,yt=0;yt<Re;yt++){for(var Ge=Oe[ne+yt*8>>2],Xe=Oe[ne+(yt*8+4)>>2],en=0;en<Xe;en++)Hi.printChar(K,Ce[Ge+en]);Et+=Xe}return Oe[Qe>>2]=Et,0}var _n={a:ls,d:i1,e:uh,f:hh,c:l1,b:dh},c1=na(),ph=s.___wasm_call_ctors=function(){return(ph=s.___wasm_call_ctors=s.asm.h).apply(null,arguments)},u1=s._init=function(){return(u1=s._init=s.asm.i).apply(null,arguments)},fh=s._register_tensor=function(){return(fh=s._register_tensor=s.asm.j).apply(null,arguments)},h1=s._dispose_data=function(){return(h1=s._dispose_data=s.asm.k).apply(null,arguments)},Gi=s._dispose=function(){return(Gi=s._dispose=s.asm.l).apply(null,arguments)},qi=s._Abs=function(){return(qi=s._Abs=s.asm.n).apply(null,arguments)},d1=s._Add=function(){return(d1=s._Add=s.asm.o).apply(null,arguments)},p1=s._AddN=function(){return(p1=s._AddN=s.asm.p).apply(null,arguments)},f1=s._ArgMax=function(){return(f1=s._ArgMax=s.asm.q).apply(null,arguments)},Te=s._AvgPool=function(){return(Te=s._AvgPool=s.asm.r).apply(null,arguments)},m1=s._BatchMatMul=function(){return(m1=s._BatchMatMul=s.asm.s).apply(null,arguments)},A1=s._Ceil=function(){return(A1=s._Ceil=s.asm.t).apply(null,arguments)},y1=s._ClipByValue=function(){return(y1=s._ClipByValue=s.asm.u).apply(null,arguments)},g1=s._Conv2D=function(){return(g1=s._Conv2D=s.asm.v).apply(null,arguments)},x1=s._Conv2DBackpropInput=function(){return(x1=s._Conv2DBackpropInput=s.asm.w).apply(null,arguments)},cs=s._Cos=function(){return(cs=s._Cos=s.asm.x).apply(null,arguments)},w1=s._CropAndResize=function(){return(w1=s._CropAndResize=s.asm.y).apply(null,arguments)},b1=s._Cumsum=function(){return(b1=s._Cumsum=s.asm.z).apply(null,arguments)},_1=s._DepthToSpace=function(){return(_1=s._DepthToSpace=s.asm.A).apply(null,arguments)},v1=s._DepthwiseConv2dNative=function(){return(v1=s._DepthwiseConv2dNative=s.asm.B).apply(null,arguments)},k1=s._Equal=function(){return(k1=s._Equal=s.asm.C).apply(null,arguments)},I1=s._Exp=function(){return(I1=s._Exp=s.asm.D).apply(null,arguments)},S1=s._FlipLeftRight=function(){return(S1=s._FlipLeftRight=s.asm.E).apply(null,arguments)},N1=s._Floor=function(){return(N1=s._Floor=s.asm.F).apply(null,arguments)},T1=s._FloorDiv=function(){return(T1=s._FloorDiv=s.asm.G).apply(null,arguments)},ka=s._FusedBatchNorm=function(){return(ka=s._FusedBatchNorm=s.asm.H).apply(null,arguments)},lc=s._FusedConv2D=function(){return(lc=s._FusedConv2D=s.asm.I).apply(null,arguments)},cc=s._FusedDepthwiseConv2D=function(){return(cc=s._FusedDepthwiseConv2D=s.asm.J).apply(null,arguments)},E1=s._Gather=function(){return(E1=s._Gather=s.asm.K).apply(null,arguments)},C1=s._GatherNd=function(){return(C1=s._GatherNd=s.asm.L).apply(null,arguments)},R1=s._Greater=function(){return(R1=s._Greater=s.asm.M).apply(null,arguments)},M1=s._GreaterEqual=function(){return(M1=s._GreaterEqual=s.asm.N).apply(null,arguments)},F1=s._LeakyRelu=function(){return(F1=s._LeakyRelu=s.asm.O).apply(null,arguments)},Ve=s._Less=function(){return(Ve=s._Less=s.asm.P).apply(null,arguments)},$1=s._LessEqual=function(){return($1=s._LessEqual=s.asm.Q).apply(null,arguments)},D1=s._Log=function(){return(D1=s._Log=s.asm.R).apply(null,arguments)},O1=s._LogicalAnd=function(){return(O1=s._LogicalAnd=s.asm.S).apply(null,arguments)},z1=s._Max=function(){return(z1=s._Max=s.asm.T).apply(null,arguments)},P1=s._MaxPool=function(){return(P1=s._MaxPool=s.asm.U).apply(null,arguments)},L1=s._Maximum=function(){return(L1=s._Maximum=s.asm.V).apply(null,arguments)},uc=s._Mean=function(){return(uc=s._Mean=s.asm.W).apply(null,arguments)},mh=s._Min=function(){return(mh=s._Min=s.asm.X).apply(null,arguments)},Ah=s._Minimum=function(){return(Ah=s._Minimum=s.asm.Y).apply(null,arguments)},W1=s._Multiply=function(){return(W1=s._Multiply=s.asm.Z).apply(null,arguments)},B1=s._Neg=function(){return(B1=s._Neg=s.asm._).apply(null,arguments)},V1=s._NonMaxSuppressionV3=function(){return(V1=s._NonMaxSuppressionV3=s.asm.$).apply(null,arguments)},U1=s._NonMaxSuppressionV4=function(){return(U1=s._NonMaxSuppressionV4=s.asm.aa).apply(null,arguments)},j1=s._NonMaxSuppressionV5=function(){return(j1=s._NonMaxSuppressionV5=s.asm.ba).apply(null,arguments)},H1=s._NotEqual=function(){return(H1=s._NotEqual=s.asm.ca).apply(null,arguments)},G1=s._OneHot=function(){return(G1=s._OneHot=s.asm.da).apply(null,arguments)},tt=s._PadV2=function(){return(tt=s._PadV2=s.asm.ea).apply(null,arguments)},q1=s._Pow=function(){return(q1=s._Pow=s.asm.fa).apply(null,arguments)},X1=s._Prelu=function(){return(X1=s._Prelu=s.asm.ga).apply(null,arguments)},K1=s._Prod=function(){return(K1=s._Prod=s.asm.ha).apply(null,arguments)},Xi=s._RealDiv=function(){return(Xi=s._RealDiv=s.asm.ia).apply(null,arguments)},yh=s._Relu=function(){return(yh=s._Relu=s.asm.ja).apply(null,arguments)},gh=s._Relu6=function(){return(gh=s._Relu6=s.asm.ka).apply(null,arguments)},xh=s._ResizeBilinear=function(){return(xh=s._ResizeBilinear=s.asm.la).apply(null,arguments)},Z1=s._Reverse=function(){return(Z1=s._Reverse=s.asm.ma).apply(null,arguments)},Y1=s._RotateWithOffset=function(){return(Y1=s._RotateWithOffset=s.asm.na).apply(null,arguments)},wh=s._Round=function(){return(wh=s._Round=s.asm.oa).apply(null,arguments)},J1=s._Rsqrt=function(){return(J1=s._Rsqrt=s.asm.pa).apply(null,arguments)},bh=s._ScatterNd=function(){return(bh=s._ScatterNd=s.asm.qa).apply(null,arguments)},Ia=s._SelectV2=function(){return(Ia=s._SelectV2=s.asm.ra).apply(null,arguments)},Q1=s._Sigmoid=function(){return(Q1=s._Sigmoid=s.asm.sa).apply(null,arguments)},ef=s._Sin=function(){return(ef=s._Sin=s.asm.ta).apply(null,arguments)},V2=s._Softmax=function(){return(V2=s._Softmax=s.asm.ua).apply(null,arguments)},_h=s._Sqrt=function(){return(_h=s._Sqrt=s.asm.va).apply(null,arguments)},tf=s._Square=function(){return(tf=s._Square=s.asm.wa).apply(null,arguments)},nf=s._SquaredDifference=function(){return(nf=s._SquaredDifference=s.asm.xa).apply(null,arguments)},rf=s._Step=function(){return(rf=s._Step=s.asm.ya).apply(null,arguments)},af=s._StridedSlice=function(){return(af=s._StridedSlice=s.asm.za).apply(null,arguments)},sf=s._Sub=function(){return(sf=s._Sub=s.asm.Aa).apply(null,arguments)},of=s._Sum=function(){return(of=s._Sum=s.asm.Ba).apply(null,arguments)},lf=s._Tanh=function(){return(lf=s._Tanh=s.asm.Ca).apply(null,arguments)},cf=s._Tile=function(){return(cf=s._Tile=s.asm.Da).apply(null,arguments)},uf=s._TopK=function(){return(uf=s._TopK=s.asm.Ea).apply(null,arguments)},hf=s._Transpose=function(){return(hf=s._Transpose=s.asm.Fa).apply(null,arguments)},df=s.__FusedMatMul=function(){return(df=s.__FusedMatMul=s.asm.Ga).apply(null,arguments)},pf=s._malloc=function(){return(pf=s._malloc=s.asm.Ha).apply(null,arguments)},ff=s._free=function(){return(ff=s._free=s.asm.Ia).apply(null,arguments)},vh=s.stackSave=function(){return(vh=s.stackSave=s.asm.Ja).apply(null,arguments)},kh=s.stackRestore=function(){return(kh=s.stackRestore=s.asm.Ka).apply(null,arguments)},hc=s.stackAlloc=function(){return(hc=s.stackAlloc=s.asm.La).apply(null,arguments)};s.cwrap=Y;var Ki;function mf(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}ta=function K(){Ki||dc(),Ki||(ta=K)};function dc(K){if(K=K||c,rr>0||(Xn(),rr>0))return;function ne(){Ki||(Ki=!0,s.calledRun=!0,!U&&(Dn(),hn(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),Qt()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),ne()},1)):ne()}if(s.run=dc,s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();return dc(),a.ready}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),J8=kt((e,t)=>{(function(n,r,a){function s(u){var c=this,h=l();c.next=function(){var d=2091639*c.s0+c.c*23283064365386963e-26;return c.s0=c.s1,c.s1=c.s2,c.s2=d-(c.c=d|0)},c.c=1,c.s0=h(" "),c.s1=h(" "),c.s2=h(" "),c.s0-=h(u),c.s0<0&&(c.s0+=1),c.s1-=h(u),c.s1<0&&(c.s1+=1),c.s2-=h(u),c.s2<0&&(c.s2+=1),h=null}function i(u,c){return c.c=u.c,c.s0=u.s0,c.s1=u.s1,c.s2=u.s2,c}function o(u,c){var h=new s(u),d=c&&c.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var u=4022871197,c=function(h){h=String(h);for(var d=0;d<h.length;d++){u+=h.charCodeAt(d);var p=.02519603282416938*u;u=p>>>0,p-=u,p*=u,u=p>>>0,p-=u,u+=p*4294967296}return(u>>>0)*23283064365386963e-26};return c}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Q8=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var h=0;h<c.length+64;h++)u.x^=c.charCodeAt(h)|0,u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ek=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var h=0;h<c.length+64;h++)u.x^=c.charCodeAt(h)|0,h==c.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),tk=kt((e,t)=>{(function(n,r,a){function s(l){var u=this;u.next=function(){var h=u.x,d=u.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,u.i=d+1&7,f};function c(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}c(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(h.x&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),nk=kt((e,t)=>{(function(n,r,a){function s(l){var u=this;u.next=function(){var h=u.w,d=u.X,p=u.i,f,m;return u.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,u.i=p,m+(h^h>>>16)|0};function c(h,d){var p,f,m,A,y,g=[],w=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,w=Math.max(w,d.length)),m=0,A=-32;A<w;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}c(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(h.X&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),rk=kt((e,t)=>{(function(n,r,a){function s(l){var u=this,c="";u.next=function(){var d=u.b,p=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^p,u.c=p=p-f|0,u.d=f<<16^p>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=2654435769|0,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var h=0;h<c.length+20;h++)u.b^=c.charCodeAt(h)|0,u.next()}function i(l,u){return u.a=l.a,u.b=l.b,u.c=l.c,u.d=l.d,u}function o(l,u){var c=new s(l),h=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var p=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,h&&(typeof h=="object"&&i(h,c),d.state=function(){return i(c,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ak=kt((e,t)=>{(function(n,r,a){var s=256,i=6,o=52,l="random",u=a.pow(s,i),c=a.pow(2,o),h=c*2,d=s-1,p;function f(_,x,S){var T=[];x=x==!0?{entropy:!0}:x||{};var E=g(y(x.entropy?[_,b(r)]:_==null?w():_,3),T),F=new m(T),P=function(){for(var W=F.g(i),V=u,U=0;W<c;)W=(W+U)*s,V*=s,U=F.g(1);for(;W>=h;)W/=2,V/=2,U>>>=1;return(W+U)/V};return P.int32=function(){return F.g(4)|0},P.quick=function(){return F.g(4)/4294967296},P.double=P,g(b(F.S),r),(x.pass||S||function(W,V,U,H){return H&&(H.S&&A(H,F),W.state=function(){return A(F,{})}),U?(a[l]=W,V):W})(P,E,"global"in x?x.global:this==a,x.state)}function m(_){var x,S=_.length,T=this,E=0,F=T.i=T.j=0,P=T.S=[];for(S||(_=[S++]);E<s;)P[E]=E++;for(E=0;E<s;E++)P[E]=P[F=d&F+_[E%S]+(x=P[E])],P[F]=x;(T.g=function(W){for(var V,U=0,H=T.i,X=T.j,G=T.S;W--;)V=G[H=d&H+1],U=U*s+G[d&(G[H]=G[X=d&X+V])+(G[X]=V)];return T.i=H,T.j=X,U})(s)}function A(_,x){return x.i=_.i,x.j=_.j,x.S=_.S.slice(),x}function y(_,x){var S=[],T=typeof _,E;if(x&&T=="object")for(E in _)try{S.push(y(_[E],x-1))}catch(F){}return S.length?S:T=="string"?_:_+"\0"}function g(_,x){for(var S=_+"",T,E=0;E<S.length;)x[d&E]=d&(T^=x[d&E]*19)+S.charCodeAt(E++);return b(x)}function w(){try{var _;return p&&(_=p.randomBytes)?_=_(s):(_=new Uint8Array(s),(n.crypto||n.msCrypto).getRandomValues(_)),b(_)}catch(T){var x=n.navigator,S=x&&x.plugins;return[+new Date,n,S,n.screen,b(r)]}}function b(_){return String.fromCharCode.apply(0,_)}if(g(a.random(),r),typeof t=="object"&&t.exports){t.exports=f;try{p=n5()}catch(_){}}else typeof define=="function"&&define.amd?define(function(){return f}):a["seed"+l]=f})(typeof self!="undefined"?self:e,[],Math)}),a5=kt((e,t)=>{var n=J8(),r=Q8(),a=ek(),s=tk(),i=nk(),o=rk(),l=ak();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),sk=kt(()=>{}),ik="3.3.0",ok="3.3.0",lk="3.3.0",ck="3.3.0",uk="3.3.0",hk=1e-7,dk=1e-4,Rh=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},gc=class{refCount(e){return sr("refCount")}incRef(e){return sr("incRef")}timerAvailable(){return!0}time(e){return sr("time")}read(e){return sr("read")}readSync(e){return sr("readSync")}numDataIds(){return sr("numDataIds")}disposeData(e,t){return sr("disposeData")}write(e,t,n){return sr("write")}move(e,t,n,r,a){return sr("move")}memory(){return sr("memory")}floatPrecision(){return sr("floatPrecision")}epsilon(){return this.floatPrecision()===32?hk:dk}dispose(){return sr("dispose")}};function sr(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function s5(e){let t=e.length,n=0,r=0;for(;t>0;)r=Math.random()*t|0,t--,n=e[t],e[t]=e[r],e[r]=n}function pk(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r,a,s=0;for(;n>0;)s=Math.random()*n|0,n--,r=e[n],a=t[n],e[n]=e[s],t[n]=t[s],e[s]=r,t[s]=a}function xc(e,t,n){return Math.max(e,Math.min(t,n))}function fk(e){return e%2==0?e:e+1}function mk(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function Ak(e,t){let n=Math.random();return t*n+(1-n)*e}function yk(e,t){let n=0;for(let r=0;r<e.length;r++){let a=Number(e[r])-Number(t[r]);n+=a*a}return n}function M(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function on(e,t,n=""){M(ia(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function ds(e){M(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ps(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||ln(e)&&!n)for(let r=0;r<e.length;++r)ps(e[r],t,n);else t.push(e);return t}function zt(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function gk(e){return e.length===0}function ia(e,t){if(e===t)return!0;if(e==null||t==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Gt(e){return e%1==0}function xk(e){if(Math.tanh!=null)return Math.tanh(e);if(e===Infinity)return 1;if(e===-Infinity)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function wk(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function bk(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return s5(t),t}function wc(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function _k(e,t=r=>0,n){return new Promise((r,a)=>{let s=0,i=()=>{if(e()){r();return}s++;let o=t(s);if(n!=null&&s>=n){a();return}setTimeout(i,o)};i()})}function vk(e,t){let n=1,r=-1;for(let s=0;s<e.length;++s)if(e[s]>=0)n*=e[s];else if(e[s]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${s}`);r=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(r===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let a=e.slice();return a[r]=t/n,a}function ir(e,t){let n=t.length;return e=e==null?t.map((r,a)=>a):[].concat(e),M(e.every(r=>r>=-n&&r<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),M(e.every(r=>Gt(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function i5(e,t){let n=[],r=[],a=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||a?null:ir(t,e).sort(),i=0;for(let o=0;o<e.length;++o){if(s!=null){if(s[i]===o&&e[o]!==1)throw new Error(`Can't squeeze axis ${o} since its dim '${e[o]}' is not 1`);(s[i]==null||s[i]>o)&&e[o]===1&&(n.push(e[o]),r.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),r.push(o))}return{newShape:n,keptDims:r}}function o5(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function l5(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function c5(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(isNaN(r)||!isFinite(r))throw Error(`A tensor of type ${t} being uploaded contains ${r}.`)}}function u5(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function kk(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function ln(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array}function xf(e){if(e==="float32"||e==="int32")return 4;if(e==="complex64")return 8;if(e==="bool")return 1;throw new Error(`Unknown dtype ${e}`)}function h5(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function Ta(e){return typeof e=="string"||e instanceof String}function d5(e){return typeof e=="boolean"}function p5(e){return typeof e=="number"}function Mh(e){return Array.isArray(e)?Mh(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":p5(e)?"float32":Ta(e)?"string":d5(e)?"bool":"float32"}function Ea(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Fh(e,t){for(let n=t;n<e;++n)if(e%n==0)return n;return e}function ao(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let r=t-3;r>=0;--r)n[r]=n[r+1]*e[r+1];return n}function f5(e,t,n){let r=new Array;if(t.length===1){let a=t[0];for(let s=0;s<a;s++)r[s]=n[e+s]}else{let a=t[0],s=t.slice(1),i=s.reduce((o,l)=>o*l);for(let o=0;o<a;o++)r[o]=f5(e+o*i,s,n)}return r}function so(e,t){if(e.length===0)return t[0];let n=e.reduce((r,a)=>r*a);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}.`);return f5(0,e,t)}function wf(e,t){let n=$h(e,t);for(let r=0;r<n.length;r++)n[r]=1;return n}function $h(e,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool")return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function Ik(e,t){let n=e.reduce((r,a)=>r*a,1);if(t==null||t==="float32")return so(e,new Float32Array(n));if(t==="int32")return so(e,new Int32Array(n));if(t==="bool")return so(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function bf(e){e.forEach(t=>{M(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function Sk(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let a=0;a<e.length-1;++a)r+=n[a]*e[a];return r}function Nk(e,t,n){if(t===0)return[];if(t===1)return[e];let r=new Array(t);for(let a=0;a<r.length-1;++a)r[a]=Math.floor(e/n[a]),e-=r[a]*n[a];return r[r.length-1]=e,r}function _f(e){return e&&e.then&&typeof e.then=="function"}var m5="tfjsflags",A5=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${t}.`),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let r=this.urlFlags[e];console.warn(`Setting feature override from URL ${e}: ${r}.`),this.set(e,r)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(_f(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(this.flagRegistry[e]==null)throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,this.flagRegistry[e].setHook!=null&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(this.flagRegistry[e]==null)throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let e=Tk(this.global.location.search);m5 in e&&e[m5].split(",").forEach(t=>{let[n,r]=t.split(":");this.urlFlags[n]=Ek(n,r)})}};function Tk(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(Ck(t,r[0],r[1]),r.join("="))),t}function Ck(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function Ek(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function J(){return wr}var wr=null;function Rk(e){wr=e}var vf;function y5(){if(vf==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");vf=e}return vf}function Mk(){let e=y5();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function kf(e,t){let n=Mk();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var io="Abs",oo="Acos",lo="Acosh",Ca="Add",fs="AddN",Dh="All",Oh="Any",ms="ArgMax",bc="ArgMin",co="Asin",uo="Asinh",ho="Atan",po="Atanh",fo="Atan2",As="AvgPool",zh="AvgPoolGrad",_c="AvgPool3D",Ph="AvgPool3DGrad",ys="BatchMatMul",vc="BatchToSpaceND",Lh="Bincount",g5="BroadcastTo",gs="Cast",xs="Ceil",Ra="ClipByValue",Wh="Complex",kc="ComplexAbs",mo="Concat",ws="Conv2D",Bh="Conv2DBackpropFilter",bs="Conv2DBackpropInput",Ic="Conv3D",Vh="Conv3DBackpropFilterV2",Uh="Conv3DBackpropInputV2",_s="Cos",Ao="Cosh",vs="Cumsum",yo="CropAndResize",jh="DenseBincount",go="DepthToSpace",ks="DepthwiseConv2dNative",Hh="DepthwiseConv2dNativeBackpropFilter",Gh="DepthwiseConv2dNativeBackpropInput",qh="Diag",Sc="Dilation2D",Xh="Dilation2DBackpropInput",Kh="Dilation2DBackpropFilter",Is="RealDiv",xo="Elu",Zh="EluGrad",wo="Erf",bo="Equal",Ss="Exp",_o="ExpandDims",vo="Expm1",Yh="FFT",Nc="Fill",ko="FlipLeftRight",Ns="Floor",Ts="FloorDiv",Es="FusedBatchNorm",Io="GatherV2",So="GatherNd",No="Greater",Cs="GreaterEqual",Rs="Identity",Jh="IFFT",Qh="Imag",To="IsFinite",Eo="IsInf",Co="IsNan",Ms="LeakyRelu",Ro="Less",Mo="LessEqual",ed="LinSpace",Fs="Log",Fo="Log1p",$o="LogicalAnd",Tc="LogicalNot",Ec="LogicalOr",x5="LogSoftmax",Cc="LRN",td="LRNGrad",$s="Max",Ds="Maximum",Os="MaxPool",nd="MaxPoolGrad",Rc="MaxPool3D",rd="MaxPool3DGrad",ad="MaxPoolWithArgmax",zs="Mean",Ps="Min",Ls="Minimum",Mc="MirrorPad",Do="Mod",sd="Multinomial",Ws="Multiply",Oo="Neg",zo="NotEqual",Po="NonMaxSuppressionV3",Lo="NonMaxSuppressionV4",Wo="NonMaxSuppressionV5",Bo="OnesLike",Bs="OneHot",Vo="Pack",Vs="PadV2",Fk="Pool",Us="Pow",js="Prelu",Uo="Prod",Fc="Range",id="Real",jo="Reciprocal",Hs="Relu",Ho="Reshape",$c="ResizeNearestNeighbor",od="ResizeNearestNeighborGrad",Gs="ResizeBilinear",ld="ResizeBilinearGrad",qs="Relu6",Xs="Reverse",Ks="Round",Zs="Rsqrt",Go="ScatterNd",qo="Select",Xo="Selu",Ko="Slice",Ys="Sin",Zo="Sinh",Yo="Sign",Js="Sigmoid",Jo="Softplus",Qs="Sqrt",ei="Sum",Dc="SpaceToBatchND",Qo="SplitV",ti="Softmax",ni="SquaredDifference",Oc="Square",ri="Sub",cd="SparseToDense",el="StridedSlice",tl="Tan",ai="Tanh",Ma="Tile",nl="TopK",ud="Transform",si="Transpose",hd="Unique",rl="Unpack",zc="UnsortedSegmentSum",al="ZerosLike",Fa="Step",dd="FromPixels",sl="RotateWithOffset",ii="_FusedMatMul",oi="FusedConv2D",li="FusedDepthwiseConv2D",il=kf("kernelRegistry",()=>new Map),Pc=kf("gradRegistry",()=>new Map);function pd(e,t){let n=If(e,t);return il.get(n)}function Sf(e){return Pc.get(e)}function ol(e){let t=il.entries(),n=[];for(;;){let{done:r,value:a}=t.next();if(r)break;let[s,i]=a,[o]=s.split("_");o===e&&n.push(i)}return n}function ci(e){let{kernelName:t,backendName:n}=e,r=If(t,n);il.has(r)&&console.warn(`The kernel '${t}' for backend '${n}' is already registered`),il.set(r,e)}function w5(e){let{kernelName:t}=e;Pc.has(t)&&J().getBool("DEBUG")&&console.warn(`Overriding the gradient for '${t}'`),Pc.set(t,e)}function $k(e,t){let n=If(e,t);if(!il.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);il.delete(n)}function Dk(e){if(!Pc.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Pc.delete(e)}function Ok(e,t){ol(e).forEach(n=>{let r=Object.assign({},n,{backendName:t});ci(r)})}function If(e,t){return`${t}_${e}`}var v={};Le(v,{arraysEqual:()=>ia,assert:()=>M,assertNonNegativeIntegerDimensions:()=>bf,assertNonNull:()=>ds,assertShapesMatch:()=>on,bytesFromStringArray:()=>h5,bytesPerElement:()=>xf,checkConversionForErrors:()=>c5,clamp:()=>xc,computeStrides:()=>ao,createScalarValue:()=>zk,createShuffledIndices:()=>bk,decodeString:()=>md,distSquared:()=>yk,encodeString:()=>Wc,fetch:()=>Pk,flatten:()=>ps,getArrayFromDType:()=>l5,getTypedArrayFromDType:()=>o5,hasEncodingLoss:()=>kk,indexToLoc:()=>Nk,inferDtype:()=>Mh,inferFromImplicitShape:()=>vk,isBoolean:()=>d5,isFunction:()=>Ea,isInt:()=>Gt,isNumber:()=>p5,isPromise:()=>_f,isScalarShape:()=>gk,isString:()=>Ta,isTypedArray:()=>ln,isValidDtype:()=>u5,locToIndex:()=>Sk,makeOnesTypedArray:()=>wf,makeZerosNestedTypedArray:()=>Ik,makeZerosTypedArray:()=>$h,nearestDivisor:()=>Fh,nearestLargerEven:()=>fk,now:()=>Lc,parseAxisParam:()=>ir,randUniform:()=>Ak,repeatedTry:()=>_k,rightPad:()=>wc,shuffle:()=>s5,shuffleCombo:()=>pk,sizeFromShape:()=>zt,sizeToSquarishShape:()=>wk,squeezeShape:()=>i5,sum:()=>mk,tanh:()=>xk,toNestedArray:()=>so,toTypedArray:()=>fd});function zk(e,t){return t==="string"?Wc(e):fd([e],t)}function Lk(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function fd(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=ps(e)),J().getBool("DEBUG")&&c5(e,t),Lk(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let r=0;r<n.length;++r)Math.round(e[r])!==0&&(n[r]=1);return n}else throw new Error(`Unknown data type ${t}`)}function Lc(){return J().platform.now()}function Pk(e,t){return J().platform.fetch(e,t)}function Wc(e,t="utf-8"){return t=t||"utf-8",J().platform.encode(e,t)}function md(e,t="utf-8"){return t=t||"utf-8",J().platform.decode(e,t)}var Vk=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new Bk)}profileKernel(e,t,n){let r,a=()=>{r=n()},s,i=Lc();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(a);else{a();for(let o of r)o.dataSync();s=Promise.resolve({kernelMs:Lc()-i})}if(J().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o<r.length;o++){let l=r[o];l.data().then(u=>{Wk(u,l.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:a,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),r,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],a,o[2])})})}};function Wk(e,t,n){if(t!=="float32")return!1;for(let r=0;r<e.length;r++){let a=e[r];if(isNaN(a)||!isFinite(a))return console.warn(`Found ${a} in the result of '${n}'`),!0}return!1}var Bk=class{logKernelProfile(e,t,n,r,a,s){let i=typeof r=="number"?wc(`${r}ms`,9):r.error,o=wc(e,25),l=t.rank,u=t.size,c=wc(t.shape.toString(),14),h="";for(let d in a){let p=a[d];if(p!=null){let f=p.shape||t.shape,m=f.length;h+=`${d}: ${m}D ${m>0?f:""} `}}console.log(`%c${o} %c${i} %c${l}D ${c} %c${u} %c${h} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function Uk(e,t,n){let r={},a={};for(let l=0;l<t.length;l++)r[t[l].id]=!0;for(let l=0;l<e.length;l++){let u=e[l],c=u.inputs;for(let h in c){let d=c[h],p=!1;for(let f=0;f<t.length;f++)if(r[d.id]){u.outputs.forEach(m=>r[m.id]=!0),p=!0,a[u.id]=!0;break}if(p)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],c=u.inputs;for(let h=0;h<u.outputs.length;h++)if(s[u.outputs[h].id]){for(let d in c)s[c[d].id]=!0,i[u.id]=!0;break}}let o=[];for(let l=0;l<e.length;l++){let u=e[l];if(a[u.id]&&i[u.id]){let c={};for(let d in u.inputs){let p=u.inputs[d];r[p.id]&&(c[d]=p)}let h=Object.assign({},u);h.inputs=c,h.outputs=u.outputs,o.push(h)}}return o}function jk(e,t,n,r){for(let a=t.length-1;a>=0;a--){let s=t[a],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=n(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[l];if(!ia(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(e[c.id]==null)e[c.id]=u;else{let h=e[c.id];e[c.id]=r(h,u),h.dispose()}}}}var b5=20,Bc=3,Nf=7;function Gk(e,t,n,r){let a=ao(t),s=Hk(e,t,n,a),i=t.length,o=Ad(e,t,n,a,s),l=["Tensor"];return r&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(`
|
|
`)),l.join(`
|
|
`)}function Hk(e,t,n,r){let a=zt(t),s=r[r.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Uc(e):e;if(o>1)for(let u=0;u<a/s;u++){let c=u*s;for(let h=0;h<s;h++)i[h]=Math.max(i[h],Vc(l[c+h],0,n).length)}return i}function Vc(e,t,n){let r;return Array.isArray(e)?r=`${parseFloat(e[0].toFixed(Nf))} + ${parseFloat(e[1].toFixed(Nf))}j`:Ta(e)?r=`'${e}'`:n==="bool"?r=_5(e):r=parseFloat(e.toFixed(Nf)).toString(),wc(r,t)}function _5(e){return e===0?"false":"true"}function Ad(e,t,n,r,a,s=!0){let i=n==="complex64"?2:1,o=t[0],l=t.length;if(l===0){if(n==="complex64"){let m=Uc(e);return[Vc(m[0],0,n)]}return n==="bool"?[_5(e[0])]:[e[0].toString()]}if(l===1){if(o>b5){let A=Bc*i,y=Array.from(e.slice(0,A)),g=Array.from(e.slice((o-Bc)*i,o*i));return n==="complex64"&&(y=Uc(y),g=Uc(g)),["["+y.map((w,b)=>Vc(w,a[b],n)).join(", ")+", ..., "+g.map((w,b)=>Vc(w,a[o-Bc+b],n)).join(", ")+"]"]}let m=n==="complex64"?Uc(e):Array.from(e);return["["+m.map((A,y)=>Vc(A,a[y],n)).join(", ")+"]"]}let u=t.slice(1),c=r.slice(1),h=r[0]*i,d=[];if(o>b5){for(let m=0;m<Bc;m++){let A=m*h,y=A+h;d.push(...Ad(e.slice(A,y),u,n,c,a,!1))}d.push("...");for(let m=o-Bc;m<o;m++){let A=m*h,y=A+h;d.push(...Ad(e.slice(A,y),u,n,c,a,m===o-1))}}else for(let m=0;m<o;m++){let A=m*h,y=A+h;d.push(...Ad(e.slice(A,y),u,n,c,a,m===o-1))}let p=l===2?",":"";d[0]="["+d[0]+p;for(let m=1;m<d.length-1;m++)d[m]=" "+d[m]+p;let f=`,
|
|
`;for(let m=2;m<l;m++)f+=`
|
|
`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":f),d}function Uc(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var Pt=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=zt(e),n!=null){let r=n.length;M(r===this.size,()=>`Length of values '${r}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||l5(t,this.size),this.strides=ao(e)}set(e,...t){t.length===0&&(t=[0]),M(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let r of e){if(r<0||r>=this.shape[t]){let a=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(a)}t++}let n=e[e.length-1];for(let r=0;r<e.length-1;++r)n+=this.strides[r]*e[r];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Dr().makeTensor(this.values,this.shape,this.dtype)}},Dr=null,ll=null,qk=null;function Xk(e){Dr=e}function Kk(e){ll=e}function Zk(e){qk=e}var He=class{constructor(e,t,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=zt(e),this.strides=ao(e),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return ll.buffer(this.shape,this.dtype,e)}bufferSync(){return ll.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return so(this.shape,e)}arraySync(){return so(this.shape,this.dataSync())}async data(){this.throwIfDisposed();let e=Dr().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>md(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataSync(){this.throwIfDisposed();let e=Dr().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>md(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Dr().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Dr().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return ll.print(this,e)}clone(){return this.throwIfDisposed(),ll.clone(this)}toString(e=!1){let t=this.dataSync();return Gk(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),ll.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Dr().makeVariable(this,e,t,n)}};Object.defineProperty(He,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Z(){return kf("Tensor",()=>He)}Z();var jc=class extends He{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r);this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!ia(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Dr().disposeTensor(this),this.dataId=e.dataId,Dr().incRef(this,null)}dispose(){Dr().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(jc,Symbol.hasInstance,{value:e=>e instanceof He&&e.assign!=null&&e.assign instanceof Function});var br={};Le(br,{assertTypesMatch:()=>v5,getTensorsInContainer:()=>Tf,isTensorInList:()=>Yk,makeTypesMatch:()=>It});var Ef;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Ef||(Ef={}));var Cf;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Cf||(Cf={}));var Rf;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(Rf||(Rf={}));var Mf;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Mf||(Mf={}));var Ff;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Ff||(Ff={}));var Jk={float32:Mf,int32:Cf,bool:Rf,complex64:Ff};function or(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return Jk[e][t]}function yd(e){return or(e,"int32")}function It(e,t){if(e.dtype===t.dtype)return[e,t];let n=or(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function v5(e,t){M(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function Yk(e,t){return t.some(n=>n.id===e.id)}function Tf(e){let t=[],n=new Set;return k5(e,t,n),t}function k5(e,t,n){if(e==null)return;if(e instanceof He){t.push(e);return}if(!Qk(e))return;let r=e;for(let a in r){let s=r[a];n.has(s)||(n.add(s),k5(s,t,n))}}function Qk(e){return Array.isArray(e)||typeof e=="object"}function $f(e){return e.kernelName!=null}var I5=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},Hc=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new I5}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry))if(e in this.registryFactory){let{asyncInit:t}=this.initializeBackend(e);if(t)return null}else return null;return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(console.warn(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(this.registryFactory[e]==null)throw new Error(`Backend name '${e}' not found in registry`);if(this.backendName=e,this.registry[e]==null){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new Vk(this.backendInstance),!0}setupRegisteredKernels(){ol(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){ol(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof gc)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,a=n.then(s=>r<this.pendingBackendInitId?!1:(this.registry[e]=s,this.pendingBackendInit=null,!0)).catch(s=>(r<this.pendingBackendInitId||(this.pendingBackendInit=null,console.warn(`Initialization of backend ${e} failed`),console.warn(s.stack||s.message)),!1));return this.pendingBackendInit=a,{success:a,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return console.warn(`Initialization of backend ${e} failed`),console.warn(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:r,asyncInit:a}=this.initializeBackend(n);if(a||r)return{name:n,asyncInit:a}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),r=n.backend,a=this.readSync(t),s=r.refCount(t);r.disposeData(t,!0),n.backend=e,e.move(t,a,n.shape,n.dtype,s),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let r;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(r),()=>(r=t(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(e,t,n){e();try{let r=n();return t(),r}catch(r){throw t(),r}}nextTensorId(){return Hc.nextTensorId++}nextVariableId(){return Hc.nextVariableId++}clone(e){let t=$.runKernel(Rs,{x:e}),n={x:e},r=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return $.runKernel(gs,o,l)}}),a=[];return this.addTapeNode(this.state.activeScope.name,n,[t],r,a,{}),t}runKernel(e,t,n){if(pd(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),a=0;n.forEach(o=>{a+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-t-a-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],r=this.isTapeOn(),a=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=$f(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if($f(e)){let{kernelName:p,inputs:f,attrs:m}=e;this.backendName==null&&this.backend;let A=pd(p,this.backendName);M(A!=null,()=>`Cannot find registered kernel '${p}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=A.kernelFunc({inputs:f,attrs:m,backend:this.backend});let g=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,y,g);let w=g.map(b=>{if(b.rank!=null)return b;let{dataId:_,shape:x,dtype:S}=b;return this.makeTensorFromDataId(_,x,S)});if(r){let b=this.getTensorsForGradient(p,f,w);n=this.saveTensorsForBackwardMode(b)}return w}}else{let{forwardFunc:p}=e,f=m=>{!r||(n=m.map(A=>this.keep(this.clone(A))))};i=()=>{let m=this.backend.numDataIds();o=this.tidy(()=>p(this.backend,f));let A=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,m,A),A}}let{inputs:u,attrs:c}=e,h=$f(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),r&&this.addTapeNode(l,u,t,h,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-a,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(p=>u[p]!=null?u[p].shape:null),outputShapes:t.map(p=>p.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let r=Sf(e);if(r!=null){let a=r.inputsToSave||[],s=r.outputsToSave||[],i;r.saveAllInputs?(M(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=a.map(l=>t[l]);let o=n.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,n,r){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let a=e;n==="string"&&Ta(e[0])&&(a=e.map(o=>Wc(o)));let s=r.write(a,t,n),i=new He(t,n,s,this.nextTensorId());if(this.trackTensor(i,r),n==="string"){let o=this.state.tensorInfo.get(s),l=h5(a);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,r){n=n||"float32";let a=new He(t,n,e,this.nextTensorId());return this.trackTensor(a,r),a}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==e.dtype&&(e=e.cast(r));let a=new jc(e,t,n,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*xf(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof jc||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*xf(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,r,a,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:a},o=Sf(e);o!=null&&(r=o.gradFunc),r!=null&&(i.gradient=l=>(l=l.map((u,c)=>{if(u==null){let h=n[c],d=$h(h.size,h.dtype);return this.makeTensor(d,h.shape,h.dtype)}return u}),r(l.length>1?l:l[0],a,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Tf(e),n=new Set(t.map(a=>a.id));for(let a=0;a<this.state.activeScope.track.length;a++){let s=this.state.activeScope.track[a];!s.kept&&!n.has(s.id)&&s.dispose()}let r=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(a=>{!a.kept&&a.scopeId===r.id&&this.track(a)})}gradients(e,t,n,r=!1){if(M(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let a=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));M(a instanceof He,()=>"The result y returned by f() must be a tensor.");let s=Uk(this.state.activeTape,t,a);if(!r&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[a.id]=n==null?e9(a.shape):n,jk(i,s,l=>this.tidy(l),t9);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:a,grads:o}})}customGrad(e){return M(Ea(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{M(t.every(i=>i instanceof He),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};t.forEach((i,o)=>{r[o]=i});let a=(i,o)=>(n=e(...t,o),M(n.value instanceof He,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),M(Ea(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),s=(i,o)=>{let l=n.gradFunc(i,o),u=Array.isArray(l)?l:[l];M(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),M(u.every(h=>h instanceof He),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let c={};return u.forEach((h,d)=>{c[d]=()=>h}),c};return this.runKernelFunc({forwardFunc:a,backwardsFunc:s,inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}async time(e){let t=Lc(),n=await this.backend.time(e);return n.wallMs=Lc()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new I5;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Hc.nextTensorId=0;Hc.nextVariableId=0;function e9(e){let t=wf(zt(e),"float32");return $.makeTensor(t,e,"float32")}function S5(){let e=y5();if(e._tfengine==null){let t=new A5(e);e._tfengine=new Hc(t)}return Rk(e._tfengine.ENV),Xk(()=>e._tfengine),e._tfengine}var $=S5();function t9(e,t){let n={a:e,b:t};return $.runKernel(Ca,n)}var Gc={};Le(Gc,{isBrowser:()=>N5,isMobile:()=>n9});function r9(){return typeof navigator!="undefined"&&navigator!=null}function n9(){if(r9()){let e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}return!1}function N5(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var _r=J();_r.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});_r.registerFlag("IS_BROWSER",()=>N5());_r.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");_r.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));_r.registerFlag("PROD",()=>!1);_r.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>_r.getBool("DEBUG"));_r.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);_r.registerFlag("IS_TEST",()=>!1);_r.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);_r.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);function Or(e,t){let n=e;if(ln(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||ln(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&J().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&T5(e,r,[]),r}function T5(e,t,n){if(n=n||[],!Array.isArray(e)&&!ln(e)){M(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}M(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),M(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let r=t.slice(1);for(let a=0;a<e.length;++a)T5(e[a],r,n.concat(a))}function E5(e,t,n,r){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${r}' must be ${e} tensor, but got ${t} tensor`)}}function C(e,t,n,r="numeric"){if(e instanceof He)return E5(r,e.dtype,t,n),e;let a=Mh(e);if(a!=="string"&&["bool","int32","float32"].indexOf(r)>=0&&(a=r),E5(r,a,t,n),e==null||!ln(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=Or(e,a);!ln(e)&&!Array.isArray(e)&&(e=[e]);let i=a!=="string"?fd(e,a):ps(e,[],!0);return $.makeTensor(i,s,a)}function qc(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((a,s)=>C(a,`${t}[${s}]`,n,r))}var C5="__op";function D(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+C5;let a=(...s)=>{$.startScope(n);try{let i=r(...s);return _f(i)&&console.error("Cannot return a Promise inside of tidy."),$.endScope(i),i}catch(i){throw $.endScope(null),i}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}function a9(e,t){let n=C(e,"real","complex"),r=C(t,"imag","complex");on(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let a={real:n,imag:r};return $.runKernel(Wh,a)}var $a=D({complex_:a9});function Da(e,t,n,r){if(r==null&&(r=Mh(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!ln(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){bf(t);let a=zt(t),s=zt(n);M(a===s,()=>`Based on the provided shape, [${t}], the tensor should have ${a} values but has ${s}`);for(let i=0;i<n.length;++i){let o=n[i],l=i===n.length-1?o!==zt(t.slice(i)):!0;M(n[i]===t[i]||!l,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!ln(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?fd(e,r):ps(e,[],!0),$.makeTensor(e,t,r)}function vr(e,t,n){let r=Or(e,n);return Da(e,t,r,n)}var Df={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},gd=4;async function i9(e,t){let n=[],r=[],a=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i<a.length;++i){let o=a[i],l=Array.isArray(e)?e[i].tensor:e[o];if(l.dtype!=="float32"&&l.dtype!=="int32"&&l.dtype!=="bool"&&l.dtype!=="string"&&l.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${o}': ${l.dtype}`);let u={name:o,shape:l.shape,dtype:l.dtype};if(l.dtype==="string"){let c=new Promise(async h=>{let d=await l.bytes(),p=d.reduce((A,y)=>A+y.length,0)+gd*d.length,f=new Uint8Array(p),m=0;for(let A=0;A<d.length;A++){let y=d[A],g=new Uint8Array(new Uint32Array([y.length]).buffer);f.set(g,m),m+=gd,f.set(y,m),m+=y.length}h(f)});r.push(c)}else r.push(l.data());t!=null&&(u.group=t),n.push(u)}let s=await Promise.all(r);return{data:s9(s),specs:n}}function R5(e,t){let n={},r,a=0;for(let s of t){let i=s.name,o=s.dtype,l=s.shape,u=zt(l),c;if("quantization"in s){let h=s.quantization;if(h.dtype==="uint8"||h.dtype==="uint16"){if(!("min"in h&&"scale"in h))throw new Error(`Weight ${s.name} with quantization ${h.dtype} doesn't have corresponding metadata min and scale.`)}else if(h.dtype==="float16"){if(o!=="float32")throw new Error(`Weight ${s.name} is quantized with ${h.dtype} which only supports weights of type float32 not ${o}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${h.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let d=Df[h.dtype],p=e.slice(a,a+u*d),f=h.dtype==="uint8"?new Uint8Array(p):new Uint16Array(p);if(o==="float32")if(h.dtype==="uint8"||h.dtype==="uint16"){c=new Float32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];c[m]=A*h.scale+h.min}}else if(h.dtype==="float16")r===void 0&&(r=o9()),c=r(f);else throw new Error(`Unsupported quantization type ${h.dtype} for weight type float32.`);else if(o==="int32"){if(h.dtype!=="uint8"&&h.dtype!=="uint16")throw new Error(`Unsupported quantization type ${h.dtype} for weight type int32.`);c=new Int32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];c[m]=Math.round(A*h.scale+h.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=u*d}else if(o==="string"){let h=zt(s.shape);c=[];for(let d=0;d<h;d++){let p=new Uint32Array(e.slice(a,a+gd))[0];a+=gd;let f=new Uint8Array(e.slice(a,a+p));c.push(f),a+=p}}else{let h=Df[o],d=e.slice(a,a+u*h);if(o==="float32")c=new Float32Array(d);else if(o==="int32")c=new Int32Array(d);else if(o==="bool")c=new Uint8Array(d);else if(o==="complex64"){c=new Float32Array(d);let p=new Float32Array(c.length/2),f=new Float32Array(c.length/2);for(let y=0;y<p.length;y++)p[y]=c[y*2],f[y]=c[y*2+1];let m=vr(p,l,"float32"),A=vr(f,l,"float32");n[i]=$a(m,A),m.dispose(),A.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=u*h}o!=="complex64"&&(n[i]=vr(c,l,o))}return n}function s9(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(s=>{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let r=new Uint8Array(t),a=0;return n.forEach(s=>{r.set(new Uint8Array(s.buffer),a),a+=s.byteLength}),r.buffer}var Of=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function M5(e){return Of?Buffer.byteLength(e):new Blob([e]).size}function l9(e){if(Of)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,a=t.length;r<a;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function c9(e){if(Of){let r=Buffer.from(e,"base64");return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;++r)n.set([t.charCodeAt(r)],r);return n.buffer}function zf(e){if(e.length===1)return e[0];let t=0;e.forEach(a=>{t+=a.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(a=>{n.set(new Uint8Array(a),r),r+=a.byteLength}),n.buffer}function F5(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function Xc(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:M5(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:M5(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function u9(){let e=n=>{let r=n<<13,a=0;for(;(r&8388608)==0;)a-=8388608,r<<=1;return r&=~8388608,a+=947912704,r|a},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function h9(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function d9(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function o9(){let e=u9(),t=h9(),n=d9();return r=>{let a=new ArrayBuffer(4*r.length),s=new Uint32Array(a);for(let i=0;i<r.length;i++){let o=r[i],l=e[n[o>>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(a)}}var Ct=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ct.instance==null&&(Ct.instance=new Ct),Ct.instance}static registerSaveRouter(e){Ct.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Ct.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Ct.getHandlers(e,"save")}static getLoadHandlers(e,t){return Ct.getHandlers(e,"load",t)}static getHandlers(e,t,n){let r=[];return(t==="load"?Ct.getInstance().loadRouters:Ct.getInstance().saveRouters).forEach(a=>{let s=a(e,n);s!==null&&r.push(s)}),r}},p9=e=>Ct.registerSaveRouter(e),f9=e=>Ct.registerLoadRouter(e),m9=e=>Ct.getSaveHandlers(e),A9=(e,t)=>Ct.getLoadHandlers(e,t),Pf="tensorflowjs",Lf=1,ui="models_store",Oa="model_info_store";function $5(){if(!J().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Wf(e){let t=e.result;t.createObjectStore(ui,{keyPath:"modelPath"}),t.createObjectStore(Oa,{keyPath:"modelPath"})}var hi=class{constructor(e){if(this.indexedDB=$5(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,r)=>{let a=this.indexedDB.open(Pf,Lf);a.onupgradeneeded=()=>Wf(a),a.onsuccess=()=>{let s=a.result;if(t==null){let i=s.transaction(ui,"readonly"),o=i.objectStore(ui).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),r(o.error)),i.oncomplete=()=>s.close()}else{let i=Xc(t),o=s.transaction(Oa,"readwrite"),l=o.objectStore(Oa),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),c;u.onsuccess=()=>{c=s.transaction(ui,"readwrite");let h=c.objectStore(ui).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});h.onsuccess=()=>n({modelArtifactsInfo:i}),h.onerror=d=>{l=o.objectStore(Oa);let p=l.delete(this.modelPath);p.onsuccess=()=>(s.close(),r(h.error)),p.onerror=f=>(s.close(),r(h.error))}},u.onerror=h=>(s.close(),r(u.error)),o.oncomplete=()=>{c==null?s.close():c.oncomplete=()=>s.close()}}},a.onerror=s=>r(a.error)})}};hi.URL_SCHEME="indexeddb://";var D5=e=>J().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(hi.URL_SCHEME)?y9(e.slice(hi.URL_SCHEME.length)):null;Ct.registerSaveRouter(D5);Ct.registerLoadRouter(D5);function y9(e){return new hi(e)}function g9(e){return e.startsWith(hi.URL_SCHEME)?e.slice(hi.URL_SCHEME.length):e}var x9=class{constructor(){this.indexedDB=$5()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Pf,Lf);n.onupgradeneeded=()=>Wf(n),n.onsuccess=()=>{let r=n.result,a=r.transaction(Oa,"readonly"),s=a.objectStore(Oa).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(r.close(),t(s.error)),a.oncomplete=()=>r.close()},n.onerror=r=>t(n.error)})}async removeModel(e){return e=g9(e),new Promise((t,n)=>{let r=this.indexedDB.open(Pf,Lf);r.onupgradeneeded=()=>Wf(r),r.onsuccess=()=>{let a=r.result,s=a.transaction(Oa,"readwrite"),i=s.objectStore(Oa),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return a.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),c=()=>{l=a.transaction(ui,"readwrite");let h=l.objectStore(ui).delete(e);h.onsuccess=()=>t(o.result.modelArtifactsInfo),h.onerror=d=>n(o.error)};u.onsuccess=c,u.onerror=h=>(c(),a.close(),n(o.error))}},o.onerror=u=>(a.close(),n(o.error)),s.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}},r.onerror=a=>n(r.error)})}},oa="/",cl="tensorflowjs_models",O5="info",w9="model_topology",b9="weight_specs",_9="weight_data",v9="model_metadata";function z5(e){return{info:[cl,e,O5].join(oa),topology:[cl,e,w9].join(oa),weightSpecs:[cl,e,b9].join(oa),weightData:[cl,e,_9].join(oa),modelMetadata:[cl,e,v9].join(oa)}}function k9(e){let t=e.split(oa);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(oa)}function I9(e){return e.startsWith(di.URL_SCHEME)?e.slice(di.URL_SCHEME.length):e}var di=class{constructor(e){if(!J().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=z5(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=Xc(e);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,l9(e.weightData));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:r}}catch(a){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${r.modelTopologyBytes}, weightSpecsBytes=${r.weightSpecsBytes}, weightDataBytes=${r.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let r=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(r==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=r;let a=this.LS.getItem(this.keys.modelMetadata);if(a!=null){let i=JSON.parse(a);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=c9(s),t}};di.URL_SCHEME="localstorage://";var P5=e=>J().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(di.URL_SCHEME)?S9(e.slice(di.URL_SCHEME.length)):null;Ct.registerSaveRouter(P5);Ct.registerLoadRouter(P5);function S9(e){return new di(e)}var N9=class{constructor(){M(J().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),M(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=cl+oa,n=oa+O5;for(let r=0;r<this.LS.length;++r){let a=this.LS.key(r);if(a.startsWith(t)&&a.endsWith(n)){let s=k9(a);e[s]=JSON.parse(this.LS.getItem(a))}}return e}async removeModel(e){e=I9(e);let t=z5(e);if(this.LS.getItem(t.info)==null)throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return this.LS.removeItem(t.info),this.LS.removeItem(t.topology),this.LS.removeItem(t.weightSpecs),this.LS.removeItem(t.weightData),n}},ul="://",Zn=class{constructor(){this.managers={}}static getInstance(){return Zn.instance==null&&(Zn.instance=new Zn),Zn.instance}static registerManager(e,t){M(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(ul)&&(e=e.slice(0,e.indexOf(ul))),M(e.length>0,()=>"scheme must not be an empty string.");let n=Zn.getInstance();M(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function xd(e){if(e.indexOf(ul)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Zn.getSchemes().join(",")}`);return{scheme:e.split(ul)[0],path:e.split(ul)[1]}}async function L5(e,t,n=!1){M(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=Ct.getLoadHandlers(e);M(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),M(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let a=r[0],s=Ct.getSaveHandlers(t);M(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),M(s.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let i=s[0],o=xd(e).scheme,l=xd(e).path,u=o===xd(e).scheme,c=await a.load();n&&u&&await Zn.getManager(o).removeModel(l);let h=await i.save(c);return n&&!u&&await Zn.getManager(o).removeModel(l),h.modelArtifactsInfo}async function T9(){let e=Zn.getSchemes(),t={};for(let n of e){let r=await Zn.getManager(n).listModels();for(let a in r){let s=n+ul+a;t[s]=r[a]}}return t}async function E9(e){let t=xd(e);return Zn.getManager(t.scheme).removeModel(t.path)}async function C9(e,t){return L5(e,t,!1)}async function R9(e,t){return L5(e,t,!0)}var M9=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(J().get("IS_BROWSER")){J().setPlatform("browser",new M9);try{Zn.registerManager(di.URL_SCHEME,new N9)}catch(e){}try{Zn.registerManager(hi.URL_SCHEME,new x9)}catch(e){}}var F9={importFetch:()=>W8()},Bf,$9=class{constructor(){this.util=require("util"),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return J().global.fetch!=null?J().global.fetch(e,t):(Bf==null&&(Bf=F9.importFetch()),Bf(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};J().get("IS_NODE")&&J().setPlatform("node",new $9);function Ue(e,t="float32",n){return t=t||"float32",bf(e),new Pt(e,t,n)}function D9(e,t){let n=C(e,"x","cast");if(!u5(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let r={x:n},a={dtype:t};return $.runKernel(gs,r,a)}var we=D({cast_:D9});function O9(e){let t={x:C(e,"x","clone","string_or_numeric")};return $.runKernel(Rs,t)}var zr=D({clone_:O9});function W5(e,t=!1){console.log(e.toString(t))}S5();var z9={buffer:Ue,cast:we,clone:zr,print:W5};Kk(z9);var kn={};Le(kn,{browserFiles:()=>P9,browserHTTPRequest:()=>W9,concatenateArrayBuffers:()=>zf,copyModel:()=>C9,decodeWeights:()=>R5,encodeWeights:()=>i9,fromMemory:()=>B9,getLoadHandlers:()=>A9,getModelArtifactsInfoForJSON:()=>Xc,getSaveHandlers:()=>m9,http:()=>Uf,isHTTPScheme:()=>Vf,listModels:()=>T9,loadWeights:()=>L9,moveModel:()=>R9,registerLoadRouter:()=>f9,registerSaveRouter:()=>p9,removeModel:()=>E9,weightsLoaderFactory:()=>B5,withSaveHandler:()=>V9});var U9="model",j9=".json",H9=".weights.bin";function V5(e){return new Promise(t=>setTimeout(t)).then(e)}var hl=class{constructor(e){if(!J().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(hl.URL_SCHEME)&&(e=e.slice(hl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=U9),this.modelTopologyFileName=e+j9,this.weightDataFileName=e+H9}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer);let a=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),s=this.jsonAnchor==null?document.createElement("a"):this.jsonAnchor;if(s.download=this.modelTopologyFileName,s.href=a,await V5(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await V5(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Xc(e)}}}};hl.URL_SCHEME="downloads://";var G9=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.files=e}async load(){let e=this.files[0],t=this.files.slice(1);return new Promise((n,r)=>{let a=new FileReader;a.onload=s=>{let i=JSON.parse(s.target.result),o=i.modelTopology;if(o==null){r(new Error(`modelTopology field is missing from file ${e.name}`));return}t.length===0&&n({modelTopology:o});let l=i.weightsManifest;if(l==null){r(new Error(`weightManifest field is missing from file ${e.name}`));return}let u;try{u=this.checkManifestAndWeightFiles(l,t)}catch(p){r(p);return}let c=[],h=[],d=[];l.forEach(p=>{p.paths.forEach(f=>{h.push(f),d.push(null)}),c.push(...p.weights)}),l.forEach(p=>{p.paths.forEach(f=>{let m=new FileReader;m.onload=A=>{let y=A.target.result,g=h.indexOf(f);if(d[g]=y,d.indexOf(null)===-1){let w={modelTopology:o,weightSpecs:c,weightData:zf(d),format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy};i.signature!=null&&(w.signature=i.signature),i.userDefinedMetadata!=null&&(w.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(w.modelInitializer=i.modelInitializer),n(w)}},m.onerror=A=>r(`Failed to weights data from file of path '${f}'.`),m.readAsArrayBuffer(u[f])})})},a.onerror=s=>r(`Failed to read model topology and weights manifest JSON from file '${e.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(e)})}checkManifestAndWeightFiles(e,t){let n=[],r=t.map(s=>F5(s.name)),a={};for(let s of e)s.paths.forEach(i=>{let o=F5(i);if(n.indexOf(o)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${o}'`);if(n.push(o),r.indexOf(o)===-1)throw new Error(`Weight file with basename '${o}' is not provided.`);a[i]=t[r.indexOf(o)]});if(n.length!==t.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${t.length}).`);return a}},X9=e=>J().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(hl.URL_SCHEME)?q9(e.slice(hl.URL_SCHEME.length)):null;Ct.registerSaveRouter(X9);function q9(e="model"){return new hl(e)}function P9(e){return new G9(e)}function U5(e,t,n,r){i(e),n=n==null?0:n,r=r==null?1:r,o(n,r);let a=0,s=l=>(l.then(u=>{let c=n+ ++a/e.length*(r-n);return t(c),u}),l);function i(l){M(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){M(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),M(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),M(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function j5(e,t){t==null&&(t={});let n=t.fetchFunc==null?J().platform.fetch:t.fetchFunc,r=e.map(u=>n(u,t.requestInit,{isBinary:!0})),a=0,s=.5,i=(t.onProgress==null?await Promise.all(r):await U5(r,t.onProgress,a,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await U5(i,t.onProgress,o,l)}async function L9(e,t="",n,r){return B5(a=>j5(a,{requestInit:r}))(e,t,n)}function B5(e){return async(t,n="",r)=>{let a=t.map(()=>!1),s={},i=r!=null?r.map(()=>!1):[],o=[];if(t.forEach((p,f)=>{let m=0;p.weights.forEach(A=>{let y="quantization"in A?A.quantization.dtype:A.dtype,g=Df[y]*zt(A.shape),w=()=>{a[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:A,groupOffset:m,sizeBytes:g})};r!=null?r.forEach((b,_)=>{b===A.name&&(w(),i[_]=!0)}):w(),o.push(A.name),m+=g})}),!i.every(p=>p)){let p=r.filter((f,m)=>!i[m]);throw new Error(`Could not find weights in manifest with names: ${p.join(", ")}.
|
|
Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=a.reduce((p,f,m)=>(f&&p.push(m),p),[]),u=[];l.forEach(p=>{t[p].paths.forEach(f=>{let m=n+(n.endsWith("/")?"":"/")+f;u.push(m)})});let c=await e(u),h={},d=0;return l.forEach(p=>{let f=t[p].paths.length,m=0;for(let w=0;w<f;w++)m+=c[d+w].byteLength;let A=new ArrayBuffer(m),y=new Uint8Array(A),g=0;for(let w=0;w<f;w++){let b=new Uint8Array(c[d+w]);y.set(b,g),g+=b.byteLength}s[p].forEach(w=>{let b=A.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=R5(b,[w.manifestEntry]);for(let x in _)h[x]=_[x]}),d+=f}),h}}var K9="application/octet-stream",Z9="application/json",jf=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(M(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=J().platform.fetch,M(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&M(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer),t.body.append("model.json",new Blob([JSON.stringify(r)],{type:Z9}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:K9}),"model.weights.bin");let a=await this.fetch(this.path,t);if(a.ok)return{modelArtifactsInfo:Xc(e),responses:[a]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${a.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(p){let f=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?f+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":f+=" Please make sure the server is serving valid JSON for this request.",new Error(f)}let n=t.modelTopology,r=t.weightsManifest,a=t.generatedBy,s=t.convertedBy,i=t.format,o=t.signature,l=t.userDefinedMetadata;if(n==null&&r==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);let u,c;r!=null&&([u,c]=await this.loadWeights(r));let h={modelTopology:n,weightSpecs:u,weightData:c,generatedBy:a,convertedBy:s,format:i};o!=null&&(h.signature=o),l!=null&&(h.userDefinedMetadata=l);let d=t.modelInitializer;return d&&(h.modelInitializer=d),h}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=Y9(t),a=this.weightPathPrefix||n,s=[];for(let u of e)s.push(...u.weights);let i=[],o=[];for(let u of e)for(let c of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(c)):i.push(a+c+r);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await j5(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,zf(l)]}};jf.URL_SCHEME_REGEX=/^https?:\/\//;function Y9(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),a=n>t?e.substring(n):"";return[r+"/",a]}function Vf(e){return e.match(jf.URL_SCHEME_REGEX)!=null}var H5=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>Vf(r)):n=Vf(e),n)return Uf(e,t)}return null};Ct.registerSaveRouter(H5);Ct.registerLoadRouter(H5);function Uf(e,t){return new jf(e,t)}function W9(e,t){return Uf(e,t)}var Hf=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},J9=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function B9(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new Hf(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Hf({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Hf({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function V9(e){return new J9(e)}var G5={};Le(G5,{confusionMatrix:()=>Q9});function eI(e,t,n=!1,r=!1){let a=C(e,"a","matMul"),s=C(t,"b","matMul");[a,s]=It(a,s);let i={a,b:s},o={transposeA:n,transposeB:r};return $.runKernel(ys,i,o)}var Ke=D({matMul_:eI});function tI(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:C(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:r};return $.runKernel(Bs,a,s)}var dl=D({oneHot_:tI});function nI(e,t){let n=C(e,"x","transpose");if(t==null&&(t=n.shape.map((s,i)=>i).reverse()),M(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(s=>{M(s>=0&&s<n.rank,()=>`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},a={perm:t};return $.runKernel(si,r,a)}var st=D({transpose_:nI});function rI(e,t,n){let r=C(e,"labels","confusionMatrix"),a=C(t,"predictions","confusionMatrix");M(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),M(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),M(a.rank===1,()=>`Expected the rank of predictions to be 1, but got ${a.rank}`),M(r.shape[0]===a.shape[0],()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${a.shape[0]}. Labels and predictions should have the same number of elements.`),M(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=dl(we(r,"int32"),n),i=dl(we(a,"int32"),n),o=st(s),l=Ke(o,i);return we(l,"int32")}var Q9=D({confusionMatrix_:rI}),pl={};Le(pl,{fromPixels:()=>iI,fromPixelsAsync:()=>aI,toPixels:()=>sI});function wd(e,t,n){if(ds(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=Or(e,n);if(r.length!==3&&r.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Da(e,t,r,n)}var fl;function q5(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,r=!1,a=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)r=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)a=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(a){let d=2;if(a&&e.readyState<d)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.")}if(pd(dd,$.backendName)!=null){let d={pixels:e},p={numChannels:t};return $.runKernel(dd,d,p)}let[l,u]=a?[e.videoWidth,e.videoHeight]:[e.width,e.height],c;i?c=e.getContext("2d").getImageData(0,0,l,u).data:r||n?c=e.data:(s||a||o)&&(fl==null&&(fl=document.createElement("canvas").getContext("2d")),fl.canvas.width=l,fl.canvas.height=u,fl.drawImage(e,0,0,l,u),c=fl.getImageData(0,0,l,u).data);let h;if(t===4)h=new Int32Array(c);else{let d=l*u;h=new Int32Array(d*t);for(let p=0;p<d;p++)for(let f=0;f<t;++f)h[p*t+f]=c[p*4+f]}return wd(h,[u,l,t],"int32")}function oI(e){return e!=null&&e.data instanceof Uint8Array}function lI(){return typeof window!="undefined"&&typeof ImageBitmap!="undefined"&&window.hasOwnProperty("createImageBitmap")}function cI(e){return e!=null&&e.width!==0&&e.height!==0}function uI(e){return lI()&&!(e instanceof ImageBitmap)&&cI(e)&&!oI(e)}async function aI(e,t=3){let n=null;if(J().getBool("WRAP_TO_IMAGEBITMAP")&&uI(e)){let r;try{r=await createImageBitmap(e,{premultiplyAlpha:"none"})}catch(a){r=null}r!=null&&r.width===e.width&&r.height===e.height?n=r:n=e}else n=e;return q5(n,t)}async function sI(e,t){let n=C(e,"img","toPixels");if(!(e instanceof He)){let u=n;n=we(u,"int32"),u.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[r,a]=n.shape.slice(0,2),s=n.rank===2?1:n.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let i=await n.data(),o=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(a*r*4);for(let u=0;u<r*a;++u){let c=[0,0,0,255];for(let d=0;d<s;d++){let p=i[u*s+d];if(n.dtype==="float32"){if(p<0||p>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${p}.`)}else if(n.dtype==="int32"&&(p<0||p>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${p}.`);s===1?(c[0]=p*o,c[1]=p*o,c[2]=p*o):c[d]=p*o}let h=u*4;l[h+0]=Math.round(c[0]),l[h+1]=Math.round(c[1]),l[h+2]=Math.round(c[2]),l[h+3]=Math.round(c[3])}if(t!=null){t.width=a,t.height=r;let u=t.getContext("2d"),c=new ImageData(l,a,r);u.putImageData(c,0,0)}return n!==e&&n.dispose(),l}var iI=D({fromPixels_:q5}),Gf={};Le(Gf,{prepareAndValidate:()=>X5});function X5(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(zt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let a=t.shape,s=a[a.length-1],i=1;for(let h=0;h<a.length-1;++h)i*=a[h];let o=e.shape,l=a.slice();l.pop();let u=1;for(let h=s;h<n;++h)u*=o[h],l.push(o[h]);let c=[...ao(e.shape).map(h=>h/u),1].slice(0,s);return[l,i,u,c]}var qf={};Le(qf,{calculateShapes:()=>K5,validateInput:()=>Kf,validateUpdateShape:()=>Xf});function Xf(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,a=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${a}.`;if(n.rank<a)throw new Error(s+` update.rank < ${a}. `);if(e.length<r+(n.rank-a))throw new Error(s+` Output shape length < ${r+(n.rank-a)}`);if(n.rank!==a+e.length-r)throw new Error(s+` update.rank != ${a+e.length-r}`);for(let i=0;i<a;++i)if(n.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${n.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<n.rank-a;++i)if(n.shape[i+a]!==e[i+r])throw new Error(s+` updates.shape[${i+a}] (${n.shape[i+a]}) != shape[${i+a}] (${e[i+a]})`)}function Kf(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(n.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(e.size===0)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}Xf(n,t,e)}function K5(e,t,n){let r=t.shape.length,a=r>1?t.shape[r-1]:1,s=n.length,i=1;for(let h=a;h<s;++h)i*=n[h];let o=a<1?1:a,l=zt(t.shape)/o,u=[...ao(n.slice(0,a)),1],c=zt(n);return{sliceRank:a,numUpdates:l,sliceSize:i,strides:u,outputSize:c}}var dn={};Le(dn,{assertParamsValid:()=>hI,computeFlatOffset:()=>pI,computeOutShape:()=>Z5,getNormalizedAxes:()=>J5,isSliceContinous:()=>dI,maskToAxes:()=>bd,parseSliceParams:()=>ax,sliceInfo:()=>fI,startForAxis:()=>nx,startIndicesWithElidedDims:()=>Q5,stopForAxis:()=>rx,stopIndicesWithElidedDims:()=>ex,stridesForAxis:()=>tx,stridesWithElidedDims:()=>Y5});function hI(e,t,n){let r=e.shape.length;M(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),M(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let a=0;a<r;++a)M(t[a]+n[a]<=e.shape[a],()=>`Error in slice${r}D: begin[${a}] + size[${a}] (${t[a]+n[a]}) would overflow input.shape[${a}] (${e.shape[a]})`)}function bd(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function Z5(e,t,n){let r=[];for(let a=0;a<e.length;a++)r[a]=Math.ceil((t[a]-e[a])/n[a]);return r}function Y5(e,t,n,r){let a=[...e];for(let s=a.length;s<r.length;s++)a.push(1);for(let s=0;s<n;s++)s===0?a[t]=1:(a.splice(t,0,1),a.pop());return a}function sx(e,t,n){return n<=e?n:n-(t-1)}function ix(e,t){let n=[];for(let r=0;r<e;r++)n.push(t+r);return n}function J5(e,t,n,r,a,s,i,o,l){let u=e.length,c=new Array(u),h=new Array(u),d=new Array(u);if(t.length&&n>0){let p=t[0],f=n+1;c=Q5(i,p,f,r,e),h=ex(o,p,f,a,e),d=Y5(s,p,f,e)}else for(let p=0;p<u;p++)c[p]=nx(i,r,s,e,p,l),h[p]=rx(o,a,s,e,p,l),d[p]=tx(s,p,l);return{begin:c,end:h,strides:d}}function Q5(e,t,n,r,a){let s=[...a],i=ix(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=0;else{let l=sx(t,n,o),u=r[l];e&1<<l&&(u=0),s[o]=u}return s}function ex(e,t,n,r,a){let s=[...a],i=ix(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=sx(t,n,o),u=r[l];e&1<<l&&(u=Number.MAX_SAFE_INTEGER),s[o]=u}for(let o=0;o<s.length;o++){let l=a[o];s[o]<0&&(s[o]+=l),s[o]=xc(0,s[o],a[o])}return s}function tx(e,t,n){let r=e[t];return(n&1<<t||r==null)&&(r=1),r}function nx(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),i=xc(0,i,l-1),i}function rx(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),o>0?i=xc(0,i,l):i=xc(-1,i,l-1),i}function dI(e,t,n){let r=n.length;for(let a=0;a<n.length;a++)if(n[a]>1){r=a;break}for(let a=r+1;a<n.length;a++)if(t[a]>0||n[a]!==e[a])return!1;return!0}function pI(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r<e.length-1;r++)n+=e[r]*t[r];return n}function ax(e,t,n){let r,a=e.shape.length;typeof t=="number"?r=[t,...new Array(a-1).fill(0)]:t.length<a?r=t.concat(new Array(a-t.length).fill(0)):r=t.slice(),r.forEach(i=>{M(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return n==null?s=new Array(a).fill(-1):typeof n=="number"?s=[n,...new Array(a-1).fill(-1)]:n.length<a?s=n.concat(new Array(a-n.length).fill(-1)):s=n,s=s.map((i,o)=>i>=0?i:(M(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-r[o])),[r,s]}function fI(e,t,n,r,a,s,i,o,l){let u=t.slice(),c=n.slice(),h=r;r==null&&(h=new Array(u.length));let d=bd(i);if(d.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(i!==0&&o!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(i!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let p=e.length-u.length,f=bd(o),m=e.slice();f.forEach(x=>{u[x]=0,c[x]=1,m.splice(x,0,1)});let{begin:A,end:y,strides:g}=J5(m,d,p,u,c,h,a,s,i);u=A,c=y,h=g;let w=bd(l);w.forEach(x=>{c[x]=u[x]+1,h[x]=1});let b=Z5(u,c,h),_=b.filter((x,S)=>w.indexOf(S)===-1);return{nonStrided:h.every(x=>x===1),$begin:u,$end:c,$strides:h,size:b,newShape:m,outShape:_}}var ae={};Le(ae,{Serializable:()=>ox,SerializationMap:()=>pi,registerClass:()=>za});var ox=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},pi=class{constructor(){this.classNameMap={}}static getMap(){return pi.instance==null&&(pi.instance=new pi),pi.instance}static register(e){pi.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function za(e){M(e.className!=null,()=>"Class being registered does not have the static className property defined."),M(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),M(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),pi.register(e)}var lx={};Le(lx,{TEST_EPSILON_FLOAT16:()=>cx,encodeStrings:()=>ux,expectArrayBuffersEqual:()=>wI,expectArraysClose:()=>mI,expectArraysEqual:()=>yI,expectNumbersClose:()=>gI,expectPromiseToFail:()=>AI,expectValuesInRange:()=>xI,testEpsilon:()=>Zf});var bI=.001,cx=.1;function mI(e,t,n){return n==null&&(n=Zf()),Yf(e,t,(r,a)=>Jf(r,a,n))}function Zf(){return $.backend.floatPrecision()===32?bI:cx}function Yf(e,t,n){let r=!0;if((ln(e)||ln(t))&&(r=!1),ln(e)&&ln(t)&&(r=!0),r){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=Or(e),o=Or(t);if(!ia(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let a=ln(e)?e:ps(e),s=ln(t)?t:ps(t);if(a.length!==s.length)throw new Error(`Arrays have different lengths actual: ${a.length} vs expected: ${s.length}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`);for(let i=0;i<s.length;++i){let o=a[i],l=s[i];if(!n(o,l))throw new Error(`Arrays differ: actual[${i}] = ${o}, expected[${i}] = ${l}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`)}}function AI(e,t){e().then(()=>t.fail(),()=>t())}function yI(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Ta(e)||Ta(e[0])||Ta(t)||Ta(t[0])?Yf(e,n,(r,a)=>r==a):Yf(e,t,(r,a)=>Jf(r,a,0))}function gI(e,t,n){if(n==null&&(n=Zf()),!Jf(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function Jf(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function xI(e,t,n){for(let r=0;r<e.length;r++)if(e[r]<t||e[r]>n)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function wI(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t))}function ux(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?ux(n):e[t]=Wc(n)}return e}var _I="3.3.0";function vI(){J().set("PROD",!0)}function kI(){J().set("DEBUG",!0)}function II(){J().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Qf(e){J().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}Zk(Qf);function SI(){$.disposeVariables()}function Pr(){return $}function _d(){return $.memory()}function cn(e){return $.profile(e)}function z(e,t){return $.tidy(e,t)}function Ie(e){Tf(e).forEach(t=>t.dispose())}function qt(e){return $.keep(e)}function NI(e){return $.time(e)}function TI(e){return $.setBackend(e)}function EI(){return $.ready()}function CI(){return $.backendName}function RI(e){$.removeBackend(e)}function em(e){return $.findBackend(e)}function MI(e){return $.findBackendFactory(e)}function ml(e,t,n=1){return $.registerBackend(e,t,n)}function hx(){return $.backend}function FI(e,t){J().setPlatform(e,t)}function $I(e,t){let n=C(e,"a","add"),r=C(t,"b","add");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(Ca,a)}var ie=D({add_:$I});function DI(e,t){let n=C(e,"a","floorDiv"),r=C(t,"b","floorDiv");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(Ts,a)}var vd=D({floorDiv_:DI});function OI(e,t){let n=C(e,"a","div"),r=C(t,"b","div");if([n,r]=It(n,r),n.dtype==="int32"&&r.dtype==="int32")return vd(n,r);let a={a:n,b:r},s={};return $.runKernel(Is,a,s)}var ge=D({div_:OI});function zI(e,t){let n=C(e,"a","mul"),r=C(t,"b","mul");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(Ws,a)}var O=D({mul_:zI});function PI(e){let t=C(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return $.runKernel(kc,n)}else{let n={x:t};return $.runKernel(io,n)}}var Lt=D({abs_:PI});function LI(e){let t={x:C(e,"x","acos")};return $.runKernel(oo,t)}var tm=D({acos_:LI});function WI(e){let t={x:C(e,"x","acosh")};return $.runKernel(lo,t)}var nm=D({acosh_:WI});function BI(e){M(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),M(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((a,s)=>C(a,`tensors${s}`,"addN")),n=t[0];t.forEach(a=>{if(a.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(a=>{if(!ia(a.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return $.runKernel(fs,r)}var Pa=D({addN_:BI});function VI(e,t=null,n=!1){let r={x:C(e,"x","all","bool")},a={axis:t,keepDims:n};return $.runKernel(Dh,r,a)}var kd=D({all_:VI});function UI(e,t=null,n=!1){let r={x:C(e,"x","any","bool")},a={axis:t,keepDims:n};return $.runKernel(Oh,r,a)}var Kc=D({any_:UI});function jI(e,t=0){let n={x:C(e,"x","argMax")},r={axis:t};return $.runKernel(ms,n,r)}var fi=D({argMax_:jI});function HI(e,t=0){let n={x:C(e,"x","argMin")},r={axis:t};return $.runKernel(bc,n,r)}var rm=D({argMin_:HI});function GI(e){let t={x:C(e,"x","asin")};return $.runKernel(co,t)}var am=D({asin_:GI});function qI(e){let t={x:C(e,"x","asinh")};return $.runKernel(uo,t)}var sm=D({asinh_:qI});function XI(e){let t={x:C(e,"x","atan")};return $.runKernel(ho,t)}var im=D({atan_:XI});function KI(e,t){let n=C(e,"a","atan2"),r=C(t,"b","atan2");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(fo,a)}var om=D({atan2_:KI});function ZI(e){let t={x:C(e,"x","atanh")};return $.runKernel(po,t)}var lm=D({atanh_:ZI});function YI(e,t,n,r,a="NHWC",s){let i=e[3],o=[...t,i],l=dx(a);return Zc(e,o,n,s,r,null,null,l)}function px(e,t,n,r,a,s,i="channelsLast"){let[o,l]=Id(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Zc(e,u,n,r,a,s,!1,i)}function JI(e,t,n,r,a,s,i="NDHWC"){let[o,l,u]=cm(t),c,h;if(i==="NDHWC")h="channelsLast",c=[o,l,u,e[4],e[4]];else if(i==="NCDHW")h="channelsFirst",c=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return fx(e,c,n,r,a,!1,h,s)}function Zc(e,t,n,r,a,s,i=!1,o="channelsLast"){let[l,u,c,h]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,c,h]=e;else if(o==="channelsFirst")[l,h,u,c]=e;else throw new Error(`Unknown dataFormat ${o}`);let[d,p,,f]=t,[m,A]=Id(n),[y,g]=Id(r),w=Al(d,y),b=Al(p,g),{padInfo:_,outHeight:x,outWidth:S}=QI(a,u,c,m,A,w,b,s,o),T=i?f*h:f,E;return o==="channelsFirst"?E=[l,T,x,S]:o==="channelsLast"&&(E=[l,x,S,T]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:c,inChannels:h,outHeight:x,outWidth:S,outChannels:T,padInfo:_,strideHeight:m,strideWidth:A,filterHeight:d,filterWidth:p,effectiveFilterHeight:w,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:g,inShape:e,outShape:E,filterShape:t}}function fx(e,t,n,r,a,s=!1,i="channelsLast",o){let[l,u,c,h,d]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,c,h,d]=e;else if(i==="channelsFirst")[l,d,u,c,h]=e;else throw new Error(`Unknown dataFormat ${i}`);let[p,f,m,,A]=t,[y,g,w]=cm(n),[b,_,x]=cm(r),S=Al(p,b),T=Al(f,_),E=Al(m,x),{padInfo:F,outDepth:P,outHeight:W,outWidth:V}=eS(a,u,c,h,y,g,w,S,T,E,o),U=s?A*d:A,H;return i==="channelsFirst"?H=[l,U,P,W,V]:i==="channelsLast"&&(H=[l,P,W,V,U]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:c,inWidth:h,inChannels:d,outDepth:P,outHeight:W,outWidth:V,outChannels:U,padInfo:F,strideDepth:y,strideHeight:g,strideWidth:w,filterDepth:p,filterHeight:f,filterWidth:m,effectiveFilterDepth:S,effectiveFilterHeight:T,effectiveFilterWidth:E,dilationDepth:b,dilationHeight:_,dilationWidth:x,inShape:e,outShape:H,filterShape:t}}function tS(e,t,n,r,a){r==null&&(r=um(e,t,n));let s=e[0],i=e[1],o=mi((s-t+2*r)/n+1,a),l=mi((i-t+2*r)/n+1,a);return[o,l]}function nS(e,t,n,r,a,s){a==null&&(a=um(e,t,r));let i=e[0],o=e[1],l=e[2],u=mi((i-t+2*a)/r+1,s),c=mi((o-t+2*a)/r+1,s),h=mi((l-t+2*a)/r+1,s);return[u,c,h,n]}function um(e,t,n,r=1){let a=Al(t,r);return Math.floor((e[0]*(n-1)-n+a)/2)}function Id(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function cm(e){return typeof e=="number"?[e,e,e]:e}function Al(e,t){return t<=1?e:e+(e-1)*(t-1)}function QI(e,t,n,r,a,s,i,o,l){let u,c,h;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let d=tS([t,n],s,r,e,o);c=d[0],h=d[1]}else if(e==="same"){c=Math.ceil(t/r),h=Math.ceil(n/a);let d=Math.max(0,(c-1)*r+s-t),p=Math.max(0,(h-1)*a+i-n),f=Math.floor(d/2),m=d-f,A=Math.floor(p/2),y=p-A;u={top:f,bottom:m,left:A,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((t-s+1)/r),h=Math.ceil((n-i+1)/a);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],p=l==="channelsLast"?e[1][1]:e[2][1],f=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:p,left:f,right:m,type:d===0&&p===0&&f===0&&m===0?"VALID":"EXPLICIT"},c=mi((t-s+d+p)/r+1,o),h=mi((n-i+f+m)/a+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:c,outWidth:h}}function eS(e,t,n,r,a,s,i,o,l,u,c){let h,d,p,f;if(typeof e=="number"){h={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=nS([t,n,r,1],o,1,a,e,c);d=m[0],p=m[1],f=m[2]}else if(e==="same"){d=Math.ceil(t/a),p=Math.ceil(n/s),f=Math.ceil(r/i);let m=(d-1)*a+o-t,A=(p-1)*s+l-n,y=(f-1)*i+u-r,g=Math.floor(m/2),w=m-g,b=Math.floor(A/2),_=A-b,x=Math.floor(y/2),S=y-x;h={top:b,bottom:_,left:x,right:S,front:g,back:w,type:"SAME"}}else if(e==="valid")h={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-o+1)/a),p=Math.ceil((n-l+1)/s),f=Math.ceil((r-u+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:h,outDepth:d,outHeight:p,outWidth:f}}function mi(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function La(e){let[t,n,r]=Id(e);return t===1&&n===1&&r===1}function Lr(e,t){return La(e)||La(t)}function dx(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function rS(e,t){let n={x:C(e,"x","reshape","string_or_numeric")},r={shape:t};return $.runKernel(Ho,n,r)}var j=D({reshape_:rS});function aS(e,t,n,r,a){let s=C(e,"x","avgPool","float32"),i=1;M(Lr(n,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=j(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),a!=null&&M(Gt(r),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=$.runKernel(As,u,c);return h=we(h,s.dtype),l?j(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Yc=D({avgPool_:aS});function sS(e,t,n,r,a,s="NDHWC"){let i=C(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=j(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),M(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),M(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),a!=null&&M(Gt(r),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},h=$.runKernel(_c,u,c);return h=we(h,o.dtype),l?j(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var hm=D({avgPool3d_:sS});function iS(e,t=0){M(e.length>=1,()=>"Pass at least one tensor to concat");let n=qc(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype ${s.dtype}. `)}),n.length===1)return zr(n[0]);let r=n,a={axis:t};return $.runKernel(mo,r,a)}var it=D({concat_:iS});function oS(e){let t={x:C(e,"x","sigmoid")};return $.runKernel(Js,t)}var On=D({sigmoid_:oS});function lS(e,t,n){let r=C(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let a={x:r},s={begin:t,size:n};return $.runKernel(Ko,a,s)}var Fe=D({slice_:lS});function cS(e){let t={x:C(e,"x","tanh")};return $.runKernel(ai,t)}var yl=D({tanh_:cS});function uS(e,t,n,r,a,s){let i=C(e,"forgetBias","basicLSTMCell"),o=C(t,"lstmKernel","basicLSTMCell"),l=C(n,"lstmBias","basicLSTMCell"),u=C(r,"data","basicLSTMCell"),c=C(a,"c","basicLSTMCell"),h=C(s,"h","basicLSTMCell"),d=it([u,h],1),p=Ke(d,o),f=ie(p,l),m=f.shape[0],A=f.shape[1]/4,y=[m,A],g=Fe(f,[0,0],y),w=Fe(f,[0,A],y),b=Fe(f,[0,A*2],y),_=Fe(f,[0,A*3],y),x=ie(O(On(g),yl(w)),O(c,On(ie(i,b)))),S=O(yl(x),On(_));return[x,S]}var hS=D({basicLSTMCell_:uS});function dS(e,t,n){let r=C(e,"x","batchToSpaceND"),a=t.reduce((o,l)=>o*l);M(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),M(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),M(r.shape[0]%a==0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${a}`);let s={x:r},i={blockShape:t,crops:n};return $.runKernel(vc,s,i)}var Jc=D({batchToSpaceND_:dS});function pS(e){let t;return e.rank===0||e.rank===1?t=j(e,[1,1,1,e.size]):e.rank===2?t=j(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=j(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function fS(e,t,n,r,a,s){s==null&&(s=.001);let i=C(e,"x","batchNorm"),o=C(t,"mean","batchNorm"),l=C(n,"variance","batchNorm"),u;a!=null&&(u=C(a,"scale","batchNorm"));let c;r!=null&&(c=C(r,"offset","batchNorm")),M(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),M(c==null||o.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),M(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let h={x:pS(i),scale:u,offset:c,mean:o,variance:l},d={varianceEpsilon:s},p=$.runKernel(Es,h,d);return j(p,i.shape)}var Ai=D({batchNorm_:fS});function mS(e,t,n,r,a,s){let i=C(e,"x","batchNorm"),o=C(t,"mean","batchNorm"),l=C(n,"variance","batchNorm"),u;a!=null&&(u=C(a,"scale","batchNorm"));let c;return r!=null&&(c=C(r,"offset","batchNorm")),M(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),M(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),M(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&M(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&M(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),Ai(i,o,l,c,u,s)}var mx=D({batchNorm2d_:mS});function AS(e,t,n,r,a,s){let i=C(e,"x","batchNorm"),o=C(t,"mean","batchNorm"),l=C(n,"variance","batchNorm"),u;a!=null&&(u=C(a,"scale","batchNorm"));let c;return r!=null&&(c=C(r,"offset","batchNorm")),M(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),M(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),M(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&M(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&M(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),Ai(i,o,l,c,u,s)}var Ax=D({batchNorm3d_:AS});function yS(e,t,n,r,a,s){let i=C(e,"x","batchNorm"),o=C(t,"mean","batchNorm"),l=C(n,"variance","batchNorm"),u;a!=null&&(u=C(a,"scale","batchNorm"));let c;return r!=null&&(c=C(r,"offset","batchNorm")),M(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),M(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),M(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&M(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&M(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),Ai(i,o,l,c,u,s)}var yx=D({batchNorm4d_:yS});function gS(e,t,n){let r=C(e,"x","bincount"),a=C(t,"weights","bincount");M(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),M(n>=0,()=>`size must be non-negative, but got ${n}.`),M(a.size===r.size||a.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${a.shape}.`);let s={x:r,weights:a},i={size:n};return $.runKernel(Lh,s,i)}var gx=D({bincount_:gS});function xS(e,t){let n=C(e,"broadcastTo","x"),r=n.shape;if(t.some(l=>!(l>0)||l%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let l=n.shape.slice();for(;l.length<t.length;)l.unshift(1);n=j(n,l)}let a=n.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(a[l]===t[l])s[l]=1;else if(n.shape[l]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return zr(n);let i={x:n},o={reps:s};return $.runKernel(Ma,i,o)}var Qc=D({broadcastTo_:xS});function wS(e){let t={x:C(e,"x","ceil")};return $.runKernel(xs,t)}var dm=D({ceil_:wS});function bS(e,t,n){let r=C(e,"x","clipByValue");M(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let a={x:r},s={clipValueMin:t,clipValueMax:n};return $.runKernel(Ra,a,s)}var In=D({clipByValue_:bS});function _S(e){return it(e,0)}var xx=D({concat1d_:_S});function vS(e,t){return it(e,t)}var gl=D({concat2d_:vS});function kS(e,t){return it(e,t)}var wx=D({concat3d_:kS});function IS(e,t){return it(e,t)}var bx=D({concat4d_:IS});function SS(e,t,n,r,a="NHWC",s=[1,1],i){let o=C(e,"x","conv2d"),l=C(t,"filter","conv2d"),u=o,c=!1;o.rank===3&&(c=!0,u=j(o,[1,o.shape[0],o.shape[1],o.shape[2]])),M(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),M(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),i!=null&&M(Gt(r),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h=a==="NHWC"?u.shape[3]:u.shape[1];M(h===l.shape[2],()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${l.shape[2]}.`),M(Lr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let d={x:u,filter:l},p={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},f=$.runKernel(ws,d,p);return c?j(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var la=D({conv2d_:SS});function NS(e,t,n,r,a="NWC",s=1,i){let o=C(e,"x","conv1d"),l=C(t,"filter","conv1d"),u=o,c=!1;o.rank===2&&(c=!0,u=j(o,[1,o.shape[0],o.shape[1]])),M(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),M(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),i!=null&&M(Gt(r),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),M(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),M(Lr(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),M(a==="NWC",()=>`Error in conv1d: got dataFormat of ${a} but only NWC is currently supported.`);let h=j(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=j(u,[u.shape[0],1,u.shape[1],u.shape[2]]),p=la(d,h,[1,n],r,"NHWC",[1,s],i);return c?j(p,[p.shape[2],p.shape[3]]):j(p,[p.shape[0],p.shape[2],p.shape[3]])}var Sd=D({conv1d_:NS});function TS(e,t,n,r,a,s="NHWC",i){M(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=j(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),M(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),M(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),M(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let c=s==="NHWC"?o[3]:o[1],h=s==="NHWC"?l.shape[3]:l.shape[1];M(c===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${n.shape[2]}.`),M(h===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${h}) must match output depth for filter ${n.shape[3]}.`),i!=null&&M(Gt(a),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let d={dy:l,filter:n},p={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,inputShape:o},f=$.runKernel(bs,d,p);return u?j(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var pm=D({conv2DBackpropInput_:TS});function ES(e,t,n,r,a,s){let i=C(e,"x","conv2dTranspose"),o=C(t,"filter","conv2dTranspose");return pm(n,i,o,r,a,"NHWC",s)}var Nd=D({conv2dTranspose_:ES});function CS(e,t,n,r,a="NDHWC",s=[1,1,1]){let i=C(e,"x","conv3d"),o=C(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=j(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),M(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),M(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),M(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),M(Lr(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),M(a==="NDHWC",()=>`Error in conv3d: got dataFormat of ${a} but only NDHWC is currently supported.`);let c={x:l,filter:o},h={strides:n,pad:r,dataFormat:a,dilations:s},d=$.runKernel(Ic,c,h);return u?j(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var fm=D({conv3d_:CS});function RS(e,t,n,r,a){M(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=j(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];M(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),M(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),M(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),M(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),M(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`);let c={dy:i,filter:n},h={pad:a,strides:r,inputShape:s},d=$.runKernel(Uh,c,h);return o?j(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var _x=D({conv3DBackpropInput_:RS});function MS(e,t,n,r,a){let s=C(e,"x","conv3dTranspose"),i=C(t,"filter","conv3dTranspose");return _x(n,s,i,r,a)}var FS=D({conv3dTranspose_:MS});function $S(e){let t={x:C(e,"x","cos")};return $.runKernel(_s,t)}var eu=D({cos_:$S});function DS(e){let t={x:C(e,"x","cosh")};return $.runKernel(Ao,t)}var Td=D({cosh_:DS});function OS(e,t=0,n=!1,r=!1){let a={x:C(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:r};return $.runKernel(vs,a,s)}var Ed=D({cumsum_:OS});function zS(e,t,n,r=!1){let a=C(e,"x","denseBincount"),s=C(t,"weights","denseBincount");M(a.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${a.dtype}`),M(a.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${a.rank}.`),M(n>=0,()=>`size must be non-negative, but got ${n}.`),M(s.size===a.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${a.shape}, weights shape: ${s.shape}.`);let i={x:a,weights:s},o={size:n,binaryOutput:r};return $.runKernel(jh,i,o)}var vx=D({denseBincount_:zS});function PS(e,t,n="NHWC"){let r=C(e,"x","depthToSpace"),a=n==="NHWC"?r.shape[1]:r.shape[2],s=n==="NHWC"?r.shape[2]:r.shape[3],i=n==="NHWC"?r.shape[3]:r.shape[1];M(a*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${a} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),M(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),M(i%(t*t)==0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${r.shape}`);let o={x:r},l={blockSize:t,dataFormat:n};return $.runKernel(go,o,l)}var mm=D({depthToSpace_:PS});function LS(e,t,n,r,a="NHWC",s=[1,1],i){let o=C(e,"x","depthwiseConv2d"),l=C(t,"filter","depthwiseConv2d"),u=o,c=!1;o.rank===3&&(c=!0,u=j(o,[1,o.shape[0],o.shape[1],o.shape[2]])),M(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),M(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),M(u.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),i!=null&&M(Gt(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h={x:u,filter:l},d={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},p=$.runKernel(ks,h,d);return c?j(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var xl=D({depthwiseConv2d_:LS});function WS(e){let t={x:C(e,"x","diag")};return $.runKernel(qh,t)}var BS=D({diag_:WS});function VS(e,t,n,r,a=[1,1],s="NHWC"){let i=C(e,"x","dilation2d"),o=C(t,"filter","dilation2d");M(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),M(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),M(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=j(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);let c={x:l,filter:o},h={strides:n,pad:r,dilations:a},d=$.runKernel(Sc,c,h);return u?j(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Am=D({dilation2d_:VS});function US(e,t){let n=e.length,r=[];for(let a=0;a<n;a++){let s=n-1-a,i=e[s]||1;(t[t.length-1-a]||1)>1&&i===1&&r.unshift(s)}return r}function Wt(e,t){let n=[];for(let r=0;r<t.length;r++){let a=e[e.length-r-1],s=t.length-r-1,i=t[s];(a==null||a===1&&i>1)&&n.unshift(s)}return n}function gt(e,t){let n=[],r=Math.max(e.length,t.length);for(let a=0;a<r;a++){let s=e[e.length-a-1];s==null&&(s=1);let i=t[t.length-a-1];if(i==null&&(i=1),s===1)n.unshift(i);else if(i===1)n.unshift(s);else if(s!==i){let o=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(o)}else n.unshift(s)}return n}function jS(e,t){let n=C(e,"a","equal"),r=C(t,"b","equal");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(bo,a)}var Wa=D({equal_:jS});function HS(e,t,n){let r=C(t,"a","where"),a=C(n,"b","where"),s=C(e,"condition","where","bool"),i=gt(r.shape,a.shape),o=Qc(r,i),l=Qc(a,i);s.rank===1&&M(s.shape[0]===r.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),s.rank!==1&&on(s.shape,l.shape,"Error in where: ");let u={condition:s,t:o,e:l};return $.runKernel(qo,u)}var Sn=D({where_:HS});function GS(e){let t={x:C(e,"x","zerosLike")};return $.runKernel(al,t)}var qe=D({zerosLike_:GS});function qS(e,t){let n=C(e,"a","div"),r=C(t,"b","div");[n,r]=It(n,r);let a=ge(n,r),s=qe(a),i=Wa(r,s);return Sn(i,s,a)}var ym=D({divNoNan_:qS});function XS(e,t){let n=C(e,"t1","dot"),r=C(t,"t2","dot");M((n.rank===1||n.rank===2)&&(r.rank===1||r.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let a=n.rank===1?n.size:n.shape[1],s=r.rank===1?r.size:r.shape[0];if(M(a===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${a} and ${s}.`),n.rank===1&&r.rank===1){let i=j(n,[1,-1]),o=j(r,[-1,1]),l=Ke(i,o);return j(l,[])}else if(n.rank===1&&r.rank===2){let i=j(n,[1,-1]),o=j(r,[r.shape[0],r.shape[1]]),l=Ke(i,o);return j(l,[l.size])}else if(n.rank===2&&r.rank===1){let i=j(r,[-1,1]),o=Ke(n,i);return j(o,[o.size])}else{let i=j(r,[r.shape[0],r.shape[1]]);return Ke(n,i)}}var kx=D({dot_:XS});function KS(e){let t={x:C(e,"x","elu")};return $.runKernel(xo,t)}var wl=D({elu_:KS});function ZS(e){let t=C(e,"x","erf");M(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=we(t,"float32"));let n={x:t};return $.runKernel(wo,n)}var gm=D({erf_:ZS});function YS(e){let t={x:C(e,"x","exp")};return $.runKernel(Ss,t)}var Yn=D({exp_:YS});function JS(e,t=0){let n=C(e,"x","expandDims","string_or_numeric");M(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},a={dim:t};return $.runKernel(_o,r,a)}var tn=D({expandDims_:JS});function QS(e){let t={x:C(e,"x","expm1")};return $.runKernel(vo,t)}var xm=D({expm1_:QS});function eN(e,t){let n=C(e,"x","tile","string_or_numeric");M(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},a={reps:t};return $.runKernel(Ma,r,a)}var Ba=D({tile_:eN});function tN(e,t,n,r="float32"){t==null&&(t=e);let a=Ue([e,t],r),s=e<=t?e:t;for(let o=0;o<s;++o)a.set(1,o,o);let i=j(a.toTensor(),[e,t]);if(n==null)return i;if(n.length===1)return Ba(tn(i,0),[n[0],1,1]);if(n.length===2)return Ba(tn(tn(i,0),0),[n[0],n[1],1,1]);if(n.length===3)return Ba(tn(tn(tn(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var wm=D({eye_:tN});function tu(e,t,n){let r={shape:e,value:t,dtype:n};return $.runKernel(Nc,{},r)}function nN(e){let t={x:C(e,"x","floor")};return $.runKernel(Ns,t)}var bl=D({floor_:nN});function rN(e,t,n=0,r=0){let a=C(e,"x","gather"),s=C(t,"indices","gather","int32"),i={x:a,indices:s},o={axis:n,batchDims:r};return $.runKernel(Io,i,o)}var yi=D({gather_:rN});function aN(e,t){let n=C(e,"a","greater"),r=C(t,"b","greater");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(No,a)}var lr=D({greater_:aN});function sN(e,t){let n=C(e,"a","greaterEqual"),r=C(t,"b","greaterEqual");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Cs,a)}var Va=D({greaterEqual_:sN});function iN(e){let t={input:C(e,"input","imag")};return $.runKernel(Qh,t)}var Cd=D({imag_:iN});function oN(e){let t={x:C(e,"x","isFinite")};return $.runKernel(To,t)}var Ix=D({isFinite_:oN});function lN(e){let t={x:C(e,"x","isInf")};return $.runKernel(Eo,t)}var Sx=D({isInf_:lN});function cN(e){let t={x:C(e,"x","isNaN")};return $.runKernel(Co,t)}var Nx=D({isNaN_:cN});function uN(e,t=.2){let n={x:C(e,"x","leakyRelu")},r={alpha:t};return $.runKernel(Ms,n,r)}var nu=D({leakyRelu_:uN});function hN(e,t){let n=C(e,"a","less"),r=C(t,"b","less");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Ro,a)}var Rd=D({less_:hN});function dN(e,t){let n=C(e,"a","lessEqual"),r=C(t,"b","lessEqual");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Mo,a)}var gi=D({lessEqual_:dN});function Tx(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let r={start:e,stop:t,num:n};return $.runKernel(ed,{},r)}function pN(e,t=5,n=1,r=1,a=.5){let s=C(e,"x","localResponseNormalization");M(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${s.rank}.`),M(Gt(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=j(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:n,alpha:r,beta:a},c=$.runKernel(Cc,l,u);return o?j(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var bm=D({localResponseNormalization_:pN});function fN(e){let t={x:C(e,"x","log")};return $.runKernel(Fs,t)}var zn=D({log_:fN});function mN(e){let t={x:C(e,"x","log1p")};return $.runKernel(Fo,t)}var Md=D({log1p_:mN});function AN(e){return M(Ea(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let r=C(t,"x","tf.grad","string_or_numeric"),a=n!=null?C(n,"dy","tf.grad"):null;return $.tidy(()=>{let{value:s,grads:i}=$.gradients(()=>e(r),[r],a);return a!=null&&on(s.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Fd(i),i[0]})}}function yN(e){return M(Ea(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{M(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=qc(t,"args","tf.grads","string_or_numeric"),a=n!=null?C(n,"dy","tf.grads"):null;return $.tidy(()=>{let{value:s,grads:i}=$.gradients(()=>e(...r),r,a);return a!=null&&on(s.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Fd(i),i})}}function gN(e){return M(Ea(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{M(t instanceof He,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),M(n==null||n instanceof He,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:a}=$.gradients(()=>e(t),[t],n);return Fd(r),{grad:r[0],value:a}}}function xN(e){return M(Ea(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{M(Array.isArray(t)&&t.every(a=>a instanceof He),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),M(n==null||n instanceof He,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=$.gradients(()=>e(...t),t,n);return n!=null&&on(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Fd(r.grads),r}}function Ex(e,t){M(Ea(e),()=>"The f passed in variableGrads(f) must be a function"),M(t==null||Array.isArray(t)&&t.every(u=>u instanceof jc),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in $.registeredVariables)t.push($.registeredVariables[u])}let r=n?t.filter(u=>!u.trainable):null,a=t.length;t=t.filter(u=>u.trainable),M(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${a} variables is trainable.`);let s=!0,{value:i,grads:o}=$.gradients(e,t,null,s);M(o.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),M(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((u,c)=>{o[c]!=null&&(l[u.name]=o[c])}),r!=null&&r.forEach(u=>l[u.name]=null),{value:i,grads:l}}function Wr(e){return $.customGrad(e)}function Fd(e){if(e.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that
|
|
the f you passed encloses all operations that lead from x to y.`)}function wN(e){let t={x:C(e,"x","neg")};return $.runKernel(Oo,t)}var St=D({neg_:wN});function bN(e){let t={x:C(e,"x","softplus")};return $.runKernel(Jo,t)}var _l=D({softplus_:bN});function _N(e){let t=C(e,"x","logSigmoid");return Wr(n=>({value:St(_l(St(n))),gradFunc:r=>O(r,On(St(n)))}))(t)}var Cx=D({logSigmoid_:_N});function vN(e,t=null,n=!1){let r={x:C(e,"x","max")},a={reductionIndices:t,keepDims:n};return $.runKernel($s,r,a)}var Nn=D({max_:vN});function kN(e,t){let n=C(e,"a","sub"),r=C(t,"b","sub");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(ri,a)}var xe=D({sub_:kN});function IN(e,t=null,n=!1){let r=C(e,"x","sum");r.dtype==="bool"&&(r=we(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return $.runKernel(ei,a,s)}var Me=D({sum_:IN});function SN(e,t=-1){let n=C(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return Wr((r,a)=>{let s=!0,i=Nn(r,t,!0),o=xe(r,i),l=xe(we(o,"float32"),zn(Me(Yn(o),t,s)));return a([l]),{value:l,gradFunc:(u,c)=>{let[h]=c,d=!0,p=Yn(h);return xe(u,O(Me(u,t,d),p))}}})(n)}var $d=D({logSoftmax_:SN});function _m(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function Rx(e,t,n){let r=e.length+t.length,a=[],s=0,i=0;for(let o=0;o<r;o++)n.indexOf(o)===-1?a.push(e[s++]):a.push(t[i++]);return a}function Mx(e,t){let n=[],r=e.length;for(let s=0;s<r;s++)t.indexOf(s)===-1&&n.push(e[s]);let a=t.map(s=>e[s]);return[n,a]}function xi(e,t){let n=t.map(r=>1);return Rx(e,n,t)}function NN(e,t,n){M(_m(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function Fx(e,t){if(_m(e,t))return null;let n=[];for(let r=0;r<t;++r)e.indexOf(r)===-1&&n.push(r);return e.forEach(r=>n.push(r)),n}function vm(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function TN(e,t){let n=[];for(let r=t-e;r<t;++r)n.push(r);return n}function EN(e,t=null,n=!1){let r=C(e,"x","logSumExp"),a=ir(t,r.shape),s=Nn(r,a,!0),i=xe(r,s),o=Yn(i),l=Me(o,a),u=zn(l),c=ie(j(s,u.shape),u);if(n){let h=xi(c.shape,a);return j(c,h)}return c}var km=D({logSumExp_:EN});function CN(e,t){let n=C(e,"a","logicalAnd","bool"),r=C(t,"b","logicalAnd","bool");gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel($o,a)}var cr=D({logicalAnd_:CN});function RN(e){let t={x:C(e,"x","logicalNot","bool")};return $.runKernel(Tc,t)}var ru=D({logicalNot_:RN});function MN(e,t){let n=C(e,"a","logicalOr","bool"),r=C(t,"b","logicalOr","bool");gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Ec,a)}var Dd=D({logicalOr_:MN});function FN(e,t){let n=C(e,"a","logicalXor","bool"),r=C(t,"b","logicalXor","bool");return gt(n.shape,r.shape),cr(Dd(e,t),ru(cr(e,t)))}var $x=D({logicalXor_:FN});function $N(e,t,n,r,a){let s=C(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=j(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),M(Lr(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&M(Gt(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=$.runKernel(Os,u,c);return l?j(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var au=D({maxPool_:$N});function DN(e,t=[1,1,1],n,r,a,s="NDHWC"){let i=C(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=j(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),M(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),M(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),a!=null&&M(Gt(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},h=$.runKernel(Rc,u,c);return l?j(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var Im=D({maxPool3d_:DN});function ON(e,t,n,r,a=!1){let s={x:C(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:a},o=$.runKernel(ad,s,i);return{result:o[0],indexes:o[1]}}var Dx=D({maxPoolWithArgmax_:ON});function zN(e,t){let n=C(e,"a","maximum"),r=C(t,"b","maximum");[n,r]=It(n,r),n.dtype==="bool"&&(n=we(n,"int32"),r=we(r,"int32")),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Ds,a)}var Br=D({maximum_:zN});function PN(e,t=null,n=!1){let r={x:C(e,"x","mean")},a={axis:t,keepDims:n};return $.runKernel(zs,r,a)}var Nt=D({mean_:PN});function LN(e,t=null,n=!1){let r={x:C(e,"x","min")},a={axis:t,keepDims:n};return $.runKernel(Ps,r,a)}var vl=D({min_:LN});function WN(e,t){let n=C(e,"a","minimum"),r=C(t,"b","minimum");[n,r]=It(n,r),n.dtype==="bool"&&(n=we(n,"int32"),r=we(r,"int32")),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(Ls,a)}var kl=D({minimum_:WN});function BN(e,t,n){M(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=C(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");M(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let a=n==="reflect"?1:0;for(let o=0;o<r.rank;o++)M(t[o].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),M(t[o][0]>=0&&t[o][0]<=r.shape[o]-a&&t[o][1]>=0&&t[o][1]<=r.shape[o]-a,()=>`Padding in dimension ${o} cannot be greater than or equal to ${r.shape[o]-a} or less than 0 for input of shape ${r.shape}`);let s={paddings:t,mode:n},i={x:r};return $.runKernel(Mc,i,s)}var Sm=D({mirrorPad_:BN});function VN(e,t){let n=C(e,"a","mod"),r=C(t,"b","mod");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(Do,a)}var Nm=D({mod_:VN});function UN(e){let t=C(e,"x","square"),n={};return $.runKernel("Square",{x:t},n)}var ct=D({square_:UN});function jN(e,t=null,n=!1){e=C(e,"x","moments");let r=ir(t,e.shape),a=Nt(e,r,n),s=a.shape;n||(s=xi(a.shape,r));let i=ct(xe(we(e,"float32"),j(a,s))),o=Nt(i,r,n);return{mean:a,variance:o}}var Od=D({moments_:jN});function HN(e,t,n,r){let a=C(t,"data","multiRNNCell"),s=qc(n,"c","multiRNNCell"),i=qc(r,"h","multiRNNCell"),o=a,l=[];for(let h=0;h<e.length;h++){let d=e[h](o,s[h],i[h]);l.push(d[0]),l.push(d[1]),o=d[1]}let u=[],c=[];for(let h=0;h<l.length;h+=2)u.push(l[h]),c.push(l[h+1]);return[u,c]}var GN=D({multiRNNCell_:HN});function qN(e,t,n,r=!1){let a=C(e,"logits","multinomial"),s=a.size,i=a.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?j(a,[1,-1]):a},l={numSamples:t,seed:n,normalized:r},u=$.runKernel(sd,o,l);return i===1?j(u,[u.size]):u}var Ox=D({multinomial_:qN});function XN(e,t){let n=C(e,"a","notEqual"),r=C(t,"b","notEqual");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r};return $.runKernel(zo,a)}var wi=D({notEqual_:XN});function Ft(e,t="float32"){if(t==="complex64"){let r=Ft(e,"float32"),a=Ft(e,"float32");return $a(r,a)}let n=$h(zt(e),t);return $.makeTensor(n,e,t)}function Vr(e,t="float32"){if(t==="complex64"){let r=Vr(e,"float32"),a=Ft(e,"float32");return $a(r,a)}let n=wf(zt(e),t);return $.makeTensor(n,e,t)}function KN(e){let t={x:C(e,"x","onesLike")};return $.runKernel(Bo,t)}var Pn=D({onesLike_:KN});function ZN(e,t){let n=C(e,"v1","outerProduct"),r=C(t,"v2","outerProduct");M(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);let a=j(n,[-1,1]),s=j(r,[1,-1]);return Ke(a,s)}var YN=D({outerProduct_:ZN});function JN(e,t,n=0){let r=C(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let a={paddings:t,constantValue:n},s={x:r};return $.runKernel(Vs,s,a)}var ca=D({pad_:JN});function QN(e,t,n=0){return M(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ca(e,[t],n)}var eT=D({pad1d_:QN});function tT(e,t,n=0){return M(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ca(e,t,n)}var nT=D({pad2d_:tT});function rT(e,t,n=0){return M(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ca(e,t,n)}var aT=D({pad3d_:rT});function sT(e,t,n=0){return M(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ca(e,t,n)}var iT=D({pad4d_:sT});function oT(e,t,n){let r=C(e,"x","spaceToBatchND");M(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),M(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),M(r.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+n[l-1][0]+n[l-1][1])%t[l-1]==0:i,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let a={x:r},s={blockShape:t,paddings:n};return $.runKernel(Dc,a,s)}var su=D({spaceToBatchND_:oT});function uT(e,t,n,r,a,s){a==null&&(a=[1,1]),s==null&&(s=1),r===0&&(r="valid");let i=C(e,"x","maxPool"),o=i,l=!1;i.rank===3&&(l=!0,o=j(i,[1,i.shape[0],i.shape[1],i.shape[2]])),M(Lr(s,a),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${a}'`);let u=px(o.shape,t,s,a,r),c=[u.dilationHeight,u.dilationWidth],h;r==="same"?h=cT([u.filterHeight,u.filterWidth],c):h=[[0,0],[0,0]];let d=c[0]===1&&c[1]===1,[p,f]=lT([u.inHeight,u.inWidth],c,h),m=d?r:"valid",A=d?o:su(o,c,p),y=(n==="avg"?()=>Yc(A,t,s,m):()=>au(A,t,s,m))(),g=d?y:Jc(y,c,f);return l?j(g,[g.shape[1],g.shape[2],g.shape[3]]):g}function lT(e,t,n){let r=n.map(c=>c[0]),a=n.map(c=>c[1]),s=e.concat(r,a),i=t.map((c,h)=>(c-s[h]%c)%c),o=a.map((c,h)=>c+i[h]),l=t.map((c,h)=>[r[h],o[h]]),u=t.map((c,h)=>[0,i[h]]);return[l,u]}function cT(e,t){let n=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),r=n.map(s=>Math.floor(s/2)),a=n.map((s,i)=>s-r[i]);return n.map((s,i)=>[r[i],a[i]])}var zx=D({pool_:uT});function hT(e,t){let n=C(e,"base","pow"),r=C(t,"exp","pow");[n,r]=It(n,r);let a={a:n,b:r};return $.runKernel(Us,a)}var ua=D({pow_:hT});function dT(e,t){let n=C(e,"x","prelu"),r=C(t,"alpha","prelu"),a={x:n,alpha:r};return $.runKernel(js,a)}var iu=D({prelu_:dT});function pT(e,t=null,n=!1){let r=C(e,"x","prod");r.dtype==="bool"&&(r=we(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return $.runKernel(Uo,a,s)}var zd=D({prod_:pT});function fT(e,t,n){let r=zt(e),a=null;if(n==null||n==="float32")a=new Float32Array(r);else if(n==="int32")a=new Int32Array(r);else if(n==="bool")a=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let s=0;s<r;s++)a[s]=t();return $.makeTensor(a,e,n)}var mT=D({rand_:fT}),Tm=ro(r5()),Em=class{constructor(e,t,n,r,a){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=a||Math.random();this.random=Tm.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let r=this.nextVal;return this.nextVal=NaN,r}let e,t,n=!1;for(;!n;){let r,a,s;do r=2*this.random()-1,a=2*this.random()-1,s=r*r+a*a;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*r*i,t=this.mean+this.stdDev*a*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},AT=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let a=r||Math.random();this.randu=Tm.alea(a.toString()),this.randn=new Em(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,a,s;for(;;){do r=this.randn.nextValue(),s=1+this.c*r;while(s<=0);if(s*=s*s,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),a=this.randu(),a<t||Math.log(a)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},yT=class{constructor(e=0,t=1,n,r){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Tm.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function gT(e,t,n=1,r="float32",a){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let s=new AT(t,n,r,a),i=Ue(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var xT=D({randomGamma_:gT});function wT(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error(`Unsupported data type ${r}`);let s=new Em(t,n,r,!1,a),i=Ue(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var Px=D({randomNormal_:wT});function bT(e,t=0,n=1,r="float32",a){let s=Ue(e,r),i=new yT(t,n,null,a);for(let o=0;o<s.values.length;o++)s.values[o]=i.nextValue();return s.toTensor()}var Il=D({randomUniform_:bT});function Pd(e,t,n=1,r="float32"){if(n===0)throw new Error("Cannot have a step of zero");let a={start:e,stop:t,step:n,dtype:r};return $.runKernel(Fc,{},a)}function _T(e){let t={input:C(e,"input","real")};return $.runKernel(id,t)}var ou=D({real_:_T});function vT(e){let t={x:C(e,"x","reciprocal")};return $.runKernel(jo,t)}var Cm=D({reciprocal_:vT});function kT(e){let t={x:C(e,"x","relu")};return $.runKernel(Hs,t)}var Ur=D({relu_:kT});function IT(e){let t={x:C(e,"x","relu6")};return $.runKernel(qs,t)}var Ld=D({relu6_:IT});function ST(e,t){let n={x:C(e,"x","reverse")},r={dims:t};return $.runKernel(Xs,n,r)}var Ln=D({reverse_:ST});function NT(e){let t=C(e,"x","reverse");return M(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),Ln(t,0)}var TT=D({reverse1d_:NT});function ET(e,t){let n=C(e,"x","reverse");return M(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),Ln(n,t)}var CT=D({reverse2d_:ET});function RT(e,t){let n=C(e,"x","reverse");return M(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),Ln(n,t)}var MT=D({reverse3d_:RT});function FT(e,t){let n=C(e,"x","reverse");return M(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),Ln(n,t)}var $T=D({reverse4d_:FT});function DT(e){let t={x:C(e,"x","round")};return $.runKernel(Ks,t)}var Rm=D({round_:DT});function OT(e){let t={x:C(e,"x","rsqrt")};return $.runKernel(Zs,t)}var Wd=D({rsqrt_:OT});function be(e,t){if((ln(e)&&t!=="string"||Array.isArray(e))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&ln(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Da(e,[],[],t)}function zT(e){let t={x:C(e,"x","selu")};return $.runKernel(Xo,t)}var Bd=D({selu_:zT});function PT(e,t,n,r,a,s=[1,1],i="NHWC"){let o=C(e,"x","separableConv2d"),l=C(t,"depthwiseFilter","separableConv2d"),u=C(n,"pointwiseFilter","separableConv2d"),c=o,h=!1;if(o.rank===3&&(h=!0,c=j(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");M(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),M(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),M(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),M(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),M(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],p=l.shape[3];M(u.shape[2]===d*p,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*p}, but got ${u.shape[2]}.`);let f=xl(c,l,r,a,i,s),m=la(f,u,1,"valid",i);return h?j(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Mm=D({separableConv2d_:PT});async function LT(e,t){let n=C(e,"x","setdiff1d"),r=C(t,"y","setdiff1d");M(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),M(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),M(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let a=await n.data(),s=await r.data(),i=new Set(s),o=0;for(let c=0;c<a.length;c++)i.has(a[c])||o++;let l=new Pt([o],n.dtype),u=new Pt([o],"int32");for(let c=0,h=0;c<a.length;c++)i.has(a[c])||(l.values[h]=a[c],u.values[h]=c,h++);return[l.toTensor(),u.toTensor()]}var Lx=LT;function WT(e){let t={x:C(e,"x","sign")};return $.runKernel(Yo,t)}var Fm=D({sign_:WT});function BT(e){let t={x:C(e,"x","sin")};return $.runKernel(Ys,t)}var Vd=D({sin_:BT});function VT(e){let t={x:C(e,"x","sinh")};return $.runKernel(Zo,t)}var Ud=D({sinh_:VT});function UT(e,t,n){let r=C(e,"x","slice1d");return M(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),Fe(r,[t],[n])}var jd=D({slice1d_:UT});function jT(e,t,n){let r=C(e,"x","slice2d");return M(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),Fe(r,t,n)}var $m=D({slice2d_:jT});function HT(e,t,n){let r=C(e,"x","slice3d");return M(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),Fe(r,t,n)}var Hd=D({slice3d_:HT});function GT(e,t,n){let r=C(e,"x","slice4d");return M(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),Fe(r,t,n)}var lu=D({slice4d_:GT});function qT(e,t=-1){let n=C(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let r={logits:n},a={dim:t};return $.runKernel(ti,r,a)}var cu=D({softmax_:qT});function XT(e){M(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return $.runKernel(Yh,t)}var uu=D({fft_:XT});function KT(e){M(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return $.runKernel(Jh,t)}var Sl=D({ifft_:KT});function ZT(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let a=j(e,[n,t]);r=Sl(a)}else{let a=[n,2*(t-1)],s=j(ou(e),[n,t]),i=j(Cd(e),[n,t]),o=Ln(Fe(s,[0,1],[n,t-2]),1),l=O(Ln(Fe(i,[0,1],[n,t-2]),1),be(-1)),u=it([s,o],1),c=it([i,l],1),h=j($a(u,c),[a[0],a[1]]);r=Sl(h)}if(r=ou(r),e.rank===3&&e.shape[0]!==0){let a=r,s=e.shape[0];r=j(r,[s,r.shape[0]/s,r.shape[1]]),a.dispose()}return r}var Gd=D({irfft_:ZT});function YT(e,t,n=0){let r={x:C(e,"x","split")},a={numOrSizeSplits:t,axis:n};return $.runKernel(Qo,r,a)}var Bt=D({split_:YT});function JT(e,t){M(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],r=e.size/n,a;if(t!=null&&t<n){let f=e.shape.map(A=>0),m=e.shape.map(A=>A);m[e.shape.length-1]=t,a=Fe(e,f,m),n=t}else if(t!=null&&t>n){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-n,a=it([e,Ft(f)],e.shape.length-1),n=t}else a=e;let s=qe(a),i=j($a(a,s),[r,n]),o=uu(i),l=Math.floor(n/2)+1,u=ou(o),c=Cd(o),h=Bt(u,[l,n-l],u.shape.length-1),d=Bt(c,[l,n-l],c.shape.length-1),p=a.shape.slice();return p[a.shape.length-1]=l,j($a(h[0],d[0]),p)}var hu=D({rfft_:JT});function QT(e){let t={x:C(e,"x","sqrt")};return $.runKernel(Qs,t)}var nn=D({sqrt_:QT});function eE(e,t){let n=C(e,"a","squaredDifference"),r=C(t,"b","squaredDifference");[n,r]=It(n,r),gt(n.shape,r.shape);let a={a:n,b:r},s={};return $.runKernel(ni,a,s)}var qd=D({squaredDifference_:eE});function tE(e,t){let n=C(e,"x","squeeze");return j(n,i5(n.shape,t).newShape)}var Ua=D({squeeze_:tE});function nE(e,t=0){let n=qc(e,"tensors","stack","string_or_numeric");M(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&M(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,a={axis:t};return $.runKernel(Vo,r,a)}var pn=D({stack_:nE});function rE(e,t=0){let n={x:C(e,"x","step")},r={alpha:t};return $.runKernel(Fa,n,r)}var Nl=D({step_:rE});function aE(e,t,n,r,a=0,s=0,i=0,o=0,l=0){let u={x:C(e,"x","stridedSlice")},c={begin:t,end:n,strides:r,beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return $.runKernel(el,u,c)}var Dm=D({stridedSlice_:aE});function sE(e){let t={x:C(e,"x","tan")};return $.runKernel(tl,t)}var Om=D({tan_:sE});function un(e,t){ds(e);let n=Or(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Da(e,null,n,t)}function Tn(e,t,n){if(ds(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=Or(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Da(e,t,r,n)}function iE(e,t,n){if(ds(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=Or(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Da(e,t,r,n)}function oE(e,t,n){if(ds(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=Or(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Da(e,t,r,n)}function lE(e,t,n){if(ds(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=Or(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,Da(e,t,r,n)}function cE(e,t=1,n=!0){let r=C(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let a=r.shape[r.shape.length-1];if(t>a)throw new Error(`'k' passed to topk() must be <= the last dimension (${a}) but got ${t}`);let s={x:r},i={k:t,sorted:n},[o,l]=$.runKernel(nl,s,i);return{values:o,indices:l}}var zm=D({topk_:cE});function uE(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Em(t,n,r,!0,a),i=Ue(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var Xd=D({truncatedNormal_:uE});function hE(e,t=0){let n=C(e,"x","unique","string_or_numeric");M(n.rank>0,()=>"The input tensor must be at least 1D");let r={x:n},a={axis:t},[s,i]=$.runKernel(hd,r,a);return{values:s,indices:i}}var Kd=D({unique_:hE});function dE(e,t,n){let r=C(e,"x","unsortedSegmentSum"),a=C(t,"segmentIds","unsortedSegmentSum","int32");M(Gt(n),()=>"numSegments must be of dtype int");let s={x:r,segmentIds:a},i={numSegments:n};return $.runKernel(zc,s,i)}var Pm=D({unsortedSegmentSum_:dE});function pE(e,t=0){let n=C(e,"x","unstack","string_or_numeric");M(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},a={axis:t};return $.runKernel(rl,r,a)}var ur=D({unstack_:pE});function Wx(e,t=!0,n,r){return $.makeVariable(e,t,n,r)}function Bx(e,t){let n=[];for(let s=0;s<t.length;s++)t[s]&&n.push(s);let r=Ue(e,"int32"),a=Ue([n.length,e.length],"int32");for(let s=0;s<n.length;s++){let i=r.indexToLoc(n[s]),o=s*e.length;a.values.set(i,o)}return a.toTensor()}async function fE(e){let t=C(e,"condition","whereAsync","bool"),n=await t.data(),r=Bx(t.shape,n);return e!==t&&t.dispose(),r}var Lm=fE;async function mE(e,t,n){let r=C(e,"tensor","boolMask"),a=C(t,"mask","boolMask","bool"),s=n==null?0:n,i=a.rank,o=r.shape;M(i>0,()=>"mask cannot be scalar"),on(o.slice(s,s+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=s;m<s+i;m++)l*=o[m];let u=o.slice(0,s).concat([l],o.slice(s+i)),c=j(r,u),h=j(a,[-1]),d=await Lm(h),p=Ua(d,[1]),f=yi(c,p,s);return e!==r&&r.dispose(),t!==a&&a.dispose(),p.dispose(),c.dispose(),h.dispose(),d.dispose(),f}var AE=mE;function yE(e,t="euclidean",n=null,r=!1){e=C(e,"x","norm");let a=Vx(e,t,n),s=a.shape;if(r){let i=ir(n,e.shape);s=xi(a.shape,i)}return j(a,s)}function Vx(e,t,n=null){if(e.rank===0)return Lt(e);if(e.rank!==1&&n===null)return Vx(j(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return Me(Lt(e),n);if(t===Infinity)return Nn(Lt(e),n);if(t===-Infinity)return vl(Lt(e),n);if(t==="euclidean"||t===2)return nn(Me(ua(Lt(e),be(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return Nn(Me(Lt(e),n[0]),n[1]-1);if(t===Infinity)return Nn(Me(Lt(e),n[1]),n[0]);if(t===-Infinity)return vl(Me(Lt(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return nn(Me(ct(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var Zd=D({norm_:yE});function gE(e,t,n,r,a=!0){let s=C(e,"v","movingAverage"),i=C(t,"x","movingAverage"),o=C(n,"decay","movingAverage");v5(s,i),M(ia(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=be(1),u=xe(l,o),c=O(xe(i,s),u);if(a){M(r!=null,()=>"When using zeroDebias: true, step is required.");let h=C(r,"step","movingAverage");c=ge(c,xe(l,ua(o,h)))}return ie(s,c)}var xE=D({movingAverage_:gE});function wE(e,t,n){let r=C(e,"indices","scatterND","int32"),a=C(t,"updates","scatterND");Kf(a,r,n);let s={indices:r,updates:a},i={shape:n};return $.runKernel(Go,s,i)}var Ux=D({scatterND_:wE});function bE(e,t,n,r){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let a=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===a))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${a}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function _E(e,t,n,r=0){let a=C(e,"sparseIndices","sparseToDense","int32"),s=C(t,"sparseValues","sparseToDense"),i=C(r,"defaultValue","sparseToDense",s.dtype);bE(a,s,n,i);let o={sparseIndices:a,sparseValues:s,defaultValue:i},l={outputShape:n};return $.runKernel(cd,o,l)}var Wm=D({sparseToDense_:_E});function vE(e,t){let n=C(t,"indices","gatherND","int32"),r={params:C(e,"x","gatherND"),indices:n};return $.runKernel(So,r)}var jx=D({gatherND_:vE});function kE(e,t){if(t==null)return e.shape.slice();if(ia(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r<e.shape.length;r++)t[r]==null&&e.shape[r]!=null?n.push(e.shape[r]):n.push(t[r]);return n}return t}function IE(e,t,n,r){let a=C(e,"x","dropout");if(M(a.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${a.dtype} tensor instead.`),M(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof He?a.clone():a;let s=kE(a,n),i=1-t,o=ge(bl(ie(Il(s,0,1,"float32",r),i)),i);return O(a,o)}var Hx=D({dropout_:IE});function Gx(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Bm(e,t,n){let r=1-e%2,a=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+r-1);a[s]=t-n*Math.cos(i)}return un(a,"float32")}async function SE(e,t,n=1){let r=C(e,"predictions","inTopK"),a=C(t,"targets","inTopK");M(r.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),M(r.rank-1===a.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${a.rank}`),on(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=r.shape[r.shape.length-1];M(n>0&&n<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`);let i=await r.data(),o=await a.data(),[l,u]=[i.length/s,s],c=o5("bool",l);for(let h=0;h<l;h++){let d=h*u,p=i.subarray(d,d+u),f=[];for(let m=0;m<p.length;m++)f.push({value:p[m],index:m});f.sort((m,A)=>A.value-m.value),c[h]=0;for(let m=0;m<n;m++)if(f[m].index===o[h]){c[h]=1;break}}return e!==r&&r.dispose(),t!==a&&a.dispose(),vr(c,a.shape,"bool")}var NE=SE,ja={};Le(ja,{conv2d:()=>TE,depthwiseConv2d:()=>EE,matMul:()=>CE});function RE(e,t,n,r,a,s="NHWC",i){let o=e;e.rank===3&&(o=j(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=j(t,[1,t.shape[0],t.shape[1],t.shape[2]])),M(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),M(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),M(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],c=s==="NHWC"?l.shape[3]:l.shape[1];M(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),M(c===n[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${n[3]}).`),i!=null&&M(Gt(a),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let h={x:o,dy:l},d={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,filterShape:n};return $.runKernel(Bh,h,d)}var Vm=D({conv2DBackpropFilter_:RE});function Yd(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return O(e,Nl(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Jd(e,t){let n=t,r=Wt(e.shape,t.shape);return r.length>0&&(n=Me(n,r)),j(n,e.shape)}function Qd(e,t,n,r){if(t==="linear")return e;if(t==="relu")return Ur(e);if(t==="elu")return wl(e);if(t==="relu6")return Ld(e);if(t==="prelu")return iu(e,n);if(t==="leakyrelu")return nu(e,r);throw new Error(`Unknown fused activation ${t}.`)}var ep=(e,t)=>!(e>0)||t==="linear";function ME({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(l=l||"linear",ep($.state.gradientDepth,l)===!1){let _=la(e,t,n,r,a,s,i);return o!=null&&(_=ie(_,o)),Qd(_,l,u,c)}let h=C(e,"x","conv2d"),d=C(t,"filter","conv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=j(h,[1,h.shape[0],h.shape[1],h.shape[2]])),M(p.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${p.rank}.`),M(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),i!=null&&M(Gt(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),M(p.shape[3]===d.shape[2],()=>`Error in conv2d: depth of input (${p.shape[3]}) must match input depth for filter ${d.shape[2]}.`),M(Lr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),M(a==="NHWC",()=>`Error in conv2d: got dataFormat of ${a} but only NHWC is currently supported.`);let m=Zc(p.shape,d.shape,n,s,r,i),A;o!=null&&(A=C(o,"bias","fused conv2d"),[A]=It(A,h),gt(m.outShape,A.shape));let y;u!=null&&(y=C(u,"prelu weights","fused conv2d"));let g=(_,x)=>{let[S,T,E,F]=x,P=Yd(_,E,l);M(La(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let W=pm(T.shape,P,S,n,r),V=Vm(T,P,S.shape,n,r),U=[W,V];if(F!=null){let H=Jd(F,P);U.push(H)}return U},w={x:p,filter:d,bias:A,preluActivationWeights:y},b={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:c};return o==null?Wr((_,x,S)=>{let T=$.runKernel(oi,w,b);return S([x,_,T]),f&&(T=j(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:g}})(p,d):Wr((_,x,S,T)=>{let E=$.runKernel(oi,w,b);return T([x,_,E,S]),f&&(E=j(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:g}})(p,d,A)}var TE=D({fusedConv2d_:ME});function FE(e,t,n,r,a,s=[1,1],i){let o=e;e.rank===3&&(o=j(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=j(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},c={strides:r,pad:a,dimRoundingMode:i,dilations:s,filterShape:n};return $.runKernel(Hh,u,c)}var qx=D({depthwiseConv2dNativeBackpropFilter_:FE});function $E(e,t,n,r,a,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=j(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:n},c={strides:r,pad:a,dimRoundingMode:i,dilations:s,inputShape:e},h=$.runKernel(Gh,u,c);return l?j(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Xx=D({depthwiseConv2dNativeBackpropInput_:$E});function DE({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(ep($.state.gradientDepth,l)===!1){let _=xl(e,t,n,r,a,s,i);return o!=null&&(_=ie(_,o)),Qd(_,l,u,c)}let h=C(e,"x","depthwiseConv2d"),d=C(t,"filter","depthwiseConv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=j(h,[1,h.shape[0],h.shape[1],h.shape[2]])),M(p.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${p.rank}.`),M(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),M(p.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${p.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),s==null&&(s=[1,1]),M(Lr(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),i!=null&&M(Gt(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${i} but got pad ${r}.`);let m=Zc(p.shape,d.shape,n,s,r,i,!0),A;o!=null&&(A=C(o,"bias","fused conv2d"),[A]=It(A,h),gt(m.outShape,A.shape));let y;u!=null&&(y=C(u,"prelu weights","fused depthwiseConv2d"));let g=(_,x)=>{M(La(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[S,T,E,F]=x,P=Yd(_,E,l),W=Xx(T.shape,P,S,n,r,s,i),V=qx(T,P,S.shape,n,r,s,i);if(F!=null){let U=Jd(A,P);return[W,V,U]}return[W,V]},w={x:p,filter:d,bias:A,preluActivationWeights:y},b={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:c};return o==null?Wr((_,x,S)=>{let T=$.runKernel(li,w,b);return S([x,_,T]),f&&(T=j(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:g}})(p,d):Wr((_,x,S,T)=>{let E=$.runKernel(li,w,b);return T([x,_,E,S]),f&&(E=j(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:g}})(p,d,A)}var EE=D({fusedDepthwiseConv2d_:DE});function OE({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:a,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o}){if(ep($.state.gradientDepth,s)===!1){let F=Ke(e,t,n,r);return a!=null&&(F=ie(F,a)),Qd(F,s,i,o)}let l=C(e,"a","fused matMul"),u=C(t,"b","fused matMul");[l,u]=It(l,u);let c=n?l.shape[l.rank-2]:l.shape[l.rank-1],h=r?u.shape[u.rank-1]:u.shape[u.rank-2],d=n?l.shape[l.rank-1]:l.shape[l.rank-2],p=r?u.shape[u.rank-2]:u.shape[u.rank-1],f=l.shape.slice(0,-2),m=u.shape.slice(0,-2),A=zt(f),y=zt(m);M(l.rank>=2&&u.rank>=2&&l.rank===u.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${u.rank}.`),M(ia(f,m),()=>`Error in fused matMul: outer dimensions (${f}) and (${m}) of Tensors with shapes ${l.shape} and ${u.shape} must match.`),M(c===h,()=>`Error in fused matMul: inner shapes (${c}) and (${h}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`);let g=l.shape.slice(0,-2).concat([d,p]),w=n?j(l,[A,c,d]):j(l,[A,d,c]),b=r?j(u,[y,p,h]):j(u,[y,h,p]),_;a!=null&&(_=C(a,"bias","fused matMul"),[_]=It(_,l),gt(g,_.shape));let x;i!=null&&(x=C(i,"prelu weights","fused matMul"));let S=(F,P)=>{let[W,V,U,H]=P,X=Yd(j(F,U.shape),U,s),G,ee;if(!n&&!r?(G=Ke(X,V,!1,!0),ee=Ke(W,X,!0,!1)):!n&&r?(G=Ke(X,V,!1,!1),ee=Ke(X,W,!0,!1)):n&&!r?(G=Ke(V,X,!1,!0),ee=Ke(W,X,!1,!1)):(G=Ke(V,X,!0,!0),ee=Ke(X,W,!0,!0)),a!=null){let Y=Jd(H,X);return[G,ee,Y]}else return[G,ee]},T={a:w,b,bias:_,preluActivationWeights:x},E={transposeA:n,transposeB:r,activation:s,leakyreluAlpha:o};return a==null?Wr((F,P,W)=>{let V=$.runKernel(ii,T,E);return W([F,P,V]),{value:j(V,g),gradFunc:S}})(w,b):Wr((F,P,W,V)=>{let U=$.runKernel(ii,T,E);return V([F,P,U,W]),{value:j(U,g),gradFunc:S}})(w,b,_)}var CE=D({fusedMatMul_:OE});function zE(e){return Bm(e,.54,.46)}var PE=D({hammingWindow_:zE});function LE(e){return Bm(e,.5,.5)}var Kx=D({hannWindow_:LE});function WE(e,t,n,r=!1,a=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Fe(e,s,t)),s+=n;if(r)for(;s<e.size;){let o=s+t-e.size,l=it([Fe(e,s,t-o),tu([o],a)]);i.push(l),s+=n}return i.length===0?Tn([],[0,t]):j(it(i),[i.length,t])}var Zx=D({frame_:WE});function BE(e,t,n,r,a=Kx){r==null&&(r=Gx(t));let s=Zx(e,t,n),i=O(s,a(t)),o=[];for(let l=0;l<s.shape[0];l++)o.push(hu(Fe(i,[l,0],[1,t]),r));return it(o)}var VE=D({stft_:BE});function UE(e,t,n,r,a="bilinear",s=0){let i=C(e,"image","cropAndResize"),o=C(t,"boxes","cropAndResize","float32"),l=C(n,"boxInd","cropAndResize","int32"),u=o.shape[0];M(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),M(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),M(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),M(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),M(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),M(a==="bilinear"||a==="nearest",()=>`method must be bilinear or nearest, but was ${a}`);let c={image:i,boxes:o,boxInd:l},h={method:a,extrapolationValue:s,cropSize:r};return $.runKernel(yo,c,h)}var jE=D({cropAndResize_:UE});function HE(e){let t=C(e,"image","flipLeftRight","float32");M(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return $.runKernel(ko,n,{})}var GE=D({flipLeftRight_:HE});function qE(e,t,n=0,r=.5){let a=C(e,"image","rotateWithOffset","float32");M(a.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${a.rank}.`);let s={image:a},i={radians:t,fillValue:n,center:r};return $.runKernel(sl,s,i)}var XE=D({rotateWithOffset_:qE});function Tl(e,t,n,r,a,s){r==null&&(r=.5),a==null&&(a=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return n=Math.min(n,i),M(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),M(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),M(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),M(t.rank===1,()=>"scores must be a 1D tensor"),M(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),M(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s}}function KE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=C(e,"boxes","nonMaxSuppression"),i=C(t,"scores","nonMaxSuppression"),o=Tl(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:r,scoreThreshold:a};return $.runKernel(Po,{boxes:s,scores:i},l)}var ZE=D({nonMaxSuppression_:KE});function JE(e,t,n){let r=YE(e,t,n),a=r<0?-(r+1):r;e.splice(a,0,t)}function YE(e,t,n){return eC(e,t,n||QE)}function QE(e,t){return e>t?1:e<t?-1:0}function eC(e,t,n){let r=0,a=e.length,s=0,i=!1;for(;r<a;){s=r+(a-r>>>1);let o=n(t,e[s]);o>0?r=s+1:(a=s,i=!o)}return i?r:-r-1}function Yx(e,t,n,r,a){return Um(e,t,n,r,a,0)}function Jx(e,t,n,r,a,s){return Um(e,t,n,r,a,0,!1,s,!0)}function Qx(e,t,n,r,a,s){return Um(e,t,n,r,a,s,!0)}function Um(e,t,n,r,a,s,i=!1,o=!1,l=!1){let u=[];for(let A=0;A<t.length;A++)t[A]>a&&u.push({score:t[A],boxIndex:A,suppressBeginIndex:0});u.sort(ew);let c=s>0?-.5/s:0,h=[],d=[];for(;h.length<n&&u.length>0;){let A=u.pop(),{score:y,boxIndex:g,suppressBeginIndex:w}=A;if(y<a)break;let b=!1;for(let _=h.length-1;_>=w;--_){let x=tC(e,g,h[_]);if(x>=r){b=!0;break}if(A.score=A.score*nC(r,c,x),A.score<=a)break}A.suppressBeginIndex=h.length,b||(A.score===y?(h.push(g),d.push(A.score)):A.score>a&&JE(u,A,ew))}let p=h.length,f=n-p;o&&f>0&&(h.push(...new Array(f).fill(0)),d.push(...new Array(f).fill(0)));let m={selectedIndices:h};return i&&(m.selectedScores=d),l&&(m.validOutputs=p),m}function tC(e,t,n){let r=e.subarray(t*4,t*4+4),a=e.subarray(n*4,n*4+4),s=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),o=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),u=Math.min(a[0],a[2]),c=Math.min(a[1],a[3]),h=Math.max(a[0],a[2]),d=Math.max(a[1],a[3]),p=(o-s)*(l-i),f=(h-u)*(d-c);if(p<=0||f<=0)return 0;let m=Math.max(s,u),A=Math.max(i,c),y=Math.min(o,h),g=Math.min(l,d),w=Math.max(y-m,0)*Math.max(g-A,0);return w/(p+f-w)}function nC(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function ew(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function rC(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=C(e,"boxes","nonMaxSuppressionAsync"),i=C(t,"scores","nonMaxSuppressionAsync"),o=Tl(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],c=l[1],{selectedIndices:h}=Yx(u,c,n,r,a);return s!==e&&s.dispose(),i!==t&&i.dispose(),un(h,"int32")}var aC=rC;function sC(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=C(e,"boxes","nonMaxSuppression"),o=C(t,"scores","nonMaxSuppression"),l=Tl(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},c={maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s},h=$.runKernel(Wo,u,c);return{selectedIndices:h[0],selectedScores:h[1]}}var iC=D({nonMaxSuppressionWithScore_:sC});async function oC(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=C(e,"boxes","nonMaxSuppressionAsync"),o=C(t,"scores","nonMaxSuppressionAsync"),l=Tl(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),c=u[0],h=u[1],{selectedIndices:d,selectedScores:p}=Qx(c,h,n,r,a,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:un(d,"int32"),selectedScores:un(p)}}var lC=oC;function cC(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=C(e,"boxes","nonMaxSuppression"),o=C(t,"scores","nonMaxSuppression"),l=Tl(i,o,n,r,a,null),u=l.maxOutputSize,c=l.iouThreshold,h=l.scoreThreshold,d={boxes:i,scores:o},p={maxOutputSize:u,iouThreshold:c,scoreThreshold:h,padToMaxOutputSize:s},f=$.runKernel(Lo,d,p);return{selectedIndices:f[0],validOutputs:f[1]}}var uC=D({nonMaxSuppressionPadded_:cC});async function hC(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=C(e,"boxes","nonMaxSuppressionAsync"),o=C(t,"scores","nonMaxSuppressionAsync"),l=Tl(i,o,n,r,a,null),u=l.maxOutputSize,c=l.iouThreshold,h=l.scoreThreshold,[d,p]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=Jx(d,p,u,c,h,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:un(f,"int32"),validOutputs:be(m,"int32")}}var dC=hC;function pC(e,t,n=!1,r=!1){let a=C(e,"images","resizeBilinear");M(a.rank===3||a.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${a.rank}.`),M(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),M(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=j(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=$.runKernel(Gs,o,l);return i?j(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var tw=D({resizeBilinear_:pC});function fC(e,t,n=!1,r=!1){let a=C(e,"images","resizeNearestNeighbor");M(a.rank===3||a.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${a.rank}.`),M(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),M(a.dtype==="float32"||a.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),M(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=j(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=$.runKernel($c,o,l);return i?j(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var nw=D({resizeNearestNeighbor_:fC});function mC(e,t,n="nearest",r="constant",a=0,s){let i=C(e,"image","transform","float32"),o=C(t,"transforms","transform","float32");M(i.rank===4,()=>`Error in transform: image must be rank 4,but got rank ${i.rank}.`),M(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),M(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:n,fillMode:r,fillValue:a,outputShape:s};return $.runKernel(ud,l,u)}var AC=D({transform_:mC});function yC(e,t,n){M(t%1==0,()=>`bandPart(): numLower must be an integer, got ${t}.`),M(n%1==0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=C(e,"a","bandPart");M(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let a=r.shape,[s,i]=r.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);let o=j(Pd(0,s,1,"int32"),[-1,1]),l=Pd(0,i,1,"int32"),u=xe(o,l),c=cr(gi(u,be(+t,"int32")),Va(u,be(-n,"int32"))),h=Ft([s,i],r.dtype);return j(pn(ur(j(r,[-1,s,i])).map(d=>Sn(c,d,h))),a)}var gC=D({bandPart_:yC});function xC(e){let t;if(Array.isArray(e)){t=!1,M(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let a=e[0].shape[0];for(let s=1;s<e.length;++s)M(e[s].shape[0]===a,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${a})`)}else t=!0,e=Bt(e,e.shape[0],0).map(a=>Ua(a,[0]));M(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],r=e;for(let a=0;a<e.length;++a)n.push($.tidy(()=>{let s=r[a];if(a>0)for(let i=0;i<a;++i){let o=O(Me(O(n[i],s)),n[i]);s=xe(s,o)}return ge(s,Zd(s,"euclidean"))}));return t?pn(n,0):n}var wC=D({gramSchmidt_:xC});function bC(e,t=!1){if(M(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return rw(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),r=ur(j(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),a=[],s=[];r.forEach(l=>{let[u,c]=rw(l,t);a.push(u),s.push(c)});let i=j(pn(a,0),e.shape),o=j(pn(s,0),e.shape);return[i,o]}}function rw(e,t=!1){return $.tidy(()=>{M(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],r=e.shape[1],a=wm(n),s=zr(e),i=Tn([[1]],[1,1]),o=zr(i),l=n>=r?r:n;for(let u=0;u<l;++u){let c=s,h=o,d=a;[o,s,a]=$.tidy(()=>{let p=Fe(s,[u,u],[n-u,1]),f=Zd(p),m=Fe(s,[u,u],[1,1]),A=Sn(lr(m,0),Tn([[-1]]),Tn([[1]])),y=xe(m,O(A,f)),g=ge(p,y);g.shape[0]===1?o=zr(i):o=it([i,Fe(g,[1,0],[g.shape[0]-1,g.shape[1]])],0);let w=St(ge(Ke(A,y),f)),b=Fe(s,[u,0],[n-u,r]),_=O(w,o),x=st(o);if(u===0)s=xe(b,Ke(_,Ke(x,b)));else{let E=xe(b,Ke(_,Ke(x,b)));s=it([Fe(s,[0,0],[u,r]),E],0)}let S=st(_),T=Fe(a,[0,u],[n,a.shape[1]-u]);if(u===0)a=xe(T,Ke(Ke(T,o),S));else{let E=xe(T,Ke(Ke(T,o),S));a=it([Fe(a,[0,0],[n,u]),E],1)}return[o,s,a]}),Ie([c,h,d])}return!t&&n>r&&(a=Fe(a,[0,0],[n,r]),s=Fe(s,[0,0],[r,r])),[a,s]})}var _C=D({qr_:bC}),fn;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(fn||(fn={}));function vC(e,t,n=fn.SUM_BY_NONZERO_WEIGHTS){let r=C(e,"losses","computeWeightedLoss"),a=null;t!=null&&(a=C(t,"weights","computeWeightedLoss"));let s=a==null?r:O(r,a);if(n===fn.NONE)return s;if(n===fn.SUM)return Me(s);if(n===fn.MEAN){if(a==null)return Nt(s);{let i=r.size/a.size,o=ge(Me(s),Me(a));return i>1?ge(o,be(i)):o}}if(n===fn.SUM_BY_NONZERO_WEIGHTS){if(a==null)return ge(Me(s),be(r.size));{let i=O(a,Vr(r.shape)),o=we(Me(wi(i,be(0))),"float32");return ge(Me(s),o)}}throw Error(`Unknown reduction: ${n}`)}var ha=D({computeWeightedLoss_:vC});function kC(e,t,n,r=fn.SUM_BY_NONZERO_WEIGHTS){let a=C(e,"labels","absoluteDifference"),s=C(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=C(n,"weights","absoluteDifference")),on(a.shape,s.shape,"Error in absoluteDifference: ");let o=Lt(xe(a,s));return ha(o,i,r)}var IC=D({absoluteDifference_:kC});function SC(e,t,n,r,a=fn.SUM_BY_NONZERO_WEIGHTS){let s=C(e,"labels","cosineDistance"),i=C(t,"predictions","cosineDistance"),o=null;r!=null&&(o=C(r,"weights","cosineDistance")),on(s.shape,i.shape,"Error in cosineDistance: ");let l=be(1),u=xe(l,Me(O(s,i),n,!0));return ha(u,o,a)}var NC=D({cosineDistance_:SC});function TC(e,t,n,r=fn.SUM_BY_NONZERO_WEIGHTS){let a=C(e,"labels","hingeLoss"),s=C(t,"predictions","hingeLoss"),i=null;n!=null&&(i=C(n,"weights","hingeLoss")),on(a.shape,s.shape,"Error in hingeLoss: ");let o=be(1);a=xe(O(be(2),a),o);let l=Ur(xe(o,O(a,s)));return ha(l,i,r)}var EC=D({hingeLoss_:TC});function CC(e,t,n,r=1,a=fn.SUM_BY_NONZERO_WEIGHTS){let s=C(e,"labels","huberLoss"),i=C(t,"predictions","huberLoss"),o=null;n!=null&&(o=C(n,"weights","huberLoss")),on(s.shape,i.shape,"Error in huberLoss: ");let l=be(r),u=Lt(xe(i,s)),c=kl(u,l),h=xe(u,c),d=ie(O(be(.5),ct(c)),O(l,h));return ha(d,o,a)}var RC=D({huberLoss_:CC});function MC(e,t,n,r=1e-7,a=fn.SUM_BY_NONZERO_WEIGHTS){let s=C(e,"labels","logLoss"),i=C(t,"predictions","logLoss"),o=null;n!=null&&(o=C(n,"weights","logLoss")),on(s.shape,i.shape,"Error in logLoss: ");let l=be(1),u=be(r),c=St(O(s,zn(ie(i,u)))),h=O(xe(l,s),zn(ie(xe(l,i),u))),d=xe(c,h);return ha(d,o,a)}var FC=D({logLoss_:MC});function $C(e,t,n,r=fn.SUM_BY_NONZERO_WEIGHTS){let a=C(e,"labels","meanSquaredError"),s=C(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=C(n,"weights","meanSquaredError")),on(a.shape,s.shape,"Error in meanSquaredError: ");let o=qd(a,s);return ha(o,i,r)}var DC=D({meanSquaredError_:$C});function OC(e,t){let n=C(e,"labels","sigmoidCrossEntropyWithLogits"),r=C(t,"logits","sigmoidCrossEntropyWithLogits");on(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let a=Ur(r),s=O(r,n),i=Md(Yn(St(Lt(r))));return ie(xe(a,s),i)}function zC(e,t,n,r=0,a=fn.SUM_BY_NONZERO_WEIGHTS){let s=C(e,"multiClassLabels","sigmoidCrossEntropy"),i=C(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=C(n,"weights","sigmoidCrossEntropy")),on(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){let u=be(r),c=be(1),h=be(.5);s=ie(O(s,xe(c,u)),O(h,u))}let l=OC(s,i);return ha(l,o,a)}var PC=D({sigmoidCrossEntropy_:zC});function LC(e,t,n=-1){if(n===-1&&(n=t.rank-1),n!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${n}`);return Wr((r,a,s)=>{let i=km(a,[n],!0),o=xe(we(a,"float32"),i);s([r,o]);let l=St(O(o,r));return{value:Me(l,[n]),gradFunc:(u,c)=>{let[h,d]=c,p=xi(u.shape,[n]);return[O(j(u,p),xe(we(h,"float32"),Yn(d))),O(j(u,p),xe(Yn(d),we(h,"float32")))]}}})(e,t)}function WC(e,t,n,r=0,a=fn.SUM_BY_NONZERO_WEIGHTS){let s=C(e,"onehotLabels","softmaxCrossEntropy"),i=C(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=C(n,"weights","softmaxCrossEntropy")),on(s.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){let u=be(r),c=be(1),h=be(s.shape[1]);s=ie(O(s,xe(c,u)),ge(u,h))}let l=LC(s,i);return ha(l,o,a)}var BC=D({softmaxCrossEntropy_:WC}),VC={fft:uu,ifft:Sl,rfft:hu,irfft:Gd},UC={hammingWindow:PE,hannWindow:Kx,frame:Zx,stft:VE},We={flipLeftRight:GE,resizeNearestNeighbor:nw,resizeBilinear:tw,rotateWithOffset:XE,cropAndResize:jE,nonMaxSuppression:ZE,nonMaxSuppressionAsync:aC,nonMaxSuppressionWithScore:iC,nonMaxSuppressionWithScoreAsync:lC,nonMaxSuppressionPadded:uC,nonMaxSuppressionPaddedAsync:dC,transform:AC},aw={bandPart:gC,gramSchmidt:wC,qr:_C},jC={absoluteDifference:IC,computeWeightedLoss:ha,cosineDistance:NC,hingeLoss:EC,huberLoss:RC,logLoss:FC,meanSquaredError:DC,sigmoidCrossEntropy:PC,softmaxCrossEntropy:BC},da=class extends ox{minimize(e,t=!1,n){let{value:r,grads:a}=this.computeGradients(e,n);if(n!=null){let s=n.map(i=>({name:i.name,tensor:a[i.name]}));this.applyGradients(s)}else this.applyGradients(a);return Ie(a),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return Ex(e,t)}dispose(){this.iterations_!=null&&Ie(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:be(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(da,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var tp=class extends da{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=$.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=$.registeredVariables[t],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:z(()=>qe(r).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:z(()=>qe(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[n].variable,o=this.accumulatedUpdates[n].variable;z(()=>{let l=ie(O(i,this.rho),O(ct(s),1-this.rho)),u=O(ge(nn(ie(o,this.epsilon)),nn(ie(i,this.epsilon))),s),c=ie(O(o,this.rho),O(ct(u),1-this.rho));i.assign(l),o.assign(c);let h=ie(O(u,-this.learningRate),r);r.assign(h)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ie(this.accumulatedGrads.map(e=>e.variable)),Ie(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};tp.className="Adadelta";za(tp);var np=class extends da{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=$.registeredVariables[t];if(this.accumulatedGrads[n]==null){let i=!1;this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:z(()=>tu(r.shape,this.initialAccumulatorValue).variable(i))}}let a=Array.isArray(e)?e[n].tensor:e[t];if(a==null)return;let s=this.accumulatedGrads[n].variable;z(()=>{let i=ie(s,ct(a));s.assign(i);let o=ie(O(ge(a,nn(ie(i,$.backend.epsilon()))),-this.learningRate),r);r.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ie(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};np.className="Adagrad";za(np);var rp=class extends da{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],z(()=>{this.accBeta1=be(t).variable(),this.accBeta2=be(n).variable()}),r==null&&(this.epsilon=$.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);z(()=>{let n=xe(1,this.accBeta1),r=xe(1,this.accBeta2);t.forEach((a,s)=>{let i=$.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:z(()=>qe(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${a}/v`,variable:z(()=>qe(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,c=this.accumulatedSecondMoment[s].variable,h=ie(O(u,this.beta1),O(l,1-this.beta1)),d=ie(O(c,this.beta2),O(ct(l),1-this.beta2)),p=ge(h,n),f=ge(d,r);u.assign(h),c.assign(d);let m=ie(O(ge(p,ie(nn(f),this.epsilon)),-this.learningRate),i);i.assign(m)}),this.accBeta1.assign(O(this.accBeta1,this.beta1)),this.accBeta2.assign(O(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ie(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ie(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),z(()=>{this.accBeta1.assign(ua(this.beta1,this.iterations_+1)),this.accBeta2.assign(ua(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};rp.className="Adam";za(rp);var ap=class extends da{constructor(e,t,n,r=null,a=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=a,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],z(()=>{this.iteration=be(0).variable(),this.accBeta1=be(t).variable()}),r==null&&(this.epsilon=$.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);z(()=>{let n=xe(1,this.accBeta1),r=ge(-this.learningRate,ie(O(this.iteration,this.decay),1));t.forEach((a,s)=>{let i=$.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:qe(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${a}/v`,variable:qe(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,c=this.accumulatedWeightedInfNorm[s].variable,h=ie(O(u,this.beta1),O(l,1-this.beta1)),d=O(c,this.beta2),p=Lt(l),f=Br(d,p);u.assign(h),c.assign(f);let m=ie(O(ge(r,n),ge(h,ie(f,this.epsilon))),i);i.assign(m)}),this.iteration.assign(ie(this.iteration,1)),this.accBeta1.assign(O(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ie(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ie(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};ap.className="Adamax";za(ap);var du=class extends da{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=Array.isArray(e)?e[n].tensor:e[t];if(r==null)return;let a=$.registeredVariables[t];z(()=>{let s=ie(O(this.c,r),a);a.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=qt(be(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};du.className="SGD";za(du);var sp=class extends du{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=be(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=$.registeredVariables[t];if(this.accumulations[n]==null){let i=!1;this.accumulations[n]={originalName:`${t}/momentum`,variable:z(()=>qe(r).variable(i))}}let a=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&z(()=>{let i,o=ie(O(this.m,a),s);this.useNesterov?i=ie(O(this.c,ie(s,O(o,this.m))),r):i=ie(O(this.c,o),r),a.assign(o),r.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ie(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};sp.className="Momentum";za(sp);var ip=class extends da{constructor(e,t=.9,n=0,r=null,a=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=a,r==null&&(this.epsilon=$.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=$.registeredVariables[t],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:z(()=>qe(r).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:z(()=>qe(r).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:z(()=>qe(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;z(()=>{let l=ie(O(i,this.decay),O(ct(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[n].variable,c=ie(O(u,this.decay),O(s,1-this.decay)),h=ge(O(s,this.learningRate),nn(xe(l,ie(ct(c),this.epsilon)))),d=ie(O(o,this.momentum),h);i.assign(l),u.assign(c),o.assign(d);let p=xe(r,d);r.assign(p)}else{let u=ie(O(i,this.decay),O(ct(s),1-this.decay)),c=ie(O(o,this.momentum),ge(O(s,this.learningRate),nn(ie(u,this.epsilon))));i.assign(u),o.assign(c);let h=xe(r,c);r.assign(h)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ie(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ie(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ie(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};ip.className="RMSProp";za(ip);var bi=class{static sgd(e){return new du(e)}static momentum(e,t,n=!1){return new sp(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,a=!1){return new ip(e,t,n,r,a)}static adam(e=.001,t=.9,n=.999,r=null){return new rp(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new tp(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,a=0){return new ap(e,t,n,r,a)}static adagrad(e,t=.1){return new np(e,t)}},_i={sgd:bi.sgd,momentum:bi.momentum,adadelta:bi.adadelta,adagrad:bi.adagrad,rmsprop:bi.rmsprop,adamax:bi.adamax,adam:bi.adam},HC=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function op(){return new Promise(e=>HC(()=>e()))}var R={};Le(R,{ERF_A1:()=>nR,ERF_A2:()=>rR,ERF_A3:()=>aR,ERF_A4:()=>sR,ERF_A5:()=>iR,ERF_P:()=>tR,PARALLELIZE_THRESHOLD:()=>jm,SELU_SCALE:()=>iw,SELU_SCALEALPHA:()=>sw,applyActivation:()=>Qd,assertAndGetBroadcastShape:()=>gt,assertAxesAreInnerMostDims:()=>NN,assertParamsConsistent:()=>GC,assignToTypedArray:()=>fR,axesAreInnerMostDims:()=>_m,calculateShapes:()=>K5,combineLocations:()=>Rx,complexWithEvenIndex:()=>hR,complexWithOddIndex:()=>dR,computeConv2DInfo:()=>Zc,computeConv3DInfo:()=>fx,computeDefaultPad:()=>um,computeDilation2DInfo:()=>YI,computeOptimalWindowSize:()=>XC,computeOutAndReduceShapes:()=>Mx,computeOutShape:()=>qC,computePool2DInfo:()=>px,computePool3DInfo:()=>JI,convertConv2DDataFormat:()=>dx,eitherStridesOrDilationsAreOne:()=>Lr,expandShapeToKeepDim:()=>xi,exponent:()=>AR,exponents:()=>mR,fromStringArrayToUint8:()=>xR,fromUint8ToStringArray:()=>gR,getAxesPermutation:()=>Fx,getBroadcastDims:()=>US,getComplexWithIndex:()=>pR,getFusedBiasGradient:()=>Jd,getFusedDyActivation:()=>Yd,getImageCenter:()=>KC,getInnerMostAxes:()=>TN,getPermuted:()=>YC,getReductionAxes:()=>Wt,getReshaped:()=>ZC,getReshapedPermuted:()=>JC,getSliceBeginCoords:()=>QC,getSliceSize:()=>eR,getUndoAxesPermutation:()=>vm,log:()=>lR,mergeRealAndImagArrays:()=>cR,prepareAndValidate:()=>X5,prepareSplitSize:()=>yR,segment_util:()=>ow,shouldFuse:()=>ep,slice_util:()=>dn,splitRealAndImagArrays:()=>uR,tupleValuesAreOne:()=>La,upcastType:()=>or,validateInput:()=>Kf,validateUpdateShape:()=>Xf,warn:()=>oR});function GC(e,t){let n=e[0].length;e.forEach((a,s)=>{M(a.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),M(t>=0&&t<n,()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((a,s)=>{for(let i=0;i<n;i++)M(i===t||a[i]===r[i],()=>`Error in concat${n}D: Shape of tensors[${s}] (${a}) does not match the shape of the rest (${r}) along the non-concatenated axis ${s}.`)})}function qC(e,t){let n=e[0].slice();for(let r=1;r<e.length;r++)n[t]+=e[r][t];return n}var jm=30;function XC(e){return e<=jm?e:Fh(e,Math.floor(Math.sqrt(e)))}function KC(e,t,n){let r=n*(typeof e=="number"?e:e[0]),a=t*(typeof e=="number"?e:e[1]);return[r,a]}function ZC(e,t,n,r=!0){let a=[];if(r)a=a.concat(t.slice(0)),a.push(e[0]/n),a=a.concat(e.slice(1));else{a=a.concat(e[0]);let s=t.length;for(let i=0;i<s;++i)a=a.concat([e[i+1]/t[i],t[i]]);a=a.concat(e.slice(s+1))}return a}function YC(e,t,n=!0){let r=[];if(n){r.push(t);for(let a=t+1;a<e;++a)a<=2*t?(r.push(a),r.push(a-(t+1))):r.push(a)}else{let a=[],s=[];for(let i=1;i<e;++i)i>=t*2+1||i%2==1?s.push(i):a.push(i);r.push(...a),r.push(0),r.push(...s)}return r}function JC(e,t,n,r=!0){let a=[];r?a.push(e[0]/n):a.push(e[0]*n);for(let s=1;s<e.length;++s)s<=t.length?r?a.push(t[s-1]*e[s]):a.push(e[s]/t[s-1]):a.push(e[s]);return a}function QC(e,t){let n=[0];for(let r=0;r<t;++r)n.push(e[r][0]);return n}function eR(e,t,n){let r=e.slice(0,1);for(let a=0;a<n;++a)r.push(e[a+1]-t[a][0]-t[a][1]);return r}var sw=1.7580993408473768,iw=1.0507009873554805,tR=.3275911,nR=.254829592,rR=-.284496736,aR=1.421413741,sR=-1.453152027,iR=1.061405429;function oR(...e){J().getBool("IS_TEST")||console.warn(...e)}function lR(...e){J().getBool("IS_TEST")||console.log(...e)}function cR(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let r=0;r<n.length;r+=2)n[r]=e[r/2],n[r+1]=t[r/2];return n}function uR(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=e[r],n[r/2]=e[r+1];return{real:t,imag:n}}function hR(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=0;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function dR(e){let t=Math.floor(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=2;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function pR(e,t){let n=e[t*2],r=e[t*2+1];return{real:n,imag:r}}function fR(e,t,n,r){e[r*2]=t,e[r*2+1]=n}function mR(e,t){let n=new Float32Array(e/2),r=new Float32Array(e/2);for(let a=0;a<Math.ceil(e/2);a++){let s=(t?2:-2)*Math.PI*(a/e);n[a]=Math.cos(s),r[a]=Math.sin(s)}return{real:n,imag:r}}function AR(e,t,n){let r=(n?2:-2)*Math.PI*(e/t),a=Math.cos(r),s=Math.sin(r);return{real:a,imag:s}}function yR(e,t,n=0){let r=[];if(typeof t=="number")M(e.shape[n]%t==0,()=>"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let a=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);M(a<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[n]-i}M(e.shape[n]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}var ow={};Le(ow,{collectGatherOpShapeInfo:()=>_R,computeOutShape:()=>bR,segOpComputeOptimalWindowSize:()=>wR});function wR(e,t){let n=!1,r;for(e<=jm?(r=e,n=!0):r=Fh(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=Fh(e,r+1);return r}function bR(e,t,n){let r=[],a=e.length;for(let s=0;s<a;s++)s!==t?r.push(e[s]):r.push(n);return r}function _R(e,t,n,r){let a=t.shape.length,s=e.shape.length;if(r!==0&&(r<-a||r>a))throw new Error(`Expect batchDims in the range of [-${a}, ${a}], but got ${r}`);if(r<0&&(r+=a),r>s)throw new Error(`batchDims (${r}) must be less than rank(x) (
|
|
${s}).`);if(n<r)throw new Error(`batchDims (${r}) must be less than or equal to axis (${n}).`);for(let h=0;h<r;++h)if(e.shape[h]!==t.shape[h])throw new Error(`x.shape[${h}]: ${e.shape[h]} should be equal to indices.shape[${h}]: ${t.shape[h]}.`);let i=e.shape[n],o=[],l=1,u=1,c=1;for(let h=0;h<r;++h)o.push(e.shape[h]),l*=e.shape[h];for(let h=r;h<n;h++)o.push(e.shape[h]),u*=e.shape[h];for(let h=r;h<a;h++)o.push(t.shape[h]);for(let h=n+1;h<s;h++)o.push(e.shape[h]),c*=e.shape[h];return{batchSize:l,sliceSize:c,outerSize:u,dimSize:i,outputShape:o}}function gR(e){try{return e.map(t=>md(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function xR(e){return e.map(t=>Wc(t))}var jr={};Le(jr,{nonMaxSuppressionV3Impl:()=>Yx,nonMaxSuppressionV4Impl:()=>Jx,nonMaxSuppressionV5Impl:()=>Qx,whereImpl:()=>Bx});function Se(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&v.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var vR=jr.whereImpl,lp=class extends gc{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new Rh(this,Pr())}nextDataId(){return lp.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,J().get("IS_NODE")&&R.warn(`
|
|
============================
|
|
Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
|
|
============================`));let r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let a=n.map(s=>v.encodeString(s));r=this.write(a,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,r,a){this.data.set(e,{values:t,dtype:r,refCount:a})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let r=this.readSync(n.real.dataId),a=this.readSync(n.imag.dataId);return R.mergeRealAndImagArrays(r,a)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>v.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Ue(e.shape,e.dtype,n)}makeOutput(e,t,n){let r=this.write(e,t,n);return Pr().makeTensorFromDataId(r,t,n,this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){Se([e],"where");let t=this.readSync(e.dataId);return vR(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};lp.nextDataId=0;var Hm={};Le(Hm,{addImpl:()=>cw,bincountImpl:()=>Gm,bincountReduceImpl:()=>uw,ceilImpl:()=>hw,concatImpl:()=>qm,expImpl:()=>dw,expm1Impl:()=>pw,floorImpl:()=>fw,gatherV2Impl:()=>mw,greaterImpl:()=>Aw,lessImpl:()=>yw,linSpaceImpl:()=>gw,logImpl:()=>xw,maxImpl:()=>ww,maximumImpl:()=>bw,minimumImpl:()=>_w,multiplyImpl:()=>Xm,negImpl:()=>vw,notEqualImpl:()=>kw,prodImpl:()=>Iw,rangeImpl:()=>Zm,rsqrtImpl:()=>Sw,simpleAbsImpl:()=>lw,sliceImpl:()=>cp,squaredDifferenceImpl:()=>Nw,stridedSliceImpl:()=>Tw,subImpl:()=>Ew,tileImpl:()=>Cw,topKImpl:()=>Rw,transposeImpl:()=>Km,uniqueImpl:()=>Mw});function lw(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var kR=e=>{let{x:t}=e.inputs,n=e.backend;Se(t,"abs");let r=new Float32Array(v.sizeFromShape(t.shape)),a=n.data.get(t.dataId).values;return r=lw(a),n.makeOutput(r,t.shape,"float32")},IR={kernelName:io,backendName:"cpu",kernelFunc:kR};function $t(e){return(t,n,r,a,s)=>{let i=R.assertAndGetBroadcastShape(t,n),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),c=v.getTypedArrayFromDType(s,u),h=t.length,d=n.length,p=v.computeStrides(t),f=v.computeStrides(n),m=R.getBroadcastDims(t,i),A=R.getBroadcastDims(n,i);if(m.length+A.length===0)for(let y=0;y<c.length;++y)c[y]=e(r[y%r.length],a[y%a.length]);else for(let y=0;y<c.length;++y){let g=v.indexToLoc(y,o,l),w=g.slice(-h);m.forEach(S=>w[S]=0);let b=v.locToIndex(w,h,p),_=g.slice(-d);A.forEach(S=>_[S]=0);let x=v.locToIndex(_,d,f);c[y]=e(r[b],a[x])}return[c,i]}}function Wn(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=n.makeTensorInfo(r.shape,"complex64"),l=n.data.get(o.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",s),imag:n.makeTensorInfo(a.shape,"float32",i)},o}var SR={kernelName:Wh,backendName:"cpu",kernelFunc:Wn};function up(e,t,n="float32"){if(n==="complex64"){let a=up(e,t,"float32"),s=up(e,t,"float32");return Wn({inputs:{real:a,imag:s},backend:e})}let r=v.makeZerosTypedArray(v.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function Hr(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var NR={kernelName:Rs,backendName:"cpu",kernelFunc:Hr};function vi(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.real,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var TR={kernelName:id,backendName:"cpu",kernelFunc:vi};function Ha(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return Hr({inputs:{x:a},backend:n});let i=up(n,a.shape,a.dtype),o=Ha({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=Wn({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=vi({inputs:{input:a},backend:n}),o=Ha({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(a.dtype,s)){let i=Hr({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32"){let i=n.data.get(a.dataId).values,o=Int32Array.from(i);return n.makeTensorInfo(a.shape,"int32",o)}if(s==="bool"){let i=n.data.get(a.dataId).values,o=v.toTypedArray([0],a.dtype),[l,u]=$t((c,h)=>c!==h?1:0)(a.shape,[],i,o,"bool");return n.makeTensorInfo(u,"bool",l)}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var ER={kernelName:gs,backendName:"cpu",kernelFunc:Ha};function Xt(e,t,n,r){return n==null?({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;Se([i,o],e);let u=l.data.get(i.dataId).values,c=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,u,c,h);return l.makeTensorInfo(p,h,d)}:({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=Ha({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),c=l.data.get(u.dataId),h=c.complexTensorInfos.real,d=c.complexTensorInfos.imag,p=l.data.get(h.dataId).values,f=l.data.get(d.dataId).values,m=Ha({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),A=l.data.get(m.dataId),y=A.complexTensorInfos.real,g=A.complexTensorInfos.imag,w=l.data.get(y.dataId).values,b=l.data.get(g.dataId).values,[_,x,S]=n(i.shape,o.shape,p,f,w,b),T=l.makeTensorInfo(S,"float32",_),E=l.makeTensorInfo(S,"float32",x),F=Wn({inputs:{real:T,imag:E},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(T),l.disposeIntermediateTensorInfo(E),F}else{let u=l.data.get(i.dataId).values,c=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,u,c,h);return l.makeTensorInfo(p,h,d)}}}function Ym(e){return(t,n,r,a,s,i)=>{let o=R.assertAndGetBroadcastShape(t,n),l=v.sizeFromShape(o),u=o.length,c=v.computeStrides(o),h=v.getTypedArrayFromDType("float32",l),d=v.getTypedArrayFromDType("float32",l),p=R.getBroadcastDims(t,o),f=R.getBroadcastDims(n,o),m=R.mergeRealAndImagArrays(r,a),A=R.mergeRealAndImagArrays(s,i),y=t.length,g=v.computeStrides(t),w=n.length,b=v.computeStrides(n);if(p.length+f.length===0)for(let _=0;_<h.length;_++){let x=_%m.length,S=_%A.length,T=e(m[x*2],m[x*2+1],A[S*2],A[S*2+1]);h[_]=T.real,d[_]=T.imag}else for(let _=0;_<h.length;_++){let x=v.indexToLoc(_,u,c),S=x.slice(-y);p.forEach(W=>S[W]=0);let T=v.locToIndex(S,y,g),E=x.slice(-w);f.forEach(W=>E[W]=0);let F=v.locToIndex(E,w,b),P=e(m[T*2],m[T*2+1],A[F*2],A[F*2+1]);h[_]=P.real,d[_]=P.imag}return[h,d,o]}}var cw=$t((e,t)=>e+t),CR=Ym((e,t,n,r)=>({real:e+n,imag:t+r})),pu=Xt(Ca,cw,CR),RR={kernelName:Ca,backendName:"cpu",kernelFunc:pu};function Gm(e,t,n,r,a){let s=v.sizeFromShape(r),i=v.makeZerosTypedArray(a,n);for(let o=0;o<e.length;o++){let l=e[o];if(l<0)throw new Error("Input x must be non-negative!");l>=a||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function uw(e,t,n,r=!1){let a=e.shape[0],s=e.shape[1],i=Ue([a,n],t.dtype);for(let o=0;o<a;o++)for(let l=0;l<s;l++){let u=e.get(o,l);if(u<0)throw new Error("Input x must be non-negative!");u>=n||(r?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function El(e){return(t,n,r)=>{let a=v.getTypedArrayFromDType(n,t.length);for(let s=0;s<t.length;++s)a[s]=e(t[s],r);return a}}function ot(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(Se(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=v.sizeFromShape(i.shape),c=n||i.dtype,h=v.getArrayFromDType(c,u);for(let d=0;d<u;++d)h[d]=t(l[d],a);return o.makeTensorInfo(i.shape,c,h)}}function Cl(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(Se(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=n||i.dtype,c=t(l,u,a);return o.makeTensorInfo(i.shape,u,c)}}var hw=El(e=>Math.ceil(e)),MR=Cl(xs,hw),FR={kernelName:xs,backendName:"cpu",kernelFunc:MR};function qm(e,t,n,r){let a=v.getArrayFromDType(n,v.sizeFromShape(t));if(r&&n!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);a.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=n==="string"?R.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;u<i.shape[0];++u){let c=u*t[1]+s;for(let h=0;h<i.shape[1];++h)a[c+h]=o[l++]}s+=i.shape[1]})}return a}var dw=El(e=>Math.exp(e)),Fw=Cl(Ss,dw),$R={kernelName:Ss,backendName:"cpu",kernelFunc:Fw},pw=El(e=>Math.expm1(e)),DR=Cl(vo,pw),OR={kernelName:vo,backendName:"cpu",kernelFunc:DR},fw=El(e=>Math.floor(e)),zR=Cl(Ns,fw),PR={kernelName:Ns,backendName:"cpu",kernelFunc:zR};function mw(e,t,n){let r=Ue(n,e.dtype);for(let a=0;a<r.size;++a){let s=r.indexToLoc(a).slice(),i=s[0],o=s[2],l=t.locToIndex([i,o]);s[2]=t.values[l];let u=e.locToIndex(s);r.values[a]=e.values[u]}return r}var Aw=$t((e,t)=>e>t?1:0),LR=Xt(No,Aw,null,"bool"),WR={kernelName:No,backendName:"cpu",kernelFunc:LR},yw=$t((e,t)=>e<t?1:0),BR=Xt(Ro,yw,null,"bool"),VR={kernelName:Ro,backendName:"cpu",kernelFunc:BR};function gw(e,t,n){let r=(t-e)/(n-1),a=v.makeZerosTypedArray(n,"float32");a[0]=e;for(let s=1;s<a.length;s++)a[s]=a[s-1]+r;return a}var xw=El(e=>Math.log(e)),UR=Cl(Fs,xw),jR={kernelName:Fs,backendName:"cpu",kernelFunc:UR};function ww(e,t,n,r){let a=v.getTypedArrayFromDType(r,v.sizeFromShape(n));for(let s=0;s<a.length;++s){let i=s*t,o=e[i];for(let l=0;l<t;++l){let u=e[i+l];u>o&&(o=u)}a[s]=o}return a}var bw=$t((e,t)=>Math.max(e,t)),HR=Xt(Ds,bw),GR={kernelName:Ds,backendName:"cpu",kernelFunc:HR},_w=$t((e,t)=>Math.min(e,t)),qR=Xt(Ls,_w),XR={kernelName:Ls,backendName:"cpu",kernelFunc:qR},Xm=$t((e,t)=>e*t),KR=Ym((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),Jm=Xt(Ws,Xm,KR),ZR={kernelName:Ws,backendName:"cpu",kernelFunc:Jm};function vw(e,t,n){let r=v.createScalarValue(-1,n);return Xm([],t,r,e,n)}function YR(e){let{inputs:t,backend:n}=e,{x:r}=t;Se(r,"neg");let a=n.data.get(r.dataId).values,[s,i]=vw(a,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,s)}var JR={kernelName:Oo,backendName:"cpu",kernelFunc:YR},kw=$t((e,t)=>e!==t?1:0),QR=Xt(zo,kw,null,"bool"),eM={kernelName:zo,backendName:"cpu",kernelFunc:QR};function Km(e,t,n,r,a){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(a),u=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let c=0;c<i;++c){let h=v.indexToLoc(c,s,o),d=new Array(h.length);for(let f=0;f<d.length;f++)d[f]=h[r[f]];let p=v.locToIndex(d,s,l);u[p]=e[c]}return u}function hr(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{perm:s}=n;Se(a,"transpose");let i=a.shape.length,o=new Array(i);for(let c=0;c<o.length;c++)o[c]=a.shape[s[c]];let l=r.data.get(a.dataId).values,u=Km(l,a.shape,a.dtype,s,o);return{dataId:r.write(u,o,a.dtype),shape:o,dtype:a.dtype}}var tM={kernelName:si,backendName:"cpu",kernelFunc:hr};function Iw(e,t,n,r){let[a,s]=R.computeOutAndReduceShapes(e,r),i=or(t,"int32"),o=v.makeZerosTypedArray(v.sizeFromShape(a),i),l=v.sizeFromShape(s);for(let u=0;u<o.length;++u){let c=u*l,h=1;for(let d=0;d<l;++d)h*=n[c+d];o[u]=h}return{outVals:o,outShape:a,outDtype:i}}function nM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Se(a,"prod");let o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=R.getAxesPermutation(l,o),c=l,h=a,d=[];u!=null&&(h=hr({inputs:{x:a},backend:n,attrs:{perm:u}}),d.push(h),c=R.getInnerMostAxes(c.length,o));let p=n.data.get(h.dataId).values,{outVals:f,outShape:m,outDtype:A}=Iw(h.shape,h.dtype,p,c),y=m;return i&&(y=R.expandShapeToKeepDim(m,l)),d.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(y,A,f)}var rM={kernelName:Uo,backendName:"cpu",kernelFunc:nM};function Zm(e,t,n,r){let a=e===t,s=e<t&&n<0,i=t<e&&n>1;if(a||s||i)return v.makeZerosTypedArray(0,r);let o=Math.abs(Math.ceil((t-e)/n)),l=v.makeZerosTypedArray(o,r);t<e&&n===1&&(n=-1),l[0]=e;for(let u=1;u<l.length;u++)l[u]=l[u-1]+n;return l}var Sw=El(e=>1/Math.sqrt(e)),aM=Cl(Zs,Sw),sM={kernelName:Zs,backendName:"cpu",kernelFunc:aM};function cp(e,t,n,r,a){let s=dn.isSliceContinous(r,t,n),i=v.sizeFromShape(n),o=v.computeStrides(r);if(s){let h=dn.computeFlatOffset(t,o);return a==="string"?e.slice(h,h+i):e.subarray(h,h+i)}let l=a==="string"?R.fromUint8ToStringArray(e):e,u=Ue(r,a,l),c=Ue(n,a);for(let h=0;h<c.size;++h){let d=c.indexToLoc(h),p=d.map((f,m)=>f+t[m]);c.set(u.get(...p),...d)}return a==="string"?R.fromStringArrayToUint8(c.values):c.values}function ki(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r;Se(a,"slice");let[o,l]=dn.parseSliceParams(a,s,i);dn.assertParamsValid(a,o,l);let u=n.data.get(a.dataId).values,c=cp(u,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,c)}var iM={kernelName:Ko,backendName:"cpu",kernelFunc:ki},Nw=$t((e,t)=>{let n=e-t;return n*n}),oM=Xt(ni,Nw),lM={kernelName:ni,backendName:"cpu",kernelFunc:oM};function Tw(e,t,n,r){let a=Ue(e,t.dtype);for(let s=0;s<a.size;s++){let i=a.indexToLoc(s),o=new Array(i.length);for(let l=0;l<o.length;l++)o[l]=i[l]*n[l]+r[l];a.set(t.get(...o),...i)}return a}var Ew=$t((e,t)=>e-t),cM=Ym((e,t,n,r)=>({real:e-n,imag:t-r})),Qm=Xt(ri,Ew,cM),uM={kernelName:ri,backendName:"cpu",kernelFunc:Qm};function Cw(e,t){let n=new Array(e.rank);for(let a=0;a<n.length;a++)n[a]=e.shape[a]*t[a];let r=Ue(n,e.dtype);for(let a=0;a<r.values.length;++a){let s=r.indexToLoc(a),i=new Array(e.rank);for(let l=0;l<i.length;l++)i[l]=s[l]%e.shape[l];let o=e.locToIndex(i);r.values[a]=e.values[o]}return r}function Rw(e,t,n,r,a){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(n,i*r),u=v.getTypedArrayFromDType("int32",i*r);for(let h=0;h<i;h++){let d=h*o,p=e.subarray(d,d+o),f=[];for(let g=0;g<p.length;g++)f.push({value:p[g],index:g});f.sort((g,w)=>w.value-g.value);let m=h*r,A=l.subarray(m,m+r),y=u.subarray(m,m+r);for(let g=0;g<r;g++)A[g]=f[g].value,y[g]=f[g].index}let c=t.slice();return c[c.length-1]=r,[Ue(c,n,l),Ue(c,"int32",u)]}function Mw(e,t,n,r){let a=v.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let f=0;f<a;f++)s[0]*=n[f];s[1]=n[a];for(let f=a+1;f<n.length;f++)s[2]*=n[f];let i={},o=new Int32Array(n[a]),l=new Pt(s,r,e),u=[],c=s[0]===1&&s[2]===1;for(let f=0;f<n[a];f++){let m;if(c)m=e[f].toString();else{let A=[];for(let y=0;y<s[0];y++)for(let g=0;g<s[2];g++)A.push(l.get(y,f,g));m=A.join(",")}if(i[m]!==void 0)o[f]=i[m];else{let A=Object.keys(i).length;i[m]=A,o[f]=A,u.push(f)}}let h=s.slice();h[1]=Object.keys(i).length;let d=new Pt(h,r);u.forEach((f,m)=>{for(let A=0;A<s[0];A++)for(let y=0;y<s[2];y++)d.set(l.get(A,f,y),A,m,y)});let p=n.slice();return p[a]=h[1],{outputValues:d.values,outputShape:p,indices:o}}var $w="3.3.0";ml("cpu",()=>new lp,1);var Dw=ot(xo,e=>e>=0?e:Math.exp(e)-1),hM={kernelName:xo,backendName:"cpu",kernelFunc:Dw};function Ow(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r;Se([a],"leakyRelu");let i=v.sizeFromShape(a.shape),o=n.data.get(a.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;u<o.length;u++)l[u]=o[u]<0?s*o[u]:o[u];return n.makeTensorInfo(a.shape,"float32",l)}var dM={kernelName:Ms,backendName:"cpu",kernelFunc:Ow},pM=$t((e,t)=>e<0?t*e:e);function zw(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t;Se([r,a],"prelu");let s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,[o,l]=pM(r.shape,a.shape,s,i,r.dtype);return n.makeTensorInfo(l,r.dtype,o)}var fM={kernelName:js,backendName:"cpu",kernelFunc:zw},Pw=ot(Hs,e=>Math.max(0,e)),mM={kernelName:Hs,backendName:"cpu",kernelFunc:Pw},Lw=ot(qs,e=>Math.min(Math.max(0,e),6)),AM={kernelName:qs,backendName:"cpu",kernelFunc:Lw};function eA(e,t,n,r,a){if(n==="linear")return Hr({inputs:{x:t},backend:e});if(n==="relu")return Pw({inputs:{x:t},backend:e});if(n==="elu")return Dw({inputs:{x:t},backend:e});if(n==="relu6")return Lw({inputs:{x:t},backend:e});if(n==="prelu")return zw({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return Ow({inputs:{x:t},backend:e,attrs:{alpha:a}});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function xt(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=v.sizeFromShape(a.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${a.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),n.incRef(a.dataId);let u=n.data.get(a.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,h=u.complexTensorInfos.imag;c.shape=o,h.shape=o}return{dataId:a.dataId,shape:o,dtype:a.dtype}}var yM={kernelName:Ho,backendName:"cpu",kernelFunc:xt};function Ww(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;Se([a,s],"matMul");let l=a.shape.length,u=s.shape.length,c=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[u-1]:s.shape[u-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[u-2]:s.shape[u-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=v.sizeFromShape(f),y=v.sizeFromShape(m),g=A===y||A===1||y===1;v.assert(l>=2&&u>=2&&g,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let w=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);v.assert(c===h,()=>`Error in matMul: inner shapes (${c}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let b=i?[A,c,d]:[A,d,c],_=o?[y,p,h]:[y,h,p],x=xt({inputs:{x:a},backend:n,attrs:{shape:b}}),S=xt({inputs:{x:s},backend:n,attrs:{shape:_}}),T=i?x.shape[1]:x.shape[2],E=i?x.shape[2]:x.shape[1],F=o?S.shape[1]:S.shape[2],P=Math.max(A,y),W=n.data.get(x.dataId).values,V=n.data.get(S.dataId).values,U=v.computeStrides(x.shape),H=v.computeStrides(S.shape),[X,G,ee]=i?[U[0],1,U[1]]:[U[0],U[1],1],[Y,se,te]=o?[1,H[1],H[0]]:[H[1],1,H[0]],le=E*F,Q=Ue([P,E,F],x.dtype),pe=Q.values,ce=n.blockSize;for(let ye=0;ye<P;ye++)for(let me=0;me<E;me+=ce)for(let Ne=0;Ne<F;Ne+=ce)for(let Ce=0;Ce<T;Ce+=ce){let De=Math.min(me+ce,E),Pe=Math.min(Ne+ce,F),Oe=Math.min(Ce+ce,T);for(let nt=me;nt<De;nt++)for(let rt=Ne;rt<Pe;rt++){let lt=0;for(let Je=Ce;Je<Oe;Je++){let ft=Math.min(ye,A-1)*X,je=Math.min(ye,y-1)*te,xn=W[ft+nt*G+Je*ee],vt=V[Je*Y+rt*se+je];lt+=xn*vt}pe[ye*le+(nt*F+rt)]+=lt}}return n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(S),n.makeTensorInfo(w,Q.dtype,Q.values)}var gM={kernelName:ys,backendName:"cpu",kernelFunc:Ww};function xM(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:h}=r,d,p,f,m=[];d=Ww({inputs:{a,b:s},attrs:{transposeA:l,transposeB:u},backend:n}),i&&(p=pu({inputs:{a:d,b:i},backend:n}),m.push(d),d=p),c&&(f=eA(n,d,c,o,h),m.push(d),d=f);for(let A of m)n.disposeIntermediateTensorInfo(A);return d}var wM={kernelName:ii,backendName:"cpu",kernelFunc:xM},bM=ot(oo,e=>Math.acos(e)),_M={kernelName:oo,backendName:"cpu",kernelFunc:bM},vM=ot(lo,e=>Math.acosh(e)),kM={kernelName:lo,backendName:"cpu",kernelFunc:vM};function IM(e){let{inputs:t,backend:n}=e,r=t;Se(t,"addN");let a=r.map(o=>n.data.get(o.dataId).values),s=Ue(r[0].shape,r[0].dtype),i=s.values;for(let o=0;o<r.length;o++){let l=a[o];for(let u=0;u<i.length;u++)i[u]+=l[u]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}var SM={kernelName:fs,backendName:"cpu",kernelFunc:IM};function NM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Se(a,"all");let o=v.parseAxisParam(s,a.shape),l=o,u=R.getAxesPermutation(l,a.shape.length),c=a;u!=null&&(c=hr({inputs:{x:a},backend:n,attrs:{perm:u}}),l=R.getInnerMostAxes(l.length,a.shape.length)),R.assertAxesAreInnerMostDims("all",l,c.shape.length);let[h,d]=R.computeOutAndReduceShapes(c.shape,l),p=v.sizeFromShape(d),f=v.makeZerosTypedArray(v.sizeFromShape(h),c.dtype),m=n.data.get(c.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let b=0;b<p;++b){let _=m[g+b];w=w&&_}f[y]=w}u!=null&&n.disposeIntermediateTensorInfo(c);let A=n.makeTensorInfo(h,c.dtype,f);if(i){let y=R.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var TM={kernelName:Dh,backendName:"cpu",kernelFunc:NM};function EM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Se(a,"any");let o=v.parseAxisParam(s,a.shape),l=o,u=R.getAxesPermutation(l,a.shape.length),c=a;u!=null&&(c=hr({inputs:{x:a},backend:n,attrs:{perm:u}}),l=R.getInnerMostAxes(l.length,a.shape.length)),R.assertAxesAreInnerMostDims("any",l,c.shape.length);let[h,d]=R.computeOutAndReduceShapes(c.shape,l),p=v.sizeFromShape(d),f=v.makeZerosTypedArray(v.sizeFromShape(h),c.dtype),m=n.data.get(c.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let b=0;b<p;++b){let _=m[g+b];w=w||_}f[y]=w}u!=null&&n.disposeIntermediateTensorInfo(c);let A=n.makeTensorInfo(h,c.dtype,f);if(i){let y=R.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var CM={kernelName:Oh,backendName:"cpu",kernelFunc:EM};function RM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;Se(a,"argMax");let i=v.parseAxisParam(s,a.shape),o=R.getAxesPermutation(i,a.shape.length),l=a,u=[];o!=null&&(l=hr({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=R.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],R.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[c,h]=R.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(c),p=v.makeZerosTypedArray(d,"int32"),f=v.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],w=0;for(let b=0;b<f;++b){let _=m[y+b];_>g&&(g=_,w=b)}p[A]=w}return u.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(c,"int32",p)}var MM={kernelName:ms,backendName:"cpu",kernelFunc:RM};function FM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;Se(a,"argMin");let i=v.parseAxisParam(s,a.shape),o=R.getAxesPermutation(i,a.shape.length),l=a,u=[];o!=null&&(l=hr({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=R.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],R.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[c,h]=R.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(c),p=v.makeZerosTypedArray(d,"int32"),f=v.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],w=0;for(let b=0;b<f;++b){let _=m[y+b];_<g&&(g=_,w=b)}p[A]=w}return u.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(c,"int32",p)}var $M={kernelName:bc,backendName:"cpu",kernelFunc:FM},DM=ot(co,e=>Math.asin(e)),OM={kernelName:co,backendName:"cpu",kernelFunc:DM},zM=ot(uo,e=>Math.asinh(e)),PM={kernelName:uo,backendName:"cpu",kernelFunc:zM},LM=ot(ho,e=>Math.atan(e)),WM={kernelName:ho,backendName:"cpu",kernelFunc:LM},BM=$t((e,t)=>Math.atan2(e,t)),VM=Xt(fo,BM),UM={kernelName:fo,backendName:"cpu",kernelFunc:VM},jM=ot(po,e=>Math.atanh(e)),HM={kernelName:po,backendName:"cpu",kernelFunc:jM};function tA(e,t,n,r,a,s){let i=a.strideHeight,o=a.strideWidth,l=a.dilationHeight,u=a.dilationWidth,c=a.effectiveFilterHeight,h=a.effectiveFilterWidth,d=a.padInfo.top,p=a.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=Ue(a.outShape,n),A=m.values,y=a.outShape[1]*a.outShape[2]*a.outShape[3],g=a.outShape[2]*a.outShape[3],w=a.outShape[3];for(let b=0;b<a.batchSize;++b){let _=b*y,x=b*r[0];for(let S=0;S<a.inChannels;++S)for(let T=0;T<a.outHeight;++T){let E=T*i-d,F=Math.max(0,E),P=Math.min(a.inHeight,c+E),W=_+T*g;for(let V=0;V<a.outWidth;++V){let U=V*o-p,H=Math.max(0,U),X=Math.min(a.inWidth,h+U),G=f,ee=0,Y=0;for(let te=F;te<P;te+=l){let le=x+te*r[1];for(let Q=H;Q<X;Q+=u){let pe=le+Q*r[2],ce=e[pe+S];s==="max"&&ce>G?G=ce:s==="avg"&&(ee+=ce,Y++)}if(isNaN(G))break}let se=W+V*w+S;A[se]=s==="avg"?ee/Y:G}}}return m}function Bw(e,t,n,r,a=!1,s=!1){let i=Ue(r.outShape,"int32"),o=r.strideHeight,l=r.strideWidth,u=r.dilationHeight,c=r.dilationWidth,h=r.effectiveFilterHeight,d=r.effectiveFilterWidth,p=r.padInfo.top,f=r.padInfo.left,m=Ue(t,n,e);for(let A=0;A<r.batchSize;++A)for(let y=0;y<r.inChannels;++y)for(let g=0;g<r.outHeight;++g){let w=g*o-p,b=w;for(;b<0;)b+=u;let _=Math.min(r.inHeight,h+w);for(let x=0;x<r.outWidth;++x){let S=x*l-f,T=S;for(;T<0;)T+=c;let E=Math.min(r.inWidth,d+S),F=Number.NEGATIVE_INFINITY,P=-1;for(let W=b;W<_;W+=u){let V=W-w;for(let U=T;U<E;U+=c){let H=U-S,X=m.get(A,W,U,y);X>F&&(F=X,a?P=s?((A*r.inHeight+W)*r.inWidth+U)*r.inChannels+y:(W*r.inWidth+U)*r.inChannels+y:P=V*d+H)}}i.set(P,A,g,x,y)}}return i}function Vw(e,t,n,r,a,s){let i=a.strideDepth,o=a.strideHeight,l=a.strideWidth,u=a.dilationDepth,c=a.dilationHeight,h=a.dilationWidth,d=a.effectiveFilterDepth,p=a.effectiveFilterHeight,f=a.effectiveFilterWidth,m=a.padInfo.front,A=a.padInfo.top,y=a.padInfo.left,g=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=Ue(a.outShape,n),b=w.values,_=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],x=a.outShape[2]*a.outShape[3]*a.outShape[4],S=a.outShape[3]*a.outShape[4],T=a.outShape[4];for(let E=0;E<a.batchSize;++E){let F=E*_,P=E*r[0];for(let W=0;W<a.inChannels;++W)for(let V=0;V<a.outDepth;++V){let U=V*i-m,H=U;for(;H<0;)H+=u;let X=Math.min(a.inDepth,d+U),G=F+V*x;for(let ee=0;ee<a.outHeight;++ee){let Y=ee*o-A,se=Y;for(;se<0;)se+=c;let te=Math.min(a.inHeight,p+Y),le=G+ee*S;for(let Q=0;Q<a.outWidth;++Q){let pe=Q*l-y,ce=pe;for(;ce<0;)ce+=h;let ye=Math.min(a.inWidth,f+pe),me=le+Q*T,Ne=g,Ce=0,De=0;for(let Oe=H;Oe<X;Oe+=u){let nt=P+Oe*r[1];for(let rt=se;rt<te;rt+=c){let lt=nt+rt*r[2];for(let Je=ce;Je<ye;Je+=h){let ft=lt+Je*r[3],je=e[ft+W];if(s==="max"&&je>Ne?Ne=je:s==="avg"&&(Ce+=je,De++),isNaN(Ne))break}if(isNaN(Ne))break}if(isNaN(Ne))break}let Pe=me+W;b[Pe]=s==="avg"?Ce/De:Ne}}}}return w}function GM(e,t){let n=Ue(t.outShape,"int32"),r=t.strideDepth,a=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,h=t.effectiveFilterWidth,d=t.padInfo.front,p=t.padInfo.top,f=t.padInfo.left;for(let m=0;m<t.batchSize;++m)for(let A=0;A<t.inChannels;++A)for(let y=0;y<t.outDepth;++y){let g=y*r-d,w=g;for(;w<0;)w+=i;let b=Math.min(t.inDepth,u+g);for(let _=0;_<t.outHeight;++_){let x=_*a-p,S=x;for(;S<0;)S+=o;let T=Math.min(t.inHeight,c+x);for(let E=0;E<t.outWidth;++E){let F=E*s-f,P=F;for(;P<0;)P+=l;let W=Math.min(t.inWidth,h+F),V=Number.NEGATIVE_INFINITY,U=-1;for(let H=w;H<b;H+=i){let X=H-g;for(let G=S;G<T;G+=o){let ee=G-x;for(let Y=P;Y<W;Y+=l){let se=Y-F,te=e.get(m,H,G,Y,A);te>=V&&(V=te,U=X*c*h+ee*c+se)}}}n.set(U,m,y,_,E,A)}}}return n}function qM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Se(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,u=1;v.assert(R.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let c=R.computePool2DInfo(a.shape,s,i,u,o,l),h;if(c.filterWidth===1&&c.filterHeight===1&&v.arraysEqual(c.inShape,c.outShape))h=Hr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=v.computeStrides(a.shape),f=tA(d,a.shape,a.dtype,p,c,"avg");h=n.makeTensorInfo(c.outShape,a.dtype,f.values)}return h}var XM={kernelName:As,backendName:"cpu",kernelFunc:qM};function KM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;Se(a,"avgPool3d");let c=R.computePool3DInfo(a.shape,s,i,1,o,l,u),h=n.data.get(a.dataId).values,d=Vw(h,a.shape,a.dtype,v.computeStrides(a.shape),c,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var ZM={kernelName:_c,backendName:"cpu",kernelFunc:KM};function YM(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;Se([a,s],"avgPool3DGrad");let c=R.computePool3DInfo(s.shape,i,o,1,l,u),h=c.strideDepth,d=c.strideHeight,p=c.strideWidth,f=c.filterDepth,m=c.filterHeight,A=c.filterWidth,y=c.dilationDepth,g=c.dilationHeight,w=c.dilationWidth,b=c.effectiveFilterDepth,_=c.effectiveFilterHeight,x=c.effectiveFilterWidth,S=b-1-c.padInfo.front,T=x-1-c.padInfo.left,E=_-1-c.padInfo.top,F=Ue(s.shape,"float32"),P=1/(f*m*A),W=n.bufferSync(a);for(let V=0;V<c.batchSize;++V)for(let U=0;U<c.inChannels;++U)for(let H=0;H<c.inDepth;++H)for(let X=0;X<c.inHeight;++X)for(let G=0;G<c.inWidth;++G){let ee=H-S,Y=X-E,se=G-T,te=0;for(let le=0;le<b;le+=y){let Q=(ee+le)/h;if(!(Q<0||Q>=c.outDepth||Math.floor(Q)!==Q))for(let pe=0;pe<_;pe+=g){let ce=(Y+pe)/d;if(!(ce<0||ce>=c.outHeight||Math.floor(ce)!==ce))for(let ye=0;ye<x;ye+=w){let me=(se+ye)/p;me<0||me>=c.outWidth||Math.floor(me)!==me||(te+=W.get(V,Q,ce,me,U))}}}F.set(te*P,V,H,X,G,U)}return n.makeTensorInfo(F.shape,F.dtype,F.values)}var JM={kernelName:Ph,backendName:"cpu",kernelFunc:YM};function QM(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;Se([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=r,c=R.computePool2DInfo(i.shape,o,l,1,u),h=c.strideHeight,d=c.strideWidth,p=c.filterHeight,f=c.filterWidth,m=c.dilationHeight,A=c.dilationWidth,y=c.effectiveFilterHeight,g=c.effectiveFilterWidth,w=g-1-c.padInfo.left,b=y-1-c.padInfo.top,_=Ue(i.shape,"float32"),x=1/(p*f),S=n.data.get(a.dataId).values,T=Ue(a.shape,"float32",S);for(let E=0;E<c.batchSize;++E)for(let F=0;F<c.inChannels;++F)for(let P=0;P<c.inHeight;++P)for(let W=0;W<c.inWidth;++W){let V=P-b,U=W-w,H=0;for(let X=0;X<y;X+=m){let G=(V+X)/h;if(!(G<0||G>=c.outHeight||Math.floor(G)!==G))for(let ee=0;ee<g;ee+=A){let Y=(U+ee)/d;Y<0||Y>=c.outWidth||Math.floor(Y)!==Y||(H+=T.get(E,G,Y,F))}}_.set(H*x,E,P,W,F)}return n.makeTensorInfo(_.shape,_.dtype,_.values)}var eF={kernelName:zh,backendName:"cpu",kernelFunc:QM};function tF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Se([a,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=r;u==null&&(u=.001);let c=n.data.get(a.dataId).values,h=n.data.get(o.dataId).values,d=n.data.get(l.dataId).values,p=s?n.data.get(s.dataId).values:new Float32Array([1]),f=i?n.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(c.length),A=f.length,y=p.length,g=d.length,w=h.length,b=0,_=0,x=0,S=0;for(let T=0;T<c.length;++T)m[T]=f[b++]+(c[T]-h[_++])*p[x++]/Math.sqrt(d[S++]+u),b>=A&&(b=0),_>=w&&(_=0),x>=y&&(x=0),S>=g&&(S=0);return n.makeTensorInfo(a.shape,a.dtype,m)}var nF={kernelName:Es,backendName:"cpu",kernelFunc:tF};function rF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;Se([a],"batchToSpaceND");let o=s.reduce((y,g)=>y*g),l=R.getReshaped(a.shape,s,o),u=R.getPermuted(l.length,s.length),c=R.getReshapedPermuted(a.shape,s,o),h=R.getSliceBeginCoords(i,s.length),d=R.getSliceSize(c,i,s.length),p=xt({inputs:{x:a},backend:n,attrs:{shape:l}}),f=hr({inputs:{x:p},backend:n,attrs:{perm:u}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:c}}),A=ki({inputs:{x:m},backend:n,attrs:{begin:h,size:d}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var aF={kernelName:vc,backendName:"cpu",kernelFunc:rF};function sF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,u=Gm(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var iF={kernelName:Lh,backendName:"cpu",kernelFunc:sF},oF=ot(Ra,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),lF={kernelName:Ra,backendName:"cpu",kernelFunc:oF},cF=e=>{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(v.sizeFromShape(t.shape)),a=n.data.get(t.dataId),s=a.complexTensorInfos.real,i=a.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let u=0;u<o.length;u++){let c=o[u],h=l[u];r[u]=Math.hypot(c,h)}return n.makeOutput(r,t.shape,"float32")},uF={kernelName:kc,backendName:"cpu",kernelFunc:cF};function Rl(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.imag,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var hF={kernelName:Qh,backendName:"cpu",kernelFunc:Rl};function Ml(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=v.parseAxisParam(a,t[0].shape)[0],i=R.computeOutShape(t.map(m=>m.shape),s);if(v.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(m=>v.sizeFromShape(m.shape)>0);if(o.length===1)return Hr({inputs:{x:o[0]},backend:n});let l=o.map(m=>m.shape);if(R.assertParamsConsistent(l,s),o[0].dtype==="complex64"){let m=o.map(b=>vi({inputs:{input:b},backend:n})),A=o.map(b=>Rl({inputs:{input:b},backend:n})),y=Ml({inputs:m,backend:n,attrs:{axis:s}}),g=Ml({inputs:A,backend:n,attrs:{axis:s}}),w=Wn({inputs:{real:y,imag:g},backend:n});return m.forEach(b=>n.disposeIntermediateTensorInfo(b)),A.forEach(b=>n.disposeIntermediateTensorInfo(b)),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),w}let u=o.map(m=>{let A=v.sizeFromShape(m.shape.slice(s));return xt({inputs:{x:m},backend:n,attrs:{shape:[-1,A]}})}),c=u.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));i=R.computeOutShape(u.map(m=>m.shape),1);let h=u[0].shape[0]===1,d=qm(c,i,t[0].dtype,h),p=R.computeOutShape(o.map(m=>m.shape),s),f=n.makeTensorInfo(p,t[0].dtype,d);return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var dF={kernelName:mo,backendName:"cpu",kernelFunc:Ml};function Uw(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:c}=r;Se([a,s],"conv2d");let h=R.convertConv2DDataFormat(l),d=R.computeConv2DInfo(a.shape,s.shape,i,u,o,c,!1,h),p=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,A=d.dilationWidth,y=d.padInfo.left,g=d.padInfo.top,w=d.dataFormat==="channelsLast",b=new Pt(d.outShape,a.dtype),_=v.computeStrides(a.shape),x=v.computeStrides(s.shape),S=_[0],T=w?_[1]:_[2],E=w?_[2]:1,F=w?1:_[1],P=b.strides[0],W=w?b.strides[1]:b.strides[2],V=w?b.strides[2]:1,U=w?1:b.strides[1],H=n.data.get(a.dataId).values,X=n.data.get(s.dataId).values,G=b.values;for(let ee=0;ee<d.batchSize;++ee){let Y=ee*S,se=ee*P;for(let te=0;te<d.outHeight;++te){let le=se+te*W,Q=te*d.strideHeight-g;for(let pe=0;pe<p;++pe){let ce=Q+pe*m;if(ce<0||ce>=d.inHeight)continue;let ye=pe*x[0],me=Y+ce*T;for(let Ne=0;Ne<d.outWidth;++Ne){let Ce=le+Ne*V,De=Ne*d.strideWidth-y;for(let Pe=0;Pe<f;++Pe){let Oe=De+Pe*A;if(Oe<0||Oe>=d.inWidth)continue;let nt=ye+Pe*x[1],rt=me+Oe*E,lt=nt;for(let Je=0;Je<d.inChannels;++Je){let ft=H[rt+Je*F];for(let je=0;je<d.outChannels;++je)G[Ce+je*U]+=ft*X[lt+je];lt+=d.outChannels}}}}}}return n.makeTensorInfo(b.shape,b.dtype,G)}var pF={kernelName:ws,backendName:"cpu",kernelFunc:Uw};function fF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:c}=r;Se([a,s],"conv2dBackpropFilter");let h=R.convertConv2DDataFormat(l),d=R.computeConv2DInfo(a.shape,c,i,1,o,u,!1,h),{strideHeight:p,strideWidth:f,filterHeight:m,filterWidth:A}=d,y=d.dataFormat==="channelsLast",g=new Pt(d.filterShape,"float32"),w=d.padInfo.left,b=d.padInfo.top,_=n.data.get(a.dataId).values,x=n.data.get(s.dataId).values,S=new Pt(a.shape,a.dtype,_),T=new Pt(s.shape,s.dtype,x);for(let E=0;E<m;++E){let F=Math.max(0,Math.ceil((b-E)/p)),P=Math.min(d.outHeight,(d.inHeight+b-E)/p);for(let W=0;W<A;++W){let V=Math.max(0,Math.ceil((w-W)/f)),U=Math.min(d.outWidth,(d.inWidth+w-W)/f);for(let H=0;H<d.inChannels;++H)for(let X=0;X<d.outChannels;++X){let G=0;for(let ee=0;ee<d.batchSize;++ee)for(let Y=F;Y<P;++Y){let se=E+Y*p-b;for(let te=V;te<U;++te){let le=W+te*f-w;y?G+=S.get(ee,se,le,H)*T.get(ee,Y,te,X):G+=S.get(ee,H,se,le)*T.get(ee,X,Y,te)}}g.set(G,E,W,H,X)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var mF={kernelName:Bh,backendName:"cpu",kernelFunc:fF};function AF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:c}=r;Se([a,s],"conv2dBackpropInput");let h=v.computeStrides(s.shape),d=v.computeStrides(a.shape),p=R.convertConv2DDataFormat(u),f=R.computeConv2DInfo(i,s.shape,o,1,l,c,!1,p),m=new Pt(f.inShape,"float32"),A=m.values,y=n.data.get(a.dataId).values,g=n.data.get(s.dataId).values,[w,b,_]=h,{batchSize:x,filterHeight:S,filterWidth:T,inChannels:E,inHeight:F,inWidth:P,outChannels:W,outHeight:V,outWidth:U,strideHeight:H,strideWidth:X}=f;p=f.dataFormat;let G=S-1-f.padInfo.top,ee=T-1-f.padInfo.left,Y=p==="channelsLast",se=m.strides[0],te=Y?m.strides[1]:m.strides[2],le=Y?m.strides[2]:1,Q=Y?1:m.strides[1],pe=d[0],ce=Y?d[1]:d[2],ye=Y?d[2]:1,me=Y?1:d[1];for(let Ne=0;Ne<x;++Ne)for(let Ce=0;Ce<E;++Ce)for(let De=0;De<F;++De){let Pe=De-G,Oe=Math.max(0,Math.ceil(Pe/H)),nt=Math.min(V,(S+Pe)/H);for(let rt=0;rt<P;++rt){let lt=rt-ee,Je=Math.max(0,Math.ceil(lt/X)),ft=Math.min(U,(T+lt)/X),je=0;for(let vt=Oe;vt<nt;++vt){let qn=vt*H-Pe;for(let Jt=Je;Jt<ft;++Jt){let wn=Jt*X-lt,Xn=pe*Ne+ce*vt+ye*Jt,Dn=w*(S-1-qn)+b*(T-1-wn)+_*Ce;for(let hn=0;hn<W;++hn){let Qt=y[Xn+me*hn],$r=g[Dn+hn];je+=Qt*$r}}}let xn=se*Ne+te*De+le*rt+Q*Ce;A[xn]=je}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var yF={kernelName:bs,backendName:"cpu",kernelFunc:AF};function gF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;Se([a,s],"conv3d");let u=R.computeConv3DInfo(a.shape,s.shape,i,l,o),{filterDepth:c,filterHeight:h,filterWidth:d,dilationDepth:p,dilationHeight:f,dilationWidth:m,padInfo:A}=u,y=A.front,g=A.left,w=A.top,b=new Pt(u.outShape,a.dtype),_=n.data.get(a.dataId).values,x=n.data.get(s.dataId).values,S=b.values,T=v.computeStrides(a.shape),E=v.computeStrides(s.shape);for(let F=0;F<u.batchSize;++F){let P=F*T[0],W=F*b.strides[0];for(let V=0;V<u.outDepth;++V){let U=W+V*b.strides[1],H=V*u.strideDepth-y;for(let X=0;X<c;++X){let G=H+X*p;if(G<0||G>=u.inDepth)continue;let ee=X*E[0],Y=P+G*T[1];for(let se=0;se<u.outHeight;++se){let te=U+se*b.strides[2],le=se*u.strideHeight-w;for(let Q=0;Q<h;++Q){let pe=le+Q*f;if(pe<0||pe>=u.inHeight)continue;let ce=ee+Q*E[1],ye=Y+pe*T[2];for(let me=0;me<u.outWidth;++me){let Ne=te+me*u.outChannels,Ce=me*u.strideWidth-g;for(let De=0;De<d;++De){let Pe=Ce+De*m;if(Pe<0||Pe>=u.inWidth)continue;let Oe=ce+De*E[2],nt=ye+Pe*u.inChannels,rt=Oe;for(let lt=0;lt<u.inChannels;++lt){let Je=_[nt+lt];for(let ft=0;ft<u.outChannels;++ft)S[Ne+ft]+=Je*x[rt+ft];rt+=u.outChannels}}}}}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var xF={kernelName:Ic,backendName:"cpu",kernelFunc:gF};function wF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r;Se([a,s],"conv3dBackpropFilterV2");let u=v.computeStrides(a.shape),c=v.computeStrides(s.shape),h=R.computeConv3DInfo(a.shape,l,i,1,o),d=h.strideDepth,p=h.strideHeight,f=h.strideWidth,m=h.filterDepth,A=h.filterHeight,y=h.filterWidth,g=new Pt(h.filterShape,"float32"),w=g.values,[b,_,x,S]=g.strides,T=n.data.get(s.dataId).values,[E,F,P,W]=c,V=n.data.get(a.dataId).values,[U,H,X,G]=u,ee=h.padInfo.front,Y=h.padInfo.left,se=h.padInfo.top;for(let te=0;te<m;++te){let le=Math.max(0,Math.ceil((ee-te)/d)),Q=Math.min(h.outDepth,(h.inDepth+ee-te)/d),pe=te*b;for(let ce=0;ce<A;++ce){let ye=Math.max(0,Math.ceil((se-ce)/p)),me=Math.min(h.outHeight,(h.inHeight+se-ce)/p),Ne=ce*_+pe;for(let Ce=0;Ce<y;++Ce){let De=Math.max(0,Math.ceil((Y-Ce)/f)),Pe=Math.min(h.outWidth,(h.inWidth+Y-Ce)/f),Oe=Ce*x+Ne;for(let nt=0;nt<h.inChannels;++nt){let rt=nt*S+Oe;for(let lt=0;lt<h.outChannels;++lt){let Je=0;for(let ft=0;ft<h.batchSize;++ft){let je=ft*U,xn=ft*E;for(let vt=le;vt<Q;++vt){let qn=(te+vt*d-ee)*H+je,Jt=vt*F+xn;for(let wn=ye;wn<me;++wn){let Xn=(ce+wn*p-se)*X+qn,Dn=wn*P+Jt;for(let hn=De;hn<Pe;++hn){let Qt=(Ce+hn*f-Y)*G+Xn,$r=hn*W+Dn;Je+=V[Qt+nt]*T[$r+lt]}}}}w[rt+lt]=Je}}}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var bF={kernelName:Vh,backendName:"cpu",kernelFunc:wF};function _F(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r;Se([a],"conv3dBackpropInputV2");let u=v.computeStrides(a.shape),c=v.computeStrides(s.shape),h=R.computeConv3DInfo(l,s.shape,o,1,i),d=new Pt(h.inShape,"float32"),p=d.values,[f,m,A,y]=d.strides,g=n.data.get(a.dataId).values,[w,b,_,x]=u,S=n.data.get(s.dataId).values,[T,E,F,P]=c,{batchSize:W,filterDepth:V,filterHeight:U,filterWidth:H,inChannels:X,inDepth:G,inHeight:ee,inWidth:Y,outChannels:se,outDepth:te,outHeight:le,outWidth:Q,strideDepth:pe,strideHeight:ce,strideWidth:ye}=h,me=V-1-h.padInfo.front,Ne=U-1-h.padInfo.top,Ce=H-1-h.padInfo.left;for(let De=0;De<W;++De)for(let Pe=0;Pe<X;++Pe)for(let Oe=0;Oe<G;++Oe){let nt=Oe-me,rt=Math.max(0,Math.ceil(nt/pe)),lt=Math.min(te,(V+nt)/pe);for(let Je=0;Je<ee;++Je){let ft=Je-Ne,je=Math.max(0,Math.ceil(ft/ce)),xn=Math.min(le,(U+ft)/ce);for(let vt=0;vt<Y;++vt){let qn=vt-Ce,Jt=Math.max(0,Math.ceil(qn/ye)),wn=Math.min(Q,(H+qn)/ye),Xn=0;for(let Dn=rt;Dn<lt;++Dn){let hn=Dn*pe-nt;for(let Qt=je;Qt<xn;++Qt){let $r=Qt*ce-ft;for(let nr=Jt;nr<wn;++nr){let rr=nr*ye-qn,ba=w*De+b*Dn+_*Qt+x*nr,ta=T*(V-1-hn)+E*(U-1-$r)+F*(H-1-rr)+P*Pe;for(let _a=0;_a<se;++_a){let ji=g[ba+_a],gr=S[ta+_a];Xn+=ji*gr}}}}p[f*De+m*Oe+A*Je+y*vt+Pe]=Xn}}}return n.makeTensorInfo(d.shape,d.dtype,d.values)}var vF={kernelName:Uh,backendName:"cpu",kernelFunc:_F},kF=ot(_s,e=>Math.cos(e)),IF={kernelName:_s,backendName:"cpu",kernelFunc:kF},SF=ot(Ao,e=>Math.cosh(e)),NF={kernelName:Ao,backendName:"cpu",kernelFunc:SF};function TF(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,[c,h,d,p]=a.shape,f=s.shape[0],[m,A]=o,y=Ue([f,m,A,p],"float32"),g=n.data.get(s.dataId).values,w=n.data.get(i.dataId).values,b=n.data.get(a.dataId).values,_=v.computeStrides(a.shape),x=v.computeStrides(y.shape);for(let S=0;S<f;S++){let T=S*4,E=g[T],F=g[T+1],P=g[T+2],W=g[T+3],V=w[S];if(V>=c)continue;let U=m>1?(P-E)*(h-1)/(m-1):0,H=A>1?(W-F)*(d-1)/(A-1):0;for(let X=0;X<m;X++){let G=m>1?E*(h-1)+X*U:.5*(E+P)*(h-1);if(G<0||G>h-1){for(let ee=0;ee<A;ee++)for(let Y=0;Y<p;Y++){let se=Y+ee*x[2]+X*x[1]+S*x[0];y.values[se]=u}continue}if(l==="bilinear"){let ee=Math.floor(G),Y=Math.ceil(G),se=G-ee;for(let te=0;te<A;te++){let le=A>1?F*(d-1)+te*H:.5*(F+W)*(d-1);if(le<0||le>d-1){for(let ye=0;ye<p;ye++){let me=ye+te*x[2]+X*x[1]+S*x[0];y.values[me]=u}continue}let Q=Math.floor(le),pe=Math.ceil(le),ce=le-Q;for(let ye=0;ye<p;ye++){let me=ye+Q*_[2]+ee*_[1]+V*_[0],Ne=b[me];me=ye+pe*_[2]+ee*_[1]+V*_[0];let Ce=b[me];me=ye+Q*_[2]+Y*_[1]+V*_[0];let De=b[me];me=ye+pe*_[2]+Y*_[1]+V*_[0];let Pe=b[me],Oe=Ne+(Ce-Ne)*ce,nt=De+(Pe-De)*ce;me=ye+te*x[2]+X*x[1]+S*x[0],y.values[me]=Oe+(nt-Oe)*se}}}else for(let ee=0;ee<A;++ee){let Y=A>1?F*(d-1)+ee*H:.5*(F+W)*(d-1);if(Y<0||Y>d-1){for(let le=0;le<p;le++){let Q=le+ee*x[2]+X*x[1]+S*x[0];y.values[Q]=u}continue}let se=Math.round(Y),te=Math.round(G);for(let le=0;le<p;le++){let Q=le+se*_[2]+te*_[1]+V*_[0],pe=le+ee*x[2]+X*x[1]+S*x[0];y.values[pe]=b[Q]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var EF={kernelName:yo,backendName:"cpu",kernelFunc:TF};function CF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;Se(a,"cumsum");let l=R.getAxesPermutation([s],a.shape.length),u=a;l!=null&&(u=hr({inputs:{x:a},backend:n,attrs:{perm:l}}));let c=R.getInnerMostAxes(1,a.shape.length)[0];if(c!==u.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${c}`);let h=or(u.dtype,"int32"),d=v.makeZerosTypedArray(v.sizeFromShape(u.shape),h),p=n.data.get(u.dataId).values,f=u.shape[u.shape.length-1],m=o?(y,g)=>y+f-g-1:(y,g)=>y+g;for(let y=0;y<p.length;y+=f)for(let g=0;g<f;g++){let w=m(y,g);if(g===0)d[w]=i?0:p[w];else{let b=m(y,g-1);d[w]=i?p[b]+d[b]:p[w]+d[b]}}let A=n.makeTensorInfo(u.shape,h,d);if(l!=null){let y=R.getUndoAxesPermutation(l),g=hr({inputs:{x:A},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(A),n.disposeIntermediateTensorInfo(u),g}return A}var RF={kernelName:vs,backendName:"cpu",kernelFunc:CF};function MF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,c=Gm(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}else if(a.shape.length===2){let l=n.bufferSync(a),u=n.bufferSync(s),c=uw(l,u,i,o);return n.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var FF={kernelName:jh,backendName:"cpu",kernelFunc:MF};function $F(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;v.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`),v.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=a.shape[1],u=a.shape[2],c=a.shape[3],h=l*s,d=u*s,p=c/(s*s),f=n.data.get(a.dataId).values,m=new Float32Array(o*h*d*p),A=0;for(let y=0;y<o;++y)for(let g=0;g<h;++g){let w=Math.floor(g/s),b=g%s;for(let _=0;_<d;++_){let x=Math.floor(_/s),S=_%s,T=(b*s+S)*p;for(let E=0;E<p;++E){let F=E+T+c*(x+u*(w+l*y));m[A++]=f[F]}}}return n.makeTensorInfo([o,h,d,p],a.dtype,m)}var DF={kernelName:go,backendName:"cpu",kernelFunc:$F};function jw(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=r;Se([a,s],"depthwiseConv2DNative");let c=v.computeStrides(a.shape),h=v.computeStrides(s.shape),d=l;d==null&&(d=[1,1]),v.assert(R.eitherStridesOrDilationsAreOne(i,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let p=R.computeConv2DInfo(a.shape,s.shape,i,d,o,u,!0),{filterHeight:f,filterWidth:m,dilationHeight:A,dilationWidth:y,padInfo:g}=p,w=g.left,b=g.top,_=p.outChannels/p.inChannels,x=new Pt(p.outShape,a.dtype),S=n.data.get(a.dataId).values,T=n.data.get(s.dataId).values,E=x.values;for(let F=0;F<p.batchSize;++F){let P=F*c[0],W=F*x.strides[0];for(let V=0;V<p.outHeight;++V){let U=W+V*x.strides[1],H=V*p.strideHeight-w;for(let X=0;X<f;++X){let G=H+X*A;if(G<0||G>=p.inHeight)continue;let ee=X*h[0],Y=P+G*c[1];for(let se=0;se<p.outWidth;++se){let te=U+se*x.strides[2],le=se*p.strideWidth-b;for(let Q=0;Q<m;++Q){let pe=le+Q*y;if(pe<0||pe>=p.inWidth)continue;let ce=ee+Q*h[1],ye=Y+pe*p.inChannels,me=te,Ne=ce;for(let Ce=0;Ce<p.inChannels;++Ce){let De=S[ye+Ce];for(let Pe=0;Pe<_;++Pe)E[me+Pe]+=De*T[Ne+Pe];me+=_,Ne+=_}}}}}}return n.makeTensorInfo(x.shape,x.dtype,x.values)}var OF={kernelName:ks,backendName:"cpu",kernelFunc:jw};function zF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:c}=r;Se([a,s],"depthwiseConv2dNativeBackpropFilter");let h=R.computeConv2DInfo(a.shape,c,i,o,l,u,!0),{strideHeight:d,strideWidth:p,filterHeight:f,filterWidth:m}=h,A=new Pt(h.filterShape,"float32"),y=h.padInfo.left,g=h.padInfo.top,w=h.outChannels/h.inChannels,b=n.data.get(a.dataId).values,_=new Pt(a.shape,a.dtype,b),x=n.data.get(s.dataId).values,S=new Pt(s.shape,s.dtype,x);for(let T=0;T<f;++T){let E=Math.max(0,Math.ceil((g-T)/d)),F=Math.min(h.outHeight,(h.inHeight+g-T)/d);for(let P=0;P<m;++P){let W=Math.max(0,Math.ceil((y-P)/p)),V=Math.min(h.outWidth,(h.inWidth+y-P)/p);for(let U=0;U<h.outChannels;++U){let H=Math.trunc(U/w),X=U%w,G=0;for(let ee=0;ee<h.batchSize;++ee)for(let Y=E;Y<F;++Y){let se=T+Y*d-g;for(let te=W;te<V;++te){let le=P+te*p-y;G+=_.get(ee,se,le,H)*S.get(ee,Y,te,U)}}A.set(G,T,P,H,X)}}}return n.makeTensorInfo(A.shape,A.dtype,A.values)}var PF={kernelName:Hh,backendName:"cpu",kernelFunc:zF};function LF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:c}=r;Se([a,s],"depthwiseConv2DNativeBackpropInput");let h=v.computeStrides(a.shape),d=v.computeStrides(s.shape),p=R.computeConv2DInfo(c,s.shape,i,o,l,u,!0),f=new Pt(p.inShape,"float32"),m=f.values,[A,y,g]=f.strides,w=n.data.get(a.dataId).values,[b,_,x]=h,S=n.data.get(s.dataId).values,[T,E,F]=d,{batchSize:P,filterHeight:W,filterWidth:V,inChannels:U,inHeight:H,inWidth:X,outChannels:G,outHeight:ee,outWidth:Y,strideHeight:se,strideWidth:te}=p,le=W-1-p.padInfo.top,Q=V-1-p.padInfo.left,pe=G/U;for(let ce=0;ce<P;++ce)for(let ye=0;ye<U;++ye)for(let me=0;me<H;++me){let Ne=me-le,Ce=Math.max(0,Math.ceil(Ne/se)),De=Math.min(ee,(W+Ne)/se);for(let Pe=0;Pe<X;++Pe){let Oe=Pe-Q,nt=Math.max(0,Math.ceil(Oe/te)),rt=Math.min(Y,(V+Oe)/te),lt=0;for(let Je=Ce;Je<De;++Je){let ft=Je*se-Ne;for(let je=nt;je<rt;++je){let xn=je*te-Oe,vt=b*ce+_*Je+x*je,qn=T*(W-1-ft)+E*(V-1-xn)+F*ye;for(let Jt=0;Jt<pe;++Jt){let wn=ye*pe+Jt,Xn=w[vt+wn],Dn=S[qn+Jt];lt+=Xn*Dn}}}m[A*ce+y*me+g*Pe+ye]=lt}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var WF={kernelName:Gh,backendName:"cpu",kernelFunc:LF};function BF(e){let{inputs:t,backend:n}=e,{x:r}=t,a=v.sizeFromShape(r.shape),s=n.data.get(r.dataId).values,i=Ue([a,a],r.dtype),o=i.values;for(let u=0;u<s.length;u++)o[u*a+u]=s[u];let l=[...r.shape,...r.shape];return n.makeTensorInfo(l,i.dtype,i.values)}var VF={kernelName:qh,backendName:"cpu",kernelFunc:BF},UF={kernelName:Sc,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a}=e,{strides:s,pad:i,dilations:o}=n,l=t,u=l.data.get(r.dataId).values,c=r.shape.length,h=l.data.get(a.dataId).values,d=a.shape.length,{batchSize:p,inHeight:f,inWidth:m,inChannels:A,outHeight:y,outWidth:g,padInfo:w,strideHeight:b,strideWidth:_,filterHeight:x,filterWidth:S,dilationHeight:T,dilationWidth:E,outShape:F}=R.computeDilation2DInfo(r.shape,a.shape,s,i,"NHWC",o),P=v.sizeFromShape(F),W=F.length,V=v.getArrayFromDType(r.dtype,P);for(let U=0;U<p;++U)for(let H=0;H<y;++H){let X=H*b-w.top;for(let G=0;G<g;++G){let ee=G*_-w.left;for(let Y=0;Y<A;++Y){let se=Number.MIN_SAFE_INTEGER;for(let le=0;le<x;++le){let Q=X+le*T;if(Q>=0&&Q<f)for(let pe=0;pe<S;++pe){let ce=ee+pe*E;if(ce>=0&&ce<m){let ye=v.locToIndex([U,Q,ce,Y],c,v.computeStrides(r.shape)),me=v.locToIndex([le,pe,Y],d,v.computeStrides(a.shape)),Ne=u[ye]+h[me];Ne>se&&(se=Ne)}}}let te=v.locToIndex([U,H,G,Y],W,v.computeStrides(F));V[te]=se}}}return{dataId:l.write(v.toTypedArray(V,r.dtype),F,r.dtype),shape:F,dtype:r.dtype}}},jF={kernelName:Kh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),h=v.toNestedArray(a.shape,u.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:w,strideWidth:b,filterHeight:_,filterWidth:x,dilationHeight:S,dilationWidth:T,outShape:E}=R.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);v.assert(s.rank===E.length,()=>`Error in ${Kh}, dy must have the same rank as output ${E.length}, but got ${s.rank}`);let F=v.toNestedArray(E,u.data.get(s.dataId).values),P=v.makeZerosNestedTypedArray(a.shape,a.dtype);for(let W=0;W<d;++W)for(let V=0;V<A;++V){let U=V*w-g.top;for(let H=0;H<y;++H){let X=H*b-g.left;for(let G=0;G<m;++G){let ee=Number.MIN_SAFE_INTEGER,Y=0,se=0;for(let te=0;te<_;++te){let le=U+te*S;if(le>=0&&le<p)for(let Q=0;Q<x;++Q){let pe=X+Q*T;if(pe>=0&&pe<f){let ce=c[W][le][pe][G]+h[te][Q][G];ce>ee&&(ee=ce,Y=te,se=Q)}}}P[Y][se][G]+=F[W][V][H][G]}}}return{dataId:u.write(v.toTypedArray(P,r.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},HF={kernelName:Xh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),h=v.toNestedArray(a.shape,u.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:w,strideWidth:b,filterHeight:_,filterWidth:x,dilationHeight:S,dilationWidth:T,outShape:E}=R.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);v.assert(s.rank===E.length,()=>`Error in ${Xh}, dy must have the same rank as output ${E.length}, but got ${s.rank}`);let F=v.toNestedArray(E,u.data.get(s.dataId).values),P=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let W=0;W<d;++W)for(let V=0;V<A;++V){let U=V*w-g.top;for(let H=0;H<y;++H){let X=H*b-g.left;for(let G=0;G<m;++G){let ee=Number.MIN_SAFE_INTEGER,Y=U<0?0:U,se=X<0?0:X;for(let te=0;te<_;++te){let le=U+te*S;if(le>=0&&le<p)for(let Q=0;Q<x;++Q){let pe=X+Q*T;if(pe>=0&&pe<f){let ce=c[W][le][pe][G]+h[te][Q][G];ce>ee&&(ee=ce,Y=le,se=pe)}}}P[W][Y][se][G]+=F[W][V][H][G]}}}return{dataId:u.write(v.toTypedArray(P,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function GF(e){let{inputs:t,backend:n}=e,{dy:r,y:a}=t;Se([r,a],"eluGrad");let s=new Float32Array(v.sizeFromShape(a.shape)),i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values;for(let l=0;l<i.length;++l){let u=i[l];u>=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return n.makeTensorInfo(a.shape,"float32",s)}var qF={kernelName:Zh,backendName:"cpu",kernelFunc:GF},XF=$t((e,t)=>e===t?1:0),Hw=Xt(bo,XF,null,"bool"),KF={kernelName:bo,backendName:"cpu",kernelFunc:Hw},ZF=R.ERF_P,YF=R.ERF_A1,JF=R.ERF_A2,QF=R.ERF_A3,e$=R.ERF_A4,t$=R.ERF_A5,n$=ot(wo,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+ZF*n);return t*(1-((((t$*r+e$)*r+QF)*r+JF)*r+YF)*r*Math.exp(-n*n))}),r$={kernelName:wo,backendName:"cpu",kernelFunc:n$};function hp(e){let{inputs:t,backend:n,attrs:r}=e,{input:a}=t,{dim:s}=r,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),xt({inputs:{x:a},backend:n,attrs:{shape:o}})}var a$={kernelName:_o,backendName:"cpu",kernelFunc:hp},s$=$t((e,t)=>e/t),nA=Xt(Is,s$),rA={kernelName:Is,backendName:"cpu",kernelFunc:nA};function Gw(e,t,n){let r=e.shape,a=r[0],s=r[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[a,s],c=v.sizeFromShape(u),h=v.getTypedArrayFromDType("float32",c),d=v.getTypedArrayFromDType("float32",c);for(let A=0;A<a;A++){let y=ki({inputs:{x:o},backend:n,attrs:{begin:[A,0],size:[1,s]}}),g=ki({inputs:{x:l},backend:n,attrs:{begin:[A,0],size:[1,s]}}),w=Wn({inputs:{real:y,imag:g},backend:n}),{real:b,imag:_}=i$(w,t,n),x=R.mergeRealAndImagArrays(b,_);for(let S=0;S<s;S++){let T=R.getComplexWithIndex(x,S);h[A*s+S]=T.real,d[A*s+S]=T.imag}n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(w)}let p=n.makeTensorInfo(u,"float32",h),f=n.makeTensorInfo(u,"float32",d),m=Wn({inputs:{real:p,imag:f},backend:n});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}function i$(e,t,n){let r=v.sizeFromShape(e.shape),a=n.data.get(e.dataId),s=n.data.get(a.complexTensorInfos.real.dataId).values,i=n.data.get(a.complexTensorInfos.imag.dataId).values;if(o$(r)){let o=aA(s,i,r,t,n),l=[e.shape[0],e.shape[1]];if(t){let u=n.makeTensorInfo(l,"float32",o.real),c=n.makeTensorInfo(l,"float32",o.imag),h=n.makeTensorInfo([],"float32",v.createScalarValue(r,"float32")),d=Hr({inputs:{x:h},backend:n}),p=rA.kernelFunc({inputs:{a:u,b:h},backend:n}),f=rA.kernelFunc({inputs:{a:c,b:d},backend:n}),m=n.data.get(p.dataId).values,A=n.data.get(f.dataId).values;return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),{real:m,imag:A}}return o}else{let o=R.mergeRealAndImagArrays(s,i),l=l$(o,r,t);return R.splitRealAndImagArrays(l)}}function o$(e){return(e&e-1)==0}function aA(e,t,n,r,a){if(n===1)return{real:e,imag:t};let s=R.mergeRealAndImagArrays(e,t),i=n/2,o=R.complexWithEvenIndex(s),l=o.real,u=o.imag,c=[l.length],h=a.makeTensorInfo(c,"float32",l),d=a.makeTensorInfo(c,"float32",u),p=Wn({inputs:{real:h,imag:d},backend:a}),f=R.complexWithOddIndex(s),m=f.real,A=f.imag,y=[m.length],g=a.makeTensorInfo(y,"float32",m),w=a.makeTensorInfo(y,"float32",A),b=Wn({inputs:{real:g,imag:w},backend:a}),_=aA(l,u,i,r,a),x=_.real,S=_.imag,T=[x.length],E=a.makeTensorInfo(T,"float32",x),F=a.makeTensorInfo(T,"float32",S),P=Wn({inputs:{real:E,imag:F},backend:a}),W=aA(m,A,i,r,a),V=W.real,U=W.imag,H=[V.length],X=a.makeTensorInfo(H,"float32",V),G=a.makeTensorInfo(H,"float32",U),ee=Wn({inputs:{real:X,imag:G},backend:a}),Y=R.exponents(n,r),se=[Y.real.length],te=a.makeTensorInfo(se,"float32",Y.real),le=a.makeTensorInfo(se,"float32",Y.imag),Q=Wn({inputs:{real:te,imag:le},backend:a}),pe=Jm({inputs:{a:Q,b:ee},backend:a}),ce=pu({inputs:{a:P,b:pe},backend:a}),ye=Qm({inputs:{a:P,b:pe},backend:a}),me=vi({inputs:{input:ce},backend:a}),Ne=vi({inputs:{input:ye},backend:a}),Ce=Rl({inputs:{input:ce},backend:a}),De=Rl({inputs:{input:ye},backend:a}),Pe=Ml({inputs:[me,Ne],backend:a,attrs:{axis:0}}),Oe=Ml({inputs:[Ce,De],backend:a,attrs:{axis:0}}),nt=a.data.get(Pe.dataId).values,rt=a.data.get(Oe.dataId).values;return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(g),a.disposeIntermediateTensorInfo(w),a.disposeIntermediateTensorInfo(b),a.disposeIntermediateTensorInfo(E),a.disposeIntermediateTensorInfo(F),a.disposeIntermediateTensorInfo(P),a.disposeIntermediateTensorInfo(X),a.disposeIntermediateTensorInfo(G),a.disposeIntermediateTensorInfo(ee),a.disposeIntermediateTensorInfo(te),a.disposeIntermediateTensorInfo(le),a.disposeIntermediateTensorInfo(Q),a.disposeIntermediateTensorInfo(pe),a.disposeIntermediateTensorInfo(ce),a.disposeIntermediateTensorInfo(ye),a.disposeIntermediateTensorInfo(me),a.disposeIntermediateTensorInfo(Ce),a.disposeIntermediateTensorInfo(Ne),a.disposeIntermediateTensorInfo(De),a.disposeIntermediateTensorInfo(Pe),a.disposeIntermediateTensorInfo(Oe),{real:nt,imag:rt}}function l$(e,t,n){let r=new Float32Array(t*2);for(let a=0;a<t;a++){let s=0,i=0;for(let o=0;o<t;o++){let l=R.exponent(a*o,t,n),u=R.getComplexWithIndex(e,o);s+=u.real*l.real-u.imag*l.imag,i+=u.real*l.imag+u.imag*l.real}n&&(s/=t,i/=t),R.assignToTypedArray(r,s,i,a)}return r}function c$(e){let{inputs:t,backend:n}=e,{input:r}=t,a=v.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=xt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=Gw(o,!1,n),u=xt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var u$={kernelName:Yh,backendName:"cpu",kernelFunc:c$};function sA(e){let{backend:t,attrs:n}=e,{shape:r,value:a,dtype:s}=n,i=s||v.inferDtype(a),o=v.getArrayFromDType(i,v.sizeFromShape(r));return h$(o,a,i),t.makeTensorInfo(r,i,o)}var d$={kernelName:Nc,backendName:"cpu",kernelFunc:sA};function h$(e,t,n){e.fill(t)}var p$={kernelName:ko,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,a=n,s=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(r.shape)),[i,o,l,u]=r.shape,c=a.data.get(r.dataId).values;for(let h=0;h<i;h++){let d=h*l*o*u;for(let p=0;p<o;p++){let f=p*(l*u);for(let m=0;m<l;m++){let A=m*u;for(let y=0;y<u;y++){let g=[i,p,m,y][2],w=Math.round(l-g),b=d+f+A+y,_=c[b];if(w>=0&&w<l){let x=w*u,S=d+f+x+y;_=c[S]}s[b]=_}}}}return{dataId:a.write(s,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},f$=$t((e,t)=>Math.floor(e/t)),m$=Xt(Ts,f$,null,"int32"),A$={kernelName:Ts,backendName:"cpu",kernelFunc:m$};function y$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=Uw({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=pu({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=eA(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var g$={kernelName:oi,backendName:"cpu",kernelFunc:y$};function x$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=jw({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=pu({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=eA(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var w$={kernelName:li,backendName:"cpu",kernelFunc:x$};function b$(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=v.sizeFromShape(r.shape),i=a.shape,o=i[i.length-1],[l,u,c,h]=R.prepareAndValidate(r,a);if(u===0)return n.makeTensorInfo(l,r.dtype,[]);let d=Ue([u,c],r.dtype),p=n.data.get(a.dataId).values,f=n.data.get(r.dataId).values;for(let m=0;m<u;m++){let A=[],y=0;for(let g=0;g<o;g++){let w=p[m*o+g];y+=w*h[g],A.push(w)}if(y<0||y>=s/c)throw new Error(`Invalid indices: ${A} does not index into ${r.shape}`);for(let g=0;g<c;g++)d.values[m*c+g]=f[y*c+g]}return n.makeTensorInfo(l,d.dtype,d.values)}var _$={kernelName:So,backendName:"cpu",kernelFunc:b$};function v$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r;Se([a,s],"gatherV2");let l=o;o==null&&(l=0);let u=v.sizeFromShape(s.shape),c=v.parseAxisParam(i,a.shape)[0],h=R.segment_util.collectGatherOpShapeInfo(a,s,c,l),d=xt({inputs:{x:a},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),p=xt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,u/h.batchSize]}}),f=[h.batchSize,h.outerSize,u/h.batchSize,h.sliceSize],m=n.bufferSync(p),A=n.bufferSync(d),y=mw(A,m,f);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.makeTensorInfo(h.outputShape,y.dtype,y.values)}var k$={kernelName:Io,backendName:"cpu",kernelFunc:v$},I$=$t((e,t)=>e>=t?1:0),S$=Xt(Cs,I$,null,"bool"),N$={kernelName:Cs,backendName:"cpu",kernelFunc:S$};function T$(e){let{inputs:t,backend:n}=e,{input:r}=t,a=v.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=xt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=Gw(o,!0,n),u=xt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var E$={kernelName:Jh,backendName:"cpu",kernelFunc:T$},C$=ot(To,e=>Number.isFinite(e)?1:0,"bool"),R$={kernelName:To,backendName:"cpu",kernelFunc:C$},M$=ot(Eo,e=>Math.abs(e)===Infinity?1:0,"bool"),F$={kernelName:Eo,backendName:"cpu",kernelFunc:M$},$$=ot(Co,e=>Number.isNaN(e)?1:0,"bool"),D$={kernelName:Co,backendName:"cpu",kernelFunc:$$},O$=$t((e,t)=>e<=t?1:0),z$=Xt(Mo,O$,null,"bool"),P$={kernelName:Mo,backendName:"cpu",kernelFunc:z$};function L$(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=gw(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var W$={kernelName:ed,backendName:"cpu",kernelFunc:L$},B$=ot(Fo,e=>Math.log1p(e)),V$={kernelName:Fo,backendName:"cpu",kernelFunc:B$},U$=$t((e,t)=>e&&t),j$=Xt($o,U$,null,"bool"),H$={kernelName:$o,backendName:"cpu",kernelFunc:j$},G$=ot(Tc,e=>e?0:1,"bool"),q$={kernelName:Tc,backendName:"cpu",kernelFunc:G$},X$=$t((e,t)=>e||t),K$=Xt(Ec,X$,null,"bool"),Z$={kernelName:Ec,backendName:"cpu",kernelFunc:K$};function Y$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;Se(a,"LRN");let u=a.shape[3],c=u-1,h=n.data.get(a.dataId).values,d=v.sizeFromShape(a.shape),p=new Float32Array(d);function f(m){let A=m%u,y=m-A+Math.max(0,A-s),g=m-A+Math.min(A+s,c),w=0;for(;y<=g;y++){let b=h[y];w+=b*b}return w}for(let m=0;m<d;m++){let A=f(m),y=h[m]*Math.pow(i+o*A,-l);p[m]=y}return n.makeTensorInfo(a.shape,a.dtype,p)}var J$={kernelName:Cc,backendName:"cpu",kernelFunc:Y$};function Q$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:c}=r;Se(i,"LRNGrad");let h=v.sizeFromShape(i.shape),d=i.shape[3],p=n.data.get(i.dataId).values,f=n.data.get(a.dataId).values,m=n.data.get(s.dataId).values,A=new Float32Array(h),y=h;for(let g=0;g<y;g++){let w=g%d,b=g-w+Math.max(0,w-o),_=g-w+Math.min(d,w+o+1),x=0;for(let S=b;S<_;S++)x+=Math.pow(f[S],2);x=u*x+l;for(let S=b;S<_;S++){let T=-2*u*c*f[S]*m[g]/x;g===S&&(T+=Math.pow(x,-c)),T*=p[g],A[S]+=T}}return n.makeTensorInfo(i.shape,a.dtype,A)}var eD={kernelName:td,backendName:"cpu",kernelFunc:Q$};function qw(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=n,l=a.shape,u=l.length,c=v.parseAxisParam(s,l),h=c,d=R.getAxesPermutation(h,u),p=o.data.get(a.dataId).values;if(d!=null){let b=new Array(u);for(let _=0;_<b.length;_++)b[_]=l[d[_]];p=Km(p,l,a.dtype,d,b),h=R.getInnerMostAxes(h.length,u),l=b}Se(a,"max"),R.assertAxesAreInnerMostDims("max",h,u);let[f,m]=R.computeOutAndReduceShapes(l,h),A=v.sizeFromShape(m),y=ww(p,A,f,a.dtype),g=o.write(y,f,a.dtype),w=f;return i&&(w=R.expandShapeToKeepDim(f,c)),{dataId:g,shape:w,dtype:a.dtype}}var tD={kernelName:$s,backendName:"cpu",kernelFunc:qw};function nD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Se(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,u=1;v.assert(R.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let c=R.computePool2DInfo(a.shape,s,i,u,o,l),h;if(c.filterWidth===1&&c.filterHeight===1&&v.arraysEqual(c.inShape,c.outShape))h=Hr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=v.computeStrides(a.shape),f=tA(d,a.shape,a.dtype,p,c,"max");h=n.makeTensorInfo(c.outShape,a.dtype,f.values)}return h}var rD={kernelName:Os,backendName:"cpu",kernelFunc:nD};function aD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;Se(a,"maxPool3d");let c=R.computePool3DInfo(a.shape,s,i,1,o,l,u),h=n.data.get(a.dataId).values,d=Vw(h,a.shape,a.dtype,v.computeStrides(a.shape),c,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var sD={kernelName:Rc,backendName:"cpu",kernelFunc:aD};function iD(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;Se([a,s],"maxPool3DGrad");let c=R.computePool3DInfo(s.shape,i,o,1,l,u),h=n.bufferSync(s),d=GM(h,c),p=c.strideDepth,f=c.strideHeight,m=c.strideWidth,A=c.dilationDepth,y=c.dilationHeight,g=c.dilationWidth,w=c.effectiveFilterDepth,b=c.effectiveFilterHeight,_=c.effectiveFilterWidth,x=w-1-c.padInfo.front,S=_-1-c.padInfo.left,T=b-1-c.padInfo.top,E=Ue(s.shape,"float32"),F=n.bufferSync(a);for(let P=0;P<c.batchSize;++P)for(let W=0;W<c.inChannels;++W)for(let V=0;V<c.inDepth;++V)for(let U=0;U<c.inHeight;++U)for(let H=0;H<c.inWidth;++H){let X=V-x,G=U-T,ee=H-S,Y=0;for(let se=0;se<w;se+=A){let te=(X+se)/p;if(!(te<0||te>=c.outDepth||Math.floor(te)!==te))for(let le=0;le<b;le+=y){let Q=(G+le)/f;if(!(Q<0||Q>=c.outHeight||Math.floor(Q)!==Q))for(let pe=0;pe<_;pe+=g){let ce=(ee+pe)/m;if(ce<0||ce>=c.outWidth||Math.floor(ce)!==ce)continue;let ye=w*b*_-1-d.get(P,te,Q,ce,W),me=se*b*_+le*_+pe,Ne=ye===me?1:0;Ne!==0&&(Y+=F.get(P,te,Q,ce,W)*Ne)}}}E.set(Y,P,V,U,H,W)}return n.makeTensorInfo(E.shape,E.dtype,E.values)}var oD={kernelName:rd,backendName:"cpu",kernelFunc:iD};function lD(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;Se([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:h}=r,d=R.computePool2DInfo(o.shape,l,u,1,c,h),p=n.data.get(o.dataId).values,f=Ue(d.outShape,o.dtype,Bw(p,o.shape,o.dtype,d).values),m=d.strideHeight,A=d.strideWidth,y=d.dilationHeight,g=d.dilationWidth,w=d.effectiveFilterHeight,b=d.effectiveFilterWidth,_=b-1-d.padInfo.left,x=w-1-d.padInfo.top,S=Ue(o.shape,"float32"),T=n.data.get(a.dataId).values,E=Ue(a.shape,"float32",T);for(let F=0;F<d.batchSize;++F)for(let P=0;P<d.inChannels;++P)for(let W=0;W<d.inHeight;++W)for(let V=0;V<d.inWidth;++V){let U=W-x,H=V-_,X=0;for(let G=0;G<w;G+=y){let ee=(U+G)/m;if(!(ee<0||ee>=d.outHeight||Math.floor(ee)!==ee))for(let Y=0;Y<b;Y+=g){let se=(H+Y)/A;if(se<0||se>=d.outWidth||Math.floor(se)!==se)continue;let te=w*b-1-f.get(F,ee,se,P),le=G*b+Y,Q=te===le?1:0;Q!==0&&(X+=E.get(F,ee,se,P)*Q)}}S.set(X,F,W,V,P)}return n.makeTensorInfo(S.shape,S.dtype,S.values)}var cD={kernelName:nd,backendName:"cpu",kernelFunc:lD};function uD(e,t,n,r,a){let s=v.computeStrides(t),i=tA(e,t,n,s,a,"max"),o=Bw(e,t,n,a,!0,r);return[i.values,o.values]}var hD={kernelName:ad,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;Se(r,"MaxPoolWithArgmax");let u=l.data.get(r.dataId).values,c=R.computePool2DInfo(r.shape,a,s,[1,1],i),[h,d]=uD(u,r.shape,r.dtype,o,c),p=l.write(h,c.outShape,r.dtype),f=l.write(d,c.outShape,r.dtype);return[{dataId:p,shape:c.outShape,dtype:r.dtype},{dataId:f,shape:c.outShape,dtype:"int32"}]}};function dp(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Se(a,"sum");let o;a.dtype==="bool"?o=Ha({inputs:{x:a},backend:n,attrs:{dtype:"int32"}}):o=Hr({inputs:{x:a},backend:n});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),c=R.getAxesPermutation(u,l),h=u,d=o;c!=null&&(d=hr({inputs:{x:o},backend:n,attrs:{perm:c}}),h=R.getInnerMostAxes(h.length,l)),R.assertAxesAreInnerMostDims("sum",h,d.shape.length);let[p,f]=R.computeOutAndReduceShapes(d.shape,h),m=R.upcastType(d.dtype,"int32"),A=up(n,p,m),y=v.sizeFromShape(f),g=n.data.get(A.dataId).values,w=n.data.get(d.dataId).values;for(let b=0;b<g.length;++b){let _=b*y,x=0;for(let S=0;S<y;++S)x+=w[_+S];g[b]=x}if(i){let b=R.expandShapeToKeepDim(A.shape,u),_=A;A=xt({inputs:{x:A},backend:n,attrs:{shape:b}}),n.disposeIntermediateTensorInfo(_)}return n.disposeIntermediateTensorInfo(o),c!=null&&n.disposeIntermediateTensorInfo(d),A}var dD={kernelName:ei,backendName:"cpu",kernelFunc:dp};function pD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=v.parseAxisParam(s,a.shape),l=R.computeOutAndReduceShapes(a.shape,o)[1],u=v.sizeFromShape(l),c=[],h=n.makeTensorInfo([],"float32",new Float32Array([u]));c.push(h);let d=Ha({inputs:{x:a},backend:n,attrs:{dtype:"float32"}});c.push(d);let p=nA({inputs:{a:d,b:h},backend:n});c.push(p);let f=dp({inputs:{x:p},backend:n,attrs:{axis:s,keepDims:i}});return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var fD={kernelName:zs,backendName:"cpu",kernelFunc:pD};function mD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;Se(a,"min");let o=v.parseAxisParam(s,a.shape),l=o,u=R.getAxesPermutation(l,a.shape.length),c=a;u!=null&&(c=hr({inputs:{x:a},backend:n,attrs:{perm:u}}),l=R.getInnerMostAxes(l.length,a.shape.length)),R.assertAxesAreInnerMostDims("min",l,c.shape.length);let[h,d]=R.computeOutAndReduceShapes(c.shape,l),p=v.sizeFromShape(d),f=v.makeZerosTypedArray(v.sizeFromShape(h),c.dtype),m=n.data.get(c.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,w=m[g];for(let b=0;b<p;++b){let _=m[g+b];_<w&&(w=_)}f[y]=w}u!=null&&n.disposeIntermediateTensorInfo(c);let A=n.makeTensorInfo(h,c.dtype,f);if(i){let y=R.expandShapeToKeepDim(h,o),g=xt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var AD={kernelName:Ps,backendName:"cpu",kernelFunc:mD};function yD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,mode:i}=r;Se(a,"mirrorPad");let o=s.map((g,w)=>g[0]+a.shape[w]+g[1]),l=s.map(g=>g[0]),u=s.map((g,w)=>g[0]+a.shape[w]),c=i==="reflect"?0:1,h=n.data.get(a.dataId).values,d=a.shape.length,p=v.computeStrides(a.shape),f=v.sizeFromShape(o),m=o.length,A=v.computeStrides(o),y=v.getTypedArrayFromDType(a.dtype,f);for(let g=0;g<f;g++){let w=v.indexToLoc(g,m,A);for(let _=0;_<m;_++)w[_]<l[_]?w[_]=l[_]*2-w[_]-c:w[_]>=u[_]&&(w[_]=(u[_]-1)*2-w[_]+c);w=w.map((_,x)=>_-l[x]);let b=v.locToIndex(w,d,p);y[g]=h[b]}return{dataId:n.write(y,o,a.dtype),shape:o,dtype:a.dtype}}var gD={kernelName:Mc,backendName:"cpu",kernelFunc:yD},xD=$t((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),wD=Xt(Do,xD),bD={kernelName:Do,backendName:"cpu",kernelFunc:wD},_D=ro(r5());function Xw(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=a.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=v.parseAxisParam([o],a.shape),u=qw({inputs:{x:a},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),c=R.expandShapeToKeepDim(u.shape,l),h=xt({inputs:{x:u},backend:n,attrs:{shape:c}}),d=Qm({inputs:{a,b:h},backend:n}),p=Fw({inputs:{x:d},backend:n}),f=dp({inputs:{x:p},backend:n,attrs:{axis:l,keepDims:!1}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:c}}),A=nA({inputs:{a:p,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var vD={kernelName:ti,backendName:"cpu",kernelFunc:Xw};function kD(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;Se(a,"multinomial");let l=o?a:Xw({inputs:{logits:a},backend:n,attrs:{dim:-1}}),u=l.shape[0],c=l.shape[1],h=n.data.get(l.dataId).values,d=[u,s],p=v.makeZerosTypedArray(v.sizeFromShape(d),"int32");for(let f=0;f<u;++f){let m=f*c,A=new Float32Array(c-1);A[0]=h[m];for(let w=1;w<A.length;++w)A[w]=A[w-1]+h[m+w];let y=_D.alea(i.toString()),g=f*s;for(let w=0;w<s;++w){let b=y();p[g+w]=A.length;for(let _=0;_<A.length;_++)if(b<A[_]){p[g+w]=_;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(d,"int32",p)}var ID={kernelName:sd,backendName:"cpu",kernelFunc:kD},SD=jr.nonMaxSuppressionV3Impl;function ND(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r;Se(a,"NonMaxSuppression");let u=n.data.get(a.dataId).values,c=n.data.get(s.dataId).values,{selectedIndices:h}=SD(u,c,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var TD={kernelName:Po,backendName:"cpu",kernelFunc:ND},ED=jr.nonMaxSuppressionV4Impl;function CD(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=r;Se(a,"NonMaxSuppressionPadded");let c=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,{selectedIndices:d,validOutputs:p}=ED(c,h,i,o,l,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var RD={kernelName:Lo,backendName:"cpu",kernelFunc:CD},MD=jr.nonMaxSuppressionV5Impl;function FD(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=r;Se(a,"NonMaxSuppressionWithScore");let c=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,d=i,p=o,f=l,m=u,{selectedIndices:A,selectedScores:y}=MD(c,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var $D={kernelName:Wo,backendName:"cpu",kernelFunc:FD};function DD(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r;Se(a,"oneHot");let l=v.sizeFromShape(a.shape),u=new Float32Array(l*s);u.fill(o);let c=n.data.get(a.dataId).values;for(let h=0;h<l;++h)c[h]>=0&&c[h]<s&&(u[h*s+c[h]]=i);return n.makeTensorInfo([...a.shape,s],"int32",u)}var OD={kernelName:Bs,backendName:"cpu",kernelFunc:DD};function pp(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(r.dtype==="complex64"){let a=vi({inputs:{input:r},backend:n}),s=pp({inputs:{x:a},backend:n}),i=Rl({inputs:{input:r},backend:n}),o=pp({inputs:{x:i},backend:n}),l=Wn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return sA({backend:n,attrs:{shape:r.shape,value:0,dtype:r.dtype}})}var zD={kernelName:al,backendName:"cpu",kernelFunc:pp};function Kw(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(r.dtype==="complex64"){let a=vi({inputs:{input:r},backend:n}),s=Kw({inputs:{x:a},backend:n}),i=Rl({inputs:{input:r},backend:n}),o=pp({inputs:{x:i},backend:n}),l=Wn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return sA({backend:n,attrs:{shape:r.shape,value:1,dtype:r.dtype}})}var PD={kernelName:Bo,backendName:"cpu",kernelFunc:Kw};function Zw(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return hp({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{v.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(c=>{let h=hp({inputs:{input:c},backend:n,attrs:{dim:a}});return o.push(h),h}),u=Ml({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var LD={kernelName:Vo,backendName:"cpu",kernelFunc:Zw};function WD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;Se(a,"pad");let o=s.map((y,g)=>y[0]+a.shape[g]+y[1]),l=s.map(y=>y[0]),u=n.data.get(a.dataId).values,c=v.sizeFromShape(a.shape),h=a.shape.length,d=v.computeStrides(a.shape),p=v.sizeFromShape(o),f=o.length,m=v.computeStrides(o),A=v.getTypedArrayFromDType(a.dtype,p);i!==0&&A.fill(i);for(let y=0;y<c;y++){let g=v.indexToLoc(y,h,d).map((b,_)=>b+l[_]),w=v.locToIndex(g,f,m);A[w]=u[y]}return{dataId:n.write(A,o,a.dtype),shape:o,dtype:a.dtype}}var Yw={kernelName:Vs,backendName:"cpu",kernelFunc:WD},BD=$t((e,t)=>Math.pow(e,t)),VD=Xt(Us,BD),UD={kernelName:Us,backendName:"cpu",kernelFunc:VD};function jD(e){let{backend:t,attrs:n}=e,{start:r,stop:a,dtype:s,step:i}=n,o=Zm(r,a,i,s);return t.makeTensorInfo([o.length],s,o)}var HD={kernelName:Fc,backendName:"cpu",kernelFunc:jD},GD=ot(jo,e=>1/e),qD={kernelName:jo,backendName:"cpu",kernelFunc:GD};function XD(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;Se(a,"resizeBilinear");let l=v.computeStrides(a.shape),[u,c]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(v.sizeFromShape([h,u,c,f])),y=[s&&u>1?d-1:d,s&&c>1?p-1:p],g=[s&&u>1?u-1:u,s&&c>1?c-1:c],w=0,b=y[0]/g[0],_=y[1]/g[1];for(let x=0;x<h;x++)for(let S=0;S<u;S++){let T;i?T=b*(S+.5)-.5:T=b*S;let E=Math.max(0,Math.floor(T)),F=T-E,P=Math.min(d-1,Math.ceil(T)),W=x*l[0]+E*l[1],V=x*l[0]+P*l[1];for(let U=0;U<c;U++){let H;i?H=_*(U+.5)-.5:H=_*U;let X=Math.max(0,Math.floor(H)),G=H-X,ee=Math.min(p-1,Math.ceil(H)),Y=W+X*l[2],se=V+X*l[2],te=W+ee*l[2],le=V+ee*l[2];for(let Q=0;Q<f;Q++){let pe=m[Y+Q],ce=m[se+Q],ye=m[te+Q],me=m[le+Q],Ne=pe+(ye-pe)*G,Ce=ce+(me-ce)*G,De=Ne+(Ce-Ne)*F;A[w++]=De}}}return n.makeTensorInfo([h,u,c,f],"float32",A)}var KD={kernelName:Gs,backendName:"cpu",kernelFunc:XD};function ZD(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;Se([s,a],"resizeBilinearGrad");let o=v.computeStrides(a.shape),[l,u,c,h]=a.shape,[,d,p]=s.shape,f=new Float32Array(l*u*c*h),m=[i&&d>1?u-1:u,i&&p>1?c-1:c],A=[i&&d>1?d-1:d,i&&p>1?p-1:p],y=m[0]/A[0],g=m[1]/A[1],w=n.data.get(s.dataId).values,b=0;for(let _=0;_<l;_++){let x=_*o[0];for(let S=0;S<d;S++){let T=S*y,E=Math.floor(T),F=Math.min(Math.ceil(T),u-1),P=x+E*o[1],W=x+F*o[1],V=T-E,U=1-V;for(let H=0;H<p;H++){let X=H*g,G=Math.floor(X),ee=Math.min(Math.ceil(X),c-1),Y=X-G,se=1-Y,te=P+G*o[2],le=P+ee*o[2],Q=W+G*o[2],pe=W+ee*o[2],ce=U*se,ye=U*Y,me=V*se,Ne=V*Y;for(let Ce=0;Ce<h;Ce++){let De=w[b++];f[te+Ce]+=De*ce,f[le+Ce]+=De*ye,f[Q+Ce]+=De*me,f[pe+Ce]+=De*Ne}}}}return n.makeTensorInfo([l,c,u,h],"float32",f)}var YD={kernelName:ld,backendName:"cpu",kernelFunc:ZD};function JD(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;Se(a,"resizeNearestNeighbor");let l=v.computeStrides(a.shape),[u,c]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(h*u*c*f),y=[s&&u>1?d-1:d,s&&c>1?p-1:p],g=[s&&u>1?u-1:u,s&&c>1?c-1:c],w=y[0]/g[0],b=y[1]/g[1],_=0;for(let x=0;x<h;x++){let S=x*l[0];for(let T=0;T<u;T++){let E=i?w*(T+.5):w*T,F=Math.min(d-1,s?Math.round(E):Math.floor(E));i&&(F=Math.max(0,F));let P=S+F*l[1];for(let W=0;W<c;W++){let V=i?b*(W+.5):b*W,U=Math.min(p-1,s?Math.round(V):Math.floor(V));i&&(U=Math.max(0,U));let H=P+U*l[2];for(let X=0;X<f;X++){let G=m[H+X];A[_++]=G}}}}return n.makeTensorInfo([h,u,c,f],a.dtype,A)}var QD={kernelName:$c,backendName:"cpu",kernelFunc:JD};function eO(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;Se([s,a],"resizeNearestNeighborGrad");let o=v.computeStrides(a.shape),l=v.computeStrides(s.shape),[u,c,h,d]=a.shape,[,p,f]=s.shape,m=new Float32Array(u*c*h*d),A=n.data.get(s.dataId).values,y=[i&&p>1?c-1:c,i&&f>1?h-1:h],g=[i&&p>1?p-1:p,i&&f>1?f-1:f],w=y[0]/g[0],b=y[1]/g[1],_=1/w,x=1/b,S=Math.ceil(_)*2+2,T=Math.ceil(x)*2+2;for(let E=0;E<u;E++){let F=E*o[0];for(let P=0;P<c;P++){let W=F+P*o[1],V=Math.floor(P*_),U=Math.floor(V-S/2);for(let H=0;H<h;H++){let X=W+H*o[2],G=Math.floor(H*x),ee=Math.floor(G-T/2);for(let Y=0;Y<d;Y++){let se=0;for(let te=0;te<S;te++){let le=te+U;if(le<0||le>=p)continue;let Q=F+le*l[1],pe=le*w,ce=Math.min(c-1,i?Math.round(pe):Math.floor(pe));if(P===ce)for(let ye=0;ye<T;ye++){let me=ye+ee;if(me<0||me>=f)continue;let Ne=Q+me*l[2],Ce=me*b,De=Math.min(h-1,i?Math.round(Ce):Math.floor(Ce));H===De&&(se+=A[Ne+Y])}}m[X+Y]=se}}}}return n.makeTensorInfo(a.shape,a.dtype,m)}var tO={kernelName:od,backendName:"cpu",kernelFunc:eO};function nO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r;Se(a,"reverse");let i=a.shape.length,o=v.parseAxisParam(s,a.shape);if(i===0)return Hr({inputs:{x:a},backend:n});let l=new Pt(a.shape,a.dtype),u=n.bufferSync(a);for(let c=0;c<l.size;c++){let h=l.indexToLoc(c),d=h.slice();o.forEach(p=>d[p]=a.shape[p]-1-d[p]),l.set(u.get(...d),...h)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var rO={kernelName:Xs,backendName:"cpu",kernelFunc:nO},aO={kernelName:sl,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(r.shape)),[u,c,h,d]=r.shape,[p,f]=R.getImageCenter(i,c,h),m=255,A=Math.sin(a),y=Math.cos(a),g=o.data.get(r.dataId).values;for(let w=0;w<u;w++){let b=w*h*c*d;for(let _=0;_<c;_++){let x=_*(h*d);for(let S=0;S<h;S++){let T=S*d;for(let E=0;E<d;E++){let F=[u,_,S,E],P=F[2],W=F[1],V=(P-p)*y-(W-f)*A,U=(P-p)*A+(W-f)*y;V=Math.round(V+p),U=Math.round(U+f);let H=s;if(typeof s!="number"&&(E===3?H=m:H=s[E]),V>=0&&V<h&&U>=0&&U<c){let G=U*(h*d),ee=V*d,Y=b+G+ee+E;H=g[Y]}let X=b+x+T+E;l[X]=H}}}}return{dataId:o.write(l,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},sO=ot(Ks,e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1}),iO={kernelName:Ks,backendName:"cpu",kernelFunc:sO};function Jw(e,t,n,r,a,s,i,o,l,u){let c=[r/a,a],h=e.values,d=t.values;if(r===0)return Ue(n,t.dtype);let p=Ue(c,t.dtype);p.values.fill(l);for(let f=0;f<s;f++){let m=[],A=0;for(let y=0;y<i;y++){let g=h[f*i+y];m.push(g),A+=g*o[y]}if(A<0||A>=r/a)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let y=0;y<a;y++)u?p.values[A*a+y]+=d[f*a+y]:p.values[A*a+y]=t.rank===0?d[0]:d[f*a+y]}return p}function oO(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:c,outputSize:h}=R.calculateShapes(s,a,i),d=!0,p=n.bufferSync(a),f=n.bufferSync(s),m=Jw(p,f,i,h,u,l,o,c,0,d);return n.makeTensorInfo(i,m.dtype,m.values)}var lO={kernelName:Go,backendName:"cpu",kernelFunc:oO};function cO(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t;Se([r,a,s],"select");let i=r.shape.length,o=n.data.get(r.dataId).values,l=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,c=or(a.dtype,s.dtype),h=v.makeZerosTypedArray(v.sizeFromShape(a.shape),c),d=0,p=i===0||i>1||a.shape.length===1?1:v.sizeFromShape(a.shape.slice(1));for(let f=0;f<o.length;f++)for(let m=0;m<p;m++)o[f]===1?h[d++]=l[f]:h[d++]=u[f];return n.makeTensorInfo(a.shape,c,h)}var uO={kernelName:qo,backendName:"cpu",kernelFunc:cO},hO=R.SELU_SCALEALPHA,dO=R.SELU_SCALE,pO=ot(Xo,e=>e>=0?dO*e:hO*(Math.exp(e)-1)),fO={kernelName:Xo,backendName:"cpu",kernelFunc:pO},mO=ot(Js,e=>1/(1+Math.exp(-e))),AO={kernelName:Js,backendName:"cpu",kernelFunc:mO},yO=ot(Yo,e=>e<0?-1:e>0?1:0),gO={kernelName:Yo,backendName:"cpu",kernelFunc:yO},xO=ot(Ys,e=>Math.sin(e)),wO={kernelName:Ys,backendName:"cpu",kernelFunc:xO},bO=ot(Zo,e=>Math.sinh(e)),_O={kernelName:Zo,backendName:"cpu",kernelFunc:bO},vO=11920928955078125e-23,Qw=Math.log(vO)+2,kO=ot(Jo,e=>{let t=e>-Qw,n=e<Qw,r=Math.exp(e),a;return n?a=r:t?a=e:a=Math.log(1+r),a}),IO={kernelName:Jo,backendName:"cpu",kernelFunc:kO};function SO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;Se([a],"spaceToBatchND");let o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let A=1+s.length;A<a.shape.length;++A)l.push([0,0]);let u=Yw.kernelFunc({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),c=R.getReshaped(u.shape,s,o,!1),h=R.getPermuted(c.length,s.length,!1),d=R.getReshapedPermuted(u.shape,s,o,!1),p=xt({inputs:{x:u},backend:n,attrs:{shape:c}}),f=hr({inputs:{x:p},backend:n,attrs:{perm:h}}),m=xt({inputs:{x:f},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}var NO={kernelName:Dc,backendName:"cpu",kernelFunc:SO};function TO(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:u,sliceSize:c,strides:h,outputSize:d}=R.calculateShapes(s,a,o),p=!1,f=n.bufferSync(a),m=n.bufferSync(s),A=n.data.get(i.dataId).values[0],y=Jw(f,m,o,d,c,u,l,h,A,p);return n.makeTensorInfo(o,y.dtype,y.values)}var EO={kernelName:cd,backendName:"cpu",kernelFunc:TO};function CO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=v.parseAxisParam(i,a.shape)[0],l=R.prepareSplitSize(a,s,o),u=new Array(a.shape.length).fill(0),c=a.shape.slice();return l.map(h=>{let d=[...c];d[o]=h;let p=ki({inputs:{x:a},backend:n,attrs:{begin:u,size:d}});return u[o]+=h,p})}var RO={kernelName:Qo,backendName:"cpu",kernelFunc:CO},MO=ot(Qs,e=>Math.sqrt(e)),FO={kernelName:Qs,backendName:"cpu",kernelFunc:MO},$O={kernelName:Oc,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;Se(n,"square");let a=r.data.get(n.dataId).values,s=new Float32Array(a.length);for(let i=0;i<a.length;++i){let o=a[i];s[i]=o*o}return{dataId:r.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},DO=ot(Fa,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),OO={kernelName:Fa,backendName:"cpu",kernelFunc:DO};function zO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:h,shrinkAxisMask:d}=r;Se(a,"stridedSlice");let{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=dn.sliceInfo(a.shape,s,i,o,l,u,c,h,d),w=xt({inputs:{x:a},backend:n,attrs:{shape:y}}),b;if(p){let x=ki({inputs:{x:w},backend:n,attrs:{begin:f,size:A}});b=xt({inputs:{x},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(x)}else if(g.some(x=>x===0))b=n.makeTensorInfo(g,a.dtype,[]);else{let x=n.bufferSync(w),S=Tw(g,x,m,f);b=n.makeTensorInfo(S.shape,S.dtype,S.values)}let _=xt({inputs:{x:b},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(b),_}var PO={kernelName:el,backendName:"cpu",kernelFunc:zO},LO=ot(tl,e=>Math.tan(e)),WO={kernelName:tl,backendName:"cpu",kernelFunc:LO},BO=ot(ai,e=>Math.tanh(e)),VO={kernelName:ai,backendName:"cpu",kernelFunc:BO};function UO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;Se(a,"tile");let i=Cw(n.bufferSync(a),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var jO={kernelName:Ma,backendName:"cpu",kernelFunc:UO};function HO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r;Se(a,"topk");let o=n.data.get(a.dataId).values,[l,u]=Rw(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var GO={kernelName:nl,backendName:"cpu",kernelFunc:HO};function KO(e){let{inputs:t,attrs:n,backend:r}=e,{image:a,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[c,h,d,p]=a.shape,[f,m]=u!=null?u:[h,d],A=[c,f,m,p],y=v.computeStrides(a.shape),g=y[0],w=y[1],b=y[2],_=v.getTypedArrayFromDType(a.dtype,v.sizeFromShape(A));_.fill(l);let x=r.data.get(a.dataId).values,S=r.data.get(s.dataId).values;for(let T=0;T<c;++T){let E=s.shape[0]===1?S:S.subarray(T*8,T*8+8);for(let F=0;F<f;++F)for(let P=0;P<m;++P)for(let W=0;W<p;++W){let V,U=E[6]*P+E[7]*F+1;if(U===0)continue;let H=(E[0]*P+E[1]*F+E[2])/U,X=(E[3]*P+E[4]*F+E[5])/U,G=eb(H,d,o),ee=eb(X,h,o);switch(i){case"nearest":V=qO(x,h,d,g,w,b,T,ee,G,W,l);break;case"bilinear":V=XO(x,h,d,g,w,b,T,ee,G,W,l);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${i}`)}let Y=T*g+F*w+P*b+W;_[Y]=V}return r.makeTensorInfo(A,a.dtype,_)}return{dataId:r.write(_,A,a.dtype),shape:a.shape,dtype:a.dtype}}var ZO={kernelName:ud,backendName:"cpu",kernelFunc:KO};function eb(e,t,n){switch(n){case"reflect":return YO(e,t);case"wrap":return JO(e,t);case"nearest":return ez(e,t);case"constant":default:return QO(e,t)}}function YO(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=2*t;n<r&&(n=r*Math.trunc(-n/r)+n),n=n<-t?n+r:-n-1}else if(n>t-1)if(t<=1)n=0;else{let r=2*t;n-=r*Math.trunc(n/r),n>=t&&(n=r-n-1)}return v.clamp(0,n,t-1)}function JO(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=t-1;n+=t*(Math.trunc(-n/r)+1)}else if(n>t-1)if(t<=1)n=0;else{let r=t-1;n-=t*Math.trunc(n/r)}return v.clamp(0,n,t-1)}function QO(e,t){return e}function ez(e,t){return v.clamp(0,e,t-1)}function fu(e,t,n,r,a,s,i,o,l,u,c){let h=i*r+o*a+l*s+u;return 0<=o&&o<t&&0<=l&&l<n?e[h]:c}function qO(e,t,n,r,a,s,i,o,l,u,c){let h=Math.round(o),d=Math.round(l);return fu(e,t,n,r,a,s,i,h,d,u,c)}function XO(e,t,n,r,a,s,i,o,l,u,c){let h=Math.floor(o),d=Math.floor(l),p=h+1,f=d+1,m=(f-l)*fu(e,t,n,r,a,s,i,h,d,u,c)+(l-d)*fu(e,t,n,r,a,s,i,h,f,u,c),A=(f-l)*fu(e,t,n,r,a,s,i,p,d,u,c)+(l-d)*fu(e,t,n,r,a,s,i,p,f,u,c);return(p-o)*m+(o-h)*A}function tz(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;Se(s,"unique");let i=r.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:u}=Mw(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([u.length],"int32",u)]}var nz={kernelName:hd,backendName:"cpu",kernelFunc:tz};function rz(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape.length,o=a.shape[s],l=new Array(i-1),u=0;for(let p=0;p<i;p++)p!==s&&(l[u++]=a.shape[p]);let c=new Array(i).fill(0),h=a.shape.slice();h[s]=1;let d=new Array(o);for(let p=0;p<d.length;p++){c[s]=p;let f=ki({inputs:{x:a},backend:n,attrs:{begin:c,size:h}});d[p]=xt({inputs:{x:f},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(f)}return d}var az={kernelName:rl,backendName:"cpu",kernelFunc:rz};function sz(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r;Se(a,"unsortedSegmentSum");let o=a.shape.length,l=s.shape.length,u=[],c=[],h=o-l,d=s;for(let f=0;f<h;++f){let m=hp({inputs:{input:d},backend:n,attrs:{dim:f+1}});d=m,c.push(m)}for(let f=0;f<i;++f){let m=v.createScalarValue(f,"int32"),A=n.makeTensorInfo([],"int32",m),y=Hw({inputs:{a:A,b:d},backend:n}),g=Ha({inputs:{x:y},backend:n,attrs:{dtype:"float32"}}),w=Jm({inputs:{a:g,b:a},backend:n}),b=dp({inputs:{x:w},backend:n,attrs:{axis:0,keepDims:!1}});u.push(b),c.push(A),c.push(y),c.push(g),c.push(w),c.push(b)}let p=Zw({inputs:u,backend:n,attrs:{axis:0}});return c.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var iz={kernelName:zc,backendName:"cpu",kernelFunc:sz},oz=[wM,IR,_M,kM,RR,SM,TM,CM,MM,$M,OM,PM,WM,UM,HM,XM,ZM,JM,eF,gM,nF,aF,iF,ER,FR,lF,SR,uF,dF,mF,yF,pF,bF,vF,xF,IF,NF,EF,RF,FF,DF,OF,PF,WF,VF,UF,HF,jF,rA,hM,qF,KF,r$,$R,a$,OR,u$,d$,p$,PR,A$,g$,w$,_$,k$,WR,N$,NR,E$,hF,R$,F$,D$,dM,VR,P$,W$,jR,V$,H$,q$,Z$,J$,eD,GR,rD,sD,oD,cD,hD,tD,fD,AD,XR,gD,bD,ID,ZR,JR,TD,RD,$D,eM,OD,PD,LD,Yw,UD,fM,rM,HD,TR,qD,mM,AM,yM,KD,YD,QD,tO,rO,aO,iO,sM,lO,uO,fO,AO,gO,wO,_O,iM,vD,IO,NO,EO,RO,FO,$O,lM,OO,PO,uM,dD,WO,VO,jO,GO,tM,ZO,nz,az,iz,zD];for(let e of oz)ci(e);var tb={};Le(tb,{assertNotComplex:()=>Fl,bindCanvasToFramebuffer:()=>uz,bindColorTextureToFramebuffer:()=>mp,bindTextureToProgramUniformSampler:()=>Ab,bindTextureUnit:()=>pb,bindVertexBufferToProgramAttribute:()=>iA,callAndCheck:()=>ve,canBeRepresented:()=>nb,createFragmentShader:()=>sb,createFramebuffer:()=>db,createProgram:()=>ib,createStaticIndexBuffer:()=>cb,createStaticVertexBuffer:()=>lb,createTexture:()=>ub,createVertexShader:()=>ab,getBatchDim:()=>Ii,getExtensionOrThrow:()=>mu,getFramebufferErrorMessage:()=>yb,getMaxTexturesInShader:()=>wb,getNumChannels:()=>lz,getProgramUniformLocation:()=>mb,getProgramUniformLocationOrThrow:()=>fb,getRowsCols:()=>Si,getShapeAs3D:()=>Ap,getTextureShapeFromLogicalShape:()=>gb,getWebGLDisjointQueryTimerVersion:()=>bb,getWebGLErrorMessage:()=>rb,getWebGLMaxTextureSize:()=>xb,hasExtension:()=>Jn,isCapableOfRenderingToFloatTexture:()=>_b,isDownloadFloatTextureEnabled:()=>vb,isReshapeFree:()=>yu,isWebGLFenceEnabled:()=>kb,isWebGLVersionEnabled:()=>lA,linkProgram:()=>ob,resetMaxTextureSize:()=>hz,resetMaxTexturesInShader:()=>dz,unbindColorTextureFromFramebuffer:()=>oA,unbindTextureUnit:()=>cz,validateFramebuffer:()=>Au,validateProgram:()=>fp,validateTextureSize:()=>hb});var Ni={},cA={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function yp(e,t){Ni[e]=t}function Gr(e){if(!(e in Ni)){let n=pz(e);if(n!==null)Ni[e]=n;else return console.log("Could not get context for WebGL version",e),null}let t=Ni[e];return t.isContextLost()?(delete Ni[e],Gr(e)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Ni[e])}function fz(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function pz(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=fz(e);return t.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Ni[e]},!1),e===1?t.getContext("webgl",cA)||t.getContext("experimental-webgl",cA):t.getContext("webgl2",cA)}var gu;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(gu||(gu={}));var Qn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(Qn||(Qn={}));var rn;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(rn||(rn={}));function xu(e,t){return[t,e]}function mz(e,t){return e*t}function wu(e){let t=v.sizeFromShape(e),n=Math.ceil(t/4);return v.sizeToSquarishShape(n)}function $l(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function Az(e,t){let[n,r]=$l(e,t);return n*r*4}function uA(e,t){let n=e,r,a,s,i,o,l,u,c,h,d;return J().getNumber("WEBGL_VERSION")===2?(r=n.R32F,a=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,u=4,c=1,h=n.HALF_FLOAT,d=n.FLOAT):(r=e.RGBA,a=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,u=4,c=4,h=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:a,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:h,textureTypeFloat:d}}function ve(e,t){let n=t();return J().getBool("DEBUG")&&yz(e),n}function yz(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+rb(e,t))}var gz=596e-10,xz=65504;function nb(e){return!!(J().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||gz<Math.abs(e)&&Math.abs(e)<xz)}function rb(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function mu(e,t){return pa(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function ab(e,t){let n=pa(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ve(e,()=>e.shaderSource(n,t)),ve(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function sb(e,t){let n=pa(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ve(e,()=>e.shaderSource(n,t)),ve(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw wz(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var bz=/ERROR: [0-9]+:([0-9]+):/g;function wz(e,t){let n=bz.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],a=e.split(`
|
|
`),s=a.length.toString().length+2,i=a.map((h,d)=>v.rightPad((d+1).toString(),s)+h),o=0;for(let h=0;h<i.length;h++)o=Math.max(i[h].length,o);let l=i.slice(0,r-1),u=i.slice(r-1,r),c=i.slice(r);console.log(l.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${v.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(c.join(`
|
|
`))}function ib(e){return pa(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function ob(e,t){if(ve(e,()=>e.linkProgram(t)),e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function fp(e,t){if(ve(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function lb(e,t){let n=pa(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ve(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function cb(e,t){let n=pa(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ve(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ve(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function lz(){return J().getNumber("WEBGL_VERSION")===2?1:4}function ub(e){return pa(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function hb(e,t){let n=J().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let r=`[${e}x${t}]`;throw new Error("Requested texture size "+r+" is invalid.")}if(e>n||t>n){let r=`[${e}x${t}]`,a=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+a+".")}}function db(e){return pa(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function iA(e,t,n,r,a,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),ve(e,()=>e.vertexAttribPointer(o,a,e.FLOAT,!1,s,i)),ve(e,()=>e.enableVertexAttribArray(o)),!0)}function pb(e,t,n){Ib(e,n),ve(e,()=>e.activeTexture(e.TEXTURE0+n)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function cz(e,t){Ib(e,t),ve(e,()=>e.activeTexture(e.TEXTURE0+t)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function fb(e,t,n){return pa(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function mb(e,t,n){return e.getUniformLocation(t,n)}function Ab(e,t,n,r){ve(e,()=>pb(e,t,r)),ve(e,()=>e.uniform1i(n,r))}function uz(e){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ve(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ve(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function mp(e,t,n){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ve(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function oA(e,t){ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ve(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Au(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+yb(e,t))}function yb(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function pa(e,t,n){let r=ve(e,()=>t());if(r==null)throw new Error(n);return r}function Ib(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(r<e.TEXTURE0||r>n){let a=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${a}.`)}}function Ii(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function Si(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function Ap(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[Ii(e),...Si(e)]),t}function gb(e,t=!1){let n=J().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((a,s)=>s>=e.length-2?v.nearestLargerEven(e[s]):e[s]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e);if(e.length<=1&&r<=n)return[1,r];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let a=Ii(e),s=2,i=2;return e.length&&([s,i]=Si(e)),r=a*(s/2)*(i/2),v.sizeToSquarishShape(r).map(o=>o*2)}return v.sizeToSquarishShape(r)}function gp(e){return e%2==0}function yu(e,t){if(e=e.slice(-2),t=t.slice(-2),v.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r||gp(n)&&gp(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&gp(e[0])&&gp(t[0])}var xp,wp;function xb(e){if(xp==null){let t=Gr(e);xp=t.getParameter(t.MAX_TEXTURE_SIZE)}return xp}function hz(){xp=null}function dz(){wp=null}function wb(e){if(wp==null){let t=Gr(e);wp=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,wp)}function bb(e){if(e===0)return 0;let t,n=Gr(e);return Jn(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:Jn(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function Jn(e,t){return e.getExtension(t)!=null}function lA(e){try{if(Gr(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function _b(e){if(e===0)return!1;let t=Gr(e);if(e===1){if(!Jn(t,"OES_texture_float"))return!1}else if(!Jn(t,"EXT_color_buffer_float"))return!1;return hA(t)}function vb(e){if(e===0)return!1;let t=Gr(e);if(e===1){if(!Jn(t,"OES_texture_float")||!Jn(t,"WEBGL_color_buffer_float"))return!1}else{if(Jn(t,"EXT_color_buffer_float"))return hA(t);let n="EXT_color_buffer_half_float";if(Jn(t,n)){let r=t.getExtension(n);return _z(t,r)}return!1}return hA(t)}function hA(e){let t=uA(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,a=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,a,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(s),i}function _z(e,t){let n=uA(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let a=1,s=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,a,s,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(i),o}function kb(e){return e!==2?!1:Gr(e).fenceSync!=null}function Fl(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&v.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var $e=J();$e.registerFlag("HAS_WEBGL",()=>$e.getNumber("WEBGL_VERSION")>0);$e.registerFlag("WEBGL_VERSION",()=>lA(2)?2:lA(1)?1:0);$e.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);$e.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>$e.get("WEBGL_VERSION")===2);$e.registerFlag("WEBGL_CPU_FORWARD",()=>!0);$e.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);$e.registerFlag("WEBGL_PACK",()=>$e.getBool("HAS_WEBGL"));$e.registerFlag("WEBGL_PACK_NORMALIZATION",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_CLIP",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>!1);$e.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_REDUCE",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_LAZILY_UNPACK",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_CONV_IM2COL",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>xb($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>wb($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=$e.getNumber("WEBGL_VERSION");return e===0?0:bb(e)});$e.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>$e.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Gc.isMobile());$e.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>_b($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>$e.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:$e.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));$e.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>vb($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_FENCE_API_ENABLED",()=>kb($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>$e.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);$e.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});$e.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Gc.isMobile()&&$e.getBool("IS_CHROME")?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});function mn(){let e,t,n,r,a,s,i,o,l,u;return J().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",a="texture",s="outputColor",i="out vec4 outputColor;",o=`
|
|
bool isnan_custom(float val) {
|
|
return (val > 0.0 || val < 0.0) ? false : val != 0.0;
|
|
}
|
|
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan_custom(val.x),
|
|
isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));
|
|
}
|
|
|
|
#define isnan(value) isnan_custom(value)
|
|
`,l="",u=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(e="",t="attribute",n="varying",r="varying",a="texture2D",s="gl_FragColor",i="",o=`
|
|
#define isnan(value) isnan_custom(value)
|
|
bool isnan_custom(float val) {
|
|
return (val > 0. || val < 1. || val == 0.) ? false : true;
|
|
}
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
|
|
}
|
|
`,l=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,u=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:a,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function Ti(e,t,n="index"){let r=v.computeStrides(t);return r.map((a,s)=>{let i=`int ${e[s]} = ${n} / ${a}`,o=s===r.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * ${a}`:`index -= ${e[s]} * ${a}`;return`${i}; ${o};`}).join("")}function dA(e){let t=v.computeStrides(e).map(n=>n.toString());return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
|
|
}
|
|
`}var Sb=`
|
|
const float FLOAT_MAX = 1.70141184e38;
|
|
const float FLOAT_MIN = 1.17549435e-38;
|
|
|
|
lowp vec4 encode_float(highp float v) {
|
|
if (isnan(v)) {
|
|
return vec4(255, 255, 255, 255);
|
|
}
|
|
|
|
highp float av = abs(v);
|
|
|
|
if(av < FLOAT_MIN) {
|
|
return vec4(0.0, 0.0, 0.0, 0.0);
|
|
} else if(v > FLOAT_MAX) {
|
|
return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;
|
|
} else if(v < -FLOAT_MAX) {
|
|
return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;
|
|
}
|
|
|
|
highp vec4 c = vec4(0,0,0,0);
|
|
|
|
highp float e = floor(log2(av));
|
|
highp float m = exp2(fract(log2(av))) - 1.0;
|
|
|
|
c[2] = floor(128.0 * m);
|
|
m -= c[2] / 128.0;
|
|
c[1] = floor(32768.0 * m);
|
|
m -= c[1] / 32768.0;
|
|
c[0] = floor(8388608.0 * m);
|
|
|
|
highp float ebias = e + 127.0;
|
|
c[3] = floor(ebias / 2.0);
|
|
ebias -= c[3] * 2.0;
|
|
c[2] += floor(ebias) * 128.0;
|
|
|
|
c[3] += 128.0 * step(0.0, -v);
|
|
|
|
return c / 255.0;
|
|
}
|
|
`,vz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=gu.DENSE;let t=wu(e),n=mn();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${Ti(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for (int i=0; i<4; i++) {
|
|
int flatIndex = index + i;
|
|
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
|
|
result[i] = getA(rc.x, rc.y, rc.z);
|
|
}
|
|
|
|
${n.output} = result;
|
|
}
|
|
`}},kz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=gu.DENSE;let t=wu(e),n=mn();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${Ti(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for (int i=0; i<4; i++) {
|
|
int flatIndex = index + i;
|
|
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
|
|
result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));
|
|
}
|
|
|
|
${n.output} = result;
|
|
}
|
|
`}},Iz=class{constructor(e){this.variableNames=["A"],this.outTexUsage=Qn.DOWNLOAD;let t=mn();this.outputShape=e,this.userCode=`
|
|
${Sb}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},Sz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Qn.DOWNLOAD;let t=mn();this.outputShape=e,this.userCode=`
|
|
${Sb}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},Nz=class{constructor(e,t,n=!1){this.variableNames=["A"];let r=mn(),[a,s]=t;this.outputShape=e;let i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode=`
|
|
${dA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
int flatIndex = getFlatIndex(coords);
|
|
int offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / ${s};
|
|
int c = imod(flatIndex, ${s});
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);
|
|
vec4 values = ${r.texture2D}(A, uv);
|
|
|
|
float result;
|
|
|
|
if(offset == 0) {
|
|
result = values[0];
|
|
} else if(offset == 1) {
|
|
result = values[1];
|
|
} else if(offset == 2) {
|
|
result = values[2];
|
|
} else {
|
|
result = values[3];
|
|
}
|
|
|
|
${r.output} = vec4(${i}, 0., 0., 0.);
|
|
}
|
|
`}},Tz=class{constructor(e,t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let r=mn(),[a,s]=t;this.outputShape=e;let i="",o="result";n&&(o="floor(result * 255. + 0.5)");for(let l=0;l<=1;l++)for(let u=0;u<=1;u++){let c=l*2+u;i+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${u} < ${e[2]}) {
|
|
localCoords[2] += ${u};
|
|
if(localCoords[1] + ${l} < ${e[1]}) {
|
|
localCoords[1] += ${l};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
r = flatIndex / ${s};
|
|
c = imod(flatIndex, ${s});
|
|
uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);
|
|
values = ${r.texture2D}(A, uv);
|
|
|
|
if(offset == 0) {
|
|
result[${c}] = values[0];
|
|
} else if(offset == 1) {
|
|
result[${c}] = values[1];
|
|
} else if(offset == 2) {
|
|
result[${c}] = values[2];
|
|
} else {
|
|
result[${c}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${dA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${i}
|
|
|
|
${r.output} = ${o};
|
|
}
|
|
`}},Nb={};Le(Nb,{bindVertexProgramAttributeStreams:()=>Ob,createBufferFromOutputTexture:()=>Lb,createFloat16MatrixTexture:()=>Mb,createFloat16PackedMatrixTexture:()=>Db,createFloat32MatrixTexture:()=>Rb,createIndexBuffer:()=>Cb,createPackedMatrixTexture:()=>$b,createUnsignedBytesMatrixTexture:()=>Fb,createVertexBuffer:()=>Eb,createVertexShader:()=>Tb,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Bb,downloadFloat32MatrixFromBuffer:()=>Wb,downloadMatrixFromPackedOutputTexture:()=>Ub,downloadPackedMatrixFromBuffer:()=>Vb,getInternalFormatForFloat16MatrixTexture:()=>fA,getInternalFormatForFloat16PackedMatrixTexture:()=>yA,getInternalFormatForFloat32MatrixTexture:()=>pA,getInternalFormatForPackedMatrixTexture:()=>AA,getInternalFormatForUnsignedBytesMatrixTexture:()=>mA,uploadDenseMatrixToTexture:()=>zb,uploadPixelDataToTexture:()=>Pb});function Tb(e){let t=mn(),n=`${t.version}
|
|
precision highp float;
|
|
${t.attribute} vec3 clipSpacePos;
|
|
${t.attribute} vec2 uv;
|
|
${t.varyingVs} vec2 resultUV;
|
|
|
|
void main() {
|
|
gl_Position = vec4(clipSpacePos, 1);
|
|
resultUV = uv;
|
|
}`;return ab(e,n)}function Eb(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return lb(e,t)}function Cb(e){let t=new Uint16Array([0,1,2,2,1,3]);return cb(e,t)}function bu(e,t,n,r,a,s){hb(t,n);let i=ub(e),o=e.TEXTURE_2D;return ve(e,()=>e.bindTexture(o,i)),ve(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ve(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ve(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ve(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),ve(e,()=>e.texImage2D(o,0,r,t,n,0,a,s,null)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null)),i}function pA(e){return e.internalFormatFloat}function Rb(e,t,n,r){let[a,s]=xu(t,n);return bu(e,a,s,pA(r),r.textureFormatFloat,e.FLOAT)}function fA(e){return e.internalFormatHalfFloat}function Mb(e,t,n,r){let[a,s]=xu(t,n);return bu(e,a,s,fA(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function mA(e){return e.downloadTextureFormat}function Fb(e,t,n,r){let[a,s]=xu(t,n);return bu(e,a,s,mA(r),e.RGBA,e.UNSIGNED_BYTE)}function AA(e){return e.internalFormatPackedFloat}function $b(e,t,n,r){let[a,s]=$l(t,n);return bu(e,a,s,AA(r),e.RGBA,e.FLOAT)}function yA(e){return e.internalFormatPackedHalfFloat}function Db(e,t,n,r){let[a,s]=$l(t,n);return bu(e,a,s,yA(r),e.RGBA,r.textureTypeHalfFloat)}function Ob(e,t,n){let r=0,a=3*4,s=3*4+2*4;return ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),iA(e,t,"clipSpacePos",n,3,s,r)&&iA(e,t,"uv",n,2,s,a)}function zb(e,t,n,r,a,s){ve(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;a instanceof Uint8Array?(i=new Uint8Array(n*r*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*r*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(a),ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,o,i)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Pb(e,t,n){ve(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):ve(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ve(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Lb(e,t,n,r){let a=e.createBuffer();ve(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,a));let s=4*4*t*n;return ve(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ve(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ve(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),a}function Wb(e,t,n){let r=e,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function Bb(e,t,n,r){let[a,s]=xu(t,n),i=4,o=new Uint8Array(mz(t*n,i));return ve(e,()=>e.readPixels(0,0,a,s,r.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function Vb(e,t,n,r,a,s,i,o){let l=e,u=new Float32Array(Az(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function Ub(e,t,n){let r=new Float32Array(t*n*4);return ve(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var bp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=J().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,yp(t,e)):this.gl=Gr(t);let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(J().getNumber("WEBGL_VERSION")===1){let a="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=mu(this.gl,a),Jn(this.gl,s))this.textureHalfFloatExtension=mu(this.gl,s);else if(J().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Jn(this.gl,r))this.colorBufferHalfFloatExtension=mu(this.gl,r);else if(J().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",Jn(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(Jn(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Eb(this.gl),this.indexBuffer=Cb(this.gl),this.framebuffer=db(this.gl),this.textureConfig=uA(this.gl,this.textureHalfFloatExtension)}get debug(){return J().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ve(e,()=>e.finish()),ve(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ve(e,()=>e.deleteFramebuffer(this.framebuffer)),ve(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ve(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ve(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),Rb(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Mb(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Fb(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),Pb(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),zb(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Db(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),$b(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(oA(this.gl,this.framebuffer),this.outputTexture=null),ve(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Bb(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,a,s){return Vb(this.gl,e,t,n,r,a,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Wb(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=Lb(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(J().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,a=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let s=r.clientWaitSync(a,0,0);return s===r.ALREADY_SIGNALED||s===r.CONDITION_SATISFIED},t=a}else J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Ub(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl,n=sb(t,e),r=Tb(t),a=ib(t);return ve(t,()=>t.attachShader(a,r)),ve(t,()=>t.attachShader(a,n)),ob(t,a),this.debug&&fp(t,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=Ob(t,this.program,this.vertexBuffer)),a}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&ve(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&fp(this.gl,this.program),ve(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?fb(this.gl,e,t):mb(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ve(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),Ab(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,a]=$l(t,n);this.setOutputMatrixTextureDriver(e,r,a)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&fp(this.gl,this.program),Au(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),ve(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ve(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=mu(this.gl,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.createQuery();return n.beginQuery(r.TIME_ELAPSED_EXT,a),a}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),r=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=Ez(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),mp(this.gl,e,this.framebuffer),this.debug&&Au(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(mp(this.gl,this.outputTexture,this.framebuffer),this.debug&&Au(this.gl)):oA(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let r=this.gl;mp(r,e,this.framebuffer),this.debug&&Au(r),this.outputTexture=e,ve(r,()=>r.viewport(0,0,t,n)),ve(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),ve(this.gl,()=>this.gl.scissor(e,t,n,r))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function Ez(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{getBroadcastDims:jb}=R;function Pz(e,t,n,r){let a=[];e.forEach(p=>{let f=v.sizeFromShape(p.shapeInfo.logicalShape);p.shapeInfo.isUniform?a.push(`uniform float ${p.name}${f>1?`[${f}]`:""};`):(a.push(`uniform sampler2D ${p.name};`),a.push(`uniform int offset${p.name};`))});let s=a.join(`
|
|
`),i=e.map(p=>Cz(p,t,r)).join(`
|
|
`),o=t.texShape,l=mn(),u=Fz(l),c,h,d=Oz(l);return t.isPacked?(c=Rz(t.logicalShape,o),h=Dz(l)):(c=Mz(t.logicalShape,o),h=$z(l)),r&&(d+=zz),[d,u,h,s,c,i,n].join(`
|
|
`)}function Dl(e){let t=e.shapeInfo.logicalShape;switch(t.length){case 0:return Lz(e);case 1:return Wz(e);case 2:return Bz(e);case 3:return Vz(e);case 4:return Uz(e);case 5:return jz(e);case 6:return Hz(e);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function Hb(e){switch(e.shapeInfo.logicalShape.length){case 0:return Gz(e);case 1:return qz(e);case 2:return Xz(e);case 3:return Kz(e);default:return Zz(e)}}function Cz(e,t,n=!1){let r="";n?r+=Hb(e):r+=Dl(e);let a=e.shapeInfo.logicalShape,s=t.logicalShape;return a.length<=s.length&&(n?r+=Yz(e,t):r+=Jz(e,t)),r}function Rz(e,t){switch(e.length){case 0:return Gb();case 1:return Qz(e,t);case 2:return nP(e,t);case 3:return eP(e,t);default:return tP(e,t)}}function Mz(e,t){switch(e.length){case 0:return Gb();case 1:return rP(e,t);case 2:return lP(e,t);case 3:return aP(e,t);case 4:return sP(e,t);case 5:return iP(e,t);case 6:return oP(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function Fz(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function $z(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function Dz(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function Oz(e){return`${e.version}
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
${e.varyingFs} vec2 resultUV;
|
|
${e.defineOutput}
|
|
const vec2 halfCR = vec2(0.5, 0.5);
|
|
|
|
struct ivec5
|
|
{
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int w;
|
|
int u;
|
|
};
|
|
|
|
struct ivec6
|
|
{
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int w;
|
|
int u;
|
|
int v;
|
|
};
|
|
|
|
uniform float NAN;
|
|
${e.defineSpecialNaN}
|
|
${e.defineSpecialInf}
|
|
${e.defineRound}
|
|
|
|
int imod(int x, int y) {
|
|
return x - y * (x / y);
|
|
}
|
|
|
|
int idiv(int a, int b, float sign) {
|
|
int res = a / b;
|
|
int mod = imod(a, b);
|
|
if (sign < 0. && mod != 0) {
|
|
res -= 1;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
//Based on the work of Dave Hoskins
|
|
//https://www.shadertoy.com/view/4djSRW
|
|
#define HASHSCALE1 443.8975
|
|
float random(float seed){
|
|
vec2 p = resultUV * seed;
|
|
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);
|
|
p3 += dot(p3, p3.yzx + 19.19);
|
|
return fract((p3.x + p3.y) * p3.z);
|
|
}
|
|
|
|
${cP}
|
|
${uP}
|
|
${hP}
|
|
`}var cP=`
|
|
vec2 uvFromFlat(int texNumR, int texNumC, int index) {
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {
|
|
int texelIndex = index / 2;
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,uP=`
|
|
vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,
|
|
int texNumC, int row, int col) {
|
|
int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,hP=`
|
|
vec2 packedUVfrom3D(int texNumR, int texNumC,
|
|
int texelsInBatch, int texelsInLogicalRow, int b,
|
|
int row, int col) {
|
|
int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,zz=`
|
|
float getChannel(vec4 frag, vec2 innerDims) {
|
|
vec2 modCoord = mod(innerDims, 2.);
|
|
return modCoord.x == 0. ?
|
|
(modCoord.y == 0. ? frag.r : frag.g) :
|
|
(modCoord.y == 0. ? frag.b : frag.a);
|
|
}
|
|
float getChannel(vec4 frag, int dim) {
|
|
float modCoord = mod(float(dim), 2.);
|
|
return modCoord == 0. ? frag.r : frag.g;
|
|
}
|
|
`;function Gb(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function Qz(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ${n[1]}.0);
|
|
}
|
|
`:n[1]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ${n[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
return 2 * (resTexRC.x * ${n[1]} + resTexRC.y);
|
|
}
|
|
`}function rP(e,t){return t[0]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * ${t[1]}.0);
|
|
}
|
|
`:t[1]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * ${t[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
return resTexRC.x * ${t[1]} + resTexRC.y;
|
|
}
|
|
`}function eP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),a=r*Math.ceil(e[1]/2);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`}function aP(e,t){let n=Ti(["r","c","d"],e);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${n}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}function tP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),a=r*Math.ceil(e[e.length-2]/2),s=a,i="",o="b, r, c";for(let l=2;l<e.length-1;l++)s*=e[e.length-l-1],i=`
|
|
int b${l} = index / ${s};
|
|
index -= b${l} * ${s};
|
|
`+i,o=`b${l}, `+o;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
${i}
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec${e.length}(${o});
|
|
}
|
|
`}function sP(e,t){let n=Ti(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${n}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function iP(e,t){let n=Ti(["r","c","d","d2","d3"],e);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
|
|
${t[1]}));
|
|
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}function oP(e,t){let n=Ti(["r","c","d","d2","d3","d4"],e);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}function nP(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${n[0]}, ${n[1]}));
|
|
}
|
|
`;let r=Math.ceil(e[1]/2);return`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function lP(e,t){return v.arraysEqual(e,t)?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
|
|
}
|
|
`:e[1]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:e[0]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
int r = index / ${e[1]};
|
|
int c = index - r * ${e[1]};
|
|
return ivec2(r, c);
|
|
}
|
|
`}function Ei(e){return`offset${e}`}function Gz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=mn();return`
|
|
vec4 ${n}() {
|
|
return ${r.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function Lz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${t};}`;let[r,a]=e.shapeInfo.texShape;if(r===1&&a===1)return`
|
|
float ${n}() {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let[s,i]=e.shapeInfo.texShape,o=Ei(t);return`
|
|
float ${n}() {
|
|
vec2 uv = uvFromFlat(${s}, ${i}, ${o});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function qz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=e.shapeInfo.texShape,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],s=mn();return`
|
|
vec4 ${n}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${a[0]}, ${a[1]}, index);
|
|
return ${s.texture2D}(${t}, uv);
|
|
}
|
|
`}function Wz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${n}(int index) {
|
|
${Ol(e)}
|
|
}
|
|
`;let r=e.shapeInfo.texShape,a=r[0],s=r[1];if(s===1&&a===1)return`
|
|
float ${n}(int index) {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let i=Ei(t);return s===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / ${a}.0);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:a===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2((float(index + ${i}) + 0.5) / ${s}.0, 0.5);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:`
|
|
float ${n}(int index) {
|
|
vec2 uv = uvFromFlat(${a}, ${s}, index + ${i});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function Xz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=a[0],i=a[1],o=mn();if(a!=null&&v.arraysEqual(t,a))return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${i}.0, ${s}.0);
|
|
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`;let l=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],u=Math.ceil(t[1]/2);return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${u}, ${l[0]}, ${l[1]}, row, col);
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`}function Bz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape;if(a!=null&&v.arraysEqual(t,a)){let h=a[0],d=a[1];return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}let{newShape:s,keptDims:i}=v.squeezeShape(t),o=s;if(o.length<t.length){let h=zl(e,o),d=["row","col"];return`
|
|
${Dl(h)}
|
|
float ${r}(int row, int col) {
|
|
return ${r}(${Pl(d,i)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${t[1]}, 1)));
|
|
${Ol(e)}
|
|
}
|
|
`;let l=a[0],u=a[1],c=Ei(n);return u===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${c}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${l}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:l===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${c}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${u}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${t[1]} + col + ${c};
|
|
vec2 uv = uvFromFlat(${l}, ${u}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Kz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];if(t[0]===1){let h=t.slice(1),d=[1,2],p=zl(e,h),f=["b","row","col"];return`
|
|
${Hb(p)}
|
|
vec4 ${r}(int b, int row, int col) {
|
|
return ${r}(${Pl(f,d)});
|
|
}
|
|
`}let i=s[0],o=s[1],l=Math.ceil(t[2]/2),u=l*Math.ceil(t[1]/2),c=mn();return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${i}, ${o}, ${u}, ${l}, b, row, col);
|
|
return ${c.texture2D}(${n}, uv);
|
|
}
|
|
`}function Vz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[1]*t[2],s=t[2],{newShape:i,keptDims:o}=v.squeezeShape(t),l=i;if(l.length<t.length){let f=zl(e,l),m=["row","col","depth"];return`
|
|
${Dl(f)}
|
|
float ${r}(int row, int col, int depth) {
|
|
return ${r}(${Pl(m,o)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${a}, ${s}, 1)));
|
|
${Ol(e)}
|
|
}
|
|
`;let u=e.shapeInfo.texShape,c=u[0],h=u[1],d=e.shapeInfo.flatOffset;if(h===a&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===s&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${t[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=Ei(n);return`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a} + col * ${s} + depth + ${p};
|
|
vec2 uv = uvFromFlat(${c}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Zz(e){let t=e.shapeInfo.logicalShape,n=t.length,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],o=i[0],l=i[1],u=Math.ceil(t[n-1]/2),c=u*Math.ceil(t[n-2]/2),h="int b, int row, int col",d=`b * ${c} + (row / 2) * ${u} + (col / 2)`;for(let f=2;f<n-1;f++)h=`int b${f}, `+h,c*=t[n-f-1],d=`b${f} * ${c} + `+d;let p=mn();return`
|
|
vec4 ${a}(${h}) {
|
|
int index = ${d};
|
|
int texR = index / ${l};
|
|
int texC = index - texR * ${l};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${l}, ${o});
|
|
return ${p.texture2D}(${r}, uv);
|
|
}
|
|
`}function Uz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[3],s=t[2]*a,i=t[1]*s,{newShape:o,keptDims:l}=v.squeezeShape(t);if(o.length<t.length){let f=zl(e,o),m=["row","col","depth","depth2"];return`
|
|
${Dl(f)}
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
return ${r}(${Pl(m,l)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${i}, ${s}, ${a}, 1)));
|
|
${Ol(e)}
|
|
}
|
|
`;let u=e.shapeInfo.flatOffset,c=e.shapeInfo.texShape,h=c[0],d=c[1];if(d===i&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(d===a&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${t[1]*t[2]}, ${t[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=Ei(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${i} + col * ${s} +
|
|
depth * ${a} + depth2;
|
|
vec2 uv = uvFromFlat(${h}, ${d}, index + ${p});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function jz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[4],s=t[3]*a,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:u}=v.squeezeShape(t);if(l.length<t.length){let m=zl(e,l),A=["row","col","depth","depth2","depth3"];return`
|
|
${Dl(m)}
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${r}(${Pl(A,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, ${a})) +
|
|
depth3;
|
|
${Ol(e)}
|
|
}
|
|
`;let c=e.shapeInfo.flatOffset,h=e.shapeInfo.texShape,d=h[0],p=h[1];if(p===o&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${i}, ${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(p===a&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=Ei(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} + depth * ${s} +
|
|
depth2 * ${a} + depth3 + ${f};
|
|
vec2 uv = uvFromFlat(${d}, ${p}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Hz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:a,keptDims:s}=v.squeezeShape(t);if(a.length<t.length){let A=zl(e,a),y=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${Dl(A)}
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${r}(${Pl(y,s)});
|
|
}
|
|
`}let i=t[5],o=t[4]*i,l=t[3]*o,u=t[2]*l,c=t[1]*u;if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${c}, ${u}, ${l}, ${o})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${i}, 1)));
|
|
${Ol(e)}
|
|
}
|
|
`;let h=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,p=d[0],f=d[1];if(f===c&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${u}, ${l}, ${o}, ${i})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(f===i&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=Ei(n);return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${c} + col * ${u} + depth * ${l} +
|
|
depth2 * ${o} + depth3 * ${i} + depth4 + ${m};
|
|
vec2 uv = uvFromFlat(${p}, ${f}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Ol(e){let t=e.name,n=v.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function Yz(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=jb(e.shapeInfo.logicalShape,t.logicalShape),l=ut(i),u=i-s,c,h=["x","y","z","w","u","v"];s===0?c="":i<2&&o.length>=1?c="coords = 0;":c=o.map(A=>`coords.${h[A+u]} = 0;`).join(`
|
|
`);let d="";i<2&&s>0?d="coords":d=e.shapeInfo.logicalShape.map((A,y)=>`coords.${h[y+u]}`).join(", ");let p="return outputValue;",f=v.sizeFromShape(e.shapeInfo.logicalShape)===1,m=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!f&&!m)p=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(f&&!m)i===1?p=`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:p=`
|
|
return vec4(outputValue.x);
|
|
`;else if(o.length){let A=s-2,y=s-1;o.indexOf(A)>-1&&o.indexOf(y)>-1?p="return vec4(outputValue.x);":o.indexOf(A)>-1?p="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(p="return vec4(outputValue.xx, outputValue.zz);")}return`
|
|
vec4 ${a}() {
|
|
${l} coords = getOutputCoords();
|
|
${c}
|
|
vec4 outputValue = get${r}(${d});
|
|
${p}
|
|
}
|
|
`}function Jz(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&v.arraysEqual(i,s))return`
|
|
float ${a}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let u=ut(l),c=jb(e.shapeInfo.logicalShape,t.logicalShape),h=l-o,d,p=["x","y","z","w","u","v"];o===0?d="":l<2&&c.length>=1?d="coords = 0;":d=c.map(m=>`coords.${p[m+h]} = 0;`).join(`
|
|
`);let f="";return l<2&&o>0?f="coords":f=e.shapeInfo.logicalShape.map((m,A)=>`coords.${p[A+h]}`).join(", "),`
|
|
float ${a}() {
|
|
${u} coords = getOutputCoords();
|
|
${d}
|
|
return get${r}(${f});
|
|
}
|
|
`}function ut(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function zl(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function Pl(e,t){return t.map(n=>e[n]).join(", ")}function dP(e,t,n,r){let a=t.userCode,s=n.map((p,f)=>{let m={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(m.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[f],shapeInfo:m}}),i=s.map(p=>p.shapeInfo),o={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=Pz(s,o,a,t.packedInputs),u=e.createProgram(l),c=null,h=e.getUniformLocation(u,"NAN",!1);J().getNumber("WEBGL_VERSION")===1&&(c=e.getUniformLocation(u,"INFINITY",!1));let d={};for(let p=0;p<t.variableNames.length;p++){let f=t.variableNames[p],m=!1;d[f]=e.getUniformLocation(u,f,m),d[`offset${f}`]=e.getUniformLocation(u,`offset${f}`,m)}return{program:t,source:l,webGLProgram:u,uniformLocations:d,inShapeInfos:i,outShapeInfo:o,infLoc:c,nanLoc:h}}function qb(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,r)=>{let a=n.logicalShape,s=t[r],i=s.shape;if(!v.arraysEqual(a,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${a} and ${i} must match`);if(n.isUniform&&s.isUniform)return;let o=n.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function pP(e,t,n,r,a){qb(t.inShapeInfos,n),qb([t.outShapeInfo],[r]);let s=r.texData.texture,i=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(s,i[0],i[1]):e.setOutputMatrixTexture(s,i[0],i[1]),e.setProgram(t.webGLProgram),J().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,Infinity),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((o,l)=>{let u=t.program.variableNames[l],c=t.uniformLocations[u],h=t.uniformLocations[`offset${u}`];if(c!=null){if(o.isUniform){if(v.sizeFromShape(o.shape)<2)e.gl.uniform1f(c,o.uniformValues[0]);else{let d=o.uniformValues;d instanceof Float32Array||(d=new Float32Array(d)),e.gl.uniform1fv(c,d)}return}o.texData.slice!=null&&h!=null&&e.gl.uniform1i(h,o.texData.slice.flatOffset),e.setInputMatrixTexture(o.texData.texture,c,l)}}),a!=null&&a(e,t.webGLProgram),e.executeProgram()}function fP(e,t,n){let r="";t.concat(n).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0,l=i.isUniform?"uniform":i.texData.texShape;r+=`${i.shape}_${l}_${o}`});let a=e.userCode,s=e.constructor.name;return s+="_"+r+"_"+a,s}var{addImpl:mP,bincountImpl:Xb,bincountReduceImpl:AP,ceilImpl:yP,concatImpl:gP,expImpl:xP,expm1Impl:wP,floorImpl:bP,gatherV2Impl:_P,greaterImpl:vP,lessImpl:kP,linSpaceImpl:IP,logImpl:SP,maxImpl:NP,maximumImpl:TP,minimumImpl:EP,multiplyImpl:CP,negImpl:RP,prodImpl:MP,rangeImpl:FP,rsqrtImpl:$P,simpleAbsImpl:Kb,sliceImpl:DP,stridedSliceImpl:OP,subImpl:zP,tileImpl:PP,topKImpl:LP,transposeImpl:gA,uniqueImpl:WP}=Hm;function Zb(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function An(e,t){return t===1?[e]:Zb(e,t)}function BP(e,t){if(e===1)return"rc";let n="";for(let r=0;r<e;r++)n+=t[r],r<e-1&&(n+=",");return n}var HP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e;let t=e.length;if(t===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let n=An("rc",t),r=ut(t),a=VP(t,e,n),s=UP(t,e[e.length-1],e[e.length-2],n),i=jP(e,n);this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
|
|
if(${a}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${s}
|
|
|
|
setOutput(vec4(${i}));
|
|
}
|
|
}
|
|
`}}};function GP(e,t){let n=[];for(let r=0;r<=1;r++)for(let a=0;a<=1;a++){let s=`${r===0?"r":"rp1"}, ${a===0?"c":"cp1"}`;for(let i=2;i<e;i++)s=`${t[t.length-1-i]},`+s;n.push(s)}return n}function VP(e,t,n){if(e===1)return`rc > ${t[0]}`;let r="";for(let a=e-2;a<e;a++)r+=`${n[a]} >= ${t[a]}`,a<e-1&&(r+="||");return r}function UP(e,t,n,r){if(e===1)return"";let a=r.slice(-2);return`
|
|
int r = ${a[0]};
|
|
int c = ${a[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${t};
|
|
bool rEdge = rp1 >= ${n};
|
|
`}function jP(e,t){let n=e.length,r=GP(n,t);return n===1?`getA(rc),
|
|
rc + 1 >= ${e[0]} ? 0. : getA(rc + 1),
|
|
0, 0`:`getA(${r[0]}),
|
|
cEdge ? 0. : getA(${r[1]}),
|
|
rEdge ? 0. : getA(${r[2]}),
|
|
rEdge || cEdge ? 0. : getA(${r[3]})`}var Yb=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let n="";for(let r=0;r<4;r++){let a="thisRC = rc;";r%2==1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),n+=`
|
|
${a}
|
|
${r>0?"if(thisRC.y < rows && thisRC.z < cols){":""}
|
|
int flatIndex = getFlatIndex(thisRC);
|
|
|
|
ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);
|
|
vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));
|
|
|
|
result[${r}] =
|
|
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
|
|
${r>0?"}":""}
|
|
`}this.userCode=`
|
|
${qP(t)}
|
|
${dA(e)}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
ivec3 thisRC;
|
|
int rows = ${e[1]};
|
|
int cols = ${e[2]};
|
|
|
|
${n}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function qP(e){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${Ti(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var XP=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let r=Qb(t,n),a=e_(e,r,n);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);let s=Jb(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[a].shift();return this.usedTextures[a].push(o),o}let i;return r===rn.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===rn.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===rn.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===rn.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===rn.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,r){if(this.freeTextures==null)return;let a=Qb(n,r),s=e_(t,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);let i=Jb(t,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),o=J().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function KP(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}function Jb(e,t,n,r,a){let s=ZP(t,r),i;if(a){let[l,u]=$l(e[0],e[1]);i=l*u}else{let[l,u]=xu(e[0],e[1]);i=l*u}let o=KP(n,s);return i*o}function ZP(e,t){switch(e){case rn.PACKED_2X2_FLOAT32:return AA(t);case rn.PACKED_2X2_FLOAT16:return yA(t);case rn.UNPACKED_FLOAT32:return pA(t);case rn.UNPACKED_FLOAT16:return fA(t);case rn.PACKED_4X1_UNSIGNED_BYTE:return mA(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function YP(e){return J().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?rn.PACKED_2X2_FLOAT32:rn.UNPACKED_FLOAT32:e?rn.PACKED_2X2_FLOAT16:rn.UNPACKED_FLOAT16}function Qb(e,t){if(e===Qn.UPLOAD)return rn.PACKED_2X2_FLOAT32;if(e===Qn.RENDER||e==null)return YP(t);if(e===Qn.DOWNLOAD||e===Qn.PIXELS)return rn.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function e_(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var Ga=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
float unaryOperation(float x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},kr="if (isnan(x)) return x;",JP="return x;",t_="return abs(x);",QP="return (x >= 0.0) ? x : (exp(x) - 1.0);",eL=kr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,tL=kr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,_p="return x;",nL="return x;",rL=`
|
|
vec4 result;
|
|
|
|
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
|
|
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
|
|
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
|
|
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
|
|
|
|
return result;
|
|
`,aL=`
|
|
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,sL=`
|
|
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,Ll=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},iL=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;let t=e.length,n=An("rc",t),r=ut(t),a=BP(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 packedInput = getA(${a});
|
|
|
|
setOutput(getChannel(packedInput, ${i}));
|
|
}
|
|
`}},oL=jr.whereImpl,lL=1e-7,cL=1e-4,xA={};function uL(e){return e in xA||(xA[e]={}),xA[e]}var hL=128,dL=600;function pL(){return J().global.screen==null?1024:J().global.screen.height*J().global.screen.width*window.devicePixelRatio*dL/1024/1024}var Wl=class extends gc{constructor(e){super();if(this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.warnedAboutCPUBackend=!1,this.pendingDeletes=0,this.disposed=!1,!J().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){let t=Gr(J().getNumber("WEBGL_VERSION"));this.binaryCache=uL(J().getNumber("WEBGL_VERSION")),this.gpgpu=new bp(t),this.canvas=t.canvas,this.gpgpuCreatedLocally=!0}else this.gpgpu=e,this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=e.gl.canvas;this.textureManager=new XP(this.gpgpu),this.numMBBeforeWarning=pL(),this.texData=new Rh(this,Pr())}nextDataId(){return Wl.nextDataId++}numDataIds(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes}write(e,t,n){if((J().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||J().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:Qn.UPLOAD,refCount:1}),r}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,r,a){if(J().getBool("DEBUG")&&this.checkNumericalProblems(t),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:r,values:t,usage:Qn.UPLOAD,refCount:a})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:a,slice:s,shape:i,isPacked:o}=t;if(s!=null){let h;o?h=new Ll(i,_p):h=new Ga(i,_p);let d=this.runWebGLProgram(h,[{dataId:e,shape:i,dtype:r}],r),p=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),p}if(n!=null)return this.convertAndCacheOnCPU(e);if(r==="string")return n;let l=this.activeTimers!=null,u;l&&(u=v.now());let c;if(r==="complex64"){let h=this.readSync(a.real.dataId),d=this.readSync(a.imag.dataId);c=R.mergeRealAndImagArrays(h,d)}else c=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=v.now()-u),this.convertAndCacheOnCPU(e,c)}async read(e){if(this.pendingRead.has(e)){let p=this.pendingRead.get(e);return new Promise(f=>p.push(f))}let t=this.texData.get(e),{values:n,shape:r,slice:a,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(a!=null){let p;o?p=new Ll(r,_p):p=new Ga(r,_p);let f=this.runWebGLProgram(p,[{dataId:e,shape:r,dtype:s}],s),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(n!=null)return this.convertAndCacheOnCPU(e);if(!J().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&J().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&J().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let p=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(p.texture,...wu(r))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(s==="complex64"){let p=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),f=p[0],m=p[1];c=R.mergeRealAndImagArrays(f,m)}else if(l==null)c=this.getValuesFromTexture(e);else{let p=v.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(l,p)}u!=null&&this.disposeIntermediateTensorInfo(u);let h=this.convertAndCacheOnCPU(e,c),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(p=>p(h)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Pr().removeDataId(e,this),this.pendingDeletes--),h}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>v.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Ue(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!nb(n))throw J().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:r}=this.texData.get(e),a=v.sizeFromShape(t);if(J().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let h=this.decode(e),d=this.texData.get(h.dataId),p=this.gpgpu.downloadMatrixFromPackedTexture(d.texture,...wu(t)).subarray(0,a);return this.disposeIntermediateTensorInfo(h),p}let s=J().getBool("WEBGL_PACK")&&r===!0,i=s?Ap(t):t,o=s?new Sz(i):new Iz(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),u=this.texData.get(l.dataId),c=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(u.texture,u.texShape[0],u.texShape[1]).subarray(0,a);return this.disposeIntermediateTensorInfo(l),c}timerAvailable(){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}async time(e){let t=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();let a=v.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=v.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,r&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(a);i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:a,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,a,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}getCPUBackend(){return J().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=Pr().findBackend("cpu")),this.cpuBackend):null}shouldExecuteOnCPU(e,t=hL){let n=this.getCPUBackend();return!J().getBool("IS_TEST")&&!this.warnedAboutCPUBackend&&n==null&&(console.warn("Your application contains ops that are small enough to be executed on the CPU backend, however the CPU backend cannot be found. Consider importing the CPU backend (@tensorflow/tfjs-backend-cpu) for better performance."),this.warnedAboutCPUBackend=!0),n!=null&&e.every(r=>this.texData.get(r.dataId).texture==null&&v.sizeFromShape(r.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){R.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return oL(e.shape,t)}packedUnaryOp(e,t,n){let r=new Ll(e.shape,t),a=this.compileAndRun(r,[e],n);return Pr().makeTensorFromDataId(a.dataId,a.shape,a.dtype)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let r=Kb(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,r)}if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,t_,e.dtype);let t=new Ga(e.shape,t_),n=this.compileAndRun(t,[e]);return Pr().makeTensorFromDataId(n.dataId,n.shape,n.dtype)}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let a=n.map(s=>v.encodeString(s));r=this.write(a,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){let{dataId:r}=this.makeTensorInfo(e,t,n);return Pr().makeTensorFromDataId(r,e,t,this)}unpackTensor(e){let t=new iL(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new HP(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[Ii(e.shape),...Si(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},a=[Ii(t),...Si(t)],s=new Yb(a,n),i=!0,o=this.runWebGLProgram(s,[r],e.dtype,null,i);return{dataId:o.dataId,shape:t,dtype:o.dtype}}decode(e){let t=this.texData.get(e),{isPacked:n,shape:r,dtype:a}=t,s=Ap(r),i;n?i=new kz(s):i=new vz(s);let o=!0,l=this.runWebGLProgram(i,[{shape:s,dtype:a,dataId:e}],a,null,o);return{dtype:a,shape:r,dataId:l.dataId}}runWebGLProgram(e,t,n,r,a=!1){let s=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(s.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===gu.DENSE){let m=wu(e.outputShape);i.texShape=m.map(A=>A*2)}if(e.outTexUsage!=null&&(i.usage=e.outTexUsage),v.sizeFromShape(s.shape)===0)return i.values=v.getTypedArrayFromDType(s.dtype,0),s;let o=[],l=t.map(m=>{if(m.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let A=this.texData.get(m.dataId);if(A.texture==null){if(!e.packedInputs&&v.sizeFromShape(m.shape)<=J().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:m.shape,texData:null,isUniform:!0,uniformValues:A.values};e.packedInputs&&(A.isPacked=!0,A.shape=m.shape)}else if(!!A.isPacked!=!!e.packedInputs)m=A.isPacked?this.unpackTensor(m):this.packTensor(m),o.push(m),A=this.texData.get(m.dataId);else if(A.isPacked&&!yu(A.shape,m.shape)){let y=m,g=m.shape;m.shape=A.shape,m=this.packedReshape(m,g),o.push(m),A=this.texData.get(m.dataId),y.shape=g}return this.uploadToGPU(m.dataId),{shape:m.shape,texData:A,isUniform:!1}});this.uploadToGPU(s.dataId);let u={shape:s.shape,texData:i,isUniform:!1},c=fP(e,l,u),h=this.getAndSaveBinary(c,()=>dP(this.gpgpu,e,l,u)),d=this.activeTimers!=null,p;d&&(p=this.startTimer()),pP(this.gpgpu,h,l,u,r),o.forEach(m=>this.disposeIntermediateTensorInfo(m)),d&&(p=this.endTimer(p),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(p)}));let f=J().get("WEBGL_FLUSH_THRESHOLD");if(f>0){let m=v.now();m-this.lastGlFlushTime>f&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=m)}if(!J().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&a===!1){let m=this.unpackTensor(s);return this.disposeIntermediateTensorInfo(s),m}return s}compileAndRun(e,t,n,r,a=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,a)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(J().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=z(()=>{if(!J().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=J().getBool("DEBUG");J().set("DEBUG",!1);let t=this.abs(be(1e-8)).dataSync()[0];if(J().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?lL:cL}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:a,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=v.now());let c=t.texShape;if(c==null&&(c=gb(n,o),t.texShape=c),a!=null){let h=Ap(n),d,p=c[1],f=c[0],m=a instanceof Uint8Array;o?([p,f]=$l(c[0],c[1]),d=new Tz(h,[f,p],m)):d=new Nz(h,[f,p],m);let A=this.makeTensorInfo([f,p],r);m?this.texData.get(A.dataId).usage=Qn.PIXELS:this.texData.get(A.dataId).usage=Qn.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(A.dataId),p,f,a);let y=!0,g=this.runWebGLProgram(d,[A],r,null,y),w=this.texData.get(g.dataId);t.texture=w.texture,t.texShape=w.texShape,t.isPacked=w.isPacked,t.usage=w.usage,this.disposeIntermediateTensorInfo(A),this.texData.delete(g.dataId),t.values=null,l&&(this.uploadWaitMs+=v.now()-u)}else{let h=this.acquireTexture(c,i,r,o);t.texture=h}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),t!=null&&(n.values=fL(t,r)),n.values}acquireTexture(e,t,n,r){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${a} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*v.bytesPerElement(t)}};Wl.nextDataId=0;function fL(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let r=0;r<n.length;++r)n[r]=Math.round(e[r]);return n}else throw new Error(`Unknown dtype ${t}`)}var n_="3.3.0";function r_(){J().set("WEBGL_FORCE_F16_TEXTURES",!0)}Gc.isBrowser()&&ml("webgl",()=>new Wl,2);var mL={forceHalfFloat:r_},a_=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,Bl=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=R.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},vp=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`,_u=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=R.assertAndGetBroadcastShape(t,n);let a=this.outputShape.length,s="";if(r)if(a===0||v.sizeFromShape(this.outputShape)===1)s=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(s=`
|
|
${ut(a)} coords = getOutputCoords();
|
|
`,a===1)s+=`
|
|
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{let i=An("coords",a);s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[a-2]} + 1) >= ${this.outputShape[a-2]};
|
|
bool nextColOutOfBounds =
|
|
(${i[a-1]} + 1) >= ${this.outputShape[a-1]};
|
|
result.y = nextColOutOfBounds ? 0. : result.y;
|
|
result.z = nextRowOutOfBounds ? 0. : result.z;
|
|
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
|
|
`}this.userCode=`
|
|
vec4 binaryOperation(vec4 a, vec4 b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
vec4 a = getAAtOutCoords();
|
|
vec4 b = getBAtOutCoords();
|
|
|
|
vec4 result = binaryOperation(a, b);
|
|
${s}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function Bn(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var AL={kernelName:Rs,backendName:"webgl",kernelFunc:Bn};function qa(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.makeTensorInfo(r.shape,"complex64"),i=n.texData.get(s.dataId),o=Bn({inputs:{x:r},backend:n}),l=Bn({inputs:{x:a},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var yL={kernelName:Wh,backendName:"webgl",kernelFunc:qa},s_="return (a < 0.) ? b * a : a;",i_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function gL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r,i=n.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new _u(i_,a.shape,i.shape):new Bl(s_,a.shape,i.shape),l=n.runWebGLProgram(o,[a,i],a.dtype);return n.disposeIntermediateTensorInfo(i),l}var xL={kernelName:Ms,backendName:"webgl",kernelFunc:gL},o_="return (a < 0.) ? b * a : a;",l_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function wL(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new _u(l_,r.shape,a.shape):new Bl(o_,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}var bL={kernelName:js,backendName:"webgl",kernelFunc:wL},c_="if (isnan(x)) return x;",_L=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,vL=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`;function Ye({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:a,backend:s})=>{let{x:i}=a,o=s,l=r||i.dtype;if(o.shouldExecuteOnCPU([i])&&n!=null){let h=o.texData.get(i.dataId),d=n(h.values,l);return o.makeTensorInfo(i.shape,l,d)}let u=J().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return u?c=new Ll(i.shape,t):c=new Ga(i.shape,e),o.runWebGLProgram(c,[i],l)}}function an({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:a,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,c=o;if(r&&l.dtype==="complex64"){let f=c.texData.get(l.dataId),m=c.texData.get(u.dataId),[A,y]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(w=>{let[b,_]=w,x={dataId:b.dataId,dtype:b.dtype,shape:l.shape},S={dataId:_.dataId,dtype:_.dtype,shape:u.shape},T=new Bl(e,l.shape,u.shape);return c.runWebGLProgram(T,[x,S],or(b.dtype,_.dtype))}),g=qa({inputs:{real:A,imag:y},backend:c});return c.disposeIntermediateTensorInfo(A),c.disposeIntermediateTensorInfo(y),g}let h=s||or(l.dtype,u.dtype);if(c.shouldExecuteOnCPU([l,u])&&a!=null){let f=c.texData.get(l.dataId),m=c.texData.get(u.dataId),[A,y]=a(l.shape,u.shape,f.values,m.values,h),g=c.makeTensorInfo(y,h),w=c.texData.get(g.dataId);return w.values=A,g}let d=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,p;return d?p=new _u(t,l.shape,u.shape,n):p=new Bl(e,l.shape,u.shape),c.runWebGLProgram(p,[l,u],h)}}function kp(e,t=!1){if(e==="linear")return t?nL:JP;if(e==="relu")return t?aL:eL;if(e==="elu")return t?rL:QP;if(e==="relu6")return t?sL:tL;if(e==="prelu")return t?l_:o_;if(e==="leakyrelu")return t?i_:s_;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var u_=class{constructor(e,t,n,r=!1,a=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;let u=r?e[1]:e[2],c=Math.ceil(u/2),h=r?"i * 2, rc.y":"rc.y, i * 2",d=a?"rc.z, i * 2":"i * 2, rc.z",p=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=a?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",A="";i&&(o?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${i}
|
|
}`:l?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${i}
|
|
}`:m=`vec4 activation(vec4 x) {
|
|
${i}
|
|
}`,A="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let g="rc.x",w="rc.x";e[0]<t[0]?g=`int(min(float(rc.x), ${e[0]-1}.))`:t[0]<e[0]&&(w=`int(min(float(rc.x), ${t[0]-1}.))`),this.userCode=`
|
|
${m}
|
|
|
|
const float sharedDimension = ${c}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < ${c}; i++) {
|
|
int batchA = ${g};
|
|
int batchB = ${w};
|
|
vec4 a = getMatrixA(batchA, ${h});
|
|
vec4 b = getMatrixB(batchB, ${d});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${p[0]} * ${f[0]});
|
|
result += (${p[1]} * ${f[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${y}
|
|
|
|
${A}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},h_={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},d_=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=R.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`}},p_="return a * b;";function f_(e){let{inputs:t,backend:n}=e,{a:r,b:a}=t,s=R.upcastType(r.dtype,a.dtype);if(r.dtype==="complex64"){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),u=new d_(h_.REAL,r.shape,a.shape),c=new d_(h_.IMAG,r.shape,a.shape),h=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:r.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:r.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape}],d=n.runWebGLProgram(u,h,"float32"),p=n.runWebGLProgram(c,h,"float32"),f=qa({inputs:{real:d,imag:p},backend:n});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}if(n.shouldExecuteOnCPU([r,a])){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),[u,c]=CP(r.shape,a.shape,o.values,l.values,s),h=n.makeTensorInfo(c,s),d=n.texData.get(h.dataId);return d.values=u,h}let i;return J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new _u(p_,r.shape,a.shape):i=new Bl(p_,r.shape,a.shape),n.runWebGLProgram(i,[r,a],s)}var kL={kernelName:Ws,backendName:"webgl",kernelFunc:f_};function IL(e,t,n){let r=[Ii(e.shape),...Si(e.shape)],a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[Ii(t),...Si(t)],i=new Yb(s,r),o=!0,l=n.runWebGLProgram(i,[a],e.dtype,null,o);return{dataId:l.dataId,shape:t,dtype:l.dtype}}function _e(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=n,o=v.sizeFromShape(a.shape),l=v.inferFromImplicitShape(s,o),u=v.sizeFromShape(l);v.assert(o===u,()=>`The new shape (${l}) has ${u} elements and the old shape (${a.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let c=i.texData.get(a.dataId);return c.isPacked&&!yu(a.shape,l)&&!(c.texture!==null&&yu(c.shape,l))?IL(a,l,i):(i.incRef(a.dataId),{dataId:a.dataId,shape:l,dtype:a.dtype})}var SL={kernelName:Ho,backendName:"webgl",kernelFunc:_e},m_=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i=Math.floor(n/4)*4,o=n%4,l="sumValue += dot(values, ones);";if(t!=null){let c=1/t;l=`sumValue += dot(values * ${v.isInt(c)?c.toPrecision(2):c}, ones);`}let u="";a%n>0&&(u=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return 0.0;
|
|
}
|
|
`),this.userCode=`
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${u}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${i}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${l}
|
|
}
|
|
|
|
int inIdx = inOffset + ${i};
|
|
if (${o===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${l}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},NL=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let u=Math.floor(n/4)*4,c=n%4,h=`
|
|
if (${t==="sum"}) {
|
|
sumValue += dot(values, ones);
|
|
} else if (${t==="prod"}) {
|
|
vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);
|
|
prodValue *= tmp[0] * tmp[1];
|
|
} else {
|
|
minMaxValue = ${o}(values, minMaxValue);
|
|
}
|
|
`,d="vec4";t==="all"?(i="1.0",h=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,d="bvec4"):t==="any"&&(i="0.0",h=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,d="bvec4");let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return initializationValue;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${i};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${p}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
vec4 minMaxValue = vec4(${i});
|
|
float prodValue = 1.0;
|
|
float sumValue = 0.0;
|
|
float allValue = 1.0;
|
|
float anyValue = 0.0;
|
|
|
|
for (int i = 0; i < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${c===1}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${c===2}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${c===3}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function TL(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],r=R.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function Ci(e,t,n,r){let a=TL(e.shape),s=e;for(let i=0;i<a.length;i++){let{inSize:o,windowSize:l,outSize:u}=a[i],c,h;n==="mean"?c=i===0?new m_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},o):new m_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u}):c=new NL({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},n),h=s,s=r.runWebGLProgram(c,[s],t),h.dataId!==e.dataId&&r.disposeIntermediateTensorInfo(h)}return s}var CL=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[t[s]];this.outputShape=n,this.rank=n.length;let r=ut(this.rank),a=EL(t);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function EL(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let a=0;a<e.length;a++)r[e[a]]=n[a];return r.join()}var RL=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let u=0;u<n.length;u++)n[u]=e[t[u]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=ut(this.rank),a=Zb("rc",this.rank),s=new Array(this.rank);for(let u=0;u<t.length;u++)s[t[u]]=a[u];let i=`vec2(${s.slice(-2).join()})`,o=`++${a[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${l};
|
|
if(${o}) {
|
|
result[1] = ${l};
|
|
}
|
|
--${a[this.rank-1]};
|
|
if(++${a[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${l};
|
|
if(${o}) {
|
|
result[3] = ${l};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function Ip(e,t,n){let r=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new RL(e.shape,t):new CL(e.shape,t);return n.runWebGLProgram(r,[e],e.dtype)}function ML(e,t,n,r){let a=t,s=e.shape.length,i=v.parseAxisParam(a,e.shape),o=i,l=R.getAxesPermutation(o,s),u=l!=null,c=e;u&&(c=Ip(e,l,r),o=R.getInnerMostAxes(o.length,s)),R.assertAxesAreInnerMostDims("sum",o,s);let[h,d]=R.computeOutAndReduceShapes(c.shape,o),p=h;n&&(p=R.expandShapeToKeepDim(h,i));let f=v.sizeFromShape(d),m=v.sizeFromShape(e.shape)/f,A=_e({inputs:{x:c},attrs:{shape:[m,f]},backend:r}),y=yd(e.dtype),g=Ci(A,y,"sum",r),w=_e({inputs:{x:g},attrs:{shape:p},backend:r});return r.disposeIntermediateTensorInfo(A),r.disposeIntermediateTensorInfo(g),u&&r.disposeIntermediateTensorInfo(c),w}function wA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;return ML(a,s,i,n)}var FL={kernelName:ei,backendName:"webgl",kernelFunc:wA};function En(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{perm:s}=r,i=n,o=a.shape.length,l=new Array(o);for(let c=0;c<l.length;c++)l[c]=a.shape[s[c]];let u;if(i.shouldExecuteOnCPU([a])){let c=i.texData.get(a.dataId).values,h=gA(c,a.shape,a.dtype,s,l);u=i.makeTensorInfo(l,a.dtype);let d=i.texData.get(u.dataId);d.values=h}else u=Ip(a,s,i);return u}var $L={kernelName:si,backendName:"webgl",kernelFunc:En},A_=1e3;function Sp({a:e,b:t,transposeA:n,transposeB:r,backend:a,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,c=t.shape.length,h=n?e.shape[u-2]:e.shape[u-1],d=r?t.shape[c-1]:t.shape[c-2],p=n?e.shape[u-1]:e.shape[u-2],f=r?t.shape[c-2]:t.shape[c-1],m=e.shape.slice(0,-2),A=t.shape.slice(0,-2),y=v.sizeFromShape(m),g=v.sizeFromShape(A),w=y===g||y===1||g===1;v.assert(u>=2&&c>=2&&w,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${m}) and (${A}).`);let b=(y>g?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([p,f]);v.assert(h===d,()=>`Error in matMul: inner shapes (${h}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let _=n?[y,h,p]:[y,p,h],x=r?[g,f,d]:[g,d,f],S=_e({inputs:{x:e},backend:a,attrs:{shape:_}}),T=_e({inputs:{x:t},backend:a,attrs:{shape:x}}),E=[S,T],F=Math.max(y,g),P=n?S.shape[1]:S.shape[2],W=s!=null,V=i!=null,U=l==="leakyrelu",H=l!=null?kp(l,!0):null,X=W||V||U||H!=null,G;if((p===1||f===1)&&P>A_&&X===!1){let Y=S,se=T;n&&(Y=En({inputs:{x:S},backend:a,attrs:{perm:[0,2,1]}}),E.push(Y)),r&&(se=En({inputs:{x:T},backend:a,attrs:{perm:[0,2,1]}}),E.push(se));let te=f!==1,le=f===1,Q=Y;te&&(Q=_e({inputs:{x:Y},backend:a,attrs:{shape:[F,P,1]}}),E.push(Q));let pe=f===1?2:1,ce=se;le&&(ce=_e({inputs:{x:se},backend:a,attrs:{shape:[F,1,P]}}),E.push(ce));let ye=f_({inputs:{a:Q,b:ce},backend:a});G=wA({inputs:{x:ye},backend:a,attrs:{axis:pe,keepDims:!0}}),E.push(ye)}else{let Y=or(e.dtype,t.dtype),se=new u_(_,x,[F,p,f],n,r,W,H,V,U),te=[S,T];if(s!=null&&te.push(s),V&&te.push(i),U){let le=a.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));te.push(le),E.push(le)}G=a.runWebGLProgram(se,te,Y)}let ee=_e({inputs:{x:G},backend:a,attrs:{shape:b}});E.push(G);for(let Y of E)a.disposeIntermediateTensorInfo(Y);return ee}function DL(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:h}=r;return Sp({a,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:h,activation:c})}var OL={kernelName:ii,backendName:"webgl",kernelFunc:DL},y_="return abs(x);";function zL(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let s=n.texData.get(r.dataId),i=Kb(s.values);return n.makeTensorInfo(r.shape,r.dtype,i)}let a;return J().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new Ll(r.shape,y_):a=new Ga(r.shape,y_),n.runWebGLProgram(a,[r],r.dtype)}var PL={kernelName:io,backendName:"webgl",kernelFunc:zL},LL=kr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,WL=Ye({opSnippet:LL}),BL={kernelName:oo,backendName:"webgl",kernelFunc:WL},VL=kr+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,UL=Ye({opSnippet:VL}),jL={kernelName:lo,backendName:"webgl",kernelFunc:UL},g_="return a + b;",HL=an({opSnippet:g_,packedOpSnippet:g_,supportsComplex:!0,cpuKernelImpl:mP}),GL={kernelName:Ca,backendName:"webgl",kernelFunc:HL},qL=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`float v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
float result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}},XL=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`vec4 v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
vec4 result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}};function Np(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return Bn({inputs:{x:r[0]},backend:n});if(r.length>J().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(r.length/2),l=Np({inputs:r.slice(0,o),backend:n}),u=Np({inputs:r.slice(o),backend:n});return Np({inputs:[l,u],backend:n})}let a=r.map(o=>o.dtype).reduce((o,l)=>or(o,l)),s=r.map(o=>o.shape),i=J().getBool("WEBGL_PACK")?new XL(r[0].shape,s):new qL(r[0].shape,s);return n.runWebGLProgram(i,r,a)}var KL={kernelName:fs,backendName:"webgl",kernelFunc:Np};function ZL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=l,c=R.getAxesPermutation(u,o),h=a;c!=null&&(h=En({inputs:{x:a},backend:n,attrs:{perm:c}}),u=R.getInnerMostAxes(u.length,o)),R.assertAxesAreInnerMostDims("all",u,o);let[d,p]=R.computeOutAndReduceShapes(h.shape,u),f=v.sizeFromShape(p),m=_e({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=Ci(m,m.dtype,"all",n),y;if(i){let g=R.expandShapeToKeepDim(d,l);y=_e({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=_e({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),c!=null&&n.disposeIntermediateTensorInfo(h),y}var YL={kernelName:Dh,backendName:"webgl",kernelFunc:ZL};function JL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=l,c=R.getAxesPermutation(u,o),h=a;c!=null&&(h=En({inputs:{x:a},backend:n,attrs:{perm:c}}),u=R.getInnerMostAxes(u.length,o)),R.assertAxesAreInnerMostDims("any",u,o);let[d,p]=R.computeOutAndReduceShapes(h.shape,u),f=v.sizeFromShape(p),m=_e({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=Ci(m,m.dtype,"any",n),y;if(i){let g=R.expandShapeToKeepDim(d,l);y=_e({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=_e({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),c!=null&&n.disposeIntermediateTensorInfo(h),y}var QL={kernelName:Oh,backendName:"webgl",kernelFunc:JL},eW=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:a,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,s];let i=t==="max"?">":"<",o=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${r};
|
|
|
|
int bestIndex = inOffset;
|
|
float bestValue = getA(batch, bestIndex);
|
|
|
|
for (int i = 0; i < ${r}; i++) {
|
|
int inIdx = ${o};
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate ${i} bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`}},tW=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let a=e[e.length-1],s=Math.ceil(a/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=ut(o),u=An("coords",o),c,h;if(s===1){h=o+1;let S=ut(h);c=`
|
|
${S} sourceLocR = ${S}(${u.join()}, 0);
|
|
++${u[o-1]};
|
|
${S} sourceLocG = ${S}(${u.join()}, 0);
|
|
++${u[o-2]};
|
|
${S} sourceLocA = ${S}(${u.join()}, 0);
|
|
--${u[o-1]};
|
|
${S} sourceLocB = ${S}(${u.join()}, 0);
|
|
--${u[o-2]};`}else h=o,c=`
|
|
${l} sourceLocR = coords;
|
|
++${u[o-1]};
|
|
${l} sourceLocG = coords;
|
|
++${u[o-2]};
|
|
${l} sourceLocA = coords;
|
|
--${u[o-1]};
|
|
${l} sourceLocB = coords;
|
|
--${u[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,h),p="."+d[h-1],f=d.map(S=>"int "+S),m=An("sourceLocR",h-1).concat("inIdx.r"),A=An("sourceLocG",h-1).concat("inIdx.g"),y=An("sourceLocB",h-1).concat("inIdx.b"),g=An("sourceLocA",h-1).concat("inIdx.a"),w=n==="max"?"greaterThan":"lessThan",b=r?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),
|
|
getBestIndicesAChannel(${A.join()}),
|
|
getBestIndicesAChannel(${y.join()}),
|
|
getBestIndicesAChannel(${g.join()})));`,_=`vec4(
|
|
getAChannel(${m.join()}),
|
|
hasNextCol ? getAChannel(${A.join()}) : 0.,
|
|
hasNextRow ? getAChannel(${y.join()}) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(${g.join()}) : 0.)`,x=r?"":`
|
|
float getBestIndicesAChannel(${f.join()}) {
|
|
return getChannel(getBestIndicesA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}`;this.userCode=`
|
|
float getAChannel(${f.join()}) {
|
|
return getChannel(getA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}
|
|
${x}
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
bool hasNextCol = ${u[o-1]} < ${i[o-1]-1};
|
|
bool hasNextRow = ${u[o-2]} < ${i[o-2]-1};
|
|
${c}
|
|
ivec4 srcIdx = ivec4(sourceLocR${p}, sourceLocG${p},
|
|
sourceLocB${p}, sourceLocA${p}) * ${t};
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = ${_};
|
|
|
|
for (int i = 0; i < ${t}; i++) {
|
|
inIdx = srcIdx;
|
|
${b}
|
|
vec4 candidate = ${_};
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(${w}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));
|
|
|
|
bestValue = vec4(replace.x ? candidate.x : bestValue.x,
|
|
replace.y ? candidate.y : bestValue.y,
|
|
replace.z ? candidate.z : bestValue.z,
|
|
replace.w ? candidate.w : bestValue.w);
|
|
bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));
|
|
srcIdx++;
|
|
}
|
|
setOutput(bestIndex);
|
|
}
|
|
`}};function x_(e,t,n,r=null){let a=t.shape[0],s=t.shape[1];r!=null&&(a=r.shape[0],s=r.shape[1]);let i=R.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:a,outSize:Math.ceil(s/i)},l=new eW(o,n,r==null),u=[t];r!=null&&u.push(r);let c=e.runWebGLProgram(l,u,"int32");if(c.shape[1]===1)return c;let h=x_(e,t,n,c);return e.disposeIntermediateTensorInfo(c),h}function w_(e,t,n,r=null){let a=r!=null?r.shape:t.shape,s=a[a.length-1],i=R.computeOptimalWindowSize(s),o=new tW(a,i,n,r==null),l=r==null?[t]:[t,r],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let c=w_(e,t,n,u);return e.disposeIntermediateTensorInfo(u),c}return u}function b_(e,t,n,r){let a=[n];if(R.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),a,t.shape.length),!J().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],[i,o]=R.computeOutAndReduceShapes(t.shape,a),l=v.sizeFromShape(o),u=_e({inputs:{x:t},backend:e,attrs:{shape:[-1,l]}});s.push(u);let c=x_(e,u,r);s.push(c);let h=_e({inputs:{x:c},backend:e,attrs:{shape:i}});return s.forEach(d=>e.disposeIntermediateTensorInfo(d)),h}return w_(e,t,r)}function nW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=v.parseAxisParam(s,a.shape),o=R.getAxesPermutation(i,a.shape.length),l=a,u=[];o!=null&&(l=En({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=R.getInnerMostAxes(i.length,l.shape.length)),R.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let c=b_(n,l,i[0],"max");return u.forEach(h=>n.disposeIntermediateTensorInfo(h)),c}var rW={kernelName:ms,backendName:"webgl",kernelFunc:nW};function aW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=v.parseAxisParam(s,a.shape),o=R.getAxesPermutation(i,a.shape.length),l=a,u=[];o!=null&&(l=En({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=R.getInnerMostAxes(i.length,l.shape.length)),R.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let c=b_(n,l,i[0],"min");return u.forEach(h=>n.disposeIntermediateTensorInfo(h)),c}var sW={kernelName:bc,backendName:"webgl",kernelFunc:aW},iW=kr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,oW=Ye({opSnippet:iW}),lW={kernelName:co,backendName:"webgl",kernelFunc:oW},cW=kr+"return log(x + sqrt(x * x + 1.0));",uW=Ye({opSnippet:cW}),hW={kernelName:uo,backendName:"webgl",kernelFunc:uW},dW=kr+`
|
|
return atan(x);
|
|
`,pW=Ye({opSnippet:dW}),fW={kernelName:ho,backendName:"webgl",kernelFunc:pW},mW=_L+`
|
|
return atan(a, b);
|
|
`,AW=`
|
|
vec4 result = atan(a, b);
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+vL+`
|
|
return result;
|
|
`,yW=an({opSnippet:mW,packedOpSnippet:AW}),gW={kernelName:fo,backendName:"webgl",kernelFunc:yW},xW=kr+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,wW=Ye({opSnippet:xW}),bW={kernelName:po,backendName:"webgl",kernelFunc:wW},vu=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterHeight,h=e.effectiveFilterWidth,d=e.padInfo.top,p=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,A=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(f||(y="-1.0 / 1e-20"),n){let S=">=";this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
float avgValue = 0.0;
|
|
|
|
for (int wR = 0; wR < ${c};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${h};
|
|
wC += ${u}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xR, xC, d);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${S} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?a?m:A:`wR * ${h} + wC`};
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let g="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let b=Math.floor(s/4)*4,_=s%4,x=`
|
|
if (${f}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${g}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
const float initializationValue = ${y};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xR, int xC, int d) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xR, xC, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${y});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < ${c};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${b}; wC += 4) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
getValue(batch, xR, xC + 3 * ${u}, d)
|
|
);
|
|
|
|
${x}
|
|
}
|
|
|
|
int xC = xCCorner + ${b};
|
|
if (${_===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${x}
|
|
} else if (${_===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${x}
|
|
} else if (${_===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${x}
|
|
}
|
|
}
|
|
setOutput(${w});
|
|
}
|
|
`}},bA=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,c=e.dilationHeight,h=e.dilationWidth,d=e.effectiveFilterDepth,p=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,A=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let g=t==="avg",w="0.0";if(g||(w="-1.0 / 1e-20"),n){let E=">=";this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${y});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${c}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f};
|
|
wC += ${h}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xD, xR, xC, ch);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${E} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?a?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${p} * ${f} +
|
|
wR * ${f} + wC`};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let b="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / count");let x=Math.floor(s/4)*4,S=s%4,T=`
|
|
if (${g}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${b}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${y});
|
|
const float initializationValue = ${w};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xD, int xR, int xC, int ch) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xD, xR, xC, ch);
|
|
}
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${w});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${c}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${x}; wC += 4) {
|
|
int xC = xCCorner + wC * ${h};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 3 * ${h}, ch)
|
|
);
|
|
|
|
${T}
|
|
}
|
|
|
|
int xC = xCCorner + ${x};
|
|
if (${S===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${S===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${S===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
}
|
|
}
|
|
setOutput(${_});
|
|
}
|
|
}
|
|
`}};function _W(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Fl(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,u=1;v.assert(R.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let c=R.computePool2DInfo(a.shape,s,i,u,o,l);if(c.filterWidth===1&&c.filterHeight===1&&v.arraysEqual(c.inShape,c.outShape))return Bn({inputs:{x:a},backend:n});let h=new vu(c,"avg",!1);return n.runWebGLProgram(h,[a],"float32")}var vW={kernelName:As,backendName:"webgl",kernelFunc:_W};function kW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r,c=[1,1,1],h=R.computePool3DInfo(a.shape,s,i,c,o,l,u),d=new bA(h,"avg",!1);return n.runWebGLProgram(d,[a],"float32")}var IW={kernelName:_c,backendName:"webgl",kernelFunc:kW},SW=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,c=l-1-e.padInfo.left,h=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${u}, ${c});
|
|
const float avgMultiplier = float(${h});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${o};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${l};
|
|
wC+= ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},NW=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,h=e.effectiveFilterHeight,d=e.effectiveFilterWidth,p=c-1-e.padInfo.front,f=h-1-e.padInfo.top,m=d-1-e.padInfo.left,A=1/(t*n*r);this.userCode=`
|
|
const ivec3 pads = ivec3(${p}, ${f}, ${m});
|
|
const float avgMultiplier = float(${A});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${c};
|
|
wD += ${o}) {
|
|
float dyD = float(dyDCorner + wD) / ${a}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${l}) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${d};
|
|
wC += ${u}) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function TW(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:c}=r,h=[1,1,1],d=R.computePool3DInfo(i.shape,o,l,h,u,c),p=new NW(d);return n.runWebGLProgram(p,[a],i.dtype)}var EW={kernelName:Ph,backendName:"webgl",kernelFunc:TW};function CW(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;Fl([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=r,c=R.computePool2DInfo(i.shape,o,l,1,u),h=new SW(c);return n.runWebGLProgram(h,[a],i.dtype)}var RW={kernelName:zh,backendName:"webgl",kernelFunc:CW};function MW(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;return Sp({a,b:s,transposeA:i,transposeB:o,backend:n})}var FW={kernelName:ys,backendName:"webgl",kernelFunc:MW},$W=class{constructor(e,t,n,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],R.assertAndGetBroadcastShape(e,t),R.assertAndGetBroadcastShape(e,n);let i="0.0";r!=null&&(R.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";a!=null&&(R.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = ${i};
|
|
float scale = ${o};
|
|
float inv = scale * inversesqrt(variance + float(${s}));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`}},DW=class{constructor(e,t,n,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],R.assertAndGetBroadcastShape(e,t),R.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";r!=null&&(R.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";a!=null&&(R.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 offset = ${i};
|
|
vec4 scale = ${o};
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(${s}));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`}},OW=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:a,variance:s,offset:i,scale:o}=e;v.assert(a.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||a.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||a.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let u=[r,a,s],c=null;i!=null&&(c=i.shape,u.push(i));let h=null;o!=null&&(h=o.shape,u.push(o));let d=J().getBool("WEBGL_PACK_NORMALIZATION")?new DW(r.shape,a.shape,s.shape,c,h,l):new $W(r.shape,a.shape,s.shape,c,h,l);return t.runWebGLProgram(d,u,u[0].dtype)},zW={kernelName:Es,backendName:"webgl",kernelFunc:OW},LW=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ut(this.rank),n=`uniform int start[${this.rank}];`,r=PW(this.rank),a,s=e.map((i,o)=>`sourceLoc.${_A[o]} = start[${o}] + coords.${_A[o]};`);a=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${s.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
${n}
|
|
void main() {
|
|
${a}
|
|
setOutput(getSource(${r}));
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}},_A=["x","y","z","w","u","v"];function PW(e){if(e===1)return"sourceLoc";if(e<=6)return _A.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var WW=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length;let t=ut(this.rank),n=An("coords",this.rank),r=An("sourceLoc",this.rank),a=this.rank===1?"sourceLoc":`vec2(${r.slice(-2).join()})`,s=`getChannel(getSource(${r.join()}), ${a})`,i=`
|
|
result.x = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.y = ${s};
|
|
--${r[this.rank-1]};
|
|
}
|
|
`,o=this.rank===1?"":`
|
|
--${n[this.rank-1]};
|
|
if (++${n[this.rank-2]} < ${e[this.rank-2]}) {
|
|
++${r[this.rank-2]};
|
|
result.z = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.w = ${s};
|
|
}
|
|
}
|
|
`,l=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((u,c)=>`start[${c}]`).join()});`:e.map((u,c)=>`${r[c]} = ${n[c]} + start[${c}];`).join(`
|
|
`);this.userCode=`
|
|
uniform int start[${this.rank}];
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${l}
|
|
vec4 result = vec4(0.);
|
|
${i}
|
|
${o}
|
|
setOutput(result);
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}};function BW(e,t,n,r){let a=r.texData.get(e.dataId),s=r.makeTensorInfo(n,e.dtype),i=r.texData.get(s.dataId);Object.assign(i,a),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=dn.computeFlatOffset(t,v.computeStrides(e.shape));a.slice&&(o+=a.slice.flatOffset),i.slice={flatOffset:o,origDataId:a.slice&&a.slice.origDataId||e.dataId};let l=r.dataRefCount.get(i.slice.origDataId)||1;return r.dataRefCount.set(i.slice.origDataId,l+1),s}function ku(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r,[o,l]=dn.parseSliceParams(a,s,i);if(dn.assertParamsValid(a,o,l),v.sizeFromShape(l)===0)return n.makeTensorInfo(l,a.dtype,[]);if(n.shouldExecuteOnCPU([a])||a.dtype==="string"){let h=n.texData.get(a.dataId),d=DP(h.values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,d)}let{isPacked:u}=n.texData.get(a.dataId),c=dn.isSliceContinous(a.shape,o,l);if(u||!c){let h=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new WW(l):new LW(l),d=h.getCustomSetupFunc(o);return n.runWebGLProgram(h,[a],a.dtype,d)}return n.uploadToGPU(a.dataId),BW(a,o,l,n)}var VW={kernelName:Ko,backendName:"webgl",kernelFunc:ku},UW=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;v.assert(a.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((g,w)=>g*w),l=R.getReshaped(a.shape,s,o),u=R.getPermuted(l.length,s.length),c=R.getReshapedPermuted(a.shape,s,o),h=R.getSliceBeginCoords(i,s.length),d=R.getSliceSize(c,i,s.length),p=[],f=_e({inputs:{x:a},backend:n,attrs:{shape:l}}),m=En({inputs:{x:f},backend:n,attrs:{perm:u}}),A=_e({inputs:{x:m},backend:n,attrs:{shape:c}}),y=ku({inputs:{x:A},backend:n,attrs:{begin:h,size:d}});return p.push(f),p.push(m),p.push(A),p.forEach(g=>n.disposeIntermediateTensorInfo(g)),y},jW={kernelName:vc,backendName:"webgl",kernelFunc:UW};function HW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.readSync(a.dataId),l=n.readSync(s.dataId),u=Xb(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var GW={kernelName:Lh,backendName:"webgl",kernelFunc:HW},qW="return float(a != b);",__=an({opSnippet:qW,dtype:"bool"}),XW={kernelName:zo,backendName:"webgl",kernelFunc:__};function Iu(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return Bn({inputs:{x:a.complexTensorInfos.real},backend:n})}var KW={kernelName:id,backendName:"webgl",kernelFunc:Iu},ZW="return float(int(x));";function YW(e,t){let n=new Ga(e.shape,ZW),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function vA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return Bn({inputs:{x:a},backend:n});let i=Ft(a.shape),o=vA({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=qa({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=Iu({inputs:{input:a},backend:n}),o=vA({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(a.dtype,s)){let i=Bn({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32")return YW(a,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=__({inputs:{a,b:i},backend:n});return n.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var JW={kernelName:gs,backendName:"webgl",kernelFunc:vA},v_="return ceil(x);",QW=Ye({opSnippet:v_,packedOpSnippet:v_,cpuKernelImpl:yP}),eB={kernelName:xs,backendName:"webgl",kernelFunc:QW},tB=class{constructor(e){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
float value = getAAtOutCoords();
|
|
if (isnan(value)) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, minVal, maxVal));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}},nB=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
vec4 value = getAAtOutCoords();
|
|
|
|
if (any(isnan(value))) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, vec4(minVal), vec4(maxVal)));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}};function rB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o;J().getBool("WEBGL_PACK_CLIP")?o=new nB(a.shape):o=new tB(a.shape);let l=o.getCustomSetupFunc(s,i);return n.runWebGLProgram(o,[a],a.dtype,l)}var aB={kernelName:Ra,backendName:"webgl",kernelFunc:rB},sB=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float re = abs(getRealAtOutCoords());
|
|
float im = abs(getImagAtOutCoords());
|
|
float mx = max(re, im);
|
|
|
|
// sadly the length function in glsl is not underflow-safe
|
|
// (at least not on Intel GPUs). So the safe solution is
|
|
// to ensure underflow-safety in all cases.
|
|
setOutput(
|
|
mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))
|
|
);
|
|
}
|
|
`}};function k_(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function iB(e){let{inputs:t,backend:n}=e,{x:r}=t,a=n.texData.get(r.dataId),s=new sB(r.shape),i=[k_(r,a.complexTensorInfos.real),k_(r,a.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var oB={kernelName:kc,backendName:"webgl",kernelFunc:iB},lB=class{constructor(e){this.outputShape=[],this.outputShape=R.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s<t.length;s++)t[s]=t[s-1]+e[s][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let s=1;s<t.length;s++){let i=t[s-1];n.push(`else if (yC < ${t[s]}) setOutput(getT${s}(yR, yC-${i}));`)}let r=t.length,a=t[t.length-1];n.push(`else setOutput(getT${r}(yR, yC-${a}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},cB=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=R.computeOutShape(e,t);let n=this.outputShape,r=n.length,a=ut(r),s=An("coords",r),i=["x","y","z","w","u","v"].slice(0,r);this.variableNames=e.map((f,m)=>`T${m}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let f=1;f<o.length;f++)o[f]=o[f-1]+e[f][t];let l=i[t],u=i.slice(-2),c=i.join(),h=`if (${l} < ${o[0]}) {
|
|
return getChannel(
|
|
getT0(${c}), vec2(${u.join()}));
|
|
}`;for(let f=1;f<o.length;f++){let m=o[f-1];h+=`
|
|
if (${l} < ${o[f]} && ${l} >= ${o[f-1]}) {
|
|
return getChannel(
|
|
getT${f}(${Tp(i,l,m)}),
|
|
vec2(${Tp(u,l,m)}));
|
|
}`}let d=o.length,p=o[o.length-1];h+=`
|
|
return getChannel(
|
|
getT${d}(${Tp(i,l,p)}),
|
|
vec2(${Tp(u,l,p)}));`,this.userCode=`
|
|
float getValue(${i.map(f=>"int "+f)}) {
|
|
${h}
|
|
}
|
|
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(${s}), 0., 0., 0.);
|
|
|
|
${s[r-1]} = ${s[r-1]} + 1;
|
|
if (${s[r-1]} < ${n[r-1]}) {
|
|
result.g = getValue(${s});
|
|
}
|
|
|
|
${s[r-2]} = ${s[r-2]} + 1;
|
|
if (${s[r-2]} < ${n[r-2]}) {
|
|
result.a = getValue(${s});
|
|
}
|
|
|
|
${s[r-1]} = ${s[r-1]} - 1;
|
|
if (${s[r-2]} < ${n[r-2]} &&
|
|
${s[r-1]} < ${n[r-1]}) {
|
|
result.b = getValue(${s});
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function Tp(e,t,n){let r=e.indexOf(t);return e.map((a,s)=>s===r?`${a} - ${n}`:a).join()}function Ep(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return Bn({inputs:{x:a.complexTensorInfos.imag},backend:n})}var uB={kernelName:Qh,backendName:"webgl",kernelFunc:Ep};function Vl(e,t,n){let r=e[0].dtype;if(r==="complex64"){let u=e.map(f=>Iu({inputs:{input:f},backend:n})),c=e.map(f=>Ep({inputs:{input:f},backend:n})),h=Vl(u,t,n),d=Vl(c,t,n),p=qa({inputs:{real:h,imag:d},backend:n});return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),c.forEach(f=>n.disposeIntermediateTensorInfo(f)),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),p}if(r==="string"){let{tensors2D:u,outShape:c}=I_(e,t,n),h=u.map(A=>({vals:n.readSync(A.dataId),shape:A.shape})),d=u[0].shape[0]===1,p=gP(h,c,r,d),f=R.computeOutShape(e.map(A=>A.shape),t),m=n.makeTensorInfo(f,r,p);return u.forEach(A=>n.disposeIntermediateTensorInfo(A)),m}if(e.length>J().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let u=Math.floor(e.length/2),c=Vl(e.slice(0,u),t,n),h=Vl(e.slice(u),t,n),d=Vl([c,h],t,n);return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),d}if(J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let u=new cB(e.map(c=>c.shape),t);return n.runWebGLProgram(u,e,r)}let{tensors2D:a,outShape:s}=I_(e,t,n),i=new lB(a.map(u=>u.shape)),o=n.runWebGLProgram(i,a,r);a.forEach(u=>n.disposeIntermediateTensorInfo(u));let l=_e({inputs:{x:o},attrs:{shape:s},backend:n});return n.disposeIntermediateTensorInfo(o),l}function I_(e,t,n){let r=R.computeOutShape(e.map(a=>a.shape),t);return{tensors2D:e.map(a=>_e({inputs:{x:a},attrs:{shape:[-1,v.sizeFromShape(a.shape.slice(t))]},backend:n})),outShape:r}}function S_(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=v.parseAxisParam(a,t[0].shape)[0],i=R.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(u=>v.sizeFromShape(u.shape)>0);if(o.length===1)return Bn({inputs:{x:o[0]},backend:n});let l=o.map(u=>u.shape);return R.assertParamsConsistent(l,s),Vl(o,s,n)}var hB={kernelName:mo,backendName:"webgl",kernelFunc:S_},N_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",A=m?1:2,y=m?2:3,g=m?3:1,w="",b="";n&&(r?w=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?w=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:w=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,b="result = activation(result);");let _=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${w}
|
|
|
|
const ivec2 strides = ivec2(${o}, ${l});
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${g}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${A}], coords[${y}]) * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${u};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d}; wC++) {
|
|
int xC = xCCorner + wC * ${c};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${p}; d1 += 4) {
|
|
vec4 wValues = vec4(
|
|
getW(wR, wC, d1, d2),
|
|
getW(wR, wC, d1 + 1, d2),
|
|
getW(wR, wC, d1 + 2, d2),
|
|
getW(wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xR, xC, d1),
|
|
getX(batch, xR, xC, d1 + 1),
|
|
getX(batch, xR, xC, d1 + 2),
|
|
getX(batch, xR, xC, d1 + 3)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec4 xValues = vec4(
|
|
getX(batch, d1, xR, xC),
|
|
getX(batch, d1 + 1, xR, xC),
|
|
getX(batch, d1 + 2, xR, xC),
|
|
getX(batch, d1 + 3, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
|
|
if (${f===1}) {
|
|
|
|
if (${m}) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, ${p}) *
|
|
getW(wR, wC, ${p}, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, ${p}, xR, xC) *
|
|
getW(wR, wC, ${p}, d2);
|
|
}
|
|
|
|
} else if (${f===2}) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (${f===3}) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2),
|
|
getW(wR, wC, ${p} + 2, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1),
|
|
getX(batch, xR, xC, ${p} + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC),
|
|
getX(batch, ${p} + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${_}
|
|
${b}
|
|
setOutput(result);
|
|
}
|
|
`}},dB=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.filterDepth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(${a}, ${s}, ${i});
|
|
const ivec3 pads = ivec3(${t}, ${n}, ${r});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d2 = coords.u;
|
|
|
|
ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xFCorner = xFRCCorner.x;
|
|
int xRCorner = xFRCCorner.y;
|
|
int xCCorner = xFRCCorner.z;
|
|
|
|
// Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get
|
|
// y(yF, yR, yC, d2). ? = to be determined. : = across all
|
|
// values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${c}; wF++) {
|
|
int xF = xFCorner + wF * ${o};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${l};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d}; wC++) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${p}; d1 += 4) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xF, xR, xC, d1),
|
|
getX(batch, xF, xR, xC, d1 + 1),
|
|
getX(batch, xF, xR, xC, d1 + 2),
|
|
getX(batch, xF, xR, xC, d1 + 3)
|
|
);
|
|
vec4 wValues = vec4(
|
|
getW(wF, wR, wC, d1, d2),
|
|
getW(wF, wR, wC, d1 + 1, d2),
|
|
getW(wF, wR, wC, d1 + 2, d2),
|
|
getW(wF, wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
if (${f===1}) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, ${p}) *
|
|
getW(wF, wR, wC, ${p}, d2);
|
|
} else if (${f===2}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1)
|
|
);
|
|
vec2 wValues = vec2(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else if (${f===3}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1),
|
|
getX(batch, xF, xR, xC, ${p} + 2)
|
|
);
|
|
vec3 wValues = vec3(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2),
|
|
getW(wF, wR, wC, ${p} + 2, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},pB=class{constructor(e,t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let{filterWidth:r,inChannels:a,strideWidth:s,strideHeight:i,padInfo:o,outWidth:l,dilationWidth:u,dilationHeight:c,dataFormat:h}=n,{left:d,top:p}=o,f=a*r,m=mn(),A=h==="channelsLast",y=A?0:1,g=A?1:2,w="";for(let b=0;b<=1;b++)for(let _=0;_<=1;_++)w+=`
|
|
blockIndex = rc.y + ${_};
|
|
pos = rc.x + ${b};
|
|
|
|
if(blockIndex < ${e[1]} && pos < ${e[0]}) {
|
|
offsetY = int(blockIndex / (${l})) * ${i} - ${p};
|
|
d0 = offsetY + ${c} * (pos / ${f});
|
|
|
|
if(d0 < ${t[y]} && d0 >= 0) {
|
|
|
|
offsetX = int(mod(float(blockIndex), ${l}.) * ${s}. - ${d}.);
|
|
d1 = offsetX + ${u} * (int(mod(float(pos), ${f}.) / ${a}.));
|
|
|
|
if(d1 < ${t[g]} && d1 >= 0) {
|
|
|
|
ch = int(mod(float(pos), ${a}.));
|
|
|
|
if (${A}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${b*2+_}] = getChannel(
|
|
getA(d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${b*2+_}] = getChannel(
|
|
getA(ch, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;this.userCode=`
|
|
void main() {
|
|
ivec2 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0);
|
|
|
|
int blockIndex, pos, offsetY, d0, offsetX, d1, ch;
|
|
vec2 innerDims;
|
|
|
|
${w}
|
|
|
|
${m.output} = result;
|
|
}
|
|
`}};function T_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=r.texData.get(e.dataId),c=n.inChannels,h=l[0]*l[1]*l[2],d=n.outChannels,p=n.dataFormat==="channelsLast",f=!1,m=!1,A,y=[],g=(h===1||d===1)&&c>A_,w=l[2]%2!=0&&!!u.isPacked;if(g||!J().getBool("WEBGL_LAZILY_UNPACK")||!J().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!w){let b=p?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],_=_e({inputs:{x:e},backend:r,attrs:{shape:[1,b,n.inChannels]}}),x=_e({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),S=Sp({a:_,b:x,transposeA:f,transposeB:m,backend:r,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i});A=_e({inputs:{x:S},backend:r,attrs:{shape:n.outShape}}),y.push(_),y.push(x),y.push(S)}else{let b=p?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),_={dataId:e.dataId,shape:[1,b,n.inChannels],dtype:e.dtype},x=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(yu(u.shape,_.shape),()=>`packed reshape ${u.shape} to ${_.shape} isn't free`);let S=_e({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});y.push(S);let T=Sp({a:_,b:S,backend:r,transposeA:f,transposeB:m,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),E=r.texData.get(T.dataId);v.assert(E.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=x,E.shape=n.outShape,A=Bn({inputs:{x:T},backend:r}),A.shape=n.outShape,y.push(T)}for(let b of y)r.disposeIntermediateTensorInfo(b);return A}function E_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:c,outWidth:h,outHeight:d,dataFormat:p}=n,f=p==="channelsLast",m=l*u*c,A=d*h,y=[m,A],g=!0,w=!1,b=[],_=_e({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),x=_e({inputs:{x:t},backend:r,attrs:{shape:[1,m,v.sizeFromShape(t.shape)/m]}});b.push(_),b.push(x);let S=new pB(y,_.shape,n),T=r.runWebGLProgram(S,[_],"float32"),E=_e({inputs:{x:T},backend:r,attrs:{shape:[1,y[0],y[1]]}});b.push(T),b.push(E);let F=a!=null,P=s!=null,W=o==="leakyrelu",V=o?kp(o,!0):null,U=new u_(E.shape,x.shape,[1,A,n.outChannels],g,w,F,V,P,W),H=[E,x];if(a&&H.push(a),P&&H.push(s),W){let Y=r.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));H.push(Y),b.push(Y)}let X=r.runWebGLProgram(U,H,"float32"),G=f?[1,d,h,n.outChannels]:[1,n.outChannels,d,h],ee=_e({inputs:{x:X},backend:r,attrs:{shape:G}});b.push(X);for(let Y of b)r.disposeIntermediateTensorInfo(Y);return ee}function fB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:c}=r,h=R.convertConv2DDataFormat(l),d=R.computeConv2DInfo(a.shape,s.shape,i,u,o,c,!1,h),p;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))p=T_({x:a,filter:s,convInfo:d,backend:n});else if(J().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)p=E_({x:a,filter:s,convInfo:d,backend:n});else{let m=new N_(d);p=n.runWebGLProgram(m,[a,s],"float32")}let f=_e({inputs:{x:p},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(p),f}var mB={kernelName:ws,backendName:"webgl",kernelFunc:fB},AB=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int d2 = coords.w;
|
|
|
|
// Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${r};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${a};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
if (${s}) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},yB=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,u=s?2:3,c=s?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[${c}];
|
|
|
|
ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
// Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
|
|
if (${s}) {
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
} else {
|
|
float xValue = getDy(batch, d2, idyR, idyC);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},gB=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=`
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int wF = coords.x;
|
|
int wR = coords.y;
|
|
int wC = coords.z;
|
|
int d1 = coords.w;
|
|
int d2 = coords.u;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yF = 0; yF < ${e.outDepth}; yF++) {
|
|
int xF = wF + yF * ${t} - ${a};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${n} - ${s};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${r} - ${i};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yF, yR, yC, d2);
|
|
float xValue = getX(b, xF, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},xB=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=r-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${o}, ${l}, ${u});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.u;
|
|
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyFCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${t}; wF++) {
|
|
float dyF = float(dyFCorner + wF) / ${a}.0;
|
|
|
|
if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyF = int(dyF);
|
|
|
|
int wFPerm = ${t} - 1 - wF;
|
|
|
|
for (int wR = 0; wR < ${n}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${n} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${r}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${r} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
float xValue = getDy(batch, idyF, idyR, idyC, d2);
|
|
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function wB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:c}=r,h=R.convertConv2DDataFormat(l),d=R.computeConv2DInfo(a.shape,c,i,1,o,u,!1,h),p=new AB(d);return n.runWebGLProgram(p,[a,s],"float32")}var bB={kernelName:Bh,backendName:"webgl",kernelFunc:wB};function _B(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:c}=r,h=R.convertConv2DDataFormat(u),d=R.computeConv2DInfo(i,s.shape,o,1,l,c,!1,h),p=new yB(d);return n.runWebGLProgram(p,[a,s],"float32")}var vB={kernelName:bs,backendName:"webgl",kernelFunc:_B};function kB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,u=R.computeConv3DInfo(a.shape,s.shape,i,l,o),c=new dB(u);return n.runWebGLProgram(c,[a,s],"float32")}var IB={kernelName:Ic,backendName:"webgl",kernelFunc:kB};function SB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r,u=R.computeConv3DInfo(a.shape,l,i,1,o),c=new gB(u);return n.runWebGLProgram(c,[a,s],"float32")}var NB={kernelName:Vh,backendName:"webgl",kernelFunc:SB};function TB(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r,u=R.computeConv3DInfo(l,s.shape,o,1,i),c=new xB(u);return n.runWebGLProgram(c,[a,s],"float32")}var EB={kernelName:Uh,backendName:"webgl",kernelFunc:TB},CB=c_+`
|
|
return cos(x);
|
|
`,RB=Ye({opSnippet:CB}),MB={kernelName:_s,backendName:"webgl",kernelFunc:RB},FB=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,$B=Ye({opSnippet:FB}),DB={kernelName:Ao,backendName:"webgl",kernelFunc:$B},OB=class{constructor(e,t,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[c,h]=n;this.outputShape=[u,c,h,l];let d=r==="bilinear"?1:0,[p,f]=[`${i-1}.0`,`${o-1}.0`],[m,A,y]=c>1?[`${(i-1)/(c-1)}`,"(y2-y1) * height_ratio",`y1*${p} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${p}`],[g,w,b]=h>1?[`${(o-1)/(h-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=`
|
|
const float height_ratio = float(${m});
|
|
const float width_ratio = float(${g});
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int y = coords[1];
|
|
int x = coords[2];
|
|
int d = coords[3];
|
|
|
|
// get box vals
|
|
float y1 = getBoxes(b,0);
|
|
float x1 = getBoxes(b,1);
|
|
float y2 = getBoxes(b,2);
|
|
float x2 = getBoxes(b,3);
|
|
|
|
// get image in batch index
|
|
int bInd = round(getBoxInd(b));
|
|
if(bInd < 0 || bInd >= ${s}) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = ${A};
|
|
float width_scale = ${w};
|
|
|
|
float in_y = ${y};
|
|
if( in_y < 0.0 || in_y > ${p} ) {
|
|
setOutput(float(${a}));
|
|
return;
|
|
}
|
|
float in_x = ${b};
|
|
if( in_x < 0.0 || in_x > ${f} ) {
|
|
setOutput(float(${a}));
|
|
return;
|
|
}
|
|
|
|
vec2 sourceFracIndexCR = vec2(in_x,in_y);
|
|
if(${d} == 1) {
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);
|
|
ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));
|
|
|
|
float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);
|
|
float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);
|
|
float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);
|
|
float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);
|
|
|
|
vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracCR.x;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;
|
|
float newValue = top + (bottom - top) * fracCR.y;
|
|
setOutput(newValue);
|
|
} else {
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestCR = ivec2(floor(
|
|
sourceFracIndexCR + vec2(0.5,0.5)));
|
|
float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);
|
|
setOutput(newValue);
|
|
}
|
|
}
|
|
`}},zB=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,c=new OB(a.shape,s.shape,o,l,u);return n.runWebGLProgram(c,[a,s,i],"float32")},PB={kernelName:yo,backendName:"webgl",kernelFunc:zB},M_=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=e;let r=e.length,a=t?"0.0":`getX(${C_(r,"coords")})`,s=e[e.length-1],i="",o="";t?(i=n?`end != ${s-1}`:"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`
|
|
uniform float index;
|
|
void main() {
|
|
${ut(r)} coords = getOutputCoords();
|
|
int end = ${R_(r,"coords")};
|
|
float val = ${a};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${i}) {
|
|
int idx = ${o};
|
|
${R_(r,"coords")} = idx;
|
|
val += getX(${C_(r,"coords")});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.index==null&&(this.index=t.getUniformLocation(n,"index")),t.gl.uniform1f(this.index,e)}}};function C_(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function R_(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function LB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length,u=R.getAxesPermutation([s],l),c=a;u!=null&&(c=En({inputs:{x:a},backend:n,attrs:{perm:u}}));let h=R.getInnerMostAxes(1,l)[0];if(h!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${a.shape.length-1} but got axis=${s}`);let d=c.shape[h],p=Bn({inputs:{x:c},backend:n});for(let f=0;f<=Math.ceil(Math.log2(d))-1;f++){let m=new M_(c.shape,!1,o),A=m.getCustomSetupFunc(f),y=p;p=n.runWebGLProgram(m,[p],p.dtype,A),n.disposeIntermediateTensorInfo(y)}if(i){let f=new M_(c.shape,i,o),m=p;p=n.runWebGLProgram(f,[p],p.dtype),n.disposeIntermediateTensorInfo(m)}if(u!=null){let f=R.getUndoAxesPermutation(u),m=En({inputs:{x:p},backend:n,attrs:{perm:f}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(c),m}return p}var WB={kernelName:vs,backendName:"webgl",kernelFunc:LB};function BB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.readSync(a.dataId),u=n.readSync(s.dataId),c=Xb(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}else if(a.shape.length===2){let l=n.bufferSync(a),u=n.bufferSync(s),c=AP(l,u,i,o);return n.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var VB={kernelName:jh,backendName:"webgl",kernelFunc:BB},UB=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int h = ${this.getHeightCoordString()};
|
|
int w = ${this.getWidthCoordString()};
|
|
int d = ${this.getDepthCoordString()};
|
|
|
|
int in_h = h / ${t};
|
|
int offset_h = imod(h, ${t});
|
|
int in_w = w / ${t};
|
|
int offset_w = imod(w, ${t});
|
|
int offset_d = (offset_h * ${t} + offset_w) *
|
|
${this.getOutputDepthSize()};
|
|
int in_d = d + offset_d;
|
|
|
|
float result = ${this.getInputSamplingString()};
|
|
setOutput(result);
|
|
}
|
|
`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function jB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;v.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],u=i==="NHWC"?a.shape[2]:a.shape[3],c=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=u*s,p=c/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=new UB(f,s,i);return n.runWebGLProgram(m,[a],a.dtype)}var HB={kernelName:go,backendName:"webgl",kernelFunc:jB},F_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,u=e.strideHeight,c=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=e.outChannels/e.inChannels,A="",y="";n&&(r?A=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?A=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:A=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,y="result = activation(result);");let g=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${A}
|
|
|
|
const ivec2 strides = ivec2(${u}, ${c});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${m};
|
|
int q = d2 - d1 * ${m};
|
|
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
// TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.
|
|
for (int wR = 0; wR < ${p}; wR++) {
|
|
int xR = xRCorner + wR * ${h};
|
|
|
|
if (xR < 0 || xR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f}; wC++) {
|
|
int xC = xCCorner + wC * ${d};
|
|
|
|
if (xC < 0 || xC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float xVal = getX(batch, xR, xC, d1);
|
|
float wVal = getW(wR, wC, d1, q);
|
|
dotProd += xVal * wVal;
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${g}
|
|
${y}
|
|
setOutput(result);
|
|
}
|
|
`}},$_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,u=e.strideHeight,c=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=f,A="int xR; int xC; int xCOffset;";for(let b=0;b<p;b++)for(let _=0;_<f;_++)A+=`
|
|
vec4 xTexelR${b}C${_*2} = vec4(0.);
|
|
vec4 wR${b}C${_} = vec4(0.);
|
|
vec4 xR${b}C${_} = vec4(0.);`;for(let b=0;b<p;b++)for(let _=0;_<m;_++){let x=_*2;if(A+=`
|
|
xR = xRCorner + ${b*h};
|
|
xC = xCCorner + ${x*d};
|
|
`,c===1){if(x<f&&(l%2==1?A+=`
|
|
xCOffset = xC + 1;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
xTexelR${b}C${x}.zw = vec2(0.);
|
|
}
|
|
} else {
|
|
xTexelR${b}C${x} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + 1 - 2;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
vec4 previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
previous.zw = vec2(0.);
|
|
}
|
|
|
|
xR${b}C${x} = vec4(previous.zw, xTexelR${b}C${x}.xy);
|
|
} else {
|
|
xR${b}C${x} = vec4(0, 0, xTexelR${b}C${x}.xy);
|
|
}
|
|
`:A+=`
|
|
if(xR >= 0 && xR < ${s} && xC >= 0 && xC < ${i}) {
|
|
xTexelR${b}C${x} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${b}C${x} = vec4(0.);
|
|
}
|
|
|
|
xR${b}C${x} = xTexelR${b}C${x};
|
|
`,x+1<f)){let S=l%2==0?v.nearestLargerEven(d):d;d%2==0&&l%2==1||d%2!=0&&l%2!=1?(A+=`
|
|
xCOffset = xC + ${l%2} + ${S};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
`,d>1&&(A+=`
|
|
xCOffset -= 2;
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${b}C${x} = vec4(0.);
|
|
}
|
|
`),A+=`
|
|
xR${b}C${x+1} = vec4(
|
|
xTexelR${b}C${x}.zw, xTexelR${b}C${x+2}.xy);
|
|
`):A+=`
|
|
xCOffset = xC + ${S};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
|
|
xR${b}C${x+1} = xTexelR${b}C${x+2};
|
|
`}}else x<f&&(A+=`
|
|
if(xR >= 0 && xR < ${s}) {
|
|
`,l%2==1?(A+=`
|
|
xCOffset = xC + 1 - ${c};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${b}C${x} = vec4(0.);
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < ${i}) {
|
|
xTexelR${b}C${x+2} = getX(batch, xR, xC + 1, d1);
|
|
} else {
|
|
xTexelR${b}C${x+2} = vec4(0.);
|
|
}
|
|
|
|
xR${b}C${x} = vec4(
|
|
xTexelR${b}C${x}.zw, xTexelR${b}C${x+2}.zw);
|
|
`,x+1<f&&(A+=`
|
|
vec4 final = vec4(0.);
|
|
xCOffset = xC + 1 + ${c};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xR${b}C${x+1} = vec4(xTexelR${b}C${x+2}.xy, final.xy);
|
|
`)):(A+=`
|
|
if(xC >= 0 && xC < ${i}) {
|
|
xTexelR${b}C${x} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${b}C${x} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + ${c};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${b}C${x+2} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${b}C${x+2} = vec4(0.);
|
|
}
|
|
|
|
xR${b}C${x} = vec4(
|
|
xTexelR${b}C${x}.xy, xTexelR${b}C${x+2}.xy);
|
|
`,x+1<f&&(A+=`
|
|
xR${b}C${x+1} = vec4(
|
|
xTexelR${b}C${x}.zw, xTexelR${b}C${x+2}.zw);
|
|
`)),A+="}");x<f&&(A+=`
|
|
vec4 wTexelR${b}C${x} = getW(${b}, ${x}, d1, q);
|
|
wR${b}C${x} = vec4(wTexelR${b}C${x}.xz, wTexelR${b}C${x}.xz);
|
|
`,x+1<f&&(A+=`
|
|
vec4 wTexelR${b}C${x+1} = getW(${b}, ${x+1}, d1, q);
|
|
wR${b}C${x+1} =
|
|
vec4(wTexelR${b}C${x+1}.xz, wTexelR${b}C${x+1}.xz);`))}for(let b=0;b<p;b++)for(let _=0;_<f;_++)A+=`dotProd += xR${b}C${_} * wR${b}C${_};`;let y="",g="";n&&(r?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:y=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,g="result = activation(result);");let w=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${y}
|
|
|
|
const ivec2 strides = ivec2(${u}, ${c});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2;
|
|
int q = 0;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
vec4 dotProd = vec4(0.);
|
|
|
|
${A}
|
|
|
|
vec4 result = dotProd;
|
|
${w}
|
|
${g}
|
|
setOutput(result);
|
|
}
|
|
`}};function GB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=r,c=l;c==null&&(c=[1,1]),v.assert(R.eitherStridesOrDilationsAreOne(i,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let h=R.computeConv2DInfo(a.shape,s.shape,i,c,o,u,!0),d;return J().getBool("WEBGL_PACK_DEPTHWISECONV")&&h.strideWidth<=2&&h.outChannels/h.inChannels==1?d=new $_(h):d=new F_(h),n.runWebGLProgram(d,[a,s],"float32")}var qB={kernelName:ks,backendName:"webgl",kernelFunc:GB},XB=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int dm = coords.w;
|
|
int d2 = d1 * ${s} + dm;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
// TO DO: Vec4 over the batch size
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${r};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${a};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},KB=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[3];
|
|
ivec2 dyCorner = coords.yz - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
// TO DO: Vec4 over the channelMul
|
|
for (int dm = 0; dm < ${o}; dm++) {
|
|
int d2 = d1 * ${o} + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function ZB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:c}=r,h=R.computeConv2DInfo(a.shape,c,i,o,l,u,!0),d=new XB(h);return n.runWebGLProgram(d,[a,s],"float32")}var YB={kernelName:Hh,backendName:"webgl",kernelFunc:ZB};function JB(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:c}=r,h=R.computeConv2DInfo(c,s.shape,i,o,l,u,!0),d=new KB(h);return n.runWebGLProgram(d,[a,s],"float32")}var QB={kernelName:Gh,backendName:"webgl",kernelFunc:JB},eV=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;
|
|
setOutput(val);
|
|
}
|
|
`}};function tV(e){let{inputs:t,backend:n}=e,{x:r}=t,a=[...r.shape,...r.shape],s=v.sizeFromShape(r.shape),i=_e({inputs:{x:r},backend:n,attrs:{shape:[s]}}),o=new eV(s),l=n.runWebGLProgram(o,[i],i.dtype),u=_e({inputs:{x:l},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var nV={kernelName:qh,backendName:"webgl",kernelFunc:tV},rV=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:a,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:c,left:h}=r;this.userCode=`
|
|
const ivec2 strides = ivec2(${a}, ${s});
|
|
const ivec2 pads = ivec2(${c}, ${h});
|
|
const float neg_infinity = -3.4e38;
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.w;
|
|
ivec2 outTopLeftCorner =
|
|
coords.yz * strides - pads;
|
|
int hBeg = outTopLeftCorner.x;
|
|
int wBeg = outTopLeftCorner.y;
|
|
|
|
float curVal = neg_infinity;
|
|
for (int h = 0; h < ${i}; h++) {
|
|
int hIn = hBeg + h * ${l};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${o}; w++) {
|
|
int wIn = wBeg + w * ${u};
|
|
|
|
if (wIn >= 0 && wIn < ${n}) {
|
|
float xVal = getX(batch, hIn, wIn, d1);
|
|
float wVal = getW(h, w, d1);
|
|
|
|
float val = xVal + wVal;
|
|
if (val > curVal) {
|
|
curVal = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = curVal;
|
|
setOutput(result);
|
|
}
|
|
`}};function aV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,u=R.computeDilation2DInfo(a.shape,s.shape,i,o,"NHWC",l),c,h=new rV(u);c=n.runWebGLProgram(h,[a,s],"float32");let d=_e({inputs:{x:c},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(c),d}var sV={kernelName:Sc,backendName:"webgl",kernelFunc:aV},iV="return (x >= 0.0) ? x : (exp(x) - 1.0);",oV=`
|
|
vec4 result;
|
|
|
|
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
|
|
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
|
|
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
|
|
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
|
|
|
|
return result;
|
|
`,lV=Ye({opSnippet:iV,packedOpSnippet:oV}),cV={kernelName:xo,backendName:"webgl",kernelFunc:lV},uV="return (b >= 1.0) ? a : a * (b + 1.0);",hV=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,dV=e=>{let{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new _u(hV,r.shape,a.shape):new Bl(uV,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)},pV={kernelName:Zh,backendName:"webgl",kernelFunc:dV},fV=`
|
|
return vec4(equal(a, b));
|
|
`,mV="return float(a == b);",AV=an({opSnippet:mV,packedOpSnippet:fV,dtype:"bool"}),yV={kernelName:bo,backendName:"webgl",kernelFunc:AV},gV=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${R.ERF_P};
|
|
float a1 = ${R.ERF_A1};
|
|
float a2 = ${R.ERF_A2};
|
|
float a3 = ${R.ERF_A3};
|
|
float a4 = ${R.ERF_A4};
|
|
float a5 = ${R.ERF_A5};
|
|
|
|
float sign = sign(x);
|
|
x = abs(x);
|
|
float t = 1.0 / (1.0 + p * x);
|
|
return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));
|
|
`,xV=Ye({opSnippet:gV}),wV={kernelName:wo,backendName:"webgl",kernelFunc:xV},D_="return exp(x);",O_=Ye({opSnippet:D_,packedOpSnippet:D_,cpuKernelImpl:xP}),bV={kernelName:Ss,backendName:"webgl",kernelFunc:O_};function kA(e){let{inputs:t,attrs:n,backend:r}=e,{dim:a}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=a;return a<0&&(v.assert(-(i+1)<=a,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+a+1),o.splice(l,0,1),_e({inputs:{x:s},backend:r,attrs:{shape:o}})}var _V={kernelName:_o,backendName:"webgl",kernelFunc:kA},z_="return exp(x) - 1.0;",vV=Ye({opSnippet:z_,packedOpSnippet:z_,cpuKernelImpl:wP}),kV={kernelName:vo,backendName:"webgl",kernelFunc:vV},P_=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let a=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${r}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=`
|
|
const float exponentMultiplier = ${a};
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
${i}
|
|
}
|
|
|
|
float mulMatDFT(int batch, int index) {
|
|
float indexRatio = float(index) / float(${r});
|
|
float exponentMultiplierTimesIndexRatio =
|
|
exponentMultiplier * indexRatio;
|
|
|
|
float result = 0.0;
|
|
|
|
for (int i = 0; i < ${r}; i++) {
|
|
// x = (-2|2 * PI / N) * index * i;
|
|
float x = exponentMultiplierTimesIndexRatio * float(i);
|
|
float expR = cos(x);
|
|
float expI = sin(x);
|
|
float real = getReal(batch, i);
|
|
float imag = getImag(batch, i);
|
|
|
|
result +=
|
|
unaryOpComplex(real, expR, imag, expI) / ${s};
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`}};function L_(e,t,n){let r=n.texData.get(e.dataId),a=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=a/s,o=_e({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}),l=o.shape,u=new P_("real",l,t),c=new P_("imag",l,t),h=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:l},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:l}],d=n.runWebGLProgram(u,h,"float32"),p=n.runWebGLProgram(c,h,"float32"),f=qa({inputs:{real:d,imag:p},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p);let m=_e({inputs:{x:f},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(f),m}function IV(e){let{inputs:t,backend:n}=e,{input:r}=t;return L_(r,!1,n)}var SV={kernelName:Yh,backendName:"webgl",kernelFunc:IV},NV=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode=`
|
|
uniform float value;
|
|
void main() {
|
|
// Input can be obtained from uniform value.
|
|
setOutput(value);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}};function IA(e){let{backend:t,attrs:n}=e,{shape:r,value:a}=n,{dtype:s}=n;if(s=s||v.inferDtype(a),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(r));return i.fill(a),t.makeTensorInfo(r,s,i)}else{let i=new NV(r,a),o=i.getCustomSetupFunc(a);return t.runWebGLProgram(i,[],s,o)}}var TV={kernelName:Nc,backendName:"webgl",kernelFunc:IA},EV=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
|
|
int coordX = ${t} - x;
|
|
float outputValue;
|
|
if(coordX >= 0 && coordX < ${t}) {
|
|
outputValue = getImage(coords[0], coords[1], coordX, coords[3]);
|
|
} else {
|
|
outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},CV={kernelName:ko,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,a=new EV(n.shape);return r.runWebGLProgram(a,[n],n.dtype)}},W_="return floor(x);",RV=Ye({opSnippet:W_,packedOpSnippet:W_,cpuKernelImpl:bP}),MV={kernelName:Ns,backendName:"webgl",kernelFunc:RV},FV=`
|
|
float s = sign(a) * sign(b);
|
|
int ia = round(a);
|
|
int ib = round(b);
|
|
if (ib != 0) {
|
|
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
|
|
return float(idiv(ia, ib, s));
|
|
} else {
|
|
return NAN;
|
|
}
|
|
`,$V=`
|
|
ivec4 ia = round(a);
|
|
ivec4 ib = round(b);
|
|
bvec4 cond = notEqual(ib, ivec4(0));
|
|
ivec4 result = ivec4(0);
|
|
vec4 s = sign(a) * sign(b);
|
|
|
|
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
|
|
if (cond[0]) {
|
|
result[0] = idiv(ia[0], ib[0], s[0]);
|
|
}
|
|
if (cond[1]) {
|
|
result[1] = idiv(ia[1], ib[1], s[1]);
|
|
}
|
|
if (cond[2]) {
|
|
result[2] = idiv(ia[2], ib[2], s[2]);
|
|
}
|
|
if (cond[3]) {
|
|
result[3] = idiv(ia[3], ib[3], s[3]);
|
|
}
|
|
return vec4(result);
|
|
`,DV=an({opSnippet:FV,packedOpSnippet:$V,dtype:"int32"}),OV={kernelName:Ts,backendName:"webgl",kernelFunc:DV},zV=class{constructor(e){this.variableNames=["A"];let t=mn(),[n,r]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0);
|
|
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
setOutput(floor(value * 255.0 + 0.5));
|
|
}
|
|
`}},PV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=mn(),[n,r]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for(int row=0; row<=1; row++) {
|
|
for(int col=0; col<=1; col++) {
|
|
texC = coords[1] + row;
|
|
depth = coords[2] + col;
|
|
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${r}.0, ${n}.0);
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
result[row * 2 + col] = floor(value * 255.0 + 0.5);
|
|
}
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},WV={kernelName:dd,backendName:"webgl",kernelFunc:LV},Ul;function LV(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:a}=t,{numChannels:s}=r,i=typeof HTMLVideoElement!="undefined"&&a instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&a instanceof HTMLImageElement,[l,u]=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],c=[u,l],h=[u,l,s];(o||i)&&(Ul==null&&(Ul=document.createElement("canvas").getContext("2d")),Ul.canvas.width=l,Ul.canvas.height=u,Ul.drawImage(a,0,0,l,u),a=Ul.canvas);let d=n.makeTensorInfo(c,"int32");n.texData.get(d.dataId).usage=Qn.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(d.dataId),a);let p=J().getBool("WEBGL_PACK")?new PV(h):new zV(h),f=n.runWebGLProgram(p,[d],"int32");return n.disposeData(d.dataId),f}function BV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=R.convertConv2DDataFormat(c),A=R.computeConv2DInfo(a.shape,s.shape,l,h,u,d,!1,m),y,g=[];if(A.filterHeight===1&&A.filterWidth===1&&A.dilationHeight===1&&A.dilationWidth===1&&A.strideHeight===1&&A.strideWidth===1&&(A.padInfo.type==="SAME"||A.padInfo.type==="VALID"))y=T_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else if(J().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)y=E_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else{let b=i!=null,_=o!=null,x=p==="leakyrelu",S=p?kp(p,!1):null,T=new N_(A,b,S,_,x),E=[a,s];if(i&&E.push(i),o&&E.push(o),x){let F=n.makeTensorInfo([],"float32",v.createScalarValue(f,"float32"));E.push(F),g.push(F)}y=n.runWebGLProgram(T,E,"float32")}let w=_e({inputs:{x:y},backend:n,attrs:{shape:A.outShape}});return g.push(y),g.forEach(b=>n.disposeIntermediateTensorInfo(b)),w}var VV={kernelName:oi,backendName:"webgl",kernelFunc:BV};function UV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:c,dimRoundingMode:h,activation:d,leakyreluAlpha:p}=r,f=[],m=c;m==null&&(m=[1,1]),v.assert(R.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let A=R.computeConv2DInfo(a.shape,s.shape,l,m,u,h,!0),y=J().getBool("WEBGL_PACK_DEPTHWISECONV")&&A.strideWidth<=2&&A.outChannels/A.inChannels==1,g=d?kp(d,y):null,w=[a,s],b=i!=null,_=o!=null,x=d==="leakyrelu";if(b&&w.push(i),_&&w.push(o),x){let E=n.makeTensorInfo([],"float32",v.createScalarValue(p,"float32"));w.push(E),f.push(E)}let S;y?S=new $_(A,b,g,_,x):S=new F_(A,b,g,_,x);let T=n.runWebGLProgram(S,w,"float32");return f.forEach(E=>n.disposeIntermediateTensorInfo(E)),T}var jV={kernelName:li,backendName:"webgl",kernelFunc:UV},HV=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let r=ut(t.length),a=ut(n.length),s=this.sliceDim>1?"strides[j]":"strides";this.userCode=`
|
|
${r} strides = ${r}(${this.strides});
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
for (int j = 0; j < ${this.sliceDim}; j++) {
|
|
int index = round(getIndices(coords[0], j));
|
|
flattenIndex += index * ${s};
|
|
}
|
|
setOutput(getX(flattenIndex, coords[1]));
|
|
}
|
|
`}};function GV(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=a.shape,i=s[s.length-1],[o,l,u,c]=R.prepareAndValidate(r,a),h=_e({inputs:{x:a},backend:n,attrs:{shape:[l,i]}}),d=_e({inputs:{x:r},backend:n,attrs:{shape:[v.sizeFromShape(r.shape)/u,u]}}),p=new HV(i,c,[l,u]),f=n.runWebGLProgram(p,[d,h],d.dtype),m=_e({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),m}var qV={kernelName:So,backendName:"webgl",kernelFunc:GV},KV=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=ut(this.rank),r=XV(e,2);this.userCode=`
|
|
void main() {
|
|
${n} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function XV(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let a=0;a<e.length;a++)a===2?r.push("int(getIndices(resRC.x, resRC.z))"):r.push(`${n[a]}`);return r.join()}function ZV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r,l=v.parseAxisParam(i,a.shape)[0],u=R.segment_util.collectGatherOpShapeInfo(a,s,l,o),c=v.sizeFromShape(s.shape),h=[],d=_e({inputs:{x:a},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),p=_e({inputs:{x:s},backend:n,attrs:{shape:[u.batchSize,c/u.batchSize]}});h.push(d),h.push(p);let f=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(n.shouldExecuteOnCPU([a,s])||a.dtype==="string"){let g=n.bufferSync(p),w=n.bufferSync(d),b=_P(w,g,f);return h.forEach(_=>n.disposeIntermediateTensorInfo(_)),n.makeTensorInfo(u.outputShape,b.dtype,b.values)}let m=new KV(d.shape,f),A=n.runWebGLProgram(m,[d,p],d.dtype);h.push(A);let y=_e({inputs:{x:A},backend:n,attrs:{shape:u.outputShape}});return h.forEach(g=>n.disposeIntermediateTensorInfo(g)),y}var YV={kernelName:Io,backendName:"webgl",kernelFunc:ZV},JV="return float(a > b);",QV=`
|
|
return vec4(greaterThan(a, b));
|
|
`,eU=an({opSnippet:JV,packedOpSnippet:QV,cpuKernelImpl:vP,dtype:"bool"}),tU={kernelName:No,backendName:"webgl",kernelFunc:eU},nU="return float(a >= b);",rU=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,aU=an({opSnippet:nU,packedOpSnippet:rU,dtype:"bool"}),sU={kernelName:Cs,backendName:"webgl",kernelFunc:aU};function iU(e){let{inputs:t,backend:n}=e,{input:r}=t;return L_(r,!0,n)}var oU={kernelName:Jh,backendName:"webgl",kernelFunc:iU},lU="return float(!isnan(x) && !isinf(x));",cU=Ye({opSnippet:lU,dtype:"bool"}),uU={kernelName:To,backendName:"webgl",kernelFunc:cU},hU="return float(isinf(x));",dU=Ye({opSnippet:hU,dtype:"bool"}),pU={kernelName:Eo,backendName:"webgl",kernelFunc:dU},fU="return float(isnan(x));",mU=Ye({opSnippet:fU,dtype:"bool"}),AU={kernelName:Co,backendName:"webgl",kernelFunc:mU},yU="return float(a < b);",gU=`
|
|
return vec4(lessThan(a, b));
|
|
`,xU=an({opSnippet:yU,packedOpSnippet:gU,cpuKernelImpl:kP,dtype:"bool"}),wU={kernelName:Ro,backendName:"webgl",kernelFunc:xU},bU="return float(a <= b);",_U=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,vU=an({opSnippet:bU,packedOpSnippet:_U,dtype:"bool"}),kU={kernelName:Mo,backendName:"webgl",kernelFunc:vU};function IU(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=IP(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var SU={kernelName:ed,backendName:"webgl",kernelFunc:IU},NU=`if (x < 0.0) return NAN;
|
|
return log(x);`,TU=`
|
|
vec4 result = log(x);
|
|
vec4 isNaN = vec4(lessThan(x, vec4(0.0)));
|
|
result.r = isNaN.r == 1.0 ? NAN : result.r;
|
|
result.g = isNaN.g == 1.0 ? NAN : result.g;
|
|
result.b = isNaN.b == 1.0 ? NAN : result.b;
|
|
result.a = isNaN.a == 1.0 ? NAN : result.a;
|
|
|
|
return result;
|
|
`,EU=Ye({opSnippet:NU,packedOpSnippet:TU,cpuKernelImpl:SP}),CU={kernelName:Fs,backendName:"webgl",kernelFunc:EU},RU="return log(1.0 + x);",MU=Ye({opSnippet:RU}),FU={kernelName:Fo,backendName:"webgl",kernelFunc:MU},$U="return float(a >= 1.0 && b >= 1.0);",DU=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,OU=an({opSnippet:$U,packedOpSnippet:DU,dtype:"bool"}),zU={kernelName:$o,backendName:"webgl",kernelFunc:OU},PU="return float(!(x >= 1.0));",LU=Ye({opSnippet:PU}),WU={kernelName:Tc,backendName:"webgl",kernelFunc:LU},BU="return float(a >= 1.0 || b >= 1.0);",VU=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,UU=an({opSnippet:BU,packedOpSnippet:VU,dtype:"bool"}),jU={kernelName:Ec,backendName:"webgl",kernelFunc:UU},HU=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
int d = coords[3];
|
|
float x = getX(b, r, c, d);
|
|
float sum = 0.0;
|
|
for (int j = -${s}; j <= ${s}; j++) {
|
|
int idx = d + j;
|
|
if (idx >= 0 && idx <= ${i}) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * ${o};
|
|
setOutput(val);
|
|
}
|
|
`}},GU=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords.x;
|
|
int r = coords.y;
|
|
int c = coords.z;
|
|
int d = coords.w;
|
|
|
|
bool hasNextCol = d < ${this.outputShape[3]};
|
|
bool hasNextRow = c < ${this.outputShape[2]};
|
|
|
|
vec4 sum = vec4(0.);
|
|
vec4 xFragAtOutputCoords = getX(b, r, c, d);
|
|
|
|
vec4 xAtOutputCoords = vec4(
|
|
getChannel(xFragAtOutputCoords, vec2(c, d)),
|
|
hasNextCol ?
|
|
getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,
|
|
hasNextRow ?
|
|
getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0
|
|
);
|
|
|
|
int firstChannel = d - ${s};
|
|
vec2 cache = vec2(0.);
|
|
if(firstChannel >= 0){
|
|
vec4 firstChannelFrag = getX(b, r, c, firstChannel);
|
|
cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));
|
|
if(hasNextRow){
|
|
cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));
|
|
}
|
|
}
|
|
|
|
ivec2 depth = ivec2(d, d + 1);
|
|
for (int j = - ${s}; j <= ${s}; j++) {
|
|
ivec2 idx = depth + j;
|
|
bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));
|
|
bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));
|
|
|
|
bool depthInRange = aboveLowerBound.x && belowUpperBound.x;
|
|
bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;
|
|
|
|
if(depthInRange || depthPlusOneInRange){
|
|
vec4 z = vec4(0.);
|
|
vec4 xFragAtCurrentDepth;
|
|
z.xz = cache.xy;
|
|
if(depthPlusOneInRange && hasNextCol){
|
|
xFragAtCurrentDepth = idx.y != d ?
|
|
getX(b, r, c, idx.y) : xFragAtOutputCoords;
|
|
z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));
|
|
if(hasNextRow){
|
|
z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));
|
|
}
|
|
}
|
|
cache.xy = z.yw;
|
|
sum += z * z;
|
|
}
|
|
}
|
|
vec4 result = xAtOutputCoords * ${o};
|
|
setOutput(result);
|
|
}
|
|
`}},qU=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r,u=J().getBool("WEBGL_PACK_NORMALIZATION")?new GU(a.shape,s,i,o,l):new HU(a.shape,s,i,o,l);return n.runWebGLProgram(u,[a],a.dtype)},XU={kernelName:Cc,backendName:"webgl",kernelFunc:qU},KU=class{constructor(e,t,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=a,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float result = 0.0;
|
|
for (int d = 0; d < ${this.depth}; ++d) {
|
|
int depthBegin = int(max(0.0, float(d - ${t})));
|
|
int depthEnd = int(min(float(${this.depth}),
|
|
float(d + ${t} + 1)));
|
|
|
|
const int MIN_DEPTH_BEGIN = 0;
|
|
const int MAX_DEPTH_END = ${this.depth};
|
|
|
|
float norm = 0.0;
|
|
for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd) {
|
|
norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
norm = float(${r}) * norm + float(${n});
|
|
|
|
for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd){
|
|
float dyi = -2.0 * float(${r})
|
|
* float(${a})
|
|
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * ${a});
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}},ZU=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:c}=r,h=new KU(a.shape,o,l,u,c);return n.runWebGLProgram(h,[a,s,i],a.dtype)},YU={kernelName:td,backendName:"webgl",kernelFunc:ZU};function JU(e,t,n,r){let a=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/a,i=_e({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=Ci(i,e.dtype,"max",r),l=_e({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}function B_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=l,c=R.getAxesPermutation(u,o),h=c!=null,d=n.shouldExecuteOnCPU([a]),p=a;if(h){if(d){let g=n.texData.get(p.dataId).values,w=new Array(o);for(let x=0;x<w.length;x++)w[x]=a.shape[c[x]];let b=gA(g,a.shape,a.dtype,c,w);p=n.makeTensorInfo(w,a.dtype);let _=n.texData.get(p.dataId);_.values=b}else p=Ip(a,c,n);u=R.getInnerMostAxes(u.length,o)}R.assertAxesAreInnerMostDims("max",u,o);let[f,m]=R.computeOutAndReduceShapes(p.shape,u),A=f;i&&(A=R.expandShapeToKeepDim(f,l));let y;if(d){let g=n.texData.get(p.dataId).values,w=NP(g,v.sizeFromShape(m),A,a.dtype);y=n.makeTensorInfo(A,a.dtype);let b=n.texData.get(y.dataId);b.values=w}else y=JU(p,m,A,n);return h&&n.disposeIntermediateTensorInfo(p),y}var QU={kernelName:$s,backendName:"webgl",kernelFunc:B_},ej=a_+`
|
|
return max(a, b);
|
|
`,tj=`
|
|
vec4 result = vec4(max(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+vp+`
|
|
return result;
|
|
`,nj=an({opSnippet:ej,packedOpSnippet:tj,cpuKernelImpl:TP}),rj={kernelName:Ds,backendName:"webgl",kernelFunc:nj};function aj(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;Fl(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,u=1;v.assert(R.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let c=R.computePool2DInfo(a.shape,s,i,u,o,l);if(c.filterWidth===1&&c.filterHeight===1&&v.arraysEqual(c.inShape,c.outShape))return Bn({inputs:{x:a},backend:n});let h=new vu(c,"max",!1);return n.runWebGLProgram(h,[a],a.dtype)}var sj={kernelName:Os,backendName:"webgl",kernelFunc:aj};function ij(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=r,c=[1,1,1],h=R.computePool3DInfo(a.shape,s,i,c,o,u,l),d=new bA(h,"max",!1);return n.runWebGLProgram(d,[a],a.dtype)}var oj={kernelName:Rc,backendName:"webgl",kernelFunc:ij},lj=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,a=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=a-1-e.padInfo.top,o=s-1-e.padInfo.left,l=a*s-1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${a};
|
|
wR += ${r}) {
|
|
float dyR = float(dyRCorner + wR) / ${t}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${s}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${n}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue = wR * ${s} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},cj=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=o-1-e.padInfo.front,h=l-1-e.padInfo.top,d=u-1-e.padInfo.left,p=o*l*u-1;this.userCode=`
|
|
const ivec3 pads = ivec3(${c}, ${h}, ${d});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${o};
|
|
wD += ${a}) {
|
|
float dyD = float(dyDCorner + wD) / ${t}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${l};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${n}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${u};
|
|
wC += ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
int maxPosValue = ${p} -
|
|
int(getMaxPos(batch, idyD, idyR, idyC, ch));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue =
|
|
wD * ${l} * ${u} +
|
|
wR * ${u} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function uj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:c}=r,h=[1,1,1],d=R.computePool3DInfo(i.shape,o,l,h,u,c),p=new bA(d,"max",!0),f=n.runWebGLProgram(p,[i],i.dtype),m=new cj(d),A=n.runWebGLProgram(m,[a,f],i.dtype);return n.disposeIntermediateTensorInfo(f),A}var hj={kernelName:rd,backendName:"webgl",kernelFunc:uj};function dj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;Fl([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:h}=r,d=R.computePool2DInfo(o.shape,l,u,1,c,h),p=!0,f=new vu(d,"max",p),m=n.runWebGLProgram(f,[o],o.dtype),A=new lj(d),y=n.runWebGLProgram(A,[a,m],o.dtype);return n.disposeIntermediateTensorInfo(m),y}var pj={kernelName:nd,backendName:"webgl",kernelFunc:dj};function fj(e,t,n,r){let a=new vu(n,"max",!1),s=r.runWebGLProgram(a,[e],"float32");a=new vu(n,"max",!0,!0,t);let i=r.runWebGLProgram(a,[e],"float32");return[s,i]}var mj={kernelName:ad,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;v.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];v.assert(R.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=R.computePool2DInfo(r.shape,a,s,u,i),[h,d]=fj(r,o,c,l);return[h,d]}};function Aj(e,t,n,r){let a=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/a,i=_e({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=Ci(i,"float32","mean",r),l=_e({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}var yj={kernelName:zs,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:a,axis:s}=t,i=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,c=R.getAxesPermutation(u,o),h=c!=null,d=i.shouldExecuteOnCPU([r]),p=[],f=r;if(h){if(d){let w=i.texData.get(f.dataId).values,b=new Array(o);for(let S=0;S<b.length;S++)b[S]=r.shape[c[S]];let _=gA(w,r.shape,r.dtype,c,b);f=i.makeTensorInfo(b,r.dtype);let x=i.texData.get(f.dataId);x.values=_}else f=Ip(r,c,i);p.push(f),u=R.getInnerMostAxes(u.length,o)}R.assertAxesAreInnerMostDims("sum",u,o);let[m,A]=R.computeOutAndReduceShapes(f.shape,u),y=m;a&&(y=R.expandShapeToKeepDim(m,l));let g=Aj(f,A,y,i);for(let w of p)i.disposeIntermediateTensorInfo(w);return g}};function gj(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=l,c=R.getAxesPermutation(u,o),h=a;c!=null&&(h=En({inputs:{x:a},backend:n,attrs:{perm:c}}),u=R.getInnerMostAxes(u.length,a.shape.length)),R.assertAxesAreInnerMostDims("min",u,o);let[d,p]=R.computeOutAndReduceShapes(h.shape,u),f=v.sizeFromShape(p),m=_e({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=Ci(m,m.dtype,"min",n),y;if(i){let g=R.expandShapeToKeepDim(d,l);y=_e({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=_e({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),c!=null&&n.disposeIntermediateTensorInfo(h),y}var xj={kernelName:Ps,backendName:"webgl",kernelFunc:gj},wj=a_+`
|
|
return min(a, b);
|
|
`,bj=`
|
|
vec4 result = vec4(min(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+vp+`
|
|
return result;
|
|
`,_j=an({opSnippet:wj,packedOpSnippet:bj,cpuKernelImpl:EP}),vj={kernelName:Ls,backendName:"webgl",kernelFunc:_j},kj=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let r=e.length,a=ut(r),s=t.map(u=>u[0]).join(","),i=t.map((u,c)=>u[0]+e[c]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l=n==="reflect"?0:1;if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start) {
|
|
outC = start * 2 - outC - ${l};
|
|
} else if(outC >= end) {
|
|
outC = (end - 1) * 2 - outC + ${l};
|
|
}
|
|
setOutput(getX(outC - start));
|
|
}
|
|
`;return}this.userCode=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outC = getOutputCoords();
|
|
for (int i = 0; i < ${r}; i++) {
|
|
if (outC[i] < start[i]) {
|
|
outC[i] = start[i] * 2 - outC[i] - ${l};
|
|
} else if(outC[i] >= end[i]) {
|
|
outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};
|
|
}
|
|
}
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}},Ij=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((p,f)=>p[0]+e[f]+p[1]);let r=e.length,a=ut(r),s=t.map(p=>p[0]).join(","),i=t.map((p,f)=>p[0]+e[f]).join(","),o=An("rc",r),l=An("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,c=r===1?"source":`vec2(${l.slice(-2).join()})`,h=n==="reflect"?0:1,d="";if(r===1){let p=`
|
|
${a} source = rc;
|
|
if (source < start) {
|
|
source = start * 2 - source - ${h};
|
|
} else if (source >= end) {
|
|
source = (end - 1) * 2 - source + ${h};
|
|
}
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${c});
|
|
${o[r-1]} += 1;
|
|
if(${u}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${c});
|
|
}
|
|
`}else{let p=`
|
|
${a} source = rc;
|
|
${a} lt = ${a}(lessThan(source, start));
|
|
${a} gte = ${a}(greaterThanEqual(source, end));
|
|
${a} orig = 1 - (lt + gte);
|
|
source = orig * source +
|
|
lt * (start * 2 - source - ${h}) +
|
|
gte * ((end - 1) * 2 - source + ${h});
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${c});
|
|
${o[r-1]} += 1;
|
|
if(${u}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${c});
|
|
}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {
|
|
${p}
|
|
result[2] = getChannel(getX(${l.join()}), ${c});
|
|
${o[r-1]} += 1;
|
|
if(${u}) {
|
|
${p}
|
|
result[3] = getChannel(getX(${l.join()}), ${c});
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${d}
|
|
setOutput(result);
|
|
}
|
|
`}},Sj=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:a,mode:s}=n,i=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Ij(r.shape,a,s):new kj(r.shape,a,s);return t.runWebGLProgram(i,[r],r.dtype)},Nj={kernelName:Mc,backendName:"webgl",kernelFunc:Sj},Tj=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,Ej=`
|
|
vec4 result = mod(a, b);
|
|
vec4 isNaN = vec4(equal(b, vec4(0.0)));
|
|
`+vp+`
|
|
return result;
|
|
`,Cj=an({opSnippet:Tj,packedOpSnippet:Ej}),Rj={kernelName:Do,backendName:"webgl",kernelFunc:Cj},Mj=class{constructor(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode=`
|
|
uniform float seed;
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
|
|
float r = random(seed);
|
|
float cdf = 0.0;
|
|
|
|
for (int i = 0; i < ${t-1}; i++) {
|
|
cdf += getProbs(batch, i);
|
|
|
|
if (r < cdf) {
|
|
setOutput(float(i));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// If no other event happened, last event happened.
|
|
setOutput(float(${t-1}));
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.seedLoc==null&&(this.seedLoc=t.getUniformLocation(n,"seed")),t.gl.uniform1f(this.seedLoc,e)}}},Fj=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,$j=`
|
|
// vec4 one = vec4(equal(a, b));
|
|
// return one + (vec4(1.0) - one) * a / b;
|
|
vec4 result = a / b;
|
|
if(a.x == b.x) {
|
|
result.x = 1.;
|
|
}
|
|
if(a.y == b.y) {
|
|
result.y = 1.;
|
|
}
|
|
if(a.z == b.z) {
|
|
result.z = 1.;
|
|
}
|
|
if(a.w == b.w) {
|
|
result.w = 1.;
|
|
}
|
|
|
|
return result;
|
|
`,V_=an({opSnippet:Fj,packedOpSnippet:$j,checkOutOfBounds:!0}),Dj={kernelName:Is,backendName:"webgl",kernelFunc:V_},U_="return a - b;",j_=an({opSnippet:U_,packedOpSnippet:U_,supportsComplex:!0,cpuKernelImpl:zP}),Oj={kernelName:ri,backendName:"webgl",kernelFunc:j_};function H_(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=v.parseAxisParam([s],a.shape),o=B_({inputs:{x:a},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=R.expandShapeToKeepDim(o.shape,i),u=_e({inputs:{x:o},backend:n,attrs:{shape:l}}),c=j_({inputs:{a,b:u},backend:n}),h=O_({inputs:{x:c},backend:n}),d=wA({inputs:{x:h},backend:n,attrs:{axis:i,keepDims:!1}}),p=_e({inputs:{x:d},backend:n,attrs:{shape:l}}),f=V_({inputs:{a:h,b:p},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}var zj={kernelName:ti,backendName:"webgl",kernelFunc:H_};function Pj(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r,l=o?a:H_({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),u=l.shape[0],c=l.shape[1],h=new Mj(u,c,s),d=h.getCustomSetupFunc(i),p=n.runWebGLProgram(h,[l],"int32",d);return o||n.disposeIntermediateTensorInfo(l),p}var Lj={kernelName:sd,backendName:"webgl",kernelFunc:Pj},G_="return -x;";function Wj(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let s=n.texData.get(r.dataId),[i,o]=RP(s.values,r.shape,r.dtype);return n.makeTensorInfo(o,r.dtype,i)}let a;return J().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new Ll(r.shape,G_):a=new Ga(r.shape,G_),n.runWebGLProgram(a,[r],r.dtype)}var Bj={kernelName:Oo,backendName:"webgl",kernelFunc:Wj},Vj=jr.nonMaxSuppressionV3Impl;function Uj(e){R.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r,u=n.readSync(a.dataId),c=n.readSync(s.dataId),{selectedIndices:h}=Vj(u,c,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var jj={kernelName:Po,backendName:"webgl",kernelFunc:Uj},Hj=jr.nonMaxSuppressionV4Impl;function Gj(e){R.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=r,c=n.readSync(a.dataId),h=n.readSync(s.dataId),{selectedIndices:d,validOutputs:p}=Hj(c,h,i,o,l,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var qj={kernelName:Lo,backendName:"webgl",kernelFunc:Gj},Xj=jr.nonMaxSuppressionV5Impl;function Kj(e){R.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=r,c=n.readSync(a.dataId),h=n.readSync(s.dataId),d=i,p=o,f=l,m=u,{selectedIndices:A,selectedScores:y}=Xj(c,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Zj={kernelName:Wo,backendName:"webgl",kernelFunc:Kj},Yj=class{constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int index = round(getIndices(coords.x));
|
|
setOutput(mix(float(${r}), float(${n}),
|
|
float(index == coords.y)));
|
|
}
|
|
`}},Jj=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=v.sizeFromShape(a.shape),u=new Yj(l,s,i,o),c=_e({inputs:{x:a},backend:n,attrs:{shape:[l]}}),h=n.runWebGLProgram(u,[c],a.dtype);n.disposeIntermediateTensorInfo(c);let d=[...a.shape,s],p=_e({inputs:{x:h},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(h),p},Qj={kernelName:Bs,backendName:"webgl",kernelFunc:Jj};function Cp(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let a=Iu({inputs:{input:r},backend:n}),s=Cp({inputs:{x:a},backend:n}),i=Ep({inputs:{input:r},backend:n}),o=Cp({inputs:{x:i},backend:n}),l=qa({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return IA({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var eH={kernelName:al,backendName:"webgl",kernelFunc:Cp};function q_(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(r.dtype==="complex64"){let a=Iu({inputs:{input:r},backend:n}),s=q_({inputs:{x:a},backend:n}),i=Ep({inputs:{input:r},backend:n}),o=Cp({inputs:{x:i},backend:n}),l=qa({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return IA({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var tH={kernelName:Bo,backendName:"webgl",kernelFunc:q_};function nH(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return kA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{v.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(c=>{let h=kA({inputs:{input:c},backend:n,attrs:{dim:a}});return o.push(h),h}),u=S_({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(c=>n.disposeIntermediateTensorInfo(c)),u}var rH={kernelName:Vo,backendName:"webgl",kernelFunc:nH},aH=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let r=e.length,a=ut(r),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
uniform float value;
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(value);
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`;return}this.userCode=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
uniform float value;
|
|
|
|
void main() {
|
|
${a} outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(value);
|
|
} else {
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}},sH=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,m)=>f[0]+e[m]+f[1]);let r=e.length,a=ut(r),s=t.map(f=>f[0]).join(","),i=t.map((f,m)=>f[0]+e[m]).join(","),o=An("rc",r),l=An("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,c=r===1?"source":`vec2(${l.slice(-2).join()})`,h=[`${a} rc = outputLoc;`,`${o[r-1]} += 1;
|
|
if(${u}) {
|
|
`,r===1?"":`}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${o[r-1]} += 1;
|
|
if(${u}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",p="";for(let f=0,m=r===1?2:4;f<m;f++)p+=`
|
|
${h[f]}
|
|
if (${d}) {
|
|
result[${f}] = float(value);
|
|
} else {
|
|
${a} source = rc - start;
|
|
result[${f}] = getChannel(getX(${l.join()}), ${c});
|
|
}
|
|
`;p+=r===1?"} ":"}}",this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
uniform float value;
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${p}
|
|
setOutput(result);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}},X_=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r,o=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new sH(a.shape,s,i):new aH(a.shape,s,i),l=o.getCustomSetupFunc(i);return n.runWebGLProgram(o,[a],a.dtype,l)},iH={kernelName:Vs,backendName:"webgl",kernelFunc:X_},oH=`
|
|
if(a < 0.0 && floor(b) < b){
|
|
return NAN;
|
|
}
|
|
if (b == 0.0) {
|
|
return 1.0;
|
|
}
|
|
return (round(mod(b, 2.0)) != 1) ?
|
|
pow(abs(a), b) : sign(a) * pow(abs(a), b);
|
|
`,lH=`
|
|
// isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.
|
|
vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));
|
|
vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);
|
|
vec4 result = multiplier * pow(abs(a), b);
|
|
|
|
// Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS
|
|
bvec4 isExpZero = equal(b, vec4(0.0));
|
|
result.r = isExpZero.r ? 1.0 : result.r;
|
|
result.g = isExpZero.g ? 1.0 : result.g;
|
|
result.b = isExpZero.b ? 1.0 : result.b;
|
|
result.a = isExpZero.a ? 1.0 : result.a;
|
|
|
|
vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));
|
|
`+vp+`
|
|
return result;
|
|
`,cH=an({opSnippet:oH,packedOpSnippet:lH}),uH={kernelName:Us,backendName:"webgl",kernelFunc:cH};function hH(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=[],u=v.parseAxisParam(s,a.shape),c=u,h=R.getAxesPermutation(c,o),d=a;h!=null&&(d=En({inputs:{x:a},backend:n,attrs:{perm:h}}),c=R.getInnerMostAxes(c.length,o),l.push(d)),R.assertAxesAreInnerMostDims("prod",c,o);let p;if(n.shouldExecuteOnCPU([d])){let f=n.texData.get(d.dataId).values,{outVals:m,outShape:A,outDtype:y}=MP(d.shape,d.dtype,f,c);p=n.makeTensorInfo(A,y,m)}else{let[f,m]=R.computeOutAndReduceShapes(d.shape,c),A=v.sizeFromShape(m),y=_e({inputs:{x:d},backend:n,attrs:{shape:[-1,A]}}),g=yd(a.dtype),w=Ci(y,g,"prod",n);p=_e({inputs:{x:w},backend:n,attrs:{shape:f}}),l.push(y),l.push(w)}if(i){l.push(p);let f=R.expandShapeToKeepDim(p.shape,u);p=_e({inputs:{x:p},backend:n,attrs:{shape:f}})}return l.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var dH={kernelName:Uo,backendName:"webgl",kernelFunc:hH},K_=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=FP(r,a,s,i);return t.makeTensorInfo([o.length],i,o)},pH={kernelName:Fc,backendName:"webgl",kernelFunc:K_},fH="return 1.0 / x;",mH=Ye({opSnippet:fH}),AH={kernelName:jo,backendName:"webgl",kernelFunc:mH},yH=kr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,gH=`
|
|
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,xH=Ye({opSnippet:yH,packedOpSnippet:gH}),wH={kernelName:Hs,backendName:"webgl",kernelFunc:xH},bH=kr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,_H=`
|
|
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,vH=Ye({opSnippet:bH,packedOpSnippet:_H}),kH={kernelName:qs,backendName:"webgl",kernelFunc:vH},IH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":h="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/c[0]},
|
|
${u[1]/c[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${h};
|
|
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));
|
|
ivec2 sourceCeilRC = ivec2(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);
|
|
float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);
|
|
float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);
|
|
float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);
|
|
|
|
vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracRC.y;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;
|
|
float newValue = top + (bottom - top) * fracRC.x;
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}},SH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":h="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${u[0]/c[0]},
|
|
${u[1]/c[1]},
|
|
${u[1]/c[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${h};
|
|
|
|
// Compute the four integer indices.
|
|
ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));
|
|
ivec3 sourceCeilRC = ivec3(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-1};
|
|
|
|
// In parallel, construct four corners for all four components in
|
|
// packed 2x2 cell.
|
|
vec4 topLeft = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomLeft = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 topRight = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomRight = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);
|
|
|
|
vec4 top = mix(topLeft, topRight, fracRC.yyzz);
|
|
vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);
|
|
vec4 newValue = mix(top, bottom, fracRC.x);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function NH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,c=J().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new SH(a.shape,l,u,s,i):new IH(a.shape,l,u,s,i);return n.runWebGLProgram(c,[a],"float32")}var TH={kernelName:Gs,backendName:"webgl",kernelFunc:NH},EH=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],c=o[1]/l[1],h=1/u,d=1/c,p=Math.ceil(h)*2+2,f=Math.ceil(d)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${c});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(startRLerp - float(winHeight / 2));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(startCLerp - float(winWidth / 2));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float dxR = float(dyR) * heightScale;
|
|
int topDxRIndex = int(floor(dxR));
|
|
int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0));
|
|
float dxRLerp = dxR - float(topDxRIndex);
|
|
float inverseDxRLerp = 1.0 - dxRLerp;
|
|
|
|
float dxC = float(dyC) * widthScale;
|
|
int leftDxCIndex = int(floor(dxC));
|
|
int rightDxCIndex = int(min(ceil(dxC), ${a-1}.0));
|
|
float dxCLerp = dxC - float(leftDxCIndex);
|
|
float inverseDxCLerp = 1.0 - dxCLerp;
|
|
|
|
if (r == topDxRIndex && c == leftDxCIndex) {
|
|
// topLeft
|
|
accumulator +=
|
|
getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == topDxRIndex && c == rightDxCIndex) {
|
|
// topRight
|
|
accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == leftDxCIndex) {
|
|
// bottomLeft
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == rightDxCIndex) {
|
|
// bottomRight
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function CH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new EH(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var RH={kernelName:ld,backendName:"webgl",kernelFunc:CH},MH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0",d;a?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/c[0]},
|
|
${u[1]/c[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestRC = ivec2(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function FH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,c=new MH(a.shape,l,u,s,i);return n.runWebGLProgram(c,[a],a.dtype)}var $H={kernelName:$c,backendName:"webgl",kernelFunc:FH},DH=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],c=o[1]/l[1],h=1/u,d=1/c,p=Math.ceil(h)*2+2,f=Math.ceil(d)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${c});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(floor(startRLerp - float(winHeight / 2)));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(floor(startCLerp - float(winWidth / 2)));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float sourceFracRow =
|
|
float(${o[0]}) *
|
|
(float(dyR) / float(${l[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${o[1]}) *
|
|
(float(dyC) / float(${l[1]}));
|
|
|
|
int sourceNearestRow = int(min(
|
|
float(int(${r}) - 1),
|
|
${n} ? float(round(sourceFracRow)) :
|
|
float(floor(sourceFracRow))));
|
|
|
|
int sourceNearestCol = int(min(
|
|
float(int(${a}) - 1),
|
|
${n} ? float(round(sourceFracCol)) :
|
|
float(floor(sourceFracCol))));
|
|
|
|
if (r == sourceNearestRow && c == sourceNearestCol) {
|
|
accumulator += getDy(b, dyR, dyC, d);
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function OH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new DH(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var zH={kernelName:od,backendName:"webgl",kernelFunc:OH},PH=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=`
|
|
void main() {
|
|
int coord = getOutputCoords();
|
|
setOutput(getX(${e[0]} - coord - 1));
|
|
}
|
|
`;return}let r=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,a=e.map((i,o)=>r(o)).join(","),s=ut(n);this.userCode=`
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${a}));
|
|
}
|
|
`}},LH=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let r=An("rc",n),a=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,i=ut(n);n===1?this.userCode=`
|
|
void main(){
|
|
int rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = getChannel(getX(${e[0]} - rc - 1),
|
|
${e[0]} - rc - 1);
|
|
if(${a}){
|
|
result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),
|
|
${e[0]} - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:this.userCode=`
|
|
void main() {
|
|
${i} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = ${o(r.slice())};
|
|
if(${a}){
|
|
result.g = ${l(r.slice())};
|
|
}
|
|
if(${s}) {
|
|
result.b = ${u(r.slice())};
|
|
if(${a}) {
|
|
result.a = ${c(r.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function o(p){return h(p)}function l(p){return p[n-1]="("+p[n-1]+" + 1)",h(p)}function u(p){return p[n-2]="("+p[n-2]+" + 1)",h(p)}function c(p){return p[n-1]="("+p[n-1]+" + 1)",p[n-2]="("+p[n-2]+" + 1)",h(p)}function h(p){let f=e.map((y,g)=>d(g,p)),m=f.join(","),A=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${A}))`}function d(p,f){return t.indexOf(p)!==-1&&e[p]!==1?`${e[p]} - ${f[p]} - 1`:`${f[p]}`}}};function WH(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=a.shape.length,o=v.parseAxisParam(s,a.shape);if(i===0)return Bn({inputs:{x:a},backend:n});let l=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new LH(a.shape,o):new PH(a.shape,o);return n.runWebGLProgram(l,[a],a.dtype)}var BH={kernelName:Xs,backendName:"webgl",kernelFunc:WH},VH=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[];let n=e[1],r=e[2];this.outputShape=e;let a="";typeof t=="number"?a=`float outputValue = ${t.toFixed(2)};`:a=`
|
|
vec3 fill = vec3(${t.join(",")});
|
|
float outputValue = fill[coords[3]];`,this.userCode=`
|
|
uniform vec4 params;
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
float coordXFloat = (float(x) - params[0]) * params[3] -
|
|
(float(y) - params[1]) * params[2];
|
|
float coordYFloat = (float(x) - params[0]) * params[2] +
|
|
(float(y) - params[1]) * params[3];
|
|
int coordX = int(round(coordXFloat + params[0]));
|
|
int coordY = int(round(coordYFloat + params[1]));
|
|
${a}
|
|
if(coordX >= 0 && coordX < ${r} && coordY >= 0 && coordY < ${n}) {
|
|
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}getCustomSetupFunc(e,t,n,r){return(a,s)=>{this.paramsLoc==null&&(this.paramsLoc=a.getUniformLocationNoThrow(s,"params")),a.gl.uniform4f(this.paramsLoc,e,t,n,r)}}},UH={kernelName:sl,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=new VH(r.shape,s),[u,c]=R.getImageCenter(i,r.shape[1],r.shape[2]),h=l.getCustomSetupFunc(u,c,Math.sin(a),Math.cos(a));return o.runWebGLProgram(l,[r],r.dtype,h)}},jH=`
|
|
// OpenGL ES does not support round function.
|
|
// The algorithm is based on banker's rounding.
|
|
float base = floor(x);
|
|
if ((x - base) < 0.5) {
|
|
return floor(x);
|
|
} else if ((x - base) > 0.5) {
|
|
return ceil(x);
|
|
} else {
|
|
if (mod(base, 2.0) == 0.0) {
|
|
return base;
|
|
} else {
|
|
return base + 1.0;
|
|
}
|
|
}
|
|
`,HH=Ye({opSnippet:jH}),GH={kernelName:Ks,backendName:"webgl",kernelFunc:HH},qH="return inversesqrt(x);",XH=Ye({opSnippet:qH,cpuKernelImpl:$P}),KH={kernelName:Zs,backendName:"webgl",kernelFunc:XH},Z_=class{constructor(e,t,n,r,a,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=ut(a.length),l=ut(s.length),u="";n===1?u="i":n===2&&(u="i, j");let c=`getIndices(${u})`,h="";r===1?h="i":r===2&&(h="i, coords[1]");let d=`getUpdates(${h})`,p=t>1?"strides[j]":"strides";this.userCode=`
|
|
${o} strides = ${o}(${a});
|
|
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
float sum = 0.0;
|
|
bool found = false;
|
|
for (int i = 0; i < ${e}; i++) {
|
|
int flattenedIndex = 0;
|
|
for (int j = 0; j < ${t}; j++) {
|
|
int index = round(${c});
|
|
flattenedIndex += index * ${p};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${d};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function ZH(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:c,outputSize:h}=R.calculateShapes(s,a,i),d=[h/u,u];if(h===0)return n.makeTensorInfo(i,a.dtype);let p=_e({inputs:{x:a},backend:n,attrs:{shape:[l,o]}}),f=_e({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),A=new Z_(l,o,p.shape.length,f.shape.length,c,d),y=n.runWebGLProgram(A,[f,p,m],f.dtype),g=_e({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(m),g}var YH={kernelName:Go,backendName:"webgl",kernelFunc:ZH},JH=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let r,a;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)a="resRC",r="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u<t.length;u++)l.push(`${i[u]}`),u<e&&o.push(`${i[u]}`);r=o.join(),a=l.join()}let s=ut(n);this.userCode=`
|
|
void main() {
|
|
${s} resRC = getOutputCoords();
|
|
float cVal = getC(${r});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${a}));
|
|
} else {
|
|
setOutput(getB(${a}));
|
|
}
|
|
}
|
|
`}};function QH(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=new JH(r.shape.length,a.shape,a.shape.length);return n.runWebGLProgram(i,[r,a,s],or(a.dtype,s.dtype))}var eG={kernelName:qo,backendName:"webgl",kernelFunc:QH},tG=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${R.SELU_SCALEALPHA};
|
|
float scale = ${R.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,nG=Ye({opSnippet:tG}),rG={kernelName:Xo,backendName:"webgl",kernelFunc:nG},aG="return 1.0 / (1.0 + exp(-1.0 * x));",sG=Ye({opSnippet:aG}),iG={kernelName:Js,backendName:"webgl",kernelFunc:sG},oG=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,lG=Ye({opSnippet:oG}),cG={kernelName:Yo,backendName:"webgl",kernelFunc:lG},uG=c_+`
|
|
return sin(x);
|
|
`,hG=Ye({opSnippet:uG}),dG={kernelName:Ys,backendName:"webgl",kernelFunc:hG},pG=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,fG=Ye({opSnippet:pG}),mG={kernelName:Zo,backendName:"webgl",kernelFunc:fG},AG=`
|
|
float epsilon = 1.1920928955078125e-7;
|
|
float threshold = log(epsilon) + 2.0;
|
|
|
|
bool too_large = x > -threshold;
|
|
bool too_small = x < threshold;
|
|
|
|
float result;
|
|
float exp_x = exp(x);
|
|
|
|
if (too_large){
|
|
result = x;
|
|
}
|
|
else if (too_small){
|
|
result = exp_x;
|
|
}
|
|
else{
|
|
result = log(exp_x + 1.0);
|
|
}
|
|
return result;
|
|
`,yG=Ye({opSnippet:AG}),gG={kernelName:Jo,backendName:"webgl",kernelFunc:yG},xG=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;v.assert(a.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,g)=>y*g),l=[[0,0]];l.push(...i);for(let y=1+s.length;y<a.shape.length;++y)l.push([0,0]);let u=[],c=X_({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),h=R.getReshaped(c.shape,s,o,!1),d=R.getPermuted(h.length,s.length,!1),p=R.getReshapedPermuted(c.shape,s,o,!1),f=_e({inputs:{x:c},backend:n,attrs:{shape:h}}),m=En({inputs:{x:f},backend:n,attrs:{perm:d}}),A=_e({inputs:{x:m},backend:n,attrs:{shape:p}});return u.push(c),u.push(f),u.push(m),u.forEach(y=>n.disposeIntermediateTensorInfo(y)),A},wG={kernelName:Dc,backendName:"webgl",kernelFunc:xG};function bG(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:u,strides:c,outputSize:h}=R.calculateShapes(s,a,o),d=!1,p=new Z_(u,l,a.shape.length,s.shape.length,c,[h,1],d),f=n.runWebGLProgram(p,[s,a,i],s.dtype),m=_e({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),m}var _G={kernelName:cd,backendName:"webgl",kernelFunc:bG};function vG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=v.parseAxisParam(i,a.shape)[0],l=R.prepareSplitSize(a,s,o),u=a.shape.length,c=new Array(u).fill(0),h=a.shape.slice();return l.map(d=>{let p=[...h];p[o]=d;let f=ku({inputs:{x:a},backend:n,attrs:{begin:c,size:p}});return c[o]+=d,f})}var kG={kernelName:Qo,backendName:"webgl",kernelFunc:vG},IG="return sqrt(x);",SG=Ye({opSnippet:IG}),NG={kernelName:Qs,backendName:"webgl",kernelFunc:SG},TG="return x * x;",EG=Ye({opSnippet:TG}),CG={kernelName:Oc,backendName:"webgl",kernelFunc:EG},Y_="return (a - b) * (a - b);",RG=an({opSnippet:Y_,packedOpSnippet:Y_}),MG={kernelName:ni,backendName:"webgl",kernelFunc:RG};function FG({inputs:e,attrs:t,backend:n}){let{x:r}=e,a=kr+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,s=new Ga(r.shape,a);return n.runWebGLProgram(s,[r],r.dtype)}var $G={kernelName:Fa,backendName:"webgl",kernelFunc:FG},DG=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,a=ut(n.length),s=ut(n.length),i="";if(r===1)i="coords * strides + begin";else{let o=0;i=n.map((l,u)=>(o++,n.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=`
|
|
${a} begin = ${a}(${e});
|
|
${a} strides = ${a}(${t});
|
|
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}};function OG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:h,shrinkAxisMask:d}=r,{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=dn.sliceInfo(a.shape,s,i,o,l,u,c,h,d),w=_e({inputs:{x:a},backend:n,attrs:{shape:y}}),b;if(p){let x=ku({inputs:{x:w},backend:n,attrs:{begin:f,size:A}});b=_e({inputs:{x},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(x)}else if(g.some(x=>x===0))b=n.makeTensorInfo(g,a.dtype,[]);else if(n.shouldExecuteOnCPU([w])){let x=n.texData.get(w.dataId).values,S=Ue(w.shape,w.dtype,x),T=OP(g,S,m,f);b=n.makeTensorInfo(g,w.dtype,T.values)}else{let x=new DG(f,m,g);b=n.runWebGLProgram(x,[w],w.dtype)}let _=_e({inputs:{x:b},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(b),_}var zG={kernelName:el,backendName:"webgl",kernelFunc:OG},PG="return tan(x);",LG=Ye({opSnippet:PG}),WG={kernelName:tl,backendName:"webgl",kernelFunc:LG},BG=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,VG=Ye({opSnippet:BG}),UG={kernelName:ai,backendName:"webgl",kernelFunc:VG},HG=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[s]*t[s];this.outputShape=n,this.rank=n.length;let r=ut(this.rank),a=jG(e);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function jG(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let a=0;a<e.length;a++)r.push(`imod(${n[a]}, ${e[a]})`);return r.join()}function J_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;if(a.dtype==="string"){let o=n.readSync(a.dataId).map(c=>v.decodeString(c)),l=Ue(a.shape,a.dtype,o),u=PP(l,s);return n.makeTensorInfo(u.shape,u.dtype,u.values)}let i=new HG(a.shape,s);return n.runWebGLProgram(i,[a],a.dtype)}var GG={kernelName:Ma,backendName:"webgl",kernelFunc:J_};function qG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r,o=n.readSync(a.dataId),[l,u]=LP(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var XG={kernelName:nl,backendName:"webgl",kernelFunc:qG},KG=class{constructor(e,t,n,r,a,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=n==="nearest"?1:2,o;switch(r){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=`
|
|
float mapCoord(float outCoord, float len) {
|
|
float inCoord = outCoord;
|
|
if(${o} == 2) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
if (inCoord < sz2) {
|
|
inCoord = sz2 * float(int(float(-inCoord / sz2))) +
|
|
inCoord;
|
|
}
|
|
inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
inCoord -= sz2 * float(int(float(inCoord / sz2)));
|
|
if (inCoord >= len) {
|
|
inCoord = sz2 - inCoord - 1.0;
|
|
}
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 3) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord -= len * float(int(float(inCoord / sz)));
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 4) {
|
|
return clamp(outCoord, 0.0, len - 1.0);
|
|
} else {
|
|
return outCoord;
|
|
}
|
|
}
|
|
|
|
float readWithFillValue(int batch, int coordY, int coordX,
|
|
int channel) {
|
|
float outputValue;
|
|
if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {
|
|
outputValue = getImage(batch, coordY, coordX, channel);
|
|
} else {
|
|
outputValue = float(${a});
|
|
}
|
|
return outputValue;
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
float outputValue;
|
|
int batch = coords[0];
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
int channel = coords[3];
|
|
float xf = float(x);
|
|
float yf = float(y);
|
|
float a1 = getTransforms(batch, 0);
|
|
float a2 = getTransforms(batch, 1);
|
|
float a3 = getTransforms(batch, 2);
|
|
float b1 = getTransforms(batch, 3);
|
|
float b2 = getTransforms(batch, 4);
|
|
float b3 = getTransforms(batch, 5);
|
|
float c1 = getTransforms(batch, 6);
|
|
float c2 = getTransforms(batch, 7);
|
|
float projection = c1 * xf + c2 * yf + 1.0;
|
|
if (projection == 0.0) {
|
|
outputValue = float(${a});
|
|
} else {
|
|
float inX = (a1 * xf + a2 * yf + a3) / projection;
|
|
float inY = (b1 * xf + b2 * yf + b3) / projection;
|
|
float mapX = mapCoord(inX, float(${t}));
|
|
float mapY = mapCoord(inY, float(${e}));
|
|
|
|
if (${i} == 1) {
|
|
int coordY = int(round(mapY));
|
|
int coordX = int(round(mapX));
|
|
outputValue = readWithFillValue(batch, coordY, coordX,
|
|
channel);
|
|
} else {
|
|
float yFloor = floor(mapY);
|
|
float xFloor = floor(mapX);
|
|
float yCeil = yFloor + 1.0;
|
|
float xCeil = xFloor + 1.0;
|
|
float valueYFloor = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yFloor), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yFloor), int(xCeil), channel);
|
|
float valueYCeil = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yCeil), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yCeil), int(xCeil), channel);
|
|
outputValue = (yCeil - mapY) * valueYFloor +
|
|
(mapY - yFloor) * valueYCeil;
|
|
}
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}};function ZG(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=r,[c,h,d,p]=a.shape,[f,m]=u!=null?u:[h,d],A=[c,f,m,p],y=new KG(h,d,i,o,l,A);return n.runWebGLProgram(y,[a,s],"float32")}var YG={kernelName:ud,backendName:"webgl",kernelFunc:ZG};function JG(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;Fl(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=r.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=WP(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([u.length],"int32",u)]}var QG={kernelName:hd,backendName:"webgl",kernelFunc:JG};function eq(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a,o=i.shape.length,l=a.shape[s],u=new Array(o-1),c=0;for(let m=0;m<o;m++)m!==s&&(u[c++]=i.shape[m]);let h=[],d=new Array(o).fill(0),p=i.shape.slice();p[s]=1;let f=new Array(l);for(let m=0;m<f.length;m++){d[s]=m;let A=ku({inputs:{x:i},backend:n,attrs:{begin:d,size:p}}),y=_e({inputs:{x:A},backend:n,attrs:{shape:u}});f[m]=y,h.push(A)}return h.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var tq={kernelName:rl,backendName:"webgl",kernelFunc:eq},nq=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,a=e.inSize,s=e.numSegments,i=s*Math.ceil(a/n);this.outputShape=[r,i];let o="0.0",l="sumValue",u=Math.floor(n/4)*4,c=n%4,h=`
|
|
sumValue += dot(values, segFilter);
|
|
`,d="";a%n>0&&(d=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return initializationValue;
|
|
}
|
|
`);let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${o};
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${d}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
${p}
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
${s})) * float(${n}));
|
|
int currentSeg = int(mod(float(outIdx), float(${s})));
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${c===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
int inIdxSeg = int(getSegmentIdAtIndex(inIdx));
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
} else if (${c===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
} else if (${c===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function rq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r,o=a.shape.length,l=[],u=0,c=R.getAxesPermutation([u],o),h=a;c!=null&&(h=En({inputs:{x:a},backend:n,attrs:{perm:c}}),l.push(h),u=R.getInnerMostAxes(1,o)[0]);let d=R.segment_util.computeOutShape(h.shape,u,i),p=v.sizeFromShape([h.shape[u]]),f=_e({inputs:{x:h},backend:n,attrs:{shape:[-1,p]}});l.push(f);let m=yd(a.dtype),A=(b,_,x,S,T)=>{let E=b.shape[0],F=b.shape[1],P=R.segment_util.segOpComputeOptimalWindowSize(F,T),W={windowSize:P,inSize:F,batchSize:E,numSegments:T},V=new nq(W,_),U=n.compileAndRun(V,[b,x],S);if(l.push(U),U.shape[1]===T)return U;let H=K_({backend:n,attrs:{start:0,stop:T,step:1,dtype:"float32"}}),X=J_({inputs:{x:H},backend:n,attrs:{reps:[F/P]}});return l.push(H),l.push(X),A(U,_,X,S,T)},y=A(f,"unsortedSegmentSum",s,m,i),g=_e({inputs:{x:y},backend:n,attrs:{shape:d}}),w=g;if(c!=null){l.push(g);let b=R.getUndoAxesPermutation(c);w=En({inputs:{x:w},backend:n,attrs:{perm:b}})}return l.forEach(b=>n.disposeIntermediateTensorInfo(b)),w}var aq={kernelName:zc,backendName:"webgl",kernelFunc:rq},sq=[XU,YU,OL,PL,BL,jL,GL,KL,YL,QL,rW,sW,lW,hW,gW,fW,bW,IW,vW,EW,RW,FW,zW,jW,GW,JW,eB,aB,oB,yL,hB,bB,vB,mB,NB,EB,IB,MB,DB,PB,WB,VB,HB,YB,QB,qB,nV,sV,cV,pV,yV,wV,bV,_V,kV,SV,TV,CV,MV,OV,WV,VV,jV,qV,YV,tU,sU,AL,oU,uB,uU,pU,AU,xL,wU,kU,SU,FU,CU,zU,WU,jU,QU,oj,sj,hj,pj,mj,rj,yj,xj,vj,Nj,Rj,Lj,kL,Bj,jj,qj,Zj,XW,Qj,tH,rH,iH,uH,bL,dH,pH,KW,Dj,AH,kH,wH,SL,TH,RH,$H,zH,BH,UH,GH,KH,YH,eG,rG,iG,cG,dG,mG,VW,zj,gG,wG,_G,kG,NG,CG,MG,$G,zG,Oj,FL,WG,UG,GG,XG,YG,$L,QG,tq,aq,eH];for(let e of sq)ci(e);var Vn;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(Vn||(Vn={}));var Su;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu"})(Su||(Su={}));var Q_;function iq(e){Q_=e.wasm.cwrap(ii,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function oq(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:h}=r,d=n.dataIdMap.get(a.dataId).id,p=n.dataIdMap.get(s.dataId).id,f=0;if(i!=null){let T=n.dataIdMap.get(i.dataId);if(T.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${T.shape.length}.`);f=T.id}let m=o==null?0:n.dataIdMap.get(o.dataId).id,A=Su[c];if(A==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?a.shape[2]:a.shape[1],g=u?s.shape[1]:s.shape[2],w=a.shape[0],b=n.makeOutput([w,y,g],a.dtype),_=n.dataIdMap.get(b.dataId).id,x=new Uint8Array(new Int32Array(a.shape).buffer),S=new Uint8Array(new Int32Array(s.shape).buffer);return Q_(d,x,a.shape.length,p,S,s.shape.length,l,u,A,f,m,h||0,_),b}var lq={kernelName:ii,backendName:"wasm",setupFunc:iq,kernelFunc:oq};function Cn(e){let t;function n(a){t=a.wasm.cwrap(e,null,["number","number"])}function r(a){let{backend:s,inputs:{x:i}}=a,o=s.dataIdMap.get(i.dataId).id,l=s.makeOutput(i.shape,i.dtype),u=s.dataIdMap.get(l.dataId).id;return v.sizeFromShape(l.shape)===0||t(o,u),l}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var cq=Cn(io);function yn(e,t,n){let r;function a(i){r=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:c}=l,h=o.dataIdMap.get(u.dataId).id,d=o.dataIdMap.get(c.dataId).id,p=n!=null?n:u.dtype,f=R.assertAndGetBroadcastShape(u.shape,c.shape),m=o.makeOutput(f,p);if(v.sizeFromShape(f)===0)return m;let A=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(c.shape).buffer),g=o.dataIdMap.get(m.dataId).id,w=()=>r(h,A,u.shape.length,d,y,c.shape.length,Vn[u.dtype],g);if(t&&u.dtype==="float32")return w(),m;let b=R.getBroadcastDims(u.shape,f),_=R.getBroadcastDims(c.shape,f),x=b.every((T,E)=>T===E),S=_.every((T,E)=>T===E);if(x&&S)return w(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${u.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:s}}var uq=!0,hq=yn(Ca,uq),e3;function dq(e){e3=e.wasm.cwrap(fs,null,["array","number","number","number"])}function pq(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(r.shape)===0)return r;let a=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(a).buffer),i=n.dataIdMap.get(r.dataId).id;return e3(s,a.length,Vn[r.dtype],i),r}var fq={kernelName:fs,backendName:"wasm",setupFunc:dq,kernelFunc:pq};function Rp(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),a=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(a),r}var mq={kernelName:Rs,backendName:"wasm",kernelFunc:Rp},t3;function Aq(e){t3=e.wasm.cwrap(si,null,["number","array","number","number","number","array","number"])}function Mp(e){let{inputs:t,backend:n,attrs:r}=e,[a,s]=gq(t.x.shape,r.perm),i=!0;for(let f=0;f<s.length;f++)s[f]!==f&&(i=!1);let o=yq(t.x.shape,r.perm),l={dataId:t.x.dataId,shape:a,dtype:t.x.dtype};if(i){let f=Rp({inputs:t,backend:n});return f.shape=o,f}let u=n.makeOutput(o,l.dtype),c=n.dataIdMap.get(l.dataId).id,h=n.dataIdMap.get(u.dataId).id,d=new Uint8Array(new Int32Array(s).buffer),p=new Uint8Array(new Int32Array(l.shape).buffer);return t3(c,p,l.shape.length,Vn[l.dtype],h,d,s.length),u}function yq(e,t){let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];return n}function gq(e,t){let n=[],r=[];for(let a=0;a<e.length;++a)e[a]!==1&&n.push(e[a]),e[t[a]]!==1&&r.push(t[a]);for(let a=0;a<r.length;++a){let s=-1;for(let i=0;i<r.length;++i)r[i]>=a&&(s===-1||r[s]>r[i])&&(s=i);r[s]=a}return[n,r]}var xq={kernelName:si,backendName:"wasm",kernelFunc:Mp,setupFunc:Aq};function jl(e,t,n){let r=e.shape,a=e.shape.length,s=v.parseAxisParam(t,r),i=s,o=R.getAxesPermutation(i,a),l=null,u=!1;if(o!=null){let c=new Array(a);for(let d=0;d<c.length;d++)c[d]=r[o[d]];i=R.getInnerMostAxes(i.length,a),l=Mp({inputs:{x:e},attrs:{perm:o},backend:n});let h=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==h&&(u=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:u}}var n3;function wq(e){n3=e.wasm.cwrap(ms,null,["number","number","number","number","number"])}function bq(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=i,l=s,{transposed:u,axes:c,inputWasTransposed:h}=jl(s,a,t);if(h){let y=t.dataIdMap.get(u.dataId).id;y!==i&&(l=u,o=y)}let d=l.shape.slice(0,-1),p=t.makeOutput(d,"int32"),f=t.dataIdMap.get(p.dataId).id,m=v.sizeFromShape(p.shape),A=l.shape[c[0]];return n3(o,Vn[l.dtype],m,A,f),h&&t.disposeData(u.dataId),p}var _q={kernelName:ms,backendName:"wasm",kernelFunc:bq,setupFunc:wq},r3;function vq(e){r3=e.wasm.cwrap(As,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function kq(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,c=R.computePool2DInfo(a.shape,i,o,1,l,u),h=c.filterHeight,d=c.filterWidth,p=c.padInfo.top,f=c.padInfo.right,m=c.padInfo.bottom,A=c.padInfo.left,y=c.strideHeight,g=c.strideWidth,w=c.inChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);if(c.dilationWidth!==1||c.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${c.dilationHeight}, ${c.dilationWidth}].`);let b=r.makeOutput(c.outShape,"float32"),_=r.dataIdMap.get(b.dataId).id;return r3(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,w,_),b}var Iq={kernelName:As,backendName:"wasm",setupFunc:vq,kernelFunc:kq};function Ir(e){let{inputs:t,attrs:n}=e,{x:r}=t,{shape:a}=n,s=v.sizeFromShape(r.shape),i=v.inferFromImplicitShape(a,s);return v.assert(s===v.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:i,dtype:r.dtype}}var Sq={kernelName:Ho,backendName:"wasm",kernelFunc:Ir},a3;function Nq(e){a3=e.wasm.cwrap(ys,null,["number","array","number","number","array","number","number","number","number"])}function Tq(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=a.shape.length,u=s.shape.length,c=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[u-1]:s.shape[u-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[u-2]:s.shape[u-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=v.sizeFromShape(f),y=v.sizeFromShape(m),g=A===y||A===1||y===1;v.assert(l>=2&&u>=2&&g,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let w=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);v.assert(c===h,()=>`Error in matMul: inner shapes (${c}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let b=i?[A,c,d]:[A,d,c],_=o?[y,p,h]:[y,h,p],x=Ir({inputs:{x:a},backend:n,attrs:{shape:b}}),S=Ir({inputs:{x:s},backend:n,attrs:{shape:_}}),T=n.dataIdMap.get(x.dataId).id,E=n.dataIdMap.get(S.dataId).id,F=i?x.shape[2]:x.shape[1],P=o?S.shape[1]:S.shape[2],W=Math.max(A,y),V=n.makeOutput([W,F,P],x.dtype),U=n.dataIdMap.get(V.dataId).id,H=new Uint8Array(new Int32Array(x.shape).buffer),X=new Uint8Array(new Int32Array(S.shape).buffer);return a3(T,H,x.shape.length,E,X,S.shape.length,i,o,U),n.disposeData(x.dataId),n.disposeData(S.dataId),V.shape=w,V}var Eq={kernelName:ys,backendName:"wasm",setupFunc:Nq,kernelFunc:Tq};function Fp(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,a=r.makeOutput(t.shape,n),s=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(a).set(s),a}var Cq={kernelName:gs,backendName:"wasm",kernelFunc:Fp},Rq=Cn(xs),s3;function Mq(e){s3=e.wasm.cwrap(Ra,null,["number","number","number","number"])}function Fq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o=n.dataIdMap.get(a.dataId).id,l=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(l.dataId).id;return s3(o,s,i,u),l}var $q={kernelName:Ra,backendName:"wasm",setupFunc:Mq,kernelFunc:Fq};function i3(e){let{inputs:t,backend:n}=e,r=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],a=R.computeOutShape(t.map(p=>p.shape),r),s=t.filter(p=>v.sizeFromShape(p.shape)>0);if(s.length===1)return Rp({inputs:{x:s[0]},backend:n});let i=n.makeOutput(a,t[0].dtype);if(v.sizeFromShape(a)===0)return i;let o=s.map(p=>p.shape);if(R.assertParamsConsistent(o,r),s[0].dtype==="string"){let p=s.map(w=>{let b=v.sizeFromShape(w.shape.slice(r));return Ir({inputs:{x:w},backend:n,attrs:{shape:[-1,b]}})}),f=p.map(w=>({vals:n.readSync(w.dataId),shape:w.shape}));a=R.computeOutShape(p.map(w=>w.shape),1);let m=p[0].shape[0]===1,A=qm(f,a,t[0].dtype,m),y=R.computeOutShape(s.map(w=>w.shape),r);i.shape=y;let g=n.dataIdMap.get(i.dataId);return g.stringBytes=R.fromStringArrayToUint8(A),p.forEach(w=>n.disposeData(w.dataId)),i}let l=v.sizeFromShape(s[0].shape.slice(0,r)),u=0,c=s.map(p=>{let f=v.sizeFromShape(p.shape.slice(r));return u+=f,f}),h=s.map(p=>n.typedArrayFromHeap(p)),d=n.typedArrayFromHeap(i);for(let p=0;p<l;p++){let f=p*u;for(let m=0;m<h.length;m++){let A=c[m],y=p*A,g=h[m].subarray(y,y+A);d.set(g,f),f+=A}}return i}var Dq={kernelName:mo,backendName:"wasm",kernelFunc:i3},o3;function Oq(e){o3=e.wasm.cwrap(ws,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function zq(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:c,dimRoundingMode:h,dataFormat:d}=n,p=R.convertConv2DDataFormat(d),f=R.computeConv2DInfo(a.shape,s.shape,l,u,c,h,!1,p),m=f.filterHeight,A=f.filterWidth,y=f.padInfo.top,g=f.padInfo.right,w=f.padInfo.bottom,b=f.padInfo.left,_=f.dilationHeight,x=f.dilationWidth,S=f.strideHeight,T=f.strideWidth,E=f.inChannels,F=f.outChannels,P=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let W=r.makeOutput(f.outShape,"float32"),V=r.dataIdMap.get(W.dataId).id;return o3(i,a.shape[0],a.shape[1],a.shape[2],o,m,A,y,g,w,b,P,_,x,S,T,E,F,V),W}var Pq={kernelName:ws,backendName:"wasm",setupFunc:Oq,kernelFunc:zq},l3;function Lq(e){l3=e.wasm.cwrap(bs,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Wq(e){let{backend:t,inputs:n,attrs:r}=e,{dy:a,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,inputShape:c}=r,h=1,d=R.convertConv2DDataFormat(l),p=R.computeConv2DInfo(c,s.shape,i,h,o,u,!1,d),{batchSize:f,filterHeight:m,filterWidth:A,inChannels:y,inHeight:g,inWidth:w,outChannels:b,outHeight:_,outWidth:x,strideHeight:S,strideWidth:T}=p,E=m-1-p.padInfo.top,F=A-1-p.padInfo.left,P=p.dataFormat==="channelsLast",W=v.computeStrides(p.inShape),V=v.computeStrides(a.shape),[U,H,X]=v.computeStrides(s.shape),G=W[0],ee=P?W[1]:W[2],Y=P?W[2]:1,se=P?1:W[1],te=V[0],le=P?V[1]:V[2],Q=P?V[2]:1,pe=P?1:V[1],ce=t.makeOutput(p.inShape,"float32"),ye=t.dataIdMap.get(ce.dataId).id,me=t.dataIdMap.get(a.dataId).id,Ne=t.dataIdMap.get(s.dataId).id;return l3(me,Ne,f,m,A,g,w,y,_,x,b,S,T,E,F,U,H,X,G,ee,Y,se,te,le,Q,pe,ye),ce}var Bq={kernelName:bs,backendName:"wasm",setupFunc:Lq,kernelFunc:Wq},Vq=Cn(_s),SA;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(SA||(SA={}));var c3;function Uq(e){c3=e.wasm.cwrap(yo,null,["number","number","number","number","array","number","number","number","number","number"])}function jq(e){let{backend:t,inputs:n,attrs:r}=e,{method:a,extrapolationValue:s,cropSize:i}=r,{image:o,boxes:l,boxInd:u}=n,c=l.shape[0],[h,d]=i,p=[c,h,d,o.shape[3]],f=t.dataIdMap.get(o.dataId),m;o.dtype!=="float32"&&(m=Fp({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(m.dataId));let A=f.id,y=t.dataIdMap.get(l.dataId).id,g=t.dataIdMap.get(u.dataId).id,w=t.makeOutput(p,"float32"),b=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(o.shape).buffer);return c3(A,y,g,c,_,h,d,SA[a],s,b),m!=null&&t.disposeData(m.dataId),w}var Hq={kernelName:yo,backendName:"wasm",setupFunc:Uq,kernelFunc:jq},u3;function Gq(e){u3=e.wasm.cwrap(vs,null,["number","number","number","number","number","number"])}function qq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length;v.assert(a.dtype==="float32"||a.dtype==="int32",()=>`cumsum does not support ${a.dtype} tensors in the WASM backend`);let u=R.getAxesPermutation([s],l),c=a;u!==null&&(c=Mp({inputs:{x:a},attrs:{perm:u},backend:n}));let h=R.getInnerMostAxes(1,l)[0];R.assertAxesAreInnerMostDims("cumsum",[h],l);let d=n.makeOutput(c.shape,c.dtype),p=c.shape[h],f=n.dataIdMap.get(c.dataId).id,m=n.dataIdMap.get(d.dataId).id;u3(f,i?1:0,o?1:0,p,m,Vn[a.dtype]);let A=d;if(u!==null){let y=R.getUndoAxesPermutation(u);A=Mp({inputs:{x:d},attrs:{perm:y},backend:n}),n.disposeData(c.dataId),n.disposeData(d.dataId)}return A}var Xq={kernelName:vs,backendName:"wasm",setupFunc:Gq,kernelFunc:qq},h3;function Kq(e){h3=e.wasm.cwrap(go,null,["number","number","number","array","number","array","array","number","number"])}function Zq(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{blockSize:s,dataFormat:i}=r;v.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],u=i==="NHWC"?a.shape[2]:a.shape[3],c=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=u*s,p=c/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=t.makeOutput(f,"float32"),A=t.dataIdMap.get(a.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(a.shape)).buffer),g=new Uint8Array(new Int32Array(f).buffer),w=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer),b=t.dataIdMap.get(m.dataId).id;return h3(A,s,i==="NHWC"?1:0,y,a.shape.length-1,g,w,f.length,b),m}var Yq={kernelName:go,backendName:"wasm",setupFunc:Kq,kernelFunc:Zq},d3;function Jq(e){d3=e.wasm.cwrap(ks,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qq(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:c,dimRoundingMode:h}=n,d=u==null?[1,1]:u,p=R.computeConv2DInfo(a.shape,s.shape,l,d,c,h,!0),f=p.filterHeight,m=p.filterWidth,A=p.padInfo.top,y=p.padInfo.right,g=p.padInfo.bottom,w=p.padInfo.left,b=p.dilationHeight,_=p.dilationWidth,x=p.strideHeight,S=p.strideWidth,T=p.inChannels,E=p.outChannels,F=p.padInfo.type==="SAME"?1:0;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let P=r.makeOutput(p.outShape,"float32"),W=r.dataIdMap.get(P.dataId).id;return d3(i,a.shape[0],a.shape[1],a.shape[2],o,f,m,A,y,g,w,F,b,_,x,S,T,E,W),P}var eX={kernelName:ks,backendName:"wasm",setupFunc:Jq,kernelFunc:Qq},tX=!1,nX=yn(bo,tX,"bool"),rX=Cn(Ss);function NA(e){let{inputs:t,attrs:n,backend:r}=e,{input:a}=t,{dim:s}=n,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Ir({inputs:{x:a},backend:r,attrs:{shape:o}})}var aX={kernelName:_o,backendName:"wasm",kernelFunc:NA};function sX(e){let{attrs:{shape:t,value:n,dtype:r},backend:a}=e,s=a.makeOutput(t,r);return a.typedArrayFromHeap(s).fill(n),s}var iX={kernelName:Nc,backendName:"wasm",kernelFunc:sX},p3;function oX(e){p3=e.wasm.cwrap(ko,null,["number","number","number","number","number","number"])}function lX(e){let{inputs:t,backend:n}=e,{image:r}=t,a=n.makeOutput(r.shape,r.dtype),s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,[o,l,u,c]=r.shape;return p3(s,o,l,u,c,i),a}var cX={kernelName:ko,backendName:"wasm",kernelFunc:lX,setupFunc:oX},uX=Cn(Ns),hX=!1,dX=yn(Ts,hX),f3;function pX(e){f3=e.wasm.cwrap(Es,null,["number","number","number","number","number","number","number"])}function fX(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:a}=r,{x:s,mean:i,variance:o,offset:l,scale:u}=n,c=t.dataIdMap.get(s.dataId).id,h=t.dataIdMap.get(i.dataId).id,d=t.dataIdMap.get(o.dataId).id,p=l!=null?t.dataIdMap.get(l.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return m;let A=t.dataIdMap.get(m.dataId).id;return f3(c,h,d,p,f,a,A),m}var mX={kernelName:Es,backendName:"wasm",setupFunc:pX,kernelFunc:fX},m3;function AX(e){m3=e.wasm.cwrap(oi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function yX(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:c,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=R.computeConv2DInfo(a.shape,s.shape,l,c,u,d),A=Su[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,w=m.outChannels,b=0;if(i!=null){let Q=r.dataIdMap.get(i.dataId);if(Q.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Q.shape.length}.`);if(Q.shape[0]!==w)throw new Error(`FusedConv2D bias shape (${Q.shape}) does not match the number of output channels (${w})`);b=Q.id}let _=m.filterHeight,x=m.filterWidth,S=m.padInfo.top,T=m.padInfo.right,E=m.padInfo.bottom,F=m.padInfo.left,P=m.dilationHeight,W=m.dilationWidth,V=m.strideHeight,U=m.strideWidth,H=m.inChannels,X=m.padInfo.type==="SAME"?1:0,G=m.batchSize,ee=m.inHeight,Y=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let se=r.makeOutput(m.outShape,"float32"),te=r.dataIdMap.get(se.dataId).id,le=o==null?0:r.dataIdMap.get(o.dataId).id;return m3(y,G,ee,Y,g,_,x,b,S,T,E,F,X,P,W,V,U,H,w,A,le,f||0,te),se}var gX={kernelName:oi,backendName:"wasm",setupFunc:AX,kernelFunc:yX},A3;function xX(e){A3=e.wasm.cwrap(li,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wX(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:c,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=R.computeConv2DInfo(a.shape,s.shape,l,c,u,d,!0),A=Su[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,w=m.outChannels,b=0;if(i!=null){let Q=r.dataIdMap.get(i.dataId);if(Q.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Q.shape.length}.`);if(Q.shape[0]!==w)throw new Error(`FusedDepthwiseConv2D bias shape (${Q.shape}) does not match the number of output channels (${w})`);b=Q.id}let _=m.filterHeight,x=m.filterWidth,S=m.padInfo.top,T=m.padInfo.right,E=m.padInfo.bottom,F=m.padInfo.left,P=m.dilationHeight,W=m.dilationWidth,V=m.strideHeight,U=m.strideWidth,H=m.inChannels,X=m.padInfo.type==="SAME"?1:0,G=m.batchSize,ee=m.inHeight,Y=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let se=r.makeOutput(m.outShape,"float32"),te=r.dataIdMap.get(se.dataId).id,le=o==null?0:r.dataIdMap.get(o.dataId).id;return A3(y,G,ee,Y,g,_,x,b,S,T,E,F,X,P,W,V,U,H,w,A,le,f||0,te),se}var bX={kernelName:li,backendName:"wasm",setupFunc:xX,kernelFunc:wX},y3;function _X(e){y3=e.wasm.cwrap(So,null,["number","number","number","number","number","number","array","number"])}function vX(e){let{backend:t,inputs:n}=e,{params:r,indices:a}=n,[s,i,o,l]=Gf.prepareAndValidate(r,a),u=t.makeOutput(s,r.dtype);if(i===0)return u;let c=a.shape,h=c[c.length-1],d=t.dataIdMap.get(r.dataId).id,p=t.dataIdMap.get(a.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(u.dataId).id;return y3(d,Vn[r.dtype],p,i,h,o,f,m),u}var kX={kernelName:So,backendName:"wasm",setupFunc:_X,kernelFunc:vX},g3;function IX(e){g3=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function SX(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,indices:s}=n,{axis:i,batchDims:o}=r,l=v.parseAxisParam(i,a.shape)[0],u=R.segment_util.collectGatherOpShapeInfo(a,s,l,o),c=Ir({inputs:{x:a},attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),d=Ir({inputs:{x:s},attrs:{shape:[u.batchSize,h/u.batchSize]},backend:t}),p=[u.batchSize,u.outerSize,h/u.batchSize,u.sliceSize],f=t.makeOutput(p,a.dtype);if(v.sizeFromShape(a.shape)===0)return f;let m=c.shape.length-1,A=t.dataIdMap.get(c.dataId).id,y=t.dataIdMap.get(d.dataId).id,g=t.dataIdMap.get(f.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(c.shape)).buffer),b=new Uint8Array(new Int32Array(v.computeStrides(p)).buffer);return g3(A,Vn[a.dtype],w,m,y,u.batchSize,b,g),t.disposeData(c.dataId),t.disposeData(d.dataId),f.shape=u.outputShape,f}var NX={kernelName:Io,backendName:"wasm",setupFunc:IX,kernelFunc:SX},TX=!1,EX=yn(No,TX,"bool"),CX=!1,RX=yn(Cs,CX,"bool"),x3;function MX(e){x3=e.wasm.cwrap(Ms,null,["number","number","number"])}function FX(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,a=r.dataIdMap.get(t.dataId).id,s=r.makeOutput(t.shape,t.dtype);if(v.sizeFromShape(t.shape)!==0){let i=r.dataIdMap.get(s.dataId).id;x3(a,n,i)}return s}var $X={kernelName:Ms,backendName:"wasm",setupFunc:MX,kernelFunc:FX},DX=!1,OX=yn(Ro,DX,"bool"),zX=!1,PX=yn(Mo,zX,"bool"),LX=Cn(Fs),WX=!1,BX=yn($o,WX,"bool"),w3;function VX(e){w3=e.wasm.cwrap($s,null,["number, number, number"])}function UX(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:c,originalAxes:h,inputWasTransposed:d}=jl(i,a,t);if(d){let g=t.dataIdMap.get(u.dataId).id;l=u,o=g}let p=l.shape.length;R.assertAxesAreInnerMostDims("max",c,p);let[f,m]=R.computeOutAndReduceShapes(l.shape,c),A=v.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(v.sizeFromShape(l.shape)!==0){let g=t.dataIdMap.get(y.dataId).id;w3(o,A,g)}if(d&&t.disposeData(u.dataId),s){let g=R.expandShapeToKeepDim(y.shape,h);y.shape=g}return y}var jX={kernelName:$s,backendName:"wasm",setupFunc:VX,kernelFunc:UX},HX=!1,GX=yn(Ds,HX),b3;function qX(e){b3=e.wasm.cwrap(Os,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function XX(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,c=R.computePool2DInfo(a.shape,i,o,1,l,u),h=c.filterHeight,d=c.filterWidth,p=c.padInfo.top,f=c.padInfo.right,m=c.padInfo.bottom,A=c.padInfo.left,y=c.dilationHeight,g=c.dilationWidth,w=c.strideHeight,b=c.strideWidth,_=c.inChannels,x=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let S=r.makeOutput(c.outShape,"float32"),T=r.dataIdMap.get(S.dataId).id;return b3(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,w,b,_,x,T),S}var KX={kernelName:Os,backendName:"wasm",setupFunc:qX,kernelFunc:XX},_3;function ZX(e){_3=e.wasm.cwrap(zs,null,["number, number, number"])}function YX(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:c,axes:h,originalAxes:d,inputWasTransposed:p}=jl(i,a,t),f=h;if(p){let b=t.dataIdMap.get(c.dataId).id;b!==o&&(u=c,l=b,f=R.getInnerMostAxes(f.length,u.shape.length))}R.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,A]=R.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(A),g=u;u.dtype!=="float32"&&(g=Fp({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(g.dataId).id);let w=t.makeOutput(m,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(w.dataId).id;_3(l,y,b)}if(p&&t.disposeData(c.dataId),s){let b=R.expandShapeToKeepDim(w.shape,d);w.shape=b}return u.dtype!=="float32"&&t.disposeData(g.dataId),w}var JX={kernelName:zs,backendName:"wasm",setupFunc:ZX,kernelFunc:YX},v3;function QX(e){v3=e.wasm.cwrap(Ps,null,["number, number, number"])}function eK(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:c,axes:h,originalAxes:d,inputWasTransposed:p}=jl(i,a,t);if(p){let w=t.dataIdMap.get(c.dataId).id;w!==o&&(u=c,l=w)}let f=u.shape.length;R.assertAxesAreInnerMostDims("min",h,f);let[m,A]=R.computeOutAndReduceShapes(u.shape,h),y=v.sizeFromShape(A),g=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;v3(l,y,w)}if(p&&t.disposeData(c.dataId),s){let w=R.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var tK={kernelName:Ps,backendName:"wasm",setupFunc:QX,kernelFunc:eK},nK=!1,rK=yn(Ls,nK),aK=!0,sK=yn(Ws,aK),iK=Cn(Oo);function TA(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],a=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:a,pSelectedScores:s,pValidOutputs:i}}var k3;function oK(e){k3=e.wasm.cwrap(Po,"number",["number","number","number","number","number"])}function lK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i}=r,{boxes:o,scores:l}=n,u=t.dataIdMap.get(o.dataId).id,c=t.dataIdMap.get(l.dataId).id,h=k3(u,c,s,a,i),{pSelectedIndices:d,selectedSize:p,pSelectedScores:f,pValidOutputs:m}=TA(t,h);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([p],"int32",d)}var cK={kernelName:Po,backendName:"wasm",setupFunc:oK,kernelFunc:lK},I3;function uK(e){I3=e.wasm.cwrap(Lo,"number",["number","number","number","number","number","bool"])}function hK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=r,{boxes:l,scores:u}=n,c=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(u.dataId).id,d=I3(c,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=TA(t,d);t.wasm._free(m);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([],"int32",A);return[y,g]}var dK={kernelName:Lo,backendName:"wasm",setupFunc:uK,kernelFunc:hK},S3;function pK(e){S3=e.wasm.cwrap(Wo,"number",["number","number","number","number","number","number"])}function fK(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=r,{boxes:l,scores:u}=n,c=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(u.dataId).id,d=S3(c,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=TA(t,d);t.wasm._free(A);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([f],"float32",m);return[y,g]}var mK={kernelName:Wo,backendName:"wasm",setupFunc:pK,kernelFunc:fK},AK=!1,yK=yn(zo,AK,"bool"),N3;function gK(e){N3=e.wasm.cwrap(Bs,null,["number","number","number","number","number"])}function xK(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=n.makeOutput([...a.shape,s],"int32"),u=n.dataIdMap.get(l.dataId).id,c=n.dataIdMap.get(a.dataId).id;return N3(c,s,i,o,u),l}var wK={kernelName:Bs,backendName:"wasm",setupFunc:gK,kernelFunc:xK};function bK(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var _K={kernelName:Bo,backendName:"wasm",kernelFunc:bK};function vK(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return NA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{v.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(c=>{let h=NA({inputs:{input:c},backend:n,attrs:{dim:a}});return o.push(h),h}),u=i3({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(c=>n.disposeData(c.dataId)),u}var kK={kernelName:Vo,backendName:"wasm",kernelFunc:vK},T3;function IK(e){T3=e.wasm.cwrap(Vs,null,["number","array","number","number","array","array","number","number"])}function SK(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:a}}=e,s=r.map((f,m)=>f[0]+t.shape[m]+f[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),c=r.map(f=>f[0]),h=r.map(f=>f[1]),d=new Uint8Array(new Int32Array(c).buffer),p=new Uint8Array(new Int32Array(h).buffer);return T3(i,u,t.shape.length,Vn[t.dtype],d,p,a,l),o}var NK={kernelName:Vs,backendName:"wasm",kernelFunc:SK,setupFunc:IK},TK=!1,EK=yn(Us,TK),E3;function CK(e){E3=e.wasm.cwrap(js,null,["number","number","number"])}function RK(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,o=n.makeOutput(r.shape,"float32"),l=n.dataIdMap.get(o.dataId).id;return E3(s,i,l),o}var MK={kernelName:js,backendName:"wasm",setupFunc:CK,kernelFunc:RK},C3;function FK(e){C3=e.wasm.cwrap(Uo,null,["number","number","number","number"])}function $K(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:c,axes:h,originalAxes:d,inputWasTransposed:p}=jl(i,a,t),f=h;if(p){let w=t.dataIdMap.get(c.dataId).id;w!==o&&(u=c,l=w,f=R.getInnerMostAxes(f.length,u.shape.length))}R.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,A]=R.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(A),g=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;C3(l,y,Vn[g.dtype],w)}if(p&&t.disposeData(c.dataId),s){let w=R.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var DK={kernelName:Uo,backendName:"wasm",setupFunc:FK,kernelFunc:$K},OK=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=Zm(r,a,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},zK={kernelName:Fc,backendName:"wasm",kernelFunc:OK},PK=!0,LK=yn(Is,PK),WK=Cn(Hs),BK=Cn(qs),R3;function VK(e){R3=e.wasm.cwrap(Gs,null,["number","number","number","number","number","number","number","number","number","number"])}function UK(e){let{backend:t,inputs:n,attrs:r}=e,{images:a}=n,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,[c,h,d,p]=a.shape,f=[c,l,u,p],m=t.dataIdMap.get(a.dataId),A;m.dtype!=="float32"&&(A=Fp({backend:t,inputs:{x:a},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(A.dataId));let y=m.id,g=t.makeOutput(f,"float32");if(v.sizeFromShape(a.shape)===0)return g;let w=t.dataIdMap.get(g.dataId).id;return R3(y,c,h,d,p,l,u,s?1:0,i?1:0,w),A!=null&&t.disposeData(A.dataId),g}var jK={kernelName:Gs,backendName:"wasm",setupFunc:VK,kernelFunc:UK},M3;function HK(e){M3=e.wasm.cwrap(Xs,null,["number","array","number","array","number","number"])}function GK(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=v.parseAxisParam(s,a.shape);if(a.shape.length===0)return Rp({inputs:{x:a},backend:n});let o=n.makeOutput(a.shape,a.dtype),l=n.dataIdMap.get(a.dataId).id,u=n.dataIdMap.get(o.dataId).id,c=new Uint8Array(new Int32Array(i).buffer),h=new Uint8Array(new Int32Array(a.shape).buffer);M3(l,c,i.length,h,a.shape.length,u);let d=Ir({inputs:{x:o},attrs:{shape:a.shape},backend:n});return n.disposeData(o.dataId),d}var qK={kernelName:Xs,backendName:"wasm",kernelFunc:GK,setupFunc:HK},F3;function XK(e){F3=e.wasm.cwrap(sl,null,["number","number","number","number","number","number","number","number","array","number","number"])}function KK(e){let{inputs:t,backend:n,attrs:r}=e,{image:a}=t,{radians:s,fillValue:i,center:o}=r,l=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(a.dataId).id,c=n.dataIdMap.get(l.dataId).id,[h,d,p,f]=a.shape,[m,A]=R.getImageCenter(o,d,p),y=i===0,g=255,w=typeof i=="number"?[i,i,i,y?0:g]:[...i,g],b=new Uint8Array(new Int32Array(w).buffer);return F3(u,h,d,p,f,s,m,A,b,w.length,c),l}var ZK={kernelName:sl,backendName:"wasm",kernelFunc:KK,setupFunc:XK},YK=Cn(Ks),JK=Cn(Zs),$3;function QK(e){$3=e.wasm.cwrap(Go,null,["number","number","number","number","number","number","array","number","number"])}function eZ(e){let{backend:t,inputs:n,attrs:r}=e,{indices:a,updates:s}=n,{shape:i}=r,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:c,strides:h,outputSize:d}=qf.calculateShapes(s,a,i),p=t.dataIdMap.get(a.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(h).buffer),A=t.dataIdMap.get(o.dataId).id;return $3(p,f,Vn[s.dtype],l,u,c,m,d,A),o}var tZ={kernelName:Go,backendName:"wasm",setupFunc:QK,kernelFunc:eZ},D3;function nZ(e){D3=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function rZ(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(a.dataId).id,l=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(a.shape,a.dtype),c=n.dataIdMap.get(u.dataId).id,h=r.shape.length,d=a.shape.length,p=h===0||h>1||d===1?1:v.sizeFromShape(a.shape.slice(1));return D3(i,o,l,p,c),u}var aZ={kernelName:qo,backendName:"wasm",kernelFunc:rZ,setupFunc:nZ},O3;function sZ(e){O3=e.wasm.cwrap(Js,null,["number","number"])}function iZ(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(a.dataId).id;return v.sizeFromShape(a.shape)===0||O3(r,s),a}var oZ={kernelName:"Sigmoid",backendName:"wasm",setupFunc:sZ,kernelFunc:iZ},lZ=Cn(Ys);function $p(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:a}=e,[s,i]=dn.parseSliceParams(t,n,r),o=dn.isSliceContinous(t.shape,s,i),l=a.readSync(t.dataId),u=a.makeOutput(i,t.dtype),c=v.computeStrides(t.shape),h=a.dataIdMap.get(u.dataId);if(o){let f=dn.computeFlatOffset(s,c);return t.dtype==="string"?h.stringBytes=l.slice(f,f+v.sizeFromShape(i)):a.typedArrayFromHeap(u).set(l.subarray(f,f+v.sizeFromShape(i))),u}if(t.dtype==="string"){let f=cp(l,s,i,t.shape,t.dtype);return h.stringBytes=f,u}let d=a.typedArrayFromHeap(u),p=t.shape.length;if(p===2)cZ(l,c[0],d,s,i);else if(p===3)uZ(l,c[0],c[1],d,s,i);else if(p===4)hZ(l,c[0],c[1],c[2],d,s,i);else{let f=cp(l,s,i,t.shape,t.dtype);d.set(f)}return u}function cZ(e,t,n,r,a){let s=0,i=r[0],o=r[1],l=i+a[0];for(let u=i;u<l;u++){let c=u*t+o;n.set(e.subarray(c,c+a[1]),s),s+=a[1]}}function uZ(e,t,n,r,a,s){let i=0,o=a[0],l=a[1],u=a[2],c=o+s[0],h=l+s[1];for(let d=o;d<c;d++)for(let p=l;p<h;p++){let f=d*t+p*n+u;r.set(e.subarray(f,f+s[2]),i),i+=s[2]}}function hZ(e,t,n,r,a,s,i){let o=0,l=s[0],u=s[1],c=s[2],h=l+i[0],d=u+i[1],p=c+i[2],f=s[3];for(let m=l;m<h;m++)for(let A=u;A<d;A++)for(let y=c;y<p;y++){let g=m*t+A*n+y*r+f;a.set(e.subarray(g,g+i[3]),o),o+=i[3]}}var dZ={kernelName:Ko,backendName:"wasm",kernelFunc:$p},z3;function pZ(e){z3=e.wasm.cwrap(ti,null,["number","number","number","number"])}function fZ(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,a=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[r],l=v.sizeFromShape(n.shape)/o;return v.sizeFromShape(s.shape)===0||z3(a,i,o,l),s}var mZ={kernelName:ti,backendName:"wasm",setupFunc:pZ,kernelFunc:fZ};function AZ(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,a.shape)[0],l=R.prepareSplitSize(a,s,o),u=new Array(a.shape.length).fill(0),c=a.shape.slice();return l.map(h=>{let d=[...c];d[o]=h;let p=$p({inputs:{x:a},attrs:{begin:u,size:d},backend:r});return u[o]+=h,p})}var yZ={kernelName:Qo,backendName:"wasm",kernelFunc:AZ},gZ=Cn(Qs),xZ=Cn(Oc),wZ=!0,bZ=yn(ni,wZ),P3;function _Z(e){P3=e.wasm.cwrap(Fa,null,["number","number","number"])}function vZ(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return P3(i,a,l),o}var kZ={kernelName:Fa,backendName:"wasm",setupFunc:_Z,kernelFunc:vZ},L3;function IZ(e){L3=e.wasm.cwrap(el,null,["number","array","number","array","array","array","array","array","number","number"])}function SZ(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{begin:s,end:i,strides:o}=r;o==null&&(o=new Array(s.length));let{beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:h,shrinkAxisMask:d}=r,p=R.slice_util.maskToAxes(c);if(p.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(c!==0&&h!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(c!==0&&d!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=a.shape.length-s.length,m=R.slice_util.maskToAxes(h),A=a.shape.slice();m.forEach(F=>{s[F]=0,i[F]=1,A.splice(F,0,1)});let y=Ir({inputs:{x:a},attrs:{shape:A},backend:t}),{begin:g,end:w,strides:b}=R.slice_util.getNormalizedAxes(y.shape,p,f,s,i,o,l,u,c);s=g,i=w,o=b;let _=R.slice_util.maskToAxes(d);_.forEach(F=>{i[F]=s[F]+1,o[F]=1});let x=R.slice_util.computeOutShape(s,i,o),S=x.filter((F,P)=>_.indexOf(P)===-1);if(o.every(F=>F===1)){let F=$p({inputs:{x:y},attrs:{begin:s,size:x},backend:t});t.disposeData(y.dataId);let P=Ir({inputs:{x:F},attrs:{shape:S},backend:t});return t.disposeData(F.dataId),P}let T=t.makeOutput(S,"float32");if(!S.some(F=>F===0)){let F=t.dataIdMap.get(y.dataId).id,P=new Uint8Array(new Int32Array(v.computeStrides(y.shape)).buffer),W=new Uint8Array(new Int32Array(s).buffer),V=new Uint8Array(new Int32Array(i).buffer),U=new Uint8Array(new Int32Array(o).buffer),H=new Uint8Array(new Int32Array(S).buffer),X=new Uint8Array(new Int32Array(v.computeStrides(S)).buffer),G=t.dataIdMap.get(T.dataId).id;L3(F,P,y.shape.length,W,V,U,H,X,S.length,G)}t.disposeData(y.dataId);let E=Ir({inputs:{x:T},attrs:{shape:S},backend:t});return t.disposeData(T.dataId),E}var NZ={kernelName:el,backendName:"wasm",setupFunc:IZ,kernelFunc:SZ},TZ=!0,EZ=yn(ri,TZ),W3;function CZ(e){W3=e.wasm.cwrap(ei,null,["number, number, number"])}function RZ(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:c,axes:h,originalAxes:d,inputWasTransposed:p}=jl(i,a,t),f=h;if(p){let w=t.dataIdMap.get(c.dataId).id;w!==o&&(u=c,l=w,f=R.getInnerMostAxes(f.length,u.shape.length))}R.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,A]=R.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(A),g=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let w=t.dataIdMap.get(g.dataId).id;W3(l,y,w)}if(p&&t.disposeData(c.dataId),s){let w=R.expandShapeToKeepDim(g.shape,d);g.shape=w}return g}var MZ={kernelName:ei,backendName:"wasm",setupFunc:CZ,kernelFunc:RZ},FZ=Cn(ai),B3;function $Z(e){B3=e.wasm.cwrap(Ma,null,["number","array","number","array","number","number"])}function DZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,s=n.dataIdMap.get(a.dataId).id,{reps:i}=r,o=new Array(a.shape.length);for(let d=0;d<o.length;d++)o[d]=a.shape[d]*i[d];let l=new Uint8Array(new Int32Array(a.shape).buffer),u=new Uint8Array(new Int32Array(o).buffer),c=n.makeOutput(o,a.dtype),h=n.dataIdMap.get(c.dataId).id;return B3(s,l,a.shape.length,u,o.length,Vn[c.dtype],h),c}var OZ={kernelName:Ma,backendName:"wasm",setupFunc:$Z,kernelFunc:DZ},V3;function zZ(e){V3=e.wasm.cwrap(nl,null,["number","array","number","number","number","bool","number","number"])}var PZ=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{k:a,sorted:s}=n,i=t.dataIdMap.get(r.dataId).id,o=new Uint8Array(new Int32Array(r.shape).buffer),l=r.shape.slice();l[l.length-1]=a;let u=t.makeOutput(l,r.dtype),c=t.dataIdMap.get(u.dataId).id,h=t.makeOutput(l,"int32"),d=t.dataIdMap.get(h.dataId).id;return V3(i,o,r.shape.length,Vn[r.dtype],a,s,c,d),[u,h]},LZ={kernelName:nl,backendName:"wasm",setupFunc:zZ,kernelFunc:PZ};function WZ(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape[s],o=a.shape.length,l=new Array(o-1),u=0;for(let p=0;p<o;p++)p!==s&&(l[u++]=a.shape[p]);let c=new Array(i),h=new Array(o).fill(0),d=a.shape.slice();d[s]=1;for(let p=0;p<c.length;p++)h[s]=p,c[p]=$p({inputs:{x:a},attrs:{begin:h,size:d},backend:n});return c.map(({dataId:p,dtype:f})=>({dataId:p,dtype:f,shape:l}))}var BZ={kernelName:rl,backendName:"wasm",kernelFunc:WZ};function VZ(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var UZ={kernelName:al,backendName:"wasm",kernelFunc:VZ},jZ=[cq,hq,fq,_q,Iq,Eq,Cq,Rq,$q,Dq,Pq,Bq,Vq,Hq,Xq,Yq,eX,nX,rX,aX,iX,cX,uX,dX,lq,mX,gX,bX,kX,NX,EX,RX,mq,$X,OX,PX,LX,BX,jX,GX,KX,JX,tK,rK,sK,iK,cK,dK,mK,yK,wK,_K,kK,NK,EK,MK,DK,zK,LK,WK,BK,Sq,jK,qK,ZK,JK,YK,tZ,aZ,oZ,lZ,dZ,mZ,yZ,gZ,xZ,bZ,kZ,NZ,EZ,MZ,FZ,OZ,LZ,xq,BZ,UZ];for(let e of jZ)ci(e);var EA=J();EA.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));EA.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(EA.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var U3=ro(Z8()),HZ='var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}',GZ=ro(Y8()),j3=class extends gc{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new Rh(this,Pr())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,n,r,a){let s=this.dataIdNextNumber++;if(r==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:n,dtype:r,memoryOffset:null,refCount:a});return}let i=v.sizeFromShape(n),o=i*v.bytesPerElement(r),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:r,refCount:a}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:a}=this.dataIdMap.get(e);if(n==="string")return a;let s=this.wasm.HEAPU8.slice(t,t+v.sizeFromShape(r)*v.bytesPerElement(n));return qZ(s.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{let a=this.dataIdNextNumber++;r={id:a},this.dataIdMap.set(r,{id:a,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,s,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:a}=this.dataIdMap.get(n),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,a,s);case"int32":return new Int32Array(r,a,s);case"bool":return new Uint8Array(r,a,s);default:throw new Error(`Unknown dtype ${t}`)}}};function XZ(e){return(t,n)=>(v.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(a=>{WebAssembly.instantiate(a,t).then(s=>{n(s.instance)})})}),{})}function H3(e,t,n){if(Dp!=null)return Dp;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),Nu!=null&&Nu[r]!=null?Nu[r]:n+r}async function KZ(){let[e,t]=await Promise.all([J().getAsync("WASM_HAS_SIMD_SUPPORT"),J().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let a={};a.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=HZ,c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return o.endsWith(".wasm")?H3(e,t,Tu!=null?Tu:l):l+o},CA&&(a.instantiateWasm=XZ(H3(e,t,Tu!=null?Tu:"")));let s=!1;a.onAbort=()=>{s||Eu||(Eu=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))};let i;t&&e&&Dp==null?(a.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+U3.default.toString()],{type:"text/javascript"}),i=(0,U3.default)(a)):i=(0,GZ.default)(a),i.then(o=>{s=!0,Eu=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},n({wasm:o})})})}function qZ(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var ZZ=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Dp=null,Tu=null,Nu={},Eu=!1,CA=!1;function YZ(e,t=!1){if(Qf("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Eu)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Dp=e,CA=t}function JZ(e,t=!1){if(Eu)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Tu=e;else{Nu=e;let n=ZZ.filter(r=>Nu[r]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}CA=t}var G3="3.3.0",QZ=2;ml("wasm",async()=>{let{wasm:e}=await KZ();return new j3(e)},QZ);Z().prototype.abs=function(){return this.throwIfDisposed(),Lt(this)};Z().prototype.acos=function(){return this.throwIfDisposed(),tm(this)};Z().prototype.acosh=function(){return this.throwIfDisposed(),nm(this)};Z().prototype.add=function(e){return this.throwIfDisposed(),ie(this,e)};Z().prototype.all=function(e,t){return this.throwIfDisposed(),kd(this,e,t)};Z().prototype.any=function(e,t){return this.throwIfDisposed(),Kc(this,e,t)};Z().prototype.argMax=function(e){return this.throwIfDisposed(),fi(this,e)};Z().prototype.argMin=function(e){return this.throwIfDisposed(),rm(this,e)};Z().prototype.asScalar=function(){return this.throwIfDisposed(),M(this.size===1,()=>"The array must have only 1 element."),j(this,[])};Z().prototype.asType=function(e){return this.throwIfDisposed(),we(this,e)};Z().prototype.as1D=function(){return this.throwIfDisposed(),j(this,[this.size])};Z().prototype.as2D=function(e,t){return this.throwIfDisposed(),j(this,[e,t])};Z().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),j(this,[e,t,n])};Z().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),j(this,[e,t,n,r])};Z().prototype.as5D=function(e,t,n,r,a){return this.throwIfDisposed(),j(this,[e,t,n,r,a])};Z().prototype.asin=function(){return this.throwIfDisposed(),am(this)};Z().prototype.asinh=function(){return this.throwIfDisposed(),sm(this)};Z().prototype.atan=function(){return this.throwIfDisposed(),im(this)};Z().prototype.atan2=function(e){return this.throwIfDisposed(),om(this,e)};Z().prototype.atanh=function(){return this.throwIfDisposed(),lm(this)};Z().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),Yc(this,e,t,n,r)};Z().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Jc(this,e,t)};Z().prototype.batchNorm=function(e,t,n,r,a){return this.throwIfDisposed(),Ai(this,e,t,n,r,a)};Z().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Qc(this,e)};Z().prototype.cast=function(e){return this.throwIfDisposed(),we(this,e)};Z().prototype.ceil=function(){return this.throwIfDisposed(),dm(this)};Z().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),In(this,e,t)};Z().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof He&&(e=[e]),it([this,...e],t)};Z().prototype.conv1d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Sd(this,e,t,n,r,a,s)};Z().prototype.conv2dTranspose=function(e,t,n,r,a){return this.throwIfDisposed(),Nd(this,e,t,n,r,a)};Z().prototype.conv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),la(this,e,t,n,r,a,s)};Z().prototype.cos=function(){return this.throwIfDisposed(),eu(this)};Z().prototype.cosh=function(){return this.throwIfDisposed(),Td(this)};Z().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),Ed(this,e,t,n)};Z().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),mm(this,e,t)};Z().prototype.depthwiseConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),xl(this,e,t,n,r,a,s)};Z().prototype.dilation2d=function(e,t,n,r,a){return this.throwIfDisposed(),Am(this,e,t,n,r,a)};Z().prototype.divNoNan=function(e){return this.throwIfDisposed(),ym(this,e)};Z().prototype.div=function(e){return this.throwIfDisposed(),ge(this,e)};Z().prototype.dot=function(e){return this.throwIfDisposed(),kx(this,e)};Z().prototype.elu=function(){return this.throwIfDisposed(),wl(this)};Z().prototype.equal=function(e){return this.throwIfDisposed(),Wa(this,e)};Z().prototype.erf=function(){return this.throwIfDisposed(),gm(this)};Z().prototype.exp=function(){return this.throwIfDisposed(),Yn(this)};Z().prototype.expandDims=function(e){return this.throwIfDisposed(),tn(this,e)};Z().prototype.expm1=function(){return this.throwIfDisposed(),xm(this)};Z().prototype.fft=function(){return this.throwIfDisposed(),uu(this)};Z().prototype.flatten=function(){return this.throwIfDisposed(),j(this,[this.size])};Z().prototype.floor=function(){return this.throwIfDisposed(),bl(this)};Z().prototype.floorDiv=function(e){return this.throwIfDisposed(),vd(this,e)};Z().prototype.gather=function(e,t){return this.throwIfDisposed(),yi(this,e,t)};Z().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Va(this,e)};Z().prototype.greater=function(e){return this.throwIfDisposed(),lr(this,e)};Z().prototype.ifft=function(){return this.throwIfDisposed(),Sl(this)};Z().prototype.irfft=function(){return this.throwIfDisposed(),Gd(this)};Z().prototype.isFinite=function(){return this.throwIfDisposed(),Ix(this)};Z().prototype.isInf=function(){return this.throwIfDisposed(),Sx(this)};Z().prototype.isNaN=function(){return this.throwIfDisposed(),Nx(this)};Z().prototype.leakyRelu=function(e){return this.throwIfDisposed(),nu(this,e)};Z().prototype.lessEqual=function(e){return this.throwIfDisposed(),gi(this,e)};Z().prototype.less=function(e){return this.throwIfDisposed(),Rd(this,e)};Z().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),bm(this,e,t,n,r)};Z().prototype.logSigmoid=function(){return this.throwIfDisposed(),Cx(this)};Z().prototype.logSoftmax=function(e){return this.throwIfDisposed(),$d(this,e)};Z().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),km(this,e,t)};Z().prototype.log=function(){return this.throwIfDisposed(),zn(this)};Z().prototype.log1p=function(){return this.throwIfDisposed(),Md(this)};Z().prototype.logicalAnd=function(e){return this.throwIfDisposed(),cr(this,e)};Z().prototype.logicalNot=function(){return this.throwIfDisposed(),ru(this)};Z().prototype.logicalOr=function(e){return this.throwIfDisposed(),Dd(this,e)};Z().prototype.logicalXor=function(e){return this.throwIfDisposed(),$x(this,e)};Z().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Ke(this,e,t,n)};Z().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),au(this,e,t,n,r)};Z().prototype.max=function(e,t){return this.throwIfDisposed(),Nn(this,e,t)};Z().prototype.maximum=function(e){return this.throwIfDisposed(),Br(this,e)};Z().prototype.mean=function(e,t){return this.throwIfDisposed(),Nt(this,e,t)};Z().prototype.min=function(e,t){return this.throwIfDisposed(),vl(this,e,t)};Z().prototype.minimum=function(e){return this.throwIfDisposed(),kl(this,e)};Z().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),Sm(this,e,t)};Z().prototype.mod=function(e){return this.throwIfDisposed(),Nm(this,e)};Z().prototype.mul=function(e){return this.throwIfDisposed(),O(this,e)};Z().prototype.neg=function(){return this.throwIfDisposed(),St(this)};Z().prototype.norm=function(e,t,n){return this.throwIfDisposed(),Zd(this,e,t,n)};Z().prototype.notEqual=function(e){return this.throwIfDisposed(),wi(this,e)};Z().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),dl(this,e,t,n)};Z().prototype.onesLike=function(){return this.throwIfDisposed(),Pn(this)};Z().prototype.pad=function(e,t){return this.throwIfDisposed(),ca(this,e,t)};Z().prototype.pool=function(e,t,n,r,a){return this.throwIfDisposed(),zx(this,e,t,n,r,a)};Z().prototype.pow=function(e){return this.throwIfDisposed(),ua(this,e)};Z().prototype.prelu=function(e){return this.throwIfDisposed(),iu(this,e)};Z().prototype.prod=function(e,t){return this.throwIfDisposed(),zd(this,e,t)};Z().prototype.reciprocal=function(){return this.throwIfDisposed(),Cm(this)};Z().prototype.relu=function(){return this.throwIfDisposed(),Ur(this)};Z().prototype.relu6=function(){return this.throwIfDisposed(),Ld(this)};Z().prototype.reshapeAs=function(e){return this.throwIfDisposed(),j(this,e.shape)};Z().prototype.reshape=function(e){return this.throwIfDisposed(),j(this,e)};Z().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),tw(this,e,t,n)};Z().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),nw(this,e,t,n)};Z().prototype.reverse=function(e){return this.throwIfDisposed(),Ln(this,e)};Z().prototype.rfft=function(){return this.throwIfDisposed(),hu(this)};Z().prototype.round=function(){return this.throwIfDisposed(),Rm(this)};Z().prototype.rsqrt=function(){return this.throwIfDisposed(),Wd(this)};Z().prototype.selu=function(){return this.throwIfDisposed(),Bd(this)};Z().prototype.separableConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Mm(this,e,t,n,r,a,s)};Z().prototype.sigmoid=function(){return this.throwIfDisposed(),On(this)};Z().prototype.sign=function(){return this.throwIfDisposed(),Fm(this)};Z().prototype.sin=function(){return this.throwIfDisposed(),Vd(this)};Z().prototype.sinh=function(){return this.throwIfDisposed(),Ud(this)};Z().prototype.slice=function(e,t){return this.throwIfDisposed(),Fe(this,e,t)};Z().prototype.softmax=function(e){return this.throwIfDisposed(),cu(this,e)};Z().prototype.softplus=function(){return this.throwIfDisposed(),_l(this)};Z().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),su(this,e,t)};Z().prototype.split=function(e,t){return this.throwIfDisposed(),Bt(this,e,t)};Z().prototype.sqrt=function(){return this.throwIfDisposed(),nn(this)};Z().prototype.square=function(){return this.throwIfDisposed(),ct(this)};Z().prototype.squaredDifference=function(e){return this.throwIfDisposed(),qd(this,e)};Z().prototype.squeeze=function(e){return this.throwIfDisposed(),Ua(this,e)};Z().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof He?[this,e]:[this,...e];return pn(n,t)};Z().prototype.step=function(e){return this.throwIfDisposed(),Nl(this,e)};Z().prototype.stridedSlice=function(e,t,n,r,a,s,i,o){return this.throwIfDisposed(),Dm(this,e,t,n,r,a,s,i,o)};Z().prototype.sub=function(e){return this.throwIfDisposed(),xe(this,e)};Z().prototype.sum=function(e,t){return this.throwIfDisposed(),Me(this,e,t)};Z().prototype.tan=function(){return this.throwIfDisposed(),Om(this)};Z().prototype.tanh=function(){return this.throwIfDisposed(),yl(this)};Z().prototype.tile=function(e){return this.throwIfDisposed(),Ba(this,e)};Z().prototype.toBool=function(){return this.throwIfDisposed(),we(this,"bool")};Z().prototype.toFloat=function(){return this.throwIfDisposed(),we(this,"float32")};Z().prototype.toInt=function(){return this.throwIfDisposed(),we(this,"int32")};Z().prototype.topk=function(e,t){return this.throwIfDisposed(),zm(this,e,t)};Z().prototype.transpose=function(e){return this.throwIfDisposed(),st(this,e)};Z().prototype.unique=function(e){return this.throwIfDisposed(),Kd(this,e)};Z().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),Pm(this,e,t)};Z().prototype.unstack=function(e){return this.throwIfDisposed(),ur(this,e)};Z().prototype.where=function(e,t){return this.throwIfDisposed(),Sn(e,this,t)};Z().prototype.zerosLike=function(){return this.throwIfDisposed(),qe(this)};var q3={kernelName:io,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,Nl(we(n,"float32"),-1))}}},eY={kernelName:oo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=ct(we(n,"float32")),a=nn(xe(be(1),r));return St(ge(e,a))}}}},tY={kernelName:lo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=nn(xe(ct(we(n,"float32")),1));return ge(e,r)}}}},nY={kernelName:Ca,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=e,i=Wt(n.shape,a);return i.length>0&&(s=Me(s,i)),j(s,n.shape)},b:()=>{let s=e,i=Wt(r.shape,a);return i.length>0&&(s=Me(s,i)),j(s,r.shape)}}}},rY={kernelName:fs,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,a)=>{n[a]=()=>e.clone()}),n}},aY={kernelName:ms,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},sY={kernelName:bc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},iY={kernelName:co,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,nn(xe(be(1),ct(we(n,"float32")))))}}},oY={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=nn(ie(be(1),ct(we(n,"float32"))));return ge(e,r)}}}},lY={kernelName:fo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=ie(ct(n),ct(r)),i=O(e,ge(r,s)),o=Wt(n.shape,a);return o.length>0&&(i=Me(i,o)),j(i,n.shape)},b:()=>{let s=ie(ct(n),ct(r)),i=St(O(e,ge(n,s))),o=Wt(r.shape,a);return o.length>0&&(i=Me(i,o)),j(i,r.shape)}}}},cY={kernelName:ho,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,ie(ct(we(n,"float32")),1))}}},uY={kernelName:po,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,xe(be(1),ct(we(n,"float32"))))}}};function hY(e,t,n,r,a,s){let i=C(e,"dy","avgPool3dGrad"),o=C(t,"input","avgPool3dGrad"),l=i,u=o,c=!1;o.rank===4&&(c=!0,l=j(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=j(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),M(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),M(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),s!=null&&M(Gt(a),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${s} but got pad ${a}.`);let h={dy:l,input:u},d={filterSize:n,strides:r,pad:a,dimRoundingMode:s},p=$.runKernel(Ph,h,d);return c?j(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var dY=D({avgPool3dGrad_:hY}),pY={kernelName:_c,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>dY(e,r,a,s,i,o)}}};function fY(e,t,n,r,a){let s=C(e,"dy","avgPoolGrad"),i=C(t,"input","avgPoolGrad");M(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let o=i,l=s,u=!1;i.rank===3&&(u=!0,o=j(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=j(s,[1,s.shape[0],s.shape[1],s.shape[2]])),M(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),M(o.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`);let c={dy:l,input:o},h={filterSize:n,strides:r,pad:a},d=$.runKernel(zh,c,h);return u?j(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var mY=D({avgPoolGrad_:fY}),AY={kernelName:As,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i}=n;return{x:()=>mY(e,r,a,s,i)}}},yY={kernelName:ys,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,a]=t,{transposeA:s,transposeB:i}=n;return!s&&!i?{a:()=>Ke(e,a,!1,!0),b:()=>Ke(r,e,!0,!1)}:!s&&i?{a:()=>Ke(e,a,!1,!1),b:()=>Ke(e,r,!0,!1)}:s&&!i?{a:()=>Ke(a,e,!1,!0),b:()=>Ke(r,e,!1,!1)}:{a:()=>Ke(a,e,!0,!0),b:()=>Ke(e,r,!0,!0)}}},gY={kernelName:vc,gradFunc:(e,t,n)=>{let{blockShape:r,crops:a}=n;return{x:()=>su(e,r,a)}}},xY={kernelName:g5,gradFunc:(e,t,n)=>{let r=n,a=r.inputShape,s=r.shape,i=Array.from(s);for(let l=a.length-1;l>=0;l--)if(a[l]===s[l])i[l]=1;else if(a[l]!==1)throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${s}].`);let o=[];for(let l=0;l<i.length;l++)i[l]>1&&o.push(l);return{x:()=>Me(e,o,!0)}}},wY={kernelName:gs,gradFunc:e=>({x:()=>e.clone()})},bY={kernelName:xs,gradFunc:e=>({x:()=>qe(e)})},_Y={kernelName:Ra,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:a,clipValueMax:s}=n;return{x:()=>Sn(cr(Va(r,a),gi(r,s)),e,qe(e))}}},vY={kernelName:kc,inputsToSave:["x"],gradFunc:q3.gradFunc},kY={kernelName:mo,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(o=>o.shape),{axis:a}=n,s=ir(a,t[0].shape)[0],i=r.map(o=>o[s]);return Bt(e,i,s).map(o=>()=>o)}},IY={kernelName:ws,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return M(La(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>pm(r.shape,e,a,i,o,l),filter:()=>Vm(r,e,a.shape,i,o,l)}}},SY={kernelName:bs,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>la(e,a,s,i,o,1,l),filter:()=>Vm(e,r,a.shape,s,i,o,l)}}};function NY(e,t,n,r,a){let s=e;e.rank===4&&(s=j(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=j(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),M(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),M(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),M(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),M(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),M(i.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`);let o={x:s,dy:i},l={strides:r,pad:a,filterShape:n};return $.runKernel(Vh,o,l)}var TY=D({conv3DBackpropFilter_:NY}),EY={kernelName:Ic,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s}=n;M(La(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[i,o]=t;return{x:()=>_x(i.shape,e,o,a,s),filter:()=>TY(i,e,o.shape,a,s)}}},CY={kernelName:_s,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(St(Vd(we(n,"float32"))),e)}}},RY={kernelName:Ao,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(Ud(we(n,"float32")),e)}}},MY={kernelName:vs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a,exclusive:s,reverse:i}=n;return{x:()=>{let o=Fx([a],r.rank),l=Ed(e,a,s,!i);return o!=null&&(l=st(l,o)),l}}}},FY={kernelName:ks,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s,dimRoundingMode:i}=n,o=r==null?[1,1]:r;M(La(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,u]=t;return M(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),M(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),M(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),M(Lr(a,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${o}'.`),i!=null&&M(Gt(s),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`),{x:()=>Xx(l.shape,e,u,a,s,r,i),filter:()=>qx(l,e,u.shape,a,s,r,i)}}},$Y={kernelName:Sc,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,s={x:r,filter:a,dy:e},i={x:r,filter:a,dy:e};return{x:()=>$.runKernel(Xh,s,n),filter:()=>$.runKernel(Kh,i,n)}}},DY={kernelName:xo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>$.runKernel(Zh,r)}}},OY={kernelName:wo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=O(Yn(St(ct(n))),2/Math.sqrt(Math.PI));return{x:()=>O(e,r)}}},zY={kernelName:Ss,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,n)}}},PY={kernelName:_o,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>j(e,n.shape)}}},LY={kernelName:vo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,Yn(n))}}},WY={kernelName:Ns,gradFunc:e=>({x:()=>qe(e)})},BY={kernelName:Ts,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=ge(e,we(r,"float32")),i=Wt(n.shape,a);return i.length>0?j(Me(s,i),n.shape):s},b:()=>{let s=O(e,we(n,"float32")),i=Wt(r.shape,a);i.length>0&&(s=j(Me(s,i),r.shape));let o=ct(r);return St(ge(s,we(o,"float32")))}}}},VY={kernelName:Es,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[a,s,i,o]=t,l=o==null?be(1):o,u=Wt(s.shape,a.shape),c=[];if(s.rank===1){for(let m=0;m<a.shape.length-1;++m)c.push(a.shape[m]);c.push(1)}let h=xe(a,s),d=O(e,l),p=Wd(ie(i,be(r))),f=O(O(O(p,p),p),be(-.5));return{x:()=>s.rank===1?j(O(O(e,Ba(j(p,[1,1,1,s.shape[0]]),c)),l),a.shape):j(O(O(e,p),l),a.shape),mean:()=>{let m=O(O(p,be(-1)),d);return s.rank===1&&(m=Me(m,u)),j(m,s.shape)},variance:()=>{let m=O(O(f,h),d);return s.rank===1&&(m=Me(m,u)),j(m,s.shape)},scale:()=>{let m=O(h,p),A=O(e,m);return s.rank===1&&(A=Me(A,u)),j(A,s.shape)},offset:()=>{let m=e;return s.rank===1&&(m=Me(m,u)),j(m,s.shape)}}}},UY={kernelName:Io,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,a]=t,{axis:s}=n,i=ir(s,r.shape)[0];return{x:()=>{let o=r.shape,l=a.size,u=o.slice(0,i),c=u.length,h=o.slice(s,o.length).slice(1),d=h.length,p=X3(0,c),f=X3(c+1,c+1+d),m=K3([u,[l],h]),A=j(e,m),y=j(a,[l]),g=K3([[c],p,f]),w=st(A,g),b=Pm(w,y,r.shape[i]),_=vm(g);return b=st(b,_),b},indices:()=>a}}};function X3(e,t){let n=[];for(let r=e;r<t;++r)n.push(r);return n}function K3(e){let t=[];for(let n=0;n<e.length;++n)for(let r=0;r<e[n].length;++r)t.push(e[n][r]);return t}var jY={kernelName:Cs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>qe(n),b:()=>qe(r)}}},HY={kernelName:Rs,gradFunc:e=>({x:()=>we(e,"float32")})},GY={kernelName:To,gradFunc:e=>({x:()=>qe(e)})},qY={kernelName:Eo,gradFunc:e=>({x:()=>qe(e)})},XY={kernelName:Co,gradFunc:e=>({x:()=>qe(e)})},KY={kernelName:Ms,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:a}=n,s=lr(r,0);return{x:()=>Sn(s,e,O(e,a))}}},ZY={kernelName:Fo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,ie(n,1))}}},YY={kernelName:Fs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,we(n,"float32"))}}},JY={kernelName:x5,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n;return{logits:()=>{let s=!0,i=Yn(r);return xe(e,O(Me(e,a,s),i))}}}};function QY(e,t,n,r=5,a=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:r,bias:a,alpha:s,beta:i};return $.runKernel(td,o,l)}var eJ=D({localResponseNormalizationBackprop_:QY}),tJ={kernelName:Cc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>eJ(r,a,e,s,i,o,l)}}};function Z3(e,t,n,r){return t.rank<n.rank&&(t=j(t,xi(t.shape,r))),e.rank<n.rank&&(e=j(e,xi(e.shape,r))),{x:()=>O(e,we(Wa(n,t),e.dtype))}}var Y3={kernelName:$s,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:a}=r,s=t[0],i=t[1],o=ir(a,s.shape),l=Z3(e,i,s,o);return{x:()=>l.x()}}},nJ={kernelName:Ds,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>O(e,we(Va(n,r),"float32")),b:()=>O(e,we(Rd(n,r),"float32"))}}};function rJ(e,t,n,r,a,s,i){let o=C(e,"dy","maxPool3dGrad"),l=C(t,"input","maxPool3dGrad"),u=C(n,"output","maxPool3dGrad"),c=o,h=l,d=u,p=!1;l.rank===4&&(p=!0,c=j(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),h=j(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),d=j(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),M(c.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),M(h.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${h.rank}.`),M(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),i!=null&&M(Gt(s),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let f={dy:c,input:h,output:d},m={filterSize:r,strides:a,pad:s,dimRoundingMode:i},A=$.runKernel(rd,f,m);return p?j(A,[A.shape[1],A.shape[2],A.shape[3],A.shape[4]]):A}var aJ=D({maxPool3dGrad_:rJ}),sJ={kernelName:Rc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>aJ(e,r,a,s,i,o,l)}}};function iJ(e,t,n,r,a,s,i){let o=C(e,"dy","maxPoolGrad"),l=C(t,"input","maxPoolGrad"),u=C(n,"output","maxPoolGrad");M(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),M(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),M(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),i!=null&&M(Gt(s),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let c={dy:o,input:l,output:u},h={filterSize:r,strides:a,pad:s,dimRoundingMode:i};return $.runKernel(nd,c,h)}var oJ=D({maxPoolGrad_:iJ}),lJ={kernelName:Os,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>oJ(e,r,a,s,i,o)}}},cJ={kernelName:zs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n,s=ir(a,r.shape),i=Mx(r.shape,s)[1],o=zt(i);return{x:()=>{let l=r.shape.slice();s.forEach(c=>{l[c]=1});let u=j(e,l);return ge(O(u,Vr(r.shape,"float32")),o)}}}},uJ={kernelName:Ps,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:a}=r,[s,i]=t,o=ir(a,s.shape),l=Z3(e,i,s,o);return{x:()=>l.x()}}},hJ={kernelName:Ls,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>O(e,we(gi(n,r),"float32")),b:()=>O(e,we(lr(n,r),"float32"))}}},dJ={kernelName:Mc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Fe(e,s,r.shape)}}},pJ={kernelName:Do,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=Wt(n.shape,a);return s.length>0?j(Me(e,s),n.shape):e},b:()=>{let s=O(e,St(bl(ge(n,r)))),i=Wt(r.shape,a);return i.length>0?j(Me(s,i),r.shape):s}}}},fJ={kernelName:Ws,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=O(e,we(r,"float32")),i=Wt(n.shape,a);return i.length>0?j(Me(s,i),n.shape):s},b:()=>{let s=O(e,we(n,"float32")),i=Wt(r.shape,a);return i.length>0?j(Me(s,i),r.shape):s}}}},mJ={kernelName:Oo,gradFunc:e=>({x:()=>St(e)})},AJ={kernelName:Bs,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>Ft(n.shape,"float32")}}},yJ={kernelName:Bo,gradFunc:e=>({x:()=>qe(e)})},gJ={kernelName:Vo,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return ur(e,r).map(a=>()=>a)}},J3={kernelName:Vs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Fe(e,s,r.shape)}}},xJ={kernelName:Us,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,a]=t,s=n,i=r,o=gt(s.shape,i.shape);return{a:()=>{let l=we(i,"float32"),u=O(e,O(l,ua(s,xe(l,be(1))))),c=Wt(s.shape,o);return c.length>0&&(u=Me(u,c)),j(u,s.shape)},b:()=>{let l=lr(s,0),u=Sn(l,zn(s),qe(s)),c=O(e,O(a,u)),h=Wt(i.shape,o);return h.length>0&&(c=Me(c,h)),j(c,i.shape)}}}},wJ={kernelName:js,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,a=lr(n,0);return{x:()=>Sn(a,e,O(e,r)),alpha:()=>{let s=Sn(a,qe(e),O(e,n)),i=Wt(r.shape,e.shape);return i.length>0&&(s=Me(s,i)),j(s,r.shape)}}}},bJ={kernelName:Is,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=ge(e,we(r,"float32")),i=Wt(n.shape,a);return i.length>0?j(Me(s,i),n.shape):s},b:()=>{let s=O(e,we(n,"float32")),i=Wt(r.shape,a);i.length>0&&(s=j(Me(s,i),r.shape));let o=ct(r);return St(ge(s,we(o,"float32")))}}}},_J={kernelName:jo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,St(ct(n)))}}},vJ={kernelName:qs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=O(gi(n,6),Nl(n));return{x:()=>O(e,we(r,"float32"))}}},kJ={kernelName:Hs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,we(Nl(n),"float32"))}}},IJ={kernelName:Ho,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>j(e,n.shape)}}},SJ={kernelName:Gs,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>$.runKernel(ld,a,n)}}},NJ={kernelName:$c,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>$.runKernel(od,a,n)}}},TJ={kernelName:Xs,gradFunc:(e,t,n)=>{let{dims:r}=n,a=ir(r,e.shape);return{x:()=>Ln(e,a)}}},EJ={kernelName:Ks,gradFunc:e=>({x:()=>qe(e)})},CJ={kernelName:Zs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>St(ge(e,O(ua(n,1.5),2)))}}},RJ={kernelName:qo,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>we(qe(n),"float32"),t:()=>O(e,we(n,e.dtype)),e:()=>O(e,we(ru(n),e.dtype))}}},MJ={kernelName:Xo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=lr(n,be(0)),a=be(sw),s=be(iw),i=O(e,s),o=O(O(e,a),Yn(we(n,"float32")));return Sn(r,i,o)}}}},FJ={kernelName:Js,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,O(n,xe(be(1),n)))}}},$J={kernelName:Yo,gradFunc:e=>({x:()=>qe(e)})},DJ={kernelName:Ys,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(eu(we(n,"float32")),e)}}},OJ={kernelName:Zo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(Td(we(n,"float32")),e)}}},zJ={kernelName:Ko,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:a,size:s}=n,i=r.shape,[o,l]=ax(r,a,s),u=[];for(let c=0;c<e.rank;c++)u.push([o[c],i[c]-o[c]-l[c]]);return{x:()=>ca(e,u)}}},PJ={kernelName:ti,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:a}=n,s=!0,i=O(e,r);return{logits:()=>xe(i,O(Me(i,[a],s),r))}}},LJ={kernelName:Jo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,On(n))}}},Q3={kernelName:Dc,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:a}=n;return{x:()=>Jc(e,r,a)}}},e7={kernelName:Qo,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>it(e,r)}}},WJ={kernelName:Qs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,O(nn(we(n,"float32")),2))}}},BJ={kernelName:Oc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(e,O(we(n,"float32"),2))}}},VJ={kernelName:ni,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=be(2);return{a:()=>O(e,O(a,xe(n,r))),b:()=>O(e,O(a,xe(r,n)))}}},UJ={kernelName:Fa,gradFunc:e=>({x:()=>qe(e)})},jJ={kernelName:ri,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=gt(n.shape,r.shape);return{a:()=>{let s=e,i=Wt(n.shape,a);return i.length>0&&(s=Me(s,i)),j(s,n.shape)},b:()=>{let s=e,i=Wt(r.shape,a);return i.length>0&&(s=Me(s,i)),j(St(s),r.shape)}}}},HJ={kernelName:ei,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,a=r.shape.slice(),{axis:s}=n;ir(s,r.shape).forEach(l=>{a[l]=1});let i=j(e,a),o=O(i,Vr(r.shape,"float32"));return{x:()=>o}}},GJ={kernelName:tl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>ge(e,ct(eu(n)))}}},qJ={kernelName:ai,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>O(xe(be(1),ct(n)),e)}}},XJ={kernelName:Ma,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:a}=n;return{x:()=>{let s=qe(r);if(r.rank===1)for(let i=0;i<a[0];++i)s=ie(s,Fe(e,[i*r.shape[0]],[r.shape[0]]));else if(r.rank===2)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)s=ie(s,Fe(e,[i*r.shape[0],o*r.shape[1]],[r.shape[0],r.shape[1]]));else if(r.rank===3)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)s=ie(s,Fe(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else if(r.rank===4)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)for(let u=0;u<a[3];++u)s=ie(s,Fe(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2],u*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${r.rank} tensors yet.`);return s}}}},KJ={kernelName:si,gradFunc:(e,t,n)=>{let r=n,{perm:a}=r,s=vm(a);return{x:()=>st(e,s)}}},ZJ={kernelName:rl,gradFunc:(e,t,n)=>{let r=n,{axis:a}=r;return{value:()=>pn(e,a)}}},JJ={kernelName:zc,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>YJ(e,n)}}};function YJ(e,t){let n=Br(t,qe(t)),r=yi(e,n),a=Va(t,be(0,"int32")),s=r.rank-a.rank;for(let o=0;o<s;++o)a=tn(a,o+1);a=cr(a,Vr(r.shape,"bool"));let i=qe(r);return Sn(a,r,i)}var QJ={kernelName:al,gradFunc:e=>({x:()=>qe(e)})},eQ=[q3,eY,tY,nY,rY,aY,sY,iY,oY,lY,cY,uY,pY,AY,yY,gY,xY,wY,bY,_Y,vY,kY,SY,IY,EY,CY,RY,MY,FY,$Y,bJ,DY,OY,zY,PY,LY,BY,WY,VY,UY,jY,HY,GY,qY,XY,KY,ZY,YY,JY,tJ,Y3,Y3,nJ,sJ,lJ,cJ,uJ,hJ,dJ,pJ,fJ,mJ,AJ,yJ,gJ,J3,J3,xJ,wJ,_J,vJ,kJ,IJ,SJ,NJ,TJ,EJ,CJ,RJ,MJ,FJ,$J,DJ,OJ,zJ,PJ,LJ,Q3,Q3,e7,e7,WJ,VJ,BJ,UJ,jJ,HJ,GJ,qJ,XJ,KJ,ZJ,JJ,QJ];for(let e of eQ)w5(e);var t7={};Le(t7,{maxNorm:()=>tQ,minMaxNorm:()=>aQ,nonNeg:()=>rQ,unitNorm:()=>nQ});var RA;function Vt(){return RA==null&&(RA=hx().epsilon()),RA}function Sr(){return"channelsLast"}var fa=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,fa.prototype)}},Nr=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Nr.prototype)}},B=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,B.prototype)}},ze=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,ze.prototype)}},n7=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,n7.prototype)}};function Ri(e,t){if(Array.isArray(e)){let n=[];for(let r=0;r<t;r++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function qr(e,t){if(!e)throw new n7(t)}function r7(e,t){let n=0;for(let r of e)r===t&&n++;return n}function Rn(e){return e.length===1?e[0]:e}function mt(e){return Array.isArray(e)?e:[e]}function ma(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return t[0]!=="_"?t:"private"+t}function Mi(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var dr={};function MA(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function FA(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>FA(t));else{let t=Object.keys(e);for(let n of t){let r=e[n];r!=null&&typeof r=="object"&&(!Array.isArray(r)&&r.type==="ndarray"&&typeof r.value=="number"?e[n]=r.value:FA(r))}}}function Cu(e,t={},n={},r="object",a=!1){if(typeof e=="string"){let s=e,i;if(s in n)i=n[s];else if(s in dr)i=dr[s];else if(i=t[s],i==null)throw new B(`Unknown ${r}: ${e}. This may be due to one of the following reasons:
|
|
1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return i}else{let s=e;if(s.className==null||s.config==null)throw new B(`${r}: Improper config format: ${JSON.stringify(s)}.
|
|
'className' and 'config' must set.`);let i=s.className,o,l;if(i in n?[o,l]=n[i]:i in dr?[o,l]=dr.className:i in t&&([o,l]=t[i]),o==null)throw new B(`Unknown ${r}: ${i}. This may be due to one of the following reasons:
|
|
1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let u={};for(let p of Object.keys(dr))u[p]=dr[p];for(let p of Object.keys(n))u[p]=n[p];let c=s.config;c.customObjects=u;let h=Object.assign({},dr);for(let p of Object.keys(n))dr[p]=n[p];FA(s.config);let d=l(o,s.config,n,a);return dr=Object.assign({},h),d}else{let u=Object.assign({},dr);for(let h of Object.keys(n))dr[h]=n[h];let c=new o(s.config);return dr=Object.assign({},u),c}}}function sQ(e,t){return e<t?-1:e>t?1:0}function Op(e,t){return-1*sQ(e,t)}function Xa(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function iQ(e){if(e==null)throw new B(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function Fi(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new B(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function $A(e,t,n=0,r=Infinity){return qr(n>=0),qr(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(a=>typeof a===t)}function Kt(e,t){Array.isArray(e)?(v.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>Kt(n,`element ${r+1} of ${t}`))):v.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${a7(e)}.`)}function a7(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>a7(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function oQ(e,t){let n=v.now(),r;return(...a)=>{let s=v.now();return s-n<t||(n=s,r=e(...a)),r}}function s7(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}function DA(e,t){return z(()=>nn(Me(O(e,e),t,!0)))}var Ru=class extends ae.Serializable{getConfig(){return{}}},OA=class extends Ru{constructor(e){super();this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return z(()=>{let t=DA(e,this.axis),n=In(t,0,this.maxValue);return O(e,ge(n,ie(Vt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};OA.className="MaxNorm";ae.registerClass(OA);var zA=class extends Ru{constructor(e){super();this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return z(()=>ge(e,ie(Vt(),DA(e,this.axis))))}getConfig(){return{axis:this.axis}}};zA.className="UnitNorm";ae.registerClass(zA);var PA=class extends Ru{apply(e){return Ur(e)}};PA.className="NonNeg";ae.registerClass(PA);var LA=class extends Ru{constructor(e){super();this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=e.minValue!=null?e.minValue:this.defaultMinValue,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.rate=e.rate!=null?e.rate:this.defaultRate,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return z(()=>{let t=DA(e,this.axis),n=ie(O(this.rate,In(t,this.minValue,this.maxValue)),O(1-this.rate,t));return O(e,ge(n,ie(Vt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};LA.className="MinMaxNorm";ae.registerClass(LA);var i7={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Ut(e){return MA(e)}function o7(e,t={}){return Cu(e,ae.SerializationMap.getMap().classNameMap,t,"constraint")}function jt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in i7?i7[e]:e,config:{}};return o7(t)}else return e instanceof Ru?e:o7(e)}function tQ(e){return new OA(e)}function nQ(e){return new zA(e)}function rQ(){return new PA}function aQ(e){return new LA(e)}var l7={};Le(l7,{constant:()=>uQ,glorotNormal:()=>yQ,glorotUniform:()=>AQ,heNormal:()=>gQ,heUniform:()=>xQ,identity:()=>fQ,leCunNormal:()=>wQ,leCunUniform:()=>bQ,ones:()=>cQ,orthogonal:()=>_Q,randomNormal:()=>dQ,randomUniform:()=>hQ,truncatedNormal:()=>pQ,varianceScaling:()=>mQ,zeros:()=>lQ});var vQ=["channelsFirst","channelsLast"],kQ=["nearest","bilinear"],IQ=["valid","same","causal"],SQ=["max","avg"],NQ=["sum","mul","concat","ave"],Hl=new Map;function Rt(e){Fi(vQ,"DataFormat",e)}function TQ(e){Fi(kQ,"InterpolationFormat",e)}function er(e){Fi(IQ,"PaddingMode",e)}function c7(e){Fi(SQ,"PoolMode",e)}var Mu=[],u7="/";function $i(e,t){Mu.push(e);try{let n=t();return Mu.pop(),n}catch(n){throw Mu.pop(),n}}function EQ(){return Mu.length===0?"":Mu.join(u7)+u7}function d7(e){if(!h7(e))throw new Error("Not a valid tensor name: '"+e+"'");return EQ()+e}function p7(e){if(!h7(e))throw new Error("Not a valid tensor name: '"+e+"'");Hl.has(e)||Hl.set(e,0);let t=Hl.get(e);if(Hl.set(e,Hl.get(e)+1),t>0){let n=`${e}_${t}`;return Hl.set(n,1),n}else return e}var CQ=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function h7(e){return!!e.match(CQ)}function RQ(e){return e===parseInt(e.toString(),10)}function Ka(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let a=t;a<n;++a)r*=e[a];return r}function f7(e){return e=Array.isArray(e)?new Float32Array(e):e,un(e)}function Gl(e){return vl(f7(e)).dataSync()[0]}function Za(e){return Nn(f7(e)).dataSync()[0]}function Tr(e,t){if(t<e)throw new B(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let r=e;r<t;++r)n.push(r);return n}function Fu(e,t){return e.asType(t)}function $u(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),e.reshape(n)}function MQ(e,t){return z(()=>{if(e.shape.length!==2)throw new B(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=$u(e,1);return WA(n,[1,t,1])})}function FQ(e){let t=[Ka(e.shape)];return e.reshape(t)}function $Q(e){if(e.rank<=1)throw new B(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],Ka(e.shape,1)];return e.reshape(t)}function Di(e,t,n){return z(()=>{switch(e.rank){case 1:return jd(e,t,n);case 2:return $m(e,[t,0],[n,e.shape[1]]);case 3:return Hd(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return lu(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Fe(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Fe(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new B(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function BA(e,t,n){return z(()=>{switch(e.rank){case 1:return jd(e,t,n);case 2:return $m(e,[0,t],[e.shape[0],n]);case 3:return Hd(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return lu(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new B(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function zp(e,t,n,r){return z(()=>{switch(e.rank){case 1:return jd(e,t,n);case 2:switch(r){case 1:return Di(e,t,n);case 2:return BA(e,t,n);default:throw new B(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return Di(e,t,n);case 2:return Hd(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return BA(e,t,n);default:throw new B(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return Di(e,t,n);case 2:return lu(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return lu(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return BA(e,t,n);default:throw new B(`The axis is not within the rank of the tensor ${r}`)}default:throw new B(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function VA(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),it(e,t)}function m7(e,t){switch(e.rank){case 1:return xx([e,t]);case 2:return gl([e,t],0);case 3:return wx([e,t],0);case 4:return bx([e,t],0);default:throw new B(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function WA(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new B(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Ba(e,t)}function Pp(e,t=0,n=1,r,a){return Px(e,t,n,r,a)}function Xr(e,t,n,r){if(e.rank<2||t.rank<2)throw new ze(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let a=e.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(a!==s)throw new ze(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2){let a=!1,s=!1;return ja.matMul({a:e,b:t,transposeA:a,transposeB:s,bias:r?UA(e.rank,r,Sr()):null,activation:n})}else{let a=e.shape.slice(),s=a.pop();e=e.reshape([-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),u=[...i,o],c=Array.from({length:t.rank},(f,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=t.transpose(c).reshape([l,-1]);let h=[...a,...u],d=!1,p=!1;return ja.matMul({a:e,b:t,transposeA:d,transposeB:p,bias:r?UA(e.rank,r,Sr()):null,activation:n}).reshape(h)}}function A7(e,t,n){return z(()=>(Array.isArray(t)?t=un(t,"int32"):t=t.toInt(),yi(e,t,n)))}function Du(e){return O(e,e)}function UA(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new B(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1,1]):t.reshape([1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1]):t.reshape([1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1]):t.reshape([1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,r[0]]):t.reshape([1].concat(r))}else if(e<3)return t;throw new B(`Unsupported input rank by biasAdd: ${t.rank}`)}function Kr(e,t,n){return z(()=>(n==null&&(n=Sr()),Rt(n),e.add(UA(e.rank,t,n))))}function DQ(e,t=1){if(t!==1)throw new ze(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return wl(e)}function OQ(e){return z(()=>ge(e,Lt(e).add(1)))}function y7(e,t,n,r){return z(()=>Hx(e,t,n,r))}function zQ(e){return z(()=>{let t=ie(.5,O(.2,e));return In(t,0,1)})}function Ou(e,t,n=!1){return n?e():t()}var PQ=["fanIn","fanOut","fanAvg"],LQ=["normal","uniform","truncatedNormal"];function WQ(e){Fi(PQ,"FanMode",e)}function BQ(e){Fi(LQ,"Distribution",e)}var pr=class extends ae.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},jA=class extends pr{apply(e,t){return Ft(e,t)}};jA.className="Zeros";ae.registerClass(jA);var Lp=class extends pr{apply(e,t){return Vr(e,t)}};Lp.className="Ones";ae.registerClass(Lp);var HA=class extends pr{constructor(e){super();if(typeof e!="object")throw new B(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new B(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return z(()=>O(be(this.value),Vr(e,t)))}getConfig(){return{value:this.value}}};HA.className="Constant";ae.registerClass(HA);var GA=class extends pr{constructor(e){super();this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return Il(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};GA.className="RandomUniform";ae.registerClass(GA);var qA=class extends pr{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new ze(`randomNormal does not support dType ${t}.`);return Pp(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};qA.className="RandomNormal";ae.registerClass(qA);var XA=class extends pr{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new ze(`truncatedNormal does not support dType ${t}.`);return Xd(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};XA.className="TruncatedNormal";ae.registerClass(XA);var KA=class extends pr{constructor(e){super();this.gain=e.gain!=null?e.gain:1}apply(e,t){return z(()=>{if(e.length!==2||e[0]!==e[1])throw new B("Identity matrix initializer can only be used for 2D square matrices.");return O(this.gain,wm(e[0]))})}getConfig(){return{gain:this.gain}}};KA.className="Identity";ae.registerClass(KA);function VQ(e,t="channelsLast"){let n,r;if(Rt(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let a=Ka(e,2);n=e[1]*a,r=e[0]*a}else if(t==="channelsLast"){let a=Ka(e,0,e.length-2);n=e[e.length-2]*a,r=e[e.length-1]*a}}else{let a=Ka(e);n=Math.sqrt(a),r=Math.sqrt(a)}return[n,r]}var Mn=class extends pr{constructor(e){super();if(e.scale<0)throw new B(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,WQ(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,BQ(this.distribution),this.seed=e.seed}apply(e,t){let n=VQ(e),r=n[0],a=n[1],s=this.scale;if(this.mode==="fanIn"?s/=Math.max(1,r):this.mode==="fanOut"?s/=Math.max(1,a):s/=Math.max(1,(r+a)/2),this.distribution==="normal"){let i=Math.sqrt(s);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new ze(`${this.getClassName()} does not support dType ${t}.`);return Xd(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return Il(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Mn.className="VarianceScaling";ae.registerClass(Mn);var Wp=class extends Mn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};Wp.className="GlorotUniform";ae.registerClass(Wp);var Bp=class extends Mn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};Bp.className="GlorotNormal";ae.registerClass(Bp);var Vp=class extends Mn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};Vp.className="HeNormal";ae.registerClass(Vp);var Up=class extends Mn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};Up.className="HeUniform";ae.registerClass(Up);var jp=class extends Mn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};jp.className="LeCunNormal";ae.registerClass(jp);var Hp=class extends Mn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Mn.className}};Hp.className="LeCunNormal";ae.registerClass(Hp);var ZA=class extends pr{constructor(e){super();if(this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new ze("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return z(()=>{if(e.length<2)throw new ze("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,r=Pp(n,0,1,"float32"),a=aw.gramSchmidt(r);return e[0]>e[1]&&(a=a.transpose()),O(this.gain,a)})}getConfig(){return{gain:this.gain,seed:this.seed}}};ZA.className="Orthogonal";ae.registerClass(ZA);var g7={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function x7(e,t={}){return Cu(e,ae.SerializationMap.getMap().classNameMap,t,"initializer")}function Tt(e){return MA(e)}function wt(e){if(typeof e=="string"){let t=e in g7?g7[e]:e;if(t==="GlorotNormal")return new Bp;if(t==="GlorotUniform")return new Wp;if(t==="HeNormal")return new Vp;if(t==="HeUniform")return new Up;if(t==="LeCunNormal")return new jp;if(t==="LeCunUniform")return new Hp;{let n={};return n.className=t,n.config={},x7(n)}}else return e instanceof pr?e:x7(e)}function lQ(){return new jA}function cQ(){return new Lp}function uQ(e){return new HA(e)}function hQ(e){return new GA(e)}function dQ(e){return new qA(e)}function pQ(e){return new XA(e)}function fQ(e){return new KA(e)}function mQ(e){return new Mn(e)}function AQ(e){return new Wp(e)}function yQ(e){return new Bp(e)}function gQ(e){return new Vp(e)}function xQ(e){return new Up(e)}function wQ(e){return new jp(e)}function bQ(e){return new Hp(e)}function _Q(e){return new ZA(e)}var w7={};Le(w7,{Layer:()=>Ze,RNN:()=>Zr,RNNCell:()=>zu,activation:()=>aee,add:()=>pee,alphaDropout:()=>Zee,average:()=>fee,averagePooling1d:()=>YA,averagePooling2d:()=>JA,averagePooling3d:()=>QA,avgPool1d:()=>vee,avgPool2d:()=>Iee,avgPool3d:()=>Nee,avgPooling1d:()=>kee,avgPooling2d:()=>See,avgPooling3d:()=>Tee,batchNormalization:()=>wee,bidirectional:()=>Vee,concatenate:()=>mee,conv1d:()=>ZQ,conv2d:()=>YQ,conv2dTranspose:()=>JQ,conv3d:()=>QQ,convLstm2d:()=>Pee,convLstm2dCell:()=>Lee,cropping2D:()=>tee,dense:()=>see,depthwiseConv2d:()=>ree,dot:()=>xee,dropout:()=>iee,elu:()=>jQ,embedding:()=>dee,flatten:()=>lee,gaussianDropout:()=>Kee,gaussianNoise:()=>Xee,globalAveragePooling1d:()=>Eee,globalAveragePooling2d:()=>Cee,globalMaxPool1d:()=>jee,globalMaxPool2d:()=>Hee,globalMaxPooling1d:()=>_7,globalMaxPooling2d:()=>v7,gru:()=>Mee,gruCell:()=>Fee,input:()=>b7,inputLayer:()=>UQ,layerNormalization:()=>bee,leakyReLU:()=>GQ,lstm:()=>$ee,lstmCell:()=>Dee,masking:()=>Yee,maxPool1d:()=>Gee,maxPool2d:()=>qee,maxPooling1d:()=>k7,maxPooling2d:()=>I7,maxPooling3d:()=>Ree,maximum:()=>Aee,minimum:()=>yee,multiply:()=>gee,permute:()=>hee,prelu:()=>qQ,reLU:()=>HQ,repeatVector:()=>cee,reshape:()=>uee,rnn:()=>Wee,separableConv2d:()=>eee,simpleRNN:()=>Oee,simpleRNNCell:()=>zee,softmax:()=>XQ,spatialDropout1d:()=>oee,stackedRNNCells:()=>Bee,thresholdedReLU:()=>KQ,timeDistributed:()=>Uee,upSampling2d:()=>nee,zeroPadding2d:()=>_ee});var Jee=0;function S7(){return Jee++}var Gp={};function qp(e=""){return e in Gp||(Gp[e]=0),Gp[e]+=1,e+Gp[e].toString()}function ey(e){return Array.isArray(e)&&Array.isArray(e[0])}function Xp(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function Be(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new B(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function ht(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new B(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Kp(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,a)=>r*a);return t}var N7="Variable",T7=class{constructor(e,t="float32",n=N7,r=!0,a=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=S7(),n=n==null?N7:n,this.originalName=d7(n),this.name=p7(this.originalName),this.trainable_=r,this.constraint=a,this.val=Wx(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),Qee(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function Qee(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function ty(e){return e.map(t=>t.read())}function ny(e){e.forEach(t=>{t[0].write(t[1])})}var Zt=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Er=class{constructor(e,t,n,r,a,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=a,this.outputTensorIndex=i,this.id=S7(),s!=null&&(this.originalName=d7(s),this.name=p7(this.originalName)),this.rank=t.length}},ete=0,Zp=class{constructor(e,t){this.callArgs=t,this.id=ete++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let n of e.inboundLayers)n!=null&&n.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)t!=null?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},tte=0,Ze=class extends ae.Serializable{constructor(e={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=tte++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let n=this.getClassName();t=ma(n)+"_"+qp(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let a=null;e.batchSize!=null&&(a=e.batchSize),n=[a].concat(e.inputShape)}this.batchInputShape=n;let r=e.dtype;r==null&&(r=e.inputDType),r==null&&(r="float32"),this.dtype=r}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new Nr(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new B(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Rn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Rn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new fa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new fa(`Layer ${this.name} is not connected, no input to return.`);return Rn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new fa(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new fa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Rn(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=mt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=mt(this.inputSpec);if(e.length!==t.length)throw new B(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let r=e[n],a=t[n];if(a==null)continue;let s=r.rank;if(a.ndim!=null&&s!==a.ndim)throw new B(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${a.ndim}, found ndim=${s}`);if(a.maxNDim!=null&&s>a.maxNDim)throw new B(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${s}`);if(a.minNDim!=null&&s<a.minNDim)throw new B(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${a.minNDim}, found ndim=${s}.`);if(a.dtype!=null&&r.dtype!==a.dtype)throw new B(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${a.dtype}, found dtype=${r.dtype}.`);if(a.axes){let i=r.shape;for(let o in a.axes){let l=Number(o),u=a.axes[o],c=l>=0?i[l]:i[i.length+l];if(u!=null&&[u,null].indexOf(c)===-1)throw new B(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${u} but got shape ${i}.`)}}if(a.shape!=null)for(let i=0;i<a.shape.length;++i){let o=a.shape[i],l=r.shape[i];if(o!=null&&l!=null&&o!==l)throw new B(`Input ${n} is incompatible with layer ${this.name}: expected shape=${a.shape}, found shape=${r.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=mt(e),r=!0;for(let s of n)if(!(s instanceof Er)){r=!1;break}let a=!0;for(let s of n)if(s instanceof Er){a=!1;break}if(r===a)throw new B("Arguments to apply() must be all SymbolicTensors or all Tensors");return $i(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of mt(e))s.push(i.shape);this.build(Rn(s)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&a&&(this._refCount=1)}if(this.assertInputCompatibility(e),a){let s=this.call(e,t),i=mt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=Rn(o),this.activityRegularizer!=null)throw new ze("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=nte(e),i=this.computeOutputShape(s),o,l=rte(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?s[0]:s),i!=null&&i.length>0&&Array.isArray(i[0])?o=i.map((u,c)=>new Er(l,u,this,mt(e),t,this.name,c)):o=new Er(l,i,this,mt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new ze("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,r)=>{n!=null&&e[r]!=null&&e[r]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new fa(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);e.indexOf(n)===-1&&e.push(n)}if(e.length===1){let t=this.inboundNodes[0].outputShapes;return Array.isArray(t)&&Array.isArray(t[0])&&t.length===1?t[0]:t}else throw new fa(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new Nr(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Kp(this.weights)}build(e){this.built=!0}getWeights(e=!1){return ty(e?this.trainableWeights:this.weights)}setWeights(e){z(()=>{let t=this.weights;if(t.length!==e.length)throw new B(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],r=ty(t);for(let a=0;a<r.length;++a){let s=r[a],i=t[a],o=e[a];if(!v.arraysEqual(s.shape,o.shape))throw new B(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}ny(n)})}addWeight(e,t,n,r,a,s,i){if(this._addedWeightNames.indexOf(e)!==-1)throw new B(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(r=wt("zeros"));let o=r.apply(t,n),l=new T7(o,n,e,s,i);return o.dispose(),a!=null&&this.addLoss(()=>a.apply(l.read())),s==null&&(s=!0),s?this._trainableWeights.push(l):this._nonTrainableWeights.push(l),l}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=mt(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,r,a,s,i=null){let o=mt(e);t=mt(t),n=mt(n),r=mt(r),a=Xp(a),s=Xp(s);let l=[],u=[],c=[];for(let h of o)l.push(h.sourceLayer),u.push(h.nodeIndex),c.push(h.tensorIndex);new Zp({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:c,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:a,outputShapes:s},i);for(let h=0;h<t.length;h++)t[h].sourceLayer=this,t[h].nodeIndex=this.inboundNodes.length-1,t[h].tensorIndex=h}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount==0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function nte(e){e=mt(e);let t=[];for(let n of e)t.push(n.shape);return Rn(t)}function rte(e){return"float32"}function E7(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let r=t.inboundNodes[n];if(r.inboundLayers.length===0)return r.inputTensors;{let a=[];for(let s=0;s<r.inboundLayers.length;s++){let i=r.inputTensors[s],o=r.inboundLayers[s],l=r.nodeIndices[s],u=E7(i,o,l);for(let c of u)a.indexOf(c)===-1&&a.push(c)}return a}}}var ql=class extends Ze{constructor(e){super({dtype:e.dtype,name:e.name!=null?e.name:qp("input").toString()});if(e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new B("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(t==null){if(e.inputShape==null)throw new B("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new B("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let r=new Er(this.dtype,this.batchInputShape,this,[],{},this.name);r.nodeIndex=0,r.tensorIndex=0,new Zp({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[r],outputTensors:[r],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new B(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};ql.className="InputLayer";ae.registerClass(ql);function C7(e){if(e.batchShape==null&&e.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(e.batchShape!=null&&e.shape!=null)throw new B("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;e.shape!=null&&t==null&&(t=[null].concat(e.shape));let n=e.dtype;return n==null&&(n="float32"),new ql({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}async function Ya(e){if(e==null)return;let t=[],n=[],r=[];for(let a in e){let s=e[a];if(typeof s!="number"){let i=s;t.push(i.data()),n.push(a),r.push(i)}}if(t.length>0){let a=await Promise.all(t);for(let s=0;s<a.length;++s)e[n[s]]=a[s][0];Ie(r)}}function R7(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var M7;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(M7||(M7={}));var ate=125,Xl=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},F7=class{constructor(e,t=10){e==null&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},ste=class extends Xl{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let r in t){let a=t[r];if(typeof a=="number")this.totals.hasOwnProperty(r)||(this.totals[r]=0),this.totals[r]=this.totals[r]+a*n;else{let s;r in this.totals?s=this.totals[r]:this.totals[r]=0;let i=z(()=>ie(this.totals[r],O(a,n)));this.totals[r]=i,s!=null&&s.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:z(()=>{let r=O(ge(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),qt(t[n])}))}},$7=class extends Xl{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let a in this.history){let s=this.history[a];for(let i=0;i<s.length;++i)if(typeof s[i]!="number"){let o=s[i];e.push(o.data()),t.push(a),n.push(i)}}let r=await Promise.all(e);for(let a=0;a<r.length;++a)this.history[t[a]][n[a]].dispose(),this.history[t[a]][n[a]]=r[a][0]}},D7=class extends Xl{constructor(e,t){super();if(this.currentEpoch=0,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=ate),this.yieldEvery==="never"&&e.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");v.isNumber(this.yieldEvery)&&(this.maybeWait=oQ(this.maybeWait.bind(this),this.yieldEvery)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let r=[];this.yield!=null&&(await Ya(n),r.push(this.yield(e,t,n))),r.push(op()),await Promise.all(r)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await Ya(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await Ya(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(op()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await Ya(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await Ya(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(op()):v.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await Ya(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await Ya(e),await this.trainEnd(e))}};function O7(e,t){return e==null&&(e={}),e instanceof Xl?[e]:Array.isArray(e)&&e[0]instanceof Xl?e:mt(e).map(n=>new D7(n,t))}var fr=class{constructor(){}static registerCallbackConstructor(e,t){v.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),fr.checkForDuplicate(t),fr.constructors[e]==null&&(fr.constructors[e]=[]),fr.constructors[e].push(t)}static checkForDuplicate(e){for(let t in fr.constructors)fr.constructors[+t].forEach(n=>{if(n===e)throw new B("Duplicate callback constructor.")})}static clear(){fr.constructors={}}static createCallbacks(e){let t=[];for(let n in fr.constructors){let r=+n;e>=r&&t.push(...fr.constructors[r])}return t.map(n=>new n)}};fr.constructors={};function z7(e,t,n,r,a,s,i,o,l){let u=new $7,c=[new ste,...fr.createCallbacks(t)];e!=null&&c.push(...e),c.push(u);let h=new F7(c);return h.setParams({epochs:n,initialEpoch:r,samples:a,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:h,history:u}}function Cr(e,t={},n=!1){return Cu(e,ae.SerializationMap.getMap().classNameMap,t,"layer",n)}function Yp(e,t){return z(()=>{e.dtype!=="float32"&&(e=e.asType("float32"));let n=Me(Du(e),t,!0),r=tu(n.shape,Vt()),a=nn(Br(n,r));return ge(e,a)})}function Oi(e,t){return z(()=>Nt(Du(xe(t,e)),-1))}function Jp(e,t){return z(()=>Nt(Lt(xe(t,e)),-1))}function Kl(e,t){return z(()=>{let n=xe(e,t),r=In(Lt(e),Vt(),Number.MAX_VALUE),a=Lt(ge(n,r));return O(100,Nt(a,-1))})}function ite(e,t){return z(()=>{let n=In(t,Vt(),Number.MAX_VALUE),r=zn(ie(1,n)),a=In(e,Vt(),Number.MAX_VALUE),s=zn(ie(1,a));return Nt(Du(xe(r,s)),-1)})}function ote(e,t){return z(()=>{let n=Br(0,xe(1,O(e,t)));return Nt(Du(n),-1)})}function lte(e,t){return z(()=>{let n=Br(0,xe(1,O(e,t)));return Nt(n,-1)})}function cte(e,t){return z(()=>{let n=Me(O(e,t),-1),r=Nn(O(xe(1,e),t),-1);return Br(0,ie(1,xe(r,n)))})}function ute(e,t){return z(()=>{let n=Math.log(2),r=xe(t,e),a=xe(ie(r,_l(O(-2,r))),n);return Nt(a,-1)})}function Pu(e,t,n=!1){return z(()=>{if(n)t=cu(t);else{let r=Me(t,t.shape.length-1,!0);t=ge(t,r)}return t=In(t,Vt(),1-Vt()),St(Me(O(e.toFloat(),zn(t)),t.shape.length-1))})}function Qp(e,t,n=!1){return z(()=>{let r=bl(FQ(e)).toInt();t=In(t,Vt(),1-Vt());let a=t.shape,s=dl(r,a[a.length-1]).reshape(a);return Pu(s,t,n)})}function hte(e,t){if(!v.arraysEqual(e.shape,t.shape))throw new B(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return z(()=>{let n=t.relu(),r=t.abs().neg();return n.sub(t.mul(e)).add(r.exp().log1p())})}function e0(e,t){return z(()=>{let n;return n=In(t,Vt(),1-Vt()),n=zn(ge(n,xe(1,n))),Nt(hte(e,n),-1)})}function dte(e,t){return z(()=>{let n=In(e,Vt(),1),r=In(t,Vt(),1);return Me(O(e,zn(ge(n,r))),-1)})}function pte(e,t){return z(()=>{let n=zn(ie(Vt(),t));return Nt(xe(t,O(e,n)),-1)})}function ry(e,t){return z(()=>{let n=Yp(e,-1),r=Yp(t,-1),a=O(n,r);return St(Me(a,-1))})}var t0={meanSquaredError:Oi,meanAbsoluteError:Jp,meanAbsolutePercentageError:Kl,meanSquaredLogarithmicError:ite,squaredHinge:ote,hinge:lte,categoricalHinge:cte,logcosh:ute,categoricalCrossentropy:Pu,sparseCategoricalCrossentropy:Qp,binaryCrossentropy:e0,kullbackLeiblerDivergence:dte,poisson:pte,cosineProximity:ry};function ay(e){if(typeof e=="string"){if(e in t0)return t0[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new B(t)}else return e}function sy(e,t){return z(()=>{let n=O(.5,Pn(t)),r=Fu(lr(t,n),e.dtype);return Nt(Wa(e,r),-1)})}function iy(e,t){return z(()=>Fu(Wa(fi(e,-1),fi(t,-1)),"float32"))}function P7(e,t){return z(()=>cr(e.equal(1),t.equal(1)).sum().cast("float32"))}function fte(e,t){return z(()=>cr(e.equal(1),t.equal(0)).sum().cast("float32"))}function mte(e,t){return z(()=>cr(e.equal(0),t.equal(1)).sum().cast("float32"))}function L7(e,t){return z(()=>{let n=P7(e,t),r=mte(e,t),a=n.add(r);return Sn(lr(a,0),n.div(a),0).cast("float32")})}function Ate(e,t){return z(()=>{let n=P7(e,t),r=fte(e,t),a=n.add(r);return Sn(lr(a,0),n.div(a),0).cast("float32")})}function W7(e,t){return e0(e,t)}function B7(e,t){return e.rank===t.rank&&(e=e.squeeze([e.rank-1])),t=t.argMax(-1),t.dtype!==e.dtype&&(t=t.asType(e.dtype)),Wa(e,t).asType("float32")}var yte=Oi,gte=Oi,xte=Jp,wte=Jp,bte=Kl,_te=Kl,oy=Pu,vte=ry,V7=Qp,n0={binaryAccuracy:sy,categoricalAccuracy:iy,precision:L7,categoricalCrossentropy:oy,sparseCategoricalCrossentropy:V7,mse:yte,MSE:gte,mae:xte,MAE:wte,mape:bte,MAPE:_te,cosine:vte};function kte(e){if(typeof e=="string"&&e in n0)return n0[e];if(typeof e!="string"&&e!=null)return e;throw new B(`Unknown metric ${e}`)}function r0(e){if(qr(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(t0))if(t0[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(n0))if(n0[n]===e){t=n;break}return t!==void 0?t:e.name}}function Ite(e){let t={Adagrad:()=>_i.adagrad(.01),Adadelta:()=>_i.adadelta(1,.95,Vt()),Adam:()=>_i.adam(.001,.9,.999,Vt()),Adamax:()=>_i.adamax(.002,.9,.999,Vt(),0),RMSProp:()=>_i.rmsprop(.001,.9,0,Vt()),SGD:()=>_i.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new B(`Unknown Optimizer ${e}`)}var U7=1*1024*1024;function j7(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!ly(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let r=JSON.stringify(e);r.length>U7&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${r.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${U7}.`)}}function ly(e){if(e===null)return!0;if(typeof e=="object")if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if(typeof n!="string"||!ly(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!ly(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function Cte(e,t,n,r=console.log){let a=Nte(e),s=["Layer (type)","Output shape","Param #"];a?(t=t||65,n=n||[.45,.85,1]):(t=t||98,n=n||[.33,.55,.67,1]),n[n.length-1]<=1&&(n=n.map(c=>Math.floor(t*c)));let i;if(!a){s.push("Receives inputs"),i=[];for(let c in e.nodesByDepth)i.push(...e.nodesByDepth[c])}r("_".repeat(t)),a0(s,n,r),r("=".repeat(t));let o=e.layers;for(let c=0;c<o.length;++c)a?Tte(o[c],n,r):Ete(o[c],n,i,r),r((c===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=Ste(e),u=Kp(e.nonTrainableWeights);r(`Total params: ${l+u}`),r(`Trainable params: ${l}`),r(`Non-trainable params: ${u}`),r("_".repeat(t))}function Ste(e){let t;return e.collectedTrainableWeights!=null?t=Kp(e.collectedTrainableWeights):t=Kp(e.trainableWeights),t}function Nte(e){let t=!0,n=[],r=[];for(let a in e.nodesByDepth)n.push(e.nodesByDepth[a]);for(let a of n){if(a.length>1||a.length===1&&a[0].inboundLayers.length>1){t=!1;break}r.push(...a)}if(t)for(let a of e.layers){let s=!1;for(let i of a.inboundNodes)if(r.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function a0(e,t,n=console.log){let r="";for(let a=0;a<e.length;++a)a>0&&(r=r.slice(0,r.length-1)+" "),r+=e[a],r=r.slice(0,t[a]),r+=" ".repeat(t[a]-r.length);n(r)}function Tte(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(o){r="multiple"}let a=e.name,s=e.getClassName(),i=[`${a} (${s})`,r,e.countParams().toString()];a0(i,t,n)}function Ete(e,t,n,r){let a;try{a=JSON.stringify(e.outputShape)}catch(c){a="multiple"}let s=[];for(let c of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(c)===-1))for(let h=0;h<c.inboundLayers.length;++h){let d=c.inboundLayers[h].name,p=c.nodeIndices[h],f=c.tensorIndices[h];s.push(`${d}[${p}][${f}]`)}let i=e.name,o=e.getClassName(),l=s.length===0?"":s[0],u=[`${i} (${o})`,a,e.countParams().toString(),l];a0(u,t,r);for(let c=1;c<s.length;++c)a0(["","","",s[c]],t,r)}function H7(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function Lu(e,t){if(e===null)return null;if(typeof e=="string")return Mi(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];H7(t,a,s)?n.push(s):n.push(Lu(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r];if(r==="name"&&typeof a=="string")n[r]=a;else{let s=Mi(r);n[s]=Lu(a,s)}}return n}}function cy(e,t){if(e==null)return null;if(typeof e=="string")return ma(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];H7(t,a,s)?n.push(s):n.push(cy(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r],s=ma(r);(r==="name"||r==="className")&&typeof a=="string"?n[s]=a:n[s]=cy(a,r)}return n}}var uy="3.3.0";function Rte(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return we(t,e.dtype)}catch(n){throw new B(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var zi=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof zi)for(let t in e.id2Value)this.id2Value[t]=e.id2Value[t],t in e.id2Mask&&(this.id2Mask[t]=e.id2Mask[t]);else{if(e==null)return;for(let t of e)this.add(t.key,t.value)}}add(e,t,n){if(this.id2Value[e.id]==null)this.id2Value[e.id]=Rte(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new B(`Duplicate key: name=${e.name}, id=${e.id}`);return this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return this.id2Value[e.id]!=null}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof Er){if(this.id2Value[e.id]==null)throw new B(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new B(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof Er){if(this.id2Value[e.id]==null)throw new B(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new B(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&Ie(this.id2Mask)}},hy={},G7={};function Wu(e,t,n,r){let a=n==null?!1:n.training,s=Array.isArray(e),i=s?e:[e],o=i.map(f=>f.name),l=[],u=t.names();for(let f of o)u.indexOf(f)!==-1?l.push(t.getValue(f)):l.push(null);r!=null&&(r.maxNumTensors=-Infinity,r.minNumTensors=Infinity);let c=o.join(",")+"|"+t.names().join(","),h,d;if(hy[c]==null){let f=Mte(i,t);h=f.sorted,d=f.recipientCounts,hy[c]=h,G7[c]=d}h=hy[c],d={},a||Object.assign(d,G7[c]);let p=new zi(t);for(let f=0;f<h.length;++f){if(r!=null){let E=_d().numTensors;E>r.maxNumTensors&&(r.maxNumTensors=E),E<r.minNumTensors&&(r.minNumTensors=E)}let m=h[f],A=m.sourceLayer;if(A instanceof ql)continue;let y=[],g=[],w=[],b=!1;for(let E of m.inputs){let F=p.getValue(E),P=p.getMask(E);y.push(F),g.push(P),P!=null&&(b=!0),a||(d[E.name]--,d[E.name]===0&&!t.hasKey(E)&&o.indexOf(E.name)===-1&&!F.isDisposed&&E.sourceLayer.stateful!==!0&&w.push(F))}b&&(n=n||{},n.mask=g[0]);let _=mt(A.apply(y,n)),x=null;A.supportsMasking&&(x=A.computeMask(y,g));let S=Fte(m),T=Array.isArray(S)?S:[S];for(let E=0;E<T.length;++E){p.hasKey(T[E])||p.add(T[E],_[E],Array.isArray(x)?x[0]:x);let F=o.indexOf(T[E].name);F!==-1&&(l[F]=_[E])}a||Ie(w)}return p.disposeMasks(),s?l:l[0]}function Mte(e,t){v.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let a=q7(e[0],t);n=a.sorted,r=a.recipientMap}else{let a=new Set;for(let s of e){let{sorted:i,recipientMap:o}=q7(s,t);for(let l of i)a.has(l.name)||(n.push(l),a.add(l.name));for(let l in o)r[l]==null&&(r[l]=new Set),o[l].forEach(u=>r[l].add(u))}}return{sorted:n,recipientCounts:$te(r)}}function $te(e){let t={};for(let n in e)t[n]=e[n].size;return t}function q7(e,t){let n=new Set,r=[],a={};for(let o of t.names())n.add(o);let s=[],i=[];for(s.push(e);s.length>0;){let o=s[s.length-1];if(n.has(o.name)){s.pop();continue}let l=i[i.length-1]===s.length-1;if(o.inputs.length===0||l)s.pop(),r.push(o),n.add(o.name),l&&i.pop();else{i.push(s.length-1);for(let u of o.inputs)a[u.name]==null&&(a[u.name]=new Set),a[u.name].add(o.name),!n.has(u.name)&&s.push(u)}}return{sorted:r,recipientMap:a}}function Fte(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;r<e.sourceLayer.inboundNodes.length;++r)for(let a of e.sourceLayer.inboundNodes[r].outputTensors)if(a.id===e.id){n=r;break}t=e.sourceLayer.getOutputAt(n)}return t}var Yr=class extends Ze{constructor(e){super({});if(this.containerNodes=new Set,this.name=e.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=qp(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],Xa(this.inputs).length!==this.inputs.length)throw new B(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);Xa(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let g=y.sourceLayer,w=y.nodeIndex,b=y.tensorIndex;this.outputLayers.push(g),this.outputLayersNodeIndices.push(w),this.outputLayersTensorIndices.push(b)}for(let y of this.inputs){let g=y.sourceLayer,w=y.nodeIndex,b=y.tensorIndex;qr(w===0,"input layer has >1 nodes"),qr(b===0,"input layer has >1 tensors"),this.inputLayers.push(g),this.inputLayersNodeIndices.push(w),this.inputLayersTensorIndices.push(b)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;y<this.inputLayers.length;y++){let g=this.inputLayers[y];if(!(g instanceof ql))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${y} (0-based) originates from layer type ${g.getClassName()}.`);this.inputNames.push(g.name),this.feedInputShapes.push(g.batchInputShape),this.feedInputNames.push(g.name)}for(let y of this.outputLayers)this.outputNames.push(y.name);this.internalInputShapes=this.inputs.map(y=>y.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let t={},n={},r={},a={},s={},i=[],o=(y,g,w,b,_,x)=>{(b==null||_==null||x==null)&&(b=y.sourceLayer,_=y.nodeIndex,x=y.tensorIndex);let S=b.inboundNodes[_];if(w.indexOf(S)!==-1)throw new Nr(`The tensor ${y.name} at layer "${b.name}" is part of a cycle.`);if(g.indexOf(S)!==-1)return;this.containerNodes.add(Yr.nodeKey(b,_)),b.id in s||(s[b.id]=Object.keys(s).length),w.indexOf(S)===-1&&w.push(S);let T=S.inboundLayers.length;for(let E=0;E<T;E++){let F=S.inputTensors[E],P=S.inboundLayers[E],W=S.nodeIndices[E],V=S.tensorIndices[E];o(F,g,w,P,W,V)}for(g.push(S);w.indexOf(S)>=0;)w.splice(w.indexOf(S),1);i.push(S)},l=[],u=[];for(let y of this.outputs)o(y,l,u);let c=i.slice().reverse();for(let y of c){n[y.id]=y,y.id in t||(t[y.id]=0);let g=t[y.id],w=r[y.outboundLayer.id]==null?0:r[y.outboundLayer.id];g=Math.max(g,w),r[y.outboundLayer.id]=g,a[y.outboundLayer.id]=y.outboundLayer,t[y.id]=g;for(let b=0;b<y.inboundLayers.length;b++){let _=y.inboundLayers[b],x=y.nodeIndices[b],S=_.inboundNodes[x],T=t[S.id]==null?0:t[S.id];t[S.id]=Math.max(g+1,T),n[S.id]=S}}let h={};for(let y in t){let g=t[y];g in h||(h[g]=[]),h[g].push(n[y])}let d={};for(let y in r){let g=r[y];g in d||(d[g]=[]),d[g].push(a[y])}let p=Object.keys(d).map(y=>parseInt(y,10)).sort(Op);this.layers=[];for(let y of p){let g=d[y];g.sort((w,b)=>{let _=s[w.id],x=s[b.id];return _<x?-1:_>x?1:0});for(let w of g)w instanceof Yr&&this.internalContainerRefs.push(w),this.layers.push(w)}this.layersByDepth=d,p=Object.keys(h).map(y=>parseInt(y,10)).sort(Op);let f=this.inputs.slice(),m=[];for(let y of p)for(let g of h[y]){let w=g.outboundLayer;if(w!=null){for(let b of g.inputTensors)if(f.indexOf(b)===-1)throw new Nr(`Graph disconnected: cannot obtain value for tensor ${b} at layer "${w.name}". The following previous layers were accessed without issue: ${m}`);for(let b of g.outputTensors)f.push(b);m.push(w.name)}}this.nodesByDepth=h;let A=this.layers.map(y=>y.name);for(let y of A){let g=A.filter(w=>w===y).length;if(g!==1)throw new Nr(`The name "${y}" is used ${g} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(A))}this.outboundNodes=[],this.inboundNodes=[],new Zp({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount==0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new B("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},r=0;for(let s of this.layers)for(let i of s.weights){if(n[i.originalName]!=null)throw new B(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,r++}let a=[];for(let s in e){let i=s;if(n[s]==null){let o=s.split("/");i=o.slice(0,-2).concat([o[o.length-1]]).join("/")}if(n[i]!=null)a.push([n[i],e[s]]);else if(t)throw new B(`Provided weight data has no target variable: ${s}`);delete n[i]}if(t){let s=[];for(let i in n)s.push(i);if(s.length>0)throw new B(`${s.length} of ${r} weights are not set: ${s}`)}ny(a)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${uy}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=cy(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return z(()=>{e=mt(e);let n=new zi;for(let r=0;r<this.inputs.length;++r)n.add(this.inputs[r],e[r]);return Wu(this.outputs,n,t)})}computeMask(e,t){return z(()=>{e=mt(e);let n;return t==null?n=Ri(null,e.length):n=mt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Xp(e);if(t.length!==this.inputLayers.length)throw new B(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;i<t.length;i++){let o=this.inputLayers[i],l=t[i],u=o.name+"_0_0";n[u]=l}let r=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(Op);if(r.length>1)for(let i of r){let o=this.nodesByDepth[i];for(let l of o){let u=l.outboundLayer;if(this.inputLayers.map(f=>f.id).indexOf(u.id)!==-1)continue;let c=[];for(let f=0;f<l.inboundLayers.length;f++){let m=l.inboundLayers[f],A=l.nodeIndices[f],y=l.tensorIndices[f],g=`${m.name}_${A}_${y}`,w=n[g];c.push(w)}let h=u.computeOutputShape(Rn(c)),d=Xp(h),p=u.inboundNodes.indexOf(l);for(let f=0;f<d.length;f++){let m=`${u.name}_${p}_${f}`;n[m]=d[f]}}}let a=[],s=[];for(let i=0;i<this.outputLayers.length;i++){let o=this.outputLayers[i],l=this.outputLayersNodeIndices[i],u=this.outputLayersTensorIndices[i],c=`${o.name}_${l}_${u}`;s.push(c)}for(let i=0;i<s.length;i++){let o=s[i];qr(o in n),a.push(n[o])}return Rn(a)}runInternalGraph(e,t){t==null&&(t=Ri(null,e.length));let n={};for(let o=0;o<this.inputs.length;++o){let l=this.inputs[o],u=e[o],c=t[o];n[l.id]=[u,c]}let r=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(Op);for(let o of r){let l=this.nodesByDepth[o];for(let u of l){let c=u.outboundLayer,h=u.inputTensors,d=u.outputTensors,p=new Array;for(let f of h)f.id in n&&p.push(n[f.id]);if(p.length===h.length){let f={},m,A,y,g;if(u.callArgs!=null&&(f=u.callArgs),p.length===1){let[w,b]=p[0];f.mask==null&&(f.mask=b),y=mt(c.call(w,f)),g=mt(c.computeMask(w,b)),m=[w],A=[b]}else m=p.map(w=>w[0]),A=p.map(w=>w[1]),f.mask==null&&(f.mask=A),y=mt(c.call(m,f)),g=mt(c.computeMask(m,A));if(c.activityRegularizer)throw new ze("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let w=0;w<d.length;++w){let b=d[w],_=y[w],x=g[w];n[b.id]=[_,x]}}}}let a=[],s=[],i=[];for(let o of this.outputs){qr(o.id in n,`Could not compute output ${o.name} : ${o.id}`);let[l,u]=n[o.id];i.push(l.shape),a.push(l),s.push(u)}return[a,s,i]}buildNodeConversionMap(e){let t={},n;for(let r of this.layers){n=r instanceof Yr?1:0;for(let a=0;a<r.inboundNodes.length;a++){let s=Yr.nodeKey(r,a);this.containerNodes.has(s)&&(t[s]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new B(`Was asked to retrieve layer at index ${t}, but model only has ${this.layers.length} layer(s).`);return this.layers[t]}else if(e==null)throw new B("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new B(`No such layer: ${e}`)}calculateLosses(){return z(()=>{let e=[];for(let t of this.layers)for(let n=0;n<t.inboundNodes.length;++n){let r=Yr.nodeKey(t,n);this.containerNodes.has(r)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let s of this.layers){let i=s.getClassName(),o=s.getConfig(),l=[];for(let c=0;c<s.inboundNodes.length;c++){let h=s.inboundNodes[c],d=Yr.nodeKey(s,c),p={};if(this.containerNodes.has(d)){if(h.callArgs)try{JSON.stringify(h.callArgs),p=h.callArgs}catch(f){console.warn(`Layer ${s.name} was passed non-serializable keyword arguments: ${h.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),p={}}if(h.inboundLayers.length>0){let f=[];for(let m=0;m<h.inboundLayers.length;m++){let A=h.inboundLayers[m],y=h.nodeIndices[m],g=h.tensorIndices[m],w=Yr.nodeKey(A,y),b=t[w];b==null&&(b=0),f.push([A.name,b,g,p])}l.push(f)}}}let u={};u.name=s.name,u.className=i,u.config=o,u.inboundNodes=l,n.push(u)}e.layers=n;let r=[];for(let s=0;s<this.inputLayers.length;s++){let i=this.inputLayers[s],o=this.inputLayersNodeIndices[s],l=Yr.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let c=this.inputLayersTensorIndices[s];r.push([i.name,u,c])}e.inputLayers=r;let a=[];for(let s=0;s<this.outputLayers.length;s++){let i=this.outputLayers[s],o=this.outputLayersNodeIndices[s],l=Yr.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let c=this.outputLayersTensorIndices[s];a.push([i.name,u,c])}return e.outputLayers=a,e}static fromConfig(e,t,n={},r=!1){let a={},s={};function i(m,A){m.name in s?s[m.name].push(A):s[m.name]=[A]}function o(m,A){let y=[],g;for(let w of A){let b=w[0],_=w[1],x=w[2];if(g=w[3]==null?{}:w[3],!(b in a)){i(m,A);return}let S=a[b];if(S.inboundNodes.length<=_){i(m,A);return}let T=S.inboundNodes[_];y.push(T.outputTensors[x])}y.length>0&&m.apply(Rn(y),g)}function l(m){let A=m.name,y=Cr(m,t.customObjects!=null?t.customObjects:{});y.setFastWeightInitDuringBuild(r),a[A]=y,m.inboundNodes.forEach(g=>{if(!(g instanceof Array))throw new B(`Corrupted configuration, expected array for nodeData: ${g}`);i(y,g)})}let u=t.name,c=t.layers;for(let m of c)l(m);for(;!iQ(s);)for(let m of c){let A=a[m.name];if(A.name in s){let y=s[A.name];delete s[A.name];for(let g of y)o(A,g)}}let h=[],d=[],p=t.inputLayers;for(let m of p){let A=m[0],y=m[1],g=m[2];qr(A in a);let w=a[A].inboundNodes[y].outputTensors;h.push(w[g])}let f=t.outputLayers;for(let m of f){let A=m[0],y=m[1],g=m[2];qr(A in a);let w=a[A].inboundNodes[y].outputTensors;d.push(w[g])}return new e({inputs:h,outputs:d,name:u})}get stateful(){if(this._stateful)throw new B("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){z(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function Dte(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(a=>null);if(r===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let a=[];return t.forEach(s=>{s in e?a.push(e[s]):a.push(null)}),a}else throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function X7(e,t){return Dte(e,t,"classWeight")}async function K7(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let a=z(()=>{if(e.shape.length===1)return e.clone();if(e.shape.length===2)if(e.shape[1]>1){let o=1;return e.argMax(o)}else{if(e.shape[1]===1)return e.reshape([e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),s=Array.from(await a.data());Ie(a);let i=[];return s.forEach(o=>{if(n[o]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${o} exists in the data but not in classWeight`);i.push(n[o])}),un(i,"float32")}else return null}function Ote(e,t){return O(e,t)}var zte=32;function Y7(e,t){let n,r,a=t;n=a.xs,r=a.ys,v.assert(n!=null&&r!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let s=Z7("input",e.inputNames,n),i=Z7("output",e.outputNames,r),o=s[0].shape[0];v.assert(s.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),v.assert(i.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l<s.length;l++)v.assert(s[l].shape[0]===o,()=>`Batch size mismatch: input ${e.inputNames[l]} has ${s[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);for(let l=0;l<i.length;l++)v.assert(i[l].shape[0]===o,()=>`Batch size mismatch: output ${e.outputNames[l]} has ${i[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);return{xs:s,ys:i}}function Z7(e,t,n){if(n instanceof He)return[n];if(Array.isArray(n))return v.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let r=[];for(let a of t){if(n[a]==null)throw new B(`The feature data generated by the dataset lacks the required ${e} key '${a}'.`);r.push(n[a])}return r}}function Pte(e){if(e.length===3)throw new ze("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function Wte(e,t,n){let r=n.batchesPerEpoch!=null;if(v.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),v.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),v.assert(n.epochs!=null&&n.epochs>0&&Number.isInteger(n.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`),v.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),v.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let a=n.validationData!=null,s,i;if(a)if(J7(n.validationData))v.assert(n.validationBatches==null||n.validationBatches>0&&Number.isInteger(n.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`);else{let A=Pte(n.validationData);s=A.xs,i=A.ys}let o=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),u;a?u=l.slice().concat(l.map(A=>"val_"+A)):u=l.slice();let c=O7(n.callbacks,n.yieldEvery),h=n.verbose==null?1:n.verbose,{callbackList:d,history:p}=z7(c,h,n.epochs,null,null,Lte(t,n),null,a,u);d.setModel(e),e.history=p,await d.onTrainBegin(),e.stopTraining_=!1;let f=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;f<n.epochs;){let A={};await d.onEpochBegin(f);let y=0,g=0;for(r||(m=await t.iterator());r?y<n.batchesPerEpoch:!0;){let w=await m.next();if(r&&w.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${y} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(w.value!=null){let{xs:b,ys:_}=Y7(e,w.value),x={};x.batch=g,x.size=b[0].shape[0],await d.onBatchBegin(g,x);let S=[];if(n.classWeight!=null){let F=X7(n.classWeight,e.outputNames);for(let P=0;P<F.length;++P)S.push(await K7(_[P],null,F[P]))}let T=b.concat(_).concat(S),E=o(T);Ie(T);for(let F=0;F<l.length;++F){let P=l[F],W=E[F];x[P]=W,qt(W)}await d.onBatchEnd(g,x),R7(x),g++,y++}if(r?y>=n.batchesPerEpoch:w.done){if(a){let b;J7(n.validationData)?b=mt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):b=mt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?zte:n.validationBatchSize,verbose:0}));for(let _=0;_<e.metricsNames.length;++_)A[`val_${e.metricsNames[_]}`]=b[_]}break}if(e.stopTraining_)break}if(await d.onEpochEnd(f,A),f++,e.stopTraining_)break}return await d.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function Lte(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function J7(e){return typeof e.iterator=="function"}function Bte(e){return typeof e.next=="function"}async function Vte(e,t,n){n=n||{};let r=n.batches!=null,a=e.testFunction,s=[];if(n.verbose>0)throw new ze("Verbose mode is not implemented yet.");v.assert(!r||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let i=Bte(t)?t:await t.iterator(),o=0,l=0;for(;r?l<n.batches:!0;){let u=await i.next();if(s=z(()=>{if(u.value){let{xs:c,ys:h}=Y7(e,u.value),d=c.concat(h),p=z(()=>a(d));if(Ie(d),l===0)for(let m=0;m<p.length;++m)s.push(be(0));let f=d[0].shape[0];for(let m=0;m<p.length;++m){let A=p[m],y=s[m];s[m]=z(()=>ie(s[m],O(f,A))),l>0&&Ie(y)}Ie(p),o+=f,++l}return s}),u.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u<s.length;++u){let c=s[u];s[u]=ge(s[u],o),Ie(c)}return Rn(s)}function dy(e){v.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Bu(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>Di(r,t,n-t)):Di(e,t,n-t)}function py(e,t){return z(()=>e==null?null:Array.isArray(e)?e.map(n=>py(n,t)):A7(e,t.dtype==="int32"?t:t.toInt()))}function fy(e,t){let n=[],r=0,a=null;for(;r<e;)a=r+t,a>=e&&(a=e),n.push([r,a]),r=a;return n}async function Ute(e,t,n,r,a,s,i,o,l,u,c,h,d,p,f){a==null&&(a=32),s==null&&(s=1),c==null&&(c=!0),d==null&&(d=0);let m=!1;if(l!=null&&u!=null&&(m=!0),f!=null&&(m=!0,p==null))throw new B("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let A=e.checkNumSamples(n,a,p,"steps_per_epoch"),y;A!=null&&(y=Tr(0,A)),i==null&&(i=1);let{callbackList:g,history:w}=z7(o,i,s,d,A,p,a,m,h);g.setModel(e),e.history=w,await g.onTrainBegin(),e.stopTraining_=!1;for(let b=d;b<s;++b){await g.onEpochBegin(b);let _={};if(p!=null)throw new ze("stepsPerEpoch mode is not implemented yet.");{if(c==="batch")throw new ze("batch shuffling is not implemneted yet");c&&v.shuffle(y);let x=un(y),S=fy(A,a);for(let T=0;T<S.length;++T){let E={};if(await g.onBatchBegin(T,E),z(()=>{let F=S[T][0],P=S[T][1],W=Di(x,F,P-F);E.batch=T,E.size=P-F;let V=py(n,W),U=t(V);for(let H=0;H<r.length;++H){let X=r[H],G=U[H];E[X]=G,qt(G)}if(T===S.length-1&&m){let H=e.testLoop(l,u,a);for(let X=0;X<r.length;++X){let G=r[X],ee=H[X];qt(ee),_["val_"+G]=ee}}}),await g.onBatchEnd(T,E),R7(E),e.stopTraining_)break}x.dispose()}if(await g.onEpochEnd(b,_),e.stopTraining_)break}return await g.onTrainEnd(),await e.history.syncData(),e.history}async function jte(e,t,n,r={}){if(e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;let a,s,i,o,l,u,c;try{let h=r.batchSize==null?32:r.batchSize;dy(h);let d=!1,p=await e.standardizeUserData(t,n,r.sampleWeight,r.classWeight,d,h);a=p[0],s=p[1],c=p[2];let f=!1,m;if(r.validationData!=null&&r.validationData.length>0){if(f=!0,r.validationData.length===2)i=r.validationData[0],o=r.validationData[1];else throw r.validationData.length===3?new ze("validationData including sample weights is not supported yet."):new B(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let x=!0,S=await e.standardizeUserData(i,o,null,null,x,h);l=S[0],u=S[1],m=l.concat(u)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){f=!0;let x=Math.floor(a[0].shape[0]*(1-r.validationSplit)),S=a[0].shape[0];l=Bu(a,x,S),a=Bu(a,0,x),u=Bu(s,x,S),s=Bu(s,0,x),m=l.concat(u)}else r.validationSteps!=null&&(f=!0);let A=a.concat(s).concat(c);e.checkTrainableWeightsConsistency();let y=e.makeTrainFunction(),g=e.getDedupedMetricsNames(),w,b;f?(e.makeTestFunction(),w=e.testFunction,b=g.slice().concat(g.map(x=>"val_"+x))):(w=null,m=[],b=g.slice());let _=O7(r.callbacks,r.yieldEvery);return await Ute(e,y,A,g,h,r.epochs,r.verbose,_,w,m,r.shuffle,b,r.initialEpoch,null,null)}finally{e.isTraining=!1,Pi(a,t),Pi(s,n),Pi(l,i),Pi(u,o),c!=null&&Ie(c)}}function Q7(e){let t=[];e instanceof He&&(e=[e]);for(let n=0;n<e.length;++n){let r=e[n];if(r.rank===1)t.push($u(r,1));else{if(r.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(r)}}return t}function Pi(e,t){if(e==null)return;let n=[];if(t instanceof He)n.push(t.id);else if(Array.isArray(t))t.forEach(a=>n.push(a.id));else if(t!=null)for(let a in t){let s=t[a];n.push(s.id)}let r=[];if(e instanceof He)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(a=>{n.indexOf(a.id)===-1&&r.push(a)});else if(e!=null)for(let a in e){let s=e[a];n.indexOf(s.id)===-1&&r.push(s)}r.forEach(a=>{a.isDisposed||a.dispose()})}function Hte(e){return e instanceof He}function my(e){return Array.isArray(e)}function ev(e){return!Hte(e)&&!my(e)}function tv(e,t,n,r=!0,a=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(my(e)&&e.length>0)i=!0;else if(ev(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new B(`Error when checking model ${a} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(ev(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new B(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(my(e)){if(e=e,e.length!==t.length)throw new B(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);s=e}else{if(e=e,t.length>1)throw new B(`The model ${a} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=Q7(s),n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new B(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s). but got array with shape ${o.shape}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let u=o.shape[l],c=n[i][l];if(c!=null&&c>=0&&u!==c)throw new B(`Error when checking ${a}: expected ${t[i]} to have shape [${n[i]}], but got array with shape [${o.shape}].`)}}return s}function Gte(e,t,n){let r=Xa(e.map(s=>s.shape[0]));r.sort();let a=Xa(t.map(s=>s.shape[0]));if(a.sort(),r.length>1)throw new B(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(s=>s.shape))}`);if(a.length>1)throw new B(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(r.length>0&&a.length>0&&!v.arraysEqual(r,a))throw new B(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${a[0]} target sample(s).`)}function qte(e,t,n){let r=[Oi,e0,Pu];for(let a=0;a<e.length;++a){let s=e[a],i=t[a],o=n[a];if(i!=null){if(i===Pu&&s.shape[s.shape.length-1]===1)throw new B(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(r.indexOf(i)!==-1){let l=s.shape.slice(1),u=o.slice(1);for(let c=0;c<l.length;++c){let h=l[c],d=u[c];if(d!=null&&h!==d)throw new B(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function nv(e,t,n,r=!0,a=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new B(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new B(`The model expects ${t.length} ${a} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new B(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s), but got array with shape ${JSON.stringify(o.shape)}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let u=o.shape[l],c=n[i][l];if(c!=null&&c!==u)throw new B(`Error when checking ${a}: expected ${t[i]} to have shape ${JSON.stringify(n[i])} but got array with shape ${JSON.stringify(o.shape)}.`)}}}function Xte(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(r=>n);{let r=[];for(let a of t){let s=n.hasOwnProperty(a)?n[a]:[];Array.isArray(s)||(s=[s]),r.push(s)}return r}}var Kte="layers-model",Aa=class extends Yr{constructor(e){super(e);this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new B("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");Cte(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=Ite(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof da))throw new B("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let s in e.loss)if(this.outputNames.indexOf(s)===-1)throw new B(`Unknown entry in loss dictionary: "${s}". Only expected the following keys: ${this.outputNames}`);for(let s of this.outputNames)e.loss[s]==null&&console.warn(`Output "${s}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${s} during training`),t.push(ay(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new B(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(s=>ay(s))}else{let s=ay(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s<this.outputs.length;++s){let i=this.internalOutputShapes[s],o=this.outputNames[s];this.feedOutputNames.push(o),this.feedOutputShapes.push(i),this.feedLossFns.push(this.lossFunctions[s])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],$i("loss",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=this.lossFunctions[s];this.outputs.length>1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let r=Xte(e.metrics,this.outputNames),a=(s,i,o)=>{this.outputNames.length>1&&(i=this.outputNames[s]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([o,s])};$i("metric",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=r[s];(o=>{let l="",u,c,h;for(let d of o){if(typeof d=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(d)!==-1){let f=this.internalOutputShapes[s];f[f.length-1]===1||this.lossFunctions[s]===e0?["accuracy","acc"].indexOf(d)!==-1?c=sy:["crossentropy","ce"].indexOf(d)!==-1&&(c=W7):this.lossFunctions[s]===Qp?["accuracy","acc"].indexOf(d)!==-1?c=B7:["crossentropy","ce"].indexOf(d)!==-1&&(c=V7):["accuracy","acc"].indexOf(d)!==-1?c=iy:["crossentropy","ce"].indexOf(d)!==-1&&(c=oy);let m;["accuracy","acc"].indexOf(d)!==-1?m="acc":["crossentropy","ce"].indexOf(d)!==-1&&(m="ce"),h=c,u=l+m}else h=kte(d),u=l+r0(d);let p;$i(u,()=>{p=h}),a(s,u,p)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let r=n.batchSize==null?32:n.batchSize;dy(r);let a=!0,s=this.standardizeUserDataXY(e,t,a,r);try{let i=s[0].concat(s[1]);this.makeTestFunction();let o=this.testFunction,l=this.testLoop(o,i,r,n.verbose,n.steps);return Rn(l)}finally{Pi(s[0],e),Pi(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),Vte(this,e,t)}checkNumSamples(e,t,n,r="steps"){let a;if(n!=null){if(a=null,t!=null)throw new B(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?a=e[0].shape[0]:a=e.shape[0];else throw new B(`Either the input data should have a defined shape, or ${r} shoud be specified.`);return a}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new B("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],a=this.retrieveSymbolicTensors(r),s=new zi;if(e instanceof He&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new B(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;o<this.inputs.length;++o)s.add(this.inputs[o],e[o])}else for(let o of this.inputs){let l=e[o.name];if(l==null)throw new B(`No value is provided for the model's input ${o.name}`);s.add(o,l)}let i=Wu(a,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=Ri(null,e.length),n=e.length;for(let r of this.layers){let a=Array.isArray(r.output)?r.output:[r.output],s=a.map(i=>i.name);for(let i=0;i<e.length;++i){let o=s.indexOf(e[i]);if(o!==-1&&(t[i]=a[o],n--),n===0)break}if(n===0)break}if(n>0){let r=[];throw t.forEach((a,s)=>{a==null&&r.push(e[s])}),new B(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(r)}`)}return t}predictLoop(e,t=32,n=!1){return z(()=>{let r=this.checkNumSamples(e);if(n)throw new ze("Verbose predictLoop() is not implemented yet.");let a=fy(r,t),s=this.outputs.map(i=>[]);for(let i=0;i<a.length;++i)z(()=>{let o=a[i][0],l=a[i][1],u=Bu(e,o,l),c=[];if(Array.isArray(u))for(let d=0;d<u.length;++d)c.push({key:this.inputs[d],value:u[d]});else c.push({key:this.inputs[0],value:u});let h=new zi(c);return Wu(this.outputs,h)}).forEach((o,l)=>s[l].push(o));return Rn(s.map(i=>it(i,0)))})}predict(e,t={}){let n=Q7(e);nv(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return dy(r),this.predictLoop(n,r)}finally{Pi(n,e)}}predictOnBatch(e){nv(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(this.optimizer_==null)throw new Nr("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let a=[];for(let s=0;s<this.feedOutputShapes.length;++s){let i=this.feedOutputShapes[s];this.feedLossFns[s]===Qp?a.push(i.slice(0,i.length-1).concat([1])):a.push(i)}if(e=tv(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=tv(t,this.feedOutputNames,a,!1,"target"),Gte(e,t,null),qte(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&r!=null&&r>0&&e[0].shape[0]%r!=0)throw new B(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,a=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,a,s);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(r!=null){let u=X7(r,this.outputNames);l=[];for(let c=0;c<u.length;++c)l.push(await K7(o[c],null,u[c]))}return[i,o,l]}testLoop(e,t,n,r=0,a){return z(()=>{let s=this.checkNumSamples(t,n,a,"steps"),i=[];if(r>0)throw new ze("Verbose mode is not implemented yet.");if(a!=null)throw new ze("steps mode in testLoop() is not implemented yet");{let o=fy(s,n),l=un(Tr(0,s));for(let u=0;u<o.length;++u){let c=o[u][0],h=o[u][1],d=Di(l,c,h-c),p=py(t,d),f=e(p);if(u===0)for(let m=0;m<f.length;++m)i.push(be(0));for(let m=0;m<f.length;++m){let A=f[m];i[m]=ie(i[m],O(h-c,A))}}for(let u=0;u<i.length;++u)i[u]=ge(i[u],s)}return i})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let r=e[n],a=r;r7(e,r)>1&&(a+=`_${r7(e.slice(0,n),r)}`),t.push(a)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),s=[],i=()=>{let u=[];for(let p=0;p<this.inputs.length;++p)u.push({key:this.inputs[p],value:n[p]});let c=new zi(u),h=Wu(this.outputs,c,{training:!0}),d;for(let p=0;p<this.lossFunctions.length;++p){let f=this.lossFunctions[p](r[p],h[p]);a[p]!=null&&(f=Ote(f,a[p]));let m=Nt(f);t.push(m),p===0?d=f:d=ie(d,f)}for(let p=0;p<this.metricsTensors.length;++p){let f;if(this.outputs.length>1&&p<this.outputs.length)f=t[p];else{let m=this.metricsTensors[p][0],A=this.metricsTensors[p][1];f=Nt(m(r[A],h[A]))}qt(f),s.push(f)}return d=Nt(d),this.calculateLosses().forEach(p=>{d=ie(d,p)}),d},o=this.collectedTrainableWeights.map(u=>u.read()),l=!0;return[this.optimizer_.minimize(i,l,o)].concat(s)}}makeTestFunction(){this.testFunction=e=>z(()=>{let t=[],n,r=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let l=0;l<this.inputs.length;++l)s.push({key:this.inputs[l],value:r[l]});let i=new zi(s),o=Wu(this.outputs,i);for(let l=0;l<this.lossFunctions.length;++l){let u=this.lossFunctions[l],c=Nt(u(a[l],o[l]));l===0?n=c:n=ie(n,c),t.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let u=this.metricsTensors[l][0],c=this.metricsTensors[l][1],h=Nt(u(a[c],o[c]));t.push(h)}return t})}async fit(e,t,n={}){return jte(this,e,t,n)}async fitDataset(e,t){return Wte(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),r=n[0],a=n[1],s=this.makeTrainFunction()(r.concat(a)),i=[];for(let o of s){let l=await o.data();i.push(l[0])}return Ie(s),Rn(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,r=n?this.trainableWeights:this.weights,a=this.getWeights(n);for(let s=0;s<r.length;++s)n&&!r[s].trainable||t.push({name:r[s].originalName,tensor:a[s]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=_d().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-_d().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=ma(this.loss);else if(Array.isArray(this.loss)){for(let t of this.loss)if(typeof t!="string")throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map(t=>ma(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let r of t)if(typeof n[r]=="string")e[r]=ma(n[r]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[ma(r0(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>ma(r0(e)));{let e={};for(let t in this.metrics)e[t]=ma(r0(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(e.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(e.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(e.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let t=Lu(e.optimizer_config),n=Cr(t),r;if(typeof e.loss=="string")r=Mi(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(s=>Mi(s));else if(e.loss!=null){r={};for(let s in e.loss)r[s]=Mi(e.loss[s])}let a;if(Array.isArray(e.metrics))a=e.metrics.map(s=>Mi(s));else if(e.metrics!=null){a={};for(let s in e.metrics)a[s]=Mi(e.metrics[s])}this.compile({loss:r,metrics:a,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=kn.getSaveHandlers(e);if(i.length===0)throw new B(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new B(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new B("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await kn.encodeWeights(this.getNamedWeights(t)),r=!1,a=null,s={modelTopology:this.toJSON(a,r),format:Kte,generatedBy:`TensorFlow.js tfjs-layers v${uy}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await kn.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=kn.concatenateArrayBuffers([n.data,o])}if(this.userDefinedMetadata!=null){let i=!0;j7(this.userDefinedMetadata,this.name,i),s.userDefinedMetadata=this.userDefinedMetadata}return s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){j7(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Aa.className="Model";ae.registerClass(Aa);var rv=class extends Aa{};rv.className="Functional";ae.registerClass(rv);async function Zte(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=Lu(n),a=Cr(r,t);if(e.weightsManifest!=null){let s=await kn.loadWeights(e.weightsManifest,e.pathPrefix,a.weights.map(o=>o.originalName)),i={};for(let o of a.weights)i[o.originalName]=s[o.originalName];a.loadWeights(i),Ie(s)}return a}async function Jte(e,t){if(t==null&&(t={}),typeof e=="string"){let n=kn.getLoadHandlers(e,t);if(n.length===0)n.push(kn.browserHTTPRequest(e,t));else if(n.length>1)throw new B(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return Yte(e,void 0,t)}async function Yte(e,t,n){if(n==null&&(n={}),e.load==null)throw new B("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),a=r.modelTopology;a.model_config!=null&&(a=a.model_config);let s=n.strict==null?!0:n.strict,i=r.weightData!=null&&r.weightSpecs!=null&&s,o=Cr(Lu(a),t,i),l=r.trainingConfig;if(l!=null&&o.loadTrainingConfig(l),r.userDefinedMetadata!=null&&o.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new B("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:c}=Qte(r.weightData,r.weightSpecs);o.loadWeights(u,s),o.optimizer!=null&&c.length>0&&await o.optimizer.setWeights(c),Ie(u),Ie(c.map(h=>h.tensor))}return o}function Qte(e,t){let n=kn.decodeWeights(e,t),r={},a=[];return t.forEach(s=>{s.group==="optimizer"?a.push({name:s.name,tensor:n[s.name]}):r[s.name]=n[s.name]}),{modelWeights:r,optimizerWeights:a}}var Zl=class extends Aa{constructor(e){super({inputs:[],outputs:[]});if(e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:qp("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(t=>t<0))throw new B(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Zl||e instanceof Aa,n;if(t){if(n=e,n.outputs.length!==1)throw new B("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new B("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new B("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let r=C7({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(r)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new B(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new B("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=E7(this.outputs[0])}this.inboundNodes=[],new Zp({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Ri(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(r=>r.shape),outputShapes:this.outputs[0].shape})}else{let r=e.apply(this.outputs[0]);if(Array.isArray(r))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[r],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(ht(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Aa({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new Nr("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new Nr("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new Nr("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new Nr("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},r=!1){let a,s={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new B("Legacy serialization format not supported yet.");a=t}else v.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),a=t.layers,delete t.layers,s=t;let i=new e(s);if(!(i instanceof Zl))throw new ze(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of a){let l=Cr(o,void 0,r);r&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new B("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new B("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};Zl.className="Sequential";ae.registerClass(Zl);function ene(e){return new Aa(e)}function tne(e){return new Zl(e)}function nne(e,t){return t==null&&(t={}),Jte(e,t)}function b7(e){return C7(e)}function rne(e,t){fr.registerCallbackConstructor(e,t)}var Un=class extends ae.Serializable{getConfig(){return{}}},av=class extends Un{apply(e,t=1){return DQ(e,t)}};av.className="elu";ae.registerClass(av);var sv=class extends Un{apply(e){return Bd(e)}};sv.className="selu";ae.registerClass(sv);var iv=class extends Un{apply(e){return Ur(e)}};iv.className="relu";ae.registerClass(iv);var ov=class extends Un{apply(e){return z(()=>kl(6,Ur(e)))}};ov.className="relu6";ae.registerClass(ov);var lv=class extends Un{apply(e){return e}};lv.className="linear";ae.registerClass(lv);var cv=class extends Un{apply(e){return On(e)}};cv.className="sigmoid";ae.registerClass(cv);var uv=class extends Un{apply(e){return zQ(e)}};uv.className="hardSigmoid";ae.registerClass(uv);var hv=class extends Un{apply(e){return _l(e)}};hv.className="softplus";ae.registerClass(hv);var dv=class extends Un{apply(e){return OQ(e)}};dv.className="softsign";ae.registerClass(dv);var pv=class extends Un{apply(e){return yl(e)}};pv.className="tanh";ae.registerClass(pv);var Ay=class extends Un{apply(e,t=-1){return cu(e,t)}};Ay.className="softmax";ae.registerClass(Ay);var fv=class extends Un{apply(e,t=-1){return $d(e,t)}};fv.className="logSoftmax";ae.registerClass(fv);var mv=class extends Un{apply(e,t=1){return z(()=>On(e.mul(t)).mul(e))}};mv.className="swish";ae.registerClass(mv);function Ja(e){return e.getClassName()}function yy(e,t={}){return Cu(e,ae.SerializationMap.getMap().classNameMap,t,"activation")}function Qa(e){if(e==null){let t={};return t.className="linear",t.config={},yy(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},yy(t)}else return e instanceof Un?e:yy(e)}function gy(e){if(e!=null&&typeof e!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}var Av=class extends ae.Serializable{},Vu=class extends Av{constructor(e){super();gy(e),this.l1=e==null||e.l1==null?.01:e.l1,this.l2=e==null||e.l2==null?.01:e.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(e){return z(()=>{let t=Ft([1]);return this.hasL1&&(t=ie(t,Me(O(this.l1,Lt(e))))),this.hasL2&&(t=ie(t,Me(O(this.l2,Du(e))))),t.asScalar()})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Vu.className="L1L2";ae.registerClass(Vu);function ane(e){return gy(e),new Vu({l1:e!=null?e.l1:null,l2:0})}function sne(e){return gy(e),new Vu({l2:e!=null?e.l2:null,l1:0})}var yv={l1l2:"L1L2"};function dt(e){return MA(e)}function gv(e,t={}){return Cu(e,ae.SerializationMap.getMap().classNameMap,t,"regularizer")}function bt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in yv?yv[e]:e,config:{}};return gv(t)}else return e instanceof Av?e:gv(e)}var xy=class extends Ze{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Be(e);let n=Ur(e);return this.maxValue!=null&&(n=In(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};xy.className="ReLU";ae.registerClass(xy);var wy=class extends Ze{constructor(e){super(e==null?{}:e);this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Be(e);return nu(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};wy.className="LeakyReLU";ae.registerClass(wy);var by=class extends Ze{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=wt(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=bt(e.alphaRegularizer),this.alphaConstraint=jt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new B(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=ht(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let r of this.sharedAxes)t[r-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let r=1;r<e.length;++r)n[r]=e[r];this.inputSpec=[new Zt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=Be(e),iu(e,this.alpha.read())}getConfig(){let e={alphaInitializer:Tt(this.alphaInitializer),alphaRegularizer:dt(this.alphaRegularizer),alphaConstraint:Ut(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};by.className="PReLU";ae.registerClass(by);var _y=class extends Ze{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new ze(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Be(e);return wl(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};_y.className="ELU";ae.registerClass(_y);var vy=class extends Ze{constructor(e){super(e==null?{}:e);this.DEFAULT_THETA=1,e==null&&(e={}),this.theta=e.theta==null?this.DEFAULT_THETA:e.theta}call(e,t){let n=Be(e);return n.mul(Fu(n.greater(this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};vy.className="ThresholdedReLU";ae.registerClass(vy);var ky=class extends Ze{constructor(e){super(e==null?{}:e);this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new Ay().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=Be(e);return this.softmax(n,this.axis)}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};ky.className="Softmax";ae.registerClass(ky);function Yl(e,t,n){if(typeof e=="number")return Ri(e,t);if(e.length!==t)throw new B(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r<t;++r){let a=e[r];if(!RQ(a))throw new B(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${a}`)}return e}function Rr(e,t,n,r,a=1){if(e==null)return e;let s=t+(t-1)*(a-1),i;return n==="same"?i=e:i=e-s+1,Math.floor((i+r-1)/r)}function s0(e,t,n,r){if(e==null)return null;if(r==="valid")e=e*t+Za([n-t,0]);else if(r==="same")e=e*t;else throw new B(`Unsupport padding mode: ${r}.`);return e}function Iy(e,t){return z(()=>(Rt(t),t==="channelsFirst"?st(e,[0,2,3,1]):e))}function xv(e,t){return z(()=>(Rt(t),t==="channelsFirst"?st(e,[0,2,3,4,1]):e))}function ine(e,t,n,r=1,a="valid",s,i=1){return z(()=>{if(s==null&&(s=Sr()),Rt(s),e.shape.length!==3)throw new B(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new B(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new B(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=st(e,[0,2,1])),a==="causal")throw new ze("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Sd(e,t,r,a==="same"?"same":"valid","NWC",i);return n!=null&&(o=Kr(o,n)),o})}function wv(e,t,n,r=[1,1],a="valid",s,i,o=null){return z(()=>{if(s==null&&(s=Sr()),Rt(s),e.rank!==3&&e.rank!==4)throw new B(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new B(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=Iy(e,s);if(a==="causal")throw new ze("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=ja.conv2d({x:l,filter:t,strides:r,pad:a==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=st(l,[0,3,1,2])),l})}function one(e,t,n,r=[1,1,1],a="valid",s,i){return z(()=>{if(s==null&&(s=Sr()),Rt(s),e.rank!==4&&e.rank!==5)throw new B(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new B(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=xv(e,s);if(a==="causal")throw new ze("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=fm(o,t,r,a==="same"?"same":"valid","NDHWC",i),n!=null&&(o=Kr(o,n)),s==="channelsFirst"&&(o=st(o,[0,4,1,2,3])),o})}var Sy=class extends Ze{constructor(e,t){super(t);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Sy.verifyArgs(t),this.rank=e,Kt(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new ze(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Yl(t.kernelSize,e,"kernelSize"),this.strides=Yl(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,er(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Rt(this.dataFormat),this.activation=Qa(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=wt(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=jt(t.biasConstraint),this.biasRegularizer=bt(t.biasRegularizer),this.activityRegularizer=bt(t.activityRegularizer),this.dilationRate=Yl(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new B(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new B(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new B(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(qr("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!$A(e.kernelSize,"number",1,3))throw new B(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:Ja(this.activation),useBias:this.useBias,biasInitializer:Tt(this.biasInitializer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),biasConstraint:Ut(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},Uu=class extends Sy{constructor(e,t){super(e,t);this.kernel=null,Uu.verifyArgs(t),this.filters=t.filters,Kt(this.filters,"filters"),this.kernelInitializer=wt(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=jt(t.kernelConstraint),this.kernelRegularizer=bt(t.kernelRegularizer)}build(e){e=ht(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new B(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return z(()=>{e=Be(e);let n,r=this.bias==null?null:this.bias.read(),a=s7(this.activation.getClassName());if(a!=null&&this.rank===2)n=wv(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate,a);else{if(this.rank===1)n=ine(e,this.kernel.read(),r,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=wv(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=one(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new ze("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=ht(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let a=0;a<n.length;++a){let s=Rr(n[a],this.kernelSize[a],this.padding,this.strides[a],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[a]);t.push(s)}let r=[e[0]];return this.dataFormat==="channelsLast"?(r=r.concat(t),r.push(this.filters)):(r.push(this.filters),r=r.concat(t)),r}getConfig(){let e={filters:this.filters,kernelInitializer:Tt(this.kernelInitializer),kernelRegularizer:dt(this.kernelRegularizer),kernelConstraint:Ut(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||typeof e.filters!="number"||e.filters<1)throw new B(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},ju=class extends Uu{constructor(e){super(2,e);ju.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!$A(e.kernelSize,"number",1,2))throw new B(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};ju.className="Conv2D";ae.registerClass(ju);var i0=class extends Uu{constructor(e){super(3,e);i0.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new B(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};i0.className="Conv3D";ae.registerClass(i0);var Ny=class extends ju{constructor(e){super(e);if(this.inputSpec=[new Zt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new B(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=ht(e),e.length!==4)throw new B("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new B("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Zt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return z(()=>{let n=Be(e);if(n.shape.length!==4)throw new B(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,a=r[0],s,i;this.dataFormat==="channelsFirst"?(s=2,i=3):(s=1,i=2);let o=r[s],l=r[i],u=this.kernelSize[0],c=this.kernelSize[1],h=this.strides[0],d=this.strides[1],p=s0(o,h,u,this.padding),f=s0(l,d,c,this.padding),m=[a,p,f,this.filters];this.dataFormat!=="channelsLast"&&(n=st(n,[0,2,3,1]));let A=Nd(n,this.kernel.read(),m,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(A=st(A,[0,3,1,2])),this.bias!=null&&(A=Kr(A,this.bias.read(),this.dataFormat)),this.activation!=null&&(A=this.activation.apply(A)),A})}computeOutputShape(e){e=ht(e);let t=e.slice(),n,r,a;this.dataFormat==="channelsFirst"?(n=1,r=2,a=3):(n=3,r=1,a=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[r]=s0(t[r],o,s,this.padding),t[a]=s0(t[a],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Ny.className="Conv2DTranspose";ae.registerClass(Ny);var bv=class extends Uu{constructor(e,t){super(e,t);if(this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new B("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new B("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new B(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=wt(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=bt(t.depthwiseRegularizer),this.depthwiseConstraint=jt(t.depthwiseConstraint),this.pointwiseInitializer=wt(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=bt(t.pointwiseRegularizer),this.pointwiseConstraint=jt(t.pointwiseConstraint)}build(e){if(e=ht(e),e.length<this.rank+2)throw new B(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null||e[t]<0)throw new B(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],r=this.kernelSize.concat([n,this.depthMultiplier]),a=[];for(let i=0;i<this.rank;++i)a.push(1);a.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",r,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",a,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new Zt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return z(()=>{e=Be(e);let n;if(this.rank===1)throw new ze("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=st(e,[0,2,3,1])),n=Mm(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Kr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=st(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=Tt(this.depthwiseInitializer),e.pointwiseInitializer=Tt(this.pointwiseInitializer),e.depthwiseRegularizer=dt(this.depthwiseRegularizer),e.pointwiseRegularizer=dt(this.pointwiseRegularizer),e.depthwiseConstraint=Ut(this.depthwiseConstraint),e.pointwiseConstraint=Ut(this.pointwiseConstraint),e}};bv.className="SeparableConv";var Ty=class extends bv{constructor(e){super(2,e)}};Ty.className="SeparableConv2D";ae.registerClass(Ty);var o0=class extends Uu{constructor(e){super(1,e);o0.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!$A(e.kernelSize,"number",1,1))throw new B(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};o0.className="Conv1D";ae.registerClass(o0);var Ey=class extends Ze{constructor(e){super(e);typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return z(()=>{if(e=Be(e),this.dataFormat==="channelsLast"){let n=zp(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return zp(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=zp(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return zp(n,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Ey.className="Cropping2D";ae.registerClass(Ey);var Cy=class extends Ze{constructor(e){super(e);this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,TQ(this.interpolation)}computeOutputShape(e){if(this.dataFormat==="channelsFirst"){let t=e[2]==null?null:this.size[0]*e[2],n=e[3]==null?null:this.size[1]*e[3];return[e[0],e[1],t,n]}else{let t=e[1]==null?null:this.size[0]*e[1],n=e[2]==null?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return z(()=>{let n=Be(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=st(n,[0,2,3,1]);let a=this.size[0]*r[2],s=this.size[1]*r[3],i=this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s]);return st(i,[0,3,1,2])}else{let a=this.size[0]*r[1],s=this.size[1]*r[2];return this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Cy.className="UpSampling2D";ae.registerClass(Cy);function lne(e,t,n=[1,1],r="valid",a,s){return z(()=>{a==null&&(a=Sr()),Rt(a);let i=Iy(e,a);if(e.rank!==4)throw new B(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new B(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=xl(i,t,n,r==="same"?"same":"valid","NHWC",s),a==="channelsFirst"&&(i=st(i,[0,3,1,2])),i})}var Ry=class extends Sy{constructor(e){super(2,e);this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=wt(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=jt(e.depthwiseConstraint),this.depthwiseRegularizer=bt(e.depthwiseRegularizer)}build(e){if(e=ht(e),e.length<4)throw new B(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new B(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return z(()=>{e=Be(e);let n=lne(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Kr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=ht(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,a=Rr(t,this.kernelSize[0],this.padding,this.strides[0]),s=Rr(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],r,a,s]:[e[0],a,s,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=Tt(this.depthwiseInitializer),e.depthwiseRegularizer=dt(this.depthwiseRegularizer),e.depthwiseConstraint=Ut(this.depthwiseRegularizer),e}};Ry.className="DepthwiseConv2D";ae.registerClass(Ry);function _v(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new B("When inputs is an array, neither initialState or constants should be provided");r!=null&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function a(s){return s==null||Array.isArray(s)?s:[s]}return t=a(t),n=a(n),{inputs:e,initialState:t,constants:n}}function vv(e,t,n,r=!1,a,s,i=!1,o=!1){return z(()=>{let l=t.shape.length;if(l<3)throw new B(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(Tr(2,l));if(t=st(t,u),s!=null)throw new ze("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),a!=null&&(a=a.asType("bool").asType("float32"),a.rank===l-1&&(a=tn(a,-1)),a=st(a,u)),r&&(t=Ln(t,0),a!=null&&(a=Ln(a,0)));let c=[],h,d=n,p=t.shape[0],f=ur(t),m;a!=null&&(m=ur(a));for(let y=0;y<p;++y){let g=f[y],w=z(()=>e(g,d));if(a==null)h=w[0],d=w[1];else{let b=z(()=>{let _=m[y],x=Pn(_).sub(_),S=w[0].mul(_).add(d[0].mul(x)),T=d.map((E,F)=>w[1][F].mul(_).add(E.mul(x)));return{output:S,newStates:T}});h=b.output,d=b.newStates}o&&c.push(h)}let A;return o&&(A=pn(c,1)),[h,A,d]})}var Zr=class extends Ze{constructor(e){super(e);let t;if(e.cell==null)throw new B("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new l0({cells:e.cell}):t=e.cell,t.stateSize==null)throw new B("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new Zt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return Tr(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){ey(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],r;if(this.returnSequences?r=[e[0],e[1],n]:r=[e[0],n],this.returnState){let a=[];for(let s of t)a.push([e[0],s]);return[r].concat(a)}else return r}computeMask(e,t){return z(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let r=this.states.map(a=>null);return[n].concat(r)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;n<e;++n)t.push(null);return t}else return this.states_}set states(e){this.states_=e}build(e){let t=null;if(this.numConstants!=null)throw new ze("Constants support is not implemented in RNN yet.");ey(e)&&(e=e[0]),e=e;let n=this.stateful?e[0]:null,r=e.slice(2);this.inputSpec[0]=new Zt({shape:[n,null,...r]});let a=[e[0]].concat(e.slice(2));if(t!=null)throw new ze("Constants support is not implemented in RNN yet.");this.cell.build(a);let s;if(Array.isArray(this.cell.stateSize)?s=this.cell.stateSize:s=[this.cell.stateSize],this.stateSpec!=null){if(!v.arraysEqual(this.stateSpec.map(i=>i.shape[i.shape.length-1]),s))throw new B(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=s.map(i=>new Zt({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){z(()=>{if(!this.stateful)throw new fa("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new B("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>Ft([n,r])):this.states_=[Ft([n,this.cell.stateSize])];else if(e==null)Ie(this.states_),this.keptStates!=null&&(Ie(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>Ft([n,r])):this.states_[0]=Ft([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new B(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):Ie(this.states_);for(let r=0;r<this.states_.length;++r){let a=e[r],s=Array.isArray(this.cell.stateSize)?this.cell.stateSize[r]:this.cell.stateSize,i=[n,s];if(!v.arraysEqual(a.shape,i))throw new B(`State ${r} is incompatible with layer ${this.name}: expected shape=${i}, received shape=${a.shape}`);this.states_[r]=a}}this.states_=this.states_.map(r=>qt(r.clone()))})}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=_v(e,n,r,this.numConstants);e=a.inputs,n=a.initialState,r=a.constants;let s=[],i=[];if(n!=null){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let o of n)this.stateSpec.push(new Zt({shape:o.shape}));i=i.concat(this.stateSpec)}if(r!=null&&(t.constants=r,s=s.concat(r),this.numConstants=r.length),s[0]instanceof Er){let o=[e].concat(s),l=this.inputSpec.concat(i),u=this.inputSpec;this.inputSpec=l;let c=super.apply(o,t);return this.inputSpec=u,c}else return super.apply(e,t)}call(e,t){return z(()=>{let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;e=Be(e),a==null&&(this.stateful?a=this.states_:a=this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==s)throw new B(`RNN Layer has ${s} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:r},o=vv((d,p)=>{let f=this.cell.call([d].concat(p),i);return[f[0],f.slice(1)]},e,a,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],u=o[1],c=o[2];this.stateful&&this.resetStates(c,r);let h=this.returnSequences?u:l;return this.returnState?[h].concat(c):h})}getInitialState(e){return z(()=>{let t=Ft(e.shape);return t=Me(t,[1,2]),t=$u(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?WA(t,[1,n]):t):this.cell.stateSize>1?[WA(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===Zr.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let r=t.cell,a=Cr(r,n);return new e(Object.assign(t,{cell:a}))}};Zr.className="RNN";ae.registerClass(Zr);var zu=class extends Ze{},c0=class extends zu{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,Kt(this.units,"units"),this.activation=Qa(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=bt(e.kernelRegularizer),this.recurrentRegularizer=bt(e.recurrentRegularizer),this.biasRegularizer=bt(e.biasRegularizer),this.kernelConstraint=jt(e.kernelConstraint),this.recurrentConstraint=jt(e.recurrentConstraint),this.biasConstraint=jt(e.biasConstraint),this.dropout=Gl([1,Za([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Gl([1,Za([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=ht(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return z(()=>{if(e=e,e.length!==2)throw new B(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=es({ones:()=>Pn(e),rate:this.dropout,training:r})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=es({ones:()=>Pn(n),rate:this.recurrentDropout,training:r}));let a,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?a=Xr(O(e,s),this.kernel.read()):a=Xr(e,this.kernel.read()),this.bias!=null&&(a=Kr(a,this.bias.read())),i!=null&&(n=O(n,i));let o=ie(a,Xr(n,this.recurrentKernel.read()));return this.activation!=null&&(o=this.activation.apply(o)),[o,o]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Ja(this.activation),useBias:this.useBias,kernelInitializer:Tt(this.kernelInitializer),recurrentInitializer:Tt(this.recurrentInitializer),biasInitializer:Tt(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Ut(this.kernelConstraint),recurrentConstraint:Ut(this.recurrentConstraint),biasConstraint:Ut(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};c0.className="SimpleRNNCell";ae.registerClass(c0);var My=class extends Zr{constructor(e){e.cell=new c0(e),super(e)}call(e,t){return z(()=>{this.cell.dropoutMask!=null&&(Ie(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ie(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return new e(t)}};My.className="SimpleRNN";ae.registerClass(My);var u0=class extends zu{constructor(e){super(e);if(this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new B("GRUCell does not support reset_after parameter set to true.");this.units=e.units,Kt(this.units,"units"),this.activation=Qa(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Qa(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=bt(e.kernelRegularizer),this.recurrentRegularizer=bt(e.recurrentRegularizer),this.biasRegularizer=bt(e.biasRegularizer),this.kernelConstraint=jt(e.kernelConstraint),this.recurrentConstraint=jt(e.recurrentConstraint),this.biasConstraint=jt(e.biasConstraint),this.dropout=Gl([1,Za([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Gl([1,Za([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=ht(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return z(()=>{if(e=e,e.length!==2)throw new B(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,r=e[1];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=es({ones:()=>Pn(e),rate:this.dropout,training:n,count:3})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=es({ones:()=>Pn(r),rate:this.recurrentDropout,training:n,count:3}));let a=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0<this.dropout&&this.dropout<1&&(e=O(e,a[0]));let u=Xr(e,this.kernel.read());this.useBias&&(u=Kr(u,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(r=O(r,s[0]));let c=this.recurrentKernel.read(),[h,d]=Bt(c,[2*this.units,this.units],c.rank-1),p=Xr(r,h),[f,m,A]=Bt(u,3,u.rank-1),[y,g]=Bt(p,2,p.rank-1);i=this.recurrentActivation.apply(ie(f,y)),o=this.recurrentActivation.apply(ie(m,g));let w=Xr(O(o,r),d);l=this.activation.apply(ie(A,w));let b=ie(O(i,r),O(ie(1,St(i)),l));return[b,b]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Ja(this.activation),recurrentActivation:Ja(this.recurrentActivation),useBias:this.useBias,kernelInitializer:Tt(this.kernelInitializer),recurrentInitializer:Tt(this.recurrentInitializer),biasInitializer:Tt(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Ut(this.kernelConstraint),recurrentConstraint:Ut(this.recurrentConstraint),biasConstraint:Ut(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign({},e,t)}};u0.className="GRUCell";ae.registerClass(u0);var Fy=class extends Zr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new u0(e),super(e)}call(e,t){return z(()=>{this.cell.dropoutMask!=null&&(Ie(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ie(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Fy.className="GRU";ae.registerClass(Fy);var Hu=class extends zu{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,Kt(this.units,"units"),this.activation=Qa(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Qa(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=wt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=bt(e.kernelRegularizer),this.recurrentRegularizer=bt(e.recurrentRegularizer),this.biasRegularizer=bt(e.biasRegularizer),this.kernelConstraint=jt(e.kernelConstraint),this.recurrentConstraint=jt(e.recurrentConstraint),this.biasConstraint=jt(e.biasConstraint),this.dropout=Gl([1,Za([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Gl([1,Za([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=ht(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let r;if(this.useBias){if(this.unitForgetBias){let a=this.biasInitializer,s=this.units;r=new(t=class extends pr{apply(i,o){let l=a.apply([s]),u=new Lp().apply([s]),c=a.apply([s*2]);return m7(m7(l,u),c)}},t.className="CustomInit",t)}else r=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,r,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return z(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new B(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],a=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=es({ones:()=>Pn(e),rate:this.dropout,training:n,count:4})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=es({ones:()=>Pn(r),rate:this.recurrentDropout,training:n,count:4}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,u,c;0<this.dropout&&this.dropout<1&&(e=O(e,s[0]));let h=Xr(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(r=O(r,i[0])),h=ie(h,Xr(r,this.recurrentKernel.read())),this.useBias&&(h=Kr(h,this.bias.read()));let[d,p,f,m]=Bt(h,4,h.rank-1);o=this.recurrentActivation.apply(d),l=this.recurrentActivation.apply(p),u=ie(O(l,a),O(o,this.activation.apply(f))),c=this.recurrentActivation.apply(m);let A=O(c,this.activation.apply(u));return[A,A,u]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Ja(this.activation),recurrentActivation:Ja(this.recurrentActivation),useBias:this.useBias,kernelInitializer:Tt(this.kernelInitializer),recurrentInitializer:Tt(this.recurrentInitializer),biasInitializer:Tt(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Ut(this.kernelConstraint),recurrentConstraint:Ut(this.recurrentConstraint),biasConstraint:Ut(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign({},e,t)}};Hu.className="LSTMCell";ae.registerClass(Hu);var $y=class extends Zr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Hu(e),super(e)}call(e,t){return z(()=>{this.cell.dropoutMask!=null&&(Ie(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ie(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};$y.className="LSTM";ae.registerClass($y);var l0=class extends zu{constructor(e){super(e);this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return z(()=>{e=e;let n=e.slice(1),r=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?r.push(n.splice(0,i.stateSize.length)):r.push(n.splice(0,1));r.reverse();let a=[],s;for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=r[i],i===0?s=[e[0]].concat(n):s=[s[0]].concat(n),s=o.call(s,t),a.push(s.slice(1))}n=[];for(let i of a.slice().reverse())n.push(...i);return[s[0]].concat(n)})}build(e){ey(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,r)=>{$i(`RNNCell_${r}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=r=>({className:r.getClassName(),config:r.getConfig()}),n={cells:this.cells.map(t)};return Object.assign({},e,n)}static fromConfig(e,t,n={}){let r=[];for(let a of t.cells)r.push(Cr(a,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return ty(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,a=e.splice(r);for(let s=0;s<n.weights.length;++s)t.push([n.weights[s],a[s]])}ny(t)}};l0.className="StackedRNNCells";ae.registerClass(l0);function es(e){let{ones:t,rate:n,training:r=!1,count:a=1}=e,s=()=>y7(t(),n),i=()=>Ou(s,t,r);return!a||a<=1?qt(i().clone()):Array(a).fill(void 0).map(i).map(o=>qt(o.clone()))}var cne=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n},kv=class extends Zr{constructor(e){if(e.unroll)throw new ze("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new ze("It is not possible at the moment to stack convolutional cells.");super(e);this.inputSpec=[new Zt({ndim:5})]}call(e,t){return z(()=>{if(this.cell.dropoutMask!=null&&(Ie(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ie(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new B("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return z(()=>{let{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)],s=Ft(a);return Array.isArray(t)?Array(t.length).fill(s):[s]})}resetStates(e,t=!1){z(()=>{if(!this.stateful)throw new fa("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)];if(n[0]==null)throw new B("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ft(a)):this.states_=[Ft(a)];else if(e==null)Ie(this.states_),this.keptStates!=null&&(Ie(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ft(a)):this.states_[0]=Ft(a);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new B(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):Ie(this.states_);for(let s=0;s<this.states_.length;++s){let i=e[s],o=a;if(!v.arraysEqual(i.shape,o))throw new B(`State ${s} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${i.shape}`);this.states_[s]=i}}this.states_=this.states_.map(s=>qt(s.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:a,strides:s,dilationRate:i}=this.cell,o=t==="channelsFirst",l=e[o?3:2],u=e[o?4:3],c=Rr(l,r[0],a,s[0],i[0]),h=Rr(u,r[1],a,s[1],i[1]);return[...e.slice(0,2),...o?[n,c,h]:[c,h,n]]}};kv.className="ConvRNN2D";var h0=class extends Hu{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:a,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t}));this.filters=t,Kt(this.filters,"filters"),this.kernelSize=Yl(n,2,"kernelSize"),this.kernelSize.forEach(o=>Kt(o,"kernelSize")),this.strides=Yl(r||1,2,"strides"),this.strides.forEach(o=>Kt(o,"strides")),this.padding=a||"valid",er(this.padding),this.dataFormat=s||"channelsLast",Rt(this.dataFormat),this.dilationRate=Yl(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>Kt(o,"dilationRate"))}build(e){var t;e=ht(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new B(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],a=4,s=this.kernelSize.concat([r,this.filters*a]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*a]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let o;if(this.unitForgetBias){let l=this.biasInitializer,u=this.filters;o=new(t=class extends pr{apply(c,h){let d=l.apply([u]),p=Vr([u]),f=l.apply([u*2]);return VA([d,p,f])}},t.className="CustomInit",t)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*a],null,o,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return z(()=>{if(e.length!==3)throw new B(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],a=e[1],s=e[2],i=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=es({ones:()=>Pn(r),rate:this.dropout,training:n,count:i}));let o=this.dropoutMask,l=(Y,se,te)=>!se||!se[te]?Y:O(se[te],Y),u=l(r,o,0),c=l(r,o,1),h=l(r,o,2),d=l(r,o,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=es({ones:()=>Pn(a),rate:this.recurrentDropout,training:n,count:i}));let p=this.recurrentDropoutMask,f=l(a,p,0),m=l(a,p,1),A=l(a,p,2),y=l(a,p,3),g=3,[w,b,_,x]=Bt(this.kernel.read(),i,g),[S,T,E,F]=this.useBias?Bt(this.bias.read(),i):[null,null,null,null];u=this.inputConv(u,w,S,this.padding),c=this.inputConv(c,b,T,this.padding),h=this.inputConv(h,_,E,this.padding),d=this.inputConv(d,x,F,this.padding);let[P,W,V,U]=Bt(this.recurrentKernel.read(),i,g);f=this.recurrentConv(f,P),m=this.recurrentConv(m,W),A=this.recurrentConv(A,V),y=this.recurrentConv(y,U);let H=this.recurrentActivation.apply(ie(u,f)),X=this.recurrentActivation.apply(ie(c,m)),G=ie(O(X,s),O(H,this.activation.apply(ie(h,A)))),ee=O(this.recurrentActivation.apply(ie(d,y)),this.activation.apply(G));return[ee,ee,G]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=cne(e,["units"]),r={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,r)}inputConv(e,t,n,r){let a=la(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Kr(a,n,this.dataFormat):a}recurrentConv(e,t){return la(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};h0.className="ConvLSTM2DCell";ae.registerClass(h0);var Dy=class extends kv{constructor(e){let t=new h0(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};Dy.className="ConvLSTM2D";ae.registerClass(Dy);var d0=class extends Ze{constructor(e){super(e);this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let r=0;r<this.noiseShape.length;++r)n.push(this.noiseShape[r]==null?t[r]:this.noiseShape[r]);return n}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);if(0<this.rate&&this.rate<1){let r=t.training==null?!1:t.training,a=this.getNoiseShape(n);return Ou(()=>y7(n,this.rate,a,this.seed),()=>n,r)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};d0.className="Dropout";ae.registerClass(d0);var Oy=class extends d0{constructor(e){super(e);this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};Oy.className="SpatialDropout1D";ae.registerClass(Oy);var zy=class extends Ze{constructor(e){super(e);if(this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,Kt(this.units,"units"),this.activation=Qa(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=wt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=wt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=jt(e.kernelConstraint),this.biasConstraint=jt(e.biasConstraint),this.kernelRegularizer=bt(e.kernelRegularizer),this.biasRegularizer=bt(e.biasRegularizer),this.activityRegularizer=bt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=ht(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=ht(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e),r=s7(this.activation.getClassName()),a;return r!=null?a=Xr(n,this.kernel.read(),r,this.bias?this.bias.read():null):(a=Xr(n,this.kernel.read()),this.bias!=null&&(a=Kr(a,this.bias.read())),this.activation!=null&&(a=this.activation.apply(a))),a})}getConfig(){let e={units:this.units,activation:Ja(this.activation),useBias:this.useBias,kernelInitializer:Tt(this.kernelInitializer),biasInitializer:Tt(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Ut(this.kernelConstraint),biasConstraint:Ut(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};zy.className="Dense";ae.registerClass(zy);var Py=class extends Ze{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=ht(e);for(let t of e.slice(1))if(t==null)throw new B(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],Ka(e,1)]}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let a=2;a<n.rank;++a)r.push(a);r.push(1),n=n.transpose(r)}return $Q(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Py.className="Flatten";ae.registerClass(Py);var Ly=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.activation=Qa(e.activation)}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);return this.activation.apply(n)})}getConfig(){let e={activation:Ja(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Ly.className="Activation";ae.registerClass(Ly);var Wy=class extends Ze{constructor(e){super(e);this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return z(()=>(e=Be(e),MQ(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};Wy.className="RepeatVector";ae.registerClass(Wy);var By=class extends Ze{constructor(e){super(e);this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",r=t.slice(),a=1,s=null;for(let o=0;o<r.length;++o){let l=r[o];if(this.isUnknown(l))if(s===null)s=o;else throw new B("Can only specifiy one unknown dimension.");else a*=l}let i=Ka(e);if(s!==null){if(a===0||i%a!=0)throw new B(n);r[s]=i/a}else if(i!==a)throw new B(n);return r}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e),r=n.shape,a=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return n.reshape(a)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};By.className="Reshape";ae.registerClass(By);var Vy=class extends Ze{constructor(e){super(e);if(e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=Tr(1,e.dims.length+1);if(!v.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new Zt({ndim:this.dims.length+1})]}computeOutputShape(e){e=ht(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return st(Be(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};Vy.className="Permute";ae.registerClass(Vy);var Uy=class extends Ze{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=Be(e),r=-1;return Kc(wi(n,this.maskValue),r)}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e),r=-1,a=!0,s=Kc(wi(n,this.maskValue),r,a);return n.mul(s.asType(n.dtype))})}};Uy.className="Masking";ae.registerClass(Uy);var jy=class extends Ze{constructor(e){super(e);if(this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(mt(e.inputLength))}this.inputDim=e.inputDim,Kt(this.inputDim,"inputDim"),this.outputDim=e.outputDim,Kt(this.outputDim,"outputDim"),this.embeddingsInitializer=wt(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=bt(e.embeddingsRegularizer),this.activityRegularizer=bt(e.activityRegularizer),this.embeddingsConstraint=jt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return z(()=>this.maskZero?(e=Be(e),wi(e,qe(e))):null)}computeOutputShape(e){if(e=ht(e),this.inputLength==null)return[...e,this.outputDim];let t=mt(this.inputLength);if(t.length!==e.length-1)throw new B(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r<t.length;++r){let a=t[r],s=e[r+1];if(a!=null&&s!=null&&a!==s)throw new B(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);a==null&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);return n.dtype!=="int32"&&(n=Fu(n,"int32")),A7(this.embeddings.read(),n.as1D()).reshape(ht(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:Tt(this.embeddingsInitializer),embeddingsRegularizer:dt(this.embeddingsRegularizer),activityRegularizer:dt(this.activityRegularizer),embeddingsConstraint:Ut(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};jy.className="Embedding";ae.registerClass(jy);var Li=class extends Ze{constructor(e){super(e||{});this.supportsMasking=!0}mergeFunction(e){throw new ze}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let r=0;r<t.length;++r){let a=e[e.length-t.length+r],s=t[r];if(a==null||s==null||a<0||s<0)n.push(null);else if(a===1)n.push(s);else if(s===1)n.push(a);else{if(a!==s)throw new B("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(a)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[ht(e)]),e=e,e.length<2)throw new B(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let a of e)a!=null&&a[0]!==null&&t.push(a[0]);if(t=Xa(t),t.length>1)throw new B(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let a=1;a<e.length;++a){let s=e[a]==null?null:e[a].slice(1);n=this.computeElementwiseOpOutputShape(n,s)}let r=e.map(a=>a.length);e.indexOf(null)===-1&&Xa(r).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return z(()=>{if(e=e,this.reshapeRequired){let n=[],r=e.map(a=>a.rank);if(r.indexOf(null)===-1){let a=Za(r);for(let s of e){let i=s.rank;for(let o=0;o<a-i;++o)s=$u(s,1);n.push(s)}return this.mergeFunction(n)}else{let a=!1;for(let o of e){let l=o.rank;if(l==null){let u=o.shape,c=u[0],h=u.slice(1).concat([c]),d=o.reshape([c].concat(Ka(u.slice(1))));d=st(d,[1,0]),d=d.reshape(h),n.push(d),a=!0}else if(l>1){let u=Tr(1,l).concat([0]);n.push(st(o,u)),a=!0}else n.push(o)}let s=this.mergeFunction(n),i=s.rank;if(a){if(i==null){let o=s.shape,l=o.length,u=o[l-1],c=[u].concat(o.slice(0,o.length-1));s=st(s.reshape([-1,u]),[1,0]).reshape(c)}else if(i>1){let o=[i-1].concat(Tr(0,i-1));s=st(s,o)}}return s}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let r=1;r<e.length;++r){let a=e[r]==null?null:e[r].slice(1);t=this.computeElementwiseOpOutputShape(t,a)}let n=[];for(let r of e)r!=null&&r[0]!==null&&n.push(r[0]);return n=Xa(n),n.length===1?t=n.concat(t):t=[null].concat(t),t}computeMask(e,t){return z(()=>{if(t==null)return null;if(!Array.isArray(t))throw new B("`mask` should be an Array");if(!Array.isArray(e))throw new B("`inputs` should be an Array");if(t.length!==e.length)throw new B(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(r=>r==null))return null;t=t.map(r=>r==null?r:tn(r,0));let n=t[0];for(let r=1;r<t.length-1;++r)n=cr(n,t[r]);return n})}},Hy=class extends Li{constructor(e){super(e)}mergeFunction(e){return z(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=ie(t,e[n]);return t})}};Hy.className="Add";ae.registerClass(Hy);var Gy=class extends Li{constructor(e){super(e)}mergeFunction(e){return z(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=O(t,e[n]);return t})}};Gy.className="Multiply";ae.registerClass(Gy);var qy=class extends Li{constructor(e){super(e)}mergeFunction(e){return z(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=ie(t,e[n]);return O(1/e.length,t)})}};qy.className="Average";ae.registerClass(qy);var Xy=class extends Li{constructor(e){super(e)}mergeFunction(e){return z(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Br(t,e[n]);return t})}};Xy.className="Maximum";ae.registerClass(Xy);var Ky=class extends Li{constructor(e){super(e)}mergeFunction(e){return z(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=kl(t,e[n]);return t})}};Ky.className="Minimum";ae.registerClass(Ky);var Zy=class extends Li{constructor(e){super(e);this.DEFAULT_AXIS=-1,e==null&&(e={}),this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!(Array.isArray(e)&&Array.isArray(e[0]))||e.length===1)throw new B("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let r of e)if(r!=null){t=!1;break}if(t)return;let n=[];for(let r=0;r<e.length;++r){let a=e[r].slice();a.splice(this.axis,1);let s=!1;for(let i of n)if(v.arraysEqual(i,a)){s=!0;break}s||n.push(a)}if(n.length>1)throw new B("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return z(()=>VA(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new B("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(let a of t.slice(1)){if(n[r]==null||a[r]==null){n[r]=null;break}n[r]+=a[r]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new B("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new B("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new B(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return z(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let r=[];for(let s=0;s<e.length;++s)t[s]==null?r.push(Pn(e[s]).asType("bool")):t[s].rank<e[s].rank?r.push(tn(t[s],-1)):r.push(t[s]);let a=it(r,this.axis);return kd(a,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};Zy.className="Concatenate";ae.registerClass(Zy);function Gu(e,t){for(;e<0;)e+=t;return e}function une(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new ze("batchDot is not implemented for tensors of 4D or higher rank yet");if(v.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),v.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new ze("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,a=t.shape.length;n==null&&(n=[r-1,a-2]);let s=n;return z(()=>{let i;if(r>a){i=r-a;let l=[];for(let u=0;u<i;++u)l.push(1);t=t.reshape(t.shape.concat(l))}else if(a>r){i=a-r;let l=[];for(let u=0;u<i;++u)l.push(1);e=e.reshape(e.shape.concat(l))}else i=0;let o;if(e.shape.length===2&&t.shape.length===2)s[0]===s[1]?o=e.mul(t).sum(s[0]):o=e.transpose([1,0]).mul(t).sum(s[1]);else{let l=s[0]!==e.shape.length-1,u=s[1]===t.shape.length-1;o=e.matMul(t,l,u)}if(i>0){let l;r>a?l=r+a-3:l=r-1;let u=[];for(let c=l;c<l+i;++c)u.push(c);o=o.squeeze(u)}return o.shape.length===1&&(o=o.expandDims(1)),o})}var Yy=class extends Li{constructor(e){super(e);this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){v.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new ze("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new B(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new B(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],r;return Array.isArray(this.axes)?r=this.axes.map((a,s)=>Gu(a,e[s].shape.length)):r=[Gu(this.axes,t.shape.length),Gu(this.axes,n.shape.length)],this.normalize&&(t=Yp(t,r[0]),n=Yp(n,r[1])),une(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Gu(this.axes,e.length),Gu(this.axes,t.length)],n}computeOutputShape(e){v.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new ze("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);let a=t.concat(n);return a.length===1&&a.push(1),a}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};Yy.className="Dot";ae.registerClass(Yy);var Jy=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);return Ou(()=>Pp(n.shape,0,this.stddev).add(n),()=>n,t.training||!1)})}};Jy.className="GaussianNoise";ae.registerClass(Jy);var Qy=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return z(()=>{this.invokeCallHook(e,t);let n=Be(e);return this.rate>0&&this.rate<1?Ou(()=>{let r=Math.sqrt(this.rate/(1-this.rate));return n.mul(Pp(n.shape,1,r))},()=>n,t.training||!1):n})}};Qy.className="GaussianDropout";ae.registerClass(Qy);var eg=class extends Ze{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Be(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return z(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return Ou(()=>{let r=Be(e),a=1.6732632423543772,s=1.0507009873554805,i=-a*s,o=Va(Il(n),this.rate);o=Fu(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,u=-l*i*this.rate;return r.mul(o).add(o.add(-1).mul(i)).mul(l).add(u)},()=>Be(e),t.training||!1)}return e})}};eg.className="AlphaDropout";ae.registerClass(eg);function qu(e,t,n,r,a,s=.001){let i;if(e.rank===2)i=mx(e,t,n,r,a,s);else if(e.rank===3)i=Ax(e,t,n,r,a,s);else if(e.rank===4)i=yx(e,t,n,r,a,s);else throw new ze(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function hne(e,t,n,r,a=.001){return z(()=>{let s=Od(e,r),i=s.mean,o=s.variance;return[qu(e,i,o,n,t,a),i,o]})}function dne(e,t,n,r,a=.001){return z(()=>{let s=Od(e,r),i=s.mean,o=s.variance,l=[];for(let p of Tr(0,e.rank))r.indexOf(p)!==-1?l.push(1):l.push(e.shape[p]);let u=i.reshape(l),c=o.reshape(l),h=t==null?null:t.reshape(l),d=n==null?null:n.reshape(l);return[qu(e,u,c,d,h,a),i,o]})}function pne(e,t,n,r,a=.001){return v.arraysEqual(r.slice().sort(),Tr(0,e.rank-1))?hne(e,t,n,r,a):dne(e,t,n,r,a)}var tg=class extends Ze{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=wt(e.betaInitializer||"zeros"),this.gammaInitializer=wt(e.gammaInitializer||"ones"),this.movingMeanInitializer=wt(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=wt(e.movingVarianceInitializer||"ones"),this.betaConstraint=jt(e.betaConstraint),this.gammaConstraint=jt(e.gammaConstraint),this.betaRegularizer=bt(e.betaRegularizer),this.gammaRegularizer=bt(e.gammaRegularizer)}build(e){e=ht(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new B(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Zt({ndim:e.length,axes:{[t]:n}})];let r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return z(()=>{let n=t.training==null?!1:t.training,r=Be(e),a=r.shape,s=a.length,i=Tr(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=Ri(1,s);l[o]=a[o];let u=i.slice();u.sort();let c=!v.arraysEqual(u,Tr(0,s).slice(0,s-1)),h=()=>{if(c){let A=this.movingMean.read().reshape(l),y=this.movingVariance.read().reshape(l),g=this.center?this.beta.read().reshape(l):null,w=this.scale?this.gamma.read().reshape(l):null;return qu(r,A,y,g,w,this.epsilon)}else return qu(r,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return h();let[d,p,f]=pne(r,this.gamma.read(),this.beta.read(),i,this.epsilon),m=(A,y,g)=>{z(()=>{let w=1-g,b=A.read(),_=b.sub(y).mul(w);A.write(b.sub(_))})};return(()=>{m(this.movingMean,p,this.momentum),m(this.movingVariance,f,this.momentum)})(),d})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:Tt(this.betaInitializer),gammaInitializer:Tt(this.gammaInitializer),movingMeanInitializer:Tt(this.movingMeanInitializer),movingVarianceInitializer:Tt(this.movingVarianceInitializer),betaRegularizer:dt(this.betaRegularizer),gammaRegularizer:dt(this.gammaRegularizer),betaConstraint:Ut(this.betaConstraint),gammaConstraint:Ut(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};tg.className="BatchNormalization";ae.registerClass(tg);var ng=class extends Ze{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=wt(e.betaInitializer||"zeros"),this.gammaInitializer=wt(e.gammaInitializer||"ones"),this.betaRegularizer=bt(e.betaRegularizer),this.gammaRegularizer=bt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=ht(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let a=0;a<this.axis.length;++a)this.axis[a]<0&&(this.axis[a]+=t);for(let a of this.axis)if(a<0||a>=t)throw new Error(`Invalid axis: ${a}`);if(this.axis.length!==Xa(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(a=>e[a]),r=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,r):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,r):this.beta=null,this.built=!0}call(e,t){let n=Be(e),r=n.shape,a=r.length;return z(()=>{let s=!0,{mean:i,variance:o}=Od(n,this.axis,s),l=Ri(1,a);for(let f of this.axis)l[f]=r[f];let u=f=>f!=null&&f.shape.length!==a&&this.axis!==[a-1]?f.reshape(l):f,c=u(this.gamma.read()),h=u(this.beta.read()),d=[],p=[];for(let f=0;f<a;++f)this.axis.indexOf(f)!==-1?(d.push(r[f]),p.push(1)):(d.push(1),p.push(r[f]));return i=i.tile(d),o=o.tile(d),c=c.tile(p),h=h.tile(p),qu(n,i,o,h,c,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:Tt(this.betaInitializer),gammaInitializer:Tt(this.gammaInitializer),betaRegularizer:dt(this.betaRegularizer),gammaRegularizer:dt(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};ng.className="LayerNormalization";ae.registerClass(ng);function fne(e,t,n){return z(()=>{if(e.rank!==4)throw new B(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new B("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=Sr()),n!=="channelsLast"&&n!=="channelsFirst")throw new B(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return n==="channelsFirst"?r=[[0,0],[0,0],t[0],t[1]]:r=[[0,0],t[0],t[1],[0,0]],ca(e,r)})}var rg=class extends Ze{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?Sr():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new B(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new B(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new B(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Zt({ndim:4})]}computeOutputShape(e){e=ht(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return z(()=>fne(Be(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};rg.className="ZeroPadding2D";ae.registerClass(rg);function p0(e,t,n,r,a,s){return z(()=>{Rt(a),c7(s),er(r),n==null&&(n=[1,1]),r==null&&(r="valid"),a==null&&(a=Sr()),s==null&&(s="max"),e=Iy(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=au(e,t,n,o):i=Yc(e,t,n,o),a==="channelsFirst"&&(i=st(i,[0,3,1,2])),i})}function Iv(e,t,n,r,a,s){return z(()=>{Rt(a),c7(s),er(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),a==null&&(a=Sr()),s==null&&(s="max"),e=xv(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=Im(e,t,n,o):i=hm(e,t,n,o),a==="channelsFirst"&&(i=st(i,[0,4,1,2,3])),i})}var Sv=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new B(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(Kt(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new B(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,er(this.padding),this.inputSpec=[new Zt({ndim:3})]}computeOutputShape(e){e=ht(e);let t=Rr(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return z(()=>{this.invokeCallHook(e,t),e=$u(Be(e),2);let n=this.poolingFunction(Be(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Ua(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},ag=class extends Sv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),p0(e,t,n,r,a,"max")}};ag.className="MaxPooling1D";ae.registerClass(ag);var sg=class extends Sv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),p0(e,t,n,r,a,"avg")}};sg.className="AveragePooling1D";ae.registerClass(sg);var Nv=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new B(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];Kt(this.poolSize,"poolSize"),Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),er(this.padding),this.inputSpec=[new Zt({ndim:4})]}computeOutputShape(e){e=ht(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Rr(t,this.poolSize[0],this.padding,this.strides[0]),n=Rr(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return z(()=>(this.invokeCallHook(e,t),this.poolingFunction(Be(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},ig=class extends Nv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),p0(e,t,n,r,a,"max")}};ig.className="MaxPooling2D";ae.registerClass(ig);var og=class extends Nv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),p0(e,t,n,r,a,"avg")}};og.className="AveragePooling2D";ae.registerClass(og);var Tv=class extends Ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new B(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];Kt(this.poolSize,"poolSize"),Kt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),er(this.padding),this.inputSpec=[new Zt({ndim:5})]}computeOutputShape(e){e=ht(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=Rr(t,this.poolSize[0],this.padding,this.strides[0]),n=Rr(n,this.poolSize[1],this.padding,this.strides[1]),r=Rr(r,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return z(()=>(this.invokeCallHook(e,t),this.poolingFunction(Be(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},lg=class extends Tv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),Iv(e,t,n,r,a,"max")}};lg.className="MaxPooling3D";ae.registerClass(lg);var cg=class extends Tv{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Rt(a),er(r),Iv(e,t,n,r,a,"avg")}};cg.className="AveragePooling3D";ae.registerClass(cg);var Ev=class extends Ze{constructor(e){super(e);this.inputSpec=[new Zt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new ze}},ug=class extends Ev{constructor(e){super(e||{})}call(e,t){return z(()=>{let n=Be(e);return Nt(n,1)})}};ug.className="GlobalAveragePooling1D";ae.registerClass(ug);var hg=class extends Ev{constructor(e){super(e||{})}call(e,t){return z(()=>{let n=Be(e);return Nn(n,1)})}};hg.className="GlobalMaxPooling1D";ae.registerClass(hg);var Cv=class extends Ze{constructor(e){super(e);this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),this.inputSpec=[new Zt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new ze}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},dg=class extends Cv{call(e,t){return z(()=>{let n=Be(e);return this.dataFormat==="channelsLast"?Nt(n,[1,2]):Nt(n,[2,3])})}};dg.className="GlobalAveragePooling2D";ae.registerClass(dg);var pg=class extends Cv{call(e,t){return z(()=>{let n=Be(e);return this.dataFormat==="channelsLast"?Nn(n,[1,2]):Nn(n,[2,3])})}};pg.className="GlobalMaxPooling2D";ae.registerClass(pg);var Rv=class extends Ze{constructor(e){super(e);this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let r=t.layer,a=Cr(r,n);delete t.layer;let s={layer:a};return Object.assign(s,t),new e(s)}},fg=class extends Rv{constructor(e){super(e);this.supportsMasking=!0}build(e){if(e=ht(e),e.length<3)throw new B(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=ht(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return z(()=>(e=Be(e),vv((n,r)=>[Be(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};fg.className="TimeDistributed";ae.registerClass(fg);function mne(e){Fi(NQ,"BidirectionalMergeMode",e)}var Ane="concat",mg=class extends Rv{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Cr(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=Cr(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?Ane:e.mergeMode,mne(this.mergeMode),e.weights)throw new ze("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,r,a;return this.returnState&&(a=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,r=[n]):this.mergeMode==null?r=[n,n.slice()]:r=[n],this.returnState?this.mergeMode==null?r.concat(a).concat(a.slice()):[n].concat(a).concat(a.slice()):Rn(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=_v(e,n,r,this.numConstants);if(e=a.inputs,n=a.initialState,r=a.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&r==null)return super.apply(e,t);let s=[],i=[];if(n!=null){let l=n.length;if(l%2>0)throw new B("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let u=n.map(c=>new Zt({shape:c.shape}));this.forwardLayer.stateSpec=u.slice(0,l/2),this.backwardLayer.stateSpec=u.slice(l/2),i.push(...u)}if(r!=null)throw new ze("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof Er;for(let l of s)if(l instanceof Er!==o)throw new B("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let l=[e].concat(s),u=this.inputSpec.concat(i),c=this.inputSpec;this.inputSpec=u;let h=super.apply(l,t);return this.inputSpec=c,h}else return super.apply(e,t)}call(e,t){return z(()=>{let n=t.initialState,r,a;if(n==null)r=this.forwardLayer.call(e,t),a=this.backwardLayer.call(e,t);else{let o=n.slice(0,n.length/2),l=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:o})),a=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let s;this.returnState&&(Array.isArray(r)&&(s=r.slice(1).concat(a.slice(1))),r=r[0],a=a[0]),this.returnSequences&&(a=Ln(a,1));let i;return this.mergeMode==="concat"?i=VA([r,a]):this.mergeMode==="sum"?i=ie(r,a):this.mergeMode==="ave"?i=O(.5,ie(r,a)):this.mergeMode==="mul"?i=O(r,a):this.mergeMode==null&&(i=[r,a]),this.returnState?this.mergeMode==null?i.concat(s):[i].concat(s):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){$i(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),$i(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let r=this.forwardLayer.states.map(a=>null);return Array.isArray(n)?n.concat(r).concat(r):[n].concat(r).concat(r)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=Cr(t.layer);if(delete t.layer,t.numConstants!=null)throw new ze("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};mg.className="Bidirectional";ae.registerClass(mg);function UQ(e){return new ql(e)}function jQ(e){return new _y(e)}function HQ(e){return new xy(e)}function GQ(e){return new wy(e)}function qQ(e){return new by(e)}function XQ(e){return new ky(e)}function KQ(e){return new vy(e)}function ZQ(e){return new o0(e)}function YQ(e){return new ju(e)}function JQ(e){return new Ny(e)}function QQ(e){return new i0(e)}function eee(e){return new Ty(e)}function tee(e){return new Ey(e)}function nee(e){return new Cy(e)}function ree(e){return new Ry(e)}function aee(e){return new Ly(e)}function see(e){return new zy(e)}function iee(e){return new d0(e)}function oee(e){return new Oy(e)}function lee(e){return new Py(e)}function cee(e){return new Wy(e)}function uee(e){return new By(e)}function hee(e){return new Vy(e)}function dee(e){return new jy(e)}function pee(e){return new Hy(e)}function fee(e){return new qy(e)}function mee(e){return new Zy(e)}function Aee(e){return new Xy(e)}function yee(e){return new Ky(e)}function gee(e){return new Gy(e)}function xee(e){return new Yy(e)}function wee(e){return new tg(e)}function bee(e){return new ng(e)}function _ee(e){return new rg(e)}function YA(e){return new sg(e)}function vee(e){return YA(e)}function kee(e){return YA(e)}function JA(e){return new og(e)}function Iee(e){return JA(e)}function See(e){return JA(e)}function QA(e){return new cg(e)}function Nee(e){return QA(e)}function Tee(e){return QA(e)}function Eee(e){return new ug(e)}function Cee(e){return new dg(e)}function _7(e){return new hg(e)}function v7(e){return new pg(e)}function k7(e){return new ag(e)}function I7(e){return new ig(e)}function Ree(e){return new lg(e)}function Mee(e){return new Fy(e)}function Fee(e){return new u0(e)}function $ee(e){return new $y(e)}function Dee(e){return new Hu(e)}function Oee(e){return new My(e)}function zee(e){return new c0(e)}function Pee(e){return new Dy(e)}function Lee(e){return new h0(e)}function Wee(e){return new Zr(e)}function Bee(e){return new l0(e)}function Vee(e){return new mg(e)}function Uee(e){return new fg(e)}var jee=_7,Hee=v7,Gee=k7,qee=I7;function Xee(e){return new Jy(e)}function Kee(e){return new Qy(e)}function Zee(e){return new eg(e)}function Yee(e){return new Uy(e)}var Mv={};Le(Mv,{MAPE:()=>Nne,MSE:()=>Cne,binaryAccuracy:()=>yne,binaryCrossentropy:()=>gne,categoricalAccuracy:()=>wne,categoricalCrossentropy:()=>bne,cosineProximity:()=>kne,mape:()=>Tne,meanAbsoluteError:()=>Ine,meanAbsolutePercentageError:()=>Sne,meanSquaredError:()=>Ene,mse:()=>Rne,precision:()=>_ne,recall:()=>vne,sparseCategoricalAccuracy:()=>xne});function yne(e,t){return sy(e,t)}function gne(e,t){return W7(e,t)}function xne(e,t){return B7(e,t)}function wne(e,t){return iy(e,t)}function bne(e,t){return oy(e,t)}function _ne(e,t){return L7(e,t)}function vne(e,t){return Ate(e,t)}function kne(e,t){return ry(e,t)}function Ine(e,t){return Jp(e,t)}function Sne(e,t){return Kl(e,t)}function Nne(e,t){return Kl(e,t)}function Tne(e,t){return Kl(e,t)}function Ene(e,t){return Oi(e,t)}function Cne(e,t){return Oi(e,t)}function Rne(e,t){return Oi(e,t)}var Fv={};Le(Fv,{modelFromJSON:()=>Zte});var $v={};Le($v,{l1:()=>Fne,l1l2:()=>Mne,l2:()=>$ne});function Mne(e){return new Vu(e)}function Fne(e){return ane(e)}function $ne(e){return sne(e)}var Dv=class extends Xl{constructor(){super(...arguments);this.model=null}setModel(e){if(!(e instanceof Aa))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function f0(e,t){return e<t}function Ov(e,t){return e>t}var zv=class extends Dv{constructor(e){super();if(e==null&&(e={}),e.restoreBestWeights)throw new ze("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=f0:this.mode==="max"?this.monitorFunc=Ov:this.monitor.indexOf("acc")!==-1?this.monitorFunc=Ov:this.monitorFunc=f0,this.monitorFunc===f0&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===f0?Infinity:-Infinity}async onEpochEnd(e,t){await Ya(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function Dne(e){return new zv(e)}var One={earlyStopping:Dne},Mr;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF"})(Mr||(Mr={}));var Pv;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(Pv||(Pv={}));var Ag={};function zne(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};Ag[e]=n}function Lv(e){return Ag[e]}function Pne(e){delete Ag[e]}function k(e,t,n,r,a){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return Fn(t.inputNames[s.inputIndexStart],n,r,a);if(s.type==="tensors")return t.inputNames.slice(o,l).map(h=>Fn(h,n,r,a));let u=Fn(t.inputNames.slice(o)[0],n,r,a),c=u.dataSync();return s.type==="number"?c[0]:v.toNestedArray(u.shape,c)}let i=t.attrParams[e];return i&&i.value}function Fn(e,t,n,r){let[a,s]=jn(e);if(r!=null){let o=r.getHashTableHandleByName(a);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[m0(a,o)]);return i!==void 0?t[m0(a,i)][s]:void 0}function Lne(e,t,n){return t[m0(e,n.currentContextId)]}function ya(e,t){let[n,r]=jn(e);return[m0(n,t&&t.currentContextId),r]}function m0(e,t){return t?`${e}-${t}`:e}function jn(e){let t=e.split(":");return t.length===1?[e,0]:[t[0],Number(t[t.length-1])]}function A0(e,t,n){let r=k("pad",e,t,n);if(r==="explicit"){r=k("explicitPaddings",e,t,n);let a=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)a[s][0]=r[s*2],a[s][1]=r[s*2+1];return a}return r}function ga(e){return e.kept?e:zr(e)}var Wv={};Le(Wv,{json:()=>Wne});var Wne=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Bv={};Le(Bv,{json:()=>Bne});var Bne=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Vv={};Le(Vv,{json:()=>Vne});var Vne=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}],Uv={};Le(Uv,{json:()=>Une});var Une=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],jv={};Le(jv,{json:()=>jne});var jne=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],Hv={};Le(Hv,{json:()=>Hne});var Hne=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Gv={};Le(Gv,{json:()=>Gne});var Gne=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],qv={};Le(qv,{json:()=>qne});var qne=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],Xv={};Le(Xv,{json:()=>Xne});var Xne=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}],Kv={};Le(Kv,{json:()=>Kne});var Kne=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}],Zv={};Le(Zv,{json:()=>Zne});var Zne=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Yv={};Le(Yv,{json:()=>Yne});var Yne=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Jv={};Le(Jv,{json:()=>Jne});var Jne=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],Qv={};Le(Qv,{json:()=>Qne});var Qne=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],e6={};Le(e6,{json:()=>ere});var ere=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],t6={};Le(t6,{json:()=>tre});var tre=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],n6={};Le(n6,{json:()=>nre});var nre=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]}],a6=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[Wv,Bv,Vv,Uv,jv,Hv,Gv,Zv,Kv,qv,Yv,Jv,Qv,e6,t6,n6,Xv],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,r)=>(n[r.tfOpName]=r,n),{})}transformGraph(e,t={}){let n=e.node,r=[],a=[],s=[],i=n.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?r.push(f[m.name]):m.op==="Const"?a.push(f[m.name]):(m.input==null||m.input.length===0)&&s.push(f[m.name]),f),{}),o=[],l=[],u={},c={};t!=null&&(u=this.mapSignatureEntries(t.inputs),c=this.mapSignatureEntries(t.outputs));let h=Object.keys(i);h.forEach(f=>{let m=i[f];m.inputNames.forEach(A=>{let[y]=ya(A);m.inputs.push(i[y]),i[y].children.push(m)})}),Object.keys(c).length===0?h.forEach(f=>{let m=i[f];m.children.length===0&&l.push(m)}):Object.keys(c).forEach(f=>{let[m]=ya(f),A=i[m];A!=null&&(A.signatureKey=c[f],l.push(A))}),Object.keys(u).length>0?Object.keys(u).forEach(f=>{let[m]=ya(f),A=i[m];A&&(A.signatureKey=u[f],o.push(A))}):o=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let p={nodes:i,inputs:o,outputs:l,weights:a,placeholders:r,signature:t,functions:d};return s.length>0&&(p.initNodes=s),p}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=Lv(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(r=>r.startsWith("^")?r.substr(1):r),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((r,a)=>(r[a.name]={type:a.type,inputIndexStart:a.start,inputIndexEnd:a.end},r),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((r,a)=>{let s=a.type,i;switch(a.type){case"string":i=yg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=yg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"string[]":i=Ig(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Ig(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number":i=xg(e.attr,a.tfName,a.defaultValue||0),i===void 0&&!!a.tfDeprecatedName&&(i=xg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number[]":i=kg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=kg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool":i=gg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=gg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool[]":i=Ng(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Ng(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape":i=vg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=vg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape[]":i=Sg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Sg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype":i=bg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=bg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype[]":i=_g(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=_g(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"func":i=r6(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=r6(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${a.type} for op: ${e.op}`)}return r[a.name]={value:i,type:s},r},{})),n}mapFunction(e){let t=e.nodeDef,n=[],r=[],a={};t!=null&&(a=t.reduce((u,c)=>(u[c.name]=this.mapNode(c),c.op==="Const"&&r.push(u[c.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[c]=ya(u.name),h={name:c,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:wg(u.type),type:"dtype"}},children:[]};h.signatureKey=u.name,s.push(h),a[c]=h}),Object.keys(a).forEach(u=>{let c=a[u];c.inputNames.forEach(h=>{let[d]=ya(h);c.inputs.push(a[d]),a[d].children.push(c)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[c,h]=ya(o[u.name]),d=a[c];d!=null&&(d.defaultOutput=h,i.push(d))});let l=this.mapArgsToSignature(e);return{nodes:a,inputs:s,outputs:i,weights:r,placeholders:n,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function rre(e){let t=J().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function s6(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):rre(e);return t?n:n.toLowerCase()}function yg(e,t,n,r=!1){let a=e[t];return a!=null?s6(a.s,r):n}function gg(e,t,n){let r=e[t];return r?r.b:n}function xg(e,t,n){let r=e[t]||{},a=r.i!=null?r.i:r.f!=null?r.f:n;return typeof a=="number"?a:parseInt(a,10)}function wg(e){switch(typeof e=="string"&&(e=Mr[e]),e){case Mr.DT_FLOAT:return"float32";case Mr.DT_INT32:case Mr.DT_INT64:case Mr.DT_INT8:case Mr.DT_UINT8:return"int32";case Mr.DT_BOOL:return"bool";case Mr.DT_DOUBLE:return"float32";case Mr.DT_STRING:return"string";default:return null}}function r6(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function bg(e,t,n){let r=e[t];return r&&r.type?wg(r.type):n}function _g(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(a=>wg(a)):n}function i6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function vg(e,t,n){let r=e[t];return r&&r.shape?i6(r.shape):n}function kg(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(a=>typeof a=="number"?a:parseInt(a,10)):n}function Ig(e,t,n,r=!1){let a=e[t];return a&&a.list&&a.list.s?a.list.s.map(s=>s6(s,r)):n}function Sg(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(a=>i6(a)):n}function Ng(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var are=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(r=>this.getInput(r)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((r,a)=>(r[a]=this.getAttr(a),r),{}))}getInput(e){return Fn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return Fn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return xg(this.node.rawAttrs,e,t);if(n.s!=null)return yg(this.node.rawAttrs,e,t);if(n.b!=null)return gg(this.node.rawAttrs,e,t);if(n.shape!=null)return vg(this.node.rawAttrs,e,t);if(n.type!=null)return bg(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return kg(this.node.rawAttrs,e,t);if(n.list.s!=null)return Ig(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Sg(this.node.rawAttrs,e,t);if(n.list.b!=null)return Ng(this.node.rawAttrs,e,t);if(n.list.type!=null)return _g(this.node.rawAttrs,e,t)}return t}},sre=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[ie(k("a",e,t,n),k("b",e,t,n))];case"AddN":return[Pa(k("tensors",e,t,n))];case"FloorMod":case"Mod":return[Nm(k("a",e,t,n),k("b",e,t,n))];case"Mul":return[O(k("a",e,t,n),k("b",e,t,n))];case"RealDiv":case"Div":return[ge(k("a",e,t,n),k("b",e,t,n))];case"DivNoNan":return[ym(k("a",e,t,n),k("b",e,t,n))];case"FloorDiv":return[vd(k("a",e,t,n),k("b",e,t,n))];case"Sub":return[xe(k("a",e,t,n),k("b",e,t,n))];case"Minimum":return[kl(k("a",e,t,n),k("b",e,t,n))];case"Maximum":return[Br(k("a",e,t,n),k("b",e,t,n))];case"Pow":return[ua(k("a",e,t,n),k("b",e,t,n))];case"SquaredDifference":return[qd(k("a",e,t,n),k("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},ire=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[Lt(k("x",e,t,n))];case"Acos":return[tm(k("x",e,t,n))];case"Acosh":return[nm(k("x",e,t,n))];case"Asin":return[am(k("x",e,t,n))];case"Asinh":return[sm(k("x",e,t,n))];case"Atan":return[im(k("x",e,t,n))];case"Atan2":return[om(k("x",e,t,n),k("y",e,t,n))];case"Atanh":return[lm(k("x",e,t,n))];case"Ceil":return[dm(k("x",e,t,n))];case"Complex":return[$a(k("real",e,t,n),k("imag",e,t,n))];case"Cos":return[eu(k("x",e,t,n))];case"Cosh":return[Td(k("x",e,t,n))];case"Elu":return[wl(k("x",e,t,n))];case"Erf":return[gm(k("x",e,t,n))];case"Exp":return[Yn(k("x",e,t,n))];case"Expm1":return[xm(k("x",e,t,n))];case"Floor":return[bl(k("x",e,t,n))];case"Log":return[zn(k("x",e,t,n))];case"Log1p":return[Md(k("x",e,t,n))];case"Imag":return[Cd(k("x",e,t,n))];case"Neg":return[St(k("x",e,t,n))];case"Reciprocal":return[Cm(k("x",e,t,n))];case"Real":return[ou(k("x",e,t,n))];case"Relu":return[Ur(k("x",e,t,n))];case"Round":return[Rm(k("x",e,t,n))];case"Selu":return[Bd(k("x",e,t,n))];case"Sigmoid":return[On(k("x",e,t,n))];case"Sin":return[Vd(k("x",e,t,n))];case"Sign":return[Fm(k("x",e,t,n))];case"Sinh":return[Ud(k("x",e,t,n))];case"Softplus":return[_l(k("x",e,t,n))];case"Sqrt":return[nn(k("x",e,t,n))];case"Square":return[ct(k("x",e,t,n))];case"Tanh":return[yl(k("x",e,t,n))];case"Tan":return[Om(k("x",e,t,n))];case"ClipByValue":return[In(k("x",e,t,n),k("clipValueMin",e,t,n),k("clipValueMax",e,t,n))];case"Relu6":return[Ld(k("x",e,t,n))];case"Rsqrt":return[Wd(Fn(e.inputNames[0],t,n))];case"Prod":return[zd(k("x",e,t,n),k("axes",e,t,n))];case"LeakyRelu":return[nu(k("x",e,t,n),k("alpha",e,t,n))];case"Prelu":return[iu(k("x",e,t,n),k("alpha",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function mr(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let r=0;r<e.length;r++){let a=e[r],s=t[r];v.assert(a<0||s<0||a===s,()=>n+` Shapes ${e} and ${t} must match`)}}}function o6(e){return!(typeof e=="number"||e.some(t=>t<0))}function Xu(e,t,n){let r=Tg(e,n),a=!o6(r);if(a&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(a&&t.forEach(s=>{r=Tg(s.shape,r)}),!o6(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function Tg(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let r=0;r<e.length;++r){let a=e[r],s=t[r];if(a>=0&&s>=0&&a!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=a>=0?a:s}return n}var ore=class{constructor(e,t,n,r,a,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=a,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=be(0),qt(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},
|
|
because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),mr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,qt(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,r)=>this.write(n,t[r]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let r=0;r<this.size();r++)e.push(r)}if(e.length===0)return vr([],[0].concat(this.elementShape));let n=this.readMany(e);return mr(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),pn(n,0)}concat(e){if(!!e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(this.size()===0)return vr([],[0].concat(this.elementShape));let t=[];for(let r=0;r<this.size();r++)t.push(r);let n=this.readMany(t);return mr(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),it(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,ur(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,r=e.map(o=>(n+=o,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let a=n===0?0:t.size/n,s=[];z(()=>{t=j(t,[1,n,a]);for(let o=0;o<e.length;++o){let l=o===0?0:r[o-1],u=[0,l,0],c=[1,e[o],a];s[o]=j(Fe(t,u,c),this.elementShape)}return s});let i=[];for(let o=0;o<e.length;o++)i[o]=o;this.writeMany(i,s)}},Ku=class{constructor(e,t,n,r=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(a=>{if(n!==a.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${a.dtype}`);mr(t,a.shape,"TensorList shape mismatch: "),qt(a)}),this.idTensor=be(0),this.maxNumElements=r,qt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Ku([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);mr(e,this.elementShape,"TensorList shape mismatch: ");let r=Xu(this.elementShape,this.tensors,e);return z(()=>{let a=this.tensors.map(s=>j(s,r));return pn(a,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Xu(this.elementShape,this.tensors,e),r=this.tensors.pop();return mr(r.shape,e,"TensorList shape mismatch: "),j(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(mr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");qt(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=e}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);mr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let r=Xu(this.elementShape,this.tensors,t);return j(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);mr(this.elementShape,t.shape,"TensorList shape mismatch: "),qt(t),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);mr(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let r=Xu(this.elementShape,this.tensors,n);return e.length===0?vr([],[0].concat(r)):z(()=>{let a=e.map(s=>j(this.tensors[s],r));return pn(a,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);mr(this.elementShape,t,"TensorList shape mismatch: ");let n=Xu(this.elementShape,this.tensors,t);return this.size()===0?vr([],[0].concat(n)):z(()=>{let r=this.tensors.map(a=>j(a,n));return it(r,0)})}};function lre(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let a=e.shape.slice(1);mr(a,t,"TensorList shape mismatch: ");let s=ur(e);return new Ku(s,t,r)}function cre(e,t,n){return new Ku([],e,t,n)}function ure(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let a=Math.max(...t);if(r!=null&&r!==-1&&a>=r)throw new Error(`Max index must be < array size (${a} vs. ${r})`);let s=new Ku([],n,e.dtype,r),i=ur(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function hre(e,t,n){let r=0,a=t.map(c=>(r+=c,r));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${r}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=Tg(s,n),o=r===0?0:e.size/r,l=z(()=>{let c=[];e=j(e,[1,r,o]);for(let h=0;h<t.length;++h){let d=h===0?0:a[h-1],p=[0,d,0],f=[1,t[h],o];c[h]=j(Fe(e,p,f),i)}return e.dispose(),c}),u=new Ku([],n,e.dtype,t.length);for(let c=0;c<l.length;c++)u.setItem(c,l[c]);return u}var dre=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let r=k("thenBranch",e,t,n),a=k("elseBranch",e,t,n),s=k("cond",e,t,n),i=k("args",e,t,n);return(await s.data())[0]?n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=k("body",e,t,n),a=k("cond",e,t,n),s=k("args",e,t,n),i=await n.functionMap[a].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map(c=>c.id),l=await i[0].data();i.forEach(c=>{!c.kept&&o.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;l[0];){let c=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let h=u.map(p=>p.id);c.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()});let d=await n.functionMap[a].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await d[0].data(),d.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()})}return u}case"LoopCond":{let r=k("pred",e,t,n);return[ga(r)]}case"Switch":{let r=k("pred",e,t,n),a=k("data",e,t,n);return a.kept||(a=ga(a)),(await r.data())[0]?[void 0,a]:[a,void 0]}case"Merge":{let r=e.inputNames.find(a=>Fn(a,t,n)!==void 0);if(r){let a=Fn(r,t,n);return[ga(a)]}return}case"Enter":{let r=k("frameName",e,t,n),a=k("tensor",e,t,n);return n.enterFrame(r),[ga(a)]}case"Exit":{let r=k("tensor",e,t,n);return n.exitFrame(),[ga(r)]}case"NextIteration":{let r=k("tensor",e,t,n);return n.nextIteration(),[ga(r)]}case"TensorArrayV3":{let r=k("size",e,t,n),a=k("dtype",e,t,n),s=k("elementShape",e,t,n),i=k("dynamicSize",e,t,n),o=k("clearAfterRead",e,t,n),l=k("identicalElementShapes",e,t,n),u=k("name",e,t,n),c=new ore(u,a,r,s,l,i,o);return n.addTensorArray(c),[c.idTensor,be(1)]}case"TensorArrayWriteV3":{let r=k("tensorArrayId",e,t,n),a=k("index",e,t,n),s=k("tensor",e,t,n),i=n.getTensorArray(r.id);return i.write(a,s),[i.idTensor]}case"TensorArrayReadV3":{let r=k("tensorArrayId",e,t,n),a=k("index",e,t,n);return[n.getTensorArray(r.id).read(a)]}case"TensorArrayGatherV3":{let r=k("tensorArrayId",e,t,n),a=k("indices",e,t,n),s=k("dtype",e,t,n);return[n.getTensorArray(r.id).gather(a,s)]}case"TensorArrayScatterV3":{let r=k("tensorArrayId",e,t,n),a=k("indices",e,t,n),s=k("tensor",e,t,n),i=n.getTensorArray(r.id);return i.scatter(a,s),[i.idTensor]}case"TensorArrayConcatV3":{let r=k("tensorArrayId",e,t,n),a=n.getTensorArray(r.id),s=k("dtype",e,t,n);return[a.concat(s)]}case"TensorArraySplitV3":{let r=k("tensorArrayId",e,t,n),a=k("tensor",e,t,n),s=k("lengths",e,t,n),i=n.getTensorArray(r.id);return i.split(s,a),[i.idTensor]}case"TensorArraySizeV3":{let r=k("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return[be(a.size(),"int32")]}case"TensorArrayCloseV3":{let r=k("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return a.clearAndClose(),[a.idTensor]}case"TensorListSetItem":{let r=k("tensorListId",e,t,n),a=k("index",e,t,n),s=k("tensor",e,t,n),i=n.getTensorList(r.id);return i.setItem(a,s),[i.idTensor]}case"TensorListGetItem":{let r=k("tensorListId",e,t,n),a=k("index",e,t,n),s=k("elementShape",e,t,n),i=k("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(a,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let r=k("indices",e,t,n),a=k("tensor",e,t,n),s=k("elementShape",e,t,n),i=k("numElements",e,t,n),o=ure(a,r,s,i);return n.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=k("elementShape",e,t,n),a=k("elementDType",e,t,n),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,n),o=cre(r,a,i);return n.addTensorList(o),[o.idTensor]}case"TensorListGather":{let r=k("tensorListId",e,t,n),a=k("indices",e,t,n),s=k("elementShape",e,t,n),i=k("elementDType",e,t,n);return[n.getTensorList(r.id).gather(a,i,s)]}case"TensorListStack":{let r=k("tensorListId",e,t,n),a=k("elementShape",e,t,n),s=k("elementDType",e,t,n),i=k("numElements",e,t,n);return[n.getTensorList(r.id).stack(a,s,i)]}case"TensorListFromTensor":{let r=k("tensor",e,t,n),a=k("elementShape",e,t,n),s=k("elementDType",e,t,n),i=lre(r,a,s);return n.addTensorList(i),[i.idTensor]}case"TensorListConcat":{let r=k("tensorListId",e,t,n),a=n.getTensorList(r.id),s=k("dtype",e,t,n),i=k("elementShape",e,t,n);return[a.concat(s,i)]}case"TensorListPushBack":{let r=k("tensorListId",e,t,n),a=k("tensor",e,t,n),s=n.getTensorList(r.id);return s.pushBack(a),[s.idTensor]}case"TensorListPopBack":{let r=k("tensorListId",e,t,n),a=k("elementShape",e,t,n),s=k("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(a,s)]}case"TensorListSplit":{let r=k("tensor",e,t,n),a=k("elementShape",e,t,n),s=k("lengths",e,t,n),i=hre(r,s,a);return n.addTensorList(i),[i.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function l6(e,t,n){let[r,a]=k("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=r==="fusedbatchnorm",l=k("numArgs",e,t,n);if(s){if(i&&l!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&l!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(o)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.");let u=k("strides",e,t,n),c=A0(e,t,n),h=k("dataFormat",e,t,n).toUpperCase(),d=k("dilations",e,t,n),[p,f]=k("args",e,t,n),m=k("leakyreluAlpha",e,t,n);return{stride:u,pad:c,dataFormat:h,dilations:d,biasArg:p,preluArg:f,activationFunc:a,leakyreluAlpha:m}}var pre=(e,t,n)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,n),a=k("pad",e,t,n),s=k("dataFormat",e,t,n).toUpperCase(),i=k("dilation",e,t,n);return[Sd(k("x",e,t,n),k("filter",e,t,n),r,a,s,i)]}case"Conv2D":{let r=k("strides",e,t,n),a=A0(e,t,n),s=k("dataFormat",e,t,n).toUpperCase(),i=k("dilations",e,t,n);return[la(k("x",e,t,n),k("filter",e,t,n),[r[1],r[2]],a,s,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:c}=l6(e,t,n);return[ja.conv2d({x:k("x",e,t,n),filter:k("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:c}=l6(e,t,n);return[ja.depthwiseConv2d({x:k("x",e,t,n),filter:k("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,n),a=k("strides",e,t,n),s=A0(e,t,n);return[Nd(k("x",e,t,n),k("filter",e,t,n),r,[a[1],a[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,n),a=A0(e,t,n),s=k("dilations",e,t,n),i=k("dataFormat",e,t,n).toUpperCase();return[xl(k("input",e,t,n),k("filter",e,t,n),[r[1],r[2]],a,i,[s[1],s[2]])]}case"Conv3D":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("dataFormat",e,t,n).toUpperCase(),i=k("dilations",e,t,n);return[fm(k("x",e,t,n),k("filter",e,t,n),[r[1],r[2],r[3]],a,s,[i[1],i[2],i[3]])]}case"AvgPool":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("kernelSize",e,t,n);return[Yc(k("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPool":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("kernelSize",e,t,n);return[au(k("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("kernelSize",e,t,n),i=k("includeBatchInIndex",e,t,n),{result:o,indexes:l}=Dx(k("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a,i);return[o,l]}case"AvgPool3D":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("kernelSize",e,t,n);return[hm(k("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"MaxPool3D":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("kernelSize",e,t,n);return[Im(k("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"Dilation2D":{let r=k("strides",e,t,n),a=k("pad",e,t,n),s=k("dilations",e,t,n),i=r[1],o=r[2],l=s[1],u=s[2];return[Am(k("x",e,t,n),k("filter",e,t,n),[i,o],a,[l,u],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},fre=(e,t,n)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,n),a=k("dtype",e,t,n),s=k("value",e,t,n);return[tu(r,s,a)]}case"LinSpace":{let r=k("start",e,t,n),a=k("stop",e,t,n),s=k("num",e,t,n);return[Tx(r,a,s)]}case"Multinomial":{let r=k("logits",e,t,n),a=k("numSamples",e,t,n),s=k("seed",e,t,n);return[Ox(r,a,s)]}case"OneHot":{let r=k("indices",e,t,n),a=k("depth",e,t,n),s=k("onValue",e,t,n),i=k("offValue",e,t,n);return[dl(r,a,s,i)]}case"Ones":return[Vr(k("shape",e,t,n),k("dtype",e,t,n))];case"OnesLike":return[Pn(k("x",e,t,n))];case"RandomUniform":return[Il(k("shape",e,t,n),k("minval",e,t,n),k("maxval",e,t,n),k("dtype",e,t,n))];case"Range":{let r=k("start",e,t,n),a=k("stop",e,t,n),s=k("step",e,t,n);return[Pd(r,a,s,k("dtype",e,t,n))]}case"TruncatedNormal":{let r=k("shape",e,t,n),a=k("mean",e,t,n),s=k("stdDev",e,t,n),i=k("seed",e,t,n);return[Xd(r,a,s,k("dtype",e,t,n),i)]}case"Zeros":return[Ft(k("shape",e,t,n),k("dtype",e,t,n))];case"ZerosLike":return[qe(k("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Eg(e,t,n){let r=k("boxes",e,t,n),a=k("scores",e,t,n),s=k("maxOutputSize",e,t,n),i=k("iouThreshold",e,t,n),o=k("scoreThreshold",e,t,n),l=k("softNmsSigma",e,t,n);return{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var mre=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}=Eg(e,t,n),u=await We.nonMaxSuppressionWithScoreAsync(r,a,s,i,o,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Eg(e,t,n),l=k("padToMaxOutputSize",e,t,n),u=await We.nonMaxSuppressionPaddedAsync(r,a,s,i,o,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Eg(e,t,n);return[await We.nonMaxSuppressionAsync(r,a,s,i,o)]}case"Where":{let r=we(k("condition",e,t,n),"bool"),a=[await Lm(r)];return r.dispose(),a}case"ListDiff":return Lx(k("x",e,t,n),k("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},Are=(e,t,n)=>{switch(e.op){case"TopKV2":{let r=k("x",e,t,n),a=k("k",e,t,n),s=k("sorted",e,t,n),i=zm(r,a,s);return[i.values,i.indices]}case"Unique":{let r=k("x",e,t,n),a=Kd(r);return[a.values,a.indices]}case"UniqueV2":{let r=k("x",e,t,n),a=k("axis",e,t,n),s=Kd(r,a);return[s.values,s.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},yre=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,n);return[Fn(e.name,t,n)||r];case"Placeholder":return[Fn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let u=k("x",e,t,n);return[ga(u)]}case"IdentityN":return k("x",e,t,n).map(u=>ga(u));case"Snapshot":let a=k("x",e,t,n);return[ga(a)];case"Shape":return[un(k("x",e,t,n).shape,"int32")];case"ShapeN":return k("x",e,t,n).map(u=>un(u.shape));case"Size":return[be(k("x",e,t,n).size,"int32")];case"Rank":return[be(k("x",e,t,n).rank,"int32")];case"NoOp":return[be(1)];case"Print":let s=k("x",e,t,n),i=k("data",e,t,n),o=k("message",e,t,n),l=k("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(o);for(let u=0;u<i.length;u++)console.log(Array.prototype.slice.call(i[u].dataSync()).slice(0,l));return[s];default:throw TypeError(`Node type ${e.op} is not implemented`)}},gre=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=be(0),this.tensorMap=new Map,qt(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(e=>e.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return be(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),z(()=>{let r=ur(t),a=n.length,s=r.length;v.assert(a===s,()=>`The number of elements doesn't match, keys has ${a} elements, the values has ${s} elements.`);for(let i=0;i<a;i++){let o=n[i],l=r[i];qt(l),this.tensorMap.set(o,l)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return z(()=>{let r=[];for(let a=0;a<n.length;a++){let s=n[a],i=this.findWithDefault(s,t);r.push(i)}return pn(r)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},xre=async(e,t,n,r)=>{switch(e.op){case"HashTable":case"HashTableV2":{let a=k("keyDType",e,t,n),s=k("valueDType",e,t,n),i=new gre(a,s);return r.addHashTable(e.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{let a=k("tableHandle",e,t,n,r),s=k("keys",e,t,n),i=k("values",e,t,n);return[await r.getHashTableById(a.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let a=k("tableHandle",e,t,n,r),s=k("keys",e,t,n),i=k("defaultValue",e,t,n);return[await r.getHashTableById(a.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let a=k("tableHandle",e,t,n,r);return[r.getHashTableById(a.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},wre=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,n),a=k("size",e,t,n),s=k("alignCorners",e,t,n),i=k("halfPixelCenters",e,t,n);return[We.resizeBilinear(r,[a[0],a[1]],s,i)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,n),a=k("size",e,t,n),s=k("alignCorners",e,t,n),i=k("halfPixelCenters",e,t,n);return[We.resizeNearestNeighbor(r,[a[0],a[1]],s,i)]}case"CropAndResize":{let r=k("image",e,t,n),a=k("boxes",e,t,n),s=k("boxInd",e,t,n),i=k("cropSize",e,t,n),o=k("method",e,t,n),l=k("extrapolationValue",e,t,n);return[We.cropAndResize(r,a,s,i,o,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},bre=(e,t,n)=>{switch(e.op){case"Equal":return[Wa(k("a",e,t,n),k("b",e,t,n))];case"NotEqual":return[wi(k("a",e,t,n),k("b",e,t,n))];case"Greater":return[lr(k("a",e,t,n),k("b",e,t,n))];case"GreaterEqual":return[Va(k("a",e,t,n),k("b",e,t,n))];case"Less":return[Rd(k("a",e,t,n),k("b",e,t,n))];case"LessEqual":return[gi(k("a",e,t,n),k("b",e,t,n))];case"LogicalAnd":return[cr(k("a",e,t,n),k("b",e,t,n))];case"LogicalNot":return[ru(k("a",e,t,n))];case"LogicalOr":return[Dd(k("a",e,t,n),k("b",e,t,n))];case"Select":case"SelectV2":return[Sn(k("condition",e,t,n),k("a",e,t,n),k("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},_re=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Ke(k("a",e,t,n),k("b",e,t,n),k("transposeA",e,t,n),k("transposeB",e,t,n))];case"Transpose":return[st(k("x",e,t,n),k("perm",e,t,n))];case"_FusedMatMul":let[r,a]=k("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=k("numArgs",e,t,n),l=k("leakyreluAlpha",e,t,n);if(s){if(i&&o!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[u,c]=k("args",e,t,n);return[ja.matMul({a:k("a",e,t,n),b:k("b",e,t,n),transposeA:k("transposeA",e,t,n),transposeB:k("transposeB",e,t,n),bias:u,activation:a,preluActivationWeights:c,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},vre=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[Ai(k("x",e,t,n),k("mean",e,t,n),k("variance",e,t,n),k("offset",e,t,n),k("scale",e,t,n),k("epsilon",e,t,n))];case"FusedBatchNormV3":return[Ai(k("x",e,t,n),k("mean",e,t,n),k("variance",e,t,n),k("offset",e,t,n),k("scale",e,t,n),k("epsilon",e,t,n))];case"LRN":return[bm(k("x",e,t,n),k("radius",e,t,n),k("bias",e,t,n),k("alpha",e,t,n),k("beta",e,t,n))];case"Softmax":return[cu(k("x",e,t,n))];case"LogSoftmax":return[$d(k("x",e,t,n))];case"SparseToDense":return[Wm(k("sparseIndices",e,t,n),k("outputShape",e,t,n),k("sparseValues",e,t,n),k("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},kre=(e,t,n)=>{switch(e.op){case"Max":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[Nn(k("x",e,t,n),i,o)]}case"Mean":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[Nt(k("x",e,t,n),i,o)]}case"Min":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[vl(k("x",e,t,n),i,o)]}case"Sum":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[Me(k("x",e,t,n),i,o)]}case"All":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[kd(k("x",e,t,n),i,o)]}case"Any":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[Kc(k("x",e,t,n),i,o)]}case"ArgMax":{let i=k("axis",e,t,n);return[fi(k("x",e,t,n),i)]}case"ArgMin":{let i=k("axis",e,t,n);return[rm(k("x",e,t,n),i)]}case"Prod":{let i=k("axis",e,t,n),o=k("keepDims",e,t,n);return[zd(k("x",e,t,n),i,o)]}case"Cumsum":{let i=k("axis",e,t,n),o=k("exclusive",e,t,n),l=k("reverse",e,t,n);return[Ed(k("x",e,t,n),i,o,l)]}case"Bincount":let r=k("x",e,t,n),a=k("weights",e,t,n),s=k("size",e,t,n);return[gx(r,a,s)];case"DenseBincount":{let i=k("x",e,t,n),o=k("weights",e,t,n),l=k("size",e,t,n),u=k("binaryOutput",e,t,n);return[vx(i,o,l,u)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Ire=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,n),a=k("axis",e,t,n),s=k("tensors",e,t,n);return s=s.slice(0,r),[it(s,a)]}case"Gather":{let r=k("x",e,t,n),a=k("indices",e,t,n);return[yi(r,we(a,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,n),a=k("batchDims",e,t,n),s=k("x",e,t,n),i=k("indices",e,t,n);return[yi(s,we(i,"int32"),r,a)]}case"Reverse":{let r=k("dims",e,t,n),a=[];for(let i=0;i<r.length;i++)r[i]&&a.push(i);let s=k("x",e,t,n);return[Ln(s,a)]}case"ReverseV2":{let r=k("axis",e,t,n),a=k("x",e,t,n);return[Ln(a,r)]}case"Slice":{let r=k("begin",e,t,n),a=k("size",e,t,n);return[Fe(k("x",e,t,n),r,a)]}case"StridedSlice":{let r=k("begin",e,t,n),a=k("end",e,t,n),s=k("strides",e,t,n),i=k("beginMask",e,t,n),o=k("endMask",e,t,n),l=k("ellipsisMask",e,t,n),u=k("newAxisMask",e,t,n),c=k("shrinkAxisMask",e,t,n),h=k("x",e,t,n);return[Dm(h,r,a,s,i,o,l,u,c)]}case"Pack":return z(()=>{let r=k("axis",e,t,n),a=k("tensors",e,t,n),s=a[0].shape,i=Ua(a[0]).shape,o=a.map(l=>{let u=v.arraysEqual(l.shape,s);if(!u&&!v.arraysEqual(Ua(l).shape,i))throw new Error("the input tensors shape does not match");return u?l:j(l,s)});return[pn(o,r)]});case"Unpack":{let r=k("axis",e,t,n),a=k("tensor",e,t,n);return ur(a,r)}case"Tile":{let r=k("reps",e,t,n);return[Ba(k("x",e,t,n),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,n),a=k("numOrSizeSplits",e,t,n),s=k("x",e,t,n);return Bt(s,a,r)}case"ScatterNd":{let r=k("indices",e,t,n),a=k("values",e,t,n),s=k("shape",e,t,n);return[Ux(r,a,s)]}case"GatherNd":{let r=k("x",e,t,n),a=k("indices",e,t,n);return[jx(r,a)]}case"SparseToDense":{let r=k("sparseIndices",e,t,n),a=k("outputShape",e,t,n),s=k("sparseValues",e,t,n),i=k("defaultValue",e,t,n);return[Wm(r,s,a,s.dtype===i.dtype?i:we(i,s.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Sre=(e,t,n)=>{switch(e.op){case"FFT":return[uu(k("x",e,t,n))];case"IFFT":return[Sl(k("x",e,t,n))];case"RFFT":return[hu(k("x",e,t,n))];case"IRFFT":return[Gd(k("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Nre=(e,t,n)=>{switch(e.op){case"Cast":return[we(k("x",e,t,n),k("dtype",e,t,n))];case"ExpandDims":{let r=k("axis",e,t,n);return[tn(k("x",e,t,n),r)]}case"Squeeze":{let r=k("axis",e,t,n);return[Ua(k("x",e,t,n),r)]}case"Reshape":return[j(k("x",e,t,n),k("shape",e,t,n))];case"MirrorPad":return[Sm(k("x",e,t,n),k("padding",e,t,n),k("mode",e,t,n))];case"PadV2":case"Pad":return[ca(k("x",e,t,n),k("padding",e,t,n),k("constantValue",e,t,n))];case"SpaceToBatchND":{let r=k("blockShape",e,t,n),a=k("paddings",e,t,n);return[su(k("x",e,t,n),r,a)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,n),a=k("crops",e,t,n);return[Jc(k("x",e,t,n),r,a)]}case"DepthToSpace":{let r=k("blockSize",e,t,n),a=k("dataFormat",e,t,n).toUpperCase();return[mm(k("x",e,t,n),r,a)]}case"BroadcastTo":return[Qc(k("x",e,t,n),k("shape",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function c6(e,t,n,r){let a=((s,i,o)=>{switch(s.category){case"arithmetic":return z(()=>sre(s,i,o));case"basic_math":return z(()=>ire(s,i,o));case"control":return dre(s,i,o);case"convolution":return z(()=>pre(s,i,o));case"creation":return z(()=>fre(s,i,o));case"dynamic":return mre(s,i,o);case"evaluation":return z(()=>Are(s,i,o));case"image":return z(()=>wre(s,i,o));case"graph":return z(()=>yre(s,i,o));case"logical":return z(()=>bre(s,i,o));case"matrices":return z(()=>_re(s,i,o));case"normalization":return z(()=>vre(s,i,o));case"reduction":return z(()=>kre(s,i,o));case"slice_join":return z(()=>Ire(s,i,o));case"spectral":return z(()=>Sre(s,i,o));case"transformation":return z(()=>Nre(s,i,o));case"hash_table":return xre(s,i,o,r);case"custom":let l=Lv(s.op);if(l&&l.customExecutor)return l.customExecutor(new are(s,i,o));throw TypeError(`Custom op ${s.op} is not registered.`);default:throw TypeError(`Unknown op '${s.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return v.isPromise(a)?a.then(s=>[].concat(s)):[].concat(a)}var u6=class{constructor(e={},t={},n={},r={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function d6(e,t,n,r){let a=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(d=>jn(d)[0]),c=[];r!=null&&(c=r.map(d=>jn(d.name)[0]));let h=[...t];for(;h.length>0;){let d=h.pop();if((h6(d)||Tre(d)||Ere(d))&&i==null&&(i=d,o=i.children.map(p=>p.name).filter(p=>a.has(p))),a.add(d.name),n[d.name]==null&&u.indexOf(d.name)===-1&&c.indexOf(d.name)===-1){if(d.inputs.length===0){s.push(d.name);continue}d.inputs.forEach(p=>{l.has(p.name)||(l.add(p.name),h.push(p))})}}return{inputs:e,outputs:t,usedNodes:a,missingInputs:s,dynamicNode:i,syncInputs:o}}function Cre(e,t,n){let{usedNodes:r,inputs:a}=n,s=[],i=Object.keys(a).map(c=>jn(c)[0]).map(c=>e.nodes[c]),o=e.initNodes;i.forEach(c=>{r.has(c.name)&&s.push(c)}),e.weights.forEach(c=>{r.has(c.name)&&s.push(c)}),o!=null&&o.forEach(c=>{r.has(c.name)&&s.push(c)});let l=new Set,u=[];for(;s.length>0;){let c=s.pop();l.add(c.name),t[c.name]||u.push(c),c.children.forEach(h=>{!l.has(h.name)&&r.has(h.name)&&h.inputs.every(d=>l.has(d.name))&&s.push(h)})}return u}var Rre=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],Mre=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],Fre=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function h6(e){return Rre.indexOf(e.op)>=0}function Tre(e){return Mre.indexOf(e.op)>=0}function Ere(e){return Fre.indexOf(e.op)>=0}var Cg=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new Cg(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(r=>r.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(a=>a.name).sort(),r=t.map(a=>a.name).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){let n=d6(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:a,syncInputs:s}=n;if(a!=null)throw new Error(`This execution contains the node '${a.name}', which has the dynamic op '${a.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(r.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${r}]`)}return Cre(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let r=n.map(c=>this.graph.nodes[jn(c)[0]]),a=t.map(c=>jn(c)[0]),s=a.map(c=>this.graph.nodes[c]);s.length===0&&(s=this._outputs);let i=this.getCompilationKey(r,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));let l={},u={};return z(()=>{let c=new u6(this.weightMap,l,u,this.functionExecutorMap),h=Object.assign({},this.weightMap);Object.keys(e).forEach(f=>{let[m,A]=jn(f),y=[];y[A]=e[f],h[m]=y});let d=this.getFrozenTensorIds(h),p={};for(let f=0;f<o.length;f++){let m=o[f];if(!h[m.name]){let A=c6(m,h,c,this._resourceManager);if(v.isPromise(A))throw new Error(`The execution of the op '${m.op}' returned a promise. Please use model.executeAsync() instead.`);h[m.name]=A,this.checkTensorForDisposal(m.name,m,h,c,d,a,p)}}return this.parent==null&&c.dispose(d),t.map(f=>Fn(f,h,c))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(r=>r.id)));return new Set(t)}checkTensorForDisposal(e,t,n,r,a,s,i){t.category==="control"||s.indexOf(e)!==-1||(n[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=Lne(o.name,n,r);l!=null&&l.forEach(u=>{if(u&&!a.has(u.id)){let c=i[u.id];c===1?(u.dispose(),delete i[u.id]):c!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,r={},a={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));let s=new u6(this.weightMap,r,a,this.functionExecutorMap),i=await this.executeWithControlFlow(e,s,t,n),o=t.map(h=>Fn(h,i,s)),l=o.map(h=>h.id),u=Object.keys(e).map(h=>e[h].id),c=new Set([...l,...u,...this.weightIds]);return Object.keys(i).forEach(h=>{i[h].forEach(d=>{d&&!d.isDisposed&&!c.has(d.id)&&d.dispose()})}),this.parent==null&&s.dispose(c),o}async executeFunctionAsync(e,t,n){let r=e.reduce((a,s,i)=>(a[this.inputs[i].name]=s,a),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let a=Object.keys(e),s=a.map(g=>this.graph.nodes[jn(g)[0]]),i=n.map(g=>jn(g)[0]),o=i.map(g=>this.graph.nodes[g]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:c,syncInputs:h}=d6(e,o,this.weightMap,this._initNodes),d=[...s,...this.graph.weights,...this._initNodes||[]].map(g=>({node:g,contexts:t.currentContext})),p=Object.assign({},this.weightMap);Object.keys(e).forEach(g=>{let[w,b]=jn(g),_=[];_[b]=e[g],p[w]=_});let f={},m=this.getFrozenTensorIds(p),A={};for(;d.length>0;){let g=this.processStack(s,d,t,p,A,m,i,f,l);await Promise.all(g)}c==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=o.filter(g=>!h6(g)&&!Fn(g.name,p,t)).map(g=>g.name);if(y.length>0){let g="";throw c!=null&&(g=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${a}]. Consider providing the following inputs: [${u}]. ${g}`)}return p}processStack(e,t,n,r,a,s,i,o,l){let u=[];for(;t.length>0;){let c=t.pop();n.currentContext=c.contexts;let h="";if(c.node.op==="Enter"&&k("isConstant",c.node,r,n)&&([h]=ya(c.node.name,n)),r[c.node.name]==null){let d=c6(c.node,r,n,this._resourceManager);h||([h]=ya(c.node.name,n));let p=n.currentContext;v.isPromise(d)?u.push(d.then(f=>(r[h]=f,n.currentContext=p,this.checkTensorForDisposal(h,c.node,r,n,s,i,o),this.processChildNodes(c.node,t,n,r,a,l),f))):(r[h]=d,this.checkTensorForDisposal(h,c.node,r,n,s,i,o),this.processChildNodes(c.node,t,n,r,a,l))}else this.processChildNodes(c.node,t,n,r,a,l)}return u}processChildNodes(e,t,n,r,a,s){e.children.forEach(i=>{let[o]=ya(i.name,n);a[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!Fn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!Fn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[r]=jn(t),a=this.graph.nodes[r];if(a.attrParams.shape&&a.attrParams.shape.value){let s=a.attrParams.shape.value,i=s.length===n.shape.length&&n.shape.every((o,l)=>s[l]===-1||s[l]===o);v.assert(i,()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${s}], but was [${n.shape}]`)}a.attrParams.dtype&&a.attrParams.dtype.value&&v.assert(n.dtype===a.attrParams.dtype.value,()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let r=this._signature.inputs[n];t[r.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[r]=jn(n);return this.graph.nodes[r]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=jn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},$re=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},Dre="?tfjs-format=file",Ore="model.json",p6=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new $re}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=kn.browserHTTPRequest(e,this.loadOptions);else{let t=kn.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(kn.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}async load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?n=this.artifacts.userDefinedMetadata.signature:n=this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let r=kn.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Cg(a6.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let a=a6.Instance.transformGraph(e.modelInitializer);this.initializer=new Cg(a),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if(typeof e=="string"){let n=kn.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof He)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,r)=>(t[n]=e[r],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function pt(e,t={}){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&e.load==null&&(e.endsWith("/")||(e=e+"/"),e=`${e}${Ore}${Dre}`);let n=new p6(e,t);return await n.load(),n}var zre="3.3.0",f6={};Le(f6,{CSVDataset:()=>A6,Dataset:()=>Jl,FileDataSource:()=>y6,TextLineDataset:()=>m6,URLDataSource:()=>g6,array:()=>Pre,csv:()=>Wre,func:()=>Bre,generator:()=>Vre,microphone:()=>jre,version_data:()=>Hre,webcam:()=>Ure,zip:()=>Lre});var Gre=ro(a5()),qre=ro(a5());function Xre(e,t){return y0(e,t)}function y0(e,t,n=new Map,r=new Set){if(e==null)return null;if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(a.recurse)if(Ql(e)){let s=Array.isArray(e)?[]:{};r.add(e);for(let i in e){let o=e[i],l=y0(o,t,n,r);s[i]=l}return r.delete(e),s}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,a.value),a.value}function Kre(e,t=w6){return x6(e,t)}function x6(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(a.recurse)if(Ql(r)){let s=Array.isArray(r)?[]:{};n.add(r);for(let i in r){let o=e.map(u=>u[i]),l=x6(o,t,n);s[i]=l}return n.delete(r),s}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return a.value}function w6(e){return e===null?null:Ql(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function b6(e,t){let n=new Map;y0(e,t,n);for(let r of Array.from(n.keys())){let a=n.get(r);if(v.isPromise(a)){let s=await a;n.set(r,s)}}return y0(e,t,n)}function Ql(e){return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof He))}function Yre(e){return e==null||Zre(e)||Array.isArray(e)||typeof e=="object"&&e instanceof He||v.isTypedArray(e)}function Zre(e){return e===null||typeof e!="object"&&typeof e!="function"}function Qre(e){return Xre(e,Jre)}function Jre(e){return e instanceof He?{value:e.clone(),recurse:!1}:Ql(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var _6=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,e==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}},Rg=class extends _6{constructor(){super(Rg.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let r=0;r<n;r++)t[r]=this.get(this.wrap(this.begin+r));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};Rg.INITIAL_CAPACITY=32;function v6(e){return new eae(e)}function Mg(e){return new tae(e)}function nae(e,t){return new k6(e,t)}function aae(e,t=ts.FAIL){return new rae(e,t)}var Yt=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new hae(this,e)}filter(e){return new cae(this,e)}map(e){return new uae(this,e)}mapAsync(e){return new I6(this,e)}serialMapAsync(e){return new I6(this,e).serial()}flatmap(e){return new dae(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile(t=>t===!0)}rowMajorBatch(e,t=!0){return new lae(this,e,t)}columnMajorBatch(e,t=!0,n=w6){return this.rowMajorBatch(e,t).map(r=>Kre(r,n))}concatenate(e,t){return new k6(v6([this,e]),t)}take(e){return e<0||e==null?this:new oae(this,e)}skip(e){return e<0||e==null?this:new iae(this,e)}prefetch(e){return new S6(this,e)}shuffle(e,t){return new pae(this,e,t)}serial(){return new sae(this)}},eae=class extends Yt{constructor(e){super();this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:Qre(e),done:!1}}},tae=class extends Yt{constructor(e){super();this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},sae=class extends Yt{constructor(e){super();this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},iae=class extends Yt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;Ie(e.value)}return this.upstream.next()}},oae=class extends Yt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},lae=class extends Yt{constructor(e,t,n=!0){super();this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},cae=class extends Yt{constructor(e,t){super();this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;Ie(e.value)}}},uae=class extends Yt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=br.getTensorsInContainer(e.value),n=this.transform(e.value),r=br.getTensorsInContainer(n);for(let a of t)br.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},hae=class extends Yt{constructor(e,t){super();this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},I6=class extends Yt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=br.getTensorsInContainer(e.value),n=await this.transform(e.value),r=br.getTensorsInContainer(n);for(let a of t)br.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},Fg=class extends Yt{constructor(){super();this.outputQueue=new Rg,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},dae=class extends Fg{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=br.getTensorsInContainer(e.value),n=this.transform(e.value),r=br.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let a of t)br.isTensorInList(a,r)||a.dispose();return!0}},k6=class extends Yt{constructor(e,t){super();this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}},ts;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(ts||(ts={}));var rae=class extends Yt{constructor(e,t=ts.FAIL){super();this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function r(s){return s instanceof Yt?{value:s.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let a=await b6(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case ts.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case ts.SHORTEST:return{value:null,done:!0};case ts.LONGEST:default:}return this.count++,{value:a,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},S6=class extends Yt{constructor(e,t){super();this.upstream=e,this.bufferSize=t,this.buffer=new _6(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},pae=class extends S6{constructor(e,t,n){super(e,t);this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=qre.alea(n||v.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(t.done)this.upstreamExhausted=!0;else return this.refill(),t}return{value:null,done:!0}}},Jl=class{constructor(){this.size=null}batch(e,t=!0){let n=this;v.assert(e>0,()=>`batchSize needs to be positive, but it is
|
|
${e}`);let r;return this.size===Infinity||this.size==null?r=this.size:t?r=Math.ceil(this.size/e):r=Math.floor(this.size/e),Hn(async()=>(await n.iterator()).columnMajorBatch(e,t,fae),r)}concatenate(e){let t=this,n;return this.size===Infinity||e.size===Infinity?n=Infinity:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,Hn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===Infinity?n=Infinity:n=null,Hn(async()=>(await t.iterator()).filter(r=>z(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Hn(async()=>(await t.iterator()).map(n=>z(()=>e(n))),this.size)}mapAsync(e){let t=this;return Hn(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return Hn(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=Infinity:n=null,Hn(async()=>{let r=Mg(async()=>({value:await t.iterator(),done:!1}));return nae(r.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size<e||e===void 0||e<0)?n=0:n=null,Hn(async()=>(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let r=this,a=Gre.alea(t||v.now().toString());return Hn(async()=>{let s=a.int32();return n&&(s+=a.int32()),(await r.iterator()).shuffle(e,s.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,Hn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Jl.MAX_BUFFER_SIZE=1e4;function Hn(e,t=null){return new class extends Jl{constructor(){super(...arguments);this.size=t}async iterator(){return e()}}}function Pre(e){return Hn(async()=>v6(e),e.length)}function Lre(e){if(!Ql(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n<e.length;n++)t=t==null?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=t==null?e[n].size:Math.min(t,e[n].size);return Hn(async()=>{let n=await b6(e,r=>{if(r instanceof Jl)return{value:r.iterator(),recurse:!1};if(Ql(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return aae(n,ts.SHORTEST)},t)}function fae(e){if(e===null)return null;let t=e[0];return Yre(t)?{value:mae(e),recurse:!1}:{value:null,recurse:!0}}function mae(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof He?pn(e):vr(e)}var m6=class extends Jl{constructor(e){super();this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
|
|
`).map(e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e))}},g0='"',Zu=Symbol("out"),N6=Symbol("field"),x0=Symbol("quote"),$g=Symbol("quoteafterquote"),T6=Symbol("quoteinquote"),A6=class extends Jl{constructor(e,t){super();this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new m6(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(v.assert(t.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&v.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((r,a)=>(r[a]=r[a]+1||1,r),{}),n=Object.keys(t).filter(r=>t[r]>1);if(v.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let r of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(r)===-1)throw new Error('The key "'+r+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},r={};for(let a=0;a<this.fullColumnNames.length;a++){let s=this.fullColumnNames[a],i=this.columnConfigs?this.columnConfigs[s]:null;if(!(this.configuredColumnsOnly&&!i)){let o=t[a],l=null;if(o==="")if(i&&i.default!==void 0)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let u=Number(o);if(isNaN(u))i&&i.dtype==="bool"?l=this.getBoolean(o):l=o;else if(!i||!i.dtype)l=u;else switch(i.dtype){case"float32":l=u;break;case"int32":l=Math.floor(u);break;case"bool":l=this.getBoolean(o);break;default:l=u}}i&&i.isLabel?r[s]=l:n[s]=l}}return Object.keys(r).length===0?n:{xs:n,ys:r}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],r=0,a=e.length,s=Zu;for(let i=0;i<a;i++)switch(s){case Zu:switch(e.charAt(i)){case g0:r=i+1,s=x0;break;case this.delimiter:if(r=i+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),s=Zu;break;default:s=N6,r=i;break}break;case N6:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i)),s=Zu,r=i+1;break;default:}break;case x0:switch(e.charAt(i)){case g0:s=$g;break;default:}break;case $g:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i-1)),s=Zu,r=i+1;break;case g0:s=x0;break;default:s=T6;break}break;case T6:switch(e.charAt(i)){case g0:s=x0;break;default:}break;default:}if(s===$g?n.push(e.substring(r,a-1)):n.push(e.substring(r)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},E6=class extends Yt{constructor(e){super();this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);if(this.fftSize<0||t<4||t>14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(J().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");let t=new E6(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let r=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(r,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let r=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(r,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(r=>{let a=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-Infinity&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(a),r({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((r,a)=>n.set(r,a*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(v.sizeFromShape(t));return n.set(e,n.length-e.length),vr(n,t)}},C6=class extends Yt{constructor(e,t){super();if(this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=un([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,r=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,a=(1-n)/2,s=(1-r)/2,i=a+n,o=r+s;this.cropBox=Tn([s,a,o,i],[1,4])}else this.cropBox=Tn([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(J().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new C6(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&v.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`);try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=pl.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return z(()=>{let t=tn(we(e,"float32"),0),n;n=We.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=n.shape;return j(n,r.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},R6=class{},M6=class extends Yt{split(e){return new Aae(this,e)}},Aae=class extends M6{constructor(e,t){super();this.upstream=e,this.impl=new yae(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},yae=class extends Fg{constructor(e,t){super();this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let n of t.slice(0,-1))this.outputQueue.push(n);return this.carryover=t[t.length-1],!0}},xae=class extends Yt{decodeUTF8(){return new gae(this)}},gae=class extends M6{constructor(e){super();this.upstream=e,this.impl=new wae(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},wae=class extends Fg{constructor(e){super();if(this.upstream=e,J().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=sk();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return J().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},F6=class extends xae{constructor(e,t={}){super();this.file=e,this.options=t,v.assert(e instanceof Uint8Array||(J().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let r=new FileReader;r.onload=s=>{let i=r.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(i)},r.onabort=s=>t(new Error("Aborted")),r.onerror=s=>t(new Error(s.type));let a=this.file.slice(this.offset,n);r.readAsArrayBuffer(a)}this.offset=n}),done:!1}}};async function _ae(e,t={}){let n,r;typeof e=="string"?n=e:(n=e.url,r=bae(e));let a=await v.fetch(n,r);if(a.ok){let s=new Uint8Array(await a.arrayBuffer());return new F6(s,t)}else throw new Error(a.statusText)}var bae=e=>({method:e.method,headers:e.headers,body:e.body,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity});function $6(e){return typeof e=="string"&&e.substr(0,7)==="file://"}var y6=class extends R6{constructor(e,t={}){super();this.input=e,this.options=t}async iterator(){if($6(this.input)&&J().get("IS_NODE")){let e=require("fs");this.input=e.readFileSync(this.input.substr(7))}return new F6(this.input,this.options)}},g6=class extends R6{constructor(e,t={}){super();this.url=e,this.fileOptions=t}async iterator(){return $6(this.url)?new y6(this.url,this.fileOptions).iterator():_ae(this.url,this.fileOptions)}};function Wre(e,t={}){return new A6(new g6(e),t)}function Bre(e){let t=Mg(e);return Hn(async()=>t)}function Vre(e){return Hn(async()=>{let t=await e();return Mg(()=>t.next())})}async function Ure(e,t){return C6.create(e,t)}async function jre(e){return E6.create(e)}var Hre="3.3.0",vae={tfjs:ik,"tfjs-core":ok,"tfjs-data":lk,"tfjs-layers":ck,"tfjs-converter":uk,"tfjs-backend-cpu":$w,"tfjs-backend-webgl":n_,"tfjs-backend-wasm":G3};var Gn={name:"humangl",priority:99,canvas:null,gl:null,width:1024,height:1024,webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function D6(){if(!em(Gn.name)){Ee("backend registration:",Gn.name);try{Gn.canvas=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(Gn.width,Gn.height):document.createElement("canvas")}catch(e){Ee("error: cannot create canvas:",e);return}try{Gn.gl=Gn.canvas.getContext("webgl2",Gn.webGLattr)}catch(e){Ee("error: cannot get WebGL2 context:",e);return}try{yp(2,Gn.gl)}catch(e){Ee("error: cannot set WebGL2 context:",e);return}try{let e=new bp(Gn.gl);ml(Gn.name,()=>new Wl(e),Gn.priority)}catch(e){Ee("error: cannot register WebGL backend:",e);return}try{ol("webgl").forEach(t=>{let n={...t,backendName:Gn.name};ci(n)})}catch(e){Ee("error: cannot update WebGL backend registration:",e);return}try{wr.set("WEBGL_VERSION",2)}catch(e){Ee("error: cannot set WebGL backend flags:",e);return}Ee("backend registered:",Gn.name)}}var Og={};xr(Og,{load:()=>zg,predict:()=>_0});var Dg={};function gn(e,t){if(!t||!t.kernels)return;let n=5,r=t.kernels.filter(o=>o.kernelTimeMs>0).reduce((o,l)=>o+=l.kernelTimeMs,0),a=t.kernels.map((o,l)=>(o.id=l,o)).filter(o=>o.kernelTimeMs>0).sort((o,l)=>l.kernelTimeMs-o.kernelTimeMs),s=t.kernels.map((o,l)=>(o.id=l,o)).filter(o=>o.totalBytesSnapshot>0).sort((o,l)=>l.totalBytesSnapshot-o.totalBytesSnapshot);a.length>n&&(a.length=n),s.length>n&&(s.length=n);let i={newBytes:t.newBytes,newTensors:t.newTensors,peakBytes:t.peakBytes,numKernelOps:t.kernels.length,timeKernelOps:r,slowestKernelOps:a,largestKernelOps:s};Dg[e]=i,Ee("Human profiler",e,i)}var ns,w0={age:0},b0=Number.MAX_SAFE_INTEGER;async function zg(e){return ns||(ns=await pt(e.face.age.modelPath),e.debug&&Ee(`load model: ${e.face.age.modelPath.match(/\/(.*)\./)[1]}`)),ns}async function _0(e,t){return ns?b0<t.face.age.skipFrames&&t.videoOptimized&&w0.age&&w0.age>0?(b0++,w0):(t.videoOptimized?b0=0:b0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=We.resizeBilinear(e,[ns.inputs[0].shape[2],ns.inputs[0].shape[1]],!1),a=O(r,[255]);Ie(r);let s,i={age:0};if(!t.profile)t.face.age.enabled&&(s=await ns.predict(a));else{let o=t.face.age.enabled?await cn(()=>ns.predict(a)):{};s=o.result.clone(),o.result.dispose(),gn("age",o)}if(a.dispose(),s){let o=s.dataSync();i.age=Math.trunc(10*o[0])/10}s.dispose(),w0=i,n(i)})):null}var Pg={};xr(Pg,{load:()=>Vg,predict:()=>k0});var xa,Lg={gender:""},v0=Number.MAX_SAFE_INTEGER,Wg=!1,Bg=[.2989,.587,.114];async function Vg(e){return xa||(xa=await pt(e.face.gender.modelPath),Wg=xa.inputs[0].shape[3]===1,e.debug&&Ee(`load model: ${e.face.gender.modelPath.match(/\/(.*)\./)[1]}`)),xa}async function k0(e,t){return xa?v0<t.face.gender.skipFrames&&t.videoOptimized&&Lg.gender!==""?(v0++,Lg):(t.videoOptimized?v0=0:v0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=We.resizeBilinear(e,[xa.inputs[0].shape[2],xa.inputs[0].shape[1]],!1),a;Wg?a=z(()=>{let[o,l,u]=Bt(r,3,3),c=O(o,Bg[0]),h=O(l,Bg[1]),d=O(u,Bg[2]);return Pa([c,h,d]).sub(.5).mul(2)}):a=O(r,[255]),Ie(r);let s,i={gender:"",confidence:0};if(!t.profile)t.face.gender.enabled&&(s=await xa.predict(a));else{let o=t.face.gender.enabled?await cn(()=>xa.predict(a)):{};s=o.result.clone(),o.result.dispose(),gn("gender",o)}if(a.dispose(),s)if(Array.isArray(s)){let o=s[0].dataSync(),l=Math.trunc(200*Math.abs(o[0]-.5))/100;l>t.face.gender.minConfidence&&(i.gender=o[0]<=.5?"female":"male",i.confidence=Math.min(.99,l)),s.forEach(u=>Ie(u))}else{let o=s.dataSync();if(Wg)(o[0]>t.face.gender.minConfidence||o[1]>t.face.gender.minConfidence)&&(i.gender=o[0]>o[1]?"female":"male",i.confidence=o[0]>o[1]?Math.trunc(100*o[0])/100:Math.trunc(100*o[1])/100);else{let l=Math.trunc(200*Math.abs(o[0]-.5))/100;l>t.face.gender.minConfidence&&(i.gender=o[0]<=.5?"female":"male",i.confidence=Math.min(.99,l))}s.dispose()}Lg=i,n(i)})):null}var Ug={};xr(Ug,{load:()=>Gg,predict:()=>S0});var kae=["angry","disgust","fear","happy","sad","surprise","neutral"],rs,jg=[],I0=Number.MAX_SAFE_INTEGER,Hg=[.2989,.587,.114];async function Gg(e){return rs||(rs=await pt(e.face.emotion.modelPath),e.debug&&Ee(`load model: ${e.face.emotion.modelPath.match(/\/(.*)\./)[1]}`)),rs}async function S0(e,t){return rs?I0<t.face.emotion.skipFrames&&t.videoOptimized&&jg.length>0?(I0++,jg):(t.videoOptimized?I0=0:I0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=We.resizeBilinear(e,[rs.inputs[0].shape[2],rs.inputs[0].shape[1]],!1),[a,s,i]=Bt(r,3,3);r.dispose();let o=O(a,Hg[0]),l=O(s,Hg[1]),u=O(i,Hg[2]);a.dispose(),s.dispose(),i.dispose();let c=Pa([o,l,u]);o.dispose(),l.dispose(),u.dispose();let h=z(()=>c.sub(.5).mul(2));c.dispose();let d=[];if(t.face.emotion.enabled){let p;if(t.profile){let f=await cn(()=>rs.predict(h));p=f.result.dataSync(),f.result.dispose(),gn("emotion",f)}else{let f=await rs.predict(h);p=f.dataSync(),Ie(f)}for(let f=0;f<p.length;f++)p[f]>t.face.emotion.minConfidence&&d.push({score:Math.min(.99,Math.trunc(100*p[f])/100),emotion:kae[f]});d.sort((f,m)=>m.score-f.score)}h.dispose(),jg=d,n(d)})):null}var Jr;async function qg(e){return Jr||(Jr=await pt(e.face.embedding.modelPath),e.debug&&Ee(`load model: ${e.face.embedding.modelPath.match(/\/(.*)\./)[1]}`)),Jr}function O6(e,t,n=2){if(!e||!t||(e==null?void 0:e.length)===0||(t==null?void 0:t.length)===0||(e==null?void 0:e.length)!==(t==null?void 0:t.length))return 0;let r=e.map((s,i)=>Math.abs(e[i]-t[i])**n).reduce((s,i)=>s+i,0)**(1/n);return Math.max(Math.trunc(1e3*(1-r))/1e3,0)}function Iae(e){return z(()=>{let n=[[.05,.15,.85,.85]],r=e.image||e.tensor;if(!(r instanceof He))return null;let a=r.shape.length===3?We.cropAndResize(tn(r,0),n,[0],[Jr.inputs[0].shape[2],Jr.inputs[0].shape[1]]):We.cropAndResize(r,n,[0],[Jr.inputs[0].shape[2],Jr.inputs[0].shape[1]]),s=[.2989,.587,.114],[i,o,l]=Bt(a,3,3),u=O(i,s[0]),c=O(o,s[1]),h=O(l,s[2]),d=Pa([u,c,h]),p=pn([d,d,d],3).squeeze(4),f=p.sub(p.min());return f.div(f.max())})}async function Xg(e,t){return Jr?new Promise(async n=>{let r=[];if(t.face.embedding.enabled){let a=Iae(e);if(!t.profile)r=z(()=>[...Jr.predict(a).reshape([128,2]).logSumExp(1).dataSync()]);else{let s=await cn(()=>Jr.predict({img_inputs:a}));r=[...s.result.dataSync()],s.result.dispose(),gn("emotion",s)}Ie(a)}n(r)}):[]}var Kg={};xr(Kg,{enhance:()=>Jg,load:()=>Zg,match:()=>z6,predict:()=>E0,similarity:()=>Yg});var Qr,N0={age:0},T0=Number.MAX_SAFE_INTEGER;async function Zg(e){return Qr||(Qr=await pt(e.face.description.modelPath),e.debug&&Ee(`load model: ${e.face.description.modelPath.match(/\/(.*)\./)[1]}`)),Qr}function Yg(e,t,n=2){if(!e||!t||(e==null?void 0:e.length)===0||(t==null?void 0:t.length)===0||(e==null?void 0:e.length)!==(t==null?void 0:t.length))return 0;let r=4*e.map((s,i)=>Math.abs(e[i]-t[i])**n).reduce((s,i)=>s+i,0)**(1/n);return Math.max(0,100-r)/100}function z6(e,t,n=0){let r={similarity:0,name:"",source:"",embedding:[]};if(!e||!t||!Array.isArray(e)||!Array.isArray(t))return r;for(let a of t)if(a.embedding&&a.name){let s=Yg(e,a.embedding);s>n&&s>r.similarity&&(r={...a,similarity:s})}return r}function Jg(e){return z(()=>{let n=e.image||e.tensor||e;if(!(n instanceof He))return null;let r=[[.05,.15,.85,.85]];return(n.shape.length===3?We.cropAndResize(tn(n,0),r,[0],[Qr.inputs[0].shape[2],Qr.inputs[0].shape[1]]):We.cropAndResize(n,r,[0],[Qr.inputs[0].shape[2],Qr.inputs[0].shape[1]])).mul(255)})}async function E0(e,t){return Qr?T0<t.face.description.skipFrames&&t.videoOptimized&&N0.age&&N0.age>0?(T0++,N0):(t.videoOptimized?T0=0:T0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=Jg(e),a,s={age:0,gender:"unknown",genderConfidence:0,descriptor:[]};if(!t.profile)t.face.description.enabled&&(a=await Qr.predict(r));else{let i=t.face.description.enabled?await cn(()=>Qr.predict(r)):{};a=i.result.clone(),i.result.dispose(),gn("age",i)}Ie(r),a&&(z(()=>{let i=a.find(h=>h.shape[1]===1).dataSync(),o=Math.trunc(200*Math.abs(i[0]-.5))/100;o>t.face.gender.minConfidence&&(s.gender=i[0]<=.5?"female":"male",s.genderConfidence=Math.min(.99,o));let l=a.find(h=>h.shape[1]===100).argMax(1).dataSync()[0],u=a.find(h=>h.shape[1]===100).dataSync();s.age=Math.round(u[l-1]>u[l+1]?10*l-100*u[l-1]:10*l+100*u[l+1])/10;let c=a.find(h=>h.shape[1]===1024);s.descriptor=[...c.dataSync()]}),a.forEach(i=>Ie(i))),N0=s,n(s)})):null}var Sae=e=>{if(!e||e.length<300)return{roll:null,yaw:null,pitch:null};let t=(a,s,i,o)=>Math.atan2(o-s,i-a),n=a=>Math.abs(a*180/Math.PI%360);return{roll:t(e[33][0],e[33][1],e[263][0],e[263][1]),yaw:t(e[33][0],e[33][2],e[263][0],e[263][2]),pitch:t(e[10][1],e[10][2],e[152][1],e[152][2])}},Qg=async(e,t)=>{var c,h,d,p,f,m,A;let n,r,a,s,i,o,l=[];e.state="run:face",n=et();let u=await((c=e.models.face)==null?void 0:c.estimateFaces(t,e.config));if(e.perf.face=Math.trunc(et()-n),!u)return[];for(let y of u){if(e.analyze("Get Face"),!y.image||y.image.isDisposedInternal){Ee("Face object is disposed:",y.image);continue}let g=Sae(y.mesh);e.analyze("Start Age:"),e.config.async?r=e.config.face.age.enabled?_0(y.image,e.config):{}:(e.state="run:age",n=et(),r=e.config.face.age.enabled?await _0(y.image,e.config):{},e.perf.age=Math.trunc(et()-n)),e.analyze("Start Gender:"),e.config.async?a=e.config.face.gender.enabled?k0(y.image,e.config):{}:(e.state="run:gender",n=et(),a=e.config.face.gender.enabled?await k0(y.image,e.config):{},e.perf.gender=Math.trunc(et()-n)),e.analyze("Start Emotion:"),e.config.async?s=e.config.face.emotion.enabled?S0(y.image,e.config):{}:(e.state="run:emotion",n=et(),s=e.config.face.emotion.enabled?await S0(y.image,e.config):{},e.perf.emotion=Math.trunc(et()-n)),e.analyze("End Emotion:"),e.analyze("Start Embedding:"),e.config.async?i=e.config.face.embedding.enabled?Xg(y,e.config):[]:(e.state="run:embedding",n=et(),i=e.config.face.embedding.enabled?await Xg(y,e.config):[],e.perf.embedding=Math.trunc(et()-n)),e.analyze("End Embedding:"),e.analyze("Start Description:"),e.config.async?o=e.config.face.description.enabled?E0(y,e.config):[]:(e.state="run:description",n=et(),o=e.config.face.description.enabled?await E0(y.image,e.config):[],e.perf.embedding=Math.trunc(et()-n)),e.analyze("End Description:"),e.config.async&&([r,a,s,i,o]=await Promise.all([r,a,s,i,o])),e.analyze("Finish Face:"),!e.config.face.iris.enabled&&((h=y==null?void 0:y.annotations)==null?void 0:h.leftEyeIris)&&((d=y==null?void 0:y.annotations)==null?void 0:d.rightEyeIris)&&(delete y.annotations.leftEyeIris,delete y.annotations.rightEyeIris);let w=((p=y.annotations)==null?void 0:p.leftEyeIris)&&((f=y.annotations)==null?void 0:f.rightEyeIris)?11.7*Math.max(Math.abs(y.annotations.leftEyeIris[3][0]-y.annotations.leftEyeIris[1][0]),Math.abs(y.annotations.rightEyeIris[4][1]-y.annotations.rightEyeIris[2][1])):0;l.push({...y,age:o.age||r.age,gender:o.gender||a.gender,genderConfidence:o.genderConfidence||a.confidence,embedding:o.descriptor||i,emotion:s,iris:w!==0?Math.trunc(w)/100:0,angle:g,tensor:e.config.face.detector.return?(m=y.image)==null?void 0:m.squeeze():null}),(A=y.image)==null||A.dispose(),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.perf.face&&delete e.perf.face,e.perf.age&&delete e.perf.age,e.perf.gender&&delete e.perf.gender,e.perf.emotion&&delete e.perf.emotion),l};var i2={};xr(i2,{MediaPipeFaceMesh:()=>o2,load:()=>l2,triangulation:()=>Dae});var P6=6;function Nae(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let r=0;r<t.strides.length;r++){let a=t.strides[r],s=Math.floor((e+a-1)/a),i=Math.floor((e+a-1)/a),o=t.anchors[r];for(let l=0;l<s;l++){let u=a*(l+.5);for(let c=0;c<i;c++){let h=a*(c+.5);for(let d=0;d<o;d++)n.push([h,u])}}}return n}var Tae=e=>({startEndTensor:e,startPoint:Fe(e,[0,0],[-1,2]),endPoint:Fe(e,[0,2],[-1,2])});function Eae(e,t,n){let r=Fe(e,[0,1],[-1,2]),a=ie(r,t),s=Fe(e,[0,3],[-1,2]),i=ge(s,n),o=ge(a,n),l=ge(i,2),u=xe(o,l),c=ie(o,l),h=O(u,n),d=O(c,n);return gl([h,d],1)}var L6=class{constructor(t,n){this.model=t,this.anchorsData=Nae(t.inputs[0].shape[1]),this.anchors=Tn(this.anchorsData),this.inputSize=t.inputs[0].shape[2],this.config=n}async getBoundingBoxes(t){if(!t||t.isDisposedInternal||t.shape.length!==4||t.shape[1]<1||t.shape[2]<1)return null;let[n,r,a]=z(()=>{let d=t.resizeBilinear([this.inputSize,this.inputSize]).div(127.5).sub(.5),p=this.model.predict(d),f;if(Array.isArray(p)){let g=p.sort((x,S)=>x.size-S.size),w=it([g[0],g[2]],2),b=it([g[1],g[3]],2);f=it([b,w],1).squeeze(0)}else f=p.squeeze();let m=Eae(f,this.anchors,[this.inputSize,this.inputSize]),A=Fe(f,[0,0],[-1,1]),y=On(A).squeeze();return[f,m,y]}),s=await We.nonMaxSuppressionAsync(r,a,this.config.face.detector.maxFaces,this.config.face.detector.iouThreshold,this.config.face.detector.scoreThreshold),i=s.arraySync();s.dispose();let l=i.map(h=>Fe(r,[h,0],[1,-1])).map(h=>{let d=h.arraySync();return h.dispose(),d}),u=a.dataSync(),c=[];for(let h=0;h<l.length;h++){let d=i[h],p=u[d];if(p>this.config.face.detector.minConfidence){let f=Tae(l[h]),m=this.anchorsData[d],A=z(()=>Fe(n,[d,P6-1],[1,-1]).squeeze().reshape([P6,-1]));c.push({box:f,landmarks:A,anchor:m,confidence:p})}}return n.dispose(),r.dispose(),a.dispose(),{boxes:c,scaleFactor:[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]}}};async function W6(e){let t=await pt(e.face.detector.modelPath,{fromTFHub:e.face.detector.modelPath.includes("tfhub.dev")}),n=new L6(t,e);return e.debug&&Ee(`load model: ${e.face.detector.modelPath.match(/\/(.*)\./)[1]}`),n}function B6(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:r}}function Yu(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function ec(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function tc(e,t,n){let r=t.shape[1],a=t.shape[2],s=[[e.startPoint[1]/r,e.startPoint[0]/a,e.endPoint[1]/r,e.endPoint[0]/a]];return We.cropAndResize(t,s,[0],n)}function C0(e,t=1.5){let n=ec(e),r=Yu(e),a=[t*r[0]/2,t*r[1]/2],s=[n[0]-a[0],n[1]-a[1]],i=[n[0]+a[0],n[1]+a[1]];return{startPoint:s,endPoint:i,landmarks:e.landmarks}}function R0(e){let t=ec(e),n=Yu(e),a=Math.max(...n)/2,s=[t[0]-a,t[1]-a],i=[t[0]+a,t[1]+a];return{startPoint:s,endPoint:i,landmarks:e.landmarks}}var M0=[[1,0,0],[0,1,0],[0,0,1]];function Cae(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function e2(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Cae(n)}function V6(e,t){return[[1,0,e],[0,1,t],[0,0,1]]}function as(e,t){let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}function Rae(e,t){let n=[];for(let r=0;r<e.length;r++)n.push(e[r][t]);return n}function U6(e,t){let n=[],r=e.length;for(let a=0;a<r;a++){n.push([]);for(let s=0;s<r;s++)n[a].push(as(e[a],Rae(t,s)))}return n}function F0(e,t){let n=Math.cos(e),r=Math.sin(e),a=[[n,-r,0],[r,n,0],[0,0,1]],s=V6(t[0],t[1]),i=U6(s,a),o=V6(-t[0],-t[1]);return U6(i,o)}function j6(e){let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-as(t[0],n),-as(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]}function H6(e,t){return[as(e,t[0]),as(e,t[1])]}var ea={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},t2=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]}],n2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],Wi=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Mae=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Fae=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],$ae=[33,133,362,263,1,78,308],Dhe=Mae.map(e=>n2[e]),Ohe=Fae.map(e=>n2[e]),zhe=$ae.map(e=>n2[e]);var r2=ea.leftEyeLower0,a2=ea.rightEyeLower0,nc={leftBounds:[r2[0],r2[r2.length-1]],rightBounds:[a2[0],a2[a2.length-1]]},$0={count:468,mouth:13,symmetryLine:[13,ea.midwayBetweenEyes[0]]},G6={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},rc={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};function D0(e,t,n,r){for(let a=0;a<t2.length;a++){let{key:s,indices:i}=t2[a],o=ea[`${n}${s}`];if(!r||r.includes(s))for(let l=0;l<i.length;l++){let u=i[l];e[o[l]]=[t[u][0],t[u][1],(t[u][2]+e[o[l]][2])/2]}}}var s2=class{constructor(t,n,r){var a,s;this.storedBoxes=[],this.boundingBoxDetector=t,this.meshDetector=n,this.irisModel=r,this.boxSize=((a=t==null?void 0:t.model)==null?void 0:a.inputs[0].shape[2])||0,this.meshSize=(n==null?void 0:n.inputs[0].shape[2])||((s=t==null?void 0:t.model)==null?void 0:s.inputs[0].shape[2]),this.irisSize=(r==null?void 0:r.inputs[0].shape[1])||0,this.irisEnlarge=2.3,this.skipped=0,this.detectedFaces=0}transformRawCoords(t,n,r,a){let s=Yu({startPoint:n.startPoint,endPoint:n.endPoint}),i=t.map(h=>[s[0]/this.meshSize*(h[0]-this.meshSize/2),s[1]/this.meshSize*(h[1]-this.meshSize/2),h[2]]),o=r!==0?F0(r,[0,0]):M0,l=r!==0?i.map(h=>[...H6(h,o),h[2]]):i,u=r!==0?j6(a):M0,c=[...ec({startPoint:n.startPoint,endPoint:n.endPoint}),1];return l.map(h=>[h[0]+as(c,u[0]),h[1]+as(c,u[1]),h[2]])}getLeftToRightEyeDepthDifference(t){let n=t[nc.leftBounds[0]][2],r=t[nc.rightBounds[0]][2];return n-r}getEyeBox(t,n,r,a,s=!1){let i=R0(C0(this.calculateLandmarksBoundingBox([t[r],t[a]]),this.irisEnlarge)),o=Yu(i),l=We.cropAndResize(n,[[i.startPoint[1]/this.meshSize,i.startPoint[0]/this.meshSize,i.endPoint[1]/this.meshSize,i.endPoint[0]/this.meshSize]],[0],[this.irisSize,this.irisSize]);return s&&wr.flags.IS_BROWSER&&(l=We.flipLeftRight(l)),{box:i,boxSize:o,crop:l}}getEyeCoords(t,n,r,a=!1){let s=[];for(let i=0;i<rc.numCoordinates;i++){let o=t[i*3],l=t[i*3+1],u=t[i*3+2];s.push([(a?1-o/this.irisSize:o/this.irisSize)*r[0]+n.startPoint[0],l/this.irisSize*r[1]+n.startPoint[1],u])}return{rawCoords:s,iris:s.slice(rc.index)}}getAdjustedIrisCoords(t,n,r){let a=t[ea[`${r}EyeUpper0`][rc.upperCenter]][2],s=t[ea[`${r}EyeLower0`][rc.lowerCenter]][2],i=(a+s)/2;return n.map((o,l)=>{let u=i;return l===2?u=a:l===4&&(u=s),[o[0],o[1],u]})}async predict(t,n){let r=!1,a;if((this.skipped===0||this.skipped>n.face.detector.skipFrames||!n.face.mesh.enabled||!n.videoOptimized)&&(a=await this.boundingBoxDetector.getBoundingBoxes(t),this.skipped=0),n.videoOptimized&&this.skipped++,!n.videoOptimized||a&&a.boxes&&(!n.face.mesh.enabled||a.boxes.length!==this.detectedFaces&&this.detectedFaces!==n.face.detector.maxFaces)){this.storedBoxes=[],this.detectedFaces=0;for(let i of a.boxes)this.storedBoxes.push({startPoint:i.box.startPoint.dataSync(),endPoint:i.box.endPoint.dataSync(),landmarks:i.landmarks,confidence:i.confidence});this.storedBoxes.length>0&&(r=!0)}if(n.face.detector.skipInitial&&this.detectedFaces===0&&(this.skipped=0),r){if(!a||!a.boxes||a.boxes.length===0)return this.storedBoxes=[],this.detectedFaces=0,null;for(let i=0;i<this.storedBoxes.length;i++){let o=B6({startPoint:this.storedBoxes[i].startPoint,endPoint:this.storedBoxes[i].endPoint},a.scaleFactor),l=C0(o),u=R0(l),c=this.storedBoxes[i].landmarks.arraySync(),h=this.storedBoxes[i].confidence;this.storedBoxes[i]={...u,confidence:h,landmarks:c}}}a&&a.boxes&&a.boxes.forEach(i=>{i.box.startPoint.dispose(),i.box.endPoint.dispose(),i.landmarks.dispose()});let s=z(()=>this.storedBoxes.map((i,o)=>{let l=i.confidence,u,c=0,h;if(n.face.detector.rotation&&n.face.mesh.enabled&&wr.flags.IS_BROWSER){let[_,x]=i.landmarks.length>=$0.count?$0.symmetryLine:G6.symmetryLine;c=e2(i.landmarks[_],i.landmarks[x]);let S=ec({startPoint:i.startPoint,endPoint:i.endPoint}),T=[S[0]/t.shape[2],S[1]/t.shape[1]],E=We.rotateWithOffset(t,c,0,T);h=F0(-c,S),n.face.mesh.enabled?u=tc({startPoint:i.startPoint,endPoint:i.endPoint},E,[this.meshSize,this.meshSize]).div(255):u=tc({startPoint:i.startPoint,endPoint:i.endPoint},E,[this.boxSize,this.boxSize]).div(255)}else{h=M0;let _=t.clone();n.face.mesh.enabled?u=tc({startPoint:i.startPoint,endPoint:i.endPoint},_,[this.meshSize,this.meshSize]).div(255):u=tc({startPoint:i.startPoint,endPoint:i.endPoint},_,[this.boxSize,this.boxSize]).div(255)}if(!n.face.mesh.enabled)return{coords:null,box:i,faceConfidence:null,boxConfidence:l,confidence:i.confidence,image:u};let[,d,p]=this.meshDetector.predict(u),f=d.dataSync()[0];if(f<n.face.detector.minConfidence)return null;let A=j(p,[-1,3]).arraySync();if(n.face.iris.enabled){let{box:_,boxSize:x,crop:S}=this.getEyeBox(A,u,nc.leftBounds[0],nc.leftBounds[1],!0),{box:T,boxSize:E,crop:F}=this.getEyeBox(A,u,nc.rightBounds[0],nc.rightBounds[1]),W=this.irisModel.predict(it([S,F])).dataSync(),V=W.slice(0,rc.numCoordinates*3),{rawCoords:U,iris:H}=this.getEyeCoords(V,_,x,!0),X=W.slice(rc.numCoordinates*3),{rawCoords:G,iris:ee}=this.getEyeCoords(X,T,E),Y=this.getLeftToRightEyeDepthDifference(A);Math.abs(Y)<30?(D0(A,U,"left",null),D0(A,G,"right",null)):Y<1?D0(A,U,"left",["EyeUpper0","EyeLower0"]):D0(A,G,"right",["EyeUpper0","EyeLower0"]);let se=this.getAdjustedIrisCoords(A,H,"left"),te=this.getAdjustedIrisCoords(A,ee,"right");A=A.concat(se).concat(te)}let y=this.transformRawCoords(A,i,c,h);i=C0(this.calculateLandmarksBoundingBox(y),1.5);let g=Tn(y);if(n.face.detector.rotation&&n.face.mesh.enabled&&(n.face.description.enabled||n.face.embedding.enabled)&&wr.flags.IS_BROWSER){let[_,x]=i.landmarks.length>=$0.count?$0.symmetryLine:G6.symmetryLine;c=e2(i.landmarks[_],i.landmarks[x]);let S=ec({startPoint:i.startPoint,endPoint:i.endPoint}),T=[S[0]/t.shape[2],S[1]/t.shape[1]],E=We.rotateWithOffset(t,c,0,T);h=F0(-c,S),u=tc({startPoint:i.startPoint,endPoint:i.endPoint},E,[this.meshSize,this.meshSize]).div(255)}let w={coords:g,box:i,faceConfidence:f,boxConfidence:l,image:u,rawCoords:A},b=R0(i);return this.storedBoxes[o]={...b,landmarks:y,confidence:i.confidence,faceConfidence:f},w}));return s=s.filter(i=>i!==null),n.face.mesh.enabled&&(this.storedBoxes=this.storedBoxes.filter(i=>i.faceConfidence>n.face.detector.minConfidence)),this.detectedFaces=s.length,s}calculateLandmarksBoundingBox(t){let n=t.map(i=>i[0]),r=t.map(i=>i[1]),a=[Math.min(...n),Math.min(...r)],s=[Math.max(...n),Math.max(...r)];return{startPoint:a,endPoint:s,landmarks:t}}};var o2=class{constructor(t,n,r,a){this.facePipeline=new s2(t,n,r),this.config=a}async estimateFaces(t,n){let r=await this.facePipeline.predict(t,n),a=[];for(let s of r||[]){if(s.isDisposedInternal)continue;let i=s.coords?s.coords.arraySync():[],o=i.map(h=>[h[0]/t.shape[2],h[1]/t.shape[1],h[2]/this.facePipeline.meshSize]),l={};if(i&&i.length>0)for(let h of Object.keys(ea))l[h]=ea[h].map(d=>i[d]);let u=s.box?[Math.max(0,s.box.startPoint[0]),Math.max(0,s.box.startPoint[1]),Math.min(t.shape[1],s.box.endPoint[0])-Math.max(0,s.box.startPoint[0]),Math.min(t.shape[2],s.box.endPoint[1])-Math.max(0,s.box.startPoint[1])]:0,c=s.box?[s.box.startPoint[0]/t.shape[2],s.box.startPoint[1]/t.shape[1],(s.box.endPoint[0]-s.box.startPoint[0])/t.shape[2],(s.box.endPoint[1]-s.box.startPoint[1])/t.shape[1]]:[];a.push({confidence:s.faceConfidence||s.boxConfidence||0,boxConfidence:s.boxConfidence,faceConfidence:s.faceConfidence,box:u,boxRaw:c,mesh:i,meshRaw:o,annotations:l,image:s.image?s.image.clone():null}),s.coords&&s.coords.dispose(),s.image&&s.image.dispose()}return a}},Bi=[null,null,null];async function l2(e){Bi=await Promise.all([!Bi[0]&&e.face.enabled?W6(e):null,!Bi[1]&&e.face.mesh.enabled?pt(e.face.mesh.modelPath,{fromTFHub:e.face.mesh.modelPath.includes("tfhub.dev")}):null,!Bi[2]&&e.face.iris.enabled?pt(e.face.iris.modelPath,{fromTFHub:e.face.iris.modelPath.includes("tfhub.dev")}):null]);let t=new o2(Bi[0],Bi[1],Bi[2],e);return e.face.mesh.enabled&&e.debug&&Ee(`load model: ${e.face.mesh.modelPath.match(/\/(.*)\./)[1]}`),e.face.iris.enabled&&e.debug&&Ee(`load model: ${e.face.iris.modelPath.match(/\/(.*)\./)[1]}`),t}var Dae=Wi;var g2={};xr(g2,{PoseNet:()=>x2,load:()=>w2});function Oae(e){let[t,n,r,a]=e;return{offsets:t,heatmap:n,displacementFwd:r,displacementBwd:a}}var c2=class{constructor(t){this.model=t}predict(t){return z(()=>{let r=t.toFloat().div(127.5).sub(1).expandDims(0),s=this.model.predict(r).map(o=>o.squeeze([0])),i=Oae(s);return{heatmapScores:i.heatmap.sigmoid(),offsets:i.offsets,displacementFwd:i.displacementFwd,displacementBwd:i.displacementBwd}})}dispose(){this.model.dispose()}};function u2(e){return Math.floor(e/2)}var h2=class{constructor(t,n){this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(u2(t),t);)this.exchange(t,u2(t)),t=u2(t)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(n<this.numberOfElements&&this.less(n,n+1)&&n++,!this.less(t,n))break;this.exchange(t,n),t=n}}getValueAt(t){return this.getElementValue(this.priorityQueue[t])}less(t,n){return this.getValueAt(t)<this.getValueAt(n)}exchange(t,n){let r=this.priorityQueue[t];this.priorityQueue[t]=this.priorityQueue[n],this.priorityQueue[n]=r}};function zae(e,t,n,r,a,s){let[i,o]=s.shape,l=!0,u=Math.max(n-a,0),c=Math.min(n+a+1,i);for(let h=u;h<c;++h){let d=Math.max(r-a,0),p=Math.min(r+a+1,o);for(let f=d;f<p;++f)if(s.get(h,f,e)>t){l=!1;break}if(!l)break}return l}function q6(e,t,n){let[r,a,s]=n.shape,i=new h2(r*a*s,({score:o})=>o);for(let o=0;o<r;++o)for(let l=0;l<a;++l)for(let u=0;u<s;++u){let c=n.get(o,l,u);c<e||zae(u,c,o,l,t,n)&&i.enqueue({score:c,part:{heatmapY:o,heatmapX:l,id:u}})}return i}var ac=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],sc=ac.length,Ju=ac.reduce((e,t,n)=>(e[t]=n,e),{}),Pae=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],ede=Pae.map(([e,t])=>[Ju[e],Ju[t]]),X6=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function d2(e,t,n,r){return{y:r.get(e,t,n),x:r.get(e,t,n+sc)}}function O0(e,t,n){let{heatmapY:r,heatmapX:a,id:s}=e,{y:i,x:o}=d2(r,a,s,n);return{x:e.heatmapX*t+o,y:e.heatmapY*t+i}}function p2(e,t,n){return e<t?t:e>n?n:e}function K6(e,t,n,r){let a=n-e,s=r-t;return a*a+s*s}function f2(e,t){return{x:e.x+t.x,y:e.y+t.y}}function Z6(e,t){let n=t.shape[0],r=new Float32Array(n);for(let a=0;a<n;a++){let s=t.get(a,0),i=t.get(a,1);r[a]=e.get(s,i,a)}return r}function Lae(e,t,n,r){return{y:r.get(e,t,n),x:r.get(e,t,n+sc)}}function Wae(e,t){let n=[];for(let r=0;r<sc;r++){let a=e.get(r,0).valueOf(),s=e.get(r,1).valueOf(),{x:i,y:o}=Lae(a,s,r,t);n.push(o),n.push(i)}return Tn(n,[sc,2])}function Y6(e,t,n){return z(()=>e.toTensor().mul(be(t,"int32")).toFloat().add(Wae(e,n)))}function Bae(e,t){return z(()=>{let n=e.div(be(t,"int32"));return e.sub(n.mul(be(t,"int32")))})}function J6(e){let[t,n,r]=e.shape;return z(()=>{let s=e.reshape([t*n,r]).argMax(0),i=s.div(be(n,"int32")).expandDims(1),o=Bae(s,n).expandDims(1);return it([i,o],1)})}var Q6=X6.map(([e,t])=>[Ju[e],Ju[t]]),m2=Q6.map(([,e])=>e),e4=Q6.map(([e])=>e),Vae=16;function Uae(e,t,n){let r=n.shape[2]/2;return{y:n.get(t.y,t.x,e),x:n.get(t.y,t.x,r+e)}}function A2(e,t,n,r){return{y:p2(Math.round(e.y/t),0,n-1),x:p2(Math.round(e.x/t),0,r-1)}}function t4(e,t,n,r,a,s,i,o=2){let[l,u]=r.shape,c=A2(t.position,s,l,u),h=Uae(e,c,i),p=f2(t.position,h);for(let A=0;A<o;A++){let y=A2(p,s,l,u),g=d2(y.y,y.x,n,a);p=f2({x:y.x*s,y:y.y*s},{x:g.x,y:g.y})}let f=A2(p,s,l,u),m=r.get(f.y,f.x,n);return{position:p,part:ac[n],score:m}}function n4(e,t,n,r,a,s){let i=t.shape[2],o=m2.length,l=new Array(i),{part:u,score:c}=e,h=O0(u,r,n);l[u.id]={score:c,part:ac[u.id],position:h};for(let d=o-1;d>=0;--d){let p=m2[d],f=e4[d];l[p]&&!l[f]&&(l[f]=t4(d,l[p],f,t,n,r,s))}for(let d=0;d<o;++d){let p=e4[d],f=m2[d];l[p]&&!l[f]&&(l[f]=t4(d,l[p],f,t,n,r,a))}return l}async function r4(e,t,n){let r=0,a=J6(e),s=await Promise.all([e.buffer(),t.buffer(),a.buffer()]),i=s[0],o=s[1],l=s[2],u=Y6(l,Vae,o),c=await u.buffer(),d=Array.from(Z6(i,l)).map((f,m)=>(r+=f,{position:{y:c.get(m,0),x:c.get(m,1)},part:ac[m],score:f})),p=d.filter(f=>f.score>n);return a.dispose(),u.dispose(),{keypoints:p,score:r/d.length}}var jae=1,a4=16;function s4(e,t,{x:n,y:r},a){return e.some(({keypoints:s})=>{let i=s[a].position;return K6(r,n,i.y,i.x)<=t})}function Hae(e,t,n){return n.reduce((a,{position:s,score:i},o)=>(s4(e,t,s,o)||(a+=i),a),0)/n.length}function i4(e,t,n,r,a,s,i){let o=[],l=q6(i,jae,e),u=a^2;for(;o.length<s&&!l.empty();){let c=l.dequeue(),h=O0(c.part,a4,t);if(s4(o,u,h,c.part.id))continue;let d=n4(c,e,t,a4,n,r),p=Hae(o,u,d);p>i&&o.push({keypoints:d,score:p})}return o}async function o4(e){return Promise.all(e.map(t=>t.buffer()))}function Gae(e,t,n){return{score:e.score,keypoints:e.keypoints.map(({score:r,part:a,position:s})=>({score:r,part:a,position:{x:Math.trunc(s.x*n),y:Math.trunc(s.y*t)}}))}}function l4(e,[t,n]){let r=e.squeeze(0),a=r.resizeBilinear([t,n]);return r.dispose(),a}function y2(e,[t,n],[r,a]){return e.map(i=>Gae(i,t/r,n/a))}async function qae(e,t,n,r){return new Promise(async a=>{let s=await o4([t.heatmapScores,t.offsets,t.displacementFwd,t.displacementBwd]),i=s[0],o=s[1],l=s[2],u=s[3],c=await i4(i,o,l,u,n.body.nmsRadius,n.body.maxDetections,n.body.scoreThreshold),h=y2(c,[e.shape[1],e.shape[2]],[r,r]);a(h)})}async function Xae(e,t,n,r){return new Promise(async a=>{let s=await r4(t.heatmapScores,t.offsets,n.body.scoreThreshold),i=y2([s],[e.shape[1],e.shape[2]],[r,r]);a(i)})}var x2=class{constructor(t){this.baseModel=t,this.inputSize=t.model.inputs[0].shape[1],this.inputSize<128&&(this.inputSize=257)}async estimatePoses(t,n){let r=l4(t,[this.inputSize,this.inputSize]),a=this.baseModel.predict(r,n),s=n.body.maxDetections<2?await Xae(t,a,n,this.inputSize):await qae(t,a,n,this.inputSize);return a.heatmapScores.dispose(),a.offsets.dispose(),a.displacementFwd.dispose(),a.displacementBwd.dispose(),r.dispose(),s}dispose(){this.baseModel.dispose()}};async function w2(e){let t=await pt(e.body.modelPath),n=new c2(t);return e.debug&&Ee(`load model: ${e.body.modelPath.match(/\/(.*)\./)[1]}`),new x2(n)}var I2={};xr(I2,{HandPose:()=>N2,load:()=>T2});function z0(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function Qu(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function c4(e,t,n){let r=t.shape[1],a=t.shape[2],s=[[e.startPoint[1]/r,e.startPoint[0]/a,e.endPoint[1]/r,e.endPoint[0]/a]];return We.cropAndResize(t,s,[0],n)}function u4(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],a=e.palmLandmarks.map(s=>[s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:r,palmLandmarks:a,confidence:e.confidence}}function P0(e,t=1.5){let n=Qu(e),r=z0(e),a=[t*r[0]/2,t*r[1]/2],s=[n[0]-a[0],n[1]-a[1]],i=[n[0]+a[0],n[1]+a[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function L0(e){let t=Qu(e),n=z0(e),a=Math.max(...n)/2,s=[t[0]-a,t[1]-a],i=[t[0]+a,t[1]+a];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}var b2=class{constructor(t,n,r){this.model=t,this.anchors=r.map(a=>[a.x_center,a.y_center]),this.anchorsTensor=Tn(this.anchors),this.inputSize=n,this.inputSizeTensor=un([n,n]),this.doubleInputSizeTensor=un([n*2,n*2])}normalizeBoxes(t){return z(()=>{let n=Fe(t,[0,0],[-1,2]),r=Fe(t,[0,2],[-1,2]),a=ie(ge(n,this.inputSizeTensor),this.anchorsTensor),s=ge(r,this.doubleInputSizeTensor),i=O(xe(a,s),this.inputSizeTensor),o=O(ie(a,s),this.inputSizeTensor);return gl([i,o],1)})}normalizeLandmarks(t,n){return z(()=>{let r=ie(ge(t.reshape([-1,7,2]),this.inputSizeTensor),this.anchors[n]);return O(r,this.inputSizeTensor)})}async getBoxes(t,n){let r=this.model.predict(t),a=r.squeeze();r.dispose();let s=z(()=>On(Fe(a,[0,0],[-1,1])).squeeze()),i=s.dataSync(),o=Fe(a,[0,1],[-1,4]),l=this.normalizeBoxes(o);o.dispose();let u=await We.nonMaxSuppressionAsync(l,i,n.hand.maxHands,n.hand.iouThreshold,n.hand.scoreThreshold),c=u.arraySync();s.dispose(),u.dispose();let h=[];for(let d of c)if(i[d]>=n.hand.minConfidence){let p=Fe(l,[d,0],[1,-1]),f=Fe(a,[d,5],[1,14]),m=z(()=>this.normalizeLandmarks(f,d).reshape([-1,2]));f.dispose(),h.push({box:p,palmLandmarks:m,confidence:i[d]})}return a.dispose(),l.dispose(),h}async estimateHandBounds(t,n){let r=t.shape[1],a=t.shape[2],s=z(()=>t.resizeBilinear([this.inputSize,this.inputSize]).div(127.5).sub(1)),i=await this.getBoxes(s,n);s.dispose();let o=[];if(!i||i.length===0)return o;for(let l of i){let u=l.box.dataSync(),c=u.slice(0,2),h=u.slice(2,4),d=l.palmLandmarks.arraySync();l.box.dispose(),l.palmLandmarks.dispose(),o.push(u4({startPoint:c,endPoint:h,palmLandmarks:d,confidence:l.confidence},[a/this.inputSize,r/this.inputSize]))}return o}};function Kae(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function h4(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Kae(n)}var d4=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ss(e,t){let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}function Zae(e,t){let n=[];for(let r=0;r<e.length;r++)n.push(e[r][t]);return n}function p4(e,t){let n=[],r=e.length;for(let a=0;a<r;a++){n.push([]);for(let s=0;s<r;s++)n[a].push(ss(e[a],Zae(t,s)))}return n}function _2(e,t){let n=Math.cos(e),r=Math.sin(e),a=[[n,-r,0],[r,n,0],[0,0,1]],s=d4(t[0],t[1]),i=p4(s,a),o=d4(-t[0],-t[1]);return p4(i,o)}function f4(e){let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-ss(t[0],n),-ss(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]}function v2(e,t){return[ss(e,t[0]),ss(e,t[1])]}var Yae=5,m4=1.65,A4=[0,5,9,13,17,1,2],Jae=0,Qae=2,k2=class{constructor(t,n,r){this.handDetector=t,this.landmarkDetector=n,this.inputSize=r,this.storedBoxes=[],this.skipped=0,this.detectedHands=0}getBoxForPalmLandmarks(t,n){let r=t.map(s=>v2([...s,1],n)),a=this.calculateLandmarksBoundingBox(r);return P0(L0(a),Yae)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),r=P0(L0(n),m4);r.palmLandmarks=[];for(let a=0;a<A4.length;a++)r.palmLandmarks.push(t[A4[a]].slice(0,2));return r}transformRawCoords(t,n,r,a){let s=z0(n),i=[s[0]/this.inputSize,s[1]/this.inputSize,(s[0]+s[1])/this.inputSize/2],o=t.map(p=>[i[0]*(p[0]-this.inputSize/2),i[1]*(p[1]-this.inputSize/2),i[2]*p[2]]),l=_2(r,[0,0]),u=o.map(p=>[...v2(p,l),p[2]]),c=f4(a),h=[...Qu(n),1],d=[ss(h,c[0]),ss(h,c[1])];return u.map(p=>[p[0]+d[0],p[1]+d[1],p[2]])}async estimateHands(t,n){let r=!1,a;(this.skipped===0||this.skipped>n.hand.skipFrames||!n.hand.landmarks||!n.videoOptimized)&&(a=await this.handDetector.estimateHandBounds(t,n),this.skipped=0),n.videoOptimized&&this.skipped++,a&&a.length>0&&(a.length!==this.detectedHands&&this.detectedHands!==n.hand.maxHands||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...a],this.storedBoxes.length>0&&(r=!0));let s=[];n.hand.skipInitial&&this.detectedHands===0&&(this.skipped=0);for(let i=0;i<this.storedBoxes.length;i++){let o=this.storedBoxes[i];if(!!o)if(n.hand.landmarks){let l=n.hand.rotation?h4(o.palmLandmarks[Jae],o.palmLandmarks[Qae]):0,u=Qu(o),c=[u[0]/t.shape[2],u[1]/t.shape[1]],h=n.hand.rotation?We.rotateWithOffset(t,l,0,c):t.clone(),d=_2(-l,u),p=r?this.getBoxForPalmLandmarks(o.palmLandmarks,d):o,f=c4(p,h,[this.inputSize,this.inputSize]),m=f.div(255);f.dispose(),h.dispose();let[A,y]=await this.landmarkDetector.predict(m);m.dispose();let g=A.dataSync()[0];if(A.dispose(),g>=n.hand.minConfidence){let w=j(y,[-1,3]),b=w.arraySync();y.dispose(),w.dispose();let _=this.transformRawCoords(b,p,l,d),x=this.getBoxForHandLandmarks(_);this.storedBoxes[i]=x;let S={landmarks:_,confidence:g,box:{topLeft:x.startPoint,bottomRight:x.endPoint}};s.push(S)}else this.storedBoxes[i]=null;y.dispose()}else{let l=P0(L0(o),m4),u={confidence:o.confidence,box:{topLeft:l.startPoint,bottomRight:l.endPoint}};s.push(u)}}return this.storedBoxes=this.storedBoxes.filter(i=>i!==null),this.detectedHands=s.length,s}calculateLandmarksBoundingBox(t){let n=t.map(i=>i[0]),r=t.map(i=>i[1]),a=[Math.min(...n),Math.min(...r)],s=[Math.max(...n),Math.max(...r)];return{startPoint:a,endPoint:s}}};var y4=[{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375}];var S2={thumb:[1,2,3,4],indexFinger:[5,6,7,8],middleFinger:[9,10,11,12],ringFinger:[13,14,15,16],pinky:[17,18,19,20],palmBase:[0]},N2=class{constructor(t){this.handPipeline=t}static getAnnotations(){return S2}async estimateHands(t,n){let r=await this.handPipeline.estimateHands(t,n);if(!r)return[];let a=[];for(let s of r){let i={};if(s.landmarks)for(let u of Object.keys(S2))i[u]=S2[u].map(c=>s.landmarks[c]);let o=s.box?[Math.max(0,s.box.topLeft[0]),Math.max(0,s.box.topLeft[1]),Math.min(t.shape[2],s.box.bottomRight[0])-Math.max(0,s.box.topLeft[0]),Math.min(t.shape[1],s.box.bottomRight[1])-Math.max(0,s.box.topLeft[1])]:[],l=[s.box.topLeft[0]/t.shape[2],s.box.topLeft[1]/t.shape[1],(s.box.bottomRight[0]-s.box.topLeft[0])/t.shape[2],(s.box.bottomRight[1]-s.box.topLeft[1])/t.shape[1]];a.push({confidence:s.confidence,box:o,boxRaw:l,landmarks:s.landmarks,annotations:i})}return a}};async function T2(e){let[t,n]=await Promise.all([e.hand.enabled?pt(e.hand.detector.modelPath,{fromTFHub:e.hand.detector.modelPath.includes("tfhub.dev")}):null,e.hand.landmarks?pt(e.hand.skeleton.modelPath,{fromTFHub:e.hand.skeleton.modelPath.includes("tfhub.dev")}):null]),r=new b2(t,t==null?void 0:t.inputs[0].shape[2],y4),a=new k2(r,n,n==null?void 0:n.inputs[0].shape[2]),s=new N2(a);return e.hand.enabled&&e.debug&&Ee(`load model: ${e.hand.detector.modelPath.match(/\/(.*)\./)[1]}`),e.hand.landmarks&&e.debug&&Ee(`load model: ${e.hand.skeleton.modelPath.match(/\/(.*)\./)[1]}`),s}var E2={};xr(E2,{load:()=>C2,predict:()=>R2});var g4=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","midHip","forehead","leftThumb","leftHand","rightThumb","rightHand"],x4=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","left:15","right:16","left:17","right:18","left:19","right:20","left:21","right:22","leftChest","rightChest","neck","forehead","left:27","right:28","left:29","right:30"];var Ar;async function C2(e){return Ar||(Ar=await pt(e.body.modelPath),Ar.width=parseInt(Ar.signature.inputs["input_1:0"].tensorShape.dim[2].size),Ar.height=parseInt(Ar.signature.inputs["input_1:0"].tensorShape.dim[1].size),e.debug&&Ee(`load model: ${e.body.modelPath.match(/\/(.*)\./)[1]}`)),Ar}async function R2(e,t){if(!Ar||!t.body.enabled)return null;let n={width:e.shape[2],height:e.shape[1]},r=We.resizeBilinear(e,[Ar.width,Ar.height],!1),a=ge(r,[255]);r.dispose();let s;if(t.profile){let u=await cn(()=>Ar.predict(a));s=u.result.find(c=>c.size===195||c.size===155).dataSync(),u.result.forEach(c=>c.dispose()),gn("blazepose",u)}else{let u=await Ar.predict(a);s=u.find(c=>c.size===195||c.size===155).dataSync(),u.forEach(c=>c.dispose())}a.dispose();let i=[],o=s.length===195?g4:x4,l=5;for(let u=0;u<s.length/l;u++)i.push({id:u,part:o[u],position:{x:Math.trunc(n.width*s[l*u+0]/255),y:Math.trunc(n.height*s[l*u+1]/255),z:Math.trunc(s[l*u+2])+0},score:(100-Math.trunc(100/(1+Math.exp(s[l*u+3]))))/100,presence:(100-Math.trunc(100/(1+Math.exp(s[l*u+4]))))/100});return[{keypoints:i}]}var yr,W0={},B0=Number.MAX_SAFE_INTEGER,ese=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","pelvis","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"];async function M2(e){return yr||(yr=await pt(e.body.modelPath),e.debug&&Ee(`load model: ${e.body.modelPath.match(/\/(.*)\./)[1]}`)),yr}function tse(e,t){let[n,r]=e.shape;return z(()=>{let a=(o,l)=>xe(o,O(ge(o,be(l,"int32")),be(l,"int32"))),s=j(e,[r*n]),i=Nn(s,0).dataSync()[0];if(i>t){let o=fi(s,0),l=a(o,n).dataSync()[0],u=ge(o,be(n,"int32")).dataSync()[0];return[l,u,i]}return[0,0,i]})}async function F2(e,t){return yr?B0<t.body.skipFrames&&t.videoOptimized&&Object.keys(W0).length>0?(B0++,W0):(t.videoOptimized?B0=0:B0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=We.resizeBilinear(e,[yr.inputs[0].shape[2],yr.inputs[0].shape[1]],!1),a=O(r,[255]);Ie(r);let s;if(!t.profile)t.body.enabled&&(s=await yr.predict(a));else{let i=t.body.enabled?await cn(()=>yr.predict(a)):{};s=i.result.clone(),i.result.dispose(),gn("body",i)}if(a.dispose(),s){let i=[],o=s.squeeze();Ie(s);let l=o.unstack(2);Ie(o);for(let u=0;u<l.length;u++){let[c,h,d]=tse(l[u],t.body.scoreThreshold);d>t.body.scoreThreshold&&i.push({id:u,score:d,part:ese[u],positionRaw:{xRaw:c/yr.inputs[0].shape[2],yRaw:h/yr.inputs[0].shape[1]},position:{x:Math.round(e.shape[2]*c/yr.inputs[0].shape[2]),y:Math.round(e.shape[1]*h/yr.inputs[0].shape[1])}})}l.forEach(u=>Ie(u)),W0=i}n(W0)})):null}var $2={};xr($2,{load:()=>O2,predict:()=>z2});var w4=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var Fr,D2=[],V0=Number.MAX_SAFE_INTEGER,U0=2.5,b4=!1;async function O2(e){return Fr||(Fr=await pt(e.object.modelPath),Fr.inputSize=parseInt(Object.values(Fr.modelSignature.inputs)[0].tensorShape.dim[2].size),e.debug&&Ee(`load model: ${e.object.modelPath.match(/\/(.*)\./)[1]}`)),Fr}async function nse(e,t,n,r){let a=0,s=[];for(let c of[1,2,4])z(()=>{var y,g;let h=c*13,d=(y=e.find(w=>w.shape[1]===h**2&&w.shape[2]===80))==null?void 0:y.squeeze(),p=(g=e.find(w=>w.shape[1]===h**2&&w.shape[2]<80))==null?void 0:g.squeeze(),m=p.reshape([-1,4,p.shape[1]/4]).argMax(2).arraySync(),A=b4?d.exp(1).arraySync():d.arraySync();for(let w=0;w<d.shape[0];w++)for(let b=0;b<d.shape[1];b++){let _=A[w][b]-(b4?1:0);if(_>r.object.minConfidence){let x=(.5+Math.trunc(w%h))/h,S=(.5+Math.trunc(w/h))/h,T=m[w].map(W=>W*(h/c/t)),E=[x-U0/c*T[0],S-U0/c*T[1],x+U0/c*T[2],S+U0/c*T[3]];E=E.map(W=>Math.max(0,Math.min(W,1)));let F=[E[0]*n[0],E[1]*n[1],E[2]*n[0],E[3]*n[1]],P={id:a++,strideSize:c,score:_,class:b+1,label:w4[b].label,center:[Math.trunc(n[0]*x),Math.trunc(n[1]*S)],centerRaw:[x,S],box:F.map(W=>Math.trunc(W)),boxRaw:E};s.push(P)}}});e.forEach(c=>Ie(c));let i=s.map(c=>c.boxRaw),o=s.map(c=>c.score),l=await We.nonMaxSuppressionAsync(i,o,r.object.maxResults,r.object.iouThreshold,r.object.minConfidence),u=l.dataSync();return Ie(l),s=s.filter((c,h)=>u.includes(h)).sort((c,h)=>h.score-c.score),s}async function z2(e,t){return Fr?V0<t.object.skipFrames&&t.videoOptimized&&D2.length>0?(V0++,D2):(t.videoOptimized?V0=0:V0=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=[e.shape[2],e.shape[1]],a=We.resizeBilinear(e,[Fr.inputSize,Fr.inputSize],!1),s=a.div(255);a.dispose();let i=s.transpose([0,3,1,2]);s.dispose();let o;if(!t.profile)t.object.enabled&&(o=await Fr.predict(i));else{let u=t.object.enabled?await cn(()=>Fr.predict(i)):{};o=u.result.clone(),u.result.dispose(),gn("object",u)}i.dispose();let l=await nse(o,Fr.inputSize,r,t);D2=l,n(l)})):null}var _4=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){let r=e[n].keypoints.find(l=>l.part==="leftWrist"),a=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&r&&a&&r.position.y<s.position.y&&a.position.y<s.position.y?t.push({body:n,gesture:"i give up"}):s&&r&&r.position.y<s.position.y?t.push({body:n,gesture:"raise left hand"}):s&&a&&a.position.y<s.position.y&&t.push({body:n,gesture:"raise right hand"});let i=e[n].keypoints.find(l=>l.part==="leftShoulder"),o=e[n].keypoints.find(l=>l.part==="rightShoulder");i&&o&&t.push({body:n,gesture:`leaning ${i.position.y>o.position.y?"left":"right"}`})}return t},v4=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++)if(e[n].mesh&&e[n].mesh.length>0){let r=e[n].mesh[33][2]-e[n].mesh[263][2];Math.abs(r)<10?t.push({face:n,gesture:"facing camera"}):t.push({face:n,gesture:`facing ${r<0?"right":"left"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let i=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));i>10&&t.push({face:n,gesture:`mouth ${Math.trunc(i)}% open`});let o=e[n].mesh[152][2];Math.abs(o)>10&&t.push({face:n,gesture:`head ${o<0?"up":"down"}`})}return t},k4=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){if(!e[n].annotations||!e[n].annotations.leftEyeIris||!e[n].annotations.rightEyeIris)continue;let r=e[n].annotations.leftEyeIris[3][0]-e[n].annotations.leftEyeIris[1][0],a=e[n].annotations.leftEyeIris[4][1]-e[n].annotations.leftEyeIris[2][1],s=Math.abs(r*a),i=e[n].annotations.rightEyeIris[3][0]-e[n].annotations.rightEyeIris[1][0],o=e[n].annotations.rightEyeIris[4][1]-e[n].annotations.rightEyeIris[2][1],l=Math.abs(i*o);Math.abs(s-l)/Math.max(s,l)<.25&&t.push({iris:n,gesture:"looking at camera"})}return t},I4=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){let r=[];for(let[a,s]of Object.entries(e[n].annotations))a!=="palmBase"&&r.push({name:a.toLowerCase(),position:s[0]});if(r&&r.length>0){let a=r.reduce((i,o)=>i.position[2]<o.position[2]?i:o),s=r.reduce((i,o)=>i.position[1]<o.position[1]?i:o);t.push({hand:n,gesture:`${a.name} forward ${s.name} up`})}}return t};function rse(e,t,n){let r=function(o,l,u){let c=new RegExp("\\b"+l+" \\w+ (\\w+)","ig");o.replace(c,(h,d)=>(u[d]=0,h))},a=function(o,l){let u=e.createShader(l);if(e.shaderSource(u,o),e.compileShader(u),!e.getShaderParameter(u,e.COMPILE_STATUS))throw new Error("Filter: GL compile failed",e.getShaderInfoLog(u));return u};this.uniform={},this.attribute={};let s=a(t,e.VERTEX_SHADER),i=a(n,e.FRAGMENT_SHADER);if(this.id=e.createProgram(),e.attachShader(this.id,s),e.attachShader(this.id,i),e.linkProgram(this.id),!e.getProgramParameter(this.id,e.LINK_STATUS))throw new Error("Filter: GL link failed",e.getProgramInfoLog(this.id));e.useProgram(this.id),r(t,"attribute",this.attribute);for(let o in this.attribute)this.attribute[o]=e.getAttribLocation(this.id,o);r(t,"uniform",this.uniform),r(n,"uniform",this.uniform);for(let o in this.uniform)this.uniform[o]=e.getUniformLocation(this.id,o)}function S4(e){e||(e={});let t=0,n=null,r=!1,a=-1,s=[null,null],i=[],o=-1,l=-1,u=null,c=null,h={},d=e.canvas||document.createElement("canvas"),p={},f={INTERMEDIATE:1},m=d.getContext("webgl");if(!m)throw new Error("Filter: getContext() failed");this.addFilter=function(_){let x=Array.prototype.slice.call(arguments,1),S=h[_];i.push({func:S,args:x})},this.reset=function(){i=[]};let A=function(_,x){if(!(_===o&&x===l)){if(d.width=_,o=_,d.height=x,l=x,!u){let S=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);u=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,u),m.bufferData(m.ARRAY_BUFFER,S,m.STATIC_DRAW),m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}m.viewport(0,0,o,l),s=[null,null]}},y=function(_,x){let S=m.createFramebuffer();m.bindFramebuffer(m.FRAMEBUFFER,S);let T=m.createRenderbuffer();m.bindRenderbuffer(m.RENDERBUFFER,T);let E=m.createTexture();return m.bindTexture(m.TEXTURE_2D,E),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,_,x,0,m.RGBA,m.UNSIGNED_BYTE,null),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.TEXTURE_2D,E,0),m.bindTexture(m.TEXTURE_2D,null),m.bindFramebuffer(m.FRAMEBUFFER,null),{fbo:S,texture:E}},g=function(_){return s[_]=s[_]||y(o,l),s[_]},w=function(_=null){var E,F;let x=null,S=null,T=!1;t===0?x=n:x=(E=g(a))==null?void 0:E.texture,t++,r&&!(_&f.INTERMEDIATE)?(S=null,T=t%2==0):(a=(a+1)%2,S=(F=g(a))==null?void 0:F.fbo),m.bindTexture(m.TEXTURE_2D,x),m.bindFramebuffer(m.FRAMEBUFFER,S),m.uniform1f(c.uniform.flipY,T?-1:1),m.drawArrays(m.TRIANGLES,0,6)};this.apply=function(_){if(A(_.width,_.height),t=0,n||(n=m.createTexture()),m.bindTexture(m.TEXTURE_2D,n),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.NEAREST),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,m.RGBA,m.UNSIGNED_BYTE,_),i.length===0)return w(),d;for(let x=0;x<i.length;x++){r=x===i.length-1;let S=i[x];S.func.apply(this,S.args||[])}return d};let b=function(_){if(p[_])return c=p[_],m.useProgram(c.id),c;let x={};x.VERTEX_IDENTITY=["precision highp float;","attribute vec2 pos;","attribute vec2 uv;","varying vec2 vUv;","uniform float flipY;","void main(void) {","vUv = uv;","gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);","}"].join(`
|
|
`),x.FRAGMENT_IDENTITY=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","void main(void) {","gl_FragColor = texture2D(texture, vUv);","}"].join(`
|
|
`),c=new rse(m,x.VERTEX_IDENTITY,_);let S=Float32Array.BYTES_PER_ELEMENT,T=4*S;return m.enableVertexAttribArray(c.attribute.pos),m.vertexAttribPointer(c.attribute.pos,2,m.FLOAT,!1,T,0*S),m.enableVertexAttribArray(c.attribute.uv),m.vertexAttribPointer(c.attribute.uv,2,m.FLOAT,!1,T,2*S),p[_]=c,c};h.colorMatrix=function(_){let x=new Float32Array(_);x[4]/=255,x[9]/=255,x[14]/=255,x[19]/=255;let S=x[18]===1&&x[3]===0&&x[8]===0&&x[13]===0&&x[15]===0&&x[16]===0&&x[17]===0&&x[19]===0?h.colorMatrix.SHADER.WITHOUT_ALPHA:h.colorMatrix.SHADER.WITH_ALPHA,T=b(S);m.uniform1fv(T.uniform.m,x),w()},h.colorMatrix.SHADER={},h.colorMatrix.SHADER.WITH_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];","gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];","}"].join(`
|
|
`),h.colorMatrix.SHADER.WITHOUT_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];","gl_FragColor.a = c.a;","}"].join(`
|
|
`),h.brightness=function(_){let x=(_||0)+1;h.colorMatrix([x,0,0,0,0,0,x,0,0,0,0,0,x,0,0,0,0,0,1,0])},h.saturation=function(_){let x=(_||0)*2/3+1,S=(x-1)*-.5;h.colorMatrix([x,S,S,0,0,S,x,S,0,0,S,S,x,0,0,0,0,0,1,0])},h.desaturate=function(){h.saturation(-1)},h.contrast=function(_){let x=(_||0)+1,S=-128*(x-1);h.colorMatrix([x,0,0,0,S,0,x,0,0,S,0,0,x,0,S,0,0,0,1,0])},h.negative=function(){h.contrast(-2)},h.hue=function(_){_=(_||0)/180*Math.PI;let x=Math.cos(_),S=Math.sin(_),T=.213,E=.715,F=.072;h.colorMatrix([T+x*(1-T)+S*-T,E+x*-E+S*-E,F+x*-F+S*(1-F),0,0,T+x*-T+S*.143,E+x*(1-E)+S*.14,F+x*-F+S*-.283,0,0,T+x*-T+S*-(1-T),E+x*-E+S*E,F+x*(1-F)+S*F,0,0,0,0,0,1,0])},h.desaturateLuminance=function(){h.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},h.sepia=function(){h.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},h.brownie=function(){h.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},h.vintagePinhole=function(){h.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},h.kodachrome=function(){h.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},h.technicolor=function(){h.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},h.polaroid=function(){h.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},h.shiftToBGR=function(){h.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},h.convolution=function(_){let x=new Float32Array(_),S=1/o,T=1/l,E=b(h.convolution.SHADER);m.uniform1fv(E.uniform.m,x),m.uniform2f(E.uniform.px,S,T),w()},h.convolution.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","uniform float m[9];","void main(void) {","vec4 c11 = texture2D(texture, vUv - px);","vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y));","vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y));","vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) );","vec4 c22 = texture2D(texture, vUv);","vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) );","vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) );","vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) );","vec4 c33 = texture2D(texture, vUv + px );","gl_FragColor = ","c11 * m[0] + c12 * m[1] + c22 * m[2] +","c21 * m[3] + c22 * m[4] + c23 * m[5] +","c31 * m[6] + c32 * m[7] + c33 * m[8];","gl_FragColor.a = c22.a;","}"].join(`
|
|
`),h.detectEdges=function(){h.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},h.sobelX=function(){h.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},h.sobelY=function(){h.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},h.sharpen=function(_){let x=_||1;h.convolution.call(this,[0,-1*x,0,-1*x,1+4*x,-1*x,0,-1*x,0])},h.emboss=function(_){let x=_||1;h.convolution.call(this,[-2*x,-1*x,0,-1*x,1,1*x,0,1*x,2*x])},h.blur=function(_){let x=_/7/o,S=_/7/l,T=b(h.blur.SHADER);m.uniform2f(T.uniform.px,0,S),w(f.INTERMEDIATE),m.uniform2f(T.uniform.px,x,0),w()},h.blur.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","void main(void) {","gl_FragColor = vec4(0.0);","gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;","gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv )*0.159576912161;","gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;","}"].join(`
|
|
`),h.pixelate=function(_){let x=_/o,S=_/l,T=b(h.pixelate.SHADER);m.uniform2f(T.uniform.size,x,S),w()},h.pixelate.SHADER=["precision highp float;","varying vec2 vUv;","uniform vec2 size;","uniform sampler2D texture;","vec2 pixelate(vec2 coord, vec2 size) {","return floor( coord / size ) * size;","}","void main(void) {","gl_FragColor = vec4(0.0);","vec2 coord = pixelate(vUv, size);","gl_FragColor += texture2D(texture, coord);","}"].join(`
|
|
`)}var j0=2048,Mt=null,sn=null,Dt=null;function P2(e,t){let n;if(e instanceof He)n=zr(e);else{let a=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,s=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0,i=a,o=s;if(i>j0&&(i=j0,o=i*s/a),o>j0&&(o=j0,i=o*a/s),t.filter.width>0?i=t.filter.width:t.filter.height>0&&(i=a*(t.filter.height/s)),t.filter.height>0?o=t.filter.height:t.filter.width>0&&(o=s*(t.filter.width/a)),!i||!o)return Ee("Human: invalid input",e),{tensor:null,canvas:null};(!Mt||Mt.width!==i||Mt.height!==o)&&(Mt=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(i,o):document.createElement("canvas"),Mt.width!==i&&(Mt.width=i),Mt.height!==o&&(Mt.height=o));let l=Mt.getContext("2d");if(e instanceof ImageData?l.putImageData(e,0,0):l.drawImage(e,0,0,a,s,0,0,Mt.width,Mt.height),t.filter.enabled){if((!Dt||!sn||Mt.width!==sn.width||Mt.height!==sn.height)&&(sn=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(Mt.width,Mt.height):document.createElement("canvas"),sn.width!==Mt.width&&(sn.width=Mt.width),sn.height!==Mt.height&&(sn.height=Mt.height),Dt=wr.flags.IS_BROWSER?new S4({canvas:sn}):null),!Dt)return{tensor:null,canvas:Mt};Dt.reset(),Dt.addFilter("brightness",t.filter.brightness),t.filter.contrast!==0&&Dt.addFilter("contrast",t.filter.contrast),t.filter.sharpness!==0&&Dt.addFilter("sharpen",t.filter.sharpness),t.filter.blur!==0&&Dt.addFilter("blur",t.filter.blur),t.filter.saturation!==0&&Dt.addFilter("saturation",t.filter.saturation),t.filter.hue!==0&&Dt.addFilter("hue",t.filter.hue),t.filter.negative&&Dt.addFilter("negative"),t.filter.sepia&&Dt.addFilter("sepia"),t.filter.vintage&&Dt.addFilter("brownie"),t.filter.sepia&&Dt.addFilter("sepia"),t.filter.kodachrome&&Dt.addFilter("kodachrome"),t.filter.technicolor&&Dt.addFilter("technicolor"),t.filter.polaroid&&Dt.addFilter("polaroid"),t.filter.pixelate!==0&&Dt.addFilter("pixelate",t.filter.pixelate),Dt.apply(Mt)}else sn=Mt,Dt&&(Dt=null);let u;if(sn.data){let h=[sn.height,sn.width,3];u=wd(sn.data,h,"int32")}else if(t.backend==="webgl"||sn instanceof ImageData)u=pl.fromPixels(sn);else{let h=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(i,o):document.createElement("canvas");h.width=i,h.height=o;let d=h.getContext("2d");d==null||d.drawImage(sn,0,0);let p=d==null?void 0:d.getImageData(0,0,i,o);u=pl.fromPixels(p)}let c=u.toFloat();n=c.expandDims(0),u.dispose(),c.dispose()}let r=t.filter.return?sn:null;return{tensor:n,canvas:r}}var L2={};xr(L2,{all:()=>sse,body:()=>E4,canvas:()=>ase,drawOptions:()=>oe,face:()=>T4,gesture:()=>N4,hand:()=>C4,object:()=>R4});var At={backend:"webgl",wasmPath:"../assets/",debug:!0,async:!0,profile:!1,deallocate:!1,scoped:!1,videoOptimized:!0,warmup:"face",filter:{enabled:!0,width:0,height:0,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"../models/blazeface-back.json",rotation:!1,maxFaces:10,skipFrames:21,skipInitial:!1,minConfidence:.2,iouThreshold:.1,scoreThreshold:.2,return:!1},mesh:{enabled:!0,modelPath:"../models/facemesh.json"},iris:{enabled:!0,modelPath:"../models/iris.json"},description:{enabled:!0,modelPath:"../models/faceres.json",skipFrames:31},emotion:{enabled:!0,minConfidence:.1,skipFrames:32,modelPath:"../models/emotion.json"},age:{enabled:!1,modelPath:"../models/age.json",skipFrames:33},gender:{enabled:!1,minConfidence:.1,modelPath:"../models/gender.json",skipFrames:34},embedding:{enabled:!1,modelPath:"../models/mobileface.json"}},body:{enabled:!0,modelPath:"../models/posenet.json",maxDetections:10,scoreThreshold:.3,nmsRadius:20},hand:{enabled:!0,rotation:!1,skipFrames:12,skipInitial:!1,minConfidence:.1,iouThreshold:.1,scoreThreshold:.5,maxHands:1,landmarks:!0,detector:{modelPath:"../models/handdetect.json"},skeleton:{modelPath:"../models/handskeleton.json"}},object:{enabled:!1,modelPath:"../models/nanodet.json",minConfidence:.2,iouThreshold:.4,maxResults:10,skipFrames:41}};var oe={color:"rgba(173, 216, 230, 0.3)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 16px "Segoe UI"',lineHeight:20,lineWidth:6,pointSize:2,roundRect:28,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawPolygons:!0,fillPolygons:!1,useDepth:!0,useCurves:!1,bufferedOutput:!1,useRawBoxes:!1};function H0(e,t,n,r=null){e.fillStyle=oe.useDepth&&r?`rgba(${127.5+2*(r||0)}, ${127.5-2*(r||0)}, 255, 0.3)`:oe.color,e.beginPath(),e.arc(t,n,oe.pointSize,0,2*Math.PI),e.fill()}function ic(e,t,n,r,a){if(e.beginPath(),oe.useCurves){let s=(t+t+r)/2,i=(n+n+a)/2;e.ellipse(s,i,r/2,a/2,0,0,2*Math.PI)}else e.lineWidth=oe.lineWidth,e.moveTo(t+oe.roundRect,n),e.lineTo(t+r-oe.roundRect,n),e.quadraticCurveTo(t+r,n,t+r,n+oe.roundRect),e.lineTo(t+r,n+a-oe.roundRect),e.quadraticCurveTo(t+r,n+a,t+r-oe.roundRect,n+a),e.lineTo(t+oe.roundRect,n+a),e.quadraticCurveTo(t,n+a,t,n+a-oe.roundRect),e.lineTo(t,n+oe.roundRect),e.quadraticCurveTo(t,n,t+oe.roundRect,n),e.closePath();e.stroke()}function W2(e,t=[]){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=oe.useDepth&&n[2]?`rgba(${127.5+2*n[2]}, ${127.5-2*n[2]}, 255, 0.3)`:oe.color,e.fillStyle=oe.useDepth&&n[2]?`rgba(${127.5+2*n[2]}, ${127.5-2*n[2]}, 255, 0.3)`:oe.color,e.lineTo(n[0],parseInt(n[1]));e.stroke(),oe.fillPolygons&&(e.closePath(),e.fill())}}function G0(e,t=[]){if(!(t===void 0||t.length===0)){if(!oe.useCurves||t.length<=2){W2(e,t);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n<t.length-2;n++){let r=(t[n][0]+t[n+1][0])/2,a=(t[n][1]+t[n+1][1])/2;e.quadraticCurveTo(t[n][0],t[n][1],r,a)}e.quadraticCurveTo(t[t.length-2][0],t[t.length-2][1],t[t.length-1][0],t[t.length-1][1]),e.stroke(),oe.fillPolygons&&(e.closePath(),e.fill())}}async function N4(e,t){if(!t||!e||!(e instanceof HTMLCanvasElement))return;let n=e.getContext("2d");if(!n)return;n.font=oe.font,n.fillStyle=oe.color;let r=1;for(let a=0;a<t.length;a++){let s=[],i=[];if([s,i]=Object.entries(t[a]),i.length>1&&i[1].length>0){let o=s[1]>0?`#${s[1]}`:"",l=`${s[0]} ${o}: ${i[1]}`;oe.shadowColor&&oe.shadowColor!==""&&(n.fillStyle=oe.shadowColor,n.fillText(l,8,2+r*oe.lineHeight)),n.fillStyle=oe.labelColor,n.fillText(l,6,0+r*oe.lineHeight),r+=1}}}async function T4(e,t){if(!t||!e||!(e instanceof HTMLCanvasElement))return;let n=e.getContext("2d");if(!!n)for(let r of t){n.font=oe.font,n.strokeStyle=oe.color,n.fillStyle=oe.color,oe.drawBoxes&&(oe.useRawBoxes?ic(n,e.width*r.boxRaw[0],e.height*r.boxRaw[1],e.width*r.boxRaw[2],e.height*r.boxRaw[3]):ic(n,r.box[0],r.box[1],r.box[2],r.box[3]));let a=[];if(a.push(`face confidence: ${Math.trunc(100*r.confidence)}%`),r.genderConfidence&&a.push(`${r.gender||""} ${Math.trunc(100*r.genderConfidence)}% confident`),r.age&&a.push(`age: ${r.age||""}`),r.iris&&a.push(`iris distance: ${r.iris}`),r.emotion&&r.emotion.length>0){let s=r.emotion.map(i=>`${Math.trunc(100*i.score)}% ${i.emotion}`);a.push(s.join(" "))}r.angle&&r.angle.roll&&a.push(`roll: ${Math.trunc(100*r.angle.roll)/100} yaw:${Math.trunc(100*r.angle.yaw)/100} pitch:${Math.trunc(100*r.angle.pitch)/100}`),a.length===0&&a.push("face"),n.fillStyle=oe.color;for(let s=a.length-1;s>=0;s--){let i=Math.max(r.box[0],0),o=s*oe.lineHeight+r.box[1];oe.shadowColor&&oe.shadowColor!==""&&(n.fillStyle=oe.shadowColor,n.fillText(a[s],i+5,o+16)),n.fillStyle=oe.labelColor,n.fillText(a[s],i+4,o+15)}if(n.lineWidth=1,r.mesh&&r.mesh.length>0){if(oe.drawPoints)for(let s of r.mesh)H0(n,s[0],s[1],s[2]);if(oe.drawPolygons){n.lineWidth=1;for(let s=0;s<Wi.length/3;s++){let i=[Wi[s*3+0],Wi[s*3+1],Wi[s*3+2]].map(o=>r.mesh[o]);W2(n,i)}if(r.annotations&&r.annotations.leftEyeIris){n.strokeStyle=oe.useDepth?"rgba(255, 200, 255, 0.3)":oe.color,n.beginPath();let s=Math.abs(r.annotations.leftEyeIris[3][0]-r.annotations.leftEyeIris[1][0])/2,i=Math.abs(r.annotations.leftEyeIris[4][1]-r.annotations.leftEyeIris[2][1])/2;n.ellipse(r.annotations.leftEyeIris[0][0],r.annotations.leftEyeIris[0][1],s,i,0,0,2*Math.PI),n.stroke(),oe.fillPolygons&&(n.fillStyle=oe.useDepth?"rgba(255, 255, 200, 0.3)":oe.color,n.fill())}if(r.annotations&&r.annotations.rightEyeIris){n.strokeStyle=oe.useDepth?"rgba(255, 200, 255, 0.3)":oe.color,n.beginPath();let s=Math.abs(r.annotations.rightEyeIris[3][0]-r.annotations.rightEyeIris[1][0])/2,i=Math.abs(r.annotations.rightEyeIris[4][1]-r.annotations.rightEyeIris[2][1])/2;n.ellipse(r.annotations.rightEyeIris[0][0],r.annotations.rightEyeIris[0][1],s,i,0,0,2*Math.PI),n.stroke(),oe.fillPolygons&&(n.fillStyle=oe.useDepth?"rgba(255, 255, 200, 0.3)":oe.color,n.fill())}}}}}var is=[];async function E4(e,t){if(!t||!e||!(e instanceof HTMLCanvasElement))return;let n=e.getContext("2d");if(!!n){n.lineJoin="round";for(let r=0;r<t.length;r++){if(!is[r]&&oe.bufferedOutput&&(is[r]={...t[r]}),n.strokeStyle=oe.color,n.lineWidth=oe.lineWidth,oe.drawPoints)for(let a=0;a<t[r].keypoints.length;a++)n.fillStyle=oe.useDepth&&t[r].keypoints[a].position.z?`rgba(${127.5+2*t[r].keypoints[a].position.z}, ${127.5-2*t[r].keypoints[a].position.z}, 255, 0.5)`:oe.color,oe.bufferedOutput?(is[r].keypoints[a][0]=(is[r].keypoints[a][0]+t[r].keypoints[a].position.x)/2,is[r].keypoints[a][1]=(is[r].keypoints[a][1]+t[r].keypoints[a].position.y)/2,H0(n,is[r].keypoints[a][0],is[r].keypoints[a][1])):H0(n,t[r].keypoints[a].position.x,t[r].keypoints[a].position.y);if(oe.drawLabels&&(n.font=oe.font,t[r].keypoints))for(let a of t[r].keypoints)n.fillStyle=oe.useDepth&&a.position.z?`rgba(${127.5+2*a.position.z}, ${127.5-2*a.position.z}, 255, 0.5)`:oe.color,n.fillText(`${a.part}`,a.position.x+4,a.position.y+4);if(oe.drawPolygons&&t[r].keypoints){let a,s=[];s.length=0,a=t[r].keypoints.find(i=>i.part==="leftShoulder"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightShoulder"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightHip"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftHip"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftShoulder"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),s.length===5&&W2(n,s),s.length=0,a=t[r].keypoints.find(i=>i.part==="leftHip"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftKnee"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftAnkle"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftHeel"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftFoot"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),G0(n,s),s.length=0,a=t[r].keypoints.find(i=>i.part==="rightHip"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightKnee"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightAnkle"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightHeel"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightFoot"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),G0(n,s),s.length=0,a=t[r].keypoints.find(i=>i.part==="leftShoulder"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftElbow"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftWrist"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="leftPalm"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),G0(n,s),s.length=0,a=t[r].keypoints.find(i=>i.part==="rightShoulder"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightElbow"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightWrist"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),a=t[r].keypoints.find(i=>i.part==="rightPalm"),a&&a.score>At.body.scoreThreshold&&s.push([a.position.x,a.position.y]),G0(n,s)}}}}async function C4(e,t){if(!t||!e||!(e instanceof HTMLCanvasElement))return;let n=e.getContext("2d");if(!!n){n.lineJoin="round",n.font=oe.font;for(let r of t){if(oe.drawBoxes&&(n.strokeStyle=oe.color,n.fillStyle=oe.color,oe.useRawBoxes?ic(n,e.width*r.boxRaw[0],e.height*r.boxRaw[1],e.width*r.boxRaw[2],e.height*r.boxRaw[3]):ic(n,r.box[0],r.box[1],r.box[2],r.box[3]),oe.drawLabels&&(oe.shadowColor&&oe.shadowColor!==""&&(n.fillStyle=oe.shadowColor,n.fillText("hand",r.box[0]+3,1+r.box[1]+oe.lineHeight,r.box[2])),n.fillStyle=oe.labelColor,n.fillText("hand",r.box[0]+2,0+r.box[1]+oe.lineHeight,r.box[2])),n.stroke()),oe.drawPoints&&r.landmarks&&r.landmarks.length>0)for(let a of r.landmarks)n.fillStyle=oe.useDepth?`rgba(${127.5+2*a[2]}, ${127.5-2*a[2]}, 255, 0.5)`:oe.color,H0(n,a[0],a[1]);if(oe.drawPolygons){let a=s=>{if(!!s)for(let i=0;i<s.length;i++)n.lineWidth=oe.lineWidth,n.beginPath(),n.strokeStyle=oe.useDepth?`rgba(${127.5+2*s[i][2]}, ${127.5-2*s[i][2]}, 255, 0.5)`:oe.color,n.moveTo(s[i>0?i-1:0][0],s[i>0?i-1:0][1]),n.lineTo(s[i][0],s[i][1]),n.stroke()};a(r.annotations.indexFinger),a(r.annotations.middleFinger),a(r.annotations.ringFinger),a(r.annotations.pinky),a(r.annotations.thumb)}}}}async function R4(e,t){if(!t||!e||!(e instanceof HTMLCanvasElement))return;let n=e.getContext("2d");if(!!n){n.lineJoin="round",n.font=oe.font;for(let r of t)if(oe.drawBoxes){if(n.strokeStyle=oe.color,n.fillStyle=oe.color,oe.useRawBoxes?ic(n,e.width*r.boxRaw[0],e.height*r.boxRaw[1],e.width*r.boxRaw[2],e.height*r.boxRaw[3]):ic(n,r.box[0],r.box[1],r.box[2],r.box[3]),oe.drawLabels){let a=`${Math.round(100*r.score)}% ${r.label}`;oe.shadowColor&&oe.shadowColor!==""&&(n.fillStyle=oe.shadowColor,n.fillText(a,r.box[0]+3,1+r.box[1]+oe.lineHeight,r.box[2])),n.fillStyle=oe.labelColor,n.fillText(a,r.box[0]+2,0+r.box[1]+oe.lineHeight,r.box[2])}n.stroke()}}}async function ase(e,t){if(!e||!t||!(e instanceof HTMLCanvasElement)||!(t instanceof HTMLCanvasElement))return;let n=e.getContext("2d");n==null||n.drawImage(e,0,0)}async function sse(e,t){!t||!e||e instanceof HTMLCanvasElement&&(T4(e,t.face),E4(e,t.body),C4(e,t.hand),N4(e,t.gesture),R4(e,t.object))}var q0=`
|
|
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`,X0=`
|
|
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk
|
|
JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF
|
|
RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA
|
|
AhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAEDAgQFBgf/xABDEAEAAgECBAMECQIDBgUFAQAA
|
|
AQIDBBEFEiExE0FRBiJhcRQjMkJSgZGhsWLBJDNyFSVTY3OSNEPR4fAHFjWCokT/xAAYAQEAAwEA
|
|
AAAAAAAAAAAAAAAAAQIDBP/EACARAQEBAQADAQEBAQEBAAAAAAABAhEDITFBEjJRIhP/2gAMAwEA
|
|
AhEDEQA/APqYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAKNTq8OkxzfNkisQC8eb1XtRNbzXT4q7eU2nu0MntRq/D8StMccvW29ZmdvgjsTyvZjxOLj
|
|
+s8WLxn8TFPXs6Oj9oct7c14rkxz22nrB2I49KOdTjelmszfmpMeUxv/AA28OqwZ4icWWtt/SUi4
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmdo3nsPNe0Pt
|
|
Fh09Z0+DNWL7+9O/7A3eJcZppsV5raI27esvH6jX5ddM25p79Ilo59VbUZOe2Tm/PeGvfPfT2iKR
|
|
PLv1+DO678XmW/a97U6TtOyzTbTF538/T9WjTNecm9a7126tqk3rSYxY5ta1plRZqZNXGjyZcPXl
|
|
mZmsx+qjBrsuO16xM7eXRt04JrdTltk5OWJnfaWf0a2lty5MdZnfzSn+WOHiOutFpjHa9e8bQ2fp
|
|
+alYy462pk7zXbuxjPesbRS0f6ZZV1ET1tErzXFLHo+A+1ddZf6NrI8PJHa1vN6iJi0bxMTHwfOa
|
|
zhzd61v1846utwniM6DUdb3nBaNrVmd9vjC/ZVePYirBqMWppz4rxaPgtEAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAItaK1m09ojcHnvarjM8P0vh49+a/eY8ng9D
|
|
h1fGM1rxjtGPfvbzdbjuTJxHX48cTPNltM/KsS9Dw7S49Jp6UpHaGe2vjz1y9J7LYK13vHWe7bj2
|
|
ex1tvM80ekuxW3RnW3Vm6P5jRx8H0+OYmMcb+bapo8GKPdpC6bQwtdHU8JpWkdJ/JweL6e23iU67
|
|
d4dubSqyVi9Zi0bwIs68XGp36TtEq7ZJmZmevzdbifCKWtbJinkt6eTgZPFw32t+sRurbWVzxs1y
|
|
Rv6T8V1NZNPtfq0seTm+Kevr+SZuxXjvaPiV8N4viycto9HseG6+uu08W6Rkj7UPmFck1tE1nlmP
|
|
Ld3eA8V8HVVi1pjq6Ma/pnqce/ERMTETHaUrKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAADW19+TQ5p/p2bLS4v04Zmt5VjeQeJ4bjnLqsupv+Ka1+ERLv4reTmcNxcuC
|
|
vy3l0qdI2hlr66sT02ot0ZV7qqrInruzrVZLGSZ37JjqgYTG0K5lbaFVhDT1Ub456RPweY4hixWi
|
|
eSdpjvD1eWejz3FNHWYtkpvFo9EIseb3tS3SerOms22rfpPqZKzvvHSYUz70TExG6Gdbs2rljeJ/
|
|
Mx5L0vEzPaelnOi98c9J2bFNTFpit47+a+PVUvx9T9nOIfT+GV5p3yY/ds67wvsXqpxau+G09Lx+
|
|
r3TqrEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV4ljnLw3U0jvO
|
|
O0fs2lWqyUw6XLkyfYrWZkHldBEV09eveG3Fq1mI3jd4vPrOIaid8G9MP3Y38k6fNrt/rMk9Ou8s
|
|
tfXXn49rGWInuy8SO/k5Gl1E3rG/fzbOe94wTy99mbRvTrMOOvNfJWsesywniukrG/jU6fF43WYN
|
|
TmtEeJtEQ06aSmK2+bNtEd+qfSO17unF9Hmvy1y13XWyVmN4tExLxVK8PmNq5NrT58zawam+m/yc
|
|
0Xj8NpRYSvQZ7xEOdqI3rPozxayNRXe0ct/ON03jmrKB5nV4q1yTO20Obmv4c+cx8HoeI6WZpNoj
|
|
q83niYmYscU0r8aJ6T1n49zeJ+Meqm1drb9J+Kd5p136StGVem9l9TbHxLDFp7W7+sS+q1nesT6w
|
|
+PcAzVjiGHftzQ+v4f8AJpv6On8jH9ZgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAABp8VrW/C9TW0ztOO3b5Nxp8VmI4bn37TWYB8f1HFtTfUfR9FWJmsdZ9I7MtJxDX5s
|
|
d8ta1y0xzteaR2277rcuhycP12SceLxMeWNpjttHwlu8I0mfQ1y+D7k5YmJmY36T36Ka43z/AF1t
|
|
cI1ds+qxVj7/AEej19PCw9HJ4NoK4OIU5Y35YmZdzVTGebVZabx5jJS+Tmns81rNLm1Wrzc9rVw4
|
|
Yibbem72mXTTS0w0M3BvEta1bWrM95ie5EanY87wXgNOL6XPfxraXLhra/W28bR/dzYzarBqJxRe
|
|
bzE7Rt5vWU9n8mPHOGmS0Ypnea1naJb+k9ncNLR7u2y/WcxXO4TOoyUrN6zD0FaW5Y3hu49FiwUi
|
|
KxCvLMR0hlW0jn6ukWw3iXjOJzbDlneOj3GaN6zDzfFOH+LE7SRGo83XNSZ2lbG2/WfdlvaT2cy6
|
|
rNFInlrv1mfJ37cK4PwTTxOoidRm2+/2/KFuyMp47XB4LivXiunrH2b2iH2qn2K/J8x4fGDNxTSZ
|
|
9Nh8OviRvTyfT6xtWI+DeXs9MNZubypASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAOZx6/LoOWPvWiHTcf2hiZ0e8fc2mf1E5+vP/AEeuSd7RC2uKtI6QjHfeINTfwtPf
|
|
Jvty9WPfbt/lucP03gxfJf7d/wBoReYpm97zaNeLb4Ims9Nt94auDjem1Wo5PFi1onylS+1o7l8V
|
|
bxvtupjDMdNkYtXS1+Stt+m63xImEJ4xjHER2ZxMUjeUTO3VRmydBbjLJqPi08mbeVOXJPq1sl5Q
|
|
Vbkz9+rRy35rxHqzmZlVEe/Ez5LRlW5iyfR6zffaIjq1OSNZps2a21rZInafSPJhxGMl9LStLRWM
|
|
lorM/A4dkrWbYfLZC2W/7K6eubX6b4RzT+W76K8b7G6X62cu3Sten59nsm3j+OXz3/0ANGIAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0OIYfpOHPijvNNo+fdvtXJO18k/
|
|
/OwPFYbz2ls3jx8VqW6xMdWPEdP9D4lkx/dt79flLLHbkxTPwY6nt2512ORTRzE2x4/dpE7cvkme
|
|
E4IrW3hRMxO8THRtU1FKWtvtvK2upx22rzRCtXkqzh2jtF7ZbT122b01ndnpuWuP3Z3+Ky20qDVv
|
|
fauzVy3mejZzNK8dVjqi87KLRLYtXruqvXzkQp7Qoid88R6rcl+WGlW0/Sa22mfhCZOq2x082ix6
|
|
jkm822pO8VrPdr4dNObVeDo8XW3uzMbzK+mvxT7szE27cvnu9j7PcNjSaXx8mOIzZevbrEeic5tN
|
|
+SZnpt8J4fHD9HXHO3PPW0x/DeBtJxx29vaAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAKNRim9Z5e89Nl4DzXtVh5babURHrSf7f3ec1+qnDorWrvvt5Pccb0n0zhmWk
|
|
Rvevv1+cPE2rGTFNZU26PFfxwa5dVkjelI2772nZnX6bbrEUq3o0d678u8wmuDL2ittvVjXdneeK
|
|
cGv4jpJ6U56+kS7+j118+GLXpakzHaWlp9NNY3tv+bbiYiNoQy1y30uyZJlrWmZnuym6q1iIJnop
|
|
yW2Te8bdWnnypQqzZOadokiIpSZntWN5lrxki19vNRxrUeBwnNNd+fJEY6/OejXLn3Xe/wDp9wyn
|
|
E8uo4lqqxblv7lJ26T6vpD5X7G8QycKzeBMbzMRM1/FH/wA/h9QwZ6ajDXLitvWzRgsAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeL45w+dDrZvWv1OWd4+E+j2jX
|
|
12jx67TWw5Y6T2nzifU+rZ1y9eHwzDYxxEy18+DJodXfT5o96vafWPVbjyxDn1OOzHudbM0rt2UW
|
|
iI69mVtRXZq5tREb9VUoy2iIlRbJ0UX1VZ6btTLrI7V6yk62M2oisT1c7JmtkttVMUyZp6x0beDS
|
|
RWOvdKijDimvWd3G9pNRMfRcNfvZOb9Hpb0itJeP47k/3hgjaZnbaP1XxWW3T0movbNS0W645nbf
|
|
0nrMPpXs3xamoxdJiLbe/X1n8Uf3fKsOTw4jbaXo+EarJhtGTHMxeJ6xH7Sti9Zaj6x3HM4NxXFx
|
|
DS1mtoi8dJrv2l011QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AGjxLhODieOIye7kr9m8d4eM4to9RwjPXFa0ZIvG9bR0fQXmPbDFvTTZPOJmEWS/V8bs9R43NxLL
|
|
G8eFbePg1bajU5/s0l1ceKLx1hbjwRE9mOpx0y2uRTSZsm3PMw2aaKtIjo6kYo9EXpET0hVLXxYK
|
|
xC6MZvyx1lFs0RHfaPiCnU12pLyHGNDbUajBekWma2npWN3p8+opa20e9LSyZLxExTlpM+vdOdcZ
|
|
a9tPS8MyUvFrzWlI6727u1pYxYrbVmb7x+TQx6au3Nqcl7/0rcmW9axGnwZJj1novmxnZXV0fFp4
|
|
ZxLBPgTGK8xzXr5fOH0bFlpmxVyY7Rato3iYfNuG2x56Wrqa8s2jz+7Lu8O12bS6jkwzN6THNNI6
|
|
tvrN68Y4rxlx1vHa0bskAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAA4XtTTm0OKfTJ/aXdcL2pyRGjwU362yb7fkJz9eTxxyZJjyltRXzUZK7TFtl9Lbwy06YzrHwa+
|
|
fJFd/wCVt8m0bQ0eS2qzcm+1K/an+zNZFL5M1pjFXeI72ky48eGnPkvNp27+TPU6nHpMfLXaIjpE
|
|
erk5dRMxOfN1mPeisfshW1ne1a1577Y6x5R3U0zze31FOWI6ze0byU098kRlzbxM9qrMlPDpyRMR
|
|
Md5Vt/Ihp5898mWZm1pjftE91uCt7fCI7dWeHDEW3t723l6rslqxWZnasR+SYhFbzhnfxJ2jyeq9
|
|
lcGXWZcmW0zWKxHLaI7794eJx5fpfEKabT8t8l5isddo3l9S4VjrwrRUwzSJt3tav3pdOL6Y6dXD
|
|
j8HFWm+/KsU4NRXPvtWazHquWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAa+fXYNP9u8b+kdZBsDkZOO135cWOZn4y5Wu4xqctbe9y19Kp4njt6vi+PDm8DFMWybbzPlV
|
|
5PiGtz67UxbNbeKTtWIjaIXYpnwuaftT5tXJT3vmi1pMsrU5qIrG1V1a+5DCa7b9GFbRr5J6Wnbt
|
|
Cu+Wmk0m8956z8ZWZNorbfzcbX5rZslazPux3hUt41NTntktObJ13+zX1bek01r4/HzVm0bxPXy/
|
|
+bNfDgjVa2uOY92kdfg6ufJOKvLXtttVVSqbcta2vM7zXtHpLQy5ZtMd+vWd+7Zy3mdJHXra3f0c
|
|
vUarw7zFY5rT2hH1Lavnrgx81p3U49Pk4nE5L35MO/StfNRXR5tXnrS8W67WvfyiPSPi7uLHFK1p
|
|
jrtSsbR5Lc4RzsXBaYreP4l45esRD2HD9fnw6evvWvO3Tfr0aGk0U55ra0TFInv6uzgrXFXlx0i0
|
|
77RPlC83Yj+JW7oddqr6vHzTTw9/f6dod+L1t9m0T8pcbFSmPHER3892W0zPuz+jSbVvidkcqmfP
|
|
Sel7bekrI4n4dZnPWIrHeYnZee2Wpy8dEaml4npNZblw5qzb8M9JbYgAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAABEzFYmZnaI7yCXL1XGa0jJXT0571nbee27DiXEprp8nhbxG20W8
|
|
5cbD0ikfnKO+urTPvjoZdXqctdsmTaPSvRpWmsdZ6yztfaGplvv3lWW1tyRlz1x0vkn7Vo5atTNe
|
|
Y0+1o79V2KsZsvX7Ne5mwxnyTNvsx2iGneM/rCdRSuOsTasTt5kRFtpjqmOH4t4nk7estiMNa97R
|
|
Hwhna0iuKTEdmGWa4672nZtRele1N59Zlq6vLOSsYorEc07qcW65euzRvtXvPZy52naZ7ujr6fXV
|
|
rWdukREK8+njHgmZmPc67bq6ivVWhxxgxZLztNrT1mZ/SP4VZs0zaOvfp84WUtNsXLvtv3699+rU
|
|
z7+Jtt5qURqMnPpctaR1rMSw4ZoK57eNk6xHaJRh97Ltt7lo5Z+L1HAPZvVauZ2nFTSzMTzeJEz8
|
|
to6xPfvsZntPZ9rXxabmxzefdrv0j1dXh/BcmstW1qxTHHasR3+b0GPhGl+kWmd64dNEVjf73T7X
|
|
y8vy+Ddx6O3iRakxTH5RXrMw1/lX+3Itw2MFIraN48qRHdZi0cUjmmPen9noox1iO0fNzdXEYrTt
|
|
stcmd9aX0bJ+HePmiKTitO8TMLZ1cVjrMfqpz6ys4pjfrPRWZ9rXXptUit6zO+23VyaRHEc05L1/
|
|
w9J9ys/en1ljqdVbwYw452tlnl3jyjzbmmiMeKtYjpEbLeTXPUU8ee/+qjJpsV5rbkrFqzE1tEbT
|
|
DpYNbW21Mnu29fKWna0KbqTdjXXjld0cvQ63ltGHNPSfs2n+HUbS9c2s2UASqAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAOVxPWe99HpP8ArmP4b+r1EabT3yT3iOkesvMVtN7za07zad5l
|
|
XV5GmM9vVfEstvDx0jtaVVMlq+UJ18b5cMRvPeSuK87bUt+i2Z3PtG7zXpjkzXt6R+TXyTMzvM7t
|
|
ydHqZ+zhv1+Cv/ZuqvPTHMfOYaTMil1a1K2vHSLTELq2v+KWzThGo84rH5rq8JzedqR+ZeI7WnOS
|
|
34pYTafWXR/2Pln/AMyrKOCWnvmiPyR6O1y9585lhWJvl557Q6eo4T4dYiMvW3b3UanhldHpJtGX
|
|
e09unmjsT7eb1l4trI2t0hsZfrdNO0bzy+nzU20/+NmkzO9esz+TZxWis9dttvPv+Tn21jjaW8zn
|
|
26bTG3mp1M/Wzv3t0jyWXiKZJmsTERaZhXXDbNl8WaztWenxZLstPp5pau8frDtVrNMM5cfTfpMf
|
|
3aunxxbes9d/R09Dp8ebJi09ptFr3jtt2WyrW9wy1Jx132mK+Xq9PotT0iIU19ntLtExa3T47T+q
|
|
6nBaYvsZstZ+cT/LeMnUi0TXffo1s2m8Ws2/OIMWk5Jib5L328rS2t94Sh5TV4ppklpW6PT6rh+P
|
|
NbebTHyas8E081mZy5P2W6OFhjxNTE/hr/LoRO0Kvo9dPqctKzMxEx1la5t3tdnjnMs4noievcrO
|
|
yZjeFF1OSnNV0OG62cn1GWffj7Mz5w05joovzY7xes7TE7w0xrjPeex6Ua+j1UarBFu1o6Wj0lsN
|
|
3JfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrU5o0+nvlt92P3BxuM6nxNRGCs+7Tv8
|
|
2hToxm1r3m9utrTvMsonqyt7XTmcja0u3O6FMfi5t/u0/lzdJM81p9O3zdvHTwsUR5+bfPqOfX1h
|
|
dqV+3O7bs1+T31oqmI3TEM4rvCdkDGIIhlFd2daboS0NXG2bD6bufxXU1vlmu/u4us/N0+L1tTSx
|
|
kr9qk7w89j1FNZMV3jxLzvaJ8mer+LSOZqK2xZotbvljfr/89U453rXt9lse081xZtNjx7TGKu0t
|
|
DHlrevSevaN5Y6+tJ8c7VRNMt63n3ub+6/R54rERMztDYy4a5omclYmfxKcenrjtHLvtPrCnVmdb
|
|
eFe3JXmjy6eS/DrMuLVYsta9Mdt++6qLxO+0dEc8UmInr18iUfReHcXrqccb9Z27Q61Lb13eJ9nc
|
|
1Z35rTvE9avY4bTkpG8xEfB05vYxqybc07R281naGMREdoT5JQqy9mply7Q3bV3iXG1eXw7TWSka
|
|
c258t7+tpT5/BjT7MfHqndz12Z+M4lMMKyziUJJiN1WSu9fku23RaOgKNJqbaTU1t9yelo+D0cTE
|
|
xEx1iXmM1Nt3W4PqvFweDaffx9vjDbGvxz+TP66QDRiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAOJxzU73rp6z296zsZMkYsdr2naKxvLyObNOfNfJbvad1dXkaeOdpvsc2yuZVzfbfqybutwu
|
|
s5s8R92J3dvJb3tnO4HSMegtmt3nfZvYp8SZl0z45NfSK7onH1bNcfRFqnUKJr0Y7dVtq7prjEsK
|
|
0XVpEM6028mW20IHK41aPo3J6zs4ODhdcvPnvExFevNXpMOrxi/PlrTee7PLX6Pwa09uaNlKtHg9
|
|
dM3z5d7ReOu02nu0JzZMfblrv5R5uvrcdImZ26T1mYhxs1Os7RH93PZ7axuafNfLitvbaYU3yZYt
|
|
PXs9NwHhui1HBa5LVicsb81onrEuVqNNSuS8Y67dZ6xPZa59Il9uX41vEitImZme3q2Kxbxora0T
|
|
Md/ROSa4Ztkj7c9OafL5LuGYubmyX3iu/TfbdSfVnpvZLT/XZK233+Mbbva1xRXyiPk8pwbH4N6T
|
|
adq5a71n0tD1WDL4tPe6Xr0tDpz8YVnJHWEXYxbqlBedoef4tW0XraO09HdyztSZcbUz43C+ee9b
|
|
SVMaeOfqq7+jGckQ1Yz7+7v2RN/WXPXZPjci2+2yyJaVMuy+uSJlA2d+pNoVRbeDcSxyTE+TDDlt
|
|
pdRXLTynrHrDOyiyZeVFnY9TjvXJjres71tG8MnJ4Nqt4tp7T1jrV1nRL1x2cvABKAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAHJ49qfD09cNZ97JPX5PPw2uI6j6Vrsl/ux7tfk1mWr7dOM8iLdm
|
|
vfebREefRsWldw7SxqNbWbR7lPesrn3Vteo7dYjDpMGCvfbeXQ0uLlxRLRxROfUc34p6fCHYrXlr
|
|
EejqrjY8uzCYW7MZjdVKqK9VlaxCYrsnYExBMRMJRPZA8/xPHtmpP9W2xx76vhWOInvt/C7ike7N
|
|
vwzE9kcapGfhlevTaFbFo8RqJ5vy8/RoW09ek0msxHfp3dzNoLzp4zUmZpMbT8HJyYJi20X2n0lh
|
|
ZY1li/RaidBF4w2mK3jrHaFGp1lN+tptPp5IjBkid5mIp16TKu0abBPv33vPlM7z+iPdFNcWXU5I
|
|
tkrNce/b1W5db1nTaf3ax9q0fxDW1ebNk2phty1mOu09VOm8W19orEz23j1TwfSeERFuEYMddptW
|
|
d43dvBn21eKJ75KbW+cf/JcTgMxXTb3nbljz+TpcPmc2uyZO1KRtVtGVdi0bx07qJnllsRO6rNTe
|
|
N4XVamsy8mnvPwc3R2jPwe8TPbdlxXNOPSZfhWWpwO85OFzv57qrODkzeHntSe8Sn6Rv0a3EZ218
|
|
8nXekfr1a0ZLVnqx19dWb6demXybOO7lYMvNMdW9S/VVLo0us7tPHdtUtEwJiZU3jq2Jhham8CVG
|
|
PNODNTJXvWd3qcWSubFXJWd4tG8PK3pPd1OB6veLaa89Y61/u2xfxh5c/rsgNHOAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAANLimq+i6O0xPv392rdeZ4rq/pOqnlnelOkIt5F8Z7Wj27I2I6sb25YY
|
|
V1ImY3dbQ08LRc23vZp2j5OJG+XJWle9p2h6HHtbJXFT7OOIpX+7TxT31j5rycdTh+Dpz+XaG/sw
|
|
w18PHWseULN2trBE9UcrJKBhFU7JAQi0dEomegNDUYovM7x3jb5tO1ZvpbaTLtzRExWfWPJ08kbT
|
|
Ex5NXWYYyV5omYtHWJieyeDzuizfRs19Jn6TM7Ru1uMcJxZqTkw+5f4ebqa7SV1MR4tdrx2vEfy1
|
|
axqsNOTLjnLXytVXi3Xj8+nmsxTLM16d5npPyUzpekTtSK+U7vS6vQ/SYmK1vWPS1HOn2dvvvvE/
|
|
tDO5XlcO+LbfHSd/W3o6/BdDOXPTnj3Kz38rS6Wm4FNrRyRzTH3p6RH/AKvR8L4dXSzE3jmtHn5I
|
|
mbfqLV+m4dbLSsZInHjr3iI6zLpYaxS01rHuxHRHiT9mv6s67Vj1aqL6326MrWiYa+/Q54BxPaGe
|
|
XRZpj8MquB4+Xg8zPnB7SX30to379GxpK1xcHiKz5IS8xr8PLPixH2bftLTy05o6dHYyVjLhy0t1
|
|
izjZa3pMVv3iO/qz1G2L+NbSajbNyW7xLsY8kTDz+fJXFqKZN4iZnafi6WHL0iYlStI7OO+7axW2
|
|
crFl7dW9jvE9ULN+J3ZbdFGOy+AYWpEqN7afNXLj+1Wd23KrJVMvCzseh0+auow1yU7WhY4fCdV4
|
|
OadPefcvPuz6S7jol649Tl4AJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV581NPhtkvO0R+4NPi2
|
|
r8DB4dJ9+/7Q83Po2NTqLanNbLfvPaPSFDHV66sZ5ET0hRknyW2lTtMyouz0c8usx2n7s7vScKwx
|
|
zc1vu/y85p+maJh6Th+SOWeveXR4/wDLm8v+nX5mUWa9bbrInolmu5jdTNkxYFk2Isr3TuCzeGMz
|
|
+THdEyDDJO9Ja823rt2XWnya946pGvktDXta0ztWu/ybvLE9dkcoOf4GbJPWK1j49VmLh9JtE33v
|
|
Mevb9G7WsW8l1ccREISophiJ2jpDYpijbaOjOuOJ8ujOdqxsgVcsUjaETYvbaFFrgu5lVsm0yUtu
|
|
ryg43H5m+GIj1XcJzePoL4pnrWGtxmfchr8JvfHS1622if3QljzTTLes+qrNjrkiYtCzPMxnm095
|
|
YZJ6boS5teB49Tqscza97VtvWvlv8V/FOF34RrIxTM2xXjelp/eHoeA6XnzReY3ivX/0dfivDcfE
|
|
9HbDbaLx1pb0lOs+jO7K8Lis3cN+0NKcd9PmthzV5clJ2mF9J9GHHVL108dm1SznYr/Ft0tuhLb8
|
|
mNohFbMhLWy0mJ3rPXvDvcO1karBG8/WV6Wj+7kWrvDDBlvpdRGSnbzj1hpjX4z8mOx6UYYstc2O
|
|
uSk71tG7Ns5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeXneJ62dVl5KT9VTt8Z9W9xbWclPo+O
|
|
fft9qfSHEU1pv48ftYST23ZTDC/p0YtlVuvVjMbM5+LCZjYGWGdrTPxiHY4ffaf3cjTxz1v6xMS6
|
|
Olty2iXVj/Dk8n+ndrkhnGRo1v8AFdW3RCrZ5uiYsqrboncSu508yjmZRYQt50TfowYTbYGVrKrT
|
|
uTZjvukQnYhMIGVY2ZxPVWyrHVCWzXpVXkt3TE7Va+W4K7X3jv1auTNy3jdba0RZpamfroQN7Hk3
|
|
6wr1GTaN2OOJiu6Mu98NvgDi8Wy74d/yZ8PiPAiO2zU4nb6qIn1bugjfFE/ASp1ke9u15mbbRDZ1
|
|
Mb823kx0Ontn1OOkedoJCvT8I03gaKsz9q/WW+isRWsVjtHRKyrhe0XCfpWL6Vgr9fjjrEfeh5fF
|
|
feH0V5Dj3DPoOo+k4a/U5J6xH3ZZ7z3228evytOk7NvFbo0cdols47bSybt7HbddHVqUs2aW3Qnq
|
|
xVeu8LILR3SlZw3V/R8nhXn6u0/pLuPMXjeHT4Zruf6jLPvR9mZ8/g1xrvpz+TH7HUAaMAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAABRq9VXSYJyW79qx6yvmdo3l5viGs+maqYrO+OnSvx+KLeLZz2te1rZL2v
|
|
ed7WneZYWnZl5K72YV1xEyxmeqJljzIEWlVkszvbZp5soN3h2SJz3pP3odCnuWmPRxuERfJrZmtZ
|
|
mtY96fR28kbX3dXj/wAuTyf6bmK+9YX1s0cNtm3Sd4LFY2K23W1s16StiUJW7bp22RW3RluBuruz
|
|
mWEgrmCGWyNkoExKE1QlPmsqRDKeyBjaejWy2W3ttDUyz1QKslvehVqKTNosyyTvELabXptIJpaP
|
|
B39Ia2mz+JGpr51jdZefDx2hzuHZObNq58poJaGtjxJ2+LoaKP8ADRPo5+T3skx5OhpOmC0fBNQ0
|
|
5yTbn+bt8A0u9raiY6RHLVwY62mI6zMvaaHBGn0mPHt1iN5+aYVsACBXqMFNTgviyxvW0bSsAeE1
|
|
mkvw7V2w5Ote9besJx2er4rw2nEdNNekZa9aW9JeQjnxZLYskTW9Z2mJY7zz26fHrrdpbZsY7NGt
|
|
mxjvso1b9NmUwpx33XRO4K7VUTE1nmrvEx1bVo2VWiJE/XY4frY1WPlt0y17x6/FuPM0m+HJGTHO
|
|
1qu9pNVXVYt46Xj7VfRtnXXL5MfzexsALsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHM4jxOMFJphmJv529Dq
|
|
ZLfjDjPEIx450+K3v2+1MeUOHSOWFc3nJkmZnf4yujpVlqunOeFpV2nctLCZUXRM7MJtsWlRkv3Q
|
|
ky5NmpWt9RnrixVm17TtEQnJabXisRMzPSIew9n+CRoccajURvqLx5/chfOest642OGcIpoOG2w7
|
|
ROW9d72+LQvXevyejcPUU5M+SvpLeOataraw2a0dLbLqTtK1G3Es4lVWWUSoldFtmcXUbpidgXzK
|
|
GEW3TuCUSncnsDFMMLSms9EC6J6FpVzbZE5ALy0809ZbFr9GtfrEoFMzuuwz0Ueey3HbaBLDXe7i
|
|
tMOfwWnP9I+NZbuttvhs1uBRtXPb4SDm3iIvf57N7Dbl0VrS5+XrltEd+Z1Jx7cNms9N4TURRw3T
|
|
+PrcO3WszEvZOD7P6aYiMlvu16S7y1QAIAABxOPcLnUY/pWCv1tI96I+9DtgmXl68Biy7/NtUu3+
|
|
O8HnFa2s0tfd75KR5fFyMWTdhrPHVnX9R0cd21S3Rzsdm1iuqs256wrmGcT0RYSx5d047X02SMmO
|
|
esd49YRE9WcdSXhZ2O1p89NRji9J+cei1xMc3wXi+KZj1j1dTTaqmor06WjvWW+ddcu8XK8BZmAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAMMmWmKu952UZ9XFZmuP3revlDTtzWnmvO8q3XGmfHb9ZanV3yxtWeWn7y4es
|
|
vPNtDqZJ6Ts5mppvdl/XXRMyfGvSNlu/RVvtOzLfoipLT1VTKbSpvfogRkvtDVyZOhkyvQcA4Dzz
|
|
XV6yvTvTHMfvK+c9U3rkW+zvA/D21urr789cdZ8vi9KDb45rejl8Rry6iJ/FV1HP4vXbBTJEfYt1
|
|
+UpiHM295bXsqrO9l8QkZ0lZEqqLeyBZHZLGvZkhIndADKJ3TMoqWQMZ6pjsxll2jsCLSrmU2lFY
|
|
36gieyu0LJk3jbsga0wdqzK20QpyztQGprL/AFMrOE05NLkt6qdVWZxNrSe5o9vWBLiUjnzXn0vL
|
|
q555dHt8HOwV928/1z/LpzXxbYccRvzTB+jucOwxh0dI22mY3ltIrHLWIjyjZKyoAAAAACJiJjaY
|
|
3iXleM8InR5J1GniZw2n3oj7s/8Ao9Wi9a3rNbRE1mNpifNFnVs65XhcWTdt47bnFuF24dm8TFEz
|
|
p7T0/pn0a+HJux1OOrOux08d1ndqY7tillVkzExLOk7yd4YxGwluViJhE45raL0na0dtlWO0+bZr
|
|
1TKi+2zptZGTamT3b/tLacvJjiY3XaTWdYxZZ6/dtPm1zrv1z78fPcbwC7EAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhkyV
|
|
xUm152iAZWtFazNp2iGhm1Vss8uP3aevnKrNntqLdelI7VRHRnrX/HRjx/tZREVjZXeybW6KbWZt
|
|
pCZ6S08tN7Nmbb7zCrJtyoS5145bSx5mWafelr3tsKmS/o08uXyhlly7RPV2+AcBnPNdZrK+53pS
|
|
fP4ytnPVda4y4BwHxOXV6uvu96Unz+MvVxG0bQRG0bR2G0nHLb2gCUDX12LxtFmpHeazt82wT1gH
|
|
mMN4tWs+rcr2aEV8DU5sM/cvO3yb+O0csLUTSdrLphRE8tlkZI7Atr2ZMazDJVKTYSCawi7Ksq7z
|
|
1QERvLK3ZGPrKbyCrbdnMcsbeaa18/RhvvM7oGEwTG0JmYYTIML22a2e28xELM19oURPNO4lOem+
|
|
n3ZY5+prVnMc2GYU4/L4A0a15cNf6rz/AC6fC6+NxCPOuOu/5tHJTbHj+F5/l1+BYumXJMd9o3/d
|
|
MRXYASgAAAAAAABhlxUz4rY8lYtS0bTEvH8R4ffhmo6bzhtPu29Pg9mq1Gnx6rDbFmrzVsizq2df
|
|
zXkMWTeIbNL7tbXaHLwzUctvexWn3bmPL8WFnHVL326VZ91MfFVjvvVlz79kLrcf2m7j7bNHH3bl
|
|
J2SirLQoy4t1++7G0dBC/RanxI8PJPv18/WG241+alovSdrV6w6mDNGfFF4/OPSW2b1zeTPL1aAs
|
|
zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAVZ9RXBTe3WZ7R6iZOpzZq4ac1p+UermZMl89+a/byj0Ra9815ted59PQ32hlrXXRjH
|
|
DpCLX6ML5NlNsm/ZRqstfdXzbsZt06sLZNvNB1Za8RDWyZdo7q8udq5Mu/mIMt4md2lmy7JzZuWJ
|
|
dHgfBL8RvGo1MTXTxPSPx/8AstJ1XWpIs4BwSdbeNVqq/URPu0n73/s9hEREbRG0QUpWlYrWIisR
|
|
tER5JbSccur2gCUAAAAPM8Sry8Uyz67fwuxbzVPGsE49XGbvF42V4M0TEL33ERnktsxpk3sumK2j
|
|
admFdPFZ33VS2Mdui2J3UU6LYlFSsN2O5NkCyJ6K7T1TEsbAsxdpReerKkTFGMxvYEz0rsqtbbpC
|
|
b2VT1QEzuwtbaGUxspuJU3neWdKoiu8rq12gCI92YatLcublnzbEz1aOptyZqTuDHLfxN6R0+t5X
|
|
qdJhjBp6UiPLeXl9NSMnEKxHa1+bb8nrlvxUAAAAAAAAAAABTqtNj1eC2LLXeto/R43VabJw/VTh
|
|
ydY+7b1h7ho8V4dXiGlmvbJXrS3xRZ1fGv5rzeHN02bEW3cys3xZJx5ImtqztMS3MeTeGFjqlb2O
|
|
8btql3NpbZtYsnSBLeiWfdTjtutid+ghherHS5p0+f3vsX6T8Fkw181d4lMvEWdnHaGnw/UeNh5L
|
|
T7+PpPxbjdyWcvAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAo1Oprgr63ntAmTqdRqK4K9etp7Q5d7Wy2m953lNrWyWm953mVd77R0
|
|
Za1104xxlN9lV8qnJl2a9s3xUXX2ybsJyRDWtl3YWydEC+2VRkzeW6q+T4tbJm+KRdfK1cmWZnlr
|
|
vNp7RC/R6HU8SycmCk7ed57Q9ZwvgOn4fEXtHi5/O9o7fJaZ6z1uRyOEezVstq6jiEbV71xevzer
|
|
rWtKxWsRFY6REeSRrJxz22gCUAAAAAANbX6aNVpL0npMRvWfSXlKamsRMVvXm+EvZXjmpaPWHzfL
|
|
oNRjzXicfWJ8phfPxFejx72x7xMzK+sXiNoiXlq+Pi6fWV/VfTNqfLJl/WTg9Pji8R70LqvMV1Gq
|
|
j/zcv6yz+lanzzZP1lWpelTET6S81Gp1P/Gyf90s412rjtnyfqql6asREdWM9+jz9eJ6yP8Az7uh
|
|
odZqMt458tpB1JvEViI3/RhzRt13/R1MNaziiZiJn5K9ZNceKZiIiQcu/WekT+iYrWI3lzdTrs+8
|
|
8uW0fJzcur1Np/zsn6g79phVaIeetqNR/wAXJ/3SwnUaj/i5P+6UD0ldonum161h5mNRqP8Ai5P1
|
|
lNtRqJjacuT9Qd22WN5aGeZyZd/KHJy59RHbLf8AVq31Gp/4uT9ZEvS8Lr/vSs2npzRtL1z53wK+
|
|
oza/HW2XJNd99pmX0Rb8VAAAAAAAAAAAAAAcHj/C5yV+l4I9+v24jzj1cLFk8nu5jeNpeW41wmdL
|
|
knU6ev1Vp96sfdn/ANFdTrXG+eq1q5F2LLtbZoY8m8d11bbSydErsYsm+zZrO/zcnBm226uhiyRK
|
|
EtrvCrJDOJTeu8A1MWX6Lqq5N/dnpb5O5ExMbx2cPNTeJb/DM/iYPDtPvY+nzhri/jDy5/W6AuwA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N
|
|
mtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm
|
|
9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N
|
|
IpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W
|
|
MYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2
|
|
+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql
|
|
o+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37
|
|
O99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE
|
|
TE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1
|
|
L7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4
|
|
izsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt
|
|
1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb
|
|
V5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum
|
|
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
|
|
skA2AAAAAAAAAAQkBAEghEskAxYzDPZGwK5hjMLJhjMAqmGEwumrCagomFcw2JqqtUFEsLLrV82F
|
|
o7gqljKyYYTGwMZRKUSCAQAboJnaN5Bjkneu0d5W4ccViIiOzHFWbTzNumP1Zarr8eeRMbxDW1Mx
|
|
NO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h
|
|
2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te
|
|
pSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7
|
|
cvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7
|
|
mZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA
|
|
AAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA
|
|
hGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J
|
|
qx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI
|
|
XRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy
|
|
RHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX
|
|
qNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX
|
|
kaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P
|
|
ya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC
|
|
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
|
|
2Q==`;var M4="1.2.5";var oc,eh,th,Vi,K0,nh,Z0,Y0,J0,B2=class{constructor(t={}){oc.set(this,void 0);eh.set(this,void 0);th.set(this,void 0);Vi.set(this,void 0);this.analyze=(...t)=>{if(!ar(this,eh))return;let n=this.tf.engine().state.numTensors,r=ar(this,oc);hs(this,oc,n);let a=n-r;a!==0&&Ee(...t,a)};K0.set(this,t=>{if(!ar(this,th))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof He))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});nh.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=et();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="wasm")&&(this.config.backend="tensorflow"),this.config.debug&&Ee("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ee("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ee(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ee("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&D6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ee("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ee("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ee(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(et()-n)}});Z0.set(this,async()=>{let t=(a,s="application/octet-stream")=>fetch(`data:${s};base64,${a}`).then(i=>i.blob()),n,r;switch(this.config.warmup){case"face":n=await t(q0);break;case"full":n=await t(X0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});Y0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+q0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+X0;break;default:n=null}let a=new Image;a.onload=async()=>{let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(r,r):document.createElement("canvas");s.width=a.naturalWidth,s.height=a.naturalHeight;let i=s.getContext("2d");i==null||i.drawImage(a,0,0);let o=await this.detect(s,this.config);t(o)},n?a.src=n:t(null)}));J0.set(this,async()=>{let t=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t(q0):t(X0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Eh,this.draw=L2,this.version=M4,this.config=no(At,t),this.state="idle",hs(this,oc,0),hs(this,eh,!1),hs(this,th,!1),hs(this,Vi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>P2(n,this.config),this.classes={facemesh:i2,age:Og,gender:Pg,emotion:Ug,faceres:Kg,body:this.config.body.modelPath.includes("posenet")?g2:E2,hand:I2,nanodet:$2},this.sysinfo=t5()}profileData(){return this.config.profile?Dg:{}}similarity(t,n){return this.config.face.description.enabled?Yg(t,n):this.config.face.embedding.enabled?O6(t,n):0}enhance(t){return Jg(t)}match(t,n,r=0){return z6(t,n,r)}async load(t={}){this.state="load";let n=et();t&&(this.config=no(this.config,t)),ar(this,Vi)&&(this.config.debug&&Ee(`version: ${this.version}`),this.config.debug&&Ee(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ee("platform:",this.sysinfo.platform),this.config.debug&&Ee("agent:",this.sysinfo.agent),await ar(this,nh).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ee("configuration:",this.config),this.config.debug&&Ee("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?l2(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?zg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Vg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Gg(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?qg(this.config):null),this.models.handpose||(this.config.hand.enabled?T2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?w2(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?C2(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?M2(this.config):null),this.models.nanodet||(this.config.object.enabled?O2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Zg(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await l2(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await zg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Vg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Gg(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await qg(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await T2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await w2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await C2(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await M2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await O2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Zg(this.config))),ar(this,Vi)&&(this.config.debug&&Ee("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),hs(this,Vi,!1));let r=Math.trunc(et()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var m,A,y,g;this.state="config";let a;this.config=no(this.config,n),this.state="check";let s=ar(this,K0).call(this,t);s&&(Ee(s,t),r({error:s}));let i=et();await ar(this,nh).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=et();let o=P2(t,this.config);if(!o||!o.tensor){Ee("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(et()-a),this.analyze("Get Image:");let l,u,c,h,d;this.config.async?(c=this.config.face.enabled?Qg(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=et(),c=this.config.face.enabled?await Qg(this,o.tensor):[],d=Math.trunc(et()-a),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?l=this.config.body.enabled?R2(o.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(l=this.config.body.enabled?F2(o.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",a=et(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((A=this.models.posenet)==null?void 0:A.estimatePoses(o.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?l=this.config.body.enabled?await R2(o.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(l=this.config.body.enabled?await F2(o.tensor,this.config):[]),d=Math.trunc(et()-a),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=et(),u=this.config.hand.enabled?await((g=this.models.handpose)==null?void 0:g.estimateHands(o.tensor,this.config)):[],d=Math.trunc(et()-a),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?z2(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=et(),h=this.config.object.enabled?await z2(o.tensor,this.config):[],d=Math.trunc(et()-a),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([c,l,u,h]=await Promise.all([c,l,u,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let p=[];this.config.gesture.enabled&&(a=et(),p=[...v4(c),..._4(l),...I4(u),...k4(c)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(et()-a)),this.perf.total=Math.trunc(et()-i),this.state="idle";let f={face:c,body:l,hand:u,gesture:p,object:h,performance:this.perf,canvas:o.canvas};r(f)})}async warmup(t={}){let n=et();t&&(this.config=no(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await ar(this,Z0).call(this):typeof Image!="undefined"?a=await ar(this,Y0).call(this):a=await ar(this,J0).call(this),this.config.videoOptimized=r;let s=et();return this.config.debug&&Ee("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};oc=new WeakMap,eh=new WeakMap,th=new WeakMap,Vi=new WeakMap,K0=new WeakMap,nh=new WeakMap,Z0=new WeakMap,Y0=new WeakMap,J0=new WeakMap;var rh=0,F4=!1,_t={background:"darkslategray",hover:"lightgray",itemBackground:"black",itemColor:"white",buttonBackground:"lightblue",buttonHover:"lightgreen",checkboxOn:"lightgreen",checkboxOff:"lightcoral",rangeBackground:"lightblue",rangeLabel:"white",chartColor:"lightblue"};function ise(){if(F4)return;let e=`
|
|
:root { --rounded: 0.1rem; }
|
|
.menu { position: absolute; top: 0rem; right: 0; width: max-content; padding: 0 0.2rem 0 0.2rem; line-height: 1.8rem; z-index: 10;
|
|
box-shadow: 0 0 8px dimgrey; background: ${_t.background}; border-radius: var(--rounded); border-color: black; border-style: solid; border-width: thin; }
|
|
|
|
.menu:hover { box-shadow: 0 0 8px ${_t.hover}; }
|
|
.menu-container { display: block; max-height: 100vh; }
|
|
.menu-container-fadeout { max-height: 0; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-container-fadein { max-height: 100vh; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-item { display: flex; white-space: nowrap; padding: 0.2rem; cursor: default; width: 100%; }
|
|
.menu-title { cursor: pointer; }
|
|
.menu-hr { margin: 0.2rem; border: 1px solid rgba(0, 0, 0, 0.5) }
|
|
.menu-label { padding: 0; font-weight: 800; }
|
|
|
|
.menu-list { margin-right: 0.8rem; }
|
|
select:focus { outline: none; }
|
|
.menu-list-item { background: ${_t.itemBackground}; color: ${_t.itemColor}; border: none; padding: 0.2rem; font-family: inherit;
|
|
font-variant: inherit; border-radius: var(--rounded); font-weight: 800; }
|
|
|
|
.menu-chart-title { padding: 0; font-size: 0.8rem; font-weight: 800; align-items: center}
|
|
.menu-chart-canvas { background: transparent; margin: 0.2rem 0 0.2rem 0.6rem; }
|
|
|
|
.menu-button { border: 0; background: ${_t.buttonBackground}; width: -webkit-fill-available; padding: 8px; margin: 8px; cursor: pointer; box-shadow: 4px 4px 4px 0 dimgrey;
|
|
border-radius: var(--rounded); justify-content: center; font-family: inherit; font-variant: inherit; font-size: 1rem; font-weight: 800; }
|
|
.menu-button:hover { background: ${_t.buttonHover}; box-shadow: 4px 4px 4px 0 black; }
|
|
.menu-button:focus { outline: none; }
|
|
|
|
.menu-checkbox { width: 2.8rem; height: 1rem; background: ${_t.itemBackground}; margin: 0.5rem 0.5rem 0 0; position: relative; border-radius: var(--rounded); }
|
|
.menu-checkbox:after { content: 'OFF'; color: ${_t.checkboxOff}; position: absolute; right: 0.2rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox:before { content: 'ON'; color: ${_t.checkboxOn}; position: absolute; left: 0.3rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox-label { width: 1.3rem; height: 0.8rem; cursor: pointer; position: absolute; top: 0.1rem; left: 0.1rem; z-index: 1; background: ${_t.checkboxOff};
|
|
border-radius: var(--rounded); transition: left 0.6s ease; }
|
|
|
|
input[type=checkbox] { visibility: hidden; }
|
|
input[type=checkbox]:checked + label { left: 1.4rem; background: ${_t.checkboxOn}; }
|
|
|
|
.menu-range { margin: 0.2rem 0.5rem 0 0; width: 3.5rem; background: transparent; color: ${_t.rangeBackground}; }
|
|
.menu-range:before { color: ${_t.rangeLabel}; margin: 0 0.4rem 0 0; font-weight: 800; font-size: 0.6rem; position: relative; top: 0.3rem; content: attr(value); }
|
|
|
|
input[type=range] { -webkit-appearance: none; }
|
|
input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 1rem; cursor: pointer; background: ${_t.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-moz-range-track { width: 100%; height: 1rem; cursor: pointer; background: ${_t.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-webkit-slider-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${_t.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
input[type=range]::-moz-range-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${_t.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
|
|
.svg-background { fill:darkslategrey; cursor:pointer; opacity: 0.6; }
|
|
.svg-foreground { fill:white; cursor:pointer; opacity: 0.8; }
|
|
`,t=document.createElement("style");t.innerHTML=e,document.getElementsByTagName("head")[0].appendChild(t),F4=!0}var $4=class{constructor(t,n,r,a){a&&(_t={..._t,...a}),ise(),this.createMenu(t,n,r),this.id=0,this.instance=rh,rh++,this._maxFPS=0,this.hidden=0}createMenu(t,n="",r={top:null,left:null,bottom:null,right:null}){this.menu=document.createElement("div"),this.menu.id=`menu-${rh}`,this.menu.className="menu",r&&(r.top&&(this.menu.style.top=r.top),r.bottom&&(this.menu.style.bottom=r.bottom),r.left&&(this.menu.style.left=r.left),r.right&&(this.menu.style.right=r.right)),this.container=document.createElement("div"),this.container.id=`menu-container-${rh}`,this.container.className="menu-container menu-container-fadein";let a=document.createElement("div");a.className="menu-title",a.id=`menu-title-${rh}`;let s=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width: 2rem; height: 2rem; vertical-align: top;">
|
|
<path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-51.37 182.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-background"/>
|
|
<path d="M348.63 214.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-foreground"/>
|
|
</svg>`;n&&(a.innerHTML=`${n}${s}`),this.menu.appendChild(a),a.addEventListener("click",()=>{this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.menu.style.borderStyle=this.container.classList.contains("menu-container-fadeout")?"none":"solid"}),this.menu.appendChild(this.container),typeof t=="object"?t.appendChild(this.menu):document.getElementById(t).appendChild(this.menu)}get newID(){return this.id++,`menu-${this.instance}-${this.id}`}get ID(){return`menu-${this.instance}-${this.id}`}get width(){return this.menu.offsetWidth}get height(){return this.menu.offsetHeight}hide(){this.container.classList.contains("menu-container-fadein")&&(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"))}visible(){return this.container.classList.contains("menu-container-fadein")}toggle(t){if(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.container.classList.contains("menu-container-fadein")&&t){let n=t.x||(t.touches&&t.touches[0]?t.touches[0].pageX:null);n&&(this.menu.style.left=`${n-this.menu.offsetWidth/2}px`),this.menu.offsetLeft<0&&(this.menu.style.left=0),this.menu.offsetLeft+this.menu.offsetWidth>window.innerWidth&&(this.menu.style.left=null,this.menu.style.right=0),this.menu.style.borderStyle="solid"}else this.menu.style.borderStyle="none"}addTitle(t){let n=document.createElement("div");return n.className="menu-title",n.id=this.newID,n.innerHTML=t,this.menu.appendChild(n),n.addEventListener("click",()=>{this.hidden=!this.hidden;let r=document.getElementsByClassName("menu");for(let a of r)a.style.display=this.hidden?"none":"block"}),n}addLabel(t){let n=document.createElement("div");return n.className="menu-item menu-label",n.id=this.newID,n.innerHTML=t,this.container.appendChild(n),n}addBool(t,n,r,a){let s=document.createElement("div");return s.className="menu-item",s.innerHTML=`<div class="menu-checkbox"><input class="menu-checkbox" type="checkbox" id="${this.newID}" ${n[r]?"checked":""}/><label class="menu-checkbox-label" for="${this.ID}"></label></div>${t}`,this.container.appendChild(s),s.addEventListener("change",i=>{n[r]=i.target.checked,a&&a(i.target.checked)}),s}async addList(t,n,r,a){let s=document.createElement("div");s.className="menu-item";let i="";for(let o of n)i+=`<option value="${o}" ${o===r?"selected":""}>${o}</option>`;return s.innerHTML=`<div class="menu-list"><select name="${this.ID}" class="menu-list-item">${i}</select><label for="${this.ID}"></label></div>${t}`,s.style.fontFamily=document.body.style.fontFamily,s.style.fontSize=document.body.style.fontSize,s.style.fontVariant=document.body.style.fontVariant,this.container.appendChild(s),s.addEventListener("change",o=>{a&&a(n[o.target.selectedIndex])}),s}addRange(t,n,r,a,s,i,o){let l=document.createElement("div");return l.className="menu-item",l.innerHTML=`<input class="menu-range" type="range" id="${this.newID}" min="${a}" max="${s}" step="${i}" value="${n[r]}">${t}`,this.container.appendChild(l),l.addEventListener("change",u=>{n[r]=parseInt(u.target.value)===parseFloat(u.target.value)?parseInt(u.target.value):parseFloat(u.target.value),u.target.setAttribute("value",u.target.value),o&&o(u.target.value)}),l.input=l.children[0],l}addHTML(t){let n=document.createElement("div");return n.className="menu-item",n.id=this.newID,t&&(n.innerHTML=t),this.container.appendChild(n),n}addButton(t,n,r){let a=document.createElement("button");return a.className="menu-item menu-button",a.style.fontFamily=document.body.style.fontFamily,a.style.fontSize=document.body.style.fontSize,a.style.fontVariant=document.body.style.fontVariant,a.type="button",a.id=this.newID,a.innerText=t,this.container.appendChild(a),a.addEventListener("click",()=>{a.innerText===t?a.innerText=n:a.innerText=t,r&&r(a.innerText!==t)}),a}addValue(t,n,r=""){let a=document.createElement("div");return a.className="menu-item",a.id=`menu-val-${t}`,a.innerText=`${t}: ${n}${r}`,this.container.appendChild(a),a}updateValue(t,n,r=""){let a=document.getElementById(`menu-val-${t}`);a?a.innerText=`${t}: ${n}${r}`:this.addValue(t,n)}addChart(t,n,r=150,a=40,s){s&&(_t.chartColor=s);let i=document.createElement("div");return i.className="menu-item menu-chart-title",i.id=this.newID,i.innerHTML=`<font color=${_t.chartColor}>${t}</font><canvas id="menu-canvas-${n}" class="menu-chart-canvas" width="${r}px" height="${a}px"></canvas>`,this.container.appendChild(i),i}async updateChart(t,n){if(!n||n.length===0)return;let r=document.getElementById(`menu-canvas-${t}`);if(!r)return;let a=r.getContext("2d");a.fillStyle=_t.background,a.fillRect(0,0,r.width,r.height);let s=r.width/n.length,i=1+Math.max(...n),o=r.height/i;for(let l=0;l<n.length;l++){let u=a.createLinearGradient(0,(i-n[l])*o,0,0);u.addColorStop(.1,_t.chartColor),u.addColorStop(.4,_t.background),a.fillStyle=u,a.fillRect(l*s,0,s-4,r.height),a.fillStyle=_t.background,a.font=`${s/1.5}px "Segoe UI"`,a.fillText(Math.round(n[l]),l*s+1,r.height-1,s-1)}}},ah=$4;var ose=`
|
|
#gl-bench { position: absolute; right: 1rem; bottom: 1rem; z-index:1000; -webkit-user-select: none; -moz-user-select: none; user-select: none; }
|
|
#gl-bench div { position: relative; display: block; margin: 4px; padding: 0 2px 0 2px; background: darkslategray; border-radius: 0.1rem; cursor: pointer; opacity: 0.9; }
|
|
#gl-bench svg { height: 60px; margin: 0 0px 0px 4px; }
|
|
#gl-bench text { font-size: 16px; font-family: 'Lato', 'Segoe UI'; dominant-baseline: middle; text-anchor: middle; }
|
|
#gl-bench .gl-mem { font-size: 12px; fill: white; }
|
|
#gl-bench .gl-fps { font-size: 13px; fill: white; }
|
|
#gl-bench line { stroke-width: 5; stroke: white; stroke-linecap: round; }
|
|
#gl-bench polyline { fill: none; stroke: white; stroke-linecap: round; stroke-linejoin: round; stroke-width: 3.5; }
|
|
#gl-bench rect { fill: black; }
|
|
#gl-bench .opacity { stroke: black; }
|
|
`,lse=`
|
|
<div class="gl-box">
|
|
<svg viewBox="0 0 60 60">
|
|
<text x="27" y="56" class="gl-fps">00 FPS</text>
|
|
<text x="30" y="8" class="gl-mem"></text>
|
|
<rect x="0" y="14" rx="4" ry="4" width="60" height="32"></rect>
|
|
<polyline class="gl-chart"></polyline>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-cpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-cpu" stroke-dasharray="0 27"/>
|
|
<path d="M5.35 43c-.464 0-.812.377-.812.812v1.16c-.783.1972-1.421.812-1.595 1.624h-1.16c-.435 0-.812.348-.812.812s.348.812.812.812h1.102v1.653H1.812c-.464 0-.812.377-.812.812 0 .464.377.812.812.812h1.131c.1943.783.812 1.392 1.595 1.595v1.131c0 .464.377.812.812.812.464 0 .812-.377.812-.812V53.15h1.653v1.073c0 .464.377.812.812.812.464 0 .812-.377.812-.812v-1.131c.783-.1943 1.392-.812 1.595-1.595h1.131c.464 0 .812-.377.812-.812 0-.464-.377-.812-.812-.812h-1.073V48.22h1.102c.435 0 .812-.348.812-.812s-.348-.812-.812-.812h-1.16c-.1885-.783-.812-1.421-1.595-1.624v-1.131c0-.464-.377-.812-.812-.812-.464 0-.812.377-.812.812v1.073H6.162v-1.073c0-.464-.377-.812-.812-.812zm.58 3.48h2.088c.754 0 1.363.609 1.363 1.363v2.088c0 .754-.609 1.363-1.363 1.363H5.93c-.754 0-1.363-.609-1.363-1.363v-2.088c0-.754.609-1.363 1.363-1.363z" style="fill: grey"></path>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-gpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-gpu" stroke-dasharray="0 27"/>
|
|
<path d="M1.94775 43.3772a.736.736 0 10-.00416 1.472c.58535.00231.56465.1288.6348.3197.07015.18975.04933.43585.04933.43585l-.00653.05405v8.671a.736.736 0 101.472 0v-1.4145c.253.09522.52785.1495.81765.1495h5.267c1.2535 0 2.254-.9752 2.254-2.185v-3.105c0-1.2075-1.00625-2.185-2.254-2.185h-5.267c-.28865 0-.5635.05405-.8165.1495.01806-.16445.04209-.598-.1357-1.0787-.22425-.6072-.9499-1.2765-2.0125-1.2765zm2.9095 3.6455c.42435 0 .7659.36225.7659.8119v2.9785c0 .44965-.34155.8119-.7659.8119s-.7659-.36225-.7659-.8119v-2.9785c0-.44965.34155-.8119.7659-.8119zm4.117 0a2.3 2.3 0 012.3 2.3 2.3 2.3 0 01-2.3 2.3 2.3 2.3 0 01-2.3-2.3 2.3 2.3 0 012.3-2.3z" style="fill: grey"></path>
|
|
</svg>
|
|
</div>
|
|
`,D4=class{constructor(t,n={}){this.css=ose,this.svg=lse,this.paramLogger=()=>{},this.chartLogger=()=>{},this.chartLen=20,this.chartHz=20,this.names=[],this.cpuAccums=[],this.gpuAccums=[],this.activeAccums=[],this.chart=new Array(this.chartLen),this.now=()=>performance&&performance.now?performance.now():Date.now(),this.updateUI=()=>{[].forEach.call(this.nodes["gl-gpu-svg"],o=>o.style.display=this.trackGPU?"inline":"none")},Object.assign(this,n),this.detected=0,this.finished=[],this.isFramebuffer=0,this.frameId=0;let r,a=0,s,i=o=>{++a<20?r=requestAnimationFrame(i):(this.detected=Math.ceil(1e3*a/(o-s)/70),cancelAnimationFrame(r)),s||(s=o)};if(requestAnimationFrame(i),t){let o=async(c,h)=>Promise.resolve(setTimeout(()=>{t.getError();let d=this.now()-c;h.forEach((p,f)=>{p&&(this.gpuAccums[f]+=d)})},0)),l=(c,h,d)=>{let p=h.now();c.apply(d,arguments),h.trackGPU&&h.finished.push(o(p,h.activeAccums.slice(0)))},u="drawElements";t[u]?t[u]=l(t[u],this,t):console.log("bench: cannot attach to webgl function")}if(!this.withoutUI){this.dom||(this.dom=document.body);let o=document.createElement("div");o.id="gl-bench",this.dom.appendChild(o),this.dom.insertAdjacentHTML("afterbegin",'<style id="gl-bench-style">'+this.css+"</style>"),this.dom=o,this.dom.addEventListener("click",()=>{this.trackGPU=!this.trackGPU,this.updateUI()}),this.paramLogger=((l,u,c)=>{let h=["gl-cpu","gl-gpu","gl-mem","gl-fps","gl-gpu-svg","gl-chart"],d={...h};return h.forEach(p=>d[p]=u.getElementsByClassName(p)),this.nodes=d,(p,f,m,A,y,g,w)=>{d["gl-cpu"][p].style.strokeDasharray=(f*.27).toFixed(0)+" 100",d["gl-gpu"][p].style.strokeDasharray=(m*.27).toFixed(0)+" 100",d["gl-mem"][p].innerHTML=c[p]?c[p]:A?"mem: "+A.toFixed(0)+"mb":"",d["gl-fps"][p].innerHTML="FPS: "+y.toFixed(1),l(c[p],f,m,A,y,g,w)}})(this.paramLogger,this.dom,this.names),this.chartLogger=((l,u)=>{let c={"gl-chart":u.getElementsByClassName("gl-chart")};return(h,d,p)=>{let f="",m=d.length;for(let A=0;A<m;A++){let y=(p+A+1)%m;d[y]!==void 0&&(f=f+" "+(60*A/(m-1)).toFixed(1)+","+(45-d[y]*.5/this.detected).toFixed(1))}c["gl-chart"][h].setAttribute("points",f),l(this.names[h],d,p)}})(this.chartLogger,this.dom)}}addUI(t){this.names.indexOf(t)===-1&&(this.names.push(t),this.dom&&(this.dom.insertAdjacentHTML("beforeend",this.svg),this.updateUI()),this.cpuAccums.push(0),this.gpuAccums.push(0),this.activeAccums.push(!1))}nextFrame(t){this.frameId++;let n=t||this.now();if(this.frameId<=1)this.paramFrame=this.frameId,this.paramTime=n;else{let r=n-this.paramTime;if(r>=1e3){let a=this.frameId-this.paramFrame,s=a/r*1e3;for(let i=0;i<this.names.length;i++){let o=this.cpuAccums[i]/r*100,l=this.gpuAccums[i]/r*100,u=performance&&performance.memory?performance.memory.usedJSHeapSize/(1<<20):0;this.paramLogger(i,o,l,u,s,r,a),this.cpuAccums[i]=0,Promise.all(this.finished).then(()=>{this.gpuAccums[i]=0,this.finished=[]})}this.paramFrame=this.frameId,this.paramTime=n}}if(!this.detected||!this.chartFrame)this.chartFrame=this.frameId,this.chartTime=n,this.circularId=0;else{let r=n-this.chartTime,a=this.chartHz*r/1e3;for(;--a>0&&this.detected;){let i=(this.frameId-this.chartFrame)/r*1e3;this.chart[this.circularId%this.chartLen]=i;for(let o=0;o<this.names.length;o++)this.chartLogger(o,this.chart,this.circularId);this.circularId++,this.chartFrame=this.frameId,this.chartTime=n}}}begin(t){this.updateAccums(t)}end(t){this.updateAccums(t)}updateAccums(t){let n=this.names.indexOf(t);n===-1&&(n=this.names.length,this.addUI(t));let r=this.now(),a=r-this.t0;for(let s=0;s<n+1;s++)this.activeAccums[s]&&(this.cpuAccums[s]+=a);this.activeAccums[n]=!this.activeAccums[n],this.t0=r}},O4=D4;var os={backend:"webgl",async:!1,warmup:"full",videoOptimized:!0,filter:{enabled:!0},face:{enabled:!1,mesh:{enabled:!1},iris:{enabled:!1},age:{enabled:!1},gender:{enabled:!1},emotion:{enabled:!1},embedding:{enabled:!1}},hand:{enabled:!1},gesture:{enabled:!1},body:{enabled:!0,modelPath:"../models/efficientpose.json"},object:{enabled:!1}},re=new B2(os),he={baseBackground:"rgba(50, 50, 50, 1)",crop:!0,columns:2,facing:!0,useWorker:!1,worker:"worker.js",samples:["../assets/sample6.jpg","../assets/sample1.jpg","../assets/sample4.jpg","../assets/sample5.jpg","../assets/sample3.jpg","../assets/sample2.jpg"],compare:"../assets/sample-me.jpg",console:!0,maxFPSframes:10,modelsPreload:!0,busy:!1,menuWidth:0,menuHeight:0,camera:{},detectFPS:[],drawFPS:[],buffered:!1,drawWarmup:!1,drawThread:null,detectThread:null,framesDraw:0,framesDetect:0,bench:!0,lastFrame:0},Ae={},Q0,Ui,e1={};function cse(...e){if(!Array.isArray(e))return e;let t="";for(let n of e)typeof n=="object"?t+=JSON.stringify(n).replace(/{|}|"|\[|\]/g,"").replace(/,/g,", "):t+=n;return t}function $n(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;he.console&&console.log(n,...e)}function tr(e){let t=document.getElementById("status");t&&(t.innerText=e)}var wa={enabled:!1,original:null};async function use(e){var n,r,a,s,i,o;if(document.getElementById("compare-container").style.display=wa.enabled?"block":"none",!wa.enabled||!(((n=e==null?void 0:e.face)==null?void 0:n.length)>0)||((a=(r=e==null?void 0:e.face[0])==null?void 0:r.embedding)==null?void 0:a.length)<=64)return;if(!wa.original)if(wa.original=e,$n("setting face compare baseline:",e.face[0]),e.face[0].tensor){let l=re.enhance(e.face[0]);if(l){let u=document.getElementById("orig"),c=l.squeeze(),h=c.div(255);re.tf.browser.toPixels(h,u),l.dispose(),c.dispose(),h.dispose()}}else document.getElementById("compare-canvas").getContext("2d").drawImage(wa.original.canvas,0,0,200,200);let t=re.similarity((i=(s=wa.original)==null?void 0:s.face[0])==null?void 0:i.embedding,(o=e==null?void 0:e.face[0])==null?void 0:o.embedding);document.getElementById("similarity").innerText=`similarity: ${Math.trunc(1e3*t)/10}%`}var z4=performance.now();async function t1(e){let t=e1,n=document.getElementById("canvas");if(he.drawFPS.push(1e3/(performance.now()-z4)),he.drawFPS.length>he.maxFPSframes&&he.drawFPS.shift(),z4=performance.now(),await Ae.process.updateChart("FPS",he.detectFPS),he.buffered||!t.canvas){let h=await re.image(e);t.canvas=h.canvas,re.tf.dispose(h.tensor)}let r=n.getContext("2d");r.fillStyle=he.baseBackground,r.fillRect(0,0,n.width,n.height),t.canvas?(t.canvas.width!==n.width&&(n.width=t.canvas.width),t.canvas.height!==n.height&&(n.height=t.canvas.height),r.drawImage(t.canvas,0,0,t.canvas.width,t.canvas.height,0,0,t.canvas.width,t.canvas.height)):r.drawImage(e,0,0,e.width,e.height,0,0,n.width,n.height),re.draw.face(n,t.face),re.draw.body(n,t.body),re.draw.hand(n,t.hand),re.draw.object(n,t.object),re.draw.gesture(n,t.gesture),await use(t);let a=re.tf.engine(),s=a.backendInstance?`gpu: ${(a.backendInstance.numBytesInGPU?a.backendInstance.numBytesInGPU:0).toLocaleString()} bytes`:"",i=`system: ${a.state.numBytes.toLocaleString()} bytes ${s} | tensors: ${a.state.numTensors.toLocaleString()}`,o=t.canvas?`processing: ${t.canvas.width} x ${t.canvas.height}`:"",l=Math.trunc(10*he.detectFPS.reduce((h,d)=>h+d,0)/he.detectFPS.length)/10,u=Math.trunc(10*he.drawFPS.reduce((h,d)=>h+d,0)/he.drawFPS.length)/10,c=he.detectFPS.length>5&&l<5?'<font color="lightcoral">warning: your performance is low: try switching to higher performance backend, lowering resolution or disabling some models</font>':"";document.getElementById("log").innerHTML=`
|
|
video: ${he.camera.name} | facing: ${he.camera.facing} | screen: ${window.innerWidth} x ${window.innerHeight} camera: ${he.camera.width} x ${he.camera.height} ${o}<br>
|
|
backend: ${re.tf.getBackend()} | ${i}<br>
|
|
performance: ${cse(t.performance)}ms FPS process:${l} refresh:${u}<br>
|
|
${c}<br>
|
|
`,he.framesDraw++,he.lastFrame=performance.now(),he.buffered?he.drawThread=requestAnimationFrame(()=>t1(e,n)):!he.buffered&&he.drawThread&&($n("stopping buffered refresh"),cancelAnimationFrame(he.drawThread),he.drawThread=null)}async function n1(){var u;if(he.busy)return null;he.busy=!0;let e=document.getElementById("video"),t=document.getElementById("canvas"),n=document.getElementById("log"),r=e.srcObject?e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused:!1,a="";if(tr("setting up camera"),!navigator.mediaDevices)return a="camera access not supported",n.innerText+=`
|
|
${a}`,$n(a),tr(a),he.busy=!1,a;let s,i={audio:!1,video:{facingMode:he.facing?"user":"environment",resizeMode:he.crop?"crop-and-scale":"none"}};window.innerWidth>window.innerHeight?i.video.width={ideal:window.innerWidth}:i.video.height={ideal:window.innerHeight-document.getElementById("menubar").offsetHeight};try{s=await navigator.mediaDevices.getUserMedia(i)}catch(c){return c.name==="PermissionDeniedError"||c.name==="NotAllowedError"?a="camera permission denied":c.name==="SourceUnavailableError"?a="camera not available":a=`camera error: ${c.message||c}`,n.innerText+=`
|
|
${a}`,tr(a),$n("camera error:",c),he.busy=!1,a}if(s)e.srcObject=s;else return he.busy=!1,"camera stream empty";let o=s.getVideoTracks()[0],l=o.getSettings();return he.camera={name:(u=o.label)==null?void 0:u.toLowerCase(),width:l.width,height:l.height,facing:l.facingMode==="user"?"front":"back"},new Promise(c=>{e.onloadeddata=async()=>{e.width=e.videoWidth,e.height=e.videoHeight,t.width=e.width,t.height=e.height,t.style.width=t.width>t.height?"100vw":"",t.style.height=t.width>t.height?"":"100vh",he.menuWidth.input.setAttribute("value",e.width),he.menuHeight.input.setAttribute("value",e.height),r&&e.play(),r&&!he.detectThread&&sh(e,t),he.busy=!1,tr(""),c()}})}function P4(){if(!Ui){let e=null;Ui=new O4(e,{trackGPU:!1,chartHz:20,chartLen:20}),Ui.begin()}}function hse(e,t,n,r){Q0||($n("creating worker thread"),Q0=new Worker(he.worker,{type:"module"}),Q0.addEventListener("message",a=>{a.data.result.performance&&a.data.result.performance.total&&he.detectFPS.push(1e3/a.data.result.performance.total),he.detectFPS.length>he.maxFPSframes&&he.detectFPS.shift(),he.bench&&(Ui||P4(),Ui.nextFrame(r)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=he.bench?"block":"none"),e1=a.data.result,he.framesDetect++,he.drawThread||t1(e),he.detectThread=requestAnimationFrame(s=>sh(e,n,s))})),Q0.postMessage({image:t.data.buffer,width:n.width,height:n.height,userConfig:os},[t.data.buffer])}function sh(e,t,n){var a;if(!(e.srcObject&&e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused)&&e.srcObject){he.drawThread&&cancelAnimationFrame(he.drawThread),he.detectThread&&cancelAnimationFrame(he.detectThread),he.drawThread=null,he.detectThread=null,e.paused?$n("camera paused"):e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState<=2?setTimeout(()=>sh(e,t),500):$n(`camera not ready: track state: ${(a=e.srcObject)==null?void 0:a.getVideoTracks()[0].readyState} stream state: ${e.readyState}`),clearTimeout(he.drawThread),he.drawThread=null,$n("frame statistics: process:",he.framesDetect,"refresh:",he.framesDraw),$n("memory",re.tf.engine().memory());return}if(tr(""),he.useWorker){let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(t.width,t.height):document.createElement("canvas");s.width=t.width,s.height=t.height;let i=s.getContext("2d");i.drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height);let o=i.getImageData(0,0,t.width,t.height);hse(e,o,t,os,n)}else re.detect(e,os).then(s=>{s.performance&&s.performance.total&&he.detectFPS.push(1e3/s.performance.total),he.detectFPS.length>he.maxFPSframes&&he.detectFPS.shift(),he.bench&&(Ui||P4(),Ui.nextFrame(n)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=he.bench?"block":"none"),s.error?($n(s.error),document.getElementById("log").innerText+=`
|
|
Human error: ${s.error}`):(e1=s,he.drawThread||t1(e),he.framesDetect++,he.detectThread=requestAnimationFrame(i=>sh(e,t,i)))})}async function dse(e){return new Promise(t=>{let n=new Image;n.onload=async()=>{$n("processing image:",encodeURI(n.src));let r=document.getElementById("canvas");n.width=n.naturalWidth,n.height=n.naturalHeight,r.width=re.config.filter.width&&re.config.filter.width>0?re.config.filter.width:n.naturalWidth,r.height=re.config.filter.height&&re.config.filter.height>0?re.config.filter.height:n.naturalHeight;let a=await re.detect(n,os);e1=a,await t1(n);let s=document.createElement("canvas");s.className="thumbnail",s.width=window.innerWidth/(he.columns+.1),s.height=s.width*r.height/r.width,a.face&&a.face.length>0?s.title=a.face.map((o,l)=>`#${l} face: ${Math.trunc(100*o.faceConfidence)}% box: ${Math.trunc(100*o.boxConfidence)}% age: ${Math.trunc(o.age)} gender: ${Math.trunc(100*o.genderConfidence)}% ${o.gender}`).join(" | "):s.title="no face detected",s.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,s.width,s.height),document.getElementById("samples-container").appendChild(s),n.src="",t(!0)},n.src=e})}async function L4(){document.getElementById("samples-container").style.display="none",document.getElementById("canvas").style.display="block";let e=document.getElementById("video"),t=document.getElementById("canvas");if(e.srcObject!==null&&!e.paused)document.getElementById("play").style.display="block",document.getElementById("btnStart").className="button button-start",document.getElementById("btnStart").innerHTML="start<br>video",tr("paused"),e.pause();else{let n=await n1();if(n)tr(n);else{document.getElementById("play").style.display="none";for(let r of Object.values(Ae))r.hide();tr(""),document.getElementById("btnStart").className="button button-stop",document.getElementById("btnStart").innerHTML="pause<br>video",await e.play(),he.detectThread||sh(e,t)}}}async function pse(){os.videoOptimized=!1,document.getElementById("play").style.display="none",document.getElementById("canvas").style.display="none",document.getElementById("samples-container").style.display="block",$n("running detection of sample images"),tr("processing images"),document.getElementById("samples-container").innerHTML="";for(let e of Object.values(Ae))e.hide();for(let e of he.samples)await dse(e);tr("")}function fse(){let e=[];window.innerWidth>800?e=[`${document.getElementById("btnDisplay").offsetLeft-50}px`,`${document.getElementById("btnImage").offsetLeft-50}px`,`${document.getElementById("btnProcess").offsetLeft-50}px`,`${document.getElementById("btnModel").offsetLeft-50}px`]:e=["0rem","11rem","21.1rem","33rem"],Ae.display=new ah(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[0]}),Ae.display.addBool("perf monitor",he,"bench",t=>he.bench=t),Ae.display.addBool("buffered output",he,"buffered",t=>he.buffered=t),Ae.display.addBool("crop & scale",he,"crop",t=>{he.crop=t,n1()}),Ae.display.addBool("camera facing",he,"facing",t=>{he.facing=t,n1()}),Ae.display.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.display.addBool("use 3D depth",re.draw.drawOptions,"useDepth"),Ae.display.addBool("draw with curves",re.draw.drawOptions,"useCurves"),Ae.display.addBool("print labels",re.draw.drawOptions,"drawLabels"),Ae.display.addBool("draw points",re.draw.drawOptions,"drawPoints"),Ae.display.addBool("draw boxes",re.draw.drawOptions,"drawBoxes"),Ae.display.addBool("draw polygons",re.draw.drawOptions,"drawPolygons"),Ae.display.addBool("fill polygons",re.draw.drawOptions,"fillPolygons"),Ae.image=new ah(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[1]}),Ae.image.addBool("enabled",re.config.filter,"enabled",t=>re.config.filter.enabled=t),he.menuWidth=Ae.image.addRange("image width",re.config.filter,"width",0,3840,10,t=>re.config.filter.width=parseInt(t)),he.menuHeight=Ae.image.addRange("image height",re.config.filter,"height",0,2160,10,t=>re.config.filter.height=parseInt(t)),Ae.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.image.addRange("brightness",re.config.filter,"brightness",-1,1,.05,t=>re.config.filter.brightness=parseFloat(t)),Ae.image.addRange("contrast",re.config.filter,"contrast",-1,1,.05,t=>re.config.filter.contrast=parseFloat(t)),Ae.image.addRange("sharpness",re.config.filter,"sharpness",0,1,.05,t=>re.config.filter.sharpness=parseFloat(t)),Ae.image.addRange("blur",re.config.filter,"blur",0,20,1,t=>re.config.filter.blur=parseInt(t)),Ae.image.addRange("saturation",re.config.filter,"saturation",-1,1,.05,t=>re.config.filter.saturation=parseFloat(t)),Ae.image.addRange("hue",re.config.filter,"hue",0,360,5,t=>re.config.filter.hue=parseInt(t)),Ae.image.addRange("pixelate",re.config.filter,"pixelate",0,32,1,t=>re.config.filter.pixelate=parseInt(t)),Ae.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.image.addBool("negative",re.config.filter,"negative",t=>re.config.filter.negative=t),Ae.image.addBool("sepia",re.config.filter,"sepia",t=>re.config.filter.sepia=t),Ae.image.addBool("vintage",re.config.filter,"vintage",t=>re.config.filter.vintage=t),Ae.image.addBool("kodachrome",re.config.filter,"kodachrome",t=>re.config.filter.kodachrome=t),Ae.image.addBool("technicolor",re.config.filter,"technicolor",t=>re.config.filter.technicolor=t),Ae.image.addBool("polaroid",re.config.filter,"polaroid",t=>re.config.filter.polaroid=t),Ae.process=new ah(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[2]}),Ae.process.addList("backend",["cpu","webgl","wasm","humangl"],re.config.backend,t=>re.config.backend=t),Ae.process.addBool("async operations",re.config,"async",t=>re.config.async=t),Ae.process.addBool("use web worker",he,"useWorker"),Ae.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.process.addLabel("model parameters"),Ae.process.addRange("max objects",re.config.face.detector,"maxFaces",1,50,1,t=>{re.config.face.detector.maxFaces=parseInt(t),re.config.body.maxDetections=parseInt(t),re.config.hand.maxHands=parseInt(t)}),Ae.process.addRange("skip frames",re.config.face.detector,"skipFrames",0,50,1,t=>{re.config.face.detector.skipFrames=parseInt(t),re.config.face.emotion.skipFrames=parseInt(t),re.config.face.age.skipFrames=parseInt(t),re.config.hand.skipFrames=parseInt(t)}),Ae.process.addRange("min confidence",re.config.face.detector,"minConfidence",0,1,.05,t=>{re.config.face.detector.minConfidence=parseFloat(t),re.config.face.gender.minConfidence=parseFloat(t),re.config.face.emotion.minConfidence=parseFloat(t),re.config.hand.minConfidence=parseFloat(t)}),Ae.process.addRange("score threshold",re.config.face.detector,"scoreThreshold",.1,1,.05,t=>{re.config.face.detector.scoreThreshold=parseFloat(t),re.config.hand.scoreThreshold=parseFloat(t),re.config.body.scoreThreshold=parseFloat(t)}),Ae.process.addRange("overlap",re.config.face.detector,"iouThreshold",.1,1,.05,t=>{re.config.face.detector.iouThreshold=parseFloat(t),re.config.hand.iouThreshold=parseFloat(t)}),Ae.process.addBool("detection rotation",re.config.face.detector,"rotation",t=>{re.config.face.detector.rotation=t,re.config.hand.rotation=t}),Ae.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.process.addButton("process sample images","process images",()=>pse()),Ae.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.process.addChart("FPS","FPS"),Ae.models=new ah(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[3]}),Ae.models.addBool("face detect",re.config.face,"enabled",t=>re.config.face.enabled=t),Ae.models.addBool("face mesh",re.config.face.mesh,"enabled",t=>re.config.face.mesh.enabled=t),Ae.models.addBool("face iris",re.config.face.iris,"enabled",t=>re.config.face.iris.enabled=t),Ae.models.addBool("face description",re.config.face.description,"enabled",t=>re.config.face.age.description=t),Ae.models.addBool("face emotion",re.config.face.emotion,"enabled",t=>re.config.face.emotion.enabled=t),Ae.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.models.addBool("body pose",re.config.body,"enabled",t=>re.config.body.enabled=t),Ae.models.addBool("hand pose",re.config.hand,"enabled",t=>re.config.hand.enabled=t),Ae.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.models.addBool("gestures",re.config.gesture,"enabled",t=>re.config.gesture.enabled=t),Ae.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.models.addBool("object detection",re.config.object,"enabled",t=>re.config.object.enabled=t),Ae.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),Ae.models.addBool("face compare",wa,"enabled",t=>{wa.enabled=t,wa.original=null}),document.getElementById("btnDisplay").addEventListener("click",t=>Ae.display.toggle(t)),document.getElementById("btnImage").addEventListener("click",t=>Ae.image.toggle(t)),document.getElementById("btnProcess").addEventListener("click",t=>Ae.process.toggle(t)),document.getElementById("btnModel").addEventListener("click",t=>Ae.models.toggle(t)),document.getElementById("btnStart").addEventListener("click",()=>L4()),document.getElementById("play").addEventListener("click",()=>L4())}async function mse(e){let t=document.getElementById("canvas");t.width=e.canvas.width,t.height=e.canvas.height,t.getContext("2d").drawImage(e.canvas,0,0,e.canvas.width,e.canvas.height,0,0,t.width,t.height),await re.draw.all(t,e)}async function Ase(){if($n("demo starting ..."),fse(),document.getElementById("log").innerText=`Human: version ${re.version}`,he.modelsPreload&&!he.useWorker){tr("loading"),await re.load(os);let e=Object.keys(re.models).filter(t=>re.models[t]);$n("demo loaded models:",e)}if(!he.useWorker){tr("initializing");let e=await re.warmup(os);e&&e.canvas&&he.drawWarmup&&await mse(e)}tr("human: ready"),document.getElementById("loader").style.display="none",document.getElementById("play").style.display="block",$n("demo ready...")}window.onload=Ase;window.onresize=n1;
|
|
/**
|
|
* @license
|
|
* Copyright 2017 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google Inc. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the License);
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an AS IS BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/** @license See the LICENSE file. */
|
|
//# sourceMappingURL=demo-browser-index.js.map
|