From 7571337ec75018ef65bba5fb60a9ce815771c666 Mon Sep 17 00:00:00 2001 From: Rutvik J Date: Fri, 12 Feb 2021 17:18:18 +0530 Subject: [PATCH 1/7] Chore: removed unnecessary temp files --- about/index.html.tmp | Bin 125243 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 about/index.html.tmp diff --git a/about/index.html.tmp b/about/index.html.tmp deleted file mode 100644 index af5645ee338f0b1ca504ed060594b474c72b88a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125243 zcmeFa-F9Qik*KG$>?>XS0rs%hjHERM62Qi9PgQxUsc!Ymur*rKnwH%ct_6Z12{lM? z0I;g7&X32-egNP434HHMKY=fON3UPMKD?f77W4BrhtuU%`uOPw7?!8CcA1Uxifkz5FQs9vSA4Y*k&;N(f?J?IQ1s*Bz zNP$NRJW}A10*@4Uq`)Hu9x3ohfkz5FQsB>#0`H3hIDGr(*s4dIA1Uxifkz5FQs9vS zj}&;Mz#|17Dey>v_fg@blcr_(HVT)?|s}K7Qg!9x8I@AgYj%I8k|l?)3fQg9FB*llk-ly9L~zK z({_J0J8P}ii`Los!FMR@G0DF@3jDjD>`C|k_?!RjU;q1`{N!)*-{0iF|2hBt$^VqT z|7-sHeJN7urM+736!X9T4|hQSzXddDRq2(de{r^)ZrW@;{1r4 z$!31Km>m?;<@IKEO`iGe+3f6MR_D5&T+N;xyqeEm-z-;~M#9(gv(4qRv)QZpbk>TO zC&m1FzL`%Jt@U)Wm_6$}DXM&}^ZDl4bopwwvf#~pvzR@9;f~hgKNP=C$5}i*O5mS9 zUCgh)DOR(^vxBS2_56IcrrOKZ?EKlm(fsP-=wh)voh**dC)B*WKC03j{(ilbAdT$n z*<>}nJSe2!vxCXa&0;>K!DL$A%&ybdv)OvOn%@Zh>u;|XBo?`62N|on=53C{NOrVS zlV#6Zo8|5FvL#jr#d`jBwtjZd8MVLVUtP>S4cO0ncyoPmQ0$hU%1rH;UrjD%N0I1Z zs$}Z4%I>#iHsM4g4+#|r%Wc^L1?8A*-PtGT+ zdFy6=ea(QknVcT3UqQ<0aw~y;_KxE`0ZwSHQCJ8^yAs=Z;I(^h74a{6qoah%a*xGI=S8;aVDBv zpHX-ad3{)%paHIntL2L7LfvFKAJ+PfOjkFn<;}B$J@W3Ur+YH|S++8?N2607*jUiy z64{^?`3`@7lT}lbHD1p*o7w8)>11`*D0qE)bv0SNdAXRZE@m%twR_yX$yx2XM%KT* zPD8>SzN*siOV2}nl?1TL^=H&yyNCzN?+D&|DfDA@v*IyZZQeXPSYCYmT}i)_>CcYx zH1x-$VCv4Q(2v)%>FsLv@^*!}fzC~a*AEfI9bzj?FZYz$L&M8=82bL{i?3SK-`~9W z-8WyfJ{gREeck@ev{hdI%kRH_`^(YlA6A36H*c@nUtcaJY3NIaXfmpv|8#y{{QQ8S zMJw@l%hfj+fLMveHOAY;WV2iqfAv?zUo4i`i(m4FVRLvf+x#6m`R51M%a`ld2fz45 z@$V_J&TzO>SX6ennqAD-sGy%89IantJ{U^o5=7Vb3Tm3>E$-#Y_-~Eq`%h7#q1E^k_tbYFsh$9jxCmxvmzr`yiQI1 zMOE(K{PaKm^yyJWl&Gv}r*7UXX6wt@tTuEjW;lmC)`zK=CO7l7XTBXx*X#fKd~!8k zym|Id%hTm%`Ejq^e$waPkbgYSHxtJH|BycZ^%u+QNWlmebA;Nw{@J>&_h-q#{#jM; z^z6EM%$!vob-UBaY1uw&cY1?qIhnQ3PtQ&Vy~*&j>`n)#li_UCo=v(_Eb{qv>s9xV zOg}^6N2Pz!Y8AMAR+HlBsMSiq_`;;+LlNqaXYGFPY*@D2XPwj8xII2S9Zq`PUU@cc z_xrPHdpMq+mD99YzKKrMT>U&fswPlRPnTzJis@pq#&W-b84G_}tuP%b@?lb9dYqlj zt_zIKNh>`+JJ_sloi)*(v)TDNH+wZXV?OjN|1i5M=4Y50X>6-tXn=2@9klzV+gpM@8uPOr=pjSP;-~T!Vrg1P$w)oq_ZPHVB$i*l-x#0I1g+ zQNa#~?#^}A$@+s)@Hl96Mxxt?i`zLTY-*nZDx(E~ZQ^lZyo(?Ws%`wua`8z z=&)Vd_AMwBH2f1VRt~b79d~k0M*AQn;)j@!YH&Clh2YAm-F8PjfDJ3{15IUUK!ad5 zQ+3<66Hvcb>8)-*ls2$3)V;|V!mDIiI?8TY6*jWlPwwGndAxgA_D1#}%+n9-PGBE~ z17KzEa8wTM=M(y&WO*dg!O^mVJy8qi4X*=AEiZM zQqE+(P$GbOZB?G2vgWs5C-@Cm2LeO|y>gh7L9Pr!=|oP5pX7?t2FRzSb;iL-R)FP~ zK_LnO3LYobD72659QM>@)SN6- zjj7=50Flw232evXq-)wJmXs42OIomvU}sP-8c@Omh)2pfj?oA*gGH`$Jdn78(wIe^ z)RaMG@RsyOZ&k1~jtRp|NLdpl1;KCuf-9qf-eH^GNT6Y|O|Tx@kTk*2KB5a~nDJnI zm$-s3VRFtGh)i{>RNon71%he~)Bs`Yl2bL4v=N|Q5K?h%+XctwggH~PLG+#= z4B-SCrD07_$TB&{p+C$?^CTn#OFz{~A9u$z0JYoK#G~nVrB+$)9FBWq=!QyfrvdgD z7^WTV0yaQvnz=(2s!ugPwzi=5;h^ofkW9x!@ir~g)CPuD3>L>y8#%!4fHX08a$=k& zlhg{5Nt*0cngvL~r%ndUWZ!0^2+#>eR0(U@cpn6Hz;-yY`=AVr3hY=IHbR0WQxFjL zZQ>a?EU*RC34tUh{FiffdSRvkLrQ>|bL41h1!ZtJAet^SM9xszzm+5Xv`D z>M|EdAXL&I%7QZ`l{t~)Vb{`NoEWkMjR#Rd*$ETWRLpjxurebmjEP7}hK-UdV8j|m zVf`>oqI~Sk01bmPPwsXEy@NS68g?R`50rKi^NSIc))S564g+j=Or7b$IBzC5~LRl&3v@o8I1#k zPK#_z(o#WVKJ7tzF|xuA+e8elsWu)QL$Uo6H((rg5~P=uusCAyN1|R3R7j`HiNd-B z(v5zgpx)T(Pwo;E3Nz6oC#JOQn??sfZLD`E zsPtuKOzf4C-k|1wh`RiXu97o_g*_jj1W1!d0X>`^kp?|a;gJs;K46RxnR~k^0cu2> z_QL2eC$ll=4`>)BK}ZZ}z^M#NB~#px$f05-2WE~KVLb_elF>d|gMA)cI!vx1Aie$= zJ|Yp;OlmQB1|WGiR6R&+G}xJWq`^$iMGu)YS~;pwJAiVMmW0`dsIye`Ak6TSyPXe5 zU`)_<`m{XkF(y)23{`EtPIM`zOh-~NYQSK6zhG{9Jk;>Ou?zfAJAEMZB*cJa=q-%( z(tQ0xh71N@V2qZbtTE7e0L19jN9~YP>mCDBP?>CsV`06RwgO{>$jNA4Bm!$io8C_oPhrXM07jo#8lyXdTuPR* z3JN!bIq3>gIY#$!E2Lz}u_g!(NFa1yDhz}&C^<09i4!zekmv!Z!;l*}A)4$?XVCvC zRR+nAL%e8v$@&bFsZK_ql#@ADt}{(|PGpLX{!?3kvpHHIi-pZ%t2)tkIWep$L6w#viPqNk?56D-Uy=^QVRLQWf!JLfa9Z<5NtDHmT0jXS= zD64yoZ|fEkIFv;ip{0L?=n2Cb767317lm*F4p{Gi!Za#}Hiyw9WEfB%TZkS9g1;#e z;WAO%02yc&YYJg9=WJzP!NJO5?4)#4;qHi3W8Ap`=`x(=d`!%vI#Q>?F`=L_)I&GX zi4<=3fZ)!ct80ivXS_<;av}`>B&K0z*)?=li8>9Oz!wpuK43_Af?@cJ6#^a}RZwU2 zU{)8PUZ@^GeM|{+;+Mfzi<~e6)rUw12%l^ZoPpe78Tbf8u7^F`f0F)^?1ZU^gQTqG zU&=aR?gyhL)q^z|hHiq1EweSW5eyxmtU(Y&1uKD=SeU9;dnn8BTnXz}9!eb0IT=ou zoRd)_<)l9Vg)a#04-8wnU3-y+IynLqCMk7xv7r+PEn4M7pJ!NFyHTGyE}1heX_%9d zDT8o}q&hKrY&*$DVF@v>9q z5q3=Eq=uA?`9Z3aev(AAWI#g$jj|W(LV%b-t90+mk3xl611FL1!fjpWs96(Y8P!~fxgF+qw zrG*yVE%?vm1{Qs=s&btp1s)Klc2JyD6^MD5Oc^bxV9ZBTXEoBPnR98F9Z?z*9X(Gf zRu2;hrwge9kHms})XYn5Z-+n%O48kT@+{8?3Tr7GMzA(8?8Br4pfe^l6)@Oz5K;;g z1Q$0!x;0@7O506_e`^mkU`z-QIw{l#IpKhm4EsNfJ3vgnQ!-4hTqm<4K#YjVvln$H zFBq`oBn>o_K9eP%V1U9QDkxkPCyXQbYt)G-9v-Axz`}A?XC?F0Wcn*j#!|6(2+B*k z?RIkA3&Y$b8A^8$oh%5$Gl5uMNjcGfJ0R<1%9L|5dCbYEGUtqyB2!`ZW>8Eu&DldX z6O3Ud<-{yZqJfVzg9b^PIviw+mGL<&IkC;j7-7@87KBeuZv`IfG0JB;mt+bUCToKA z!qH^1DktO#bsb7TX+%OX^1w_b&`V3`nBmEo76gG(GF&z!6SODWnq#Q*G8PN4X&4zu zc!EIo@sg66C6a8%-UAZ^eXC?ylqo{GkrU1e?9}2~sF(!V-AB#=3uFldD~g?KVKFjc z%rhg%Ia#|^hJYn4V6t8;gab-zU4r_dumz=M0AVQal#>O-RKW<>asufgi#nNi+6#=H zi2>D5z@#rQ|4YeOzR93!WTLQ~vy8D@Ed$MzQROR)VkMqcKhgn18-;2UB%=z#8DIs1 zoQw+U=7n%z=+y*EO9Lj0k%?r?L81ldJ@k5{${_268I)y`p@FQRM;C({#qkiTv+9AHgi>qp5GBCSGsLr3GJhN!J5da~t{7qI;WJ~R zin|8q4JDw{wGG>VnH4k3qKk?Fv`RSXwn> zcIZcaas-#bsZ0x*3HQeZIN&M3Z4Zz+6NW5e3~Em6A&1>)JCg^Oc9eP(gd&g()Sz70 zWLZuQc4;-Y7E_lptzrde+hh#a&gIE)5kxY`WYjacIoW4IkCRwwRhnxW?aMMz@E z-eG9MAbC<+GlD-D6ja9mBmqMP2#W|qXM_qOzyv#7fx!-je;_-;X}{6SO)u|9PpC9raf$8n5y zheR?El!vQA#lfsBLm|lWE=o&T0vI>f3NMfsN@^C)DhO zmPE3qqXx@J$`U}QeW7*)V%#x;Fv3VU?3$Pu(mF=a-Vk{PPuX0HxIqcz>n_zG=h&qb z22Pytn8VR32ek&csUpWHY#GTlk%s1Mg3;I*9I)kXA@_qd*X&EGJZ@BpMD)}gy>T&i z4Hyq_H<*!GB@^0FQ!zOraNIFY9rGF;Hq#$8`Z(mF|q?~9rc;c>Rd@+`V@)7Ig5|ls+oDCw_z(e z1%Db)?WQpBkx$1*^V44Vh-FZelkCycLkcQ#0{rZhAgm3cC5kBew*jRH^p8R~*iFnh zV_yz;3uX{j&GbO5Mgi&3dg|;VE8l6`JlSbj4c(WO8*#kG6V`wg`G_2yC#>}n)wyW1^POXsWx+!SaZOPAseOOY{#*w z5e!?R?pRfYU7JuAypnRo#@I;=y)~-=V#YF!XoCdmsz>R^*1m zs@m)^%WHynI*Jeihhr>^2fz)z+AQRLaHzy>FK1OmC>Lu#3@R5gWYvZK*+~pec-HB8pe#_LNyij{WgSD3P}nUvn4aH)86NNuF(;HEm^avNL<@Rp zMPgS_A!eB-3q^0iLS@xHqd{1(_$6$Kj%1jbwCF5Ni5~MK!GwvI%)EHQtAU%CwCG62 zel1b76UteuLMR>VI1f4?26u^?hJyBkCa&w5SQ3ea38bajyTqrGa1tQ>&90ILcRKd# zYSYz`8;|mys`ZGF zF30Gf`{^ZC_tEUTwTF%T*KBvZ{%#G+_56Wa7rWk`?(URp?u_$vl`Bp(*t}^;<<=x^ z^usV1jM64QqHpmK+`WE%x9?qKPWH%IvYCRv@%R3pMbI zE!)Qy!RBtj`?d@2?GUVzr_F#n8S;L?np=09ox6G$_%2$U?r(NPp=CNm+w+FUchI0+ zFu@#+i&mlluYE|+|I<<+u|!r+o_td)CB}NiH7lHJIQXF86q#$bnY!cl{;v-FCa3g^0b<+a05O9JTH2i=A>+YOU3+XV}bM&90YcXLU+sI5u!5z4uZ3)6S>e z{z2i+&3<{v2%$n=$WF|$Cg}Qc5kJ9d1!G2wfS>*p-%bza(;zY-4ml>K{EWUTyPxCq z9DJo8bu?|$JKau;6y)RYaKzuin11T=Z^YMf&_V<(wdcbG7fRtjD{Qy0?Zu?*S#A%j z^s7MdviJ5%8!g3;Of8eB#TG-}kV5(`{5L&|98kev$WK&2Y2)c%S&C<8%P*Rq|1!T91?u6}5 z_-6bGTxkiOXDGs~-csTxeR1J|j(dAW(_7f%G!3;t&QRS7yhD#nJ=C`do)3k|myI&ZJ2aM*2Oj=j<%z9izU_ez`X zl8ihuKN)nVh%pYOj-=FUC^ir}tlLB843Zf>g%czSL`Lb^Z#^D5BZ{L*bTZ}zb<%QM z#4niHO3Z7(qxfs#U&Wln`e{_4!p~RC&MhfASgKo;-AnRx`(O2i_g{5~Z?7}g}iV_i>bwU0DsXjhh3_rM>_l&U`xUKJ$RQ-b}}--1M_}bq&zTN45+{! ztR=PJGJXNG*`7YP--Gg&5n!4fX{iAp!hr6jT>h?kfV&mKTvHSfC2Wfjzd?ug;=yA^ zQr47#e4|X7^hhB+8U?@55hI8;w5x`Fnv5={pCx=pAyBw6o)gW3|D%2MUWcz5jNJvD z2CtMou}5;nu}zaYqCbG&dC)aV*Xc5+_;x=%QAi)j8jNA1QNL!Rk@Qb}0>2@kT~tA* zyC6}oWhc>p{c-^l_MreA5&|I8cI|(VRsNY6`T#p7))z6*=)?D2iBT?Ks&*gIL`m3Z zBe+kB_CUEmp3qyAIF1hTb5~NRRR=-m5}fQH!>Gk)w4i0+_V%D2jd!(l(>mQ70a_Ex zvxd57TzNZNVUDWM3Er?%5FXVCoze!!4$M&6;&v&u2Vl#ZR{Vs(f^Sc;2?^yh3Qi># zjj?~2a!4ummEyKfqX2EBNlYXlBl3raWERzdBL=E;wK0{dH_46`gDpy4yJJ#FSRU}> zs*dF>sEOl5kySR@T@sBsU;-^db^M5=3^eZ86L{B=_4JdzD0+|_JqL$gkum$I#n}O$QJTTPqskd zsO;^P8vGFc00*_bQ~|f%K$>YZ><^zh9O-ZPp58atmAM6s`%9sMQ-c~{fSvnq^ zA4g|m3BXCng~@th7Fdr>Ozl!9jnOLns72B!I)dAzx4tE7f*d@=Xw-A4mrOiR3*CtV z>U3L3Ckh2kqE4N#o|33W8Z;nO7|=h_20M(xu(Qanu)!>hbo5A8-B@d95}?Gl$lGKr4B@iC7Wtsk0Ix@N|N$K zOM`agfTZF&QlKE&jv+y3RJDbj7;=xDAf-!364bs+P3Z};SSmb*!UPo3H0)L-fG_2Z z7zf&n$}Td~X6PB_*Zb(1RLr~RDI?xbPjvnV(NmT8rzU6`QQu3@!P~2z!2+=;iMNf87Z4?(8 zkysA8+wn$)$OHVHZ0`;OEfS8lQGEsNQ@K=dDwaCH`>bQu{zCZ z2@ePa%*h`uRN<`CVwhk}#7rfuUB^chKDFP+;@G6PU?uq$q0Ii#bZk$k)nabc4%<^} zi{8L`M1>(;l2MhddE;_KGFenLG#es0dI;nr4KpF;P>jT=38&cPhKyr-n1m%Qb(xx1 zQi-}*=^V@Bt)np)3RKI8e^EP11ZN~24Bf{o>;5FqgBmew|ajajXXkuR(g+Ux(ogRWpEi2bVC zghX7R2C?(J*XAI z44G1{G)?(CagISGN{nC$*a3Z~Z_F#0ucsfoBf8!sWV__AGYd>d-sp3c1tSV0nca$X zz#ng~U<622IyG=$9*w53a17R30$qO?Y2*|J6B08{lR@(#Do_K6rIk=9MppW(b;Fze zMPI_x{25XSGga8tYEh^3oQS1y0Ao2+BxAMWvv7zD#W$1*LT|!n)Mk~Is!Z{Rn*B4J zP%b$uqlDh4CV4#(AY}->1BR~zFVI5+`oFJnMY&?E@koJw(7>`uOrO9$Y)gQHA#||C za3>DSA7RPn{(umq4e{RrJ5T zh4%(rQ+w!PX#l!Xc0k&4!AlrMIyPAF!t_MIFvFexVKYENRHPl0$rjB}#{;5Lp)`Uf ztAqsF#Eh6Nru^tlDjU&K1|EtpKT|jk)d|*kZzw#dNI5A901Y#X zOLg1J7`05B7;4@1WJ+QW)-rqI4!? z=+PPciOCqGq#ETqW~wDV6(Yr*h*f_R0X2az9|mLF9y~)UnHiz%AvXFpej=^yVdwy> z-ieMytnkrTeL-I`^MRDw!{E}h*U{k6S4SIW5xmo#a8?1sJR!C5Cv>J=8G=zl)Ir@U zx&ZG7Ee=VBI?*YR#f}KY34+$;j9W8;F3YSUH$bDlXpVJ6IaA~(w?O*9EfCn*kk*F0 zrsxjMF_@rNRjq-YMF~{ljnEBktN*j>IF4_rK{KoxMkn3aF_eH}uEMHu%G$Ou@{grsWCrTeg5oEL3VpGFXseAQt<1@v zXcbgoVyxf1GhTor<^m%>=+k&G#;uZ7IC;qjVbVLlYJJ9TLGl;`Km$d&S!aqD42n3= zAl(M&0qkaY6qQN$29bk43|>Y>!%op~`m5i4`;bY7N!&2Xo*rG~mAHBd_NPDHS(9=x z$(saP`9$o!MP+AO-FmSo-_r2gbVT?5QnKqv`QXnY{EcL$ZOox)73z>a;=|NJsbyHwyNueWK(Z*sQ3L@GCh%W;Ck9@M zF^$7KjKX}@O4PJRcQYknG-l?Vp3^TZf$5G0q~AhS#&fEH=q$RQ*lLipjtHxY6$K{* z&U18ovblrrmTtV=*al%x(v^?bkbi+iFZOQb#ZbgrZs>AN`lFcwym>U!ZgT@I%E>>h(%-vkDMsN^RRv< z`Y32bJ$#`SWSF&Co@$BA&~+C1X_AQ_DzIsJ;|VT02% zh*+hK?YFHa(BRx4pK&JBIdB5nFHq<76Co7JS0L#b;>cG{stCieN7xTuzXgyQ+;d^W z`NnUqp%Yyrl7!6wmip+p#3>X?%b+#A#roJ*0GdH3wMa!EMPB2r<>_L+xx8gndw0Q37$IW={go1TT>W`-I16XFQTR z=wgsll)&eJF}#>GJrj6rw&-#U!6<>>cqGN!FYqEz02r}_VrtSrB^63-q)h^we%WVk zWppGdLq06Y0;6}xwziDGk{qHDzo2B{WK31?YhWKqQ`-=pXambtur!_`5W-<;mcT*& zB}=Zo{(__#O>Ny`ep=$#1AwgcZ>vhngXr$Pm_V&PhXFf>!Zl zkMchzXVxuSB1uH?0$~RQzrnXaN~FrraLRIkgVVLAZ>^Sn+2lPr+oHVMl~0%0{!zoS}|2`Md~)`U)UkfCUZXD3Au z(;XQ%S_3WkO$23N$=kPV(uf2KEB3eObA1s$B}gOy=tyD0@mk)iCy{ERN8ghcIN zWNKwcAT3fjV2e6ZM;*Ve|k^Wk{x~5cQop$cHi z9@J>Crg2KdRu(iP-v{yQ3{-!u6pF{;m>Dy>1l*_3Ib5=Ad}e<+iHL=Ubg@SRDyVZ2 zl1oBr2(2b*U#9|9$0(eX4m}_m8mk-_XW5Jw2vS=rvx7#2Swun>;C@oFSVT(PeH0xt z0}urQ+WaP4ggqiY;}{F9ahvI}j7E2~N(^@M5Ck@3UNV}pRaHji04ye*9HDgy(;mJOYbsys2j|hW^7hudo1rkca=&bp|47-kP zeJFf6CeClTvhenFzghQAod4UD^u9*zPMoz2IuKiDTNra_3?_7FI7BY28oQfkMuY?j zo5yFAG*g#I>3kYfI2gn6O!GLIQhP6#!5aqKIWrDJDkp|P(?}T8=9rf1Pjo18n24HG z4>2j`EIr^(dcgyYuKy>nte)4@!*OUDPocei*6Gt>ZI6+R`u$?z^_S)|1BE&!2tlQF z6$Ev-i;rK;hnOAn9EO?ZnJOsiOk<*^9zqktiq$k<*0es$239JCh_Ke1ZUc#=fkXSl z;HQKJrK9DhPqtazO9?F~1udchVUSmiWHhk(bgu2U270b04|T?Ov8bLASs2>+F;dO? zq8|O;f++>Wa)=t&913XXg54T&DS6b_P@2(2f~w%3*cM#ZP&M zok}e%#nxzz0OwbvHlFw!|4YdV61mb1Z{p)_!zlDkQq#H)exe#S;g&$<_5mOg`!@#4O;C)*S-<~DIbem?8iiR8So z8+)6=H}g|&okm%#lM}jTm2NK7JmGY-IMa)R-Z+1cO-2AY-G#7-0CPT+8`lJTR+LBn zZc_vvOhzzRqY(D+d$Nwz0p+-<0p|cRS?5$G8Q3D&*vEz|MorWtl@HlGjDBHDAUjdn zR>vuJ9v_(NW2+Whvkj->Sc5oBCQ9b82M(IW%?<^zy08qak0T5?RT_^SvoxG#U}1e6 zu0+9@TkJ*TM77kCIN{R`t~AI~=Qya5#B37fOwR$d5AhO6H_HLo(yp4c*y88gA zCzo*mLpO@R#l@yu&o0Lp;XD!!igC@BTa`Q^=tT56aHzxHf9Gi)<4o#f(KjQYkE6$Xx>s6dNF^G-FCEGh0uRxm}bE1!b)vbb% zfTPSHI6LM zgxM!ZZzqn!@5-jal$dV9jN-gtw&Z~bTomEV#$iA2c5S+M zZqJJ2cKU8(i(PX|$&2#E_{DK`R8U$OK)6|!3n7 zD8S=jikxK}<$M7h5IKHveL$Y=U+Ulu<-!hXcUZc9#=%;6H=gLRN6XSTKETdil)xEK zC>H?~w#^pht8kL;^UwAp@lUzXlv5;fp$vJcRFJSxm0BYsZ)ytu1l|@~KZJs#+ii}t zqILNXM>)u-o&aG(WStswM%vUSAC8-?6(ASY*(}>8anxyaMB`HvZS$oTMUllZ_ttPn;di7E({F3a}kt<){izh0%bj z*DLCAN}b1%pg}D_s{^Ak%EA{Bb;MtYQ&k=B6tm5g%S_}+eUh0g{d7Rvshri@G(XGodjQplLzVp0s#+{g4_PT3j@A@|G zG=!yRMkZ#hVR#J7dDP8BZZvr^4&^r*u~4kDFcHJA=;*n48!=Bo%?yFQ-ry4 zuoDz&AgzxV1x59SB5|aE7cBaLQ z4H!Q}Z4HPErAQ`|L>q9pR7{OM*ctWhRAxB3gw#`J$OX)$fJH>9*$p) zc@X}^9vgr-6cm2;H<}kgPB2OP0nbm~owVb^P~A9(A%2(Rg`pS5iK`5>4DSnZ#5l(Y za)38R6WAC7PB*E4QW~c};AavWdA9%vIvRe(Qo?w=^O0aC=1@^QYR;g*4uLd?vCAjv zPt*W%+&2($Ypgqvrir43pfN@t#&^@p+4LJOI^SnL=-KUUU0rvWPuGiQy7uDaEFL+P zpW)Q-R!nWq@`*77yEV@6cIwBpgkz<(DL5mBGvA71XSOfK;S3|-*pVER z#t5d2GAQC4u@vlR93f%matPxDX$=kI+0#~>Ey3{F21j{ej&kTXXn-~bE%r3^scu-B=L9D(V J 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 From 507c500899f0fff18e5ba629aafcf893ceb89108 Mon Sep 17 00:00:00 2001 From: Rutvik J Date: Fri, 12 Feb 2021 17:53:02 +0530 Subject: [PATCH 2/7] Chore: remove redundant code. --- app.js | 133 -- app2.js | 19 - client/about/index.html.tmp | Bin 125243 -> 0 bytes client/app.js | 133 -- .../netlify-enterprise-edge-animated.svg.tmp | Bin 83514 -> 0 bytes ...fy-enterprise-performance-animated.svg.tmp | Bin 53378 -> 0 bytes ...netlify-enterprise-secure-animated.svg.tmp | Bin 30648 -> 0 bytes client/index.js | 333 ---- css/style.css | 98 -- .../netlify-enterprise-edge-animated.svg.tmp | Bin 83514 -> 0 bytes ...fy-enterprise-performance-animated.svg.tmp | Bin 53378 -> 0 bytes ...netlify-enterprise-secure-animated.svg.tmp | Bin 30648 -> 0 bytes img/global/favicon/apple-touch-icon.png | Bin 32632 -> 0 bytes img/global/favicon/browserconfig.xml | 9 - img/global/favicon/favicon-16x16.png | Bin 815 -> 0 bytes img/global/favicon/favicon-32x32.png | Bin 2123 -> 0 bytes img/global/favicon/manifest.json | 18 - img/global/favicon/safari-pinned-tab.svg | 11 - img/global/meta-image.jpg | Bin 16022 -> 0 bytes index.html | 1354 ----------------- index.js | 333 ---- js/app.js | 128 -- js/tf.min.js | 3 - leaderboard.html | 276 ---- live_stream.html | 219 --- particles.json | 110 -- result.html | 10 - sw.js | 1 - view2.html | 29 - 29 files changed, 3217 deletions(-) delete mode 100644 app.js delete mode 100644 app2.js delete mode 100644 client/about/index.html.tmp delete mode 100644 client/app.js delete mode 100644 client/img/enterprise/netlify-enterprise-edge-animated.svg.tmp delete mode 100644 client/img/enterprise/netlify-enterprise-performance-animated.svg.tmp delete mode 100644 client/img/enterprise/netlify-enterprise-secure-animated.svg.tmp delete mode 100644 client/index.js delete mode 100644 css/style.css delete mode 100644 img/enterprise/netlify-enterprise-edge-animated.svg.tmp delete mode 100644 img/enterprise/netlify-enterprise-performance-animated.svg.tmp delete mode 100644 img/enterprise/netlify-enterprise-secure-animated.svg.tmp delete mode 100644 img/global/favicon/apple-touch-icon.png delete mode 100644 img/global/favicon/browserconfig.xml delete mode 100644 img/global/favicon/favicon-16x16.png delete mode 100644 img/global/favicon/favicon-32x32.png delete mode 100644 img/global/favicon/manifest.json delete mode 100644 img/global/favicon/safari-pinned-tab.svg delete mode 100644 img/global/meta-image.jpg delete mode 100644 index.html delete mode 100644 index.js delete mode 100644 js/app.js delete mode 100644 js/tf.min.js delete mode 100644 leaderboard.html delete mode 100644 live_stream.html delete mode 100644 particles.json delete mode 100644 result.html delete mode 100644 sw.js delete mode 100644 view2.html diff --git a/app.js b/app.js deleted file mode 100644 index a3d0c95..0000000 --- a/app.js +++ /dev/null @@ -1,133 +0,0 @@ -/* ----------------------------------------------- -/* How to use? : Check the GitHub README -/* ----------------------------------------------- */ - -/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */ -/* -particlesJS.load('particles-js', 'particles.json', function() { - console.log('particles.js loaded - callback'); -}); -*/ - -/* Otherwise just put the config content (json): */ - -particlesJS('particles-js', - - { - "particles": { - "number": { - "value": 80, - "density": { - "enable": true, - "value_area": 800 - } - }, - "color": { - "value": "#ffffff" - }, - "shape": { - "type": "circle", - "stroke": { - "width": 0, - "color": "#000000" - }, - "polygon": { - "nb_sides": 5 - }, - "image": { - "src": "img/github.svg", - "width": 100, - "height": 100 - } - }, - "opacity": { - "value": 0.5, - "random": false, - "anim": { - "enable": false, - "speed": 1, - "opacity_min": 0.1, - "sync": false - } - }, - "size": { - "value": 5, - "random": true, - "anim": { - "enable": false, - "speed": 40, - "size_min": 0.1, - "sync": false - } - }, - "line_linked": { - "enable": true, - "distance": 150, - "color": "#ffffff", - "opacity": 0.4, - "width": 1 - }, - "move": { - "enable": true, - "speed": 6, - "direction": "none", - "random": false, - "straight": false, - "out_mode": "out", - "attract": { - "enable": false, - "rotateX": 600, - "rotateY": 1200 - } - } - }, - "interactivity": { - "detect_on": "canvas", - "events": { - "onhover": { - "enable": false, - "mode": "repulse" - }, - "onclick": { - "enable": false, - "mode": "push" - }, - "resize": true - }, - "modes": { - "grab": { - "distance": 400, - "line_linked": { - "opacity": 1 - } - }, - "bubble": { - "distance": 400, - "size": 40, - "duration": 2, - "opacity": 8, - "speed": 3 - }, - "repulse": { - "distance": 200 - }, - "push": { - "particles_nb": 4 - }, - "remove": { - "particles_nb": 2 - } - } - }, - "retina_detect": true, - "config_demo": { - "hide_card": false, - "background_color": "#b61924", - "background_image": "", - "background_position": "50% 50%", - "background_repeat": "no-repeat", - "background_size": "cover" - } - } - -); \ No newline at end of file diff --git a/app2.js b/app2.js deleted file mode 100644 index ddcf3fb..0000000 --- a/app2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Server App - -// Imports dependencies. -const express = require('express'); - -// Starts express app. -const app = express(); - -// Serves main page and initialises port. -app.use(express.static('client')); - -// Set PORT -const PORT = process.env.PORT || 8080; - -// App Listening -app.listen(PORT, () => { - console.log(`Server started at port ${PORT}`) -}); - diff --git a/client/about/index.html.tmp b/client/about/index.html.tmp deleted file mode 100644 index af5645ee338f0b1ca504ed060594b474c72b88a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125243 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 J 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 diff --git a/client/app.js b/client/app.js deleted file mode 100644 index a3d0c95..0000000 --- a/client/app.js +++ /dev/null @@ -1,133 +0,0 @@ -/* ----------------------------------------------- -/* How to use? : Check the GitHub README -/* ----------------------------------------------- */ - -/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */ -/* -particlesJS.load('particles-js', 'particles.json', function() { - console.log('particles.js loaded - callback'); -}); -*/ - -/* Otherwise just put the config content (json): */ - -particlesJS('particles-js', - - { - "particles": { - "number": { - "value": 80, - "density": { - "enable": true, - "value_area": 800 - } - }, - "color": { - "value": "#ffffff" - }, - "shape": { - "type": "circle", - "stroke": { - "width": 0, - "color": "#000000" - }, - "polygon": { - "nb_sides": 5 - }, - "image": { - "src": "img/github.svg", - "width": 100, - "height": 100 - } - }, - "opacity": { - "value": 0.5, - "random": false, - "anim": { - "enable": false, - "speed": 1, - "opacity_min": 0.1, - "sync": false - } - }, - "size": { - "value": 5, - "random": true, - "anim": { - "enable": false, - "speed": 40, - "size_min": 0.1, - "sync": false - } - }, - "line_linked": { - "enable": true, - "distance": 150, - "color": "#ffffff", - "opacity": 0.4, - "width": 1 - }, - "move": { - "enable": true, - "speed": 6, - "direction": "none", - "random": false, - "straight": false, - "out_mode": "out", - "attract": { - "enable": false, - "rotateX": 600, - "rotateY": 1200 - } - } - }, - "interactivity": { - "detect_on": "canvas", - "events": { - "onhover": { - "enable": false, - "mode": "repulse" - }, - "onclick": { - "enable": false, - "mode": "push" - }, - "resize": true - }, - "modes": { - "grab": { - "distance": 400, - "line_linked": { - "opacity": 1 - } - }, - "bubble": { - "distance": 400, - "size": 40, - "duration": 2, - "opacity": 8, - "speed": 3 - }, - "repulse": { - "distance": 200 - }, - "push": { - "particles_nb": 4 - }, - "remove": { - "particles_nb": 2 - } - } - }, - "retina_detect": true, - "config_demo": { - "hide_card": false, - "background_color": "#b61924", - "background_image": "", - "background_position": "50% 50%", - "background_repeat": "no-repeat", - "background_size": "cover" - } - } - -); \ No newline at end of file diff --git a/client/img/enterprise/netlify-enterprise-edge-animated.svg.tmp b/client/img/enterprise/netlify-enterprise-edge-animated.svg.tmp deleted file mode 100644 index 876aa944cc100d5ff7ab3b49e827592ebcbb1129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83514 zcmeI5+m2jGcAiJDuk;jUjt$Jf#p*mCTHTU*NoCJV3Wlj!fdiZatY3I^PfKYPX7J; z&703(zyIEQzxvg$u3p@{dH(F_7gvv8epVlzf1V|9mcUs8X9=7oaF)RDr3Bu4_SvWJ z-Mn~n^Xl_g&tBiW*J^-=W7ET%C!gLteDvbkXOG_8Jh^)P%TIqV1#xETEP=BG&Js9F z;4Fb}kpyn7`_JXTw@CMAR?iYROW-Vlvjo1q5;*Vwe|vR*=KL&yvjol(I7{H$D}nvJ z|8K7p&YYhmaF)PX0%r-FC2*F&SpsJXoF#CUz*z!k37jSH?U2B4;2gl!-+wzqb>{Lc zfwKh85;#lXEP=BG&Js9F;4FdPD+&A>Zl?cx{-0#(|M731Ise}O_rLZ(d>j6s|NdY8 z!CTsAt@X!$`IZmAMiWmdeR}gA4=MfIUw`)eYm9T>OF#YlXP@8qTCe**|My@23+2`2 zW1I5!_kI5T^cOdm7qiX9zkBrJVm6sgE+*^u=iB!u%ZnfV)lZKY@WJCpo5xRPpWHlN zuKE9D^Ju!=tRF3>+fNoxZnm@8!`H8$KYa4^!4YGfyZru1;19lY%e(*EU;mGP{IB2n z&Y!m5f8BonQ~Uj$|6ZT}WBYxoM0#AhHS3p#`MVFl)by=wP*z=DJ+6H4C&b5#U*5cW z{p{t74l82H8O4gUhi+&p~!`J=}-?_YfW>gM&$t6#RiU;ojAKmNlD{(bP|=IQH#`SaDIC(j-||B=6V zj5U+>KOVy7W2SmIn=IB>n~rqJ?QcDpvR|e*q^<4_69D0 z0YQHwbw7Ubv)4BdF8aqmef8+Y>!&YYefHr4o|}F3?APC$O|Leq#T*_d7vlMBez90= zHjAsx#bUButgdF?Zw$$W|2}yA=H=%XFP}bree(wKD3q6j9e&C82Hyy>|wgVH2C8S{@6~I zR~yad*E2p@Y_8@DZ1oHN*v?j0^C`0K7I3nGOk*1Ue7IgOPP2u{mzaL5EzCBzjbXBQ zvVOeYm)6@ZoGs+}P&H4VY#wj#x^TW)+`e!&d-BQSCwE=ASZ{8d-~92Dr%&d0UAWv% zR<}r9-rOvod~(-?>&bL|>%z_E=98PnT^DX9+uIj@vVA(cxzpe`i&+BQo=-pCK3zVY z?a%nZdxti|1yfW4esQaq%bo2;*9GyXW2bK?T!9OrtB^Y=ezoWl^mF>%giE7kec(q-#v zevWhBtYxc3n{f`sOkBce**cqFE!X^EoMY8G%@#}I++uMxnQ+ZH&Yk1j?|#|J_QW?P z&be$I;@om^-k$qr#kuVe=QiwuR+w|Eu2pkJx#@~diE?w&l`GhDlsiYc-+h#ue$(zk z3}KFHU~^u!ev_81(|#Mmdd_<}bsJ)FwdmV(spr;|aCIAEapi*c9O%x0?izHzr9 zR&4lOET)smInaI6Zns*vd5d**HCd%_%O8uYbua0r^T}22U?$LQmRHlod4ulYgur=& z?sv68=T6HvYUR4ANH^JTmsckqCOF@4{q5dxowi#MM!L-=upHIa<;q9TmZO@%p7>BEQokbnRw@k#4?fXG^vV;+b1^ zJ<`pxtToc1$?5ETGvZv+alG}PC(<1rt~)$K=V{KYNTyf)SQMvpmumu`rn{|X&}Pkc z%jkw5;! zKmE@)Up#&F=(C&G7uO&CVE6Ig{N0<2|8g<;H~e_hAINyW;By{f`QCJSHCcTA>q`zL z^K9G}`2CC5j~_k1`QGGebIJej|ItN#^BGUcJbd%)GoFrl`1BVq9>3x5_b(p*;*)2O zAAWN4_s?!#am8wL`EYWzTyo)TeTiz9T>cN7l6mL+6XxcBpLBXT%@u4<%4rx_L5P zvRuPgXG@B)$!494F%K?U|2zgdM4%5J1dg>#uVi{f(aRVYetDjD z5b*mKv#aIni&~IfeDab0h+*U_q{$GCqejB8NF#GIB7qftgDgf(Lp2El(yt zd;Xlgksr+dZ2s{_`)mFW4wb>;AP?M<0KLjg5YAb?_|cEdg-wpahV~S7jqWLt|h8PuL zlmdMcC|_$+vm>K#2#uHM+?Jx6t!c*9adY)YFuZWCW}EvfBRPw z$#5&hm0@r({)S*!2SXIYh!FrJuWf+@blEgKQ&eE>VHSovmgE7akK_|;f*BLMfMo7{ z(E^Tr_$ll_je?v-WpPC?0-mzs%9T(IR(%<9ig0WGhEP{Wmt#+8#}y=Uxi*;$Wz)A=Q5>Y2jG24Yw?O+XO`*j5SNsL~k=&&~Bl=Mk)J6xdQ z)@m?leT@Ze1oX1o8X;yplfJ&*E(2DV4JO2==Hd}Ni)OKw?UNE}Poq4LePwD||oG29!7c!i*#0la+!r3m-hYk1Xb>hU@ zk^o=lHyZ@`J-ha|q{XvAZpknnXuiYA4K-x^YoeN-k1t-L8$(ARZdx671Uw*GTD;@=n)~sJb!>6<1Q&Fyr;FSZOU{ID! zpsEQ=4ca$_(>krZOk_88o@DZba6O3}AQvUl=&l4ki2roe5toetc>6Vyg$&^(5OV-x z5J~3S$qpk`oiY3bS|FFE90JN$h$Ea_50Fu+Z-CdEcd+RuksS`em9T;7N9-GPb}jD$ zeg=49f&S6ZVta;|J8z!vRLee!L@-Njw$KHThQR6a;BlI}?)sTZbKK zmevi1cg-D66|lKnNr1mXBtLhU8RCO#;$~_TgfiQ)sYpMhOHUcyUNV~f1ohF5Sxf)x zYoKO|tz1Hu1Oz7S0@u4LJ+>2#pN~-yAuV-UDJ~ZYPcQ{e?pbV+2$-8NyV$L!aU5iH zy(&3aVFPt110WqF*&0RNr9_zFWD z1!P6Hjm;VPuSs(9OM;Bqne#43ibrnWQfP84=iL=RE449mHOiDRhV^x-C;V@5S$a^V zsiG22=#I_6(^j{UQ`1@LL{2Y>EQ&%Vs<7fR)Eirjc>oor6Es`IKz3Xv8QjuQ!P>tD z#uOn=*y#L9hL5PMu^G*8F8PifN7q(W2a}YRNVUJ-bZ*wQ0AIQ9pJ3x?1kY2gSk67>_34D^m*LwQ>Kqe+Bz?v}jMnNO@ObqASrDs}doHjqS}f(1~>h zph|Rx0YX`C#ff`gXsd{0q=O`R$6&oWCdayM7HT1?%W0mUjvHaaF! zr;qKacO&tP73-Aj74bS%Fl^P@NHK)n(qV~V6c6i9CR7fj2UMe(&t_C@Q98x|#tu{Z z*k>K3DBml26f- zgn1FhoW&lHWmj3S5*r}Pv);;*r1wQ>lFpy#X<&P_wnGQ|;Jr`l-A^CX#$dZ8w7(KHw=?_*FVN=Y!!O(+PMm(_mi&xLT_uU`0cPKubeE$yKIU5n)i3AGORP?pD zY2$>_am<0b@6N7QAHC(Biiex498fHUBq=UqA59n#NhslGSqqVHS;E7n3lmBZOkKH; zHzN^~)poJ@;T@9U$W9TFOz-9(k}2~AN4HGP0TXrGT?>uT2Yt?y9LipdiC9!w5TE%s zKT{Gxv^dGZ+KB6jqE%X<4J{`9YM$l>321Q+bCg$eC3|t@v|3Zvo6W(Xc3}O`I;MA7 z2M5L?gElW|5HV|&mXv+oNC57f*TmQzyKJc>22O%38!Hb$Zg5CT^9)PIQId?-yeb>4 zgXBk#K?>!kwI4Z10j)IItam+dkiA-X$O5RzG_nV)M@v2X6oqgBR{BZFBmaXWzx%`d zyTgbE0Y)JVDIpyjzp~wcx)nxtW5DEnup~5d3yQIc{FL8CcJ)L3?dn9+Hflx4nk~jR z%sjg<8(AoF>qa69CslwYH#ShWkdz*Mvc?4aX%?@FV88_R^syxl+xlk()yAR3%v_F; zC0(00rRRXR_hl%~?RjY?DXdl!=7*n>mvBx$C2c0khC{oeWA)Z>de}GhH2oaIMY1EQ zN&ok`YkUlz9;*`>>G8Y#&jF~f5)ZIkv;A zgADvVfI}mA@YOaqUO%#ZR8Z-~-7P&Anfxr>%HTeZXw)KJH0T*YG(DFlO3#=p%$5!r zC3=>zB-pNJMk>4E8pckjnwORpigygUHRU#IDFz!tI7K-&gxi7lt#aR5OC5W@eN;Ku z#Y3o(T>{Il1%FpuFqYc4;g~C$D8dy-f*3!Uyx~LxwFR3=vUP2xrvpqd>_uM*r&1dt zLnM{LzzfDH-v_G-M2p%GVMC@b10{5qh(jMO2&##{7lCj%@;TbkQG)U<8CBwBG&t02 z!N`pzc0}FKla;Q3kk7L|+Le>=@o+P7PDrAezdg`qbuSa@mDzR! zE78=wVEd%*1!Ly}wh*lL%CgnJ*TCp%uE=V1O3%!MFU=jJ&%bvA>8P?{U?#3X8Bo=z zlkL^J=1V3?#o8E7!3Kr^3pvS%7#5QtA90x((ySD*Dxwq=bqYp;C4 ze2Q-A&s_ejD8-s}=d}@T;)NcX8)U?Dy{&MH4XGd5KdSQWH4f}Z64Qlcr^|A=v6)~p zVn`~M(LfT5ELU|?EJsU?Wz23jvQsSUT?t~1<%Imka)~rS57FTSj6;90vs4vPB8?@{ zjz}B*NfBTL6On=ySmtVd;A<4pQT0t1QpG@6U+r2vWM>;(gu-gI@qG7oB^ytU^zlSbOSc7BW`Ig<%LFgLRgHU zqb1JNJR`3s3d=8N*((O&KD9^W0L@4b>!ww2_-)G}#UPTh4nvVglu}nnS#U;q{mDl)g06XA5V; zvebqjX=+iSC#4DQ7sE&**-#>_-j3RYYwlS#P&9jLB-n(zwN z+{*xga%1n>Wd(%^UvPyt$3m<}DMd$O!J`AZAv<0LKCo?~nt$fGruz)lybA^Gg*& zA6y8B6|+{;F7p+>3xRdv-Uz5Fzv zR+ZK%K+}x^sJX9Zl8KD%5L=j757OLV8J)5X-sNhy7V7oh0&2|Pe6?f;axDTccst-tJ|z28`A`Q z#!twqVD`_BH zav+hDgdRSda>8)F<47DmIatEE@%Zm{a>-daWK0|LM2JACi#4vX2Skxl53EfV{aR|{ z<+WymBL;aXTOnf32?(0hDm~Yj(MW9KZ@7>+6Z! zqA}Rv2uF_O02wrQ6@WQE&eg&lM+dbGl+elAV{7tf$o7sb?R&pui%CnI9A)n_p``>M zW&%dAK-5tlk0zv*%Q$%5AszM>+1J}2E`NCN)nRYhR-CpNRD6e<935lwnUaEc<06RD zD;mWL?PC$Um==tCVBW*;97D>nB+V{HxtZ-W0?de$Gk7XqfE|I6IT*8;r0~ILXqhZ_ zSP~r|0Yi&F8?x%zggWIp(m2X_vE`8HT?ZyQlNu-z!+}s&l4rptsxH}@GujHkc-P}jzxxZf{Jw@?C`LL zRU>G=!vIh_vGsaG{Lw@?6WM;#dqdQo!2X0PisvnYVgXsemrZbduXKZrC&w^7C*JI9 z#HwEdT_aydrJB6}La^|@AXba^mOfI0t~>#}hf1INHN8c873i4pYnmTHaQHbaftP|-E=H90DR^uVaZ3=KYa!`z%UcG&pQ0pc^P-A8ih zj|E2#-I{azMp~VQf2lQ>deb+94IiF|JA>cBFNdZC${ieHZfz37gsB5E| z5z=qwX!c|JdVET#pJm_%8-1rT*s>aNLPk(Xiy_2|_?&SA((yjy2Jyn$0>nd922Q-9 zBTElHo$aPX2cu!#%h`__9ZPHVQ3iMI_`@)t}K3KM~D|HtHt{gB_mU4pm8!C!MK52Lq-cc*{z5#5iWSKdI(X5*} z70vn!tY)Kob7Qcq7WQeSjuBG&7h76FU7H;gFrtt}`a2VK8@+3-n34>v5K{OLcuntW zw-D+$ifq@C+?c7+KC*t)Qm5NZ+h)U2b{@osJqXn%q6J^>kTca;3GU%#dMh3@l-`B4 zp}Gsj-L z6_ACG!qQd}Gr%iYNX&o*jW-(|EBXx#6f<1olkP(+f4A$hOs<&G6a>qRT}Xl=bXK4OSl5PI)*-w1=nxmf1uKu*?>=80;7VV7=O_ zI7!rivAPyv$RzzC6dM_$23SEQI)G8afVH%0&#pkjQ6(7rgkrCCL|RAIkBS-t>+w8@ zW6P?%9PFAiz7JN?F;z5!Ee#mEXqaHv;|3aoq;_r09Lxx|!%ofR!cnZ|WjOJH(PgIN zWqQjRB1rGTL)=*McN-7dPh|cuYUEkY=Hb*eG82QM=4$bPC%9xix?Ayy+DXLe=oK6CD09aynmbNJYJDP@x{}qFR+yL}?IZK|h#8P) zj)*}?Dr6^4fMKNJB@9<9WTZFjAr$<>T4_l1|(JGaa~?(J?y4HX5eFETq2D z13iMZq(qIwtV3~;xmEIfXs$Fld^-lGvl0LIQF;>*Zq$gf#qJR>&`~65p@G+!Y_dvKxVchq$4r(qG16 zYjrJnh#R&uzC_~$^p5X?6;xsZc!(Q}uBD|N$`pRbQjlxwR;wdQ`+Zr@q)ZJn<>e5n zZNvq@uvAe2tW!kq^IFpoN7PYz7lxR2Wvm2DYNU^%t(hp_U?yy%Yp$wT0hY1E2e6_l zT%zq53TW5HYae-_{zUeN`xTJK`ZRBKkQR9Ktq$tM&1)d$z&`H?cdgAM5`jKmY)7`7 zpw+iOu*XOn+inO$r(n~K0fB77#0|1B-XJF8Mjq2-ZQP*VSeHQ^BR4WfE|1#3nYPFI z^00MQ!8=wB%1|w=WX%d1l4V$59^iD>AnERUfH3Ms?ntzOaK&8>4^wPdRuQ5T1JP6V z@&^d3X`QiU*?`i@MJ&?UuZ+N5uaB&@t=9e5qb=^b9o5nzcgc_(TIDvO>b26R7%Z1V zr+r^wF+e}Iry;QQw2;izwDHc8jJUoA*w1+3y|_SL15%JqcCb|sYJF`0Hj2K);8&l6 zX_?Nf&Zzi+JAFV7Iq}|!cxBEzt+hJZt}83^WH+GPhWm;Q`k`$SSN(vz^r}c>n={@| z+s2`5LOZ?Q1s=v_c@VJ?BaDtkY_l0%17weC@4bjD4Rgg8Y@AhE=*B3y8wzs2z zPD|@Gce^D<=>erc?;IenRI66i(E3`)wGn7_3dgk;20EKtD+AnHA|9oL#sjYgV#AD^ zH4e@W8TX))MBHw5Ph9%V4+CUlzFOHqFOXY$xyXoRPwC7JC#l3GygB1Qasb55fo$X# zbQ8ZIlX7<|tsIm9a1nc~LcxhnvY(PXA8P=vsS!{e&{HXuen=(*q_%5G2`@?df(|@_ zsFfJYOC4$`+me+y;ljP!cykWEw4{@$U8#sr)v^+gljZ&rW9HOuT?QmrW5u?OjNT(F zc}~!*B&#Thtb_o8(yR$;^c^aa@{x@>skw`(sQigkRs$h9GYye}(=B<~h~}c^X;nE| z`T$`yt<;#@LXXUHdJ%}_1G(vzykzUh?AOjq+FJ4wO!mB#`n+-wu;-=evgIW_vgajW zvYKczzj{9tmUuce0aP z^wOS}61tx608E-J1Xo1*4vC$CkW#rxntEoVtz{=g(NYqS4#WJT{ErHZhuMiO zd+1A|$WDG`67P$&{9WM6Qz0_V9!s*VsaU97y-sxexkMKCyUOOpQPbLHSFc5 zdCyO59rXO<&AFD8IEUBs6R_teUe{FlDNzcj(8v5_D_Ms&U7)3!F+b7T^AltC{KTX^ zKXDqlF3O78f#zQ)Ke3^~>-);N38gJRL1a%#Nh_7AJZ0MQ6PDid6JF8t6NiIpDBF^s zSTOed$Bc@e+nOm0;Ff%h#RKG=M^X}}ra1^v(0UU{ zcFN&qpzPB+vih~N6E?L-cADjAWig0;D-OCqZIG?8mYw3IwQAB!vud(!SJ_3ewRIDw zf;f!fW#tW$)~n6L1k?$%a-gA!hA%OALUzJ6vb14RZn9Ty(nphPt z=*6_Qj5Mb$`6yLmhi$b4A*7&WBWZFVug-$9#vHQ|*QbM#n)yewKdLC$%SP-ZZe0UW z00TKCm(;>8b)}nZKn{?1T4s^t4qVGeiA!}6kh6jr%GTr~A~CPO%+e>Dg+R^Gor4D5 zMlQ(wd9NQGq^e~ko+B|I*>WP6`zt2zjJAx#(0m>`qdw?eI3(hXvDEhFjvwT-7g z5U~zX_hx6bZ%OF3CnRQ5rIZO!D()0UHR$F?p5vXH=>Z5vs=M^4J^ z+sa9BSUHJA8JZ1lV@_guM)D2Scuvnrz{*LuP#b2DacK=mX+eEm6hVZxgPIr zS;-2cWhEZ+uKW{AA7GM}a&;Y2SqYfslfjABFR}R5S*eGY(#x2Y@XE?cID?5puV`5b zKV^}TRODuThhtU>ah1V^@+D{2Bl^1l{wqD{M1XLw20f}=_ zgRRL+0K#=L5Ens8hvc=&R+WxIQ@`5a)YeOiCaH+4`MATAL&iZ~qNK`F#yUzOYPAGp zO_0oFYs*YP=1peeI~y9vYOvbc0;$Kgc74{9$xH}2m-8^c(EM*L! zSqvqQSQEGGVr$Dy^kv#)Cty!ha@+D#v6%b>97f2Jvc^sFP9|i8bZ}y57`S5UxEf z(ppv`Jtk@8)p`R={vtioYNjeWM>daA)qaBF;6qPP#?qFcAhTzsWR*%#ELwVkG7_`| z6~C_pg*W#EWor@?$CY}50;x|R9VZT7 zE$vAgmvSb&pj#ky5ybWMB%LFpUpqZ%Ye`S=)zcHOrzc=fPq<}IPe9f>DZYVp&^*WV zq~Kb5;yxwj#CRBY)Rl1UMIZ%a^lLuMr? zU{5i&CP4vug5si{pyab9D0re(I=$iB(%W8wig5a*MAr`YQq)n)z8)JZLHKUbwxI{? zDGG>$lA>&FDGJzA)Uu~2S#3+FCH!UKq)__RV}eo=Eh_;jHjA`a)L{6tE{Kd2I=*7)*kau9o6#ZQFT3MARon1|9AtsFRdn;5X#9 z1hwi3il^avf&%6)l99<+TnUOG)e{u3Cn#V~P_`yP5wCiJ0`>$2>2_EHRc}s!?fay%!4Zk(AcC&x8Xn zDg_^6}!9l7KxW@%<((`HU&aVz;FvVo4<= zVoA31Q0Dr}&UXKE57^Kw>4*hqvJJunqSMsoE<-!y(VMnfifdLnio=?YY}=7pi1(Hj zEgb>L&Z^s#oP1L-`AX;&m5^fDZ3L(~(M%84OE_5;HBOL4QEZKec}*v_v=tMOc%2*s zB=Qs_{)aY-%oV@loFgX3hGg4v|(kn5|jp{iY zM!0d$Mz$s!VPicT#hzQbarg$uY_#dwNSazcs;7`KXxm0M?~#!<$w;!9J0m&901U-0 zUv!2zfGaYRZjLK~VWh0{QgH*xqWaww2rmW0Y9J4o=KLNL z=ebon-~sh6j!1p;o6Jq-g5)MSYdd*BG@RVT_kT6O;f9u(;;Xb83&}Q$jrCH?OUR0T z)=!EJQ6w+L&Ig#p<<(pV&7;=$z0$49hT_lU;RIO;RbEOocK9q6qKbGb zK0*jz5gZGUZ(3fWY@n@N)6`R>wY&tC#GabP05eRur<|iI+=I-d!?w)CfFz$}CLqx- z`mi;biJnZFgam|?%1uV30lGR0!~JR*ZrKS4d&y2*Plpaq4j2bJdCZ;UfyDwLAbBJd zRc^7hWhWr>CJ(_D)O3jY3Wmoll@v_NZ*t!9Q^_c~5ST?-O?;{WbtNQKAnB}Q^w6w? zl1n0>$}qOJ90g?BWFsIMrl7^;0AVsY3VyThGD2rHS>r}bed2VeiT8@^lgb1GKaWCj zTPS&jM})Ef!XbgIWs-w{$wAU$JZ`OA(UKG-Co_4OSG2)sO_EwOW>ORq$&m*8=@ONq zfF#LeD@aK?qk~l0fk}ZbtE%mO-d@MSRgvfaT{s+I_N=BmPvFwdZ3GX>2YXf~n929C zoAr!C)Np4zBbFX&^oB=Lk8+cvFME2*u$%^%i0x+WQ7>8hnYc1Os>Y0H3iaUKqm>bpg z{iE5z^|F=U2Z+Le`MO8Lp%aWOjUqYfNug=`RvGT?F&13q>;0fs2-5+3Om9b~sgJN4 zh1U?2un>0~5Q}gA7ok-rS(3msm%wzs*H3e2OR#;7-I}ioD<9;;23kuIGmtp&c=*!9 z)m<-5Y;gt4W9E_W5goxnUA$Uhl6{ncoReOo>9LRS&({c6Kx+CYvvvKKfL4C{pGrpn zN>H(m5DD%jiR0d%*)nu#!!)#uil_xuAQp;9RG_{gZAL25)akK)?NO>xb@u1WYJn@Q zmaFKHFHF^tEVi&usLoixvYKuCszYWChq{Qx0)sK`n(tn7lisQsw}{ z+U*|tWA{u8S9}v(;}qD4;fh@&(ZUE>8EY)u2eI+Jk)%xmVwy(VV*vN=xg@Jv&!O(`(;$nQD?Kt=P;>4Z0&TKw4|eb-&uU*TzgN z>yyG>hkL7tqr!Vvv3Cv(K?KW!d4xVUB3#=93yF>%*EO3~1 zowtbEXtedI;IG5I#q3E`mxVLmbzI6tHo}U#F+U2ZxQf)|LYnwk(S_9!qLgaQ_0`wA zJh|RYW5)C%E7UfV+vdZh_pF%9Ss|JP9ka#&d0AggOi1AA)lb4-%K7neDiAk5btt6$1L-CC>jq&mYJK?4(3 zq;&L;qe{9SHM>(Tq#nkc)@WFv0kRKZb%4{l%p*j=9$A6K7vJ?+frAb^2rtf3fRtk^ zm*(Sv)qx_U#~UK@03FOJj6lE&B73`ZM_Fbomk!m5Y~dH0ONW_efL)y-MI~v2QK!$z zG<8z0tIigqu7N#rMV)G=ee50#7fHP(JdBiOgr~9=H0ui94%C!ocqm1~QytCP?AvTm zX+!_0`lHIEgUXS8-)*ZL3B@pz%CTT&KbBdoa*VS=BGVSE{K?N&NaeB!bVR(grPSwQ zE48ELCh0_5qDn9eGa$j3Zv!rCHhPqNX+?k)j)~!>6XhdG%%D&#xqwQ-34rS2VAtj- zq0HLX^`MtxFW+p9UBan}G{r%3Hv|x0@PUN(1^Z>t$Q{G_4HX=~YxJ;L7cDzPsUFH@ zSf`F$<6Xe09)kd4Te)7SnUrvPYmqY$IjH`yg4oNisDT&T8^ z|FoBkN}{SquN}y_NA=hRg3L<_74TXehOTMNcSoysK2wgm&zcS{HY>v{^N-$HgNt!IVIluimcBVsXHfKy(H6ug(UpwOJ+0Pi^_;76NL{o|}cuFW^2`dY`@9K2X7_YMmQr*UE*BAhLsk)0ZhOTkXiG zls7f369UnKKU*}A0L58UrI2KV#hzInl`FcC;@|`u%9IY7G_@nan3?KcYBXz9cH*iM z6RQUZc?n?*1x@yBMQHP-Ry*QqeB5Rlz`ZNq)NqWM63>}ZFs61ifVLVCXo1+GaaE7B z!Cc~VYR9^=`uKtNOo*lCtkHaMr%FazDa3}E2P-|TW-pUtf3j7Nj0(9)Hcp%BkF=5; zBwKu#DiKI&STGfHhv|TYk;37y09>bbq%DKXll!1mI|BFar5$B8Eu=Qz;rf=s^@UbD zVxO3N_Z|eCVq-zwQ~v1gAQ2x6LCD6FfWDDJ+oIKu3^Z-EBao7@!U{!Xb8OR0RWfL+ z)sD!Hp(P!wbv_%-^{A5JppL@q*d$2x z!EwD=tD_30j^Ye5%1tDs#>(0pLo686rUM0k+&`BkL5xVdu1X5T2B(&Ut#aZmK`=#F zDyevMv%+3SEqfKE=Nnj!E2pt8Fv0@q3Pi}cUf3$Bz1AYBq|C4b zr-vDJdi0lkXIpC|e?&(x(kdwEY{isU4;0;_n1au~JA>{qyW}UcYe^|PMpfZNjLH^= zQlcfh{YAwwU+6t+Ut`ni1@0TQdLg%wHBnenixx|2I!?(;X1IVR6qQXlEFh)}#V8(_ zO*kQjs^LPN+v(SSrze195Kmxma&Ik7yg>n@^1-&eKF9Sr)RUq49&HWKcn@uZkZ-B| z*l+J5Q; zwj%@0!DOl!P4P)^uy9ghRzO6cRzopf3a4^4GGA&a=Iguhz(`Vhq;6zz5Y=hfJP{4Y z?K^M`*mvN7%vA@;%xKm|A*kvlAoHhmqG#WMYuD3LCAO;*%Tk#oL{t?8B%crS-;@4S zGx#tP>=2?;`7lARha{%eQ9wFanWo+=Kn*C!ay69{5HX~d0>XQZ=*@;> z@&}ca*S8doJ!TiKT!tBw`Vs|zm^_dWmMAdKwv9b&+XfF4u9}wsvvH#vX#4!IueQ$* z`|5WTAg~A|F=v7Z5~!Uj3Zqho<>?39o?cCL7Rx=EyuxH^odL?CL8ljsJo03Wr-k}T z2K~@|ovNi6bJ=PsAlvgLDN2GGhR`c}lmyDkMCnl0!oU(+)}Ym)m$itg?@R$1GE!lJ z=%vKApG4Ll&9`@b^+hi%iQX{8E6|oZU(Sax^0qDC9^&XGDqlNeJ1&-YlPM~TgZA#Q zhLhcS^S>{9>Q{2;MQR-+(0Oty#wmFgjzG#SUyq}zV4#=F;f!~9)QeFmEQ%D~-@{c6 zyYp-xh(nwxf@>iT29P9Jt#rneaL0SDeN^2!>tdp6C=t|a8W|I|nT40Ypf)g{=KW7o zU#=e^ARstj73X_UA>`0%guvxZ3^|}%VnFeO7+{M@DBxk8sdxjGh`~crFj@(Nd+m+9 zk?bKZ+)BR3e!nzlxiHGEO8IYEMG;-A=q*}>PL&Y7mTuM_M^-foXB=uE>ZG!(gs%Fv z$59@huj#VMY#LFl*O>__NL6(mU`H9rIBp}WeUCxckws9mV4w%YoR1R1U8E`BEs>*c zIszdqn#FMVo`K6^tX)u-MV5LUvP-b2 zF_;x;Hj@rUKdLQ#Dwe?jeUyHp_sIAl!;>ntdRu?ofv+md`W)9_+L@-4RFGG&h><9m zB^}rviG5(?)-a_VeX6}iss34Dv~dzoGkOY=HfL6`!~A>at&ZA;X`6TXiZ{sf)@aAc z4^+;QjfX+13riTLhc^#o9l3+`$3(VD+_r>_dfZ4QZ*e$i*pYmlGr)F|=tGQv;5$&y> zjx)63u0z&CGPCndljW|a*2IFcX0TSCVgw8UU|bq!)laFG^(@KdJ5l(wVhWhi!0AH( zs9?YX3U;eEK9x5!#nI3t+mi}Q~u|+(zmUv(doS;EpMFacv%@W92`1}B;2YU{=$`C~O z&uGCJtwIwN(B9}C89&M+d$}@bT4qb5A!)!e-rLuMrdg$gDA{p!)HNNmZJNg4V4`a> zx(;hPMMcOGRP~4*aiwDQyd@(BVKXpU7F9~H#{x>qMk_m(T|x(~C1QHD9`G{?=cru5EC4u zEP?cP2x>h*1G~2hnPa~%yH%u7oi06qrbAu6bf_r07BP)zv0bfD`alCg_bF`Q-tw*F zU>wm6Mq{YtNnwbkiV2uVvkKdN%qSxn#}&5i1;^bisls+mWgb{Z)ta1J?EKI%44rh) zF9`e5DMq-)&7lYVaDbS^Qh@`Exj-`)f+@zUu;ogNF-@!%#?6g1=ajZnX24ZaUz&)r z4y+)+EV@i6Xs!gI1J}2#;pi{NZq=QedQNL-PvnA8#SH^(;&=-aS6LciX%x6bFKk%_ zBy_p7Sbeg$WH_kG>|duE%@k{+)G4ZtwJ3sC#21F*bO0|Xh19A zn6p+3Mxsnk-T}jwgrvP>PtTF@L59aw8$IEsl+-IMiz+Ze24!a|3Xt1EVkBxYu0m>A}Tl>zT$Sea5d$%c0W5_JSz)aDQ z1gD&Zq#y}3W>;}4wnyZxAO;LU=_A8c2q#oiEvV-#T)=8SixqIq2CB8aF+|0<>^ni8QjR=0eet8@zPw2!PGRm}FXcEN89MSY{a$mi0}TmE{Od-wdk=LSdBg{hAxP1cq`AQsF!$a!>R0e4n~1w*#d^>(o4gs?7-d~j8)`X zDASZ2vO)Z_6*x?4NKj8i3e$0mNtUa-zj+h-5(Ogj_ju>D9j1^R!w|2)YRUVwTEnI~#K-cQXgW>$X z*AhW0f)c@cPXw^UWcmVvbZ-duxuA#<$4E;oLwgZ65w{JO!a<<5yr>s@C(_jF>j! z=33&ZwO$6)uoX9dSEa|)*i3VYR5Q(0vXX8tl-F5|R1bXLvWa7#>}W*~nnbjz_L5SV z7}B)qHf<6`YCY9}3xrcH%QuoVThRS+YFhgyCa^C9fo&6084qR^p4-4+{eX#ms#0l6 zL}7g=PrX%@#t_!csrJCk3NDjIGhluy<)PY3Ag3LcpoG!dIE*mJ@IKWZ-=^DYE=qai zU`^&TfmNrOe)&ALUS*N0>P)TlN%X5Fz<_P9{#pOFac~3YVeCY!s`9|F+3?(Xa<&+Y)_M^)M_yEGn=%J-gS?9Z(!KL zl4^@duz9)&N$hG2yJcZog(#RG8P2kzF^qTycC-OlWjy^Z;Q=vtT?vp7ABNGd0+it( z{%*6Ru4ne@Vc`^2F^UyN5*nC@0Nz&{3Xr2wJYTN(K6vlbKmNlD{*B<%i)T+he6ahA zAN~1HAMCx%=fTD6H(xxz`S8J`7tcO>^yb;i7w=#2O!n)G=g(f;JbHEU$;&rCzsOa8 z_vZ3lpS=8|2Q^)${QMD@JbwP@_3IBGynZupPc0CQ^CBD`UR6Lmkk=5q1XPE9IwC(E z_`8*$4j&x&;MQ#IusoY)JY~*-@Vpx!zZD|@>2+X_cg=EmO#SvO?F=EYjQ2KJ^lH<4 zh_xSWemWxiy<@i7;R(Lmv$b<;yaaJ8^c&hKH3nqAcg;2)9J_5E*SjD8 z?9UF(y+s*t3 zA8+sYPOo{piOoT7f~XPGH`~Zn$ck^#_aP$3ML5 zo5bdw!5lU7SwzYcD*+y>Bjj*OhPSnN9LBdUr*g|N$LpvJ5`nDbTR$Rx*^tw& z2CdB{Cw+}hW-wr_;MqM+O_6UmOzn{yc^(7jt0Yl3>lT+f20$E}n|sTv7t+Q zQ(RJGAfFJ#5S)Gj`Y2|5Bdh1*a-g!kks_z`7#f}jv5tB<$r^Y|9N&La%RYp6O(dI_ zZ1hS~#MhDyCW|dYDE34qF#EO{M|zL5qkaSaW5X8jT1r$&WeUW;DLQGz7gD<- zBp|KQhKEp}pbic@G7M#i4u@*FEE@!M91hu{MEo~}83NQ7Q}pJIwN~_Q93#Lf<{aPT zrBG60;YKhiLK2d=RDnZ}TkZ^r9bht!hB&Dm?OXLJ8RM7ewTi`QYqRw!~5A@e!P}7*>PfCRjc$+@tb3zzU(l)jPdsIO3 zUF!oNg2WNA-<%`}Bg8X0%=;o3m-Vfiu{z~T3ewy>VL%);+N)RI4rDObNGPlvRf>RC zt^^fizcU$-IG8RF^&xC7ihb9Po1}2w8PCcN1@YA~KFUmrh<}n~2FFbD#UIfu^1^|M z9#!0u7BXgiAFru&3oX!5Im2|8y=B84!O!F6yt6RtJ*oDsHw0W6W3qf!`#;4ju9p%s zD;CUU=U$4%%EEVjna})wH?_*hJkqBYapJU$RdTZHKpB$D=w~FJocg5}uCB)J)5{pHn*C4Di zwxX6}pIOZiNj4^HG|$!zQX;SWo7WWPC-Qf5#qqGy8g~@oa=o2jADpPYUAQ%hHn@uF zL9zG=Cggj%2p4&;qkhG~ZC?1LNo#f$$d^!}ffy&QK}k5|Nz3kVP;D&NcdX4hHI4mT zgGdwx8e&;yC1%v@C(zwrN|{oJQhT+dd?9RMb`~kq+?ey7CpnTqK!N92;YO4^-inM$cpR%gY z#&M6gG4!rHlEY$ch0<1^-D6ZFg5J56tu4lLs9C&Q>qCpkvVHolkrPrrc<=QuS>Sx9 G{rmq&D20yz diff --git a/client/img/enterprise/netlify-enterprise-performance-animated.svg.tmp b/client/img/enterprise/netlify-enterprise-performance-animated.svg.tmp deleted file mode 100644 index ab6cbcd82f55dafaec480b0bda44877b08479349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53378 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 YSJT4G@Q@7K<@EWp>(5E2AEkf)3%(R*)c^nh diff --git a/client/img/enterprise/netlify-enterprise-secure-animated.svg.tmp b/client/img/enterprise/netlify-enterprise-secure-animated.svg.tmp deleted file mode 100644 index e6b355ab1324dd2b10a05fb0be86e13eb5b7dcb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30648 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 MQ=fm_{_)!X0( - Back Bend - Lunge Rotate - Calf Tense - Shoulder Relax - Neck Soother - Ankle Rolling - Chest Expand - `; - - console.log("Hello World"); - - if (URLno == 1) { - document.getElementById("sequence").sequence.innerHTML = ``; - } -} - -async function loop(timestamp) { - webcam.update(); // update the webcam frame - - await predict(); - window.requestAnimationFrame(loop); -} - -async function predict() { - let { pose, posenetOutput } = await model.estimatePose(webcam.canvas); - let prediction = await model.predict(posenetOutput); - - // Prediction #1: run input through posenet - // estimatePose can take in an image, video or canvas html element - - // Prediction 2: run input through teachable machine classification model - - // Prediction 2: run input through teachable machine classification model - - for (let i = 0; i < maxPredictions; i++) { - prediction[i].className = - prediction[i].className == "Knees too bent" - ? "Knees Too Bent" - : prediction[i].className; - const classPrediction = - prediction[i].className + - ": " + - (prediction[i].probability * 100).toFixed(0) + - "%" + - `
-
-
`; - - labelContainer.childNodes[i].innerHTML = classPrediction; - if (prediction[i].probability > CONFIDENCE_BENCHMARK) { - if (currentPosture_and_stream.Posture == prediction[i].className) { - console.log( - currentPosture_and_stream.Streak, - lastCall, - prediction[i].className - ); - if (currentPosture_and_stream.Streak > STREAK) { - console.log("Mumba", lastCall, no_stretch); - if (lastCall != prediction[i].className) { - console.log( - "Has been " + - prediction[i].className + - " " + - STREAK + - " times in a row" - ); - // Current Status - footer.innerHTML = "Status: " + prediction[i].className; - - lastCall = prediction[i].className; - var msg = new SpeechSynthesisUtterance( - prediction[i].className - ); - web.addMessage(prediction[i].className); - console.log(prediction[i].className) - web.processMessages(); - - // window.speechSynthesis.speak(msg); - } else { - if (no_stretch == 1 && lastCall == "Correct Bend") { - console.log(msg, "yeeepo"); - var msg = new SpeechSynthesisUtterance( - "." - - ); - - - // window.speechSynthesis.speak(msg); - web.addMessage("Hold there for 10 seconds. Finished Back Bend"); - web.processMessages(); - flag = false; - console.log("start" + no_stretch); - document.getElementById( - "stretch" + no_stretch - ).style.background = "green"; - no_stretch += 1; - init(1); - } else if ( - no_stretch == 2 && - lastCall == "Correct Lunge" - ) { - var msg = new SpeechSynthesisUtterance( - "Finished Lunge Rotate" - ); - window.speechSynthesis.speak(msg); - flag = false; - console.log("start" + no_stretch); - document.getElementById( - "stretch" + no_stretch.toString() - ).style.background = "green"; - no_stretch += 1; - } else if (no_stretch == 3) { - var msg = new SpeechSynthesisUtterance( - "Finished Stretches. This continues your 3 day streak" - ); - window.speechSynthesis.speak(msg); - no_stretch += 1; - } - } - } else { - console.log("streak", currentPosture_and_stream.Streak); - currentPosture_and_stream.Streak += 1; - } - } else { - console.log("Yeahhh"); - currentPosture_and_stream.Posture = prediction[i].className; - currentPosture_and_stream.Streak = 0; - console.log(currentPosture_and_stream.Posture); - } - } - } - - // finally draw the poses - drawPose(pose); -} - -function drawPose(pose) { - ctx.drawImage(webcam.canvas, 0, 0); - // draw the keypoints and skeleton - if (pose) { - const minPartConfidence = 0.5; - tmPose.drawKeypoints(pose.keypoints, minPartConfidence, ctx); - tmPose.drawSkeleton(pose.keypoints, minPartConfidence, ctx); - } -} - -try { - let started = true; - window.SpeechRecognition = - window.webkitSpeechRecognition || window.SpeechRecognition; - let finalTranscript = ""; - let recognition = new window.SpeechRecognition(); - recognition.interimResults = true; - recognition.maxAlternatives = 10; - recognition.continuous = true; - recognition.onresult = event => { - let interimTranscript = ""; - for (let i = event.resultIndex, len = event.results.length;i < len;i++) { - let transcript = event.results[i][0].transcript; - if (transcript.includes("begin")||transcript.toLowerCase().includes("shuru")) { - if (started) { - started = false; - init(0); - - console.log("Begin exercises"); - // Removes the div with the 'div-02' id}} - } - } - if (event.results[i].isFinal) { - finalTranscript += transcript; - - } else { - interimTranscript += transcript; - } - console.log(finalTranscript); - - if (transcript.includes("stop")|| transcript.includes("ruk ja")) { - console.log("TMKC"); - // recognition.abort(); - // recognition.stop(); - // recognition.getTracks().forEach(function(track) { - // track.stop(); - // alert(track); - // }); - webcam.stop(); - document.getElementById("Camera").style.visibility="hidden"; - } - - - if (transcript.includes("leaderboard")) { - // recognition.abort(); - // recognition.stop(); - // recognition.getTracks().forEach(function(track) { - // track.stop(); - // alert(track); - // }); - window.location.href = "/leaderboard.html"; - } - - } - speech.innerHTML = - '' + interimTranscript + ""; - finalTranscript + '' + interimTranscript + ""; - }; - recognition.start(); - started=true; -} catch (err) { - alert( - "Unfortunately, this browser/OS combination is unsupported. For best results, use Google Chrome on Desktop or Android." - ); -} - - -async function postData(url = '', data = {}) { - // Default options are marked with * - const response = await fetch(url, { - method: 'POST', // *GET, POST, PUT, DELETE, etc. - mode: 'cors', // no-cors, *cors, same-origin - cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached - credentials: 'same-origin', // include, *same-origin, omit - headers: { - 'Content-Type': 'application/json' - // 'Content-Type': 'application/x-www-form-urlencoded', - }, - redirect: 'follow', // manual, *follow, error - referrerPolicy: 'no-referrer', // no-referrer, *client - body: JSON.stringify(data) // body data type must match "Content-Type" header - }); - return await response.json(); // parses JSON response into native JavaScript objects - } - - postData('https://api.cognitive.microsofttranslator.com/translate?api-version=3.0', { "Text":"I would really like to drive your car around the block a few times."}) - .then((data) => { - console.log(data); // JSON data parsed by `response.json()` call - }); \ No newline at end of file diff --git a/css/style.css b/css/style.css deleted file mode 100644 index 3fd2bf2..0000000 --- a/css/style.css +++ /dev/null @@ -1,98 +0,0 @@ -/* ============================================================================= - HTML5 CSS Reset Minified - Eric Meyer - ========================================================================== */ - -html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent} -body{line-height:1} -article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block} -nav ul{list-style:none} -blockquote,q{quotes:none} -blockquote:before,blockquote:after,q:before,q:after{content:none} -a{margin:0;padding:0;font-size:100%;vertical-align:baseline;background:transparent;text-decoration:none} -mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold} -del{text-decoration:line-through} -abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help} -table{border-collapse:collapse;border-spacing:0} -hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0} -input,select{vertical-align:middle} -li{list-style:none} - - -/* ============================================================================= - My CSS - ========================================================================== */ - -/* ---- base ---- */ - -html,body{ - width:100%; - height:100%; - background:#111; -} - -html{ - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -body{ - font:normal 75% Arial, Helvetica, sans-serif; -} - -canvas{ - display:block; - vertical-align:bottom; -} - - -/* ---- stats.js ---- */ - -.count-particles{ - background: #000022; - position: absolute; - top: 48px; - left: 0; - width: 80px; - color: #13E8E9; - font-size: .8em; - text-align: left; - text-indent: 4px; - line-height: 14px; - padding-bottom: 2px; - font-family: Helvetica, Arial, sans-serif; - font-weight: bold; -} - -.js-count-particles{ - font-size: 1.1em; -} - -#stats, -.count-particles{ - -webkit-user-select: none; - margin-top: 5px; - margin-left: 5px; -} - -#stats{ - border-radius: 3px 3px 0 0; - overflow: hidden; -} - -.count-particles{ - border-radius: 0 0 3px 3px; -} - - -/* ---- particles.js container ---- */ - -#particles-js{ - width: 100%; - height: 100%; - background-color: #11231f; - background-image: url(''); - background-size: cover; - background-position: 50% 50%; - background-repeat: no-repeat; -} - -/* ---- reset ---- */ body{ margin:0; font:normal 75% Arial, Helvetica, sans-serif; } canvas{ display: block; vertical-align: bottom; } /* ---- particles.js container ---- */ #particles-js{ position:absolute; width: 100%; height: 100%; background-color: #273e3a; background-image: url(""); background-repeat: no-repeat; background-size: cover; background-position: 50% 50%; } /* ---- stats.js ---- */ .count-particles{ background: #000022; position: absolute; top: 48px; left: 0; width: 80px; color: #13E8E9; font-size: .8em; text-align: left; text-indent: 4px; line-height: 14px; padding-bottom: 2px; font-family: Helvetica, Arial, sans-serif; font-weight: bold; } .js-count-particles{ font-size: 1.1em; } #stats, .count-particles{ -webkit-user-select: none; margin-top: 5px; margin-left: 5px; } #stats{ border-radius: 3px 3px 0 0; overflow: hidden; } .count-particles{ border-radius: 0 0 3px 3px; } \ No newline at end of file diff --git a/img/enterprise/netlify-enterprise-edge-animated.svg.tmp b/img/enterprise/netlify-enterprise-edge-animated.svg.tmp deleted file mode 100644 index 876aa944cc100d5ff7ab3b49e827592ebcbb1129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83514 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 G{rmq&D20yz diff --git a/img/enterprise/netlify-enterprise-performance-animated.svg.tmp b/img/enterprise/netlify-enterprise-performance-animated.svg.tmp deleted file mode 100644 index ab6cbcd82f55dafaec480b0bda44877b08479349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53378 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 YSJT4G@Q@7K<@EWp>(5E2AEkf)3%(R*)c^nh diff --git a/img/enterprise/netlify-enterprise-secure-animated.svg.tmp b/img/enterprise/netlify-enterprise-secure-animated.svg.tmp deleted file mode 100644 index e6b355ab1324dd2b10a05fb0be86e13eb5b7dcb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30648 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 diff --git a/img/global/favicon/browserconfig.xml b/img/global/favicon/browserconfig.xml deleted file mode 100644 index cadc027..0000000 --- a/img/global/favicon/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #00c7b7 - - - diff --git a/img/global/favicon/favicon-16x16.png b/img/global/favicon/favicon-16x16.png deleted file mode 100644 index d4898ffc81985becbfd3aacef5fb73c93ef37037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-HD>VB*dUi71Ki z^|4CM&(%vz$xlkvtH>8? ztx|+H{+JOY(tXU6h&ZnOBlp z1hfpQ8|FaVDxhZB=!1d_Dfl390~Q5FjvbecK0KoBxcFVQCIjRClBbJfh=t(N$+mol z40u}SrtxsIC%OIck!d(=Xk?(MsK$0~%0}I-y35rzUR@X$b@Y90WnomqRMD9Kzo#ki z^S@gDj_G&ywk>82XZ~`#-I%C(Ks?AMVuDz}?9^!XOP=%R-I96CsW8V|{_+z|(X5cO z4d-i}nL6+C=UOozQrf$D(eCxHEaosQ*R|fQcXfeEjq_*0ko$F^p97fK9@r-9tgLF- zVrRG1H|mSeQHDPr+g?T}Tw^%8_FTXB|H*MuX{mXPJ03amZ06md(07wv7KDyICUr)2I$d4Y_g>fgKF|Amf6H^<_aASjr@NDkl&TZ}0FZHU zw)YaPu&o;`A$l?s6W@szAk)jq7SK2deF*@7q=`NOtN=Gx44z6h3Xh~l5RBrcxnnA?7P*?weQPpKBJ=HSV>_K-v(_Z zCF`J91OSLHy4c(J1W5AzV@N&@kdK4BxII3*$(~gieh{#SysepP_Vb!w50crDI}_H~ za>(U8l!U8m&z^ia+w7_IT^f+nbUwU{BWDNFuyN1>7OXTKg!KhA?OQndeo?)n^>^W` zmZotWrvGTvU^#lie6AeLl>TtnEitD9KP}f&D_>3NW*zYq_D=Aw2`oSb{8{#ia`v`h z&w^FtfMZQdOSFRHgZi3E89s1SqF6PnhpQvMLwK6&4^5s|vI|$^i!HlXI2M6>;^h5; zq^lpCB+`MWy6q-8cUQU`8gGMLQxwO6sgnDQp{erV^q)FO7H*-Xv+4(DV$;HuXZ43- z;7W2(Q>Z|oPW)N+)Ob29&|KM1IE@^RwDubsEXg(;levunbRAPsaXMI{Ne_oHtEsu| zW&I73rj$0dmRN;*#FSG!7FGX4ua@$P!gg1V?|#KxUT&l8%%feczyaD>#k#lrxlQIs zn`@%B+-0@2o6PKu%PCi31-= zwTi)C>jPGiJ@r#B)>-S-B!cWjfSVoeHhuqG15h#prD&o=iW_Yi$FeWG*cukP8(PLf^;$Q>O2|X<#_etj?~GJ9ns{6k3E!(@CLZr<4Q^X+yixzry)aTu*3c5=PiMs`g|0k zD9It@`VOU*Rqf`4ZBIkH-j(I76kfdfD1=jWF6?agJNNu$T;E3+e$3ud+yb3?__Ege z5-O%^G=oH{;`#@7zQO%MVTat?TeWwJw&(1EP&rHYoooy+z_qEo?x}QTV0YO^#kswK z0x~?w_`$EiULTY74|zXKYbc9%5J(SSjr^m%+isZGWmP9Jzqu}UgEgLZEZ@{B!e)cb zt;z(1G-fRC&*^ohoc9}ui9nKGNR4p7$$!u{VYdZhNtK$Hto3_S+y1L!Dfj1@_iwJz zHs4TQ+)-44Wp<_OI$ts?PFS*uD!5yK1lBlf$Aa6n*98b}t#A;NZ} zU!5_XHEo6`npw{nZP(eX(VQ?zui{EQl6$x@2G*8@5DJqOv?uz52BIV zXrMrg6*SID@p$l%)(8qR{=Xf^2gd1zpEP{CmZ%PYJy8qf<@-T_hUF0975bmVj9 z5^`U*A0?b!z9Q^|fXat-E7;FeUfjKMZX=`^7f_==g&@bC_PobPKCuLjo?gW1sUJ$5 n+_PQxaxebE8VL0%^vEaBeOXz4>BlJH)^Fd%!QH;mHjMK(^@y5< diff --git a/img/global/favicon/manifest.json b/img/global/favicon/manifest.json deleted file mode 100644 index 44b264d..0000000 --- a/img/global/favicon/manifest.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Netlify", - "icons": [ - { - "src": "\/img\/global\/favicon\/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png" - }, - { - "src": "\/img\/global\/favicon\/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image\/png" - } - ], - "background_color": "#ffffff", - "theme_color": "#ffffff", - "display": "standalone" -} diff --git a/img/global/favicon/safari-pinned-tab.svg b/img/global/favicon/safari-pinned-tab.svg deleted file mode 100644 index 776ea95..0000000 --- a/img/global/favicon/safari-pinned-tab.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/img/global/meta-image.jpg b/img/global/meta-image.jpg deleted file mode 100644 index 0a937d52539d3637589ce8649120446ef5f42ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16022 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 diff --git a/index.html b/index.html deleted file mode 100644 index 327554b..0000000 --- a/index.html +++ /dev/null @@ -1,1354 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- -

- One assistant. - One platform. - For Your Good Health. -

- -

- AIDEN is everything you need from your physiotherapist. -

- -
-
- - -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/index.js b/index.js deleted file mode 100644 index 1c0ddbe..0000000 --- a/index.js +++ /dev/null @@ -1,333 +0,0 @@ -// More API functions here: -// https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/pose - -// the link to your model provided by Teachable Machine export panel -const URL2 = "https://teachablemachine.withgoogle.com/models/9o5NXD5r/"; // Lunge -// const URL2 = "https://aiden.blob.core.windows.net/aidenmodels/"; // 2.0 lunge - -// const URL1 = "https://teachablemachine.withgoogle.com/models/nFctljBl/"; // Back bend -const URL1 = "https://teachablemachine.withgoogle.com/models/w_q11QNp/"; // DEMO -// const URL1 = "https://aiden.blob.core.windows.net/aidenmodels/"; // 2.0 metadata.json -let model, model2, webcam, ctx, labelContainer, maxPredictions; - -var bar_colours = [ - "bg-success", - "bg-warning", - "bg-info", - "bg-danger", - "bg-success", - "bg-info", - "bg-warning", - "bg-danger" -]; - -let no_stretch = 1; - -const STREAK = 40; -const CONFIDENCE_BENCHMARK = 0.5; -var currentPosture_and_stream = { Posture: "Unsure", Streak: 1 }; -var lastCall = "Unsure"; -var flag = true; - -async function init(URLno) { - var URL = URL1; - if (URLno == 1) { - URL = URL2; - } - - const modelURL = URL + "model.json"; - const metadataURL = URL + "metadata.json"; - - // load the model and metadata - // Refer to tmPose.loadFromFiles() in the API to support files from a file picker - model = await tmPose.load(modelURL, metadataURL); - maxPredictions = model.getTotalClasses(); - - // Convenience function to setup a webcam - const flip = true; // whether to flip the webcam - webcam = new tmPose.Webcam(parent.innerWidth, parent.innerHeight, flip); // width, height, flip - await webcam.setup(); // request access to the webcam - webcam.play(); - window.requestAnimationFrame(loop); - - // append/get elements to the DOM - const canvas = document.getElementById("canvas"); - canvas.width = parent.innerWidth; - canvas.height = parent.innerHeight; - - ctx = canvas.getContext("2d"); - labelContainer = document.getElementById("label-container"); - for (let i = 0; i < maxPredictions; i++) { - // and class labels - labelContainer.appendChild(document.createElement("div")); - } - // var startmsg = new SpeechSynthesisUtterance( - // "Starting Your Exercises. Beginning with Back Bend Stretch" - // ); - web.addMessage("Starting Your Exercises. Beginning with Back Bend Stretch"); - web.processMessages(); - - if (URLno == 1) { - startmsg = new SpeechSynthesisUtterance( - "." - ); - web.addMessage("Second Exercise. Lunge Rotate Stretch"); - web.processMessages(); - } - window.speechSynthesis.speak(startmsg); - - var el = document.getElementById("filler-label-container"); - el.remove(); - var bel = document.getElementById("speech"); - bel.remove(); - - document.getElementById("sequence").innerHTML = ``; - - console.log("Hello World"); - - if (URLno == 1) { - document.getElementById("sequence").sequence.innerHTML = ``; - } -} - -async function loop(timestamp) { - webcam.update(); // update the webcam frame - - await predict(); - window.requestAnimationFrame(loop); -} - -async function predict() { - let { pose, posenetOutput } = await model.estimatePose(webcam.canvas); - let prediction = await model.predict(posenetOutput); - - // Prediction #1: run input through posenet - // estimatePose can take in an image, video or canvas html element - - // Prediction 2: run input through teachable machine classification model - - // Prediction 2: run input through teachable machine classification model - - for (let i = 0; i < maxPredictions; i++) { - prediction[i].className = - prediction[i].className == "Knees too bent" - ? "Knees Too Bent" - : prediction[i].className; - const classPrediction = - prediction[i].className + - ": " + - (prediction[i].probability * 100).toFixed(0) + - "%" + - `
-
-
`; - - labelContainer.childNodes[i].innerHTML = classPrediction; - if (prediction[i].probability > CONFIDENCE_BENCHMARK) { - if (currentPosture_and_stream.Posture == prediction[i].className) { - console.log( - currentPosture_and_stream.Streak, - lastCall, - prediction[i].className - ); - if (currentPosture_and_stream.Streak > STREAK) { - console.log("Mumba", lastCall, no_stretch); - if (lastCall != prediction[i].className) { - console.log( - "Has been " + - prediction[i].className + - " " + - STREAK + - " times in a row" - ); - // Current Status - footer.innerHTML = "Status: " + prediction[i].className; - - lastCall = prediction[i].className; - var msg = new SpeechSynthesisUtterance( - prediction[i].className - ); - web.addMessage(prediction[i].className); - console.log(prediction[i].className) - web.processMessages(); - - // window.speechSynthesis.speak(msg); - } else { - if (no_stretch == 1 && lastCall == "Correct Bend") { - console.log(msg, "yeeepo"); - var msg = new SpeechSynthesisUtterance( - "." - - ); - - - // window.speechSynthesis.speak(msg); - web.addMessage("Hold there for 10 seconds. Finished Back Bend"); - web.processMessages(); - flag = false; - console.log("start" + no_stretch); - document.getElementById( - "stretch" + no_stretch - ).style.background = "green"; - no_stretch += 1; - init(1); - } else if ( - no_stretch == 2 && - lastCall == "Correct Lunge" - ) { - var msg = new SpeechSynthesisUtterance( - "Finished Lunge Rotate" - ); - window.speechSynthesis.speak(msg); - flag = false; - console.log("start" + no_stretch); - document.getElementById( - "stretch" + no_stretch.toString() - ).style.background = "green"; - no_stretch += 1; - } else if (no_stretch == 3) { - var msg = new SpeechSynthesisUtterance( - "Finished Stretches. This continues your 3 day streak" - ); - window.speechSynthesis.speak(msg); - no_stretch += 1; - } - } - } else { - console.log("streak", currentPosture_and_stream.Streak); - currentPosture_and_stream.Streak += 1; - } - } else { - console.log("Yeahhh"); - currentPosture_and_stream.Posture = prediction[i].className; - currentPosture_and_stream.Streak = 0; - console.log(currentPosture_and_stream.Posture); - } - } - } - - // finally draw the poses - drawPose(pose); -} - -function drawPose(pose) { - ctx.drawImage(webcam.canvas, 0, 0); - // draw the keypoints and skeleton - if (pose) { - const minPartConfidence = 0.5; - tmPose.drawKeypoints(pose.keypoints, minPartConfidence, ctx); - tmPose.drawSkeleton(pose.keypoints, minPartConfidence, ctx); - } -} - -try { - let started = true; - window.SpeechRecognition = - window.webkitSpeechRecognition || window.SpeechRecognition; - let finalTranscript = ""; - let recognition = new window.SpeechRecognition(); - recognition.interimResults = true; - recognition.maxAlternatives = 10; - recognition.continuous = true; - recognition.onresult = event => { - let interimTranscript = ""; - for (let i = event.resultIndex, len = event.results.length;i < len;i++) { - let transcript = event.results[i][0].transcript; - if (transcript.includes("begin")||transcript.toLowerCase().includes("shuru")) { - if (started) { - started = false; - init(0); - - console.log("Begin exercises"); - // Removes the div with the 'div-02' id}} - } - } - if (event.results[i].isFinal) { - finalTranscript += transcript; - - } else { - interimTranscript += transcript; - } - console.log(finalTranscript); - - if (transcript.includes("stop")|| transcript.includes("ruk ja")) { - console.log("TMKC"); - // recognition.abort(); - // recognition.stop(); - // recognition.getTracks().forEach(function(track) { - // track.stop(); - // alert(track); - // }); - webcam.stop(); - document.getElementById("Camera").style.visibility="hidden"; - } - - - if (transcript.includes("leaderboard")) { - // recognition.abort(); - // recognition.stop(); - // recognition.getTracks().forEach(function(track) { - // track.stop(); - // alert(track); - // }); - window.location.href = "/leaderboard.html"; - } - - } - speech.innerHTML = - '' + interimTranscript + ""; - finalTranscript + '' + interimTranscript + ""; - }; - recognition.start(); - started=true; -} catch (err) { - alert( - "Unfortunately, this browser/OS combination is unsupported. For best results, use Google Chrome on Desktop or Android." - ); -} - - -async function postData(url = '', data = {}) { - // Default options are marked with * - const response = await fetch(url, { - method: 'POST', // *GET, POST, PUT, DELETE, etc. - mode: 'cors', // no-cors, *cors, same-origin - cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached - credentials: 'same-origin', // include, *same-origin, omit - headers: { - 'Content-Type': 'application/json' - // 'Content-Type': 'application/x-www-form-urlencoded', - }, - redirect: 'follow', // manual, *follow, error - referrerPolicy: 'no-referrer', // no-referrer, *client - body: JSON.stringify(data) // body data type must match "Content-Type" header - }); - return await response.json(); // parses JSON response into native JavaScript objects - } - - postData('https://api.cognitive.microsofttranslator.com/translate?api-version=3.0', { "Text":"I would really like to drive your car around the block a few times."}) - .then((data) => { - console.log(data); // JSON data parsed by `response.json()` call - }); \ No newline at end of file diff --git a/js/app.js b/js/app.js deleted file mode 100644 index 20533cd..0000000 --- a/js/app.js +++ /dev/null @@ -1,128 +0,0 @@ -/* ----------------------------------------------- -/* How to use? : Check the GitHub README -/* ----------------------------------------------- */ - -/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */ -/* -particlesJS.load('particles-js', 'particles.json', function() { - console.log('particles.js loaded - callback'); -}); -*/ - -/* Otherwise just put the config content (json): */ - -particlesJS('particles-js', - -{ - "particles": { - "number": { - "value": 35, - "density": { - "enable": true, - "value_area": 1657.2100474277727 - } - }, - "color": { - "value": "#ffffff" - }, - "shape": { - "type": "circle", - "stroke": { - "width": 0, - "color": "#000000" - }, - "polygon": { - "nb_sides": 5 - }, - "image": { - "src": "img/github.svg", - "width": 100, - "height": 100 - } - }, - "opacity": { - "value": 0.16572100474277726, - "random": false, - "anim": { - "enable": false, - "speed": 1, - "opacity_min": 0.1, - "sync": false - } - }, - "size": { - "value": 3, - "random": true, - "anim": { - "enable": false, - "speed": 40, - "size_min": 0.1, - "sync": false - } - }, - "line_linked": { - "enable": true, - "distance": 150, - "color": "#ffffff", - "opacity": 0.4, - "width": 1 - }, - "move": { - "enable": true, - "speed": 6, - "direction": "none", - "random": false, - "straight": false, - "out_mode": "out", - "bounce": false, - "attract": { - "enable": false, - "rotateX": 600, - "rotateY": 1200 - } - } - }, - "interactivity": { - "detect_on": "canvas", - "events": { - "onhover": { - "enable": true, - "mode": "repulse" - }, - "onclick": { - "enable": true, - "mode": "push" - }, - "resize": true - }, - "modes": { - "grab": { - "distance": 400, - "line_linked": { - "opacity": 1 - } - }, - "bubble": { - "distance": 400, - "size": 40, - "duration": 2, - "opacity": 8, - "speed": 3 - }, - "repulse": { - "distance": 200, - "duration": 0.4 - }, - "push": { - "particles_nb": 4 - }, - "remove": { - "particles_nb": 2 - } - } - }, - "retina_detect": true -} - - -); \ No newline at end of file diff --git a/js/tf.min.js b/js/tf.min.js deleted file mode 100644 index c3f4d05..0000000 --- a/js/tf.min.js +++ /dev/null @@ -1,3 +0,0 @@ -// @tensorflow/tfjs Copyright 2019 Google -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.tf=t.tf||{})}(this,function(t){"use strict";var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,n)};function n(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}function r(t,e,n,r){return new(n||(n=Promise))(function(a,i){function o(t){try{u(r.next(t))}catch(t){i(t)}}function s(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){t.done?a(t.value):new n(function(e){e(t.value)}).then(o,s)}u((r=r.apply(t,e||[])).next())})}function a(t,e){var n,r,a,i,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n}function f(t,e,n){return Math.max(t,Math.min(e,n))}function d(t){return t%2==0?t:t+1}function m(t){for(var e=0,n=0;n=n?a():setTimeout(o,s)}};o()})}function E(t,e){for(var n=1,r=-1,a=0;a=0)n*=t[a];else if(-1===t[a]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+a);r=a}else if(t[a]<0)throw Error("Shapes can not be < 0. Found "+t[a]+" at dim "+a);if(-1===r){if(e>0&&e!==n)throw Error("Size("+e+") must match the product of shape "+t);return t}if(0===n)throw Error("Cannot infer the missing size in ["+t+"] when there are 0 elements");if(e%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+e+" / "+n);var i=t.slice();return i[r]=e/n,i}function A(t,e){var n=e.length;return g((t=null==t?e.map(function(t,e){return e}):[].concat(t)).every(function(t){return t>=-n&&ts)&&1===t[s]&&(n.push(t[s]),r.push(s)),i[o]<=s&&o++}1!==t[s]&&(n.push(t[s]),r.push(s))}return{newShape:n,keptDims:r}}function T(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);n=new Uint8Array(e)}return n}function D(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else if("bool"===t)n=new Uint8Array(e);else{if("string"!==t)throw new Error("Unknown data type "+t);n=new Array(e)}return n}function O(t,e){for(var n=0;n=0;--r)n[r]=n[r+1]*t[r+1];return n}function q(t,e,n){if("string"===e)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(t)&&(t=b(t)),n&&O(t,e),function(t,e){return t instanceof Float32Array&&"float32"===e||t instanceof Int32Array&&"int32"===e||t instanceof Uint8Array&&"bool"===e}(t,e))return t;if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e){for(var r=new Uint8Array(t.length),a=0;a=0,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+t+"]."})})}function J(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",o().platform.encode(t,e)}function Z(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",o().platform.decode(t,e)}var Q=Object.freeze({shuffle:h,clamp:f,nearestLargerEven:d,sum:m,randUniform:function(t,e){var n=Math.random();return e*n+(1-n)*t},distSquared:function(t,e){for(var n=0,r=0;r0?f:"")+" "}console.log("%c"+s+"\t%c"+o+"\t%c"+u+"D "+c+"\t%c"+l+"\t%c"+p+"\t%c"+i,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},t}(),nt=20,rt=3,at=7;function it(t,e,n){return I(Array.isArray(t)?parseFloat(t[0].toFixed(at))+" + "+parseFloat(t[1].toFixed(at))+"j":B(t)?"'"+t+"'":"bool"===n?ot(t):parseFloat(t.toFixed(at)).toString(),e)}function ot(t){return 0===t?"false":"true"}function st(t){for(var e=[],n=0;n=this.shape[n]){var o="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(o)}n++}for(var s=t[t.length-1],u=0;u1)for(var l=0;lnt){var c=rt*s,p=Array.from(e.slice(0,c)),h=Array.from(e.slice(u-rt*s,u));return"complex64"===r&&(p=st(p),h=st(h)),["["+p.map(function(t,e){return it(t,i[e],r)}).join(", ")+", ..., "+h.map(function(t,e){return it(t,i[u-rt+e],r)}).join(", ")+"]"]}return["["+("complex64"===r?st(e):Array.from(e)).map(function(t,e){return it(t,i[e],r)}).join(", ")+"]"]}var f=n.slice(1),d=a.slice(1),m=a[0]*s,g=[];if(u>nt){for(var v=0;v0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+o+" data ids) after running '"+t+"'")},t.prototype.runKernelFunc=function(t,e,n,r,a,i,o){var s,l=this;void 0===i&&(i=[]),void 0===o&&(o=[]);var c,p=[],h=this.isTapeOn(),f=null!=this.state.activeScope?this.state.activeScope.name:"",d=function(t){h&&(p=t.map(function(t){return l.keep(l.clone(t))}))},m=this.state.numBytes,g=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var v,y=u(r,this.backendName);return c=null!=y?function(){var t=l.backend.numDataIds();v=y.kernelFunc({inputs:e,attrs:a,backend:l.backend});var n=Array.isArray(v)?v:[v];l.shouldCheckForMemLeaks()&&l.checkKernelForMemLeak(f,t,n);var r=n.map(function(t){var e=t.dataId,n=t.shape,r=t.dtype;return l.makeTensorFromDataId(e,n,r)}),s=r.filter(function(t,e){return o[e]});return d(i.slice().concat(s)),r}:function(){var e=l.backend.numDataIds();v=l.tidy(function(){return t(l.backend,d)});var n=Array.isArray(v)?v:[v];return l.shouldCheckForMemLeaks()&&l.checkKernelForMemLeak(f,e,n),n},this.scopedRun(function(){return l.state.kernelDepth++},function(){return l.state.kernelDepth--},function(){s=l.ENV.getBool("DEBUG")?l.profiler.profileKernel(f,e,function(){return c()}):c()}),h&&this.addTapeNode(f,e,s,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:f,bytesAdded:this.state.numBytes-m,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-g,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map(function(t){return e[t].shape}),outputShapes:s.map(function(t){return t.shape})}),Array.isArray(v)?s:s[0]},t.prototype.makeTensor=function(t,e,n,r){if(null==t)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;var a=t;"string"===n&&B(t[0])&&(a=t.map(function(t){return J(t)}));var i=r.write(a,e,n),o=new ht(e,n,i,this.nextTensorId());if(this.incRef(o,r),"string"===n){var s=this.state.tensorInfo.get(i),u=L(a);this.state.numBytes+=u-s.bytes,s.bytes=u}return o},t.prototype.makeTensorFromDataId=function(t,e,n,r){var a=new ht(e,n=n||"float32",t,this.nextTensorId());return this.incRef(a,r),a},t.prototype.makeVariable=function(t,e,n,r){void 0===e&&(e=!0),n=n||this.nextVariableId().toString(),null!=r&&r!==t.dtype&&(t=t.asType(r));var a=new vt(t,e,n,this.nextTensorId());if(null!=this.state.registeredVariables[a.name])throw new Error("Variable with name "+a.name+" was already registered");return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a},t.prototype.incRef=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,"string"===t.dtype&&this.state.numStringTensors++,0===n){this.state.numDataBuffers++;var r=0;"complex64"!==t.dtype&&"string"!==t.dtype&&(r=t.size*z(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:r,refCount:0}),this.state.numBytes+=r}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof vt||this.track(t)},t.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,"string"===t.dtype&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?("complex64"!==t.dtype&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},t.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},t.prototype.disposeVariable=function(t){this.disposeTensor(t),null!=this.state.registeredVariables[t.name]&&delete this.state.registeredVariables[t.name]},t.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},t.prototype.profile=function(t){return r(this,void 0,void 0,function(){var e,n;return a(this,function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(t){return t.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]})})},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n,r,a){var i=this,o={id:this.state.nextTapeNodeId++,name:t,inputs:e,outputs:n,saved:a};null!=r&&(o.gradient=function(t){return t=t.map(function(t,e){if(null==t){var r=n[e],a=X(r.size,r.dtype);return i.makeTensor(a,r.shape,r.dtype)}return t}),r(t.length>1?t:t[0],a)}),this.state.activeTape.push(o)},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},t.prototype.endTape=function(){this.state.gradientDepth--},t.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},t.prototype.endScope=function(t){for(var e=this,n=Nt(t),r=new Set(n.map(function(t){return t.id})),a=0;a0,function(){return"gradients() received an empty list of xs."}),null!=n&&"float32"!==n.dtype)throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var i=this.scopedRun(function(){return a.startTape()},function(){return a.endTape()},function(){return a.tidy("forward",t)});g(i instanceof ht,function(){return"The result y returned by f() must be a tensor."});var o=function(t,e,n){for(var r={},a={},i=0;i=0;i--)for(o=(d=t[i]).inputs,c=0;c0)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",function(){var t,r,s={};s[i.id]=null==n?(r=K(x(t=i.shape),"float32"),At.makeTensor(r,t,"float32")):n,function(t,e,n){for(var r=function(r){var a=e[r],i=[];if(a.outputs.forEach(function(e){var n=t[e.id];null!=n?i.push(n):i.push(null)}),null==a.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+a.name+".");var o=a.gradient(i),s=function(e){if(!(e in o))throw new Error("Cannot backprop through input "+e+". Available gradients found: "+Object.keys(o)+".");var r=n(function(){return o[e]()});if("float32"!==r.dtype)throw new Error("Error in gradient for op "+a.name+". The gradient of input "+e+" must have 'float32' dtype, but has '"+r.dtype+"'");var i=a.inputs[e];if(!w(r.shape,i.shape))throw new Error("Error in gradient for op "+a.name+". The gradient of input '"+e+"' has shape '"+r.shape+"', which does not match the shape of the input '"+i.shape+"'");if(null==t[i.id])t[i.id]=r;else{var s=t[i.id];t[i.id]=s.add(r),s.dispose()}};for(var u in a.inputs)s(u)},a=e.length-1;a>=0;a--)r(a)}(s,o,function(t){return a.tidy(t)});var u=e.map(function(t){return s[t.id]});return 0===a.state.gradientDepth&&(a.state.activeTape.forEach(function(t){for(var e in t.saved)t.saved[e].dispose()}),a.state.activeTape=null),{value:i,grads:u}})},t.prototype.customGrad=function(t){var e=this;return g(U(t),function(){return"The f passed in customGrad(f) must be a function."}),function(){for(var n,r=[],a=0;an||e>n)throw r="["+t+"x"+e+"]",new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU ["+n+"x"+n+"].")}function se(t,e){return ve(t,e,function(){return t.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function ue(t,e,n,r,a,i,o,s){var u=t.getAttribLocation(n,r);return-1!==u&&(jt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,a)}),jt(t,e,function(){return t.vertexAttribPointer(u,i,t.FLOAT,!1,o,s)}),jt(t,e,function(){return t.enableVertexAttribArray(u)}),!0)}function le(t,e,n,r){ye(t,r),jt(t,e,function(){return t.activeTexture(t.TEXTURE0+r)}),jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)})}function ce(t,e,n,r){return ve(t,e,function(){return t.getUniformLocation(n,r)},'uniform "'+r+'" not present in program.')}function pe(t,e,n){return t.getUniformLocation(e,n)}function he(t,e,n,r,a,i){jt(t,e,function(){return le(t,e,r,i)}),jt(t,e,function(){return t.uniform1i(a,i)})}function fe(t,e,n,r){jt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)}),jt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)})}function de(t,e,n){jt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)}),jt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)})}function me(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+ge(t,e))}function ge(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case t.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+e}}function ve(t,e,n,r){var a=jt(t,e,function(){return n()});if(null==a)throw new Error(r);return a}function ye(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(rn)throw new Error("textureUnit must be in [gl.TEXTURE0, gl.TEXTURE"+n+"].")}function be(t,e){return void 0===e&&(e=2),x(t.slice(0,t.length-e))}function xe(t){if(0===t.length)throw Error("Cannot get rows and columns of an empty shape array.");return[t.length>1?t[t.length-2]:1,t[t.length-1]]}function we(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[be(t)].concat(xe(t))),e}function Ce(t,e){var n;void 0===e&&(e=!1);var r=o().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e&&(r*=2,1===(t=t.map(function(e,n){return n>=t.length-2?d(t[n]):t[n]})).length&&(t=[2,t[0]])),2!==t.length){var a=R(t);t=a.newShape}var i=x(t);if(t.length<=1&&i<=r)return[1,i];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return[t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return[t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return[t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return[t[0],t[1]*t[2]*t[3]];if(e){var s=be(t),u=2,l=2;return t.length&&(u=(n=xe(t))[0],l=n[1]),S(i=s*(u/2)*(l/2)).map(function(t){return 2*t})}return S(i)}function Ne(t){return t%2==0}function Se(t,e){if(w(t=t.slice(-2),e=e.slice(-2)))return!0;if(!t.length||!e.length)return!0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return!0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return!0;if(Ne(n)&&Ne(r)&&(1===t[0]||1===e[0]))return!0}return t[1]===e[1]&&Ne(t[0])&&Ne(e[0])}function Ie(t){if(null==Jt){var e=Lt(t);Jt=e.getParameter(e.MAX_TEXTURE_SIZE)}return Jt}function ke(t){if(null==Zt){var e=Lt(t);Zt=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Zt)}function Ee(t){if(0===t)return 0;var e=Lt(t);return Ae(e,"EXT_disjoint_timer_query_webgl2")&&2===t?2:Ae(e,"EXT_disjoint_timer_query")?1:0}function Ae(t,e){return null!=t.getExtension(e)}function Re(t){try{if(null!=Lt(t))return!0}catch(t){return!1}return!1}function Te(t){if(0===t)return!1;var e=Lt(t);if(1===t){if(!Ae(e,"OES_texture_float"))return!1}else if(!Ae(e,"EXT_color_buffer_float"))return!1;return Oe(e)}function De(t){if(0===t)return!1;var e=Lt(t);return 1!==t?Ae(e,"EXT_color_buffer_float")?Oe(e):!!Ae(e,"EXT_color_buffer_half_float")&&function(t,e){var n=Ut(t,e),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);var a=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,a),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var i=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(a),i}(e,e.getExtension("EXT_color_buffer_half_float")):!!Ae(e,"OES_texture_float")&&!!Ae(e,"WEBGL_color_buffer_float")&&Oe(e)}function Oe(t){var e=Ut(t),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),a}function _e(t){return 2===t&&null!=Lt(t).fenceSync}var Fe=Object.freeze({callAndCheck:jt,canBeRepresented:Ht,getWebGLErrorMessage:Kt,getExtensionOrThrow:Xt,createVertexShader:$t,createFragmentShader:Yt,createProgram:te,linkProgram:ee,validateProgram:ne,createStaticVertexBuffer:re,createStaticIndexBuffer:ae,getNumChannels:function(){return 2===o().getNumber("WEBGL_VERSION")?1:4},createTexture:ie,validateTextureSize:oe,createFramebuffer:se,bindVertexBufferToProgramAttribute:ue,bindTextureUnit:le,unbindTextureUnit:function(t,e,n){ye(t,n),jt(t,e,function(){return t.activeTexture(t.TEXTURE0+n)}),jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:ce,getProgramUniformLocation:pe,bindTextureToProgramUniformSampler:he,bindCanvasToFramebuffer:function(t,e){jt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),jt(t,e,function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)}),jt(t,e,function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)})},bindColorTextureToFramebuffer:fe,unbindColorTextureFromFramebuffer:de,validateFramebuffer:me,getFramebufferErrorMessage:ge,getBatchDim:be,getRowsCols:xe,getShapeAs3D:we,getTextureShapeFromLogicalShape:Ce,isReshapeFree:Se,getWebGLMaxTextureSize:Ie,resetMaxTextureSize:function(){Jt=null},resetMaxTexturesInShader:function(){Zt=null},getMaxTexturesInShader:ke,getWebGLDisjointQueryTimerVersion:Ee,hasExtension:Ae,isWebGLVersionEnabled:Re,isCapableOfRenderingToFloatTexture:Te,isDownloadFloatTextureEnabled:De,isWebGLFenceEnabled:_e}),Me=o();function ze(t){o().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(t+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function Le(){return At.memory()}function Be(t,e){return At.tidy(t,e)}function Pe(t){Nt(t).forEach(function(t){return t.dispose()})}function We(t){return At.keep(t)}function Ve(){return At.backend}function Ue(){for(var t=[],e=0;e0,function(){return"Element arr["+r.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"}),g(e.length===n[0],function(){return"Element arr["+r.join("][")+"] should have "+n[0]+" elements, but has "+e.length+" elements"});for(var a=n.slice(1),i=0;i=0&&(a=r),Ge(r,a,e,n),null==t||!M(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t){var i=null==t?"null":t.constructor.name;throw new Error("Argument '"+e+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+i+"'")}var s=je(t,a);M(t)||Array.isArray(t)||(t=[t]);var u="string"!==a?q(t,a,o().getBool("DEBUG")):b(t,[],!0);return At.makeTensor(u,s,a)}function He(t,e,n,r){if(void 0===r&&(r="numeric"),!Array.isArray(t))throw new Error("Argument "+e+" passed to "+n+" must be a `Tensor[]` or `TensorLike[]`");return t.map(function(t,r){return qe(t,e+"["+r+"]",n)},r)}function Ke(t,e){for(var n=0;n=0&&e0}),Me.registerFlag("WEBGL_VERSION",function(){return Re(2)?2:Re(1)?1:0}),Me.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return 2===Me.get("WEBGL_VERSION")}),Me.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),Me.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),Me.registerFlag("WEBGL_PACK",function(){return Me.getBool("HAS_WEBGL")}),Me.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_CLIP",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),Me.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_PACK_REDUCE",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_LAZILY_UNPACK",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_CONV_IM2COL",function(){return Me.getBool("WEBGL_PACK")}),Me.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return Ie(Me.getNumber("WEBGL_VERSION"))}),Me.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return ke(Me.getNumber("WEBGL_VERSION"))}),Me.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var t=Me.getNumber("WEBGL_VERSION");return 0===t?0:Ee(t)}),Me.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return Me.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(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(t)||/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(t.substr(0,4))));var t}),Me.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return Te(Me.getNumber("WEBGL_VERSION"))}),Me.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!Me.getBool("WEBGL_FORCE_F16_TEXTURES")&&Me.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),Me.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return De(Me.getNumber("WEBGL_VERSION"))}),Me.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return _e(Me.getNumber("WEBGL_VERSION"))}),Me.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return Me.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),pt=ze;var an=rn({complex_:function(t,e){var n=qe(t,"real","complex"),r=qe(e,"imag","complex");return v(n.shape,r.shape,"real and imag shapes, "+n.shape+" and "+r.shape+", must match in call to tf.complex()."),At.runKernelFunc(function(t){return t.complex(n,r)},{$real:n,$imag:r})}}),on=rn({real_:function(t){var e=qe(t,"input","real");return At.runKernelFunc(function(t){return t.real(e)},{$input:e})}}),sn=rn({imag_:function(t){var e=qe(t,"input","imag");return At.runKernelFunc(function(t){return t.imag(e)},{$input:e})}});function un(t,e,n){return ln(t,e,je(t,n),n)}function ln(t,e,n,r){if(null==r&&(r=V(t)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!M(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t)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(null!=e){Y(e);var a=x(e),i=x(n);g(a===i,function(){return"Based on the provided shape, ["+e+"], the tensor should have "+a+" values but has "+i});for(var s=0;s1)return bn([0],r);var a=X(Math.abs(Math.ceil((e-t)/n)),r);e=1,function(){return"Pass at least one tensor to concat"});var n=He(t,"tensors","concat");"complex64"===n[0].dtype&&n.forEach(function(t){if("complex64"!==t.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+t.dtype+". ")}),e=A(e,n[0].shape)[0];var r=nn(n.map(function(t){return t.shape}),e);if(0===x(r))return un([],r);if(1===(n=n.filter(function(t){return t.size>0})).length)return n[0];var a=n.map(function(t){return t.shape});en(a,e);var i=n;return At.runKernelFunc(function(t){return t.concat(n,e)},i,function(t){var n=a.map(function(t){return t[e]});return Tn(t,n,e).map(function(t){return function(){return t}})})}}),kn=rn({concat1d_:function(t){return In(t,0)}}),En=rn({concat2d_:function(t,e){return In(t,e)}}),An=rn({concat3d_:function(t,e){return In(t,e)}}),Rn=rn({concat4d_:function(t,e){return In(t,e)}}),Tn=rn({split_:function(t,e,n){void 0===n&&(n=0);var r,a=qe(t,"x","split");return n=A(n,a.shape)[0],"number"==typeof e?(g(a.shape[n]%e==0,function(){return"Number of splits must evenly divide the axis."}),r=new Array(e).fill(a.shape[n]/e)):(g(a.shape[n]===e.reduce(function(t,e){return t+e}),function(){return"The sum of sizes must match the size of the axis dimension."}),r=e),At.runKernelFunc(function(t){return t.split(a,r,n)},{$x:a},function(t){return{$x:function(){return In(t,n)}}})}});function Dn(t,e){return t(e={exports:{}},e.exports),e.exports}var On=Dn(function(t){!function(t,e,n){function r(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function a(t,e){var n=new function(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null}(t),a=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+1.1102230246251565e-16*(2097152*i()|0)},i.quick=i,a&&("object"==typeof a&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.alea=a}(0,t)}),_n=Dn(function(t){!function(t,e,n){function r(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e}function a(t,e){var n=new function(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.xor128=a}(0,t)}),Fn=Dn(function(t){!function(t,e,n){function r(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function a(t,e){var n=new function(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r>>4),e.next()}(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.xorwow=a}(0,t)}),Mn=Dn(function(t){!function(t,e,n){function r(t,e){return e.x=t.x.slice(),e.i=t.i,e}function a(t,e){null==t&&(t=+new Date);var n=new function(t){var e=this;e.next=function(){var t,n,r=e.x,a=e.i;return t=r[a],n=(t^=t>>>7)^t<<24,n^=(t=r[a+1&7])^t>>>10,n^=(t=r[a+3&7])^t>>>3,n^=(t=r[a+4&7])^t<<7,t=r[a+7&7],n^=(t^=t<<13)^t<<9,r[a]=n,e.i=a+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n0;--n)t.next()}(e,t)}(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.x&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.xorshift7=a}(0,t)}),zn=Dn(function(t){!function(t,e,n){function r(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function a(t,e){null==t&&(t=+new Date);var n=new function(t){var e=this;e.next=function(){var t,n,r=e.w,a=e.X,i=e.i;return e.w=r=r+1640531527|0,n=a[i+34&127],t=a[i=i+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=a[i]=n^t,e.i=i,n+(r^r>>>16)|0},function(t,e){var n,r,a,i,o,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,u=Math.max(u,e.length)),a=0,i=-32;i>>15,r^=r<<4,r^=r>>>13,i>=0&&(o=o+1640531527|0,a=0==(n=s[127&i]^=r+o)?a+1:0);for(a>=128&&(s[127&(e&&e.length||0)]=-1),a=127,i=512;i>0;--i)r=s[a+34&127],n=s[a=a+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[a]=r^n;t.w=o,t.X=s,t.i=a}(e,t)}(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.X&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.xor4096=a}(0,t)}),Ln=Dn(function(t){!function(t,e,n){function r(t,e){return e.a=t.a,e.b=t.b,e.c=t.c,e.d=t.d,e}function a(t,e){var n=new function(t){var e=this,n="";e.next=function(){var t=e.b,n=e.c,r=e.d,a=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^a,a=a-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^a,e.a=a-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&r(a,n),i.state=function(){return r(n,{})}),i}e&&e.exports?e.exports=a:this.tychei=a}(0,t)}),Bn=Dn(function(t){!function(e,n){var r,a=this,i=256,o=6,s="random",u=n.pow(i,o),l=n.pow(2,52),c=2*l,p=i-1;function h(t,p,h){var v=[],y=m(function t(e,n){var r,a=[],i=typeof e;if(n&&"object"==i)for(r in e)try{a.push(t(e[r],n-1))}catch(t){}return a.length?a:"string"==i?e:e+"\0"}((p=1==p?{entropy:!0}:p||{}).entropy?[t,g(e)]:null==t?function(){try{var t;return r&&(t=r.randomBytes)?t=t(i):(t=new Uint8Array(i),(a.crypto||a.msCrypto).getRandomValues(t)),g(t)}catch(t){var n=a.navigator,o=n&&n.plugins;return[+new Date,a,o,a.screen,g(e)]}}():t,3),v),b=new f(v),x=function(){for(var t=b.g(o),e=u,n=0;t=c;)t/=2,e/=2,n>>>=1;return(t+n)/e};return x.int32=function(){return 0|b.g(4)},x.quick=function(){return b.g(4)/4294967296},x.double=x,m(g(b.S),e),(p.pass||h||function(t,e,r,a){return a&&(a.S&&d(a,b),t.state=function(){return d(b,{})}),r?(n[s]=t,e):t})(x,y,"global"in p?p.global:this==n,p.state)}function f(t){var e,n=t.length,r=this,a=0,o=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);a=1||0===o);var s=Math.sqrt(-2*Math.log(o)/o);e=this.mean+this.stdDev*a*s,n=this.mean+this.stdDev*i*s,this.truncated&&!this.isValidTruncated(e)||(r=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||"float32"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),Vn=function(){function t(t,e,n,r){this.alpha=t,this.beta=1/e,this.dtype=n;var a=r||Math.random();this.randu=Pn(a.toString()),this.randn=new Wn(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}return t.prototype.nextValue=function(){for(var t,e,n,r,a,i;;){do{r=this.randn.nextValue(),i=1+this.c*r}while(i<=0);if(i*=i*i,e=1-.331*(t=r*r)*t,n=.5*t+this.d*(1-i+Math.log(i)),(a=this.randu())=1+e.length,function(){return"input rank is "+r.rank+" but should be > than blockShape.length "+e.length}),g(n.length===e.length,function(){return"crops.length is "+n.length+" but should be equal to blockShape.length "+e.length}),g(r.shape[0]%a==0,function(){return"input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+e.join(" * ")+" === "+a}),At.runKernelFunc(function(t){return t.batchToSpaceND(r,e,n)},{$x:r},function(t){return{$x:function(){return t.spaceToBatchND(e,n)}}})}}),Hn=rn({cast_:function(t,e){var n=qe(t,"x","cast");if(!_(e))throw new Error("Failed to cast to unknown dtype "+e);if("string"===e&&"string"!==n.dtype||"string"!==e&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");var r={dtype:e};return At.runKernelFunc(function(t){return t.cast(n,e)},{x:n},function(t){return{x:function(){return t.clone()}}},"Cast",r)}}),Kn=rn({clone_:function(t){var e=qe(t,"x","clone",null);return At.runKernelFunc(function(){return At.makeTensorFromDataId(e.dataId,e.shape,e.dtype)},{$x:e},function(t){return{$x:function(){return t.toFloat()}}})}}),Xn=rn({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=qe(t,"x","cumsum"),i=Ze([e|=0],a.rank),o=a;null!=i&&(o=a.transpose(i));var s=tn(1,a.rank)[0],u=At.runKernelFunc(function(t){return t.cumsum(o,s,n,r)},{permutedX:o},function(t){return{permutedX:function(){return t.cumsum(e,n,!r)}}});return null!=i&&(u=u.transpose(i)),u}}),$n=rn({depthToSpace_:function(t,e,n){void 0===n&&(n="NHWC");var r=qe(t,"x","depthToSpace"),a="NHWC"===n?r.shape[1]:r.shape[2],i="NHWC"===n?r.shape[2]:r.shape[3],o="NHWC"===n?r.shape[3]:r.shape[1];return g(a*e>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+a+" and "+e+" for depthToSpace with input shape\n "+r.shape}),g(i*e>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+i+" and "+e+" for depthToSpace with input shape\n "+r.shape}),g(o%(e*e)==0,function(){return"Dimension size must be evenly divisible by "+e*e+" but is "+o+" for depthToSpace with input shape "+r.shape}),At.runKernelFunc(function(t){return t.depthToSpace(r,e,n)},{$x:r})}}),Yn=rn({expandDims_:function(t,e){void 0===e&&(e=0);var n=qe(t,"x","expandDims",null);g(e<=n.rank,function(){return"Axis must be <= rank of the tensor"});var r=n.shape.slice();return e<0&&(g(-(n.rank+1)<=e,function(){return"Axis must be in the interval ["+-(n.rank+1)+", "+n.rank+"]"}),e=n.rank+e+1),r.splice(e,0,1),lr(n,r)}}),Jn=rn({eye_:function(t,e,n,r){void 0===r&&(r="float32"),null==e&&(e=t);for(var a=jn([t,e],r),i=t<=e?t:e,o=0;o2)throw new Error("Rank of probabilities must be 1 or 2, but is "+o);n=n||Math.random();var s=1===o?a.as2D(1,-1):a,u=At.runKernelFunc(function(t){return t.multinomial(s,r,e,n)},{logits2D:s});return 1===o?u.as1D():u}}),Qn=rn({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+e);var a=qe(t,"indices","oneHot","int32"),i=a.shape.concat([e]);return a=a.flatten(),At.runKernelFunc(function(t){return t.oneHot(a,e,n,r)},{$indices:a},function(t){return{$indices:function(){return bn(a.shape,"float32")}}}).reshape(i)}}),tr=rn({pad_:function(t,e,n){void 0===n&&(n=0);var r=qe(t,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var a=e.map(function(t){return t[0]});return At.runKernelFunc(function(t){return t.pad(r,e,n)},{$x:r},function(t){return{$x:function(){return t.slice(a,r.shape)}}})}}),er=rn({pad1d_:function(t,e,n){return void 0===n&&(n=0),g(2===e.length,function(){return"Invalid number of paddings. Must be length of 2."}),tr(t,[e],n)}}),nr=rn({pad2d_:function(t,e,n){return void 0===n&&(n=0),g(2===e.length&&2===e[0].length&&2===e[1].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),tr(t,e,n)}}),rr=rn({pad3d_:function(t,e,n){return void 0===n&&(n=0),g(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),tr(t,e,n)}}),ar=rn({pad4d_:function(t,e,n){return void 0===n&&(n=0),g(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),tr(t,e,n)}}),ir=rn({rand_:function(t,e,n){var r=x(t),a=null;if(null==n||"float32"===n)a=new Float32Array(r);else if("int32"===n)a=new Int32Array(r);else{if("bool"!==n)throw new Error("Unknown data type "+n);a=new Uint8Array(r)}for(var i=0;i=1+e.length,function(){return"input rank "+r.rank+" should be > than [blockShape] "+e.length}),g(n.length===e.length,function(){return"paddings.shape[0] "+n.length+" must be equal to [blockShape] "+e.length}),g(r.shape.reduce(function(t,r,a){return a>0&&a<=e.length?t&&(r+n[a-1][0]+n[a-1][1])%e[a-1]==0:t},!0),function(){return"input spatial dimensions "+r.shape.slice(1)+" with paddings "+n.toString()+" must be divisible by blockShapes "+e.toString()}),At.runKernelFunc(function(t){return t.spaceToBatchND(r,e,n)},{$x:r},function(t){return{$x:function(){return t.batchToSpaceND(e,n)}}})}}),pr=rn({squeeze_:function(t,e){var n=qe(t,"x","squeeze");return lr(n,R(n.shape,e).newShape)}}),hr=rn({stack_:function(t,e){void 0===e&&(e=0);var n=He(t,"tensors","stack");if(g(n.length>=1,function(){return"Pass at least one tensor to tf.stack"}),1===n.length)return n[0].expandDims(e);var r=n[0].rank,a=n[0].shape,i=n[0].dtype;g(e<=r,function(){return"Axis must be <= rank of the tensor"}),n.forEach(function(t){v(a,t.shape,"All tensors passed to stack must have matching shapes")}),n.forEach(function(t){g(i===t.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var o=n.map(function(t){return t.expandDims(e)});return In(o,e)}}),fr=rn({tile_:function(t,e){var n=qe(t,"x","tile",null);return g(n.rank===e.length,function(){return"Error in transpose: rank of input "+n.rank+" must match length of reps "+e+"."}),At.runKernelFunc(function(t,r){var a=t.tile(n,e);return r([n]),a},{$x:n},function(t,n){var r=n[0];return{$x:function(){var n=Sn(r);if(1===r.rank)for(var a=0;a=-n.shape.length&&e=2*e+1||a%2==1?o.push(a):i.push(a);r.push.apply(r,i),r.push(0),r.push.apply(r,o)}return r}function br(t,e,n,r){void 0===r&&(r=!0);var a=[];r?a.push(t[0]/n):a.push(t[0]*n);for(var i=1;it.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+e.shape[e.rank-1]+" vs. "+t.rank);if(0===t.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+t.shape+".");for(var n=e.shape,r=n[n.length-1],a=1,i=0;i1?e.shape[e.rank-1]:1,a=n.length,i=1,o=r;o0;)1&t&&e.push(n),t/=2,n++;return e}function Ar(t,e,n){for(var r=[],a=0;a0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[a];return i<0&&(i+=s),f(0,i,s-1)}function Tr(t,e,n,r,a){var i=e[a],o=n[a]||1;(t&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[a];return i<0&&(i+=s),o>0?f(0,i,s):f(-1,i,s-1)}function Dr(t,e,n){for(var r=n.length,a=0;a1){r=a;break}for(a=r+1;a0||n[a]!==t[a])return!1;return!0}function Or(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r0,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+i+" variables is trainable."});var o=At.gradients(t,e,null,!0),s=o.value,u=o.grads;g(u.some(function(t){return null!=t}),function(){return"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()."}),g(0===s.rank,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var l={};return e.forEach(function(t,e){null!=u[e]&&(l[t.name]=u[e])}),null!=a&&a.forEach(function(t){return l[t.name]=null}),{value:s,grads:l}}function Mr(t){return At.customGrad(t)}function zr(t){if(t.filter(function(t){return null==t}).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var Lr=rn({softmax_:function(t,e){void 0===e&&(e=-1);var n=qe(t,"logits","softmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and dim was "+e);return Mr(function(t,n){var r=t.logSumExp([e],!0),a=t.toFloat().sub(r).exp();return n([a]),{value:a,gradFunc:function(t,n){var r=n[0],a=t.mul(r);return a.sub(a.sum([e],!0).mul(r))}}})(n)}}),Br=rn({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=qe(t,"logits","logSoftmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and axis was "+e);return Mr(function(t,n){var r=t.max(e,!0),a=t.sub(r),i=a.toFloat().sub(a.exp().sum(e,!0).log());return n([i]),{value:i,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}})(n)}}),Pr=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e)},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},t.prototype.numDataIds=function(){return this.dataIdsCount},t}(),Wr=function(){function t(){}return t.prototype.time=function(t){return Vr()},t.prototype.read=function(t){return Vr()},t.prototype.readSync=function(t){return Vr()},t.prototype.numDataIds=function(){return Vr()},t.prototype.disposeData=function(t){return Vr()},t.prototype.fromPixels=function(t,e){return Vr()},t.prototype.write=function(t,e,n){return Vr()},t.prototype.move=function(t,e,n,r){return Vr()},t.prototype.memory=function(){return Vr()},t.prototype.floatPrecision=function(){return Vr()},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){return Vr()},t.prototype.fusedBatchMatMul=function(t){return t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights,Vr()},t.prototype.slice=function(t,e,n){return Vr()},t.prototype.stridedSlice=function(t,e,n,r){return Vr()},t.prototype.unstack=function(t,e){return Vr()},t.prototype.reverse=function(t,e){return Vr()},t.prototype.concat=function(t,e){return Vr()},t.prototype.neg=function(t){return Vr()},t.prototype.add=function(t,e){return Vr()},t.prototype.addN=function(t){return Vr()},t.prototype.subtract=function(t,e){return Vr()},t.prototype.multiply=function(t,e){return Vr()},t.prototype.realDivide=function(t,e){return Vr()},t.prototype.floorDiv=function(t,e){return Vr()},t.prototype.sum=function(t,e){return Vr()},t.prototype.prod=function(t,e){return Vr()},t.prototype.unsortedSegmentSum=function(t,e,n){return Vr()},t.prototype.argMin=function(t,e){return Vr()},t.prototype.argMax=function(t,e){return Vr()},t.prototype.equal=function(t,e){return Vr()},t.prototype.notEqual=function(t,e){return Vr()},t.prototype.less=function(t,e){return Vr()},t.prototype.lessEqual=function(t,e){return Vr()},t.prototype.greater=function(t,e){return Vr()},t.prototype.greaterEqual=function(t,e){return Vr()},t.prototype.logicalNot=function(t){return Vr()},t.prototype.logicalAnd=function(t,e){return Vr()},t.prototype.logicalOr=function(t,e){return Vr()},t.prototype.where=function(t){return Vr()},t.prototype.select=function(t,e,n){return Vr()},t.prototype.topk=function(t,e,n){return Vr()},t.prototype.min=function(t,e){return Vr()},t.prototype.minimum=function(t,e){return Vr()},t.prototype.mod=function(t,e){return Vr()},t.prototype.max=function(t,e){return Vr()},t.prototype.maximum=function(t,e){return Vr()},t.prototype.all=function(t,e){return Vr()},t.prototype.any=function(t,e){return Vr()},t.prototype.squaredDifference=function(t,e){return Vr()},t.prototype.ceil=function(t){return Vr()},t.prototype.floor=function(t){return Vr()},t.prototype.round=function(t){return Vr()},t.prototype.sign=function(t){return Vr()},t.prototype.isNaN=function(t){return Vr()},t.prototype.isInf=function(t){return Vr()},t.prototype.isFinite=function(t){return Vr()},t.prototype.pow=function(t,e){return Vr()},t.prototype.exp=function(t){return Vr()},t.prototype.expm1=function(t){return Vr()},t.prototype.log=function(t){return Vr()},t.prototype.log1p=function(t){return Vr()},t.prototype.sqrt=function(t){return Vr()},t.prototype.rsqrt=function(t){return Vr()},t.prototype.square=function(t){return Vr()},t.prototype.reciprocal=function(t){return Vr()},t.prototype.relu=function(t){return Vr()},t.prototype.relu6=function(t){return Vr()},t.prototype.prelu=function(t,e){return Vr()},t.prototype.elu=function(t){return Vr()},t.prototype.eluDer=function(t,e){return Vr()},t.prototype.selu=function(t){return Vr()},t.prototype.int=function(t){return Vr()},t.prototype.clip=function(t,e,n){return Vr()},t.prototype.abs=function(t){return Vr()},t.prototype.complexAbs=function(t){return Vr()},t.prototype.sigmoid=function(t){return Vr()},t.prototype.softplus=function(t){return Vr()},t.prototype.sin=function(t){return Vr()},t.prototype.cos=function(t){return Vr()},t.prototype.tan=function(t){return Vr()},t.prototype.asin=function(t){return Vr()},t.prototype.acos=function(t){return Vr()},t.prototype.atan=function(t){return Vr()},t.prototype.atan2=function(t,e){return Vr()},t.prototype.sinh=function(t){return Vr()},t.prototype.cosh=function(t){return Vr()},t.prototype.tanh=function(t){return Vr()},t.prototype.asinh=function(t){return Vr()},t.prototype.acosh=function(t){return Vr()},t.prototype.atanh=function(t){return Vr()},t.prototype.erf=function(t){return Vr()},t.prototype.step=function(t,e){return Vr()},t.prototype.fusedConv2d=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,Vr()},t.prototype.conv2d=function(t,e,n){return Vr()},t.prototype.conv2dDerInput=function(t,e,n){return Vr()},t.prototype.conv2dDerFilter=function(t,e,n){return Vr()},t.prototype.fusedDepthwiseConv2D=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,Vr()},t.prototype.depthwiseConv2D=function(t,e,n){return Vr()},t.prototype.depthwiseConv2DDerInput=function(t,e,n){return Vr()},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){return Vr()},t.prototype.conv3d=function(t,e,n){return Vr()},t.prototype.conv3dDerInput=function(t,e,n){return Vr()},t.prototype.conv3dDerFilter=function(t,e,n){return Vr()},t.prototype.maxPool=function(t,e){return Vr()},t.prototype.maxPoolBackprop=function(t,e,n,r){return Vr()},t.prototype.avgPool=function(t,e){return Vr()},t.prototype.avgPoolBackprop=function(t,e,n){return Vr()},t.prototype.avgPool3d=function(t,e){return Vr()},t.prototype.avgPool3dBackprop=function(t,e,n){return Vr()},t.prototype.maxPool3d=function(t,e){return Vr()},t.prototype.maxPool3dBackprop=function(t,e,n,r){return Vr()},t.prototype.reshape=function(t,e){return Vr()},t.prototype.cast=function(t,e){return Vr()},t.prototype.tile=function(t,e){return Vr()},t.prototype.pad=function(t,e,n){return Vr()},t.prototype.transpose=function(t,e){return Vr()},t.prototype.gather=function(t,e,n){return Vr()},t.prototype.gatherND=function(t,e){return Vr()},t.prototype.scatterND=function(t,e,n){return Vr()},t.prototype.batchToSpaceND=function(t,e,n){return Vr()},t.prototype.spaceToBatchND=function(t,e,n){return Vr()},t.prototype.resizeBilinear=function(t,e,n,r){return Vr()},t.prototype.resizeBilinearBackprop=function(t,e,n){return Vr()},t.prototype.resizeNearestNeighbor=function(t,e,n,r){return Vr()},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){return Vr()},t.prototype.batchNormalization=function(t,e,n,r,a,i){return Vr()},t.prototype.localResponseNormalization4D=function(t,e,n,r,a){return Vr()},t.prototype.LRNGrad=function(t,e,n,r,a,i,o){return Vr()},t.prototype.multinomial=function(t,e,n,r){return Vr()},t.prototype.oneHot=function(t,e,n,r){return Vr()},t.prototype.cumsum=function(t,e,n,r){return Vr()},t.prototype.nonMaxSuppression=function(t,e,n,r,a){return Vr()},t.prototype.fft=function(t){return Vr()},t.prototype.ifft=function(t){return Vr()},t.prototype.complex=function(t,e){return Vr()},t.prototype.real=function(t){return Vr()},t.prototype.imag=function(t){return Vr()},t.prototype.cropAndResize=function(t,e,n,r,a,i){return Vr()},t.prototype.depthToSpace=function(t,e,n){return Vr()},t.prototype.split=function(t,e,n){return Vr()},t.prototype.sparseToDense=function(t,e,n,r){return Vr()},t.prototype.diag=function(t){return Vr()},t.prototype.fill=function(t,e,n){throw new Error("Not yet implemented.")},t.prototype.onesLike=function(t){return Vr()},t.prototype.zerosLike=function(t){return Vr()},t.prototype.linspace=function(t,e,n){return Vr()},t.prototype.dispose=function(){return Vr()},t}();function Vr(){throw new Error("Not yet implemented or not found in the registry. Did you forget to import the kernel?")}function Ur(t,e){for(var n=t.length,r=[],a=0;a1&&1===o&&r.unshift(i)}return r}function jr(t,e){for(var n=[],r=0;r1)&&n.unshift(i)}return n}function Gr(t,e){for(var n=[],r=Math.max(t.length,e.length),a=0;aa}).sort(function(t,e){return e.score-t.score}),o=[],s=0;s=0;--h)if(ha(t,c,o[h])>=r){p=!0;break}if(!p&&(o.push(c),o.length>=n))break}return pn(o,"int32")}function ha(t,e,n){var r=t.subarray(4*e,4*e+4),a=t.subarray(4*n,4*n+4),i=Math.min(r[0],r[2]),o=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),l=Math.min(a[0],a[2]),c=Math.min(a[1],a[3]),p=Math.max(a[0],a[2]),h=Math.max(a[1],a[3]),f=(s-i)*(u-o),d=(p-l)*(h-c);if(f<=0||d<=0)return 0;var m=Math.max(i,l),g=Math.max(o,c),v=Math.min(s,p),y=Math.min(u,h),b=Math.max(v-m,0)*Math.max(y-g,0);return b/(f+d-b)}function fa(t,e,n){var r=new Array(t.rank).fill(0),a=t.shape.slice();return e.map(function(e){a[n]=e;var i=t.slice(r,a);return r[n]+=e,i})}function da(t,e){for(var n=new Array(t.rank),r=0;r":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n "};function xa(t,e){return["x","y","z","w","u","v"].slice(0,e).map(function(e){return t+"."+e})}function wa(t,e){return 1===e?[t]:xa(t,e)}function Ca(){var t,e,n,r,a,i,s,u,l,c;return 2===o().getNumber("WEBGL_VERSION")?(t="#version 300 es",e="in",n="out",r="in",a="texture",i="outputColor",s="out vec4 outputColor;",u="\n bool isnan_custom(float val) {\n return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n ",l="",c="\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(t="",e="attribute",n="varying",r="varying",a="texture2D",i="gl_FragColor",s="",u="\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n ",l="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ",c="\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:a,output:i,defineOutput:s,defineSpecialNaN:u,defineSpecialInf:l,defineRound:c}}function Na(t,e,n){void 0===n&&(n="index");var r=G(e);return r.map(function(e,a){return"int "+t[a]+" = "+n+" / "+e+"; "+(a===r.length-1?"int "+t[a+1]+" = "+n+" - "+t[a]+" * "+e:"index -= "+t[a]+" * "+e)+";"}).join("")}function Sa(t){var e=G(t).map(function(t){return t.toString()});return"\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+e[0]+" + coords.y * "+e[1]+" + coords.z;\n }\n"}var Ia="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";function ka(t,e,n,r){var a=[];t.forEach(function(t){var e=x(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?a.push("uniform float "+t.name+(e>1?"["+e+"]":"")+";"):(a.push("uniform sampler2D "+t.name+";"),a.push("uniform int offset"+t.name+";"))});var i,o,s=a.join("\n"),u=t.map(function(t){return function(t,e,n){void 0===n&&(n=!1);var r="";r+=n?function t(e){var n,r,a;switch(e.shapeInfo.logicalShape.length){case 0:return n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=Ca(),"\n vec4 "+r+"() {\n return "+a.texture2D+"("+n+", halfCR);\n }\n ";case 1:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),r=t.shapeInfo.texShape,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],i=Ca();return"\n vec4 "+n+"(int index) {\n vec2 uv = packedUVfrom1D(\n "+a[0]+", "+a[1]+", index);\n return "+i.texture2D+"("+e+", uv);\n }\n "}(e);case 2:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t.shapeInfo.texShape,i=a[0],o=a[1],s=Ca();if(null!=a&&w(e,a))return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o+".0, "+i+".0);\n\n return "+s.texture2D+"("+n+", uv);\n }\n ";var u=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],l=Math.ceil(e[1]/2);return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = packedUVfrom2D("+l+", "+u[0]+", "+u[1]+", row, col);\n return "+s.texture2D+"("+n+", uv);\n }\n "}(e);case 3:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),i=e.shapeInfo.texShape,o=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)];if(1===n[0]){var s=n.slice(1),u=Fa(e,s);return"\n "+t(u)+"\n vec4 "+a+"(int b, int row, int col) {\n return "+a+"("+Ma(["b","row","col"],[1,2])+");\n }\n "}var l=o[0],c=o[1],p=Math.ceil(n[2]/2),h=p*Math.ceil(n[1]/2),f=Ca();return"\n vec4 "+a+"(int b, int row, int col) {\n vec2 uv = packedUVfrom3D(\n "+l+", "+c+", "+h+", "+p+", b, row, col);\n return "+f.texture2D+"("+r+", uv);\n }\n "}(e);default:return function(t){for(var e=t.shapeInfo.logicalShape,n=e.length,r=t.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),i=t.shapeInfo.texShape,o=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],s=o[0],u=o[1],l=Math.ceil(e[n-1]/2),c=l*Math.ceil(e[n-2]/2),p="int b, int row, int col",h="b * "+c+" + (row / 2) * "+l+" + (col / 2)",f=2;f=1?"coords = 0;":u.map(function(t){return"coords."+p[t+c]+" = 0;"}).join("\n");var h;h=s<2&&o>0?"coords":t.shapeInfo.logicalShape.map(function(t,e){return"coords."+p[e+c]}).join(", ");var f="return outputValue;",d=1===x(t.shapeInfo.logicalShape),m=1===x(e.logicalShape);if(1!==o||d||m){if(d&&!m)f=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var g=o-2,v=o-1;u.indexOf(g)>-1&&u.indexOf(v)>-1?f="return vec4(outputValue.x);":u.indexOf(g)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":u.indexOf(v)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}}else f="\n return vec4(outputValue.xy, outputValue.xy);\n ";return"\n vec4 "+i+"() {\n "+l+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+a+"("+h+");\n "+f+"\n }\n "}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",i=e.texShape,o=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&w(o,i))return"\n float "+a+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var l=_a(u),c=Ur(t.shapeInfo.logicalShape,e.logicalShape),p=u-s,h=["x","y","z","w","u","v"];return"\n float "+a+"() {\n "+l+" coords = getOutputCoords();\n "+(0===s?"":u<2&&c.length>=1?"coords = 0;":c.map(function(t){return"coords."+h[t+p]+" = 0;"}).join("\n"))+"\n return get"+r+"("+(u<2&&s>0?"coords":t.shapeInfo.logicalShape.map(function(t,e){return"coords."+h[e+p]}).join(", "))+");\n }\n "}(t,e)),r}(t,e,r)}).join("\n"),l=e.texShape,c=Ca(),p="\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+c.texture2D+"(textureSampler, uv).r;\n }\n ",h=function(t){return t.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+t.varyingFs+" vec2 resultUV;\n "+t.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n "+t.defineSpecialNaN+"\n "+t.defineSpecialInf+"\n "+t.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n "+Ea+"\n "+Aa+"\n "+Ra+"\n "}(c);return e.isPacked?(i=function(t,e){switch(t.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return 1===n[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+n[1]+".0);\n }\n ":1===n[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+n[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n return 2 * (resTexRC.x * "+n[1]+" + resTexRC.y);\n }\n "}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(w(t,e))return"\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+n[0]+", "+n[1]+"));\n }\n ";var r=Math.ceil(t[1]/2);return"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec2(r, c);\n }\n "}(t,e);case 3:return n=t,r=e,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],o=(i=Math.ceil(n[2]/2))*Math.ceil(n[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+a[0]+", "+a[1]+"));\n int index = resTexRC.x * "+a[1]+" + resTexRC.y;\n\n int b = index / "+o+";\n index -= b * "+o+";\n\n int r = 2 * (index / "+i+");\n int c = imod(index, "+i+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),a=r*Math.ceil(t[t.length-2]/2),i=a,o="",s="b, r, c",u=2;u2,function(){return"Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."});var a=t[t.length-1],i=Math.ceil(a/e);this.outputShape=t.slice(0,-1),i>1&&this.outputShape.push(i),r||this.variableNames.push("bestIndicesA");var o,s,u=this.outputShape,l=u.length,c=_a(l),p=wa("coords",l);if(1===i){var h=_a(s=l+1);o="\n "+h+" sourceLocR = "+h+"("+p.join()+", 0);\n ++"+p[l-1]+";\n "+h+" sourceLocG = "+h+"("+p.join()+", 0);\n ++"+p[l-2]+";\n "+h+" sourceLocA = "+h+"("+p.join()+", 0);\n --"+p[l-1]+";\n "+h+" sourceLocB = "+h+"("+p.join()+", 0);\n --"+p[l-2]+";"}else s=l,o="\n "+c+" sourceLocR = coords;\n ++"+p[l-1]+";\n "+c+" sourceLocG = coords;\n ++"+p[l-2]+";\n "+c+" sourceLocA = coords;\n --"+p[l-1]+";\n "+c+" sourceLocB = coords;\n --"+p[l-2]+";";var f=["x","y","z","w","u","v"].slice(0,s),d="."+f[s-1],m=f.map(function(t){return"int "+t}),v=wa("sourceLocR",s-1).concat("inIdx.r"),y=wa("sourceLocG",s-1).concat("inIdx.g"),b=wa("sourceLocB",s-1).concat("inIdx.b"),x=wa("sourceLocA",s-1).concat("inIdx.a"),w="max"===n?"greaterThan":"lessThan",C=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+v.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+b.join()+"),\n getBestIndicesAChannel("+x.join()+")));",N="vec4(\n getAChannel("+v.join()+"),\n hasNextCol ? getAChannel("+y.join()+") : 0.,\n hasNextRow ? getAChannel("+b.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+x.join()+") : 0.)",S=r?"":"\n float getBestIndicesAChannel("+m.join()+") {\n return getChannel(getBestIndicesA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+m.join()+") {\n return getChannel(getA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }\n "+S+"\n void main() {\n "+c+" coords = getOutputCoords();\n bool hasNextCol = "+p[l-1]+" < "+(u[l-1]-1)+";\n bool hasNextRow = "+p[l-2]+" < "+(u[l-2]-1)+";\n "+o+"\n ivec4 srcIdx = ivec4(sourceLocR"+d+", sourceLocG"+d+",\n sourceLocB"+d+", sourceLocA"+d+") * "+e+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+N+";\n\n for (int i = 0; i < "+e+"; i++) {\n inIdx = srcIdx;\n "+C+"\n vec4 candidate = "+N+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+w+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n "},La=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,i=t.dilationHeight,o=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,l=s-1-t.padInfo.top,c=u-1-t.padInfo.left,p=1/(e*n);this.userCode="\n const ivec2 pads = ivec2("+l+", "+c+");\n const float avgMultiplier = float("+p+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+i+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+o+") {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n "},Ba=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,a=t.strideDepth,i=t.strideHeight,o=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,l=t.dilationWidth,c=t.effectiveFilterDepth,p=t.effectiveFilterHeight,h=t.effectiveFilterWidth,f=c-1-t.padInfo.front,d=p-1-t.padInfo.top,m=h-1-t.padInfo.left,g=1/(e*n*r);this.userCode="\n const ivec3 pads = ivec3("+f+", "+d+", "+m+");\n const float avgMultiplier = float("+g+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+c+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+a+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n float dyR = float(dyRCorner + wR) / "+i+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+h+";\n wC += "+l+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n "},Pa=function(t,e,n,r,a,i){this.outputShape=[],this.variableNames=["x","mean","variance"],Gr(t,e),Gr(t,n);var o="0.0";null!=r&&(Gr(t,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="1.0";null!=a&&(Gr(t,a),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+o+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+i+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n "},Wa=function(t,e,n,r,a,i){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],Gr(t,e),Gr(t,n);var o="vec4(0.0)";null!=r&&(Gr(t,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=a&&(Gr(t,a),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n vec4 offset = "+o+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+i+"));\n\n setOutput((x - mean) * inv + offset);\n }\n "},Va=function(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=Gr(e,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+t+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n "},Ua="return a + b;",ja="return a - b;",Ga="return a * b;",qa="return (a < 0.) ? b * a : a;",Ha=function(t,e,n){this.variableNames=["A","B"],this.outputShape=Gr(e,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+t+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n "},Ka="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",Xa=function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Gr(e,n);var a=this.outputShape.length,i="";if(r)if(0===a||1===x(this.outputShape))i="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(i="\n "+_a(a)+" coords = getOutputCoords();\n ",1===a)i+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var o=wa("coords",a);i+="\n bool nextRowOutOfBounds =\n ("+o[a-2]+" + 1) >= "+this.outputShape[a-2]+";\n bool nextColOutOfBounds =\n ("+o[a-1]+" + 1) >= "+this.outputShape[a-1]+";\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n "}this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+t+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+i+"\n\n setOutput(result);\n }\n "},$a=function(){function t(t){this.variableNames=["A"],this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n "}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,a){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(a,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Ya=function(){function t(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n "}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,a){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(a,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Ja=function(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n "},Za=function(t){this.outputShape=[],this.outputShape=nn(t,1),this.variableNames=t.map(function(t,e){return"T"+e});var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n= "+s[u-1]+") {\n return getChannel(\n getT"+u+"("+ti(o,l,f)+"),\n vec2("+ti(c,l,f)+"));\n }"}var d=s.length,m=s[s.length-1];h+="\n return getChannel(\n getT"+d+"("+ti(o,l,m)+"),\n vec2("+ti(c,l,m)+"));",this.userCode="\n float getValue("+o.map(function(t){return"int "+t})+") {\n "+h+"\n }\n\n void main() {\n "+a+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+i+"), 0., 0., 0.);\n\n "+i[r-1]+" = "+i[r-1]+" + 1;\n if ("+i[r-1]+" < "+n[r-1]+") {\n result.g = getValue("+i+");\n }\n\n "+i[r-2]+" = "+i[r-2]+" + 1;\n if ("+i[r-2]+" < "+n[r-2]+") {\n result.a = getValue("+i+");\n }\n\n "+i[r-1]+" = "+i[r-1]+" - 1;\n if ("+i[r-2]+" < "+n[r-2]+" &&\n "+i[r-1]+" < "+n[r-1]+") {\n result.b = getValue("+i+");\n }\n setOutput(result);\n }\n "};function ti(t,e,n){var r=t.indexOf(e);return t.map(function(t,e){return e===r?t+" - "+n:t}).join()}var ei=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,i="channelsLast"===t.dataFormat;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+a+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n if ("+i+") {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},ni=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,i="channelsLast"===t.dataFormat,o=e-1-t.padInfo.top,s=n-1-t.padInfo.left,u=i?1:2,l=i?2:3,c=i?3:1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+c+"];\n\n ivec2 dyCorner = ivec2(coords["+u+"], coords["+l+"]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n\n if ("+i+") {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},ri=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,a=t.padInfo.front,i=t.padInfo.top,o=t.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yF = 0; yF < "+t.outDepth+"; yF++) {\n int xF = wF + yF * "+e+" - "+a+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+i+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},ai=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,a=t.strideDepth,i=t.strideHeight,o=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,l=r-1-t.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+l+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+e+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+a+".0;\n\n if (dyF < 0.0 || dyF >= "+t.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+e+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+i+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},ii=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,i=t.outChannels/t.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+i+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+a+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n "},oi=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,i=e-1-t.padInfo.top,o=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode="\n const ivec2 pads = ivec2("+i+", "+o+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n "},si=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.padInfo.top,i=t.padInfo.left,o=t.strideHeight,s=t.strideWidth,u=t.dilationHeight,l=t.dilationWidth,c=t.filterHeight,p=t.filterWidth,h=4*Math.floor(t.inChannels/4),f=t.inChannels%4,d="channelsLast"===t.dataFormat,m=d?1:2,g=d?2:3,v=d?3:1,y="",b="";n&&(y=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",b="result = activation(result);");var x=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+y+"\n\n const ivec2 strides = ivec2("+o+", "+s+");\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+v+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+m+"], coords["+g+"]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+c+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+p+"; wC++) {\n int xC = xCCorner + wC * "+l+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+h+"; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if ("+d+") {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if ("+(1===f)+") {\n\n if ("+d+") {\n dotProd +=\n getX(batch, xR, xC, "+h+") *\n getW(wR, wC, "+h+", d2);\n } else {\n dotProd +=\n getX(batch, "+h+", xR, xC) *\n getW(wR, wC, "+h+", d2);\n }\n\n } else if ("+(2===f)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+h+", d2),\n getW(wR, wC, "+h+" + 1, d2)\n );\n\n if ("+d+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+h+"),\n getX(batch, xR, xC, "+h+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+h+", xR, xC),\n getX(batch, "+h+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3===f)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+h+", d2),\n getW(wR, wC, "+h+" + 1, d2),\n getW(wR, wC, "+h+" + 2, d2)\n );\n\n if ("+d+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+h+"),\n getX(batch, xR, xC, "+h+" + 1),\n getX(batch, xR, xC, "+h+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+h+", xR, xC),\n getX(batch, "+h+" + 1, xR, xC),\n getX(batch, "+h+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+x+"\n "+b+"\n setOutput(result);\n }\n "},ui=function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,a=t.strideDepth,i=t.strideHeight,o=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,l=t.dilationWidth,c=t.filterDepth,p=t.filterHeight,h=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+a+", "+i+", "+o+");\n const ivec3 pads = ivec3("+e+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+c+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+h+"; wC++) {\n int xC = xCCorner + wC * "+l+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+f+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===d)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+f+") *\n getW(wF, wR, wC, "+f+", d2);\n } else if ("+(2===d)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===d)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1),\n getX(batch, xF, xR, xC, "+f+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2),\n getW(wF, wR, wC, "+f+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},li=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.inHeight,i=t.inWidth,o=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,l=t.strideWidth,c=t.dilationHeight,p=t.dilationWidth,h=t.filterHeight,f=t.filterWidth,d=t.outChannels/t.inChannels,m="",g="";n&&(m=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",g="result = activation(result);");var v=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+m+"\n\n const ivec2 strides = ivec2("+u+", "+l+");\n const ivec2 pads = ivec2("+o+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+d+";\n int q = d2 - d1 * "+d+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+h+"; wR++) {\n int xR = xRCorner + wR * "+c+";\n\n if (xR < 0 || xR >= "+a+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+"; wC++) {\n int xC = xCCorner + wC * "+p+";\n\n if (xC < 0 || xC >= "+i+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n "+v+"\n "+g+"\n setOutput(result);\n }\n "},ci=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.outShape;for(var a=t.inHeight,i=t.inWidth,o=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,l=t.strideWidth,c=t.dilationHeight,p=t.dilationWidth,h=t.filterHeight,f=t.filterWidth,m=f,g="int xR; int xC; int xCOffset;",v=0;v= 0 && xR < "+a+" && xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+a+" && xCOffset >= 0 && xCOffset < "+i+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n xR"+v+"C"+y+" = vec4(previous.zw, xTexelR"+v+"C"+y+".xy);\n } else {\n xR"+v+"C"+y+" = vec4(0, 0, xTexelR"+v+"C"+y+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+a+" && xC >= 0 && xC < "+i+") {\n xTexelR"+v+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+v+"C"+y+" = vec4(0.);\n }\n\n xR"+v+"C"+y+" = xTexelR"+v+"C"+y+";\n ",y+1= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",p>1&&(g+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+y+" = vec4(0.);\n }\n "),g+="\n xR"+v+"C"+(y+1)+" = vec4(\n xTexelR"+v+"C"+y+".zw, xTexelR"+v+"C"+(y+2)+".xy);\n "):g+="\n xCOffset = xC + "+x+";\n\n if(xR >= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+v+"C"+(y+1)+" = xTexelR"+v+"C"+(y+2)+";\n "}}else y= 0 && xR < "+a+") {\n ",s%2==1?(g+="\n xCOffset = xC + 1 - "+l+";\n if(xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+y+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+i+") {\n xTexelR"+v+"C"+(y+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+v+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+v+"C"+y+" = vec4(\n xTexelR"+v+"C"+y+".zw, xTexelR"+v+"C"+(y+2)+".zw);\n ",y+1= 0 && xCOffset < "+i+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+v+"C"+(y+1)+" = vec4(xTexelR"+v+"C"+(y+2)+".xy, final.xy);\n ")):(g+="\n if(xC >= 0 && xC < "+i+") {\n xTexelR"+v+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+v+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + "+l+";\n if(xCOffset >= 0 && xCOffset < "+i+") {\n xTexelR"+v+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+v+"C"+y+" = vec4(\n xTexelR"+v+"C"+y+".xy, xTexelR"+v+"C"+(y+2)+".xy);\n ",y+11?[""+(o-1)/(c-1),"(y2-y1) * height_ratio","y1*"+d+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+d],v=g[0],y=g[1],b=g[2],x=p>1?[""+(s-1)/(p-1),"(x2-x1) * width_ratio","x1*"+m+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+m],w=x[0],C=x[1],N=x[2];this.userCode="\n const float height_ratio = float("+v+");\n const float width_ratio = float("+w+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+i+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+C+";\n\n float in_y = "+b+";\n if( in_y < 0.0 || in_y > "+d+" ) {\n setOutput(float("+a+"));\n return;\n }\n float in_x = "+N+";\n if( in_x < 0.0 || in_x > "+m+" ) {\n setOutput(float("+a+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+h+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n "},hi=function(t,e,n){this.variableNames=["x"],this.outputShape=t;var r=t.length,a=t[t.length-1],i=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+a+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+_a(r)+" coords = getOutputCoords();\n int end = "+fi(r,"coords")+";\n float val = 0.0;\n for (int i = "+a+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+i+" end) {\n continue;\n }\n if (idx == end && "+e+") {\n continue;\n }\n "+fi(r,"coords")+" = idx;\n val += getX("+function(t,e){if(1===t)return""+e;if(2===t)return e+".x, "+e+".y";if(3===t)return e+".x, "+e+".y, "+e+".z";if(4===t)return e+".x, "+e+".y, "+e+".z, "+e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}(r,"coords")+");\n }\n setOutput(val);\n }\n "};function fi(t,e){if(1===t)return""+e;if(2===t)return e+".y";if(3===t)return e+".z";if(4===t)return e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}var di=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Dt.DENSE;var e=Wt(t),n=Ca();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Na(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n "+n.output+" = result;\n }\n "},mi=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Dt.DENSE;var e=Wt(t),n=Ca();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Na(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n "+n.output+" = result;\n }\n "},gi=function(){function t(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+e+";\n int offset_h = imod(h, "+e+");\n int in_w = w / "+e+";\n int offset_w = imod(w, "+e+");\n int offset_d = (offset_h * "+e+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n "}return t.prototype.getHeightCoordString=function(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"},t.prototype.getWidthCoordString=function(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"},t.prototype.getDepthCoordString=function(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"},t.prototype.getOutputDepthSize=function(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},t}(),vi=function(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n "},yi=function(t){this.variableNames=["A"],this.outTexUsage=Ot.DOWNLOAD;var e=Ca();this.outputShape=t,this.userCode="\n "+Ia+"\n\n void main() {\n float x = getAAtOutCoords();\n "+e.output+" = encode_float(x);\n }\n "},bi=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Ot.DOWNLOAD;var e=Ca();this.outputShape=t,this.userCode="\n "+Ia+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+e.output+" = encode_float(x);\n }\n "},xi=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=Ca(),a=e[0],i=e[1];this.outputShape=t;var o="result";n&&(o="floor(result * 255. + 0.5)"),this.userCode="\n "+Sa(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n \n int r = flatIndex / "+i+";\n int c = imod(flatIndex, "+i+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+i+".0, "+a+".0);\n vec4 values = "+r.texture2D+"(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n "+r.output+" = vec4("+o+", 0., 0., 0.);\n }\n "},wi=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var r=Ca(),a=e[0],i=e[1];this.outputShape=t;var o="",s="result";n&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var l=0;l<=1;l++){var c=2*u+l;o+="\n localCoords = coords;\n if(localCoords[2] + "+l+" < "+t[2]+") {\n localCoords[2] += "+l+";\n if(localCoords[1] + "+u+" < "+t[1]+") {\n localCoords[1] += "+u+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+i+";\n c = imod(flatIndex, "+i+");\n uv = (vec2(c, r) + halfCR) / vec2("+i+".0, "+a+".0);\n values = "+r.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+c+"] = values[0];\n } else if(offset == 1) {\n result["+c+"] = values[1];\n } else if(offset == 2) {\n result["+c+"] = values[2];\n } else {\n result["+c+"] = values[3];\n }\n }\n }\n "}this.userCode="\n "+Sa(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n\n "+o+"\n\n "+r.output+" = "+s+";\n }\n "},Ci=function(t,e,n){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var a=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,i=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+a+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+t+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+i+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n "},Ni=function(){function t(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,"value")),n.gl.uniform1f(e.valueLoc,t)}},t}(),Si=function(t){this.variableNames=["A"];var e=Ca(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n "},Ii=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var e=Ca(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+r+".0, "+n+".0);\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n "+e.output+" = result;\n }\n "},ki=function(t,e,n){this.variableNames=["A","indices"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var a=_a(this.rank),i=function(t,e){var n=t.length;if(n>4)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return"int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[],i=0;i1?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+a+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+i+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n "};function Ai(t,e){var n=Ca();return $t(t,e,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function Ri(t,e){return re(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function Ti(t,e){return ae(t,e,new Uint16Array([0,1,2,2,1,3]))}function Di(t,e,n,r,a,i,o){oe(n,r);var s=ie(t,e),u=t.TEXTURE_2D;return jt(t,e,function(){return t.bindTexture(u,s)}),jt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)}),jt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}),jt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)}),jt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)}),jt(t,e,function(){return t.texImage2D(u,0,a,n,r,0,i,o,null)}),jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)}),s}function Oi(t,e,n,r,a){var i=Pt(n,r);return Di(t,e,i[0],i[1],a.internalFormatFloat,a.textureFormatFloat,t.FLOAT)}function _i(t,e,n,r,a){var i=Pt(n,r);return Di(t,e,i[0],i[1],a.internalFormatHalfFloat,a.textureFormatFloat,a.textureTypeHalfFloat)}function Fi(t,e,n,r,a){var i=Pt(n,r);return Di(t,e,i[0],i[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function Mi(t,e,n,r,a){var i=Vt(n,r);return Di(t,e,i[0],i[1],a.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function zi(t,e,n,r,a){var i=Vt(n,r);return Di(t,e,i[0],i[1],a.internalFormatPackedHalfFloat,t.RGBA,a.textureTypeHalfFloat)}function Li(t,e,n,r){return jt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,r)}),ue(t,e,n,"clipSpacePos",r,3,20,0)&&ue(t,e,n,"uv",r,2,20,12)}function Bi(t,e,n,r,a,i,o){var s,u,l;jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),i instanceof Uint8Array?(s=new Uint8Array(r*a*4),u=t.UNSIGNED_BYTE,l=t.RGBA):(s=new Float32Array(r*a*4),u=t.FLOAT,l=o.internalFormatPackedFloat),s.set(i),jt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,l,r,a,0,t.RGBA,u,s)}),jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Pi(t,e,n,r){jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),r.data instanceof Uint8Array?jt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)}):jt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)}),jt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Wi(t,e,n,r,a){var i=t.createBuffer();jt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,i)});var o=16*n*r;return jt(t,e,function(){return t.bufferData(t.PIXEL_PACK_BUFFER,o,t.STREAM_READ)}),jt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)}),jt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)}),i}function Vi(t,e,n){var r=t,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function Ui(t,e,n,r,a){var i=Pt(n,r),o=i[0],s=i[1],u=new Uint8Array(n*r*4);return jt(t,e,function(){return t.readPixels(0,0,o,s,a.downloadTextureFormat,t.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function ji(t,e,n,r,a,i,o,s){var u=t,l=new Float32Array(function(t,e){var n=Vt(i,o);return n[0]*n[1]*4}());return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,l),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),l}function Gi(t,e,n,r){var a=new Float32Array(n*r*4);return jt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,a)}),a}var qi=Object.freeze({createVertexShader:Ai,createVertexBuffer:Ri,createIndexBuffer:Ti,createFloat32MatrixTexture:Oi,createFloat16MatrixTexture:_i,createUnsignedBytesMatrixTexture:Fi,createPackedMatrixTexture:Mi,createFloat16PackedMatrixTexture:zi,bindVertexProgramAttributeStreams:Li,uploadDenseMatrixToTexture:Bi,uploadPixelDataToTexture:Pi,createBufferFromOutputTexture:Wi,downloadFloat32MatrixFromBuffer:Vi,downloadByteEncodedFloatMatrixFromOutputTexture:Ui,downloadPackedMatrixFromBuffer:ji,downloadMatrixFromPackedOutputTexture:Gi}),Hi=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=o().getNumber("WEBGL_VERSION");if(null!=t?(this.gl=t,zt(e,t)):this.gl=Lt(e),1===o().getNumber("WEBGL_VERSION"))this.textureFloatExtension=Xt(this.gl,this.debug,"OES_texture_float"),this.colorBufferFloatExtension=this.gl.getExtension("WEBGL_color_buffer_float"),this.textureHalfFloatExtension=Xt(this.gl,this.debug,"OES_texture_half_float"),this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float");else if(Ae(this.gl,"EXT_color_buffer_float"))this.colorBufferFloatExtension=this.gl.getExtension("EXT_color_buffer_float");else{if(!Ae(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float")}this.vertexBuffer=Ri(this.gl,this.debug),this.indexBuffer=Ti(this.gl,this.debug),this.framebuffer=se(this.gl,this.debug),this.textureConfig=Ut(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(t.prototype,"debug",{get:function(){return o().getBool("DEBUG")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&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."),null!=this.outputTexture&&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.");var e=this.gl;jt(e,this.debug,function(){return e.finish()}),jt(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),jt(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),jt(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),jt(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),jt(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Oi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),_i(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Fi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Pi(this.gl,this.debug,t,e)},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),Bi(this.gl,this.debug,t,e,n,r,this.textureConfig)},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),zi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Mi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(de(this.gl,this.debug,this.framebuffer),this.outputTexture=null),jt(this.gl,this.debug,function(){return e.gl.deleteTexture(t)})},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Ui(r.gl,r.debug,e,n,r.textureConfig)})},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,a,i){return ji(this.gl,t,0,0,0,a,i,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Vi(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Wi(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(o().getBool("WEBGL_FENCE_API_ENABLED")){var a=t,i=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=a.clientWaitSync(i,0,0);return t===a.ALREADY_SIGNALED||t===a.CONDITION_SATISFIED},e=i}else o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return!0};return{query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Gi(r.gl,r.debug,e,n)})},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=Yt(e,this.debug,t),r=Ai(e,this.debug),a=te(e,this.debug);return jt(e,this.debug,function(){return e.attachShader(a,r)}),jt(e,this.debug,function(){return e.attachShader(a,n)}),ee(e,this.debug,a),this.debug&&ne(e,this.debug,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=Li(e,this.debug,this.program,this.vertexBuffer)),a},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&jt(this.gl,this.debug,function(){return e.gl.deleteProgram(t)})},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&ne(this.gl,this.debug,this.program),jt(this.gl,this.debug,function(){return e.gl.useProgram(t)})},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?ce(this.gl,this.debug,t,e):pe(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),jt(this.gl,this.debug,function(){return n.gl.getAttribLocation(t,e)})},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),he(this.gl,this.debug,this.program,t,e,n)},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=Vt(e,n),a=r[0],i=r[1];this.setOutputMatrixTextureDriver(t,a,i)},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e)},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},t.prototype.debugValidate=function(){null!=this.program&&ne(this.gl,this.debug,this.program),me(this.gl)},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),jt(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),jt(this.gl,this.debug,function(){return t.gl.finish()})},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=Xt(this.gl,this.debug,2===o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),a=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,a),a},t.prototype.endQuery=function(){if(2!==o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},t.prototype.waitForQueryAndGetTime=function(t){return r(this,void 0,void 0,function(){var e=this;return a(this,function(n){switch(n.label){case 0:return[4,k(function(){return e.disposed||e.isQueryAvailable(t,o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return n.sent(),[2,this.getQueryTime(t,o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return!0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}return a=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT),null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise(function(n){e.addItemToPoll(function(){return t.isFencePassed()},function(){return n()})})},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e1||k(function(){return n.pollItems(),0===n.itemsToPoll.length})},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),fe(this.gl,this.debug,t,this.framebuffer),this.debug&&me(this.gl)},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(fe(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&me(this.gl)):de(this.gl,this.debug,this.framebuffer)},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;fe(r,this.debug,t,this.framebuffer),this.debug&&me(r),this.outputTexture=t,jt(r,this.debug,function(){return r.viewport(0,0,e,n)}),jt(r,this.debug,function(){return r.scissor(0,0,e,n)})},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var a=this;this.throwIfDisposed(),jt(this.gl,this.debug,function(){return a.gl.scissor(t,e,n,r)})},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},t}();function Ki(t,e){if(t.length!==e.length)throw Error("Binary was compiled with "+t.length+" inputs, but was executed with "+e.length+" inputs");t.forEach(function(t,n){var r=t.logicalShape,a=e[n],i=a.shape;if(!w(r,i))throw Error("Binary was compiled with different shapes than the current args. Shapes "+r+" and "+i+" must match");if(!t.isUniform||!a.isUniform){var o=t.texShape,s=a.isUniform?null:a.texData.texShape;if(!w(o,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+o+" and "+s+" must match")}})}var Xi=function(t,e,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var r=n.filterWidth,a=n.inChannels,i=n.strideWidth,o=n.strideHeight,s=n.padInfo,u=n.outWidth,l=n.dilationWidth,c=n.dilationHeight,p=n.dataFormat,h=s.left,f=s.top,d=a*r,m=Ca(),g="channelsLast"===p,v=g?0:1,y=g?1:2,b="",x=0;x<=1;x++)for(var w=0;w<=1;w++)b+="\n blockIndex = rc.y + "+w+";\n pos = rc.x + "+x+";\n\n if(blockIndex < "+t[1]+" && pos < "+t[0]+") {\n offsetY = int(blockIndex / ("+u+")) * "+o+" - "+f+";\n d0 = offsetY + "+c+" * (pos / "+d+");\n\n if(d0 < "+e[v]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+u+".) * "+i+". - "+h+".);\n d1 = offsetX + "+l+" * (int(mod(float(pos), "+d+".) / "+a+".));\n\n if(d1 < "+e[y]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+a+".));\n\n if ("+g+") {\n innerDims = vec2(d1, ch);\n result["+(2*x+w)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*x+w)+"] = getChannel(\n getA(ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n ";this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n "+b+"\n\n "+m.output+" = result;\n }\n "},$i=function(t,e,n,r,a){this.variableNames=["x"],this.outputShape=[];var i,o=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";i=.5===a?"inversesqrt("+u+")":1===a?"1.0/("+u+")":"exp(log("+u+") * float(-"+a+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+o+"; j <= "+o+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+i+";\n setOutput(val);\n }\n "},Yi=function(t,e,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=a,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+e+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+e+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+a+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+a+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n "},Ji=function(t,e,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var i,o=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";i=.5===a?"inversesqrt("+u+")":1===a?"1.0/("+u+")":"exp(log("+u+") * float(-"+a+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < "+this.outputShape[3]+";\n bool hasNextRow = c < "+this.outputShape[2]+";\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - "+o+";\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - "+o+"; j <= "+o+"; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+s+"));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * "+i+";\n setOutput(result);\n }\n "},Zi=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,a=t.effectiveFilterHeight,i=t.effectiveFilterWidth,o=a-1-t.padInfo.top,s=i-1-t.padInfo.left,u=a*i-1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+a+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+i+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+i+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n "},Qi=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,o=t.dilationWidth,s=t.effectiveFilterDepth,u=t.effectiveFilterHeight,l=t.effectiveFilterWidth,c=s-1-t.padInfo.front,p=u-1-t.padInfo.top,h=l-1-t.padInfo.left,f=s*u*l-1;this.userCode="\n const ivec3 pads = ivec3("+c+", "+p+", "+h+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+s+";\n wD += "+a+") {\n float dyD = float(dyDCorner + wD) / "+e+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n float dyR = float(dyRCorner + wR) / "+n+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+l+";\n wC += "+o+") {\n float dyC = float(dyCCorner + wC) / "+r+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = "+f+" -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * "+u+" * "+l+" +\n wR * "+l+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n "},to=function(t,e,n,r,a,i,o){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===a&&(a=!1),void 0===i&&(i=null),void 0===o&&(o=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;var s=n?t[1]:t[2],u=Math.ceil(s/2),l=n?"i * 2, rc.y":"rc.y, i * 2",c=r?"rc.z, i * 2":"i * 2, rc.z",p=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",d="";i&&(f=o?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+i+"\n }":"vec4 activation(vec4 x) {\n "+i+"\n }",d="result = activation(result);");var m=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+f+"\n\n const float sharedDimension = "+u+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+u+"; i++) {\n vec4 a = getMatrixA(rc.x, "+l+");\n vec4 b = getMatrixB(rc.x, "+c+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+p[0]+" * "+h[0]+");\n result += ("+p[1]+" * "+h[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+m+"\n\n "+d+"\n\n setOutput(result);\n }\n "},eo=function(){function t(t,e,n){this.variableNames=["probs"],this.outputShape=[t,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(e-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(e-1)+"));\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,"seed")),n.gl.uniform1f(e.seedLoc,t)}},t}(),no=function(t,e,n,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n "},ro=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t;var e=t.length;if(0===e)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var n=wa("rc",e),r=_a(e),a=function(t,e,n){if(1===t)return"rc > "+e[0];for(var r="",a=t-2;a= "+e[a],a= "+e+";\n bool rEdge = rp1 >= "+n+";\n "}(e,t[t.length-1],t[t.length-2],n),o=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var a=0;a<=1;a++){for(var i=(0===r?"r":"rp1")+", "+(0===a?"c":"cp1"),o=2;o= "+t[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+r[0]+"),\n cEdge ? 0. : getA("+r[1]+"),\n rEdge ? 0. : getA("+r[2]+"),\n rEdge || cEdge ? 0. : getA("+r[3]+")"}(t,n);this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n\n if("+a+") {\n setOutput(vec4(0));\n } else {\n "+i+"\n\n setOutput(vec4("+o+"));\n }\n }\n "}},ao=function(t,e,n){this.variableNames=["x"],this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});var r=t.length,a=_a(r),i=e.map(function(t){return t[0]}).join(","),o=e.map(function(e,n){return e[0]+t[n]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+a+" start = "+a+"("+i+");\n "+a+" end = "+a+"("+o+");\n\n void main() {\n "+a+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+n+"));\n } else {\n "+a+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+i+";\n int end = "+o+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+n+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n "},io=function(t,e,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});for(var r=t.length,a=_a(r),i=e.map(function(t){return t[0]}).join(","),o=e.map(function(e,n){return e[0]+t[n]}).join(","),s=wa("rc",r),u=wa("source",r),l=s[r-1]+" < "+this.outputShape[r-1],c=1===r?"source":"vec2("+u.slice(-2).join()+")",p=[a+" rc = outputLoc;",s[r-1]+" += 1;\n if("+l+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+l+") {"],h=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="",d=0,m=1===r?2:4;d= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+l+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var d=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(d="avgValue / count");var m=4*Math.floor(r/4),g=r%4,v="\n if ("+h+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+a+", "+i+");\n const ivec2 pads = ivec2("+c+", "+p+");\n const float initializationValue = "+f+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+f+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+o+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+m+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+v+"\n }\n\n int xC = xCCorner + "+m+";\n if ("+(1===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(2===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(3===g)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+v+"\n }\n }\n setOutput("+d+");\n }\n "}},so=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,a=t.strideDepth,i=t.strideHeight,o=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,l=t.dilationWidth,c=t.effectiveFilterDepth,p=t.effectiveFilterHeight,h=t.effectiveFilterWidth,f=t.padInfo.front,d=t.padInfo.top,m=t.padInfo.left;this.outputShape=t.outShape;var g="avg"===e,v="0.0";if(g||(v="-1.0 / 1e-20"),n)this.userCode="\n const ivec3 strides =\n ivec3("+a+", "+i+", "+o+");\n const ivec3 pads = ivec3("+f+", "+d+", "+m+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < "+c+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+h+";\n wC += "+l+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition =\n wD * "+p+" * "+h+" +\n wR * "+h+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var y=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(y="avgValue / count");var b=4*Math.floor(r/4),x=r%4,w="\n if ("+g+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+a+", "+i+", "+o+");\n const ivec3 pads = ivec3("+f+", "+d+", "+m+");\n const float initializationValue = "+v+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4("+v+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+c+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+b+"; wC += 4) {\n int xC = xCCorner + wC * "+l+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+l+", ch),\n getValue(batch, xD, xR, xC + 2 * "+l+", ch),\n getValue(batch, xD, xR, xC + 3 * "+l+", ch)\n );\n\n "+w+"\n }\n\n int xC = xCCorner + "+b+";\n if ("+(1===x)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(2===x)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+l+", ch),\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(3===x)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+l+", ch),\n getValue(batch, xD, xR, xC + 2 * "+l+", ch),\n initializationValue\n );\n\n "+w+"\n }\n }\n setOutput("+y+");\n }\n }\n "}},uo=function(t,e){this.variableNames=["x"];var n=t.windowSize,r=t.batchSize,a=t.inSize,i=Math.ceil(a/n);this.outputShape=[r,i];var o="0.0",s="";"prod"===e?o="1.0":"min"===e?(o="1.0 / 1e-20",s="min"):"max"===e&&(o="-1.0 / 1e-20",s="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===e?u="sumValue":"prod"===e?u="prodValue":"all"===e?u="allValue":"any"===e&&(u="anyValue");var l=4*Math.floor(n/4),c=n%4,p="\n if ("+("sum"===e)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===e)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",h="vec4";"all"===e?(o="1.0",p="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",h="bvec4"):"any"===e&&(o="0.0",p="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",h="bvec4");var f="";a%n>0&&(f="\n if (inIdx < 0 || inIdx >= "+a+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+o+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+f+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+o+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+l+"; i += 4) {\n int inIdx = inOffset + i;\n "+h+" values = "+h+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+p+"\n }\n\n int inIdx = inOffset + "+l+";\n if ("+(1===c)+") {\n "+h+" values = "+h+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(2===c)+") {\n "+h+" values = "+h+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(3===c)+") {\n "+h+" values = "+h+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+p+"\n }\n setOutput("+u+");\n }\n "},lo=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var n="",r=0;r<4;r++){var a="thisRC = rc;";r%2==1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),n+="\n "+a+"\n "+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(r>0?"}":"")+"\n "}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+Na(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n \n "+Sa(t)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+t[1]+";\n int cols = "+t[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n "},co=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],i=r[2],o=t.shape,s=o[1],u=o[2],l=[n&&s>1?a-1:a,n&&u>1?i-1:i],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=l[0]/c[0],h=l[1]/c[1],f=1/p,d=1/h,m=2*Math.ceil(f)+2,g=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+h+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+g+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(a-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(i-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},po=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],i=t[1],o=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?i-1:i,r&&n>1?o-1:o],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+");\n const vec2 inputShapeRC = vec2("+i+".0, "+o+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n "},ho=function(t,e,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var a=t[0],i=t[1],o=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?i-1:i,r&&n>1?o-1:o],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+",\n "+u[1]/l[1]+");\n const vec3 inputShapeRC = vec3("+i+".0, "+o+".0,\n "+o+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+";\n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n "},fo=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],i=r[2],o=t.shape,s=o[1],u=o[2],l=[n&&s>1?a-1:a,n&&u>1?i-1:i],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=l[0]/c[0],h=l[1]/c[1],f=1/p,d=1/h,m=2*Math.ceil(f)+2,g=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+h+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+g+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+l[0]+") *\n (float(dyR) / float("+c[0]+"));\n\n float sourceFracCol =\n float("+l[1]+") *\n (float(dyC) / float("+c[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+a+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+i+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},mo=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],i=t[1],o=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?i-1:i,r&&n>1?o-1:o],l=[r&&e>1?e-1:e,r&&n>1?n-1:n],c=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+");\n const vec2 inputShapeRC = vec2("+i+".0, "+o+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+c+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n "},go=function(t,e){this.variableNames=["x"];var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");if(this.outputShape=t,1!==n){var r=t.map(function(n,r){return function(n){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+" - coords["+n+"] - 1":"coords["+n+"]"}(r)}).join(","),a=_a(n);this.userCode="\n void main() {\n "+a+" coords = getOutputCoords();\n setOutput(getX("+r+"));\n }\n "}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+t[0]+" - coord - 1));\n }\n "},vo=function(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");this.outputShape=t;var r=wa("rc",n),a=r[n-1]+" + 1 < "+this.outputShape[n-1],i=r[n-2]+" + 1 < "+this.outputShape[n-2],o=_a(n);function s(n){var r=t.map(function(r,a){return function(n,r){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+" - "+r[n]+" - 1":""+r[n]}(a,n)});return"getChannel(getX("+r.join(",")+"), vec2("+r.slice(-2).join(",")+"))"}this.userCode=1===n?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+t[0]+" - rc - 1),\n "+t[0]+" - rc - 1);\n if("+a+"){\n result.g = getChannel(getX("+t[0]+" - (rc + 1) - 1),\n "+t[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+o+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+s(r.slice())+";\n if("+a+"){\n result.g = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",s(t)}(r.slice())+";\n }\n if("+i+") {\n result.b = "+function(t){return t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n if("+a+") {\n result.a = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n }\n }\n setOutput(result);\n }\n "},yo=function(t,e,n,r,a,i,o){void 0===o&&(o=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=i;var s=_a(a.length),u=_a(i.length),l="";1===n?l="i":2===n&&(l="i, j");var c="getIndices("+l+")",p="";1===r?p="i":2===r&&(p="i, coords[1]");var h="getUpdates("+p+")",f=e>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+a+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+t+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+e+"; j++) {\n int index = round("+c+");\n flattenedIndex += index * "+f+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+h+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n "},bo=function(t,e){this.variableNames=["x","segmentIds"];var n=t.windowSize,r=t.batchSize,a=t.inSize,i=t.numSegments,o=i*Math.ceil(a/n);this.outputShape=[r,o];var s=4*Math.floor(n/4),u=n%4,l="\n sumValue += dot(values, segFilter);\n ",c="";a%n>0&&(c="\n if (inIdx < 0 || inIdx >= "+a+") {\n return initializationValue;\n }\n ");var p="";a%n>0&&(p="\n if (inIdx < 0 || inIdx >= "+a+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+c+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+p+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+i+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+i+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+l+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+l+"\n } else if ("+(2===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+l+"\n } else if ("+(3===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+l+"\n }\n setOutput(sumValue);\n }\n "},xo=function(t,e,n){var r,a;if(this.variableNames=["c","a","b"],this.outputShape=e,n>4)throw Error("Where for rank "+n+" is not yet supported");if(1===n)a="resRC",r="resRC";else{for(var i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],s=[],u=0;u= 1.0) {\n setOutput(getA("+a+"));\n } else {\n setOutput(getB("+a+"));\n }\n }\n "},wo=function(){function t(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=_a(this.rank),r="uniform int start["+this.rank+"];",a=function(t){if(1===t)return"sourceLoc";if(t<=6)return Co.slice(0,t).map(function(t){return"sourceLoc."+t}).join(",");throw Error("Slicing for rank "+t+" is not yet supported")}(this.rank);e="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+t.map(function(t,e){return"sourceLoc."+Co[e]+" = start["+e+"] + coords."+Co[e]+";"}).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+e+"\n setOutput(getSource("+a+"));\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),Co=["x","y","z","w","u","v"],No=function(){function t(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=_a(this.rank),n=wa("coords",this.rank),r=wa("sourceLoc",this.rank),a=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",i="getChannel(getSource("+r.join()+"), "+a+")",o="\n result.x = "+i+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+i+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+t[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+i+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+i+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+e+"("+t.map(function(t,e){return"start["+e+"]"}).join()+");":t.map(function(t,e){return r[e]+" = "+n[e]+" + start["+e+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+e+" coords = getOutputCoords();\n "+e+" sourceLoc;\n "+u+"\n vec4 result = vec4(0.);\n "+o+"\n "+s+"\n setOutput(result);\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),So=function(t,e,n){this.variableNames=["x"],this.outputShape=n;var r=n.length,a=_a(n.length),i=_a(n.length),o="";if(1===r)o="coords * strides + begin";else{var s=0;o=n.map(function(t,e){return s++,1===n.length?"coords * strides["+e+"] + begin["+e+"]":"coords["+(s-1)+"] * strides["+e+"] + begin["+e+"]"}).join(",")}this.userCode="\n "+a+" begin = "+a+"("+t+");\n "+a+" strides = "+a+"("+e+");\n\n void main() {\n "+i+" coords = getOutputCoords();\n setOutput(getX("+o+"));\n }\n "},Io=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return t.prototype.acquireTexture=function(t,e,n){var r,a=ko(e,n),i=Eo(t,a,n);if(i in this.freeTextures||(this.freeTextures[i]=[]),i in this.usedTextures||(this.usedTextures[i]=[]),this.freeTextures[i].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var o=this.freeTextures[i].shift();return this.usedTextures[i].push(o),o}return this.numUsedTextures++,this.log(),a===_t.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):a===_t.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):a===_t.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):a===_t.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):a===_t.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[i].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var a=Eo(e,ko(n,r),r);a in this.freeTextures||(this.freeTextures[a]=[]),this.freeTextures[a].push(t),this.numFreeTextures++,this.numUsedTextures--;var i=this.usedTextures[a],o=i.indexOf(t);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(o,1),this.log()}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")")}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e)});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},t}();function ko(t,e){if(t===Ot.UPLOAD)return _t.PACKED_2X2_FLOAT32;if(t===Ot.RENDER||null==t)return function(t){return o().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?t?_t.PACKED_2X2_FLOAT32:_t.UNPACKED_FLOAT32:t?_t.PACKED_2X2_FLOAT16:_t.UNPACKED_FLOAT16}(e);if(t===Ot.DOWNLOAD||t===Ot.PIXELS)return _t.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+t)}function Eo(t,e,n){return t[0]+"_"+t[1]+"_"+e+"_"+n}var Ao=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r5)throw Error("Tile for rank "+e+" is not yet supported");if(1===e)return"imod(resRC, "+t[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],a=0;a6)throw Error("Transpose for rank "+e+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(e),a=0;a6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var a=_a(this.rank),i=xa("rc",this.rank),o=new Array(this.rank);for(r=0;r0?this.gpgpu.beginQuery():{startMs:$(),endMs:null}},e.prototype.endTimer=function(t){return o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(this.gpgpu.endQuery(),t):(t.endMs=$(),t)},e.prototype.getQueryTime=function(t){return r(this,void 0,void 0,function(){var e;return a(this,function(n){return o().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]})})},e.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t)){if(this.pendingRead.has(t))return this.pendingDisposal.add(t),void this.pendingDeletes++;if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t)}}},e.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,a=e.texShape,i=e.usage,o=e.isPacked,s=e.slice,u=s&&s.origDataId||t,l=this.dataRefCount.get(u);l>1?this.dataRefCount.set(u,l-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(a,r),this.textureManager.releaseTexture(n,a,i,o)));var c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null},e.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},e.prototype.getDataInfo=function(t){return this.texData.get(t)},e.prototype.getCPUBackend=function(){return o().getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=At.findBackend("cpu")),this.cpuBackend):null},e.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every(function(t){return null==n.texData.get(t.dataId).texture&&t.sizeo().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var a=Math.floor(t.length/2),i=this.concat(t.slice(0,a),e),s=this.concat(t.slice(a),e);return this.concat([i,s],e)}if(o().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&t[0].rank>1){var u=new Qa(t.map(function(t){return t.shape}),e);return this.compileAndRun(u,t)}var l=nn(t.map(function(t){return t.shape}),e),c=t.map(function(t){return t.as2D(-1,x(t.shape.slice(e)))}),p=new Za(c.map(function(t){return t.shape}));return this.compileAndRun(p,c).reshape(l)},e.prototype.neg=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.neg(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Wo,t.dtype);var e=new _o(t.shape,Wo);return this.compileAndRun(e,[t])},e.prototype.batchMatMul=function(t,e,n,r){var a=n?t.shape[2]:t.shape[1],i=r?e.shape[1]:e.shape[2],o=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===a||1===i)&&o>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===i?t:t.as3D(s,o,1),l=1===i?2:1,c=1===i?e.as3D(s,1,o):e;return this.multiply(u,c).sum(l,!0)}var p=bt(t.dtype,e.dtype),h=new to(t.shape,[s,a,i],n,r);return this.compileAndRun(h,[t,e],p)},e.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,a=t.transposeB,i=t.bias,o=t.activation,s=t.preluActivationWeights,u=r?e.shape[2]:e.shape[1],l=a?n.shape[1]:n.shape[2],c=e.shape[0],p=bt(e.dtype,n.dtype),h=null!=i,f=null!=s,d=o?Qo(o,!0):null,m=new to(e.shape,[c,u,l],r,a,h,d,f),g=[e,n];return i&&g.push(i),s&&g.push(s),this.compileAndRun(m,g,p)},e.prototype.multiply=function(t,e){if("complex64"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),a=new Va("return areal * breal - aimag * bimag;",t.shape,e.shape),i=new Va("return areal * bimag + aimag * breal;",t.shape,e.shape),s=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag),this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)],u=this.compileAndRun(a,s),l=this.compileAndRun(i,s),c=this.complex(u,l);return u.dispose(),l.dispose(),c}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Ga,t.dtype);var p=new Ha(Ga,t.shape,e.shape);return this.compileAndRun(p,[t,e],t.dtype)},e.prototype.batchNormalization=function(t,e,n,r,a,i){var s=[t,e,n],u=null;null!=i&&(u=i.shape,s.push(i));var l=null;if(null!=a&&(l=a.shape,s.push(a)),o().getBool("WEBGL_PACK_NORMALIZATION")){var c=new Wa(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(c,s)}var p=new Pa(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(p,s)},e.prototype.localResponseNormalization4D=function(t,e,n,r,a){var i=o().getBool("WEBGL_PACK_NORMALIZATION")?new Ji(t.shape,e,n,r,a):new $i(t.shape,e,n,r,a);return this.compileAndRun(i,[t])},e.prototype.LRNGrad=function(t,e,n,r,a,i,o){var s=new Yi(e.shape,r,a,i,o);return this.compileAndRun(s,[e,n,t])},e.prototype.tile=function(t,e){if("string"===t.dtype){var n=this.readSync(t.dataId).map(function(t){return Z(t)});return da(jn(t.shape,t.dtype,n),e)}var r=new Ao(t.shape,e);return this.compileAndRun(r,[t])},e.prototype.pad=function(t,e,n){var r=o().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new io(t.shape,e,n):new ao(t.shape,e,n);return this.compileAndRun(r,[t])},e.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=o().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new To(t.shape,e):new Ro(t.shape,e);return this.compileAndRun(n,[t])},e.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new ki(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},e.prototype.batchToSpaceND=function(t,e,n){g(t.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),a=vr(t.shape,e,r),i=yr(a.length,e.length),o=br(t.shape,e,r),s=xr(n,e.length),u=wr(o,n,e.length);return t.reshape(a).transpose(i).reshape(o).slice(s,u)},e.prototype.spaceToBatchND=function(t,e,n){g(t.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),a=[[0,0]];a.push.apply(a,n);for(var i=1+e.length;ie||n===t?r=!0:n=j(t,n+1);return n}(o,a),u=new bo({windowSize:s,inSize:o,batchSize:i,numSegments:a},e),l=this.compileAndRun(u,[t,n],r);return l.shape[1]===a?l:(n=Cn(0,a).tile([o/s]),this.segOpCompute(l,e,n,r,a))},e.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(Je("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!o().getBool("WEBGL_PACK_REDUCE")||t.rank<=2){var a=$e(t.shape,r),i=a[0],s=x(a[1]),u=t.as2D(-1,s);return this.argReduce(u,n).reshape(i)}return this.argReducePacked(t,n)},e.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,"min")},e.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,"max")},e.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(t.rank-1)+" but got axis="+e);var a=new hi(t.shape,n,r);return this.compileAndRun(a,[t])},e.prototype.equal=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(equal(a, b));\n","bool");var n=new Ha("return float(a == b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.notEqual=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(notEqual(a, b));\n","bool");var n=new Ha("return float(a != b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThan(a, b));\n","bool");var n=new Ha("return float(a < b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.lessEqual=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThanEqual(a, b));\n","bool");var n=new Ha("return float(a <= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThan(a, b));\n","bool");var n=new Ha("return float(a > b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.greaterEqual=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThanEqual(a, b));\n","bool");var n=new Ha("return float(a >= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.logicalNot=function(t){var e=new _o(t.shape,"return float(!(x >= 1.0));");return this.compileAndRun(e,[t])},e.prototype.logicalAnd=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var n=new Ha("return float(a >= 1.0 && b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.logicalOr=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var n=new Ha("return float(a >= 1.0 || b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.select=function(t,e,n){var r=new xo(t.rank,e.shape,e.rank);return this.compileAndRun(r,[t,e,n],bt(e.dtype,n.dtype))},e.prototype.where=function(t){Ue("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var e=t.dataSync();return ga(t.shape,e)},e.prototype.topk=function(t,e,n){return ma(t.dataSync(),t.shape,t.dtype,e)},e.prototype.min=function(t,e){Je("min",e,t.rank);var n=$e(t.shape,e),r=n[0],a=x(n[1]),i=t.as2D(-1,a);return this.reduce(i,"min",i.dtype).reshape(r)},e.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ha("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.mod=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ha("if (b == 0.0) return NAN;\n return mod(a, b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);Je("max",e,t.rank);var n=$e(t.shape,e),r=n[0],a=x(n[1]),i=t.as2D(-1,a);return this.reduce(i,"max",i.dtype).reshape(r)},e.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ha("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.all=function(t,e){Je("all",e,t.rank);var n=$e(t.shape,e),r=n[0],a=x(n[1]),i=t.as2D(-1,a);return this.reduce(i,"all",i.dtype).reshape(r)},e.prototype.any=function(t,e){Je("any",e,t.rank);var n=$e(t.shape,e),r=n[0],a=x(n[1]),i=t.as2D(-1,a);return this.reduce(i,"any",i.dtype).reshape(r)},e.prototype.squaredDifference=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("return (a - b) * (a - b);",t.shape,e.shape):new Ha("return (a - b) * (a - b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.realDivide=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n","float32",!0);var n=new Ha("\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",t.shape,e.shape);return this.compileAndRun(n,[t,e],"float32")},e.prototype.floorDiv=function(t,e){if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n","int32");var n=new Ha("\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",t.shape,e.shape);return this.compileAndRun(n,[t,e],"int32")},e.prototype.add=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Ua);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=bt(t.dtype,e.dtype);if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Ua,n);var r=new Ha(Ua,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},e.prototype.packedUnaryOp=function(t,e,n){var r=new Yo(t.shape,e);return this.compileAndRun(r,[t],n)},e.prototype.packedBinaryOp=function(t,e,n,r,a){void 0===a&&(a=!1);var i=new Xa(n,t.shape,e.shape,a);return this.compileAndRun(i,[t,e],r)},e.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,a=this.texData.get(t.dataId),i=this.texData.get(e.dataId),o=[[a.complexTensors.real,i.complexTensors.real],[a.complexTensors.imag,i.complexTensors.imag]].map(function(a){var i=a[0],o=a[1],s=r.makeComplexComponentTensorInfo(t,i),u=r.makeComplexComponentTensorInfo(e,o),l=new Ha(n,t.shape,e.shape);return r.compileAndRun(l,[s,u],bt(i.dtype,o.dtype))}),s=o[0],u=o[1],l=this.complex(s,u);return s.dispose(),u.dispose(),l},e.prototype.makeComplexComponentTensorInfo=function(t,e){return{dataId:e.dataId,dtype:e.dtype,shape:t.shape}},e.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>o().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var a=t.map(function(t){return t.dtype}).reduce(function(t,e){return bt(t,e)}),i=t.map(function(t){return t.shape}),s=o().getBool("WEBGL_PACK")?new ya(t[0].shape,i):new va(t[0].shape,i);return this.compileAndRun(s,t,a)},e.prototype.subtract=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,ja);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=bt(t.dtype,e.dtype);if(o().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,ja,t.dtype);var r=new Ha(ja,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},e.prototype.pow=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ha("\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nif (b == 0.0) {\n return 1.0;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",t.shape,e.shape),r=bt(t.dtype,e.dtype);return this.compileAndRun(n,[t,e],r)},e.prototype.ceil=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.ceil(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Vo,t.dtype);var e=new _o(t.shape,Vo);return this.compileAndRun(e,[t])},e.prototype.floor=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.floor(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Uo,t.dtype);var e=new _o(t.shape,Uo);return this.compileAndRun(e,[t])},e.prototype.sign=function(t){var e=new _o(t.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(e,[t])},e.prototype.isNaN=function(t){var e=new _o(t.shape,"return float(isnan(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.isInf=function(t){var e=new _o(t.shape,"return float(isinf(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.isFinite=function(t){var e=new _o(t.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.round=function(t){var e=new _o(t.shape,"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n");return this.compileAndRun(e,[t])},e.prototype.exp=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.exp(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,jo,t.dtype);var e=new _o(t.shape,jo);return this.compileAndRun(e,[t])},e.prototype.expm1=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.expm1(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Go,t.dtype);var e=new _o(t.shape,Go);return this.compileAndRun(e,[t])},e.prototype.log=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.log(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",t.dtype);var e=new _o(t.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(e,[t])},e.prototype.log1p=function(t){var e=new _o(t.shape,"return log(1.0 + x);");return this.compileAndRun(e,[t])},e.prototype.sqrt=function(t){var e=new _o(t.shape,"return sqrt(x);");return this.compileAndRun(e,[t])},e.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new _o(t.shape,"return inversesqrt(x);");return this.compileAndRun(e,[t])},e.prototype.reciprocal=function(t){var e=new _o(t.shape,"return 1.0 / x;");return this.compileAndRun(e,[t])},e.prototype.relu=function(t){var e;return e=o().getBool("WEBGL_PACK")?new Yo(t.shape,Ko):new _o(t.shape,Lo),this.compileAndRun(e,[t])},e.prototype.relu6=function(t){var e;return e=o().getBool("WEBGL_PACK")?new Yo(t.shape,Xo):new _o(t.shape,Bo),this.compileAndRun(e,[t])},e.prototype.prelu=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa(Ka,t.shape,e.shape):new Ha(qa,t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.elu=function(t){if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,$o,t.dtype);var e=new _o(t.shape,Po);return this.compileAndRun(e,[t])},e.prototype.eluDer=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",t.shape,e.shape):new Ha("return (b >= 1.0) ? a : a * (b + 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.selu=function(t){var e=new _o(t.shape,"\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = 1.7580993408473768;\n float scale = 1.0507009873554805;\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n");return this.compileAndRun(e,[t])},e.prototype.int=function(t){var e=new _o(t.shape,"return float(int(x));");return this.compileAndRun(e,[t],"int32")},e.prototype.clip=function(t,e,n){var r,a=(r=o().getBool("WEBGL_PACK_CLIP")?new Ya(t.shape):new $a(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,a)},e.prototype.abs=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.abs(t);if(o().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,zo,t.dtype);var e=new _o(t.shape,zo);return this.compileAndRun(e,[t])},e.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new Ja(t.shape),r=[this.makeComplexComponentTensorInfo(t,e.complexTensors.real),this.makeComplexComponentTensorInfo(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},e.prototype.sigmoid=function(t){var e=new _o(t.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(e,[t])},e.prototype.softplus=function(t){var e=new _o(t.shape,"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n");return this.compileAndRun(e,[t])},e.prototype.sin=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n return sin(x);\n");return this.compileAndRun(e,[t])},e.prototype.cos=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n return cos(x);\n");return this.compileAndRun(e,[t])},e.prototype.tan=function(t){var e=new _o(t.shape,"return tan(x);");return this.compileAndRun(e,[t])},e.prototype.asin=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n");return this.compileAndRun(e,[t])},e.prototype.acos=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n");return this.compileAndRun(e,[t])},e.prototype.atan=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n return atan(x);\n");return this.compileAndRun(e,[t])},e.prototype.atan2=function(t,e){var n=o().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xa("\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Ha("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.sinh=function(t){var e=new _o(t.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},e.prototype.cosh=function(t){var e=new _o(t.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},e.prototype.tanh=function(t){var e=new _o(t.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(e,[t])},e.prototype.asinh=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;return log(x + sqrt(x * x + 1.0));");return this.compileAndRun(e,[t])},e.prototype.acosh=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));");return this.compileAndRun(e,[t])},e.prototype.atanh=function(t){var e=new _o(t.shape,"if (isnan(x)) return x;\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;");return this.compileAndRun(e,[t])},e.prototype.erf=function(t){var e=new _o(t.shape,'\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = 0.3275911;\n float a1 = 0.254829592;\n float a2 = -0.284496736;\n float a3 = 1.421413741;\n float a4 = -1.453152027;\n float a5 = 1.061405429;\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n');return this.compileAndRun(e,[t])},e.prototype.step=function(t,e){var n=new _o(t.shape,function(t){return void 0===t&&(t=0),Fo+"\n return x > 0.0 ? 1.0 : float("+t+");\n "}(e));return this.compileAndRun(n,[t])},e.prototype.conv2dByMatMul=function(t,e,n,r,a,i){var s=t.shape,u=this.texData.get(t.dataId),l=n.inChannels,c=s[0]*s[1]*s[2],p=n.outChannels,h="channelsLast"===n.dataFormat,f=(1===c||1===p)&&l>1e3,d=s[2]%2!=0&&!!u.isPacked;if(f||!o().getBool("WEBGL_LAZILY_UNPACK")||!o().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!d){var m=h?s[0]*s[1]*s[2]:s[0]*s[2]*s[3],v=this.reshape(t,[1,m,n.inChannels]),y=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.fusedBatchMatMul({a:v,b:y,transposeA:!1,transposeB:!1,bias:r,activation:a,preluActivationWeights:i}),n.outShape)}var b=h?s[0]*s[1]*(s[2]+1):s[0]*s[2]*(s[3]+1),x={dataId:t.dataId,shape:[1,b,n.inChannels],dtype:t.dtype},w=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,g(Se(u.shape,x.shape),function(){return"packed reshape "+u.shape+" to "+x.shape+" isn't free"});var C=this.reshape(e,[1,n.inChannels,n.outChannels]),N=this.fusedBatchMatMul({a:x,b:C,transposeA:!1,transposeB:!1,bias:r,activation:a,preluActivationWeights:i}),S=this.texData.get(N.dataId);return g(S.isPacked,function(){return"batchMatMul result is expected to be packed"}),u.shape=w,S.shape=n.outShape,At.makeTensorFromDataId(N.dataId,n.outShape,N.dtype)},e.prototype.conv2dWithIm2Row=function(t,e,n,r,a,i){var o=n.filterWidth,s=n.filterHeight,u=n.inChannels,l=n.outWidth,c=n.outHeight,p="channelsLast"===n.dataFormat,h=o*s*u,f=c*l,d=[h,f],m=t.squeeze([0]),g=e.reshape([1,h,-1]),v=new Xi(d,m.shape,n),y=this.compileAndRun(v,[m]).reshape([1,d[0],d[1]]),b=null!=r,x=null!=i,w=a?Qo(a,!0):null,C=new to(y.shape,[1,f,n.outChannels],!0,!1,b,w,x),N=[y,g];r&&N.push(r),x&&N.push(i);var S=this.compileAndRun(C,N);return p?S.reshape([1,c,l,n.outChannels]):S.reshape([1,n.outChannels,c,l])},e.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,a=t.bias,i=t.activation,s=t.preluActivationWeights;if(1===r.filterHeight&&1===r.filterWidth&&1===r.dilationHeight&&1===r.dilationWidth&&1===r.strideHeight&&1===r.strideWidth&&("SAME"===r.padInfo.type||"VALID"===r.padInfo.type))return this.conv2dByMatMul(e,n,r,a,i,s);if(o().getBool("WEBGL_CONV_IM2COL")&&1===e.shape[0])return this.conv2dWithIm2Row(e,n,r,a,i,s);var u=null!=a,l=null!=s,c=i?Qo(i,!1):null,p=new si(r,u,c,l),h=[e,n];return a&&h.push(a),s&&h.push(s),this.compileAndRun(p,h)},e.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(o().getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new si(n);return this.compileAndRun(r,[t,e])},e.prototype.conv2dDerInput=function(t,e,n){var r=new ni(n);return this.compileAndRun(r,[t,e])},e.prototype.conv2dDerFilter=function(t,e,n){var r=new ei(n);return this.compileAndRun(r,[t,e])},e.prototype.fusedDepthwiseConv2D=function(t){var e,n=t.input,r=t.filter,a=t.convInfo,i=t.bias,s=t.activation,u=t.preluActivationWeights,l=o().getBool("WEBGL_PACK_DEPTHWISECONV")&&a.strideWidth<=2&&a.outChannels/a.inChannels==1,c=s?Qo(s,l):null,p=[n,r],h=null!=i,f=null!=u;return h&&p.push(i),f&&p.push(u),l?(e=new ci(a,h,c,f),this.compileAndRun(e,p)):(e=new li(a,h,c,f),this.compileAndRun(e,p))},e.prototype.depthwiseConv2D=function(t,e,n){var r;return o().getBool("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new ci(n),this.compileAndRun(r,[t,e])):(r=new li(n),this.compileAndRun(r,[t,e]))},e.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new oi(n);return this.compileAndRun(r,[t,e])},e.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new ii(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3d=function(t,e,n){var r=new ui(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3dDerInput=function(t,e,n){var r=new ai(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3dDerFilter=function(t,e,n){var r=new ri(n);return this.compileAndRun(r,[t,e])},e.prototype.maxPool=function(t,e){var n=new oo(e,"max",!1);return this.compileAndRun(n,[t])},e.prototype.avgPool=function(t,e){var n=new oo(e,"avg",!1);return this.compileAndRun(n,[t],"float32")},e.prototype.maxPoolBackprop=function(t,e,n,r){var a=new oo(r,"max",!0),i=this.compileAndRun(a,[e]),o=new Zi(r),s=this.compileAndRun(o,[t,i],e.dtype);return i.dispose(),s},e.prototype.avgPoolBackprop=function(t,e,n){var r=new La(n);return this.compileAndRun(r,[t],e.dtype)},e.prototype.cast=function(t,e){return ra(t,e,this)},e.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),a=0,i=0;i1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+e});var r=t.shape[0],a="NHWC"===n?t.shape[1]:t.shape[2],i="NHWC"===n?t.shape[2]:t.shape[3],o="NHWC"===n?t.shape[3]:t.shape[1],s=a*e,u=i*e,l=o/(e*e),c=new gi("NHWC"===n?[r,s,u,l]:[r,l,s,u],e,n);return this.compileAndRun(c,[t])},e.prototype.split=function(t,e,n){return fa(t,e,n)},e.prototype.scatterND=function(t,e,n){var r=Ir(0,t,n),a=r.sliceRank,i=r.numUpdates,o=r.sliceSize,s=r.strides,u=r.outputSize,l=[u/o,o],c=t.reshape([i,a]),p=e.reshape([i,o]);if(0===u)return aa(un([]),n);var h=cn(0),f=new yo(i,a,c.rank,p.rank,s,l);return this.compileAndRun(f,[p,c,h]).reshape(n)},e.prototype.sparseToDense=function(t,e,n,r){var a=Ir(0,t,n),i=a.sliceRank,o=a.numUpdates,s=a.strides,u=a.outputSize,l=new yo(o,i,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(l,[e,t,r]).reshape(n)},e.prototype.fft=function(t){return this.fftImpl(t,!1)},e.prototype.ifft=function(t){return this.fftImpl(t,!0)},e.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new Ci("return real * expR - imag * expI;",t.shape,e),a=new Ci("return real * expI + imag * expR;",t.shape,e),i=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag)],o=this.compileAndRun(r,i),s=this.compileAndRun(a,i),u=this.complex(o,s).as2D(t.shape[0],t.shape[1]);return o.dispose(),s.dispose(),u},e.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],a=Cr(t,e),i=a[0],o=a[1],s=a[2],u=a[3],l=e.reshape([o,r]),c=t.reshape([t.size/s,s]),p=new Ei(r,u,[o,s]);return this.compileAndRun(p,[c,l]).reshape(i)},e.prototype.fill=function(t,e,n){if("string"===(n=n||V(e))){var r=D(n,x(t));return r.fill(e),At.makeTensor(r,t,n,this)}var a=new Ni(t,e),i=a.getCustomSetupFunc(e);return this.compileAndRun(a,[],n,i)},e.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(t.shape,1,t.dtype)},e.prototype.zerosLike=function(t){return this.fill(t.shape,"string"===t.dtype?"":0,t.dtype)},e.prototype.linspace=function(t,e,n){return ia(t,e,n)},e.prototype.makeTensorInfo=function(t,e){var n=this.write(null,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}},e.prototype.makeOutput=function(t,e){var n=this.makeTensorInfo(t,e).dataId;return At.makeTensorFromDataId(n,t,e,this)},e.prototype.unpackTensor=function(t){var e=new Jo(t.shape);return this.runWebGLProgram(e,[t],t.dtype)},e.prototype.packTensor=function(t){var e=new ro(t.shape);return this.runWebGLProgram(e,[t],t.dtype,null,!0)},e.prototype.packedReshape=function(t,e){var n=[be(t.shape)].concat(xe(t.shape)),r={dtype:t.dtype,shape:n,dataId:t.dataId},a=[be(e)].concat(xe(e)),i=new lo(a,n),o=this.runWebGLProgram(i,[r],t.dtype,null,!0);return{dataId:o.dataId,shape:e,dtype:o.dtype}},e.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,a=n.shape,i=n.dtype,o=we(a);return e=r?new mi(o):new di(o),{dtype:i,shape:a,dataId:this.runWebGLProgram(e,[{shape:o,dtype:i,dataId:t}],i,null,!0).dataId}},e.prototype.runWebGLProgram=function(t,e,n,r,a){var i=this;void 0===a&&(a=!1);var s=this.makeTensorInfo(t.outputShape,n),u=this.texData.get(s.dataId);if(t.packedOutput&&(u.isPacked=!0),t.outPackingScheme===Dt.DENSE){var l=Wt(t.outputShape);u.texShape=l.map(function(t){return 2*t})}if(null!=t.outTexUsage&&(u.usage=t.outTexUsage),0===x(s.shape))return u.values=T(s.dtype,0),s;var c=[],p=e.map(function(e){if("complex64"===e.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var n=i.texData.get(e.dataId);if(null==n.texture){if(!t.packedInputs&&x(e.shape)<=o().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.packedInputs&&(n.isPacked=!0,n.shape=e.shape)}else if(!!n.isPacked!=!!t.packedInputs)e=n.isPacked?i.unpackTensor(e):i.packTensor(e),c.push(e),n=i.texData.get(e.dataId);else if(n.isPacked&&!Se(n.shape,e.shape)){var r=e,a=e.shape;e.shape=n.shape,e=i.packedReshape(e,a),c.push(e),n=i.texData.get(e.dataId),r.shape=a}return i.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}});this.uploadToGPU(s.dataId);var h,f={shape:s.shape,texData:u,isUniform:!1},d=function(t,e,n){var r="";p.concat(n).forEach(function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?"uniform":t.texData.texShape;r+=t.shape+"_"+n+"_"+e});var a=t.userCode;return t.constructor.name+"_"+r+"_"+a}(t,0,f),m=this.getAndSaveBinary(d,function(){return function(t,e,n,r){var a=e.userCode,i=n.map(function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}}),s=i.map(function(t){return t.shapeInfo}),u={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=ka(i,u,a,e.packedInputs),c=t.createProgram(l),p=null,h=t.getUniformLocation(c,"NAN",!1);1===o().getNumber("WEBGL_VERSION")&&(p=t.getUniformLocation(c,"INFINITY",!1));for(var f={},d=0;d0)return 32}return 16})),this.floatPrecisionValue},e.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},e.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,a=n.dtype,i=n.values,o=n.texture,s=n.usage,u=n.isPacked;if(null==o){var l,c=null!=this.activeTimers;c&&(l=$());var p=n.texShape;if(null==p&&(p=Ce(r,u),n.texShape=p),null!=i){var h=we(r),f=void 0,d=p[1],m=p[0],g=i instanceof Uint8Array;u?(d=(e=Vt(p[0],p[1]))[0],m=e[1],f=new wi(h,[m,d],g)):f=new xi(h,[m,d],g);var v=this.makeTensorInfo([m,d],a);this.texData.get(v.dataId).usage=g?Ot.PIXELS:Ot.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(v.dataId),d,m,i);var y=this.runWebGLProgram(f,[v],a,null,!0),b=this.texData.get(y.dataId);n.texture=b.texture,n.texShape=b.texShape,n.isPacked=b.isPacked,n.usage=b.usage,this.disposeData(v.dataId),this.texData.delete(y.dataId),n.values=null,c&&(this.uploadWaitMs+=$()-l)}else{var x=this.acquireTexture(p,s,a,u);n.texture=x}}},e.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if("float32"===e||"complex64"===e)return t;if("int32"===e||"bool"===e){for(var n="int32"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r1024*this.numMBBeforeWarning*1024){var 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(t,e,r)},e.prototype.computeBytes=function(t,e){return t[0]*t[1]*z(e)},e}(Wr);Rt()&&At.registerBackend("webgl",function(){return new es},2);var ns=rn({square_:function(t){var e=qe(t,"x","square"),n=[e];return At.runKernelFunc(function(t,n){return n([e]),t.square(e)},{x:e},function(t,e){var n=e[0];return{x:function(){return t.mul(n.toFloat().mul(2))}}},"Square",{},n,[])}}),rs=rn({abs_:function(t){var e=qe(t,"x","abs");return"complex64"===e.dtype?At.runKernelFunc(function(t){return t.complexAbs(e)},{$x:e}):At.runKernelFunc(function(t,n){var r=t.abs(e);return n([e]),r},{x:e},function(t,e){var n=e[0];return{x:function(){return t.mul(n.toFloat().step(-1))}}},"Abs")}}),as=rn({acos_:function(t){var e=qe(t,"x","acos");return At.runKernelFunc(function(t,n){var r=t.acos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(cn(1).sub(n.toFloat().square()).sqrt()).neg()}}})}}),is=rn({acosh_:function(t){var e=qe(t,"x","acosh");return At.runKernelFunc(function(t,n){var r=t.acosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}})}}),os=rn({asin_:function(t){var e=qe(t,"x","asin");return At.runKernelFunc(function(t,n){var r=t.asin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(cn(1).sub(n.toFloat().square()).sqrt())}}})}}),ss=rn({asinh_:function(t){var e=qe(t,"x","asinh");return At.runKernelFunc(function(t,n){var r=t.asinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(cn(1).add(n.toFloat().square()).sqrt())}}})}}),us=rn({atan_:function(t){var e=qe(t,"x","atan");return At.runKernelFunc(function(t,n){var r=t.atan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().square().add(1))}}})}}),ls=rn({atanh_:function(t){var e=qe(t,"x","atanh");return At.runKernelFunc(function(t,n){var r=t.atanh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(cn(1).sub(n.toFloat().square()))}}})}}),cs=rn({ceil_:function(t){var e=qe(t,"x","ceil");return At.runKernelFunc(function(t){return t.ceil(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),ps=rn({clipByValue_:function(t,e,n){var r=qe(t,"x","clipByValue");return g(e<=n,function(){return"Error in clip: min ("+e+") must be less than or equal to max ("+n+")."}),At.runKernelFunc(function(t,a){var i=t.clip(r,e,n);return a([r]),i},{$x:r},function(t,r){var a=r[0];return{$x:function(){return t.where(a.greaterEqual(e).logicalAnd(a.lessEqual(n)),Sn(t))}}})}}),hs=rn({cos_:function(t){var e=qe(t,"x","cos");return At.runKernelFunc(function(t,n){var r=t.cos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sin().neg().mul(t)}}})}}),fs=rn({cosh_:function(t){var e=qe(t,"x","cosh");return At.runKernelFunc(function(t,n){var r=t.cosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sinh().mulStrict(t)}}})}}),ds=rn({erf_:function(t){var e=qe(t,"x","erf");return g("int32"===e.dtype||"float32"===e.dtype,function(){return"Input dtype must be `int32` or `float32`."}),"int32"===e.dtype&&(e=e.toFloat()),At.runKernelFunc(function(t,n){var r=t.erf(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),ms=rn({exp_:function(t){var e=qe(t,"x","exp");return At.runKernelFunc(function(t,n){var r=t.exp(e);return n([r]),r},{$x:e},function(t,e){return{$x:function(){return t.mulStrict(e[0])}}})}}),gs=rn({expm1_:function(t){var e=qe(t,"x","expm1");return At.runKernelFunc(function(t,n){var r=t.expm1(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.exp())}}})}}),vs=rn({floor_:function(t){var e=qe(t,"x","floor");return At.runKernelFunc(function(t){return t.floor(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),ys=rn({log_:function(t){var e=qe(t,"x","log");return At.runKernelFunc(function(t,n){var r=t.log(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat())}}})}}),bs=rn({log1p_:function(t){var e=qe(t,"x","log1p");return At.runKernelFunc(function(t,n){var r=t.log1p(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.add(1))}}})}}),xs=rn({logSigmoid_:function(t){var e=qe(t,"x","logSigmoid");return At.runKernelFunc(function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.neg().sigmoid())}}})}}),ws=rn({neg_:function(t){var e=qe(t,"x","neg");return At.runKernelFunc(function(t){return t.neg(e)},{$x:e},function(t){return{$x:function(){return t.neg()}}})}}),Cs=rn({reciprocal_:function(t){var e=qe(t,"x","reciprocal");return At.runKernelFunc(function(t,n){var r=t.reciprocal(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.square().neg())}}})}}),Ns=rn({round_:function(t){var e=qe(t,"x","round");return At.runKernelFunc(function(t){return t.round(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),Ss=rn({rsqrt_:function(t){var e=qe(t,"x","rsqrt");return At.runKernelFunc(function(t,n){var r=t.rsqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}})}}),Is=rn({sigmoid_:function(t){var e=qe(t,"x","sigmoid");return At.runKernelFunc(function(t,n){var r=t.sigmoid(e);return n([r]),r},{x:e},function(t,e){var n=e[0];return{x:function(){return t.mul(n.mul(cn(1).sub(n)))}}},"Sigmoid")}}),ks=rn({sign_:function(t){var e=qe(t,"x","sign");return At.runKernelFunc(function(t){return t.sign(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),Es=rn({isNaN_:function(t){var e=qe(t,"x","isNaN");return At.runKernelFunc(function(t){return t.isNaN(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),As=rn({isInf_:function(t){var e=qe(t,"x","isInf");return At.runKernelFunc(function(t){return t.isInf(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),Rs=rn({isFinite_:function(t){var e=qe(t,"x","isFinite");return At.runKernelFunc(function(t){return t.isFinite(e)},{$x:e},function(t){return{$x:function(){return Sn(t)}}})}}),Ts=rn({sin_:function(t){var e=qe(t,"x","sin");return At.runKernelFunc(function(t,n){var r=t.sin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cos().mul(t)}}})}}),Ds=rn({sinh_:function(t){var e=qe(t,"x","sinh");return At.runKernelFunc(function(t,n){var r=t.sinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cosh().mulStrict(t)}}})}}),Os=rn({softplus_:function(t){var e=qe(t,"x","softplus");return At.runKernelFunc(function(t,n){var r=t.softplus(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.sigmoid())}}})}}),_s=rn({sqrt_:function(t){var e=qe(t,"x","sqrt");return At.runKernelFunc(function(t,n){var r=t.sqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}})}}),Fs=rn({step_:function(t,e){void 0===e&&(e=0);var n=qe(t,"x","step");return At.runKernelFunc(function(t){return t.step(n,e)},{$x:n},function(t){return{$x:function(){return Sn(t)}}})}}),Ms=rn({tan_:function(t){var e=qe(t,"x","tan");return At.runKernelFunc(function(t,n){var r=t.tan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.cos().square())}}})}}),zs=rn({tanh_:function(t){var e=qe(t,"x","tanh");return At.runKernelFunc(function(t,n){var r=t.tanh(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return cn(1).sub(n.square()).mulStrict(t)}}})}});function Ls(t,e,n,r,a,i){var o,s,u=qe(t,"x","batchNorm"),l=qe(e,"mean","batchNorm"),c=qe(n,"variance","batchNorm");return null!=a&&(o=qe(a,"scale","batchNorm")),null!=r&&(s=qe(r,"offset","batchNorm")),g(2===u.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),g(2===l.rank||1===l.rank,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+l.rank+"."}),g(2===c.rank||1===c.rank,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+c.rank+"."}),null!=o&&g(2===o.rank||1===o.rank,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+o.rank+"."}),null!=s&&g(2===s.rank||1===s.rank,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),Ws(u,l,c,s,o,i)}function Bs(t,e,n,r,a,i){var o,s,u=qe(t,"x","batchNorm"),l=qe(e,"mean","batchNorm"),c=qe(n,"variance","batchNorm");return null!=a&&(o=qe(a,"scale","batchNorm")),null!=r&&(s=qe(r,"offset","batchNorm")),g(3===u.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),g(3===l.rank||1===l.rank,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+l.rank+"."}),g(3===c.rank||1===c.rank,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+c.rank+"."}),null!=o&&g(3===o.rank||1===o.rank,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+o.rank+"."}),null!=s&&g(3===s.rank||1===s.rank,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),Ws(u,l,c,s,o,i)}function Ps(t,e,n,r,a,i){var o,s,u=qe(t,"x","batchNorm"),l=qe(e,"mean","batchNorm"),c=qe(n,"variance","batchNorm");return null!=a&&(o=qe(a,"scale","batchNorm")),null!=r&&(s=qe(r,"offset","batchNorm")),g(4===u.rank,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."}),g(4===l.rank||1===l.rank,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+l.rank+"."}),g(4===c.rank||1===c.rank,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+c.rank+"."}),null!=o&&g(4===o.rank||1===o.rank,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+o.rank+"."}),null!=s&&g(4===s.rank||1===s.rank,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),Ws(u,l,c,s,o,i)}function Ws(t,e,n,r,a,i){null==i&&(i=.001);var o,s,u,l=qe(t,"x","batchNorm"),c=qe(e,"mean","batchNorm"),p=qe(n,"variance","batchNorm");null!=a&&(o=qe(a,"scale","batchNorm")),null!=r&&(s=qe(r,"offset","batchNorm")),g(c.rank===p.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),g(null==s||c.rank===s.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),g(null==o||c.rank===o.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),u=0===l.rank||1===l.rank?l.as4D(1,1,1,l.size):2===l.rank?l.as4D(1,1,l.shape[0],l.shape[1]):3===l.rank?l.as4D(1,l.shape[0],l.shape[1],l.shape[2]):l;var h=[l,c,p,o];return At.runKernelFunc(function(t,e){var n=t.batchNormalization(u,Vs(c),Vs(p),i,Vs(o),Vs(s));return e([l,c,p,o]),n},{x:l,mean:c,variance:p,scale:o,offset:s},function(t,e){var n=e,r=n[0],a=n[1],o=n[2],s=n[3],l=null==s?cn(1):s,c=jr(a.shape,u.shape),p=[];if(1===a.rank){for(var h=0;h0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=jr(a.shape,i);return n.length>0&&(e=e.sum(n)),e.reshape(a.shape)}}},"Add")}}),au=rn({addN_:function(t){g(Array.isArray(t),function(){return"The argument passed to tf.addN() must be a list of tensors"}),g(t.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+t.length});var e=t.map(function(t,e){return qe(t,"tensors"+e,"addN")}),n=e[0];e.forEach(function(t){if(t.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(function(t){if(!w(t.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var r=e;return At.runKernelFunc(function(t){return t.addN(e)},r,function(t){var n={};return e.forEach(function(e,r){n[r]=function(){return t.clone()}}),n})}}),iu=rn({addStrict_:function(t,e){var n=qe(t,"a","addStrict"),r=qe(e,"b","addStrict");return v(n.shape,r.shape,"Error in addStrict: "),n.add(r)}}),ou=rn({atan2_:function(t,e){var n,r=qe(t,"a","atan2"),a=qe(e,"b","atan2");n=wt(r,a),r=n[0],a=n[1];var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t,e){var n=t.atan2(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=ru(n.square(),r.square()),a=t.mul(r.div(e)),o=jr(n.shape,i);return o.length>0&&(a=a.sum(o)),a.reshape(n.shape)},$b:function(){var e=ru(n.square(),r.square()),a=ws(t.mul(n.div(e))),o=jr(r.shape,i);return o.length>0&&(a=a.sum(o)),a.reshape(r.shape)}}})}}),su=rn({div_:function(t,e){var n,r=qe(t,"a","div"),a=qe(e,"b","div");if(n=wt(r,a),r=n[0],a=n[1],"int32"===r.dtype&&"int32"===a.dtype)return lu(r,a);var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t,e){var n=t.realDivide(r,a);return e([r,a]),n},{a:r,b:a},function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.div(r.toFloat()),a=jr(n.shape,i);return a.length>0?e.sum(a).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),a=jr(r.shape,i);a.length>0&&(e=e.sum(a).reshape(r.shape));var o=r.square();return e.div(o.toFloat()).neg()}}},"Div")}}),uu=rn({divStrict_:function(t,e){var n=qe(t,"a","div"),r=qe(e,"b","div");return v(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}}),lu=rn({floorDiv_:function(t,e){var n,r=qe(t,"a","floorDiv"),a=qe(e,"b","floorDiv");n=wt(r,a),r=n[0],a=n[1];var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t,e){var n=t.floorDiv(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=t.div(r.toFloat()),a=jr(n.shape,i);return a.length>0?e.sum(a).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),a=jr(r.shape,i);a.length>0&&(e=e.sum(a).reshape(r.shape));var o=r.square();return e.div(o.toFloat()).neg()}}})}}),cu=rn({maximum_:function(t,e){var n,r=qe(t,"a","maximum"),a=qe(e,"b","maximum");return n=wt(r,a),r=n[0],a=n[1],"bool"===r.dtype&&(r=r.toInt(),a=a.toInt()),Gr(r.shape,a.shape),At.runKernelFunc(function(t,e){var n=t.maximum(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.greaterEqual(r).toFloat())},$b:function(){return t.mul(n.less(r).toFloat())}}})}}),pu=rn({maximumStrict_:function(t,e){var n=qe(t,"a","maximumStrict"),r=qe(e,"b","maximumStrict");return v(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}}),hu=rn({minimum_:function(t,e){var n,r=qe(t,"a","minimum"),a=qe(e,"b","minimum");return n=wt(r,a),r=n[0],a=n[1],"bool"===r.dtype&&(r=r.toInt(),a=a.toInt()),Gr(r.shape,a.shape),At.runKernelFunc(function(t,e){var n=t.minimum(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.lessEqual(r).toFloat())},$b:function(){return t.mul(n.greater(r).toFloat())}}})}}),fu=rn({minimumStrict_:function(t,e){var n=qe(t,"a","minimumStrict"),r=qe(e,"b","minimumStrict");return v(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}}),du=rn({mod_:function(t,e){var n,r=qe(t,"a","mod"),a=qe(e,"b","mod");n=wt(r,a),r=n[0],a=n[1];var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t,e){var n=t.mod(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=jr(n.shape,i);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),a=jr(r.shape,i);return a.length>0?e.sum(a).reshape(r.shape):e}}})}}),mu=rn({modStrict_:function(t,e){var n=qe(t,"a","modStrict"),r=qe(e,"b","modStrict");return v(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}}),gu=rn({mul_:function(t,e){var n,r=qe(t,"a","mul"),a=qe(e,"b","mul");n=wt(r,a),r=n[0],a=n[1];var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t,e){var n=t.multiply(r,a);return e([r,a]),n},{a:r,b:a},function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.mul(r.toFloat()),a=jr(n.shape,i);return a.length>0?e.sum(a).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),a=jr(r.shape,i);return a.length>0?e.sum(a).reshape(r.shape):e}}},"Mul")}}),vu=rn({mulStrict_:function(t,e){var n=qe(t,"a","mul"),r=qe(e,"b","mul");return v(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}}),yu=rn({pow_:function(t,e){var n=qe(t,"base","pow"),r=qe(e,"exp","pow"),a=Gr(n.shape,r.shape);return t=n.cast(bt(n.dtype,r.dtype)),e=r.cast(bt(n.dtype,r.dtype)),At.runKernelFunc(function(t,e){var a=t.pow(n,r);return e([n,r,a]),a},{$base:n,$exp:r},function(t,e){var n=e[0],r=e[1],i=e[2];return{$base:function(){var e=r.toFloat(),i=t.mul(e.mul(n.pow(e.sub(cn(1))))),o=jr(n.shape,a);return o.length>0&&(i=i.sum(o)),i.reshape(n.shape)},$exp:function(){var e=n.greater(0),o=n.log().where(e,Sn(n)),s=t.mul(i.mul(o)),u=jr(r.shape,a);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}})}}),bu=rn({powStrict_:function(t,e){return v(t.shape,e.shape,"Error in powStrict: "),t.pow(e)}}),xu=rn({squaredDifference_:function(t,e){var n,r=qe(t,"a","squaredDifference"),a=qe(e,"b","squaredDifference");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t,e){var n=t.squaredDifference(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1],a=cn(2);return{$a:function(){return t.mul(n.sub(r).mul(a))},$b:function(){return t.mul(r.sub(n).mul(a))}}})}}),wu=rn({squaredDifferenceStrict_:function(t,e){var n=qe(t,"a","squaredDifferenceStrict"),r=qe(e,"b","squaredDifferenceStrict");return v(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}}),Cu=rn({sub_:function(t,e){var n,r=qe(t,"a","sub"),a=qe(e,"b","sub");n=wt(r,a),r=n[0],a=n[1];var i=Gr(r.shape,a.shape);return At.runKernelFunc(function(t){return t.subtract(r,a)},{a:r,b:a},function(t){return{a:function(){var e=t,n=jr(r.shape,i);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=jr(a.shape,i);return n.length>0&&(e=e.sum(n)),e.neg().reshape(a.shape)}}},"Sub")}}),Nu=rn({subStrict_:function(t,e){var n=qe(t,"a","subStrict"),r=qe(e,"b","subStrict");return v(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}}),Su=rn({equal_:function(t,e){var n,r=qe(t,"a","equal"),a=qe(e,"b","equal");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t){return t.equal(r,a)},{$a:r,$b:a})}}),Iu=rn({equalStrict_:function(t,e){var n=qe(t,"a","equalStrict"),r=qe(e,"b","equalStrict");return v(n.shape,r.shape,"Error in equalStrict: "),n.equal(r)}}),ku=rn({greater_:function(t,e){var n,r=qe(t,"a","greater"),a=qe(e,"b","greater");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t){return t.greater(r,a)},{$a:r,$b:a})}}),Eu=rn({greaterEqual_:function(t,e){var n,r=qe(t,"a","greaterEqual"),a=qe(e,"b","greaterEqual");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t,e){var n=t.greaterEqual(r,a);return e([r,a]),n},{$a:r,$b:a},function(t,e){var n=e[0],r=e[1];return{$a:function(){return Sn(n)},$b:function(){return Sn(r)}}})}}),Au=rn({greaterEqualStrict_:function(t,e){var n=qe(t,"a","greaterEqualStrict"),r=qe(e,"b","greaterEqualStrict");return v(n.shape,r.shape,"Error in greaterEqualStrict: "),n.greaterEqual(r)}}),Ru=rn({greaterStrict_:function(t,e){var n=qe(t,"a","greaterStrict"),r=qe(e,"b","greaterStrict");return v(n.shape,r.shape,"Error in greaterStrict: "),n.greater(r)}}),Tu=rn({less_:function(t,e){var n,r=qe(t,"a","less"),a=qe(e,"b","less");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t){return t.less(r,a)},{$a:r,$b:a})}}),Du=rn({lessEqual_:function(t,e){var n,r=qe(t,"a","lessEqual"),a=qe(e,"b","lessEqual");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t){return t.lessEqual(r,a)},{$a:r,$b:a})}}),Ou=rn({lessEqualStrict_:function(t,e){var n=qe(t,"a","lessEqualStrict"),r=qe(e,"b","lessEqualStrict");return v(n.shape,r.shape,"Error in lessEqualStrict: "),n.lessEqual(r)}}),_u=rn({lessStrict_:function(t,e){var n=qe(t,"a","lessStrict"),r=qe(e,"b","lessStrict");return v(n.shape,r.shape,"Error in lessStrict: "),n.less(r)}}),Fu=rn({notEqual_:function(t,e){var n,r=qe(t,"a","notEqual"),a=qe(e,"b","notEqual");return n=wt(r,a),r=n[0],a=n[1],Gr(r.shape,a.shape),At.runKernelFunc(function(t){return t.notEqual(r,a)},{$a:r,$b:a})}}),Mu=rn({notEqualStrict_:function(t,e){var n=qe(t,"a","notEqualStrict"),r=qe(e,"b","notEqualStrict");return v(n.shape,r.shape,"Error in notEqualStrict: "),n.notEqual(r)}});function zu(t,e){for(var n=[],r=t;r0,function(){return"mask cannot be scalar"}),v(u.slice(o,o+s),i.shape,"mask's shape must match the first K dimensions of tensor's shape,"),l=1,c=o;c=2&&o.rank>=2&&i.rank===o.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+i.rank+" and "+o.rank+"."}),g(w(p,h),function(){return"Error in matMul: outer dimensions ("+p+") and ("+h+") of Tensors with shapes "+i.shape+" and "+o.shape+" must match."}),g(s===u,function(){return"Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+i.shape+" and "+o.shape+" and transposeA="+n+" and transposeB="+r+" must match."});var m=i.shape.slice(0,-2).concat([l,c]),v=n?i.as3D(f,s,l):i.as3D(f,l,s),y=r?o.as3D(d,c,u):o.as3D(d,u,c),b={transposeA:n,transposeB:r};return At.runKernelFunc(function(t,e){var a=t.batchMatMul(v,y,n,r);return e([v,y]),a},{a:v,b:y},function(t,e){var a=e,i=a[0],o=a[1];return n||r?!n&&r?{a:function(){return t.matMul(o,!1,!1)},b:function(){return t.matMul(i,!0,!1)}}:n&&!r?{a:function(){return o.matMul(t,!1,!0)},b:function(){return i.matMul(t,!1,!1)}}:{a:function(){return o.matMul(t,!0,!0)},b:function(){return t.matMul(i,!0,!0)}}:{a:function(){return t.matMul(o,!1,!0)},b:function(){return i.matMul(t,!0,!1)}}},"BatchMatMul",b).reshape(m)}}),nl=rn({dot_:function(t,e){var n=qe(t,"t1","dot"),r=qe(e,"t2","dot");g(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."});var a=1===n.rank?n.size:n.shape[1],i=1===r.rank?r.size:r.shape[0];return g(a===i,function(){return"Error in dot: inner dimensions of inputs must match, but got "+a+" and "+i+"."}),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),rl=rn({outerProduct_:function(t,e){var n=qe(t,"v1","outerProduct"),r=qe(e,"v2","outerProduct");return g(1===n.rank&&1===r.rank,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."}),n.as2D(-1,1).matMul(r.as2D(1,-1))}}),al=rn({reverse_:function(t,e){var n=qe(t,"x","reverse");if(0===n.rank)return n.clone();var r=A(e,n.shape);return At.runKernelFunc(function(t){return t.reverse(n,r)},{$x:n},function(t){return{$x:function(){return t.reverse(r)}}}).reshapeAs(n)}}),il=rn({reverse1d_:function(t){var e=qe(t,"x","reverse");return g(1===e.rank,function(){return"Error in reverse1D: x must be rank 1 but got rank "+e.rank+"."}),al(e,0)}}),ol=rn({reverse2d_:function(t,e){var n=qe(t,"x","reverse");return g(2===n.rank,function(){return"Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."}),al(n,e)}}),sl=rn({reverse3d_:function(t,e){var n=qe(t,"x","reverse");return g(3===n.rank,function(){return"Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."}),al(n,e)}}),ul=rn({reverse4d_:function(t,e){var n=qe(t,"x","reverse");return g(4===n.rank,function(){return"Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."}),al(n,e)}});function ll(t,e,n,r,a,i){var o=qe(t,"x","maxPool"),s=o,u=!1;3===o.rank&&(u=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),null==r&&(r=[1,1]),g(4===s.rank,function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),g(ea(n,r),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"}),null!=i&&g(C(a),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+"."});var l=qr(s.shape,e,n,r,a,i),c=At.runKernelFunc(function(t,e){var n=t.maxPool(s,l);return e([s,n]),n},{x:s},function(t,i){var o=i[0],s=i[1];return{x:function(){return function(t,e,n,r,a,i,o,s){var u=qe(t,"dy","maxPoolBackprop"),l=qe(e,"input","maxPoolBackprop"),c=qe(n,"output","maxPoolBackprop");g(l.rank===u.rank,function(){return"Rank of input ("+l.rank+") does not match rank of dy ("+u.rank+")"}),null==i&&(i=[1,1]),g(ea(a,i),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+i+"'"}),g(4===u.rank,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."}),g(4===l.rank,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+l.rank+"."});var p=qr(l.shape,r,a,i,o,s);return At.runKernelFunc(function(t){return t.maxPoolBackprop(u,l,c,p)},{$dy:u,$input:l})}(t,o,s,e,n,r,a)}}});return u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}function cl(t,e,n,r,a,i){var o=qe(t,"x","avgPool","float32");null==r&&(r=[1,1]),g(ea(n,r),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"});var s=o,u=!1;3===o.rank&&(u=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),g(4===s.rank,function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=i&&g(C(a),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+"."});var l=qr(s.shape,e,n,r,a,i),c=At.runKernelFunc(function(t){return t.avgPool(s,l)},{x:s},function(t){return{x:function(){return function(t,e,n,r,a,i){var o=qe(t,"dy","avgPoolBackprop"),s=qe(e,"input","avgPoolBackprop");g(s.rank===o.rank,function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+o.rank+")"}),null==a&&(a=[1,1]),g(ea(r,a),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+a+"'"});var u=s,l=o,c=!1;3===s.rank&&(c=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),l=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),g(4===l.rank,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+l.rank+"."}),g(4===u.rank,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."});var p=qr(u.shape,n,r,a,i),h=At.runKernelFunc(function(t){return t.avgPoolBackprop(l,u,p)},{dy4D:l,input4D:u});return c?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}(t,s,e,n,r,a)}}});return c=c.cast(o.dtype),u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}var pl=rn({maxPool_:function(t,e,n,r,a){return ll(t,e,n,1,r,a)}}),hl=rn({avgPool_:function(t,e,n,r,a){return cl(t,e,n,1,r,a)}}),fl=rn({pool_:function(t,e,n,r,a,i){null==a&&(a=[1,1]),null==i&&(i=1),0===r&&(r="valid");var o=qe(t,"x","maxPool"),s=o,u=!1;3===o.rank&&(u=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),g(ea(i,a),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+a+"'"});var l,c=qr(s.shape,e,i,a,r),p=[c.dilationHeight,c.dilationWidth];l="same"===r?function(t,e){var n=t.map(function(t,n){return t+(t-1)*(e[n]-1)}).map(function(t){return t-1}),r=n.map(function(t){return Math.floor(t/2)}),a=n.map(function(t,e){return t-r[e]});return n.map(function(t,e){return[r[e],a[e]]})}([c.filterHeight,c.filterWidth],p):[[0,0],[0,0]];var h=1===p[0]&&1===p[1],f=function(t,e,n){var r=n.map(function(t){return t[0]}),a=n.map(function(t){return t[1]}),i=t.concat(r,a),o=e.map(function(t,e){return(t-i[e]%t)%t}),s=a.map(function(t,e){return t+o[e]});return[e.map(function(t,e){return[r[e],s[e]]}),e.map(function(t,e){return[0,o[e]]})]}([c.inHeight,c.inWidth],p,l),d=f[0],m=f[1],v=h?r:"valid",y=h?s:cr(s,p,d),b=("avg"===n?function(){return cl(y,e,i,1,v)}:function(){return ll(y,e,i,1,v)})(),x=h?b:qn(b,p,m);return u?x.as3D(x.shape[1],x.shape[2],x.shape[3]):x}}),dl=rn({maxPool3d_:function(t,e,n,r,a,i,o){void 0===i&&(i="NDHWC");var s=qe(t,"x","maxPool3d"),u=s,l=!1;4===s.rank&&(l=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),g(5===u.rank,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+u.rank+"."}),g("NDHWC"===i,function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+i}),g(ea(n,o),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+o+"'"}),null!=a&&g(C(r),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."});var c=Hr(u.shape,e,n,o,r,a,i),p=At.runKernelFunc(function(t,e){var n=t.maxPool3d(u,c);return e([u,n]),n},{x:u},function(t,i){var s=i[0],u=i[1];return{x:function(){return function(t,e,n,r,a,i,o,s){var u=qe(t,"dy","maxPool3dBackprop"),l=qe(e,"input","maxPool3dBackprop"),c=qe(n,"output","maxPool3dBackprop"),p=u,h=l,f=c,d=!1;4===l.rank&&(d=!0,p=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),h=l.as5D(1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]),f=c.as5D(1,c.shape[0],c.shape[1],c.shape[2],c.shape[3])),g(5===p.rank,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+p.rank+"."}),g(5===h.rank,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+h.rank+"."}),g(5===f.rank,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+f.rank+"."}),null==i&&(i=[1,1,1]),g(ea(a,i),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+i+"'"}),null!=s&&g(C(o),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+o+"."});var m=Hr(h.shape,r,a,i,o,s),v=At.runKernelFunc(function(t){return t.maxPool3dBackprop(p,h,f,m)},{dy5D:p,input5D:h});return d?v.as4D(v.shape[1],v.shape[2],v.shape[3],v.shape[4]):v}(t,s,u,e,n,o,r,a)}}});return l?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),ml=rn({avgPool3d_:function(t,e,n,r,a,i,o){void 0===i&&(i="NDHWC");var s=qe(t,"x","avgPool3d","float32"),u=s,l=!1;4===s.rank&&(l=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),g(5===u.rank,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+u.rank+"."}),g("NDHWC"===i,function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+i}),g(ea(n,o),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+o+"'"}),null!=a&&g(C(r),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."});var c=Hr(u.shape,e,n,o,r,a,i),p=At.runKernelFunc(function(t){return t.avgPool3d(u,c)},{x:u},function(t){return{x:function(){return function(t,e,n,r,a,i,o){var s=qe(t,"dy","avgPool3dBackprop"),u=qe(e,"input","avgPool3dBackprop"),l=s,c=u,p=!1;4===u.rank&&(p=!0,l=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),c=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3])),g(5===l.rank,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+l.rank+"."}),g(5===c.rank,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+c.rank+"."}),null==a&&(a=[1,1,1]),g(ea(r,a),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+a+"'"}),null!=o&&g(C(i),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+i+"."});var h=Hr(c.shape,n,r,a,i,o),f=At.runKernelFunc(function(t){return t.avgPool3dBackprop(l,c,h)},{dy5D:l,input5D:c});return p?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}(t,u,e,n,o,r,a)}}});return p=p.cast(u.dtype),l?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),gl=rn({slice_:function(t,e,n){var r,a,i=qe(t,"x","slice");if(0===i.rank)throw new Error("Slicing scalar is not possible");(r="number"==typeof e?[e].concat(new Array(i.rank-1).fill(0)):e.length=0?t:(g(-1===t,function(){return"Negative size values should be exactly -1 but got "+t+" for the slice() size at index "+e+"."}),i.shape[e]-r[e])}),kr(i,r,a);var o=i.shape,s={begin:r,size:a};return At.runKernelFunc(function(t){return t.slice(i,r,a)},{x:i},function(t){for(var e=[],n=0;n0&&(e=e.sum(i)),e.reshape(r.shape)}}},"Prelu")}}),zl=rn({relu_:function(t){var e=qe(t,"x","relu");return"bool"===e.dtype?e.toInt():At.runKernelFunc(function(t,n){var r=t.relu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mulStrict(n.step().toFloat())}}})}}),Ll=rn({relu6_:function(t){var e=qe(t,"x","relu6");return"bool"===e.dtype?e.toInt():At.runKernelFunc(function(t,n){var r=t.relu6(e);return n([e]),r},{$x:e},function(t,e){var n=e[0],r=n.lessEqual(6).mul(n.step());return{$x:function(){return t.mulStrict(r.toFloat())}}})}}),Bl=rn({selu_:function(t){var e=qe(t,"x","selu");return At.runKernelFunc(function(t,n){var r=t.selu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){var e=n.greater(cn(0)),r=cn(Do),a=cn(Oo),i=t.mul(a),o=t.mul(r).mul(n.toFloat().exp());return eu(e,i,o)}}})}}),Pl=rn({transpose_:function(t,e){var n=qe(t,"x","transpose");return null==e&&(e=n.shape.map(function(t,e){return e}).reverse()),g(n.rank===e.length,function(){return"Error in transpose: rank of input "+n.rank+" must match length of perm "+e+"."}),e.forEach(function(t){g(t>=0&&ta)throw new Error("'k' passed to topk() must be <= the last dimension ("+a+") but got "+e);var i=At.runKernelFunc(function(t){return t.topk(r,e,n)},{$x:r});return{values:i[0],indices:i[1]}}}),Kl=rn({scatterND_:function(t,e,n){var r=qe(t,"indices","scatterND","int32"),a=qe(e,"updates","scatterND");return function(t,e,n){if(e.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+e.rank+".");if(t.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+t.rank+".");if("int32"!==e.dtype)throw new Error("The dtype of 'indices' should be int32, but got dtype: "+e.dtype);if(n.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+n);if(0===n.length){if(0===e.size)throw new Error("Indices specified for empty output. indices shape: "+e.shape);if(0===t.size)throw new Error("Updates specified for empty output. updates shape: "+t.shape)}!function(t,e,n){var r=e.rank>1?e.shape[e.rank-1]:1,a=e.rank>1?e.rank-1:1,i="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+e.shape+", shape: "+t+", sliceDim: "+r+", and batchDim: "+a+".";if(n.rankr){var s=t.shape.map(function(t){return t});s[t.shape.length-1]=e-r,n=t.concat(bn(s),t.shape.length-1),r=e}else n=t;var u=n.zerosLike(),l=an(n,u).as2D(a,r),c=Xl(l),p=Math.floor(r/2)+1,h=on(c),f=sn(c),d=h.split([p,r-p],h.shape.length-1),m=f.split([p,r-p],f.shape.length-1),v=n.shape.slice();return v[n.shape.length-1]=p,an(d[0],m[0]).reshape(v)}}),Jl=rn({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),a=$l(r);return on(a)}var i=[n,2*(e-1)],o=on(t).as2D(n,e),s=sn(t).as2D(n,e),u=o.slice([0,1],[n,e-2]).reverse(1),l=s.slice([0,1],[n,e-2]).reverse(1).mul(cn(-1)),c=o.concat(u,1),p=s.concat(l,1);return r=an(c,p).as2D(i[0],i[1]),a=$l(r),on(a)}}),Zl=Object.freeze({fft:Xl,ifft:$l,rfft:Yl,irfft:Jl}),Ql=rn({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var a=qe(t,"sparseIndices","sparseToDense","int32"),i=qe(e,"sparseValues","sparseToDense"),o=qe(r,"defaultValue","sparseToDense",i.dtype);return function(t,e,n,r){if("int32"!==t.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(t.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+t.shape+".");var a=t.rank>0?t.shape[0]:1,i=t.rank>1?t.shape[1]:1;if(n.length!==i)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+i+".");var o=e.size;if(0!==e.rank&&(1!==e.rank||o!==a))throw new Error("sparseValues has incorrect shape "+e.shape+", should be [] or ["+a+"]");if(e.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(a,i,n,o),At.runKernelFunc(function(t){return t.sparseToDense(a,i,n,o)},{$sparseIndices:a,$sparseValues:i,$defaultValue:o})}}),tc=rn({gatherND_:function(t,e){var n=qe(e,"indices","gatherND","int32"),r=qe(t,"x","gatherND");return At.runKernelFunc(function(t){return t.gatherND(r,n)},{$x:r,$indices:n})}}),ec=rn({diag_:function(t){var e=qe(t,"x","diag").flatten(),n=t.shape.concat(t.shape);return At.runKernelFunc(function(t){return t.diag(e)},{$x:e}).reshape(n)}}),nc=rn({dropout_:function(t,e,n,r){var a=qe(t,"x","dropout");if(g("float32"===a.dtype,function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+a.dtype+" tensor instead."}),g(e>=0&&e<1,function(){return"rate must be a float in the range [0, 1), but got "+e+"."}),0===e)return t instanceof ht?a.clone():a;var i=function(t,e){if(null==e)return t.shape.slice();if(w(t.shape,e))return e;if(t.shape.length===e.length){for(var n=[],r=0;r1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+r.rank}),g(r.rank-1===i.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+r.rank+" and targets rank "+i.rank}),v(r.shape.slice(0,r.shape.length-1),i.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),o=r.shape[r.shape.length-1],g(n>0&&n<=o,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+o+"), but got "+n}),[4,r.data()];case 1:return s=a.sent(),[4,i.data()];case 2:for(u=a.sent(),l=[s.length/o,o],p=l[1],h=T("bool",c=l[0]),f=0;f1?u.div(cn(s)):u}if(r===t.Reduction.SUM_BY_NONZERO_WEIGHTS){if(null==i)return o.sum().div(cn(a.size));var l=i.mul(yn(a.shape)).notEqual(cn(0)).sum().toFloat();return o.sum().div(l)}throw Error("Unknown reduction: "+r)}}),hc=rn({cosineDistance_:function(e,n,r,a,i){void 0===i&&(i=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var o=qe(e,"labels","cosineDistance"),s=qe(n,"predictions","cosineDistance"),u=null;null!=a&&(u=qe(a,"weights","cosineDistance")),v(o.shape,s.shape,"Error in cosineDistance: ");var l=cn(1).sub(o.mul(s).sum(r,!0));return pc(l,u,i)}}),fc=rn({hingeLoss_:function(e,n,r,a){void 0===a&&(a=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var i=qe(e,"labels","hingeLoss"),o=qe(n,"predictions","hingeLoss"),s=null;null!=r&&(s=qe(r,"weights","hingeLoss")),v(i.shape,o.shape,"Error in hingeLoss: ");var u=cn(1);i=cn(2).mul(i).sub(u);var l=u.sub(i.mul(o)).relu();return pc(l,s,a)}}),dc=rn({huberLoss_:function(e,n,r,a,i){void 0===a&&(a=1),void 0===i&&(i=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var o=qe(e,"labels","huberLoss"),s=qe(n,"predictions","huberLoss"),u=null;null!=r&&(u=qe(r,"weights","huberLoss")),v(o.shape,s.shape,"Error in huberLoss: ");var l=cn(a),c=s.sub(o).abs(),p=hu(c,l),h=c.sub(p),f=cn(.5).mul(p.square()).add(l.mul(h));return pc(f,u,i)}}),mc=rn({logLoss_:function(e,n,r,a,i){void 0===a&&(a=1e-7),void 0===i&&(i=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var o=qe(e,"labels","logLoss"),s=qe(n,"predictions","logLoss"),u=null;null!=r&&(u=qe(r,"weights","logLoss")),v(o.shape,s.shape,"Error in logLoss: ");var l=cn(1),c=cn(a),p=o.mul(s.add(c).log()).neg().sub(l.sub(o).mul(l.sub(s).add(c).log()));return pc(p,u,i)}}),gc=rn({meanSquaredError_:function(e,n,r,a){void 0===a&&(a=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var i=qe(e,"labels","meanSquaredError"),o=qe(n,"predictions","meanSquaredError"),s=null;null!=r&&(s=qe(r,"weights","meanSquaredError")),v(i.shape,o.shape,"Error in meanSquaredError: ");var u=i.squaredDifference(o);return pc(u,s,a)}}),vc=rn({sigmoidCrossEntropy_:function(e,n,r,a,i){void 0===a&&(a=0),void 0===i&&(i=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var o=qe(e,"multiClassLabels","sigmoidCrossEntropy"),s=qe(n,"logits","sigmoidCrossEntropy"),u=null;if(null!=r&&(u=qe(r,"weights","sigmoidCrossEntropy")),v(o.shape,s.shape,"Error in sigmoidCrossEntropy: "),a>0){var l=cn(a),c=cn(1),p=cn(.5);o=o.mul(c.sub(l)).add(p.mul(l))}var h=function(t,e){var n=qe(t,"labels","sigmoidCrossEntropyWithLogits"),r=qe(e,"logits","sigmoidCrossEntropyWithLogits");v(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var a=r.relu(),i=r.mul(n),o=r.abs().neg().exp().log1p();return a.sub(i).add(o)}(o,s);return pc(h,u,i)}}),yc=rn({softmaxCrossEntropy_:function(e,n,r,a,i){void 0===a&&(a=0),void 0===i&&(i=t.Reduction.SUM_BY_NONZERO_WEIGHTS);var o=qe(e,"onehotLabels","softmaxCrossEntropy"),s=qe(n,"logits","softmaxCrossEntropy"),u=null;if(null!=r&&(u=qe(r,"weights","softmaxCrossEntropy")),v(o.shape,s.shape,"Error in softmaxCrossEntropy: "),a>0){var l=cn(a),c=cn(1),p=cn(o.shape[1]);o=o.mul(c.sub(l)).add(l.div(p))}var h=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+e.rank+" and dim was "+n);return Mr(function(t,e,r){var a=e.logSumExp([n],!0),i=e.toFloat().sub(a);return r([t,i]),{value:i.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],a=e[1],i=Ye(t.shape,[n]);return[t.reshape(i).mul(r.toFloat().sub(a.exp())),t.reshape(i).mul(a.exp().sub(r.toFloat()))]}}})(t,e)}(o,s);return pc(h,u,i)}}),bc=Object.freeze({get Reduction(){return t.Reduction},absoluteDifference:cc,computeWeightedLoss:pc,cosineDistance:hc,hingeLoss:fc,huberLoss:dc,logLoss:mc,meanSquaredError:gc,sigmoidCrossEntropy:vc,softmaxCrossEntropy:yc});function xc(t,e){return void 0===e&&(e=!1),At.tidy(function(){if(2!==t.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+t.shape.length+"D Tensor.");for(var n=t.shape[0],r=t.shape[1],a=Jn(n),i=t.clone(),o=hn([[1]],[1,1]),s=o.clone(),u=n>=r?r:n,l=function(t){var e,u=i,l=s,c=a;e=At.tidy(function(){var e=i.slice([t,t],[n-t,1]),u=e.norm(),l=i.slice([t,t],[1,1]),c=hn([[-1]]).where(l.greater(0),hn([[1]])),p=l.sub(c.mul(u)),h=e.div(p);s=1===h.shape[0]?o.clone():o.concat(h.slice([1,0],[h.shape[0]-1,h.shape[1]]),0);var f=c.matMul(p).div(u).neg(),d=i.slice([t,0],[n-t,r]),m=f.mul(s);if(0===t)i=d.sub(m.matMul(s.transpose().matMul(d)));else{var g=d.sub(m.matMul(s.transpose().matMul(d)));i=i.slice([0,0],[t,r]).concat(g,0)}var v=a.slice([0,t],[n,a.shape[1]-t]);if(0===t)a=v.sub(v.matMul(s).matMul(m.transpose()));else{var y=v.sub(v.matMul(s).matMul(m.transpose()));a=a.slice([0,0],[n,t]).concat(y,1)}return[s,i,a]}),s=e[0],i=e[1],a=e[2],Pe([u,l,c])},c=0;cr&&(a=a.slice([0,0],[n,r]),i=i.slice([0,0],[r,r])),[a,i]})}var wc=rn({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,g(null!=t&&t.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var n=t[0].shape[0],r=function(e){g(t[e].shape[0]===n,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+t[e].shape[0]+" vs. "+n+")"})},a=1;a0)for(var n=0;n= 2, but got rank "+t.rank);if(2===t.rank)return xc(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce(function(t,e){return t*e}),r=[],a=[];return mr(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0).forEach(function(t){var n=xc(t,e),i=n[0],o=n[1];r.push(i),a.push(o)}),[hr(r,0).reshape(t.shape),hr(a,0).reshape(t.shape)]}}),Nc=Object.freeze({gramSchmidt:wc,qr:Cc});function Sc(t,e,n,r,a){null==r&&(r=.5),null==a&&(a=Number.NEGATIVE_INFINITY);var i=t.shape[0];return n=Math.min(n,i),g(0<=r&&r<=1,function(){return"iouThreshold must be in [0, 1], but was '"+r+"'"}),g(2===t.rank,function(){return"boxes must be a 2D tensor, but was of rank '"+t.rank+"'"}),g(4===t.shape[1],function(){return"boxes must have 4 columns, but 2nd dimension was "+t.shape[1]}),g(1===e.rank,function(){return"scores must be a 1D tensor"}),g(e.shape[0]===i,function(){return"scores has incompatible shape with boxes. Expected "+i+", but was "+e.shape[0]}),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a}}var Ic=rn({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=qe(t,"images","resizeBilinear");g(3===r.rank||4===r.rank,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."}),g(2===e.length,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+e+"."});var a=r,i=!1;3===r.rank&&(i=!0,a=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var o=e[0],s=e[1],u=At.runKernelFunc(function(t,e){return e([a]),t.resizeBilinear(a,o,s,n)},{batchImages:a},function(t,e){return{batchImages:function(){return At.runKernelFunc(function(r){return r.resizeBilinearBackprop(t,e[0],n)},{})}}});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),kc=rn({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=qe(t,"images","resizeNearestNeighbor");g(3===r.rank||4===r.rank,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."}),g(2===e.length,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+e+"."}),g("float32"===r.dtype||"int32"===r.dtype,function(){return"`images` must have `int32` or `float32` as dtype"});var a=r,i=!1;3===r.rank&&(i=!0,a=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var o=e[0],s=e[1],u=At.runKernelFunc(function(t,e){return e([a]),t.resizeNearestNeighbor(a,o,s,n)},{batchImages:a},function(t,e){return{batchImages:function(){return At.runKernelFunc(function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)},{})}}});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Ec=rn({nonMaxSuppression_:function(t,e,n,r,a){void 0===r&&(r=.5),void 0===a&&(a=Number.NEGATIVE_INFINITY);var i=qe(t,"boxes","nonMaxSuppression"),o=qe(e,"scores","nonMaxSuppression"),s=Sc(i,o,n,r,a);return n=s.maxOutputSize,r=s.iouThreshold,a=s.scoreThreshold,At.runKernelFunc(function(t){return t.nonMaxSuppression(i,o,n,r,a)},{$boxes:i})}}),Ac=rn({cropAndResize_:function(t,e,n,r,a,i){var o=qe(t,"image","cropAndResize","float32"),s=qe(e,"boxes","cropAndResize","float32"),u=qe(n,"boxInd","cropAndResize","int32");a=a||"bilinear",i=i||0;var l=s.shape[0];return g(4===o.rank,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+o.rank+"."}),g(2===s.rank&&4===s.shape[1],function(){return"Error in cropAndResize: boxes must be have size ["+l+",4] but had shape "+s.shape+"."}),g(1===u.rank&&u.shape[0]===l,function(){return"Error in cropAndResize: boxInd must be have size ["+l+"] but had shape "+s.shape+"."}),g(2===r.length,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."}),g(r[0]>=1&&r[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+r}),g("bilinear"===a||"nearest"===a,function(){return"method must be bilinear or nearest, but was "+a}),At.runKernelFunc(function(t,e){return t.cropAndResize(o,s,u,r,a,i)},{$image:o,$boxes:s})}}),Rc=Object.freeze({resizeBilinear:Ic,resizeNearestNeighbor:kc,nonMaxSuppression:Ec,nonMaxSuppressionAsync:function(t,e,n,i,o){return void 0===i&&(i=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY),r(this,void 0,void 0,function(){var r,s,u,l,c,p,h;return a(this,function(a){switch(a.label){case 0:return r=qe(t,"boxes","nonMaxSuppressionAsync"),s=qe(e,"scores","nonMaxSuppressionAsync"),u=Sc(r,s,n,i,o),n=u.maxOutputSize,i=u.iouThreshold,o=u.scoreThreshold,[4,Promise.all([r.data(),s.data()])];case 1:return l=a.sent(),c=l[0],p=l[1],h=pa(c,p,n,i,o),r!==t&&r.dispose(),s!==e&&s.dispose(),[2,h]}})})},cropAndResize:Ac}),Tc=function(t,e){return!(t>0||"linear"!==e&&"relu"!==e)},Dc=function(t,e,n){if(null==n||"linear"===n)return t;if("relu"===n)return t.mul(e.step());throw new Error("Gradient for activation "+n+" has not been implemented yet.")},Oc=function(t,e){var n=e,r=jr(t.shape,e.shape);return r.length>0&&(n=n.sum(r)),n.reshape(t.shape)},_c=function(t,e,n){if("linear"===e)return t;if("relu"===e)return zl(t);if("elu"===e)return _l(t);if("relu6"===e)return Ll(t);if("prelu"===e)return Ml(t,n);throw new Error("Unknown fused activation "+e+".")},Fc=rn({matMul_:function(t){var e,n=t.a,r=t.b,a=t.transposeA,i=void 0!==a&&a,o=t.transposeB,s=void 0!==o&&o,u=t.bias,l=t.activation,c=void 0===l?"linear":l,p=t.preluActivationWeights;if(!1===Tc(At.state.gradientDepth,c)){var h=el(n,r,i,s);return null!=u&&(h=ru(h,u)),_c(h,c,p)}var f=qe(n,"a","fused matMul"),d=qe(r,"b","fused matMul");e=wt(f,d),f=e[0],d=e[1];var m=i?f.shape[f.rank-2]:f.shape[f.rank-1],v=s?d.shape[d.rank-1]:d.shape[d.rank-2],y=i?f.shape[f.rank-1]:f.shape[f.rank-2],b=s?d.shape[d.rank-2]:d.shape[d.rank-1],C=f.shape.slice(0,-2),N=d.shape.slice(0,-2),S=x(C),I=x(N);g(f.rank>=2&&d.rank>=2&&f.rank===d.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+f.rank+" and "+d.rank+"."}),g(w(C,N),function(){return"Error in fused matMul: outer dimensions ("+C+") and ("+N+") of Tensors with shapes "+f.shape+" and "+d.shape+" must match."}),g(m===v,function(){return"Error in fused matMul: inner shapes ("+m+") and ("+v+") of Tensors with shapes "+f.shape+" and "+d.shape+" and transposeA="+i+" and transposeB="+s+" must match."});var k,E,A=f.shape.slice(0,-2).concat([y,b]),R=i?f.as3D(S,m,y):f.as3D(S,y,m),T=s?d.as3D(I,b,v):d.as3D(I,v,b);null!=u&&Gr(A,(k=wt(k=qe(u,"bias","fused matMul"),f)[0]).shape),null!=p&&(E=qe(p,"prelu weights","fused matMul"));var D={$a:R,$b:T};return null!=u&&(D.$bias=k),null!=p&&(D.$preluActivationWeights=E),At.runKernelFunc(function(t,e){var n=t.fusedBatchMatMul({a:R,b:T,transposeA:i,transposeB:s,bias:k,activation:c,preluActivationWeights:E});return e([R,T,n]),n},D,function(t,e){var n=e[0],r=e[1],a=e[2],o=Dc(t,a,c),l={};return null!=u&&(l={$bias:function(){return Oc(k,o)}}),i||s?!i&&s?Object.assign({$a:function(){return o.matMul(r,!1,!1)},$b:function(){return o.matMul(n,!0,!1)}},l):i&&!s?Object.assign({$a:function(){return r.matMul(o,!1,!0)},$b:function(){return n.matMul(o,!1,!1)}},l):Object.assign({$a:function(){return r.matMul(o,!0,!0)},$b:function(){return o.matMul(n,!0,!0)}},l):Object.assign({$a:function(){return o.matMul(r,!1,!0)},$b:function(){return n.matMul(o,!0,!1)}},l)}).reshape(A)}}),Mc=rn({conv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,a=t.pad,i=t.dataFormat,o=void 0===i?"NHWC":i,s=t.dilations,u=void 0===s?[1,1]:s,l=t.dimRoundingMode,c=t.bias,p=t.activation,h=void 0===p?"linear":p,f=t.preluActivationWeights;if(h=h||"linear",!1===Tc(At.state.gradientDepth,h)){var d=qu(e,n,r,a,o,u,l);return null!=c&&(d=ru(d,c)),_c(d,h,f)}var m=qe(e,"x","conv2d"),v=qe(n,"filter","conv2d"),y=m,b=!1;3===m.rank&&(b=!0,y=m.as4D(1,m.shape[0],m.shape[1],m.shape[2])),g(4===y.rank,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+y.rank+"."}),g(4===v.rank,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+v.rank+"."}),null!=l&&g(C(a),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+l+" but got pad "+a+"."}),g(y.shape[3]===v.shape[2],function(){return"Error in conv2d: depth of input ("+y.shape[3]+") must match input depth for filter "+v.shape[2]+"."}),g(ea(r,u),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"}),g("NHWC"===o,function(){return"Error in conv2d: got dataFormat of "+o+" but only NHWC is currently supported."});var x,w,N=Kr(y.shape,v.shape,r,u,a,l);null!=c&&(x=wt(x=qe(c,"bias","fused conv2d"),m)[0],Gr(N.outShape,x.shape)),null!=f&&(w=qe(f,"prelu weights","fused conv2d"));var S={x:y,$filter:v};null!=c&&(S.$bias=x),null!=f&&(S.$preluActivationWeights=w);var I=At.runKernelFunc(function(t,e){var n=t.fusedConv2d({input:y,filter:v,convInfo:N,bias:x,activation:h,preluActivationWeights:w});return e([v,y,n]),n},S,function(t,e){var n=e,i=n[0],o=n[1],s=n[2],l=Dc(t,s,h);g(ta(u),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+u+"'"});var p={};return null!=c&&(p={$bias:function(){return Oc(x,l)}}),Object.assign({x:function(){return Xu(o.shape,l,i,r,a)},$filter:function(){return Ku(o,l,i.shape,r,a)}},p)});return b?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),zc=rn({depthwiseConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,a=t.pad,i=t.dataFormat,o=void 0===i?"NHWC":i,s=t.dilations,u=void 0===s?[1,1]:s,l=t.dimRoundingMode,c=t.bias,p=t.activation,h=void 0===p?"linear":p,f=t.preluActivationWeights;if(!1===Tc(At.state.gradientDepth,h)){var d=$u(e,n,r,a,o,u,l);return null!=c&&(d=ru(d,c)),_c(d,h,f)}var m=qe(e,"x","depthwiseConv2d"),v=qe(n,"filter","depthwiseConv2d"),y=m,b=!1;3===m.rank&&(b=!0,y=m.as4D(1,m.shape[0],m.shape[1],m.shape[2])),g(4===y.rank,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+y.rank+"."}),g(4===v.rank,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+v.rank+"."}),g(y.shape[3]===v.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels ("+y.shape[3]+") must match the inChannels dimension in filter "+v.shape[2]+"."}),null==u&&(u=[1,1]),g(ea(r,u),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"}),null!=l&&g(C(a),function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+l+" but got pad "+a+"."});var x,w,N=Kr(y.shape,v.shape,r,u,a,l,!0);null!=c&&(x=wt(x=qe(c,"bias","fused conv2d"),m)[0],Gr(N.outShape,x.shape)),null!=f&&(w=qe(f,"prelu weights","fused depthwiseConv2d"));var S={x:y,$filter:v};null!=c&&(S.$bias=x),null!=f&&(S.$preluActivationWeights=w);var I=At.runKernelFunc(function(t,e){var n=t.fusedDepthwiseConv2D({input:y,filter:v,convInfo:N,bias:x,activation:h,preluActivationWeights:w});return e([y,v,n]),n},S,function(t,e){g(ta(u),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+u+"'"});var n=e[0],r=e[1],a=e[2],i=Dc(t,a,h),o={};return null!=c&&(o={$bias:function(){return Oc(x,i)}}),Object.assign({x:function(){return Yu(n.shape,i,r,N)},$filter:function(){return Ju(n,i,r.shape,N)}},o)});return b?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}}),Lc=Object.freeze({matMul:Fc,conv2d:Mc,depthwiseConv2d:zc}),Bc=Object.freeze({image:Rc,linalg:Nc,losses:bc,spectral:Zl,fused:Lc,signal:uc,square:ns,conv1d:Gu,conv2d:qu,conv3d:Hu,depthwiseConv2d:$u,separableConv2d:Zu,conv2dTranspose:Qu,conv3dTranspose:tl,op:rn,batchNormalization2d:js,batchNormalization3d:Gs,batchNormalization4d:qs,batchNormalization:Hs,batchNorm:Ks,batchNorm2d:Xs,batchNorm3d:$s,batchNorm4d:Ys,booleanMaskAsync:Wu,complex:an,real:on,imag:sn,concat:In,concat1d:kn,concat2d:En,concat3d:An,concat4d:Rn,split:Tn,matMul:el,dot:nl,outerProduct:rl,reverse:al,reverse1d:il,reverse2d:ol,reverse3d:sl,reverse4d:ul,maxPool:pl,avgPool:hl,pool:fl,maxPool3d:dl,avgPool3d:ml,slice:gl,slice1d:vl,slice2d:yl,slice3d:bl,slice4d:xl,abs:rs,acos:as,acosh:is,asin:os,asinh:ss,atan:us,atanh:ls,ceil:cs,clipByValue:ps,cos:hs,cosh:fs,erf:ds,exp:ms,expm1:gs,floor:vs,log:ys,log1p:bs,logSigmoid:xs,neg:ws,reciprocal:Cs,round:Ns,rsqrt:Ss,sigmoid:Is,sign:ks,isNaN:Es,isInf:As,isFinite:Rs,sin:Ts,sinh:Ds,softplus:Os,sqrt:_s,step:Fs,tan:Ms,tanh:zs,all:Cl,any:Nl,argMax:Sl,argMin:Il,logSumExp:kl,max:El,mean:Al,min:Rl,moments:Tl,sum:Dl,prod:Ol,equal:Su,equalStrict:Iu,greater:ku,greaterEqual:Eu,greaterEqualStrict:Au,greaterStrict:Ru,less:Tu,lessEqual:Du,lessEqualStrict:Ou,lessStrict:_u,notEqual:Fu,notEqualStrict:Mu,add:ru,addN:au,addStrict:iu,atan2:ou,div:su,divStrict:uu,floorDiv:lu,maximum:cu,maximumStrict:pu,minimum:hu,minimumStrict:fu,mod:du,modStrict:mu,mul:gu,mulStrict:vu,pow:yu,powStrict:bu,squaredDifference:xu,squaredDifferenceStrict:wu,sub:Cu,subStrict:Nu,elu:_l,leakyRelu:Fl,prelu:Ml,relu:zl,relu6:Ll,selu:Bl,logicalAnd:Js,logicalNot:Zs,logicalOr:Qs,logicalXor:tu,where:eu,whereAsync:nu,buffer:jn,print:Gn,batchToSpaceND:qn,cast:Hn,clone:Kn,cumsum:Xn,depthToSpace:$n,expandDims:Yn,eye:Jn,multinomial:Zn,oneHot:Qn,pad:tr,pad1d:er,pad2d:nr,pad3d:rr,pad4d:ar,rand:ir,randomNormal:or,randomGamma:sr,randomUniform:ur,reshape:lr,spaceToBatchND:cr,squeeze:pr,stack:hr,tile:fr,truncatedNormal:dr,unstack:mr,setdiff1dAsync:gr,fill:xn,linspace:wn,ones:yn,range:Cn,scalar:cn,tensor:un,tensor1d:pn,tensor2d:hn,tensor3d:fn,tensor4d:dn,tensor5d:mn,tensor6d:gn,variable:vn,zeros:bn,onesLike:Nn,zerosLike:Sn,transpose:Pl,softmax:Lr,logSoftmax:Br,localResponseNormalization:Wl,norm:Vl,gather:Bu,unsortedSegmentSum:Pu,basicLSTMCell:Ul,multiRNNCell:jl,movingAverage:Gl,stridedSlice:ql,topk:Hl,scatterND:Kl,fft:Xl,ifft:$l,rfft:Yl,irfft:Jl,sparseToDense:Ql,gatherND:tc,diag:ec,dropout:nc,hannWindow:ac,hammingWindow:ic,frame:oc,stft:sc,inTopKAsync:lc});function Pc(t,e){Array.isArray(t)||(t=[t]),t.forEach(function(t){null!=t&&g("complex64"!==t.dtype,function(){return e+" does not support complex64 tensors."})})}function Wc(t,e,n,r){if("linear"===n)return t.linear(e);if("relu"===n)return t.relu(e);if("elu"===n)return t.elu(e);if("relu6"===n)return t.relu6(e);if("prelu"===n)return t.prelu(e,r);throw new Error("Activation "+n+" has not been implemented for the CPU backend.")}var Vc=function(t){function e(){var e=t.call(this)||this;if(e.blockSize=48,e.firstUse=!0,o().get("IS_BROWSER")){var n="undefined"!=typeof OffscreenCanvas?new OffscreenCanvas(300,150):"undefined"!=typeof document?document.createElement("canvas"):null;null!==n&&(e.fromPixels2DContext=n.getContext("2d"))}return e.data=new Pr(e,At),e}return n(e,t),e.prototype.write=function(t,e,n){this.firstUse&&(this.firstUse=!1,o().get("IS_NODE")&&Ue("\n============================\nHi there 👋. 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.\n============================\n"));var r={};return this.data.set(r,{values:t,dtype:n}),r},e.prototype.move=function(t,e,n,r){this.data.set(t,{values:e,dtype:r})},e.prototype.numDataIds=function(){return this.data.numDataIds()},e.prototype.fromPixels=function(t,e){if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n,r,a=t.data instanceof Uint8Array,i="undefined"!=typeof ImageData&&t instanceof ImageData,s="undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement,u="undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement,l=s?[t.videoWidth,t.videoHeight]:[t.width,t.height],c=l[0],p=l[1];if(o().get("IS_NODE")&&null==t.getContext)throw new Error("When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package");if(null!=t.getContext)n=t.getContext("2d").getImageData(0,0,c,p).data;else if(i||a)n=t.data;else{if(!u&&!s)throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData or {data: Uint32Array, width: number, height: number}, but was "+t.constructor.name);if(null==this.fromPixels2DContext)throw new Error("Can't read pixels from HTMLImageElement outside the browser.");this.fromPixels2DContext.canvas.width=c,this.fromPixels2DContext.canvas.height=p,this.fromPixels2DContext.drawImage(t,0,0,c,p),n=this.fromPixels2DContext.getImageData(0,0,c,p).data}if(4===e)r=new Int32Array(n);else{var h=c*p;r=new Int32Array(h*e);for(var f=0;fh&&(h=m,f=d)}u[c]=f}return o},e.prototype.cumsum=function(t,e,n,r){if(Pc(t,"cumsum"),e!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+e);for(var a=bt(t.dtype,"int32"),i=bn(t.shape,a),o=this.readSync(i.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],l=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},c=0;ce?1:0})},e.prototype.greaterEqual=function(t,e){return Pc([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t>=e?1:0})},e.prototype.logicalNot=function(t){Pc(t,"logicalNot");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r1||1===e.rank?1:x(e.shape.slice(1)),c=0;c=0&&e>=0?n:(n+e)%e})},e.prototype.max=function(t,e){Pc(t,"max"),Je("max",e,t.rank);for(var n=$e(t.shape,e),r=n[0],a=n[1],i=bn(r,t.dtype),o=x(a),s=this.readSync(i.dataId),u=this.readSync(t.dataId),l=0;lp&&(p=f)}s[l]=p}return i},e.prototype.maximum=function(t,e){return Pc([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.max(t,e)})},e.prototype.all=function(t,e){Pc(t,"all"),Je("all",e,t.rank);for(var n=$e(t.shape,e),r=n[0],a=n[1],i=bn(r,t.dtype),o=x(a),s=this.readSync(i.dataId),u=this.readSync(t.dataId),l=0;l0?n[r]=1:n[r]=0;return this.makeOutput(n,t.shape,"float32")},e.prototype.isNaN=function(t){Pc(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r.5?n[r]=Math.ceil(e[r]):n[r]=a%2==0?a:a+1}return this.makeOutput(n,t.shape,"float32")},e.prototype.exp=function(t){Pc(t,"exp");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r=0?a:Math.exp(a)-1}return this.makeOutput(e,t.shape,"float32")},e.prototype.eluDer=function(t,e){Pc([t,e],"eluDer");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),a=this.readSync(t.dataId),i=0;i=1?a[i]:a[i]*(o+1)}return this.makeOutput(n,e.shape,"float32")},e.prototype.selu=function(t){Pc(t,"selu");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r=0?1.0507009873554805*a:1.7580993408473768*(Math.exp(a)-1)}return this.makeOutput(e,t.shape,"float32")},e.prototype.clip=function(t,e,n){Pc(t,"clip");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),i=0;in?n:o-e,s=r[a]0?1:e}return this.makeOutput(n,t.shape,"float32")},e.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,a=t.bias,i=t.activation,o=t.preluActivationWeights,s=this.conv2d(e,n,r);return a&&(s=this.add(s,a)),i&&(s=Wc(this,s,i,o)),s},e.prototype.conv2d=function(t,e,n){Pc([t,e],"conv2d");for(var r=n.filterHeight,a=n.filterWidth,i=n.dilationHeight,o=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,l="channelsLast"===n.dataFormat,c=jn(n.outShape,t.dtype),p=t.strides[0],h=l?t.strides[1]:t.strides[2],f=l?t.strides[2]:1,d=l?1:t.strides[1],m=c.strides[0],g=l?c.strides[1]:c.strides[2],v=l?c.strides[2]:1,y=l?1:c.strides[1],b=this.readSync(t.dataId),x=this.readSync(e.dataId),w=c.values,C=0;C=n.inHeight))for(var T=A*e.strides[0],D=N+R*h,O=0;O=n.inWidth))for(var L=D+z*f,B=T+M*e.strides[1],P=0;P=n.inDepth))for(var S=C*e.strides[0],I=v+N*t.strides[1],k=0;k=n.inHeight))for(var D=S+R*e.strides[1],O=I+T*t.strides[2],_=0;_=n.inWidth))for(var B=D+z*e.strides[2],P=O+L*n.inChannels,W=B,V=0;V=n.inHeight))for(var C=x*e.strides[0],N=m+w*t.strides[1],S=0;S=n.inWidth))for(var R=C+E*e.strides[1],T=N+A*n.inChannels,D=I,O=R,_=0;_D?D=L:"avg"===n&&(O+=L,_++)}if(isNaN(D))break}d[k+E*v+w]="avg"===n?O/_:D}return f.toTensor()},e.prototype.maxPool=function(t,e){return this.pool(t,e,"max")},e.prototype.maxPoolPositions=function(t,e){for(var n=jn(e.outShape,"int32"),r=e.strideHeight,a=e.strideWidth,i=e.dilationHeight,o=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=e.padInfo.top,c=e.padInfo.left,p=this.bufferSync(t),h=0;hC&&(C=A,N=I*u+E)}n.set(N,h,d,y,f)}}return n.toTensor()},e.prototype.maxPoolBackprop=function(t,e,n,r){Pc([e,n],"maxPoolBackprop");for(var a=this.maxPoolPositions(e,r),i=r.strideHeight,o=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,l=r.effectiveFilterHeight,c=r.effectiveFilterWidth,p=c-1-r.padInfo.left,h=l-1-r.padInfo.top,f=jn(e.shape,"float32"),d=this.bufferSync(a),m=this.bufferSync(t),g=0;g=r.outHeight||Math.floor(S)!==S))for(var I=0;I=r.outWidth||Math.floor(k)!==k)){var E=l*c-1-d.get(g,S,k,v)===N*c+I?1:0;0!==E&&(C+=m.get(g,S,k,v)*E)}}}f.set(C,g,y,b,v)}return f.toTensor()},e.prototype.avgPoolBackprop=function(t,e,n){Pc([t,e],"avgPoolBackprop");for(var r=n.strideHeight,a=n.strideWidth,i=n.filterHeight,o=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,p=c-1-n.padInfo.left,h=l-1-n.padInfo.top,f=jn(e.shape,"float32"),d=1/(i*o),m=this.bufferSync(t),g=0;g=n.outHeight||Math.floor(S)!==S))for(var I=0;I=n.outWidth||Math.floor(k)!==k||(C+=m.get(g,S,k,v))}}f.set(C*d,g,y,b,v)}return f.toTensor()},e.prototype.pool3d=function(t,e,n){Pc(t,"pool3d");for(var r=e.strideDepth,a=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,l=e.effectiveFilterDepth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,h=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left,m="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=this.readSync(t.dataId),v=jn(e.outShape,t.dtype),y=v.values,b=e.outShape[1]*e.outShape[2]*e.outShape[3]*e.outShape[4],x=e.outShape[2]*e.outShape[3]*e.outShape[4],w=e.outShape[3]*e.outShape[4],C=e.outShape[4],N=0;NU?U=Y:"avg"===n&&(j+=Y,G++),isNaN(U))break}if(isNaN(U))break}if(isNaN(U))break}y[V+k]="avg"===n?j/G:U}}}return v.toTensor()},e.prototype.avgPool3d=function(t,e){return Pc(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},e.prototype.avgPool3dBackprop=function(t,e,n){Pc([t,e],"avgPool3dBackprop");for(var r=n.strideDepth,a=n.strideHeight,i=n.strideWidth,o=n.filterDepth,s=n.filterHeight,u=n.filterWidth,l=n.dilationDepth,c=n.dilationHeight,p=n.dilationWidth,h=n.effectiveFilterDepth,f=n.effectiveFilterHeight,d=n.effectiveFilterWidth,m=h-1-n.padInfo.front,g=d-1-n.padInfo.left,v=f-1-n.padInfo.top,y=jn(e.shape,"float32"),b=1/(o*s*u),x=this.bufferSync(t),w=0;w=n.outDepth||Math.floor(D)!==D))for(var O=0;O=n.outHeight||Math.floor(_)!==_))for(var F=0;F=n.outWidth||Math.floor(M)!==M||(R+=x.get(w,D,_,M,C))}}}y.set(R*b,w,N,S,I,C)}return y.toTensor()},e.prototype.maxPool3d=function(t,e){return Pc(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},e.prototype.maxPool3dPositions=function(t,e){for(var n=jn(e.outShape,"int32"),r=e.strideDepth,a=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,l=e.effectiveFilterDepth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,h=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left,m=this.bufferSync(t),g=0;g=T&&(T=B,D=_*c*p+M*c+L)}n.set(D,g,y,C,k,v)}}}return n.toTensor()},e.prototype.maxPool3dBackprop=function(t,e,n,r){Pc([e,n],"maxPool3dBackprop");for(var a=this.maxPool3dPositions(e,r),i=r.strideDepth,o=r.strideHeight,s=r.strideWidth,u=r.dilationDepth,l=r.dilationHeight,c=r.dilationWidth,p=r.effectiveFilterDepth,h=r.effectiveFilterHeight,f=r.effectiveFilterWidth,d=p-1-r.padInfo.front,m=f-1-r.padInfo.left,g=h-1-r.padInfo.top,v=jn(e.shape,"float32"),y=this.bufferSync(a),b=this.bufferSync(t),x=0;x=r.outDepth||Math.floor(T)!==T))for(var D=0;D=r.outHeight||Math.floor(O)!==O))for(var _=0;_=r.outWidth||Math.floor(F)!==F)){var M=p*h*f-1-y.get(x,T,O,F,w)===R*h*f+D*f+_?1:0;0!==M&&(A+=b.get(x,T,O,F,w)*M)}}}}v.set(A,x,C,N,S,w)}return v.toTensor()},e.prototype.cast=function(t,e){return ra(t,e,this)},e.prototype.reshape=function(t,e){return aa(t,e)},e.prototype.avgPool=function(t,e){return Pc(t,"avgPool"),this.pool(t,e,"avg").toFloat()},e.prototype.resizeBilinear=function(t,e,n,r){Pc(t,"resizeBilinear");for(var a=t.shape,i=a[0],o=a[1],s=a[2],u=a[3],l=this.readSync(t.dataId),c=new Float32Array(x([i,e,n,u])),p=[r&&e>1?o-1:o,r&&n>1?s-1:s],h=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=0,d=p[0]/h[0],m=p[1]/h[1],g=0;g1?i-1:i,n&&c>1?o-1:o],f=[n&&l>1?l-1:l,n&&c>1?c-1:c],d=h[0]/f[0],m=h[1]/f[1],g=this.readSync(t.dataId),v=0,y=0;y1?o-1:o,r&&n>1?s-1:s],h=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=p[0]/h[0],d=p[1]/h[1],m=0,g=0;g1?i-1:i,n&&c>1?o-1:o],d=[n&&l>1?l-1:l,n&&c>1?c-1:c],m=f[0]/d[0],g=f[1]/d[1],v=1/m,y=1/g,b=2*Math.ceil(v)+2,x=2*Math.ceil(y)+2,w=0;w=l)){var M=C+F*t.strides[1],z=F*m;if(N===Math.min(i-1,n?Math.round(z):Math.floor(z)))for(var L=0;L=c)){var P=M+B*t.strides[2],W=B*g;E===Math.min(o-1,n?Math.round(W):Math.floor(W))&&(O+=h[P+D])}}}}p[A+D]=O}return dn(p,e.shape,e.dtype)},e.prototype.batchNormalization=function(t,e,n,r,a,i){Pc([t,e,n,a,i],"batchNorm");for(var o=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),l=a?this.readSync(a.dataId):new Float32Array([1]),c=i?this.readSync(i.dataId):new Float32Array([0]),p=new Float32Array(o.length),h=c.length,f=l.length,d=u.length,m=s.length,g=0,v=0,y=0,b=0,x=0;x=h&&(g=0),v>=m&&(v=0),y>=f&&(y=0),b>=d&&(b=0);return dn(p,t.shape)},e.prototype.localResponseNormalization4D=function(t,e,n,r,a){Pc(t,"localResponseNormalization4D");var i=t.shape[3],o=i-1,s=this.readSync(t.dataId),u=t.size,l=new Float32Array(u);function c(t){for(var n=t%i,r=t-n+Math.max(0,n-e),a=t-n+Math.min(n+e,o),u=0;r<=a;r++){var l=s[r];u+=l*l}return u}for(var p=0;p=0&&i[o]1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+e});for(var r=t.shape[0],a=t.shape[1],i=t.shape[2],o=t.shape[3],s=a*e,u=i*e,l=o/(e*e),c=this.readSync(t.dataId),p=new Float32Array(r*s*u*l),h=0,f=0;f=s))for(var E=h>1?(S-C)*(u-1)/(h-1):0,A=f>1?(I-N)*(l-1)/(f-1):0,R=0;R1?C*(u-1)+R*E:.5*(C+S)*(u-1);if(T<0||T>u-1)for(var D=0;D1?N*(l-1)+D*A:.5*(N+I)*(l-1))<0||q>l-1)for(O=0;O1?N*(l-1)+D*A:.5*(N+I)*(l-1))<0||q>l-1)for(O=0;O=t.size/s)throw new Error("Invalid indices: "+f+" does not index into "+t.shape);for(var v=0;v=r/a)throw new Error("Invalid indices: "+m+" does not index into "+n);for(var b=0;b0,function(){return"scheme must not be an empty string."});var r=t.getInstance();g(null==r.managers[e],function(){return"A model store manager is already registered for scheme '"+e+"'."}),r.managers[e]=n},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function np(t){if(-1===t.indexOf(tp))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+ep.getSchemes().join(","));return{scheme:t.split(tp)[0],path:t.split(tp)[1]}}function rp(t,e,n){return void 0===n&&(n=!1),r(this,void 0,void 0,function(){var r,i,o,s,u,l,c,p,h;return a(this,function(a){switch(a.label){case 0:return g(t!==e,function(){return"Old path and new path are the same: '"+t+"'"}),g((r=Qc.getLoadHandlers(t)).length>0,function(){return"Copying failed because no load handler is found for source URL "+t+"."}),g(r.length<2,function(){return"Copying failed because more than one ("+r.length+") load handlers for source URL "+t+"."}),i=r[0],g((o=Qc.getSaveHandlers(e)).length>0,function(){return"Copying failed because no save handler is found for destination URL "+e+"."}),g(o.length<2,function(){return"Copying failed because more than one ("+r.length+") save handlers for destination URL "+e+"."}),s=o[0],u=np(t).scheme,l=np(t).path,c=u===np(t).scheme,[4,i.load()];case 1:return p=a.sent(),n&&c?[4,ep.getManager(u).removeModel(l)]:[3,3];case 2:a.sent(),a.label=3;case 3:return[4,s.save(p)];case 4:return h=a.sent(),!n||c?[3,6]:[4,ep.getManager(u).removeModel(l)];case 5:a.sent(),a.label=6;case 6:return[2,h.modelArtifactsInfo]}})})}var ap="models_store",ip="model_info_store";function op(){if(!o().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var t=window,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error("The current browser does not appear to support IndexedDB.");return e}function sp(t){var e=t.result;e.createObjectStore(ap,{keyPath:"modelPath"}),e.createObjectStore(ip,{keyPath:"modelPath"})}var up=function(){function t(t){if(this.indexedDB=op(),null==t||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){return a(this,function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,t)]})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){return a(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},t.prototype.databaseAction=function(t,e){var n=this;return new Promise(function(t,r){var a=n.indexedDB.open("tensorflowjs",1);a.onupgradeneeded=function(){return sp(a)},a.onsuccess=function(){var i=a.result;if(null==e){var o=i.transaction(ap,"readonly"),s=o.objectStore(ap).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return i.close(),r(new Error("Cannot find model with path '"+n.modelPath+"' in IndexedDB."));t(s.result.modelArtifacts)},s.onerror=function(t){return i.close(),r(s.error)},o.oncomplete=function(){return i.close()}}else{var u,l=Zc(e),c=i.transaction(ip,"readwrite"),p=c.objectStore(ip),h=p.put({modelPath:n.modelPath,modelArtifactsInfo:l});h.onsuccess=function(){var a=(u=i.transaction(ap,"readwrite")).objectStore(ap).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:l});a.onsuccess=function(){return t({modelArtifactsInfo:l})},a.onerror=function(t){var e=(p=c.objectStore(ip)).delete(n.modelPath);e.onsuccess=function(){return i.close(),r(a.error)},e.onerror=function(t){return i.close(),r(a.error)}}},h.onerror=function(t){return i.close(),r(h.error)},c.oncomplete=function(){null==u?i.close():u.oncomplete=function(){return i.close()}}}},a.onerror=function(t){return r(a.error)}})},t.URL_SCHEME="indexeddb://",t}(),lp=function(t){return o().getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(up.URL_SCHEME)?(e=t.slice(up.URL_SCHEME.length),new up(e)):null;var e};Qc.registerSaveRouter(lp),Qc.registerLoadRouter(lp);var cp=function(){function t(){this.indexedDB=op()}return t.prototype.listModels=function(){return r(this,void 0,void 0,function(){var t=this;return a(this,function(e){return[2,new Promise(function(e,n){var r=t.indexedDB.open("tensorflowjs",1);r.onupgradeneeded=function(){return sp(r)},r.onsuccess=function(){var t=r.result,a=t.transaction(ip,"readonly"),i=a.objectStore(ip).getAll();i.onsuccess=function(){for(var t={},n=0,r=i.result;n0,function(){return"promises must be a none empty array"})}(t),function(t,e){g(t>=0&&t<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+t}),g(e>=0&&e<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+e}),g(e>=t,function(){return"startFraction must be no more than endFraction, but got startFraction "+t+" and endFraction "+e})}(n=null==n?0:n,r=null==r?1:r);var a=0;return Promise.all(t.map(function(i){return i.then(function(i){var o=n+ ++a/t.length*(r-n);return e(o),i}),i}))}function Tp(t,e){return r(this,void 0,void 0,function(){var n,r,i,s,u,l,c,p,h;return a(this,function(a){switch(a.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?o().platform.fetch:e.fetchFunc,r=t.map(function(t){return n(t,e.requestInit,{isBinary:!0})}),i=0,s=.5,null!=e.onProgress?[3,2]:[4,Promise.all(r)];case 1:return u=a.sent(),[3,4];case 2:return[4,Rp(r,e.onProgress,i,s)];case 3:u=a.sent(),a.label=4;case 4:return l=u.map(function(t){return t.arrayBuffer()}),c=.5,p=1,null!=e.onProgress?[3,6]:[4,Promise.all(l)];case 5:return h=a.sent(),[3,8];case 6:return[4,Rp(l,e.onProgress,c,p)];case 7:h=a.sent(),a.label=8;case 8:return[2,h]}})})}function Dp(t){var e=this;return function(n,i,o){return void 0===i&&(i=""),r(e,void 0,void 0,function(){var e,r,s,u,l,c,p,h,f,d;return a(this,function(a){switch(a.label){case 0:if(e=n.map(function(){return!1}),r={},s=null!=o?o.map(function(){return!1}):[],u=[],n.forEach(function(t,n){var a=0;t.weights.forEach(function(t){var i="quantization"in t?t.quantization.dtype:t.dtype,l=qc[i]*x(t.shape),c=function(){e[n]=!0,null==r[n]&&(r[n]=[]),r[n].push({manifestEntry:t,groupOffset:a,sizeBytes:l})};null!=o?o.forEach(function(e,n){e===t.name&&(c(),s[n]=!0)}):c(),u.push(t.name),a+=l})}),!s.every(function(t){return t}))throw l=o.filter(function(t,e){return!s[e]}),new Error("Could not find weights in manifest with names: "+l.join(", ")+". \nManifest JSON has weights with names: "+u.join(", ")+".");return c=e.reduce(function(t,e,n){return e&&t.push(n),t},[]),p=[],c.forEach(function(t){n[t].paths.forEach(function(t){var e=i+(i.endsWith("/")?"":"/")+t;p.push(e)})}),[4,t(p)];case 1:return h=a.sent(),f={},d=0,c.forEach(function(t){for(var e=n[t].paths.length,a=0,i=0;i0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&g(2===t.length,function(){return"URL paths for http must have a length of 2, (actual length is "+t.length+")."}),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){var e,n,r,i;return a(this,function(a){switch(a.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=t.weightData&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((i=a.sent()).ok)return[2,{modelArtifactsInfo:Zc(t),responses:[i]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+i.status+".")}})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){var t,e,n,r,i,o,s,u;return a(this,function(a){switch(a.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=a.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");a.label=2;case 2:return a.trys.push([2,4,,5]),[4,t.json()];case 3:return e=a.sent(),[3,5];case 4:throw a.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" 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.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(r=e.modelTopology,i=e.weightsManifest,null==r&&null==i)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==i?[3,7]:[4,this.loadWeights(i)];case 6:u=a.sent(),o=u[0],s=u[1],a.label=7;case 7:return[2,{modelTopology:r,weightSpecs:o,weightData:s}]}})})},t.prototype.loadWeights=function(t){return r(this,void 0,void 0,function(){var e,n,r,i,o,s,u,l,c,p,h;return a(this,function(a){switch(a.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf("/"),n=t.lastIndexOf("?");return[t.substring(0,e)+"/",n>e?t.substring(n):""]}(e),r=n[0],i=n[1],o=this.weightPathPrefix||r,s=[],u=0,l=t;u0&&Number.isInteger(n),function(){return"If provided, numClasses must be a positive integer, but got "+n}),g(1===r.rank,function(){return"Expected the rank of labels to be 1, but got "+r.rank}),g(1===a.rank,function(){return"Expected the rank of predictions to be 1, but got "+a.rank}),g(r.shape[0]===a.shape[0],function(){return"Mismatch in the number of examples: "+r.shape[0]+" vs. "+a.shape[0]+". Labels and predictions should have the same number of elements."}),g(n>0&&Number.isInteger(n),function(){return"numClasses is required to be a positive integer, but got "+n});var i=Qn(r.asType("int32"),n),o=Qn(a.asType("int32"),n);return i.transpose().matMul(o).asType("int32")}}),Wp=Object.freeze({confusionMatrix:Pp}),Vp=rn({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");var n="undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement;if(n&&n&&t.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the `; + + console.log("Hello World"); + + if (URLno == 1) { + document.getElementById("sequence").sequence.innerHTML = ``; + } +} + +async function loop(timestamp) { + webcam.update(); // update the webcam frame + + await predict(); + window.requestAnimationFrame(loop); +} + +async function predict() { + let { pose, posenetOutput } = await model.estimatePose(webcam.canvas); + let prediction = await model.predict(posenetOutput); + + // Prediction #1: run input through posenet + // estimatePose can take in an image, video or canvas html element + + // Prediction 2: run input through teachable machine classification model + + // Prediction 2: run input through teachable machine classification model + + for (let i = 0; i < maxPredictions; i++) { + prediction[i].className = + prediction[i].className == "Knees too bent" + ? "Knees Too Bent" + : prediction[i].className; + const classPrediction = + prediction[i].className + + ": " + + (prediction[i].probability * 100).toFixed(0) + + "%" + + `
+
+
`; + + labelContainer.childNodes[i].innerHTML = classPrediction; + if (prediction[i].probability > CONFIDENCE_BENCHMARK) { + if (currentPosture_and_stream.Posture == prediction[i].className) { + console.log( + currentPosture_and_stream.Streak, + lastCall, + prediction[i].className + ); + if (currentPosture_and_stream.Streak > STREAK) { + console.log("Mumba", lastCall, no_stretch); + if (lastCall != prediction[i].className) { + console.log( + "Has been " + + prediction[i].className + + " " + + STREAK + + " times in a row" + ); + // Current Status + footer.innerHTML = "Status: " + prediction[i].className; + + lastCall = prediction[i].className; + var msg = new SpeechSynthesisUtterance( + prediction[i].className + ); + web.addMessage(prediction[i].className); + console.log(prediction[i].className) + web.processMessages(); + + // window.speechSynthesis.speak(msg); + } else { + if (no_stretch == 1 && lastCall == "Correct Bend") { + console.log(msg, "yeeepo"); + var msg = new SpeechSynthesisUtterance( + "." + + ); + + + // window.speechSynthesis.speak(msg); + web.addMessage("Hold there for 10 seconds. Finished Back Bend"); + web.processMessages(); + flag = false; + console.log("start" + no_stretch); + document.getElementById( + "stretch" + no_stretch + ).style.background = "green"; + no_stretch += 1; + init(1); + } else if ( + no_stretch == 2 && + lastCall == "Correct Lunge" + ) { + var msg = new SpeechSynthesisUtterance( + "Finished Lunge Rotate" + ); + window.speechSynthesis.speak(msg); + flag = false; + console.log("start" + no_stretch); + document.getElementById( + "stretch" + no_stretch.toString() + ).style.background = "green"; + no_stretch += 1; + } else if (no_stretch == 3) { + var msg = new SpeechSynthesisUtterance( + "Finished Stretches. This continues your 3 day streak" + ); + window.speechSynthesis.speak(msg); + no_stretch += 1; + } + } + } else { + console.log("streak", currentPosture_and_stream.Streak); + currentPosture_and_stream.Streak += 1; + } + } else { + console.log("Yeahhh"); + currentPosture_and_stream.Posture = prediction[i].className; + currentPosture_and_stream.Streak = 0; + console.log(currentPosture_and_stream.Posture); + } + } + } + + // finally draw the poses + drawPose(pose); +} + +function drawPose(pose) { + ctx.drawImage(webcam.canvas, 0, 0); + // draw the keypoints and skeleton + if (pose) { + const minPartConfidence = 0.5; + tmPose.drawKeypoints(pose.keypoints, minPartConfidence, ctx); + tmPose.drawSkeleton(pose.keypoints, minPartConfidence, ctx); + } +} + +try { + let started = true; + window.SpeechRecognition = + window.webkitSpeechRecognition || window.SpeechRecognition; + let finalTranscript = ""; + let recognition = new window.SpeechRecognition(); + recognition.interimResults = true; + recognition.maxAlternatives = 10; + recognition.continuous = true; + recognition.onresult = event => { + let interimTranscript = ""; + for (let i = event.resultIndex, len = event.results.length;i < len;i++) { + let transcript = event.results[i][0].transcript; + if (transcript.includes("begin")||transcript.toLowerCase().includes("shuru")) { + if (started) { + started = false; + init(0); + + console.log("Begin exercises"); + // Removes the div with the 'div-02' id}} + } + } + if (event.results[i].isFinal) { + finalTranscript += transcript; + + } else { + interimTranscript += transcript; + } + console.log(finalTranscript); + + if (transcript.includes("stop")|| transcript.includes("ruk ja")) { + console.log("TMKC"); + // recognition.abort(); + // recognition.stop(); + // recognition.getTracks().forEach(function(track) { + // track.stop(); + // alert(track); + // }); + webcam.stop(); + document.getElementById("Camera").style.visibility="hidden"; + } + + + if (transcript.includes("leaderboard")) { + // recognition.abort(); + // recognition.stop(); + // recognition.getTracks().forEach(function(track) { + // track.stop(); + // alert(track); + // }); + window.location.href = "/leaderboard.html"; + } + + } + speech.innerHTML = + '' + interimTranscript + ""; + finalTranscript + '' + interimTranscript + ""; + }; + recognition.start(); + started=true; +} catch (err) { + alert( + "Unfortunately, this browser/OS combination is unsupported. For best results, use Google Chrome on Desktop or Android." + ); +} + + +async function postData(url = '', data = {}) { + // Default options are marked with * + const response = await fetch(url, { + method: 'POST', // *GET, POST, PUT, DELETE, etc. + mode: 'cors', // no-cors, *cors, same-origin + cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached + credentials: 'same-origin', // include, *same-origin, omit + headers: { + 'Content-Type': 'application/json' + // 'Content-Type': 'application/x-www-form-urlencoded', + }, + redirect: 'follow', // manual, *follow, error + referrerPolicy: 'no-referrer', // no-referrer, *client + body: JSON.stringify(data) // body data type must match "Content-Type" header + }); + return await response.json(); // parses JSON response into native JavaScript objects + } + + postData('https://api.cognitive.microsofttranslator.com/translate?api-version=3.0', { "Text":"I would really like to drive your car around the block a few times."}) + .then((data) => { + console.log(data); // JSON data parsed by `response.json()` call + }); \ No newline at end of file From c39154a61d5d900ae607952ccc37e2454d4bbf14 Mon Sep 17 00:00:00 2001 From: Rutvik J Date: Fri, 12 Feb 2021 17:54:14 +0530 Subject: [PATCH 5/7] Chore: Corrected path. --- client/live_stream.html | 2 +- client/view2.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/live_stream.html b/client/live_stream.html index 8af9476..e229a9e 100644 --- a/client/live_stream.html +++ b/client/live_stream.html @@ -197,7 +197,7 @@ web.addMessage("Hello, my name is AIDEN. I'll be your physio assistant."); web.processMessages(); - + - + From 7556002b5b6792300720528b410dc44a886b0209 Mon Sep 17 00:00:00 2001 From: Rutvik J Date: Fri, 12 Feb 2021 17:56:14 +0530 Subject: [PATCH 6/7] Chore: Adding templates to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d37eb0f..ebfd0ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.swp .DS_Store node_modules +templates package-lock.json \ No newline at end of file From d8f04cc3c7d062ad3b461f68ca020821db99e78b Mon Sep 17 00:00:00 2001 From: Rutvik J Date: Fri, 12 Feb 2021 18:17:09 +0530 Subject: [PATCH 7/7] Chore: Update Readme --- README.md | 7 +++++-- assets/aiden.png | Bin 0 -> 158295 bytes 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 assets/aiden.png diff --git a/README.md b/README.md index 9161b65..6e7cd3c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ -# Aiden. Your physio assistant. +![Aiden](/assets/aiden.png) -### Aiden is a web app utilising **_tensorflow.js_**, browser-based Machine Learning library, to enable accessible physiotherapy for the Visually Impaired and other people as well - talking through exercises by responding to users' postures in real-time. +# Aiden - Your Physio assistant. +#### Aiden is a web app utilising **_tensorflow.js_**, browser-based Machine Learning library, to enable accessible physiotherapy for the Visually Impaired and other people as well - talking through exercises by responding to users' postures in real-time. Aiden makes it easier for users to not only complete but to improve their techniques independently. @@ -15,8 +16,10 @@ Aiden makes it easier for users to not only complete but to improve their techni ### Machine Learning - tensorflow.js Aiden uses a [tensorflow.js](https://www.tensorflow.org/js) (browser-based) model to make predictions on the state of the current user's pose. It has been trained on a dataset of images created by us (~300 images per pose) to predict whether the position is correct, or incorrect - and what makes it so. + We have used Azure Machine Learning Studio, an Azure Machine Learning tool, to train our models in the various physiotherapy poses. Azure Cognitive Services Speech-to-Text API was also used to enable the application to be accessible by the visually impaired. The user can start their exercises via speech in various languages using Azure Translator Speech API remotely and this is more convenient and easier to use for our target audience. + The application utilizes Azure Cognitive Services for text-to-speech. This is useful for the visually impaired as they can hear if they are in the right position as the application will tell them to adjust their posture if incorrect. ### Index.html diff --git a/assets/aiden.png b/assets/aiden.png new file mode 100644 index 0000000000000000000000000000000000000000..20d97235ead6023fb0b0bc7e4210185499ac50f9 GIT binary patch literal 158295 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

PAw)(_Om6(h~b=!TJ2tx&qj&? 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

O~$Su_IbuHqV>0(gK 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

WVF%kZxQGbE| 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 P00000NkvXXu0mjf$tIHt literal 0 HcmV?d00001