diff --git a/node_modules/opusscript/LICENSE b/node_modules/opusscript/LICENSE new file mode 100644 index 0000000..9d40c6f --- /dev/null +++ b/node_modules/opusscript/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2016-2021 abalabahaha + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/opusscript/README.md b/node_modules/opusscript/README.md new file mode 100644 index 0000000..2ff5864 --- /dev/null +++ b/node_modules/opusscript/README.md @@ -0,0 +1,53 @@ +# OpusScript + +JS bindings for libopus 1.3.1, ported with Emscripten. + +---- + +## Usage + +```js +var OpusScript = require("opusscript"); + +// 48kHz sampling rate, 20ms frame duration, stereo audio (2 channels) +var samplingRate = 48000; +var frameDuration = 20; +var channels = 2; + +// Optimize encoding for audio. Available applications are VOIP, AUDIO, and RESTRICTED_LOWDELAY +var encoder = new OpusScript(samplingRate, channels, OpusScript.Application.AUDIO); + +var frameSize = samplingRate * frameDuration / 1000; + +// Get PCM data from somewhere and encode it into opus +var pcmData = new Buffer(pcmSource); +var encodedPacket = encoder.encode(pcmData, frameSize); + +// Decode the opus packet back into PCM +var decodedPacket = encoder.decode(encodedPacket); + +// Delete the encoder when finished with it (Emscripten does not automatically call C++ object destructors) +encoder.delete(); +``` + +## Note: WASM + +If your environment doesn't support WASM, you can try the JS-only module. Do note that the JS-only version barely has optimizations due to compiler/toolchain limitations, and should only be used as a last resort. + +```js +var encoder = new OpusScript(samplingRate, channels, OpusScript.Application.AUDIO, { + wasm: false +}); +``` + +## Note: TypeScript + +Since this module wasn't written for TypeScript, you need to use `import = require` syntax. + +```ts +// Import using: +import OpusScript = require("opusscript"); + +// and NOT: +import OpusScript from "opusscript"; +``` diff --git a/node_modules/opusscript/build/COPYING.libopus b/node_modules/opusscript/build/COPYING.libopus new file mode 100644 index 0000000..9c739c3 --- /dev/null +++ b/node_modules/opusscript/build/COPYING.libopus @@ -0,0 +1,44 @@ +Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, + Jean-Marc Valin, Timothy B. Terriberry, + CSIRO, Gregory Maxwell, Mark Borgerding, + Erik de Castro Lopo + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of Internet Society, IETF or IETF Trust, nor the +names of specific contributors, may be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Opus is subject to the royalty-free patent licenses which are +specified at: + +Xiph.Org Foundation: +https://datatracker.ietf.org/ipr/1524/ + +Microsoft Corporation: +https://datatracker.ietf.org/ipr/1914/ + +Broadcom Corporation: +https://datatracker.ietf.org/ipr/1526/ diff --git a/node_modules/opusscript/build/opusscript_native_nasm.js b/node_modules/opusscript/build/opusscript_native_nasm.js new file mode 100644 index 0000000..a38fd4d --- /dev/null +++ b/node_modules/opusscript/build/opusscript_native_nasm.js @@ -0,0 +1,110 @@ + +var Module = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(Module) { + Module = Module || {}; + + +var g;g||(g=typeof Module !== 'undefined' ? Module : {});var aa,ba;g.ready=new Promise(function(b,a){aa=b;ba=a});var r={},t;for(t in g)g.hasOwnProperty(t)&&(r[t]=g[t]);var ca=!1,v=!1,w=!1,da=!1;ca="object"===typeof window;v="function"===typeof importScripts;w="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;da=!ca&&!w&&!v;var y="",ea,z,fa,ha; +if(w)y=v?require("path").dirname(y)+"/":__dirname+"/",ea=function(b,a){var c=A(b);if(c)return a?c:c.toString();fa||(fa=require("fs"));ha||(ha=require("path"));b=ha.normalize(b);return fa.readFileSync(b,a?null:"utf8")},z=function(b){b=ea(b,!0);b.buffer||(b=new Uint8Array(b));assert(b.buffer);return b},1=0;--c){b[48+c]=52+c;b[65+c]=c;b[97+c]=26+c}b[43]=62;b[47]=63;function Cg(Og,Pg,Qg){var d,e,c=0,f=Pg,g=Qg.length,h=Pg+(g*3>>2)-(Qg[g-2]=="=")-(Qg[g-1]=="=");for(;c>4;if(f>2;if(f>2]=0;q[a+18136>>2]=0;m=-1;a:{if((c|0)<1){break a}H=(e|0)<1276?e:1276;if((H|0)<1){break a}if((H|0)==1){m=-2;if(q[a+144>>2]==(w(c,10)|0)){break a}}B=q[a>>2]+a|0;W=q[a+108>>2]!=2051?q[a+116>>2]:W;Q=q[a+4>>2];m=q[a+168>>2];q[s+416>>2]=s+612;oa(B,10015,s+416|0);q[s+544>>2]=0;R=(f|0)<(m|0)?f:m;b:{c:{d:{e:{f:{g:{if(q[a+44>>2]<7){break g}t=q[a+144>>2];if((t|0)<16e3){break g}aa=1;f=w(q[a+112>>2],c);if((f|0)>=1){m=0;while(1){v=u[(m<<2)+b>>2];F=v>F?F:v;n=n>v?n:v;m=m+1|0;if((f|0)!=(m|0)){continue}break}}X=q[a+7640>>2];P=q[a+7636>>2];_e(a+188|0,q[s+612>>2],g,h,c,i,j,t,R,k,s+544|0);v=x(-F);f=0;if(x(x(1)/x(1<=(n>v?n:v)){break b}if(u[s+580>>2]>x(.10000000149011612)^1){break c}F=x(u[a+18128>>2]*x(.9990000128746033));f=w(q[a+112>>2],c);if((f|0)<1){break f}m=0;n=x(0);while(1){v=n;n=u[(m<<2)+b>>2];n=x(v+x(n*n));m=m+1|0;if((f|0)!=(m|0)){continue}break}L=x(f|0);if(x(n/L)>2];n=x(v+x(n*n));m=m+1|0;if((f|0)!=(m|0)){continue}break}break e}X=-1;if(q[a+7648>>2]){xc(a+188|0)}P=-1;break c}n=x(0);L=x(f|0);if(x(x(0)/L)>2]=F}q[a+140>>2]=-1;aa=0;f=1}qa=f;q[a+18120>>2]=0;if(q[s+544>>2]){if(q[a+124>>2]==-1e3){f=a;h:{i:{g=q[a+14228>>2];if((g|0)!=1002){if(g){break i}g=s+564|0;break h}g=s+572|0;break h}g=s+568|0}ma=C(+x(x(x(1)-u[g>>2])*x(100))+.5);j:{if(y(ma)<2147483648){g=~~ma;break j}g=-2147483648}q[f+140>>2]=g}f=a;g=q[s+576>>2];h=1101;k:{if((g|0)<13){break k}h=1102;if((g|0)<15){break k}h=1103;if((g|0)<17){break k}h=(g|0)<19?1104:1105}q[f+18120>>2]=h}n=x(0);if(!(q[a+120>>2]==1|q[a+112>>2]!=2)){n=ef(b,c,q[a+144>>2],a+14260|0)}f=c;if(!f){f=q[a+144>>2]/400|0}l:{m:{m=q[a+164>>2];if((m|0)!=-1e3){if((m|0)==-1){break m}g=q[a+144>>2];break l}g=q[a+144>>2];m=w(g,q[a+112>>2])+((w(g,60)|0)/(f|0)|0)|0;break l}g=q[a+144>>2];m=(w(H,g)<<3)/(f|0)|0}q[a+160>>2]=m;O=(g|0)/(c|0)|0;n:{o:{p:{U=q[a+148>>2];q:{if(!U){h=(w(g,12)|0)/(c|0)|0;f=(((h|0)/2|0)+((w(m,12)|0)/8|0)|0)/(h|0)|0;H=(f|0)<(H|0)?f:H;m=(w(H,h)<<3)/12|0;q[a+160>>2]=m;f=1;if((H|0)<2){break q}}r:{if((H|0)<3|(w(O,24)|0)>(m|0)){break r}ba=w(H,O);if((O|0)>49){break p}if((ba|0)<300){break r}if((m|0)>=2400){break o}}f=H}b=q[a+14240>>2];h=b?b:1101;g=0;m=0;b=q[a+14224>>2];i=(O|0)>100?1002:b?b:1e3;b=(O|0)==25&(i|0)!=1e3;c=b?50:O;s:{if((c|0)>16){break s}if(!((c|0)==10|(i|0)!=1e3?(e|0)!=1:0)){b=(c|0)<13;i=1e3;c=(c|0)==12?25:16;break s}g=50/(c|0)|0;b=3;c=50}if((c|0)<=399){while(1){m=m+1|0;c=c<<1;if((c|0)<400){continue}break}m=m<<3}t:{if((h|0)>=1104){e=1103;if((i|0)==1e3){break t}}if((h|0)==1102){e=1101;if((i|0)==1002){break t}}e=(h|0)<1105?(i|0)==1001?1104:h:h}h=q[a+14192>>2];c=d;u:{v:{switch(i-1e3|0){case 0:e=m-16|(e<<5)+96&224;break u;case 2:e=(((e|0)>1102?e:1102)<<5)- -64&96|m|128;break u;default:break v}}e=m+240|e<<4|96}o[c|0]=e|(((h|0)==2)<<2|b);if((b|0)==3){o[d+1|0]=g}m=b>>>0<2?1:2;if(q[a+148>>2]){break a}a=(f|0)>(m|0)?f:m;m=zc(d,m,a)?-3:a;break a}i=q[a+40>>2];S=q[a+44>>2];A=q[a+112>>2];f=m;if((O|0)==50){break n}da=1;f=w(w(A,-40)-20|0,O-50|0)+m|0;break n}i=q[a+40>>2];S=q[a+44>>2];A=q[a+112>>2];f=m}h=U?f:f+((f|0)/-12|0)|0;f=S+90|0;t=(w(h,f)|0)/100|0;Y=w(i,12)+20|0;k=(w(t,i)|0)/(Y|0)|0;j=127;w:{x:{switch(q[a+124>>2]-3001|0){case 1:j=0;break w;case 0:break w;default:break x}}h=q[a+140>>2];if((h|0)>=0){j=w(h,327)>>8;if(q[a+108>>2]!=2049){break w}j=(j|0)<115?j:115;break w}j=q[a+108>>2]==2048?115:48}h=q[a+120>>2];y:{z:{if((h|0)!=-1e3){if((A|0)!=2){break z}q[a+14192>>2]=h;A=h;break y}if((A|0)!=2){break z}A=((w(w(j,j),2e3)>>>14|0)+(q[a+14192>>2]==2?16e3:18e3)|0)<(t-k|0)?2:1}q[a+14192>>2]=A}E=!(q[s+544>>2]|aa)&q[a+184>>2]!=0;q[a+56>>2]=E;k=da?w(w(A,-40)-20|0,O-50|0)+m|0:m;I=(w(U?k:((k|0)/-12|0)+k|0,f)|0)/100|0;h=(w(I,i)|0)/(Y|0)|0;D=q[a+108>>2];A:{if((D|0)==2051){k=1002;q[a+14224>>2]=1002;J=a+14224|0;h=((g|0)/100|0)>(c|0);break A}t=q[a+136>>2];B:{if((t|0)==-1e3){k=a;Z=I-h|0;K=x(x(1)-n);v=x(x(n*x(1e4))+x(K*x(1e4)));C:{if(x(y(v))>14)|0;h=(D|0)==2048?h+8e3|0:h;I=h-4e3|0;D=h+4e3|0;t=h;h=q[a+14228>>2];t=(Z|0)<(((h|0)==1002?I:(h|0)>0?D:t)|0)?1e3:1002;q[k+14224>>2]=t;if(!(!q[a+48>>2]|128-j>>4>=(i|0))){q[a+14224>>2]=1e3;t=1e3}h=(w(da?9e3:6e3,c)|0)/(g<<3)|0;if((h|0)<=(H|0)?!(E&(j|0)>100):0){break B}t=(h|0)>(H|0)?1002:1e3}q[a+14224>>2]=t}J=a+14224|0;g=(g|0)/100|0;h=(g|0)>(c|0);if((c|0)>=(g|0)){k=t;break A}k=1002;if((t|0)==1002){k=t;break A}q[J>>2]=1002}if(q[a+176>>2]){q[J>>2]=1002;k=1002}E:{F:{G:{D=q[a+14228>>2];if((D|0)<1){break G}if(!((k|0)!=1002?(D|0)==1002:0)){if((k|0)!=1002){break G}g=1002;if((D|0)==1002){break F}}g=1002;ga=1;H:{if((k|0)!=1002){I=1;g=k;break H}I=0;t=0;if(h){break E}q[J>>2]=D;ga=0;T=1;g=D}t=1;break E}g=k}ga=1;I=0;t=0}I:{J:{if((A|0)!=1|q[a+14232>>2]!=2|(q[a+68>>2]|(D|0)==1002)){break J}if((g|0)==1002){break J}A=2;q[a+14192>>2]=2;q[a+68>>2]=1;break I}q[a+68>>2]=0}ea=a+Q|0;m=da?w(w(A,-40)-20|0,O-50|0)+m|0:m;A=(w(U?m:((m|0)/-12|0)+m|0,f)|0)/100|0;K:{L:{M:{N:{O:{P:{Q:{if((g&-2)==1e3){A=(S|0)<=1?(A<<2)/5|0:A;f=(w(A,i)|0)/(w(i,6)+10|0)|0;break Q}k=1002;if((g|0)==1002){h=1;if((S|0)>4){break P}A=(w(A,9)|0)/10|0;break P}f=(w(i,A)|0)/(Y|0)|0}k=1002;A=A-f|0;h=1;if((D|0)==1002){Cb(ea,q[a+180>>2],s+440|0);ha=1;g=q[a+14224>>2]}if((g|0)==1002){break P}h=0;if(q[a+84>>2]?0:!q[a+14252>>2]){break O}k=g}f=w(j,j);g=(w(f,2e3)>>14)+12e3|0;j=(w(f,2500)>>14)+11e3|0;R:{S:{i=q[a+14252>>2];if(!i){m=1105;f=1;if((g+(q[a+14244>>2]<1105?2e3:-2e3)|0)<=(A|0)){break M}if(i){break R}if(q[a+14244>>2]<1104){break S}j=j-1e3|0;break R}if((g|0)>(A|0)){break R}q[a+14240>>2]=1105;q[a+14244>>2]=1105;m=1105;break L}j=j+1e3|0}if((j|0)<=(A|0)){m=1104;f=1;break M}if(!i){m=1103;f=0;if(((q[a+14244>>2]<1103?9700:8300)|0)<=(A|0)){break M}m=9e3;if(i){break N}m=q[a+14244>>2]<1102?9700:8300;break N}m=9e3;if((A|0)<9e3){break N}q[a+14240>>2]=1103;q[a+14244>>2]=1103;m=1103;break L}m=q[a+14240>>2];break K}m=(m|0)>(A|0)?1101:1103;f=0}q[a+14240>>2]=m;q[a+14244>>2]=m;if(h|i|(q[a+88>>2]|f^1)){break L}m=1103;q[a+14240>>2]=1103}g=k}f=q[a+132>>2];if((f|0)<(m|0)){q[a+14240>>2]=f;m=f}i=q[a+128>>2];if((i|0)!=-1e3){q[a+14240>>2]=i;m=i}if(!((g|0)==1002|(ba|0)>1874)){m=(m|0)<1103?m:1103;q[a+14240>>2]=m}g=q[a+144>>2];T:{if((g|0)>24e3){f=m;break T}f=1104;U:{V:{W:{X:{if((m|0)<=1104){if((g|0)>=16001){f=m;break T}if((m|0)>1103){break X}if((g|0)<12001){break W}f=m;break T}q[a+14240>>2]=1104;if((g|0)>=16001){break T}}f=1103;q[a+14240>>2]=1103;if((g|0)>=12001){break T}break V}if((m|0)>1102){break V}if((g|0)>8e3){f=m;break T}f=m;if((m|0)!=1102){break T}break U}f=1102;q[a+14240>>2]=1102;if((g|0)>8e3){break T}}f=1101;q[a+14240>>2]=1101}Y:{if((i|0)!=-1e3){break Y}g=q[a+18120>>2];if(!g){break Y}i=q[a+14192>>2];Z:{_:{if((w(i,18e3)|0)>=(A|0)){m=1101;if(!h){break _}break Z}m=1102;if((w(i,24e3)|0)>=(A|0)&h){break Z}}m=1103;if((w(i,3e4)|0)>=(A|0)){break Z}m=(w(i,44e3)|0)<(A|0)?1105:1104}g=(g|0)>(m|0)?g:m;q[a+18120>>2]=g;f=(f|0)<(g|0)?f:g;q[a+14240>>2]=f}g=a;i=h;h=q[a+40>>2];j=0;$:{if(i|(!q[a+48>>2]|!h)){break $}D=125-((h|0)<25?h:25)|0;k=q[a+52>>2];j=(k|0)==1;i=(h|0)<6;m=f;aa:{while(1){h=m<<3;E=q[h+31596>>2];h=w(D,(q[h+31592>>2]-(j?E:0)|0)+(k?0:E)|0);h=(w(h&65535,655)>>>16|0)+w(h>>16,655)|0;if((h|0)<(A|0)|i){break aa}if((m|0)>1101){m=m-1|0;q[a+14240>>2]=m;continue}break}q[a+14240>>2]=f;j=0;break $}j=(h|0)<(A|0)}q[g+52>>2]=j;q[s+400>>2]=R;oa(B,4036,s+400|0);m=q[a+14224>>2];if(!((m|0)!=1002|q[a+14240>>2]!=1102)){q[a+14240>>2]=1103}ba:{ca:{da:{ea:{fa:{ga:{if(q[a+176>>2]){k=1101;q[a+14240>>2]=1101;break ga}k=q[a+14240>>2];if((m|0)!=1e3){break ga}if((k|0)>1103){break fa}}if(!((m|0)!=1001|(k|0)>1103)){q[J>>2]=1e3;m=1e3}h=q[a+144>>2];g=(h|0)/50|0;if((g|0)<(c|0)){break ea}i=m;break da}i=1001;q[a+14224>>2]=1001;h=q[a+144>>2];g=(h|0)/50|0;if((g|0)<(c|0)|((w(h,3)|0)/50|0)<(c|0)){break ca}break ba}i=1e3;if((m|0)!=1e3){break ca}}j=w(h,3);f=(j|0)/50|0;if((f|0)>=(c|0)){break ba}if((i|0)!=1e3){break ca}if(((h<<1)/25|0)==(c|0)){g=(h|0)/25|0;break ca}g=((j|0)/25|0)==(c|0)?f:g}c=(c|0)/(g|0)|0;if((P|0)!=-1){q[a+7640>>2]=X;q[a+7636>>2]=P}m=cf(a,b,c,g,d,e,T,R,l);break a}if(q[a+14248>>2]){q[a+14248>>2]=0;ha=2;I=1;t=1}m=q[a+160>>2];P=0;ha:{if(t){X=0;j=0;if((i|0)==1002){break ha}X=1;g=q[a+14192>>2];e=w(g,40)+20|0;f=(w(m+w(e,200-O|0)|0,3)|0)/3200|0;e=(e+((w((H<<3)-(e<<1)|0,240)|0)/((48e3/(O|0)|0)+240|0)|0)|0)/8|0;e=(e|0)>(f|0)?f:e;P=(e|0)>(g<<3|4)?(e|0)<257?e:257:0;j=1;if(P){break ha}P=0}X=0;j=0}R=d+1|0;S=H-1|0;_b(s+440|0,R,S);Y=c+W|0;e=s-((w(Y,q[a+112>>2])<<2)+15&-16)|0;U=e;ca=e;fa=a+14280|0;e=q[a+112>>2];M=ka(U,fa+(w(e,q[a+172>>2]-W|0)<<2)|0,w(e,W)<<2);i=(w(c,m)|0)/(h<<3)|0;g=a;ia:{if(q[a+14224>>2]==1002){e=pa(60)<<8;break ia}e=q[ea+8>>2]}f=q[a+14200>>2];e=e-f|0;e=w(e>>16,983)+f+(w(e&65535,983)>>>16)|0;q[g+14200>>2]=e;e=Na(e>>8);g=q[a+112>>2];D=M+(w(W,g)<<2)|0;f=q[a+144>>2];ja:{if(q[a+108>>2]==2048){if((c|0)<1){break ja}T=(w(e<<16>>16,2471)|0)/((f|0)/1e3|0)|0;e=T<<16>>16;h=((w(e,T>>16)+(w(e,T&65535)>>16)|0)+w(T,(T>>15)+1>>1)|0)-8388608|0;e=h<<16>>16;t=w(T,-471)+268435456|0;m=t>>6;f=m&65535;Z=w(e,f)>>16;E=e;e=t>>22;na=x(x((Z+w(E,e)|0)+w(m,(h>>15)+1>>1)|0)*x(3.725290298461914e-9));h=e;e=m<<16>>16;L=x(x((w(m,(t>>21)+1>>1)+w(h,e)|0)+(w(e,f)>>16)|0)*x(3.725290298461914e-9));N=x(x(w(T,942)-536870912|0)*x(3.725290298461914e-9));V=x(x(t|0)*x(3.725290298461914e-9));n=u[a+14212>>2];F=u[a+14208>>2];m=0;while(1){e=w(g,m)<<2;K=u[e+b>>2];v=x(V*K);_=x(F+v);v=x(x(v-x(L*_))+x(1.0000000031710769e-30));u[a+14212>>2]=v;F=x(x(N*K)+x(n-x(na*_)));u[a+14208>>2]=F;u[e+D>>2]=_;n=v;m=m+1|0;if((m|0)!=(c|0)){continue}break}if((g|0)!=2){break ja}g=D+4|0;f=b+4|0;n=u[a+14220>>2];F=u[a+14216>>2];m=0;while(1){e=m<<3;K=u[e+f>>2];v=x(V*K);_=x(F+v);v=x(x(v-x(L*_))+x(1.0000000031710769e-30));u[a+14220>>2]=v;F=x(x(N*K)+x(n-x(na*_)));u[a+14216>>2]=F;u[e+g>>2]=_;n=v;m=m+1|0;if((m|0)!=(c|0)){continue}break}g=2;break ja}N=x(x(18.900001525878906)/x(f|0));V=x(x(1)-N);n=u[a+14208>>2];if((g|0)==2){L=u[a+14216>>2];if((c|0)>=1){m=0;while(1){f=m<<3;e=f|4;K=u[e+b>>2];v=u[b+f>>2];u[f+D>>2]=v-n;u[e+D>>2]=K-L;n=x(x(V*n)+x(x(N*v)+x(1.0000000031710769e-30)));L=x(x(V*L)+x(x(N*K)+x(1.0000000031710769e-30)));m=m+1|0;if((m|0)!=(c|0)){continue}break}}u[a+14216>>2]=L;u[a+14208>>2]=n;g=2;break ja}if((c|0)>=1){m=0;while(1){e=m<<2;v=u[e+b>>2];u[e+D>>2]=v-n;n=x(x(V*n)+x(x(N*v)+x(1.0000000031710769e-30)));m=m+1|0;if((m|0)!=(c|0)){continue}break}}u[a+14208>>2]=n}ka:{if(!l){break ka}f=M+(w(g,W)<<2)|0;n=x(0);e=w(c,g);if((e|0)>=1){m=0;while(1){v=n;n=u[f+(m<<2)>>2];n=x(v+x(n*n));m=m+1|0;if((e|0)!=(m|0)){continue}break}}if(n==n?!(n>2]=0;q[e+4>>2]=0;q[a+14208>>2]=0;q[a+14212>>2]=0}F=x(1);la:{if(q[J>>2]!=1002){e=1;t=U-((w(c,g)<<1)+15&-16)|0;ca=t;v=u[s+580>>2];T=q[s+544>>2];f=H-P|0;f=w((((f|0)<(i|0)?f:i)<<3)-8|0,O);ma:{na:{oa:{Z=a;pa:{qa:{ra:{$=q[J>>2];if(($|0)==1001){D=(q[a+52>>2]<<1)+(q[a+144>>2]==(w(c,50)|0)?2:1)|0;h=q[a+148>>2];m=q[a+14192>>2];E=(f|0)/(m|0)|0;if((E|0)<12e3){break ra}e=2;if((E|0)<16e3){break ra}e=3;if((E|0)<2e4){break ra}e=4;if((E|0)<24e3){break ra}e=5;if((E|0)<32e3){break ra}e=6;if((E|0)<64e3){break ra}e=q[(D<<2)+40568>>2]+((E-64e3|0)/2|0)|0;break qa}q[a+36>>2]=f;l=q[a+14256>>2];if(l){break pa}g=f;break ma}e=w(e,20);g=e+40448|0;l=q[g>>2];e=e+40428|0;i=q[e>>2];ia=e;e=D<<2;e=(w(q[ia+e>>2],l-E|0)+w(q[e+g>>2],E-i|0)|0)/(l-i|0)|0}e=h?e:e+100|0;e=w((k|0)==1104?e+300|0:e,m);g=(m|0)==2?(E|0)>11999?e-1e3|0:e:e;q[Z+36>>2]=g;l=q[a+14256>>2];if(!l){break oa}f=g}if(q[a+148>>2]){break na}g=f;break ma}F=x(x(1)-x(Da(+x(x(g-f|0)*x(.0009765625))*.6931471805599453)));break ma}if(q[a+176>>2]){g=f;break ma}L=x(8e3);h=13;sa:{ta:{ua:{D=q[a+14240>>2];switch(D-1101|0){case 0:break sa;case 1:break ua;default:break ta}}L=x(12e3);h=15;break sa}L=x(16e3);h=17}n=x(0);Q=q[a+112>>2];if((Q|0)>=1){e=0;while(1){i=w(e,21);m=0;while(1){K=u[(i+m<<2)+l>>2];E=Kx(-2);n=g?x(.5):x(-2);n=g?E?K:n:n;n=x(N+(n>x(0)?x(n*x(.5)):n));m=m+1|0;if((m|0)!=(h|0)){continue}break}e=e+1|0;if((Q|0)!=(e|0)){continue}break}}e=(0-(f<<1)|0)/3|0;n=x(L*x(x(x(n/x(h|0))*x(Q|0))+x(.20000000298023224)));va:{if(x(y(n))>2]=g}i=q[a+112>>2];q[a+8>>2]=i;E=q[a+14192>>2];q[a+12>>2]=E;Q=q[a+144>>2];q[a+32>>2]=(w(c,1e3)|0)/(Q|0);m=8e3;l=8e3;wa:{xa:{switch(k-1101|0){default:l=12e3;m=16e3;if((k|0)==1103|($|0)==1001){break wa}ja(40234,40321,1755);G();case 0:break wa;case 1:break xa}}m=12e3;l=12e3}q[a+28>>2]=m;ya:{if(($|0)==1001){q[a+20>>2]=16e3;q[a+24>>2]=16e3;break ya}q[a+20>>2]=16e3;q[a+24>>2]=8e3;if(($|0)!=1e3){break ya}e=da?(ba<<4)/3|0:ba<<3;if((e|0)>7999){break ya}q[a+20>>2]=12e3;q[a+28>>2]=l;if((e|0)>6999){break ya}q[a+28>>2]=8e3;q[a+20>>2]=8e3}h=v>=x(.10000000149011612);m=S<<3;q[a- -64>>2]=m;f=q[a+148>>2];q[a+60>>2]=!f;za:{Aa:{Ba:{Ca:{if(!(j^1|(P|0)<2)){e=(P<<3^-1)+m|0;q[a+64>>2]=e;if(($|0)!=1001){break za}m=e-20|0;q[a+64>>2]=m;if(!f){break Aa}break Ca}if(!f){break Ba}if(($|0)!=1001){break za}}g=1;D=(q[a+52>>2]<<1)+((Q|0)==(w(c,50)|0)?2:1)|0;Z=a;e=E;Da:{Ea:{m=((w(m,Q)|0)/(c|0)|0)/(E|0)|0;if((m|0)<12e3){break Ea}g=2;if((m|0)<16e3){break Ea}g=3;if((m|0)<2e4){break Ea}g=4;if((m|0)<24e3){break Ea}g=5;if((m|0)<32e3){break Ea}g=6;if((m|0)<64e3){break Ea}f=q[(D<<2)+40568>>2]+((m-64e3|0)/2|0)|0;break Da}f=w(g,20);g=f+40448|0;l=q[g>>2];f=f+40428|0;j=q[f>>2];ia=f;f=D<<2;f=(w(q[ia+f>>2],l-m|0)+w(q[f+g>>2],m-j|0)|0)/(l-j|0)|0}e=w(e,(k|0)==1104?f+300|0:f);q[Z+64>>2]=(w((E|0)==2?(m|0)>11999?e-1e3|0:e:e,c)|0)/(Q|0);break za}if(($|0)!=1001){break za}}e=(w(c,g)|0)/(Q|0)|0;q[a+64>>2]=(e|0)>(m|0)?m:e}l=a+8|0;j=T?h:-1;if(ha){m=0;q[s+432>>2]=0;g=(Q|0)/400|0;f=w((q[a+172>>2]-g|0)-q[a+116>>2]|0,i)<<2;e=(f+a|0)+14280|0;h=e;e=q[s+612>>2];Cc(h,h,x(0),x(1),q[e+4>>2],g,i,q[e+60>>2],Q);la(fa,0,f);g=q[a+172>>2];f=w(g,q[a+112>>2]);if((f|0)>=1){while(1){h=t+(m<<1)|0;n=x(u[((m<<2)+a|0)+14280>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=e;m=m+1|0;if((f|0)!=(m|0)){continue}break}}Gc(ea,l,t,g,0,s+432|0,ha,j);q[a+72>>2]=0;i=q[a+112>>2]}m=1;h=w(c,i);Ga:{if((h|0)<1){break Ga}e=t;f=w(i,W);n=x(u[M+(f<<2)>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=g;if((h|0)==1){break Ga}while(1){g=t+(m<<1)|0;n=x(u[M+(f+m<<2)>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=e;m=m+1|0;if((h|0)!=(m|0)){continue}break}}Ja:{if(Gc(ea,l,t,c,s+440|0,s+620|0,0,j)){l=-3}else{e=q[a+80>>2];Ka:{La:{f=q[a+14224>>2];if((f|0)==1e3){if((e|0)==8e3){k=1101;break Ka}if((e|0)==16e3){break La}if((e|0)!=12e3){break Ka}k=1102;break Ka}if((e|0)==16e3){break Ka}ja(40340,40321,1863);G()}k=1103}Ma:{if(q[a+96>>2]){e=q[a+18132>>2];q[a+72>>2]=!e;if(!q[s+620>>2]){break Ma}if(e){break Ja}q[a+14248>>2]=1;I=0;g=q[a+14192>>2];e=w(g,40)+20|0;f=(w(q[a+160>>2]+w(e,200-O|0)|0,3)|0)/3200|0;e=(e+((w((H<<3)-(e<<1)|0,240)|0)/((48e3/(O|0)|0)+240|0)|0)|0)/8|0;e=(e|0)>(f|0)?f:e;P=(e|0)>(g<<3|4)?(e|0)<257?e:257:0;X=(P|0)!=0;break Ja}q[a+72>>2]=0;if(q[s+620>>2]){break Ja}}m=0;q[a+18136>>2]=0;c=q[a+144>>2]/(c|0)|0;if((c|0)<=399){while(1){m=m+1|0;c=c<<1;if((c|0)<400){continue}break}m=m<<3}Na:{Oa:{switch(f-1e3|0){case 0:b=m-16|(k<<5)+96&224;break Na;case 2:b=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break Na;default:break Oa}}b=m+240|k<<4|96}o[d|0]=b|(q[a+14192>>2]==2)<<2;l=1}break la}}e=s;f=k-1101|0;if(f>>>0<=3){f=q[(f<<2)+40588>>2]}else{f=21}q[e+384>>2]=f;oa(B,10012,s+384|0);q[s+368>>2]=q[a+14192>>2];oa(B,10008,s+368|0);q[s+352>>2]=-1;oa(B,4002,s+352|0);Pa:{if(q[a+14224>>2]==1e3){m=q[a+112>>2];j=U-(((w(m,q[a+144>>2])|0)/400<<2)+15&-16)|0;ca=j;break Pa}q[s+336>>2]=0;oa(B,4006,s+336|0);q[s+320>>2]=!q[a+76>>2]<<1;oa(B,10002,s+320|0);f=q[a+148>>2];e=q[a+14224>>2];Qa:{Ra:{Sa:{if((e|0)==1001){if(!f){i=q[a+144>>2];m=q[a+112>>2];f=(w(i,m)|0)/400|0;j=U-((f<<2)+15&-16)|0;ca=j;e=1001;break Qa}q[s+256>>2]=q[a+160>>2]-q[a+36>>2];oa(B,4002,s+256|0);q[s+240>>2]=0;oa(B,4020,s+240|0);break Sa}if(!f){break Ra}q[s+304>>2]=1;oa(B,4006,s+304|0);q[s+288>>2]=q[a+152>>2];oa(B,4020,s+288|0);q[s+272>>2]=q[a+160>>2];oa(B,4002,s+272|0)}e=q[J>>2]}i=q[a+144>>2];m=q[a+112>>2];f=(w(i,m)|0)/400|0;j=U-((f<<2)+15&-16)|0;ca=j;if((e|0)==1e3){break Pa}}g=e;e=q[a+14228>>2];if((g|0)==(e|0)|(e|0)<1){break Pa}ka(j,((w(q[a+172>>2]+(((i|0)/-400|0)-W|0)|0,m)<<2)+a|0)+14280|0,f<<2)}f=q[a+172>>2];e=w(f-Y|0,m);Ta:{if((e|0)>=1){f=a+14280|0;e=e<<2;ra(fa,f+(w(c,m)<<2)|0,e);ka(e+f|0,M,w(m,Y)<<2);break Ta}ka(fa,M+(w(Y-f|0,m)<<2)|0,w(f,m)<<2)}n=u[a+14204>>2];if(!(n>2];Cc(M,M,n,F,q[e+4>>2],c,q[a+112>>2],q[e+60>>2],q[a+144>>2])}u[a+14204>>2]=F;t=q[a+14224>>2];if(!(q[a+14192>>2]!=1?(t|0)==1001:0)){e=a;f=16384;Ua:{if((A|0)>32e3){break Ua}f=0;if((A|0)<16e3){break Ua}f=16384-((65536e3-(A<<11)|0)/(A-14e3|0)|0)|0}q[e+92>>2]=f}Va:{if(q[a+14256>>2]|q[a+112>>2]!=2){break Va}g=p[a+14196>>1];l=q[a+92>>2];if((l|0)>16383?(g|0)>=16384:0){break Va}V=x(x(1)-x(x(l|0)*x(6103515625e-14)));m=0;f=q[s+612>>2];i=48e3/q[a+144>>2]|0;e=q[f+4>>2]/(i|0)|0;if((e|0)>0){K=x(x(1)-x(x(g|0)*x(6103515625e-14)));h=q[f+60>>2];while(1){g=m<<3;f=g+M|0;v=u[f>>2];A=f;N=v;n=u[h+(w(i,m)<<2)>>2];n=x(n*n);f=M+(g|4)|0;v=u[f>>2];n=x(x(x(V*n)+x(K*x(x(1)-n)))*x(x(N-v)*x(.5)));u[A>>2]=N-n;u[f>>2]=v+n;m=m+1|0;if((e|0)!=(m|0)){continue}break}m=e}if((c|0)>(m|0)){while(1){f=m<<3;e=f+M|0;n=u[e>>2];g=e;N=n;e=M+(f|4)|0;v=u[e>>2];n=x(V*x(x(n-v)*x(.5)));u[g>>2]=N-n;u[e>>2]=v+n;m=m+1|0;if((m|0)!=(c|0)){continue}break}}p[a+14196>>1]=l}Wa:{Xa:{if((t|0)==1002|(z(q[s+468>>2])+(q[s+460>>2]+((t|0)==1001?5:-15)|0)|0)>S<<3){break Xa}if((t|0)==1001){va(s+440|0,X,12)}if(!X){break Xa}f=1;va(s+440|0,I,1);i=q[J>>2];e=S-((z(q[s+468>>2])+(q[s+460>>2]+((i|0)==1001?-21:-32)|0)|0)+7>>3)|0;e=(e|0)<(P|0)?e:P;e=(e|0)>2?e:2;g=(e|0)<257?e:257;h=0;if((i|0)!=1001){break Wa}Pa(s+440|0,g-2|0,256);break Wa}f=0;q[a+14248>>2]=0;h=1;g=0}D=q[J>>2];Ya:{if((D|0)==1e3){i=q[s+468>>2];e=q[s+460>>2];Zb(s+440|0);m=(e+z(i)|0)-25>>3;i=m;break Ya}m=S-g|0;Oa(s+440|0,m);i=0}Za:{if(!(q[J>>2]!=1e3|f)){e=I;t=0;break Za}q[s+224>>2]=s+544;oa(B,10022,s+224|0);if(q[J>>2]==1001){q[s+432>>2]=q[a+100>>2];q[s+436>>2]=q[a+104>>2];q[s+208>>2]=s+432;oa(B,10028,s+208|0)}e=I;t=0;if(!(f&e)){break Za}q[s+192>>2]=0;oa(B,10010,s+192|0);q[s+176>>2]=0;oa(B,4006,s+176|0);q[s+160>>2]=-1;oa(B,4002,s+160|0);l=-3;if((Va(B,M,q[a+144>>2]/200|0,m+R|0,g,0)|0)<0){break la}q[s+144>>2]=s+616;oa(B,4031,s+144|0);oa(B,4028,0);e=1;t=1}q[s+128>>2]=(D|0)==1002?0:17;oa(B,10010,s+128|0);l=q[J>>2];_a:{if((l|0)==1e3){break _a}I=l;l=q[a+14228>>2];if(!((I|0)==(l|0)|(l|0)<1)){oa(B,4028,0);Va(B,j,q[a+144>>2]/400|0,s+432|0,2,0);q[s+112>>2]=0;oa(B,10002,s+112|0)}if(((q[s+460>>2]+z(q[s+468>>2])|0)-32|0)>m<<3){break _a}if(!(!q[a+148>>2]|(!t|q[J>>2]!=1001))){q[s+96>>2]=q[a+160>>2]-q[a+36>>2];oa(B,4002,s+96|0)}q[s+80>>2]=q[a+148>>2];oa(B,4006,s+80|0);i=Va(B,M,c,0,m,s+440|0);l=-3;if((i|0)<0){break la}if(!q[a+148>>2]|(!t|q[J>>2]!=1001)){break _a}ra(i+R|0,m+R|0,g);m=g+m|0}if(!(e|h)){e=q[a+144>>2];oa(B,4028,0);q[s+64>>2]=0;oa(B,10010,s- -64|0);q[s+48>>2]=0;oa(B,10002,s+48|0);q[s+32>>2]=0;oa(B,4006,s+32|0);q[s+16>>2]=-1;oa(B,4002,s+16|0);if(q[a+14224>>2]==1001){Oa(s+440|0,i);m=i}j=(e|0)/200|0;h=c-j|0;e=(e|0)/400|0;Va(B,M+(w(q[a+112>>2],h-e|0)<<2)|0,e,s+432|0,2,0);l=-3;if((Va(B,M+(w(h,q[a+112>>2])<<2)|0,j,m+R|0,g,0)|0)<=-1){break la}q[s>>2]=s+616;oa(B,4031,s)}h=q[a+14224>>2];m=0;e=q[a+144>>2]/(c|0)|0;if((e|0)<=399){while(1){m=m+1|0;e=e<<1;if((e|0)<400){continue}break}m=m<<3}e=d;$a:{ab:{switch(h-1e3|0){case 0:h=m-16|(k<<5)+96&224;break $a;case 2:h=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break $a;default:break ab}}h=m+240|k<<4|96}o[e|0]=h|(q[a+14192>>2]==2)<<2;h=q[s+468>>2];q[a+18136>>2]=h^q[s+616>>2];q[a+14228>>2]=ga?q[J>>2]:1002;q[a+14252>>2]=0;q[a+14236>>2]=c;e=q[a+14192>>2];q[a+14232>>2]=e;bb:{if(!(!q[a+184>>2]|!(q[s+544>>2]|aa))){cb:{if(!(qa^1|u[s+580>>2]>2];n=x(0);j=w(q[a+112>>2],c);if((j|0)>=1){m=0;while(1){N=n;n=u[(m<<2)+b>>2];n=x(N+x(n*n));m=m+1|0;if((j|0)!=(m|0)){continue}break}}aa=v>=x(x(n/x(j|0))*x(316.2300109863281))}if(aa){b=q[a+18124>>2];q[a+18124>>2]=b+1;if((b|0)<10){break bb}if((b|0)<30){break cb}q[a+18124>>2]=10;break bb}q[a+18124>>2]=0;break bb}m=0;q[a+18136>>2]=0;b=q[a+14224>>2];a=q[a+144>>2]/(c|0)|0;if((a|0)<=399){while(1){m=m+1|0;a=a<<1;if((a|0)<400){continue}break}m=m<<3}db:{eb:{switch(b-1e3|0){case 0:a=m-16|(k<<5)+96&224;break db;case 2:a=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break db;default:break eb}}a=m+240|k<<4|96}o[d|0]=a|((e|0)==2)<<2;l=1;break la}q[a+18124>>2]=0}fb:{if(((q[s+460>>2]+z(h)|0)-32|0)>S<<3){o[R|0]=0;q[a+18136>>2]=0;i=1;break fb}if(q[J>>2]!=1e3|f|(i|0)<3){break fb}while(1){if(r[d+i|0]){break fb}b=(i|0)>3;i=i-1|0;if(b){continue}break}i=2}b=(g+i|0)+1|0;gb:{if(q[a+148>>2]){H=b;break gb}l=-3;if(zc(d,b,H)){break la}}l=H}m=l}ca=s+624|0;return m}function Va(a,b,c,d,e,f){var g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=x(0),n=0,t=0,v=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=x(0),Ka=0,La=x(0),Ma=x(0),Na=x(0),Qa=x(0),Ra=x(0),Sa=x(0);E=ca-192|0;ca=E;t=q[a+8>>2];P=q[a+4>>2];q[E+28>>2]=15;q[E+24>>2]=0;q[E+20>>2]=0;q[E+16>>2]=0;q[E+4>>2]=0;D=q[a+36>>2];I=q[a+32>>2];H=q[a>>2];X=q[H+32>>2];Y=q[H+4>>2];Q=q[H+8>>2];q[E+12>>2]=0;v=-1;a:{if(!b|(e|0)<2){break a}i=q[H+36>>2];if((i|0)<0){break a}U=w(q[a+28>>2],c);c=q[H+44>>2];while(1){if(c<(F|0);F=F+1|0;if(l){continue}break a}break}b:{if(!f){ua=1;i=1;k=0;break b}ua=wa(f);c=q[f+20>>2]+z(q[f+28>>2])|0;i=c-32|0;k=c-28>>3}c:{d:{if(!q[a+48>>2]){L=Y+1024|0;M=(e|0)<1275?e:1275;l=M-k|0;c=q[a+40>>2];e:{if(q[a+44>>2]){if((c|0)==-1){break d}e=q[H>>2];ea=(w(c,U)+(e>>4)|0)/(e>>3)|0;n=ea>>6;break e}if((c|0)==-1){break d}e=q[H>>2];e=((w(c,U)+((i|0)>1?i:0)|0)+(e<<2)|0)/(e<<3)|0;e=(e|0)>(M|0)?M:e;M=(e|0)>2?e:2;n=M-k|0}v=c;break c}ja(39674,39710,1547);G()}n=l}if(!f){_b(E+32|0,d,M);f=E+32|0}e=a+244|0;d=w(P,L)<<2;qa=w(P,Q);fa=3-F|0;Z=w(M,400)>>fa;f:{if(!q[a+52>>2]|(ea|0)<1){break f}c=((i|0)==1)<<1;L=(ea<<1)-q[a+208>>2]>>6;c=(c|0)>(L|0)?c:L;if((c|0)>=(l|0)){break f}M=c+k|0;Oa(f,M);l=c}T=d+e|0;ga=qa<<2;L=(v|0)>(Z|0);xa=w(t,40);ha=400>>>F|0;za=U+Y|0;K=E-((w(za,P)<<2)+15&-16)|0;V=K;ca=K;m=u[a+224>>2];N=q[a+28>>2];d=(w(U-Y|0,t)|0)/(N|0)|0;g:{h:{if((d|0)>=1){c=0;while(1){j=u[(c<<2)+b>>2];g=gj?h:j;c=c+1|0;if((d|0)!=(c|0)){continue}break}g=x(-g);if((g>2];g=gm?h:m;c=c+1|0;if((d|0)!=(c|0)){continue}break}break h}if(m>x(0)){break g}}g=x(-g);m=g>2];sa=1;g=x(0);L=(w(t,Y)|0)/(N|0)|0;i:{if((L|0)<1){h=x(0);break i}d=(d<<2)+b|0;c=0;h=x(0);while(1){j=u[d+(c<<2)>>2];g=gj?h:j;c=c+1|0;if((L|0)!=(c|0)){continue}break}}c=J<<2;d=(D|0)>(O|0);J=M<<3;g=x(-g);g=g>2]=g;g=g>2]));va(f,i,15);if(i^1){i=1;break j}S=1;k:{if((ea|0)<1){i=J;break k}l=2;i=k+2|0;n=(i|0)>(M|0)?M:i;Oa(f,n);M=n;i=n<<3;J=i}q[f+20>>2]=(i-z(q[f+28>>2])|0)+32;sa=0}e=c+e|0;L=1<1?P:1;d=H+16|0;k=K+(Y<<2)|0;c=0;while(1){Y=c<<2;nf(Y+b|0,k+(w(c,za)<<2)|0,U,P,q[a+28>>2],d,(a+Y|0)+192|0,q[a+16>>2]!=0&g>x(65536));c=c+1|0;if((Ka|0)!=(c|0)){continue}break}c=0;if(!(q[a+20>>2]|(!(q[a+64>>2]!=0&(l|0)>3|(w(t,12)|0)<(l|0))|(I|S)))){c=q[a+24>>2]>4}Ga=q[a+100>>2];ia=a+120|0;oa=mf(a,K,e,P,U,Ga,E+28|0,E+24|0,E+80|0,c,l,ia);La=u[E+24>>2];l:{if(!(La>x(.4000000059604645))){ba=0;if(u[a+108>>2]>x(.4000000059604645)^1){break l}}if(q[ia>>2]){ba=0;if(+u[a+124>>2]>.3^1){break l}}Aa=+q[E+28>>2];Ba=+q[a+104>>2];ba=Aa>Ba*1.26|Aa(J|0)|I){break m}va(f,0,1);break m}va(f,1,1);b=q[E+28>>2]+1|0;c=z(b);d=27-c|0;Pa(f,d,6);ya(f,b+(-16<>2],3);ma(f,Ga,39730,2)}Ca=1;N=0;if(!(q[a+64>>2]|q[a+24>>2]<1)){c=0;N=lf(K,za,P,E+12|0,E+16|0,!I|(n|0)>14?c:q[a+184>>2]!=2,E+4|0)}k=H;n:{o:{if(!(!F|((q[f+20>>2]+z(q[f+28>>2])|0)-29|0)>(J|0))){if(N){break o}Ca=0}i=V-((w(P,U)<<2)+15&-16)|0;c=i;ca=c;c=(qa<<2)+15&-16;V=i-c|0;d=V;ca=d;e=d-c|0;c=e;ca=c;_=w(t,Q);R=c-((_<<2)+15&-16)|0;v=R;ca=v;Da=1;N=0;b=0;break n}i=V-((w(P,U)<<2)+15&-16)|0;c=i;ca=c;c=(qa<<2)+15&-16;V=i-c|0;d=V;ca=d;e=d-c|0;c=e;ca=c;_=w(t,Q);R=c-((_<<2)+15&-16)|0;v=R;ca=v;p:{if(q[a+24>>2]<8){Ca=0;break p}Ca=0;Bb(H,0,K,i,t,P,F,q[a+28>>2]);mb(H,i,V,W,t,F);pb(H,W,D,V,R,t);pa=1;if((_|0)<1){break p}g=x(x(F|0)*x(.5));c=0;while(1){d=(c<<2)+R|0;u[d>>2]=g+u[d>>2];c=c+1|0;if((_|0)!=(c|0)){continue}break}}b=L}Y=b;Bb(k,Y,K,i,t,P,F,q[a+28>>2]);q:{r:{g=u[i>>2];if(g==g){if((t|0)==1){break r}g=u[(U<<2)+i>>2];b=0;if(g==g){break q}}ja(39733,39710,1729);G()}b=0;if((P|0)!=2){break q}q[E+16>>2]=0;b=1}za=b;mb(H,i,V,W,t,F);if(!(!q[a+64>>2]|(D|0)<3)){g=x(u[V>>2]*x(9999999747378752e-20));c=2;while(1){b=(c<<2)+V|0;h=u[b>>2];h=g>h?h:g;u[b>>2]=h>x(1.0000000036274937e-15)?h:x(1.0000000036274937e-15);c=c+1|0;if((D|0)!=(c|0)){continue}break}}pb(H,W,D,V,e,t);b=v-((_<<2)+15&-16)|0;ta=b;ca=b;Ea=D<<2;aa=la(b,0,Ea);h=x(0);s:{t:{if(I){break t}da=q[a+236>>2];h=x(0);if(!da){break t}b=q[a+64>>2];if(b){break s}u:{v:{w:{if((t|0)<1){break w}b=q[a+92>>2];k=(b|0)>2?b:2;Ha=1-k|0;d=s[X>>1];S=0;v=0;h=x(0);g=x(0);while(1){Ia=w(Q,S);b=d;c=0;while(1){m=u[da+(c+Ia<<2)>>2];$=mx(-2);h=Fa?x(.25):x(-2);h=Fa?$?m:h:h;m=h>x(0)?x(h*x(.5)):h;h=x(Ja+x(m*x(Ha+(c<<1)|0)));$=b<<16;c=c+1|0;b=p[(c<<1)+X>>1];$=b-($>>16)|0;g=x(g+x(m*x($|0)));v=v+$|0;if((c|0)!=(k|0)){continue}break}S=S+1|0;if((S|0)!=(t|0)){continue}break}c=0;if((v|0)<=0){break w}h=x(x(x(h*x(6))/x(w(k+1|0,w(k-1|0,w(k,t)))|0))*x(.5));h=h>1]/2<<16>>16;while(1){b=c;c=c+1|0;if((d|0)>p[(c<<1)+X>>1]){continue}break}m=h>x(-.03099999949336052)?h:x(-.03099999949336052);g=x(g+x(.20000000298023224));c=0;d=0;while(1){v=c<<2;j=u[v+da>>2];if((t|0)==2){h=u[da+(c+Q<<2)>>2];j=hx(.25)^1)){u[v+aa>>2]=h+x(-.25);d=d+1|0}c=c+1|0;if((k|0)!=(c|0)){continue}break}if((d|0)<3){break u}h=x(g+x(.25));g=x(0);if(!(h>x(0)^1)){break v}c=0;while(1){b=aa+(c<<2)|0;u[b>>2]=B(x(u[b>>2]+x(-.25)),x(0));c=c+1|0;if((k|0)!=(c|0)){continue}break}g=h;break u}ja(39806,39710,1770);G()}la(aa,0,k<<2);m=x(0)}Ra=x(m*x(64));h=x(g+x(.20000000298023224))}Ja=h;b=q[a+64>>2];if(b){break s}h=x(0);if((D|0)>(I|0)){g=Da?x(0):x(x(F|0)*x(.5));j=x(-10);c=I;while(1){m=x(j+x(-1));j=x(u[(c<<2)+e>>2]-g);j=j>2]-g);j=j>m?j:m}h=x(h+j);c=c+1|0;if((D|0)!=(c|0)){continue}break}}g=u[a+240>>2];Ma=x(A(x(B(x(x(h/x(D-I|0))-g),x(-1.5))),x(3)));u[a+240>>2]=g+x(Ma*x(.019999999552965164));b=0}if(!pa){ka(R,e,_<<2)}c=ga;ga=T+ga|0;$=c+ga|0;Da=c+$|0;c=ra?Z:na;na=xa+20|0;Z=c-w(na,ha-50|0)|0;x:{if(!F){break x}c=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0;y:{if((J|0)<(c|0)|N){break y}N=0;if(b|I|q[a+24>>2]<5){break y}c=1;j=u[T>>2];z:{A:{if((t|0)==1){u[E+80>>2]=j;if((D|0)<2){break z}while(1){g=x(j+x(-1));b=c<<2;h=u[b+T>>2];j=g>h?g:h;u[b+(E+80|0)>>2]=j;c=c+1|0;if((D|0)!=(c|0)){continue}break}break A}g=u[(Q<<2)+T>>2];j=g>2]=j;if((D|0)<2){break z}while(1){k=c<<2;g=u[k+T>>2];h=u[(c+Q<<2)+T>>2];b=g>h;m=x(j+x(-1));d=m>(b?g:h);g=d?m:g;j=b?g:d?g:h;u[k+(E+80|0)>>2]=j;c=c+1|0;if((D|0)!=(c|0)){continue}break}}if((D|0)<2){break z}c=D-2|0;while(1){b=(E+80|0)+(c<<2)|0;g=u[b>>2];h=x(u[b+4>>2]+x(-1));u[b>>2]=g>h?g:h;b=(c|0)>0;c=c-1|0;if(b){continue}break}}b=(t|0)>1?t:1;k=D-1|0;d=0;v=(D|0)<4;j=x(0);while(1){if(!v){N=w(d,Q);c=2;while(1){j=x(j+x(B(x(x(B(u[(c+N<<2)+e>>2],x(0)))-x(B(u[(E+80|0)+(c<<2)>>2],x(0)))),x(0))));c=c+1|0;if((k|0)!=(c|0)){continue}break}}d=d+1|0;if((b|0)!=(d|0)){continue}break}N=0;if(!(x(j/x(w(D-3|0,t)|0))>x(1)^1)){Bb(H,L,K,i,t,P,F,q[a+28>>2]);mb(H,i,V,W,t,F);pb(H,W,D,V,e,t);if((_|0)>=1){g=x(x(F|0)*x(.5));c=0;while(1){b=(c<<2)+R|0;u[b>>2]=g+u[b>>2];c=c+1|0;if((_|0)!=(c|0)){continue}break}}q[E+12>>2]=1045220557;N=1;Y=L}c=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0}if((c|0)>(J|0)){break x}va(f,N,3)}S=ta-((w(t,U)<<2)+15&-16)|0;b=S;ca=b;md(H,i,b,V,W,t,L);v=0;if(!((w(t,15)|0)>(n|0)|I|q[a+24>>2]<2)){v=!q[a+64>>2]}c=b;b=(Q<<2)+15&-16;P=c-b|0;c=P;ca=c;c=c-b|0;ca=c;ra=c-b|0;d=ra;ca=d;Sa=kf(e,R,Q,I,D,t,P,q[a+60>>2],q[H+56>>2],N,q[a+44>>2],q[a+52>>2],X,F,n,E+8|0,q[a+64>>2],aa,ia,c,d);R=d-b|0;d=R;ca=d;B:{if(v){b=20480/(n|0)|0;b=jf(H,W,N,R,(b|0)<78?80:b+2|0,S,U,F,u[E+12>>2],q[E+16>>2],c);if((D|0)<=(O|0)){break B}c=(R+(W<<2)|0)-4|0;while(1){q[R+(O<<2)>>2]=q[c>>2];O=O+1|0;if((O|0)!=(D|0)){continue}break}break B}if(!(!I|!q[E+4>>2])){b=0;if((D|0)<1){break B}c=0;while(1){q[R+(c<<2)>>2]=1;c=c+1|0;if((D|0)!=(c|0)){continue}break}break B}if(!(!I|(n|0)>14|q[a+184>>2]==2)){b=N;if((D|0)<1){break B}la(R,0,Ea);break B}b=0;if((D|0)<1){break B}c=0;while(1){q[R+(c<<2)>>2]=N;c=c+1|0;if((D|0)!=(c|0)){continue}break}}xa=(t|0)>1?t:1;aa=d-((_<<2)+15&-16)|0;pa=aa;ca=aa;i=0;while(1){da=(D|0)<=(I|0);if(!da){k=w(i,Q);c=I;while(1){d=c+k<<2;v=d+e|0;g=u[v>>2];if(!(x(y(x(g-u[d+T>>2])))>2]=g+x(u[d+Da>>2]*x(-.25))}c=c+1|0;if((D|0)!=(c|0)){continue}break}}i=i+1|0;if((xa|0)!=(i|0)){continue}break}yd(H,I,D,W,e,T,J,aa,f,t,F,l,q[a+12>>2],a+84|0,q[a+24>>2]>3,q[a+56>>2],q[a+64>>2]);K=0;i=q[f+4>>2]<<3;v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;d=N?2:4;O=(F|0)!=0&i>>>0>=v+(d|1)>>>0;k=0;C:{if(da){break C}c=R+(I<<2)|0;ta=i-O|0;D:{if(ta>>>0>=d+v>>>0){va(f,q[c>>2],d);v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;k=q[c>>2];break D}q[c>>2]=0;k=0}c=I+1|0;if((D|0)==(c|0)){break C}ha=N?4:5;i=k;while(1){d=R+(c<<2)|0;E:{if(ta>>>0>=v+ha>>>0){va(f,q[d>>2]^i,ha);i=q[d>>2];k=k|i;v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;break E}q[d>>2]=i}c=c+1|0;if((D|0)!=(c|0)){continue}break}}F:{if(!O){break F}d=(F<<3)+1152|0;c=N<<2;if(r[d+(c+k|0)|0]==r[d+((c|2)+k|0)|0]){break F}va(f,b,1);K=b<<1}if(!da){b=(N<<2)+K|0;d=(F<<3)+1152|0;c=I;while(1){i=R+(c<<2)|0;q[i>>2]=o[d+(b+q[i>>2]|0)|0];c=c+1|0;if((D|0)!=(c|0)){continue}break}}d=a+100|0;if(((q[f+20>>2]+z(q[f+28>>2])|0)-28|0)<=(J|0)){G:{if(q[a+64>>2]){c=2;q[a+80>>2]=2;q[a+100>>2]=0;break G}b=a;H:{I:{J:{if(I){if(!q[a+24>>2]){break I}if(N){break J}c=3;break H}c=q[a+24>>2];if(!((c|0)>2?!((w(t,10)|0)>(l|0)|Y):0)){if(!c){break I}break J}c=kd(H,S,a+88|0,q[a+80>>2],a+96|0,d,(oa|0)!=0,W,t,L,ra);break H}c=2;break H}c=0}q[b+80>>2]=c}ma(f,c,39832,5)}if(q[a+64>>2]){q[P>>2]=(n|0)>26?8:(n|0)/3|0}L=pa-((Q<<2)+15&-16)|0;W=L;ca=L;$b(H,L,F,t);J=J<<3;d=0;v=wa(f);if(!da){l=6;n=I;while(1){c=n;n=c+1|0;i=c<<2;k=i+P|0;b=0;K:{if(((l<<3)+v|0)>=(J-d|0)){break K}L:{O=i+L|0;if(q[O>>2]<=0){i=0;break L}c=w(p[(n<<1)+X>>1]-p[(c<<1)+X>>1]|0,t)<48?c:48;K=(c|0)>(i|0)?i:c;i=l;c=0;while(1){oa=q[k>>2];va(f,(oa|0)>(c|0),i);v=wa(f);if((c|0)>=(oa|0)){i=c;break L}b=b+K|0;d=d+K|0;if((v+8|0)<(J-d|0)){i=1;c=c+1|0;if(q[O>>2]<=(b|0)){break L}continue}break}l=(l|0)>2?l-1|0:2;break K}if(!i){break K}l=(l|0)>2?l-1|0:2}q[k>>2]=b;if((D|0)!=(n|0)){continue}break}}if((t|0)==2){if(F){b=q[H+32>>2];k=s[b>>1];g=x(1.0000000036274937e-15);i=0;m=x(1.0000000036274937e-15);while(1){c=k<<16>>16<>1];l=k<>2];j=u[S+(c+U<<2)>>2];m=x(m+x(x(y(x(h+j)))+x(y(x(h-j)))));g=x(g+x(x(y(h))+x(y(j))));c=c+1|0;if((l|0)!=(c|0)){continue}break}}if((i|0)!=13){continue}break}b=p[b+26>>1]<>2]=x(x(m*x(.7071070075035095))*x(b+(F>>>0<2?5:13)|0))>x(g*x(b|0))}b=nd(x((Z|0)/1e3|0),q[a+232>>2]);b=(b|0)<(I|0)?I:b;q[a+232>>2]=(b|0)>(D|0)?D:b}i=5;if((v+48|0)<=(J-d|0)){b=f;M:{if(!(q[a+64>>2]?0:(I|0)<=0)){q[a+228>>2]=0;i=5;break M}g=x(4);N:{if((Z|0)<64e3){break N}g=x(5);if((Z|0)>79999){break N}g=x(x(x(Z-64e3>>10)*x(.0625))+x(4))}Na=u[E+12>>2];if((t|0)==2){n=q[a+232>>2];l=q[H+32>>2];i=s[l>>1];h=x(0);k=0;while(1){c=i<<16;j=x(0);k=k+1|0;i=p[l+(k<<1)>>1];c=c>>16;v=i-c<=1){c=c<>2]*u[K+X>>2]));c=c+1|0;if((v|0)!=(c|0)){continue}break}}h=x(h+j);if((k|0)!=8){continue}break}m=x(A(x(y(x(h*x(.125)))),x(1)));h=m;if((n|0)>=9){i=s[l+16>>1];k=8;h=m;while(1){c=i<<16;j=x(0);k=k+1|0;i=p[l+(k<<1)>>1];c=c>>16;v=i-c<=1){c=c<>2]*u[K+X>>2]));c=c+1|0;if((v|0)!=(c|0)){continue}break}}j=x(y(j));h=h>2]+x(.25));m=x(Ba*1.4426950408889634);j=x(m*x(.5));Qa=x(Aa*1.4426950408889634);j=x((j>Qa?j:Qa)*x(-.5));u[a+228>>2]=h=2){n=w(q[H+8>>2],k);c=0;while(1){j=x(j+x(u[(c+n<<2)+e>>2]*x(l+(c<<1)|0)));c=c+1|0;if((i|0)!=(c|0)){continue}break}}k=k+1|0;if((xa|0)!=(k|0)){continue}break}m=g;g=x(x(x(j/x(w(i,t)|0))+x(1))/x(6));c=g>x(2);e=g>2]){m=g;g=x(u[a+128>>2]+x(.05000000074505806));g=x(g+g);c=g>x(2);e=g0?c:0}ma(b,i,40020,7);v=wa(f)}if((ea|0)>=1){c=q[H+36>>2];if(I){b=(w(t,-72)+ea|0)-32|0;b=(b|0)>0?b:0}else{b=ea-(na<<3)|0}X=c-F|0;K=q[a+52>>2];b=K?(q[a+216>>2]>>X)+b|0:b;c=1275>>>fa|0;M=(c|0)>(M|0)?M:c;pa=M;P:{Q:{R:{if(!I){J=q[H+32>>2];c=q[a+92>>2];ua=q[H+8>>2];l=c?c:ua;c=p[J+(l<<1)>>1];n=q[a+232>>2];O=q[a+236>>2];fa=q[a+64>>2];g=u[a+228>>2];h=u[E+12>>2];ha=q[E+8>>2];if((t|0)==2){c=c+p[J+(((l|0)>(n|0)?n:l)<<1)>>1]|0}k=c<>2];c=b;S:{if(!na){break S}m=u[a+136>>2];c=b;if(+m<.4^1){break S}c=b;m=x(x(x(.4000000059604645)-m)*x(k<<3));T:{if(x(y(m))(n|0)?n:l;l=(p[J+(l<<1)>>1]<j?j:g;U:{if(x(y(g))>2]+x(-.15000000596046448));m=x(x(g*x(1.2000000476837158))*(m>2;k=e;g=x(Sa*x(w(p[(J+(ua<<1)|0)-4>>1]<(n|0)?l:n;e=(c|0)>(e|0)?k:c;if(!(!K|ba^1)){g=x(x(e-b|0)*x(.6700000166893005));_:{if(x(y(g))>2];c=(c+((b|0)<100?96>>>fa|0:0)|0)-((b|0)>100?144>>>fa|0:0)|0;g=u[E+12>>2];h=x(x(g+x(-.25))*x(400));$:{if(x(y(h))x(.699999988079071)?(b|0)>400?b:400:b;b=((d+v|0)+63>>6)+2|0;c=(d+ua|0)+359>>6;b=(b|0)>(c|0)?b:c;break P}c=e- -2147483648|0}e=c;b=b<<1;e=(b|0)<(e|0)?b:e;b=((d+v|0)+63>>6)+2|0}e=e+v|0;c=e+32>>6;b=(b|0)>(c|0)?b:c;c=(b|0)>(M|0)?pa:b;j=x(.0010000000474974513);b=q[a+220>>2];if((b|0)<=969){q[a+220>>2]=b+1;j=x(x(1)/x(b+21|0))}b=sa?c:2;aa:{if(!K){break aa}d=q[a+208>>2]+((sa?c<<6:128)-ea|0)|0;q[a+208>>2]=d;c=a;n=c;l=q[c+212>>2];g=x(j*x((((sa?e-ea|0:0)<>2]|0)-l|0));ba:{if(x(y(g))>2]=c;q[a+216>>2]=0-c;if((d|0)>-1){break aa}q[a+208>>2]=0;b=(sa?0-d>>>6|0:0)+b|0}M=(b|0)>(M|0)?M:b;Oa(f,M)}c=(Q<<2)+15&-16;b=W-c|0;ca=b;d=b-c|0;ca=d;e=d-c|0;fa=e;ca=e;k=0;K=H;W=I;ra=D;ba=P;ta=L;pa=i;oa=a+232|0;Ea=E+20|0;ha=M<<6;J=ha+(wa(f)^-1)|0;c=J;i=0;ca:{if(F>>>0<2){break ca}i=0;if(!N){break ca}k=(J|0)>=((F<<3)+16|0);i=k<<3}J=i;Fa=c-J|0;Ha=E+80|0;P=d;v=b;L=e;n=t;l=F;i=f;Ia=q[a+92>>2];if(q[ia>>2]){ia=q[a+152>>2];c=ia;O=13;da:{if((Z|0)<(w(t,32e3)|0)){break da}O=16;if((Z|0)<(w(t,48e3)|0)){break da}O=18;if((Z|0)<(w(t,6e4)|0)){break da}O=(Z|0)<(w(t,8e4)|0)?19:20}c=(O|0)<(ia|0)?c:O}else{c=D-1|0}l=Ob(K,W,ra,ba,ta,pa,oa,Ea,Fa,Ha,P,v,L,n,l,i,1,Ia,q[a+64>>2]?1:c);c=l;i=a;n=q[a+92>>2];if(n){c=n+1|0;n=n-1|0;n=(l|0)<(n|0)?n:l;c=(c|0)<(n|0)?c:n}q[i+92>>2]=c;xd(H,I,D,T,aa,b,f,t);i=0;c=fa-(_+15&-16)|0;ca=c;Lb(1,H,I,D,S,(t|0)==2?S+(U<<2)|0:0,c,V,d,Y,q[a+80>>2],q[E+20>>2],q[a+232>>2],R,ha-J|0,q[E+80>>2],f,F,l,a+76|0,q[a+24>>2],q[a+72>>2],q[a+68>>2]);if(k){ya(f,q[a+116>>2]<2,1)}wd(H,I,D,T,aa,b,e,(((M<<3)-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,t);b=qa<<2;e=la(Da,0,b);while(1){if(!da){l=w(i,Q);c=I;while(1){n=c+l<<2;g=u[n+aa>>2];d=g>x(.5);L=e+n|0;n=(d?x(.5):g)>2]=d?h:n?h:g;c=c+1|0;if((D|0)!=(c|0)){continue}break}}i=i+1|0;if((xa|0)!=(i|0)){continue}break}if(!((_|0)<1|sa)){c=0;while(1){q[(c<<2)+T>>2]=-1042284544;c=c+1|0;if((_|0)!=(c|0)){continue}break}}c=q[E+28>>2];q[a+112>>2]=Ga;u[a+108>>2]=La;q[a+104>>2]=c;if(za){c=Q<<2;ka(c+T|0,T,c)}ea:{if(N){c=0;if((qa|0)<=0){break ea}while(1){b=c<<2;d=b+ga|0;g=u[d>>2];h=u[b+T>>2];u[d>>2]=g>2]=0;q[b+$>>2]=-1042284544;q[b+ga>>2]=-1042284544;c=c+1|0;if((I|0)!=(c|0)){continue}break}}if((D|0)<(Q|0)){i=w(e,Q);c=D;while(1){b=c+i<<2;q[b+T>>2]=0;q[b+$>>2]=-1042284544;q[b+ga>>2]=-1042284544;c=c+1|0;if((Q|0)!=(c|0)){continue}break}}e=e+1|0;if((Ka|0)!=(e|0)){continue}break}q[a+116>>2]=!N&(Ca^-1)?0:q[a+116>>2]+1|0;q[a+76>>2]=q[f+28>>2];Zb(f);v=q[f+44>>2]?-3:M}ca=E+192|0;return v}function _e(a,b,c,d,e,f,g,h,i,j,k){var l=x(0),m=0,n=x(0),p=x(0),r=0,s=x(0),t=x(0),v=x(0),z=x(0),D=0,E=x(0),G=0,H=x(0),I=0,J=x(0),K=0,L=x(0),M=0,N=x(0),O=x(0),P=x(0),Q=x(0),R=0,S=x(0),T=x(0),U=x(0),V=x(0),W=x(0),X=x(0),Y=x(0),Z=0,_=0,$=x(0),aa=x(0),ba=x(0),da=x(0),ea=x(0),fa=x(0),ga=x(0),ha=x(0),ia=0,ja=0,la=x(0),ma=x(0),na=0,oa=0,pa=0,qa=x(0),ra=x(0),sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=0,Ea=0,Fa=x(0),Ga=x(0);m=ca-11360|0;ca=m;if(c){r=(w(h,95)|0)/50|0;d=d&-2;ua=(d|0)>(r|0)?r:d;ia=q[a+7440>>2];ja=ua-ia|0;if((ja|0)>=1){va=a+7464|0;Da=a+3852|0;Ea=a+4812|0;wa=a+7592|0;na=a+2892|0;pa=(h|0)/50|0;l=x(x(.0005699999746866524)/x(1<<((i|0)>8?i:8)-8));qa=x(l*l);Fa=x(qa*x(3));while(1){if(!q[a+7460>>2]){q[a+7460>>2]=1;q[a+5772>>2]=240}r=(ja|0)>(pa|0)?pa:ja;oa=q[a+7436>>2];h=q[a+8>>2];a:{if((h|0)!=16e3){d=ia;if((h|0)!=48e3){break a}r=(r|0)/2|0;d=(ia|0)/2|0;break a}r=(w(r,3)|0)/2|0;d=(w(ia,3)|0)/2|0}G=q[b+72>>2];I=q[a+5772>>2];D=720-I|0;Y=x(wc(j,c,((I<<2)+a|0)+2892|0,wa,(r|0)<(D|0)?r:D,d,f,g,h)+u[a+7456>>2]);u[a+7456>>2]=Y;h=q[a+5772>>2]+r|0;b:{if((h|0)<=719){q[a+5772>>2]=h;break b}sa=oa+1|0;fa=x(x(1)/x(((oa|0)<100?sa:100)|0));D=q[a+7444>>2];q[a+7444>>2]=((D|0)>98?-99:1)+D;K=df(na,i);h=0;while(1){I=(m+5760|0)+(h<<3)|0;M=h<<2;l=u[M+40608>>2];M=M+na|0;u[I>>2]=l*u[M>>2];u[I+4>>2]=l*u[M+960>>2];I=479-h|0;M=(m+5760|0)+(I<<3)|0;u[M>>2]=l*u[(I<<2)+na>>2];u[M+4>>2]=l*u[(719-h<<2)+na>>2];h=h+1|0;if((h|0)!=240){continue}break}ka(na,Ea,960);h=q[a+5772>>2];r=h+r|0;l=wc(j,c,Da,wa,r-720|0,(d-h|0)+720|0,f,g,q[a+8>>2]);q[a+5772>>2]=r-480;u[a+7456>>2]=l;M=(D<<6)+a|0;I=M+7604|0;if(K){d=q[a+7444>>2];d=(((d|0)<2?98:-2)+d<<6)+a|0;h=d+7660|0;r=q[h+4>>2];q[I+56>>2]=q[h>>2];q[I+60>>2]=r;h=d+7652|0;r=q[h+4>>2];q[I+48>>2]=q[h>>2];q[I+52>>2]=r;h=d+7644|0;r=q[h+4>>2];q[I+40>>2]=q[h>>2];q[I+44>>2]=r;h=d+7636|0;r=q[h+4>>2];q[I+32>>2]=q[h>>2];q[I+36>>2]=r;h=d+7628|0;r=q[h+4>>2];q[I+24>>2]=q[h>>2];q[I+28>>2]=r;h=d+7620|0;r=q[h+4>>2];q[I+16>>2]=q[h>>2];q[I+20>>2]=r;h=d+7612|0;r=q[h+4>>2];q[I+8>>2]=q[h>>2];q[I+12>>2]=r;d=d+7604|0;h=q[d+4>>2];q[I>>2]=q[d>>2];q[I+4>>2]=h;break b}pg(G,m+5760|0,m+1920|0);h=1;J=u[m+1920>>2];if(J!=J){q[I>>2]=0;break b}while(1){d=((0-h<<3)+m|0)+5760|0;l=u[d>>2];r=(m+1920|0)+(h<<3)|0;p=u[r>>2];z=x(l-p);s=u[r+4>>2];N=u[d+4>>2];E=x(s+N);n=x(0);D=h<<2;r=D+a|0;K=r;L=x(p+l);l=x(L*L);s=x(s-N);p=x(s*s);v=x(0);c:{if(x(l+p)>2]);l=x(L-u[r+972>>2]);p=x(z*z);s=x(E*E);d:{if(x(p+s)s^1)){n=x((z>2]=x(y(n))+x(y(l));d=r+1932|0;z=u[d>>2];l=x(l*l);l=x(l*l);u[D+(m+1e4|0)>>2]=x(x(1)/x(x(l*x(62341.81640625))+x(1)))+x(-.014999999664723873);n=x(n*n);u[D+(m+960|0)>>2]=x(x(1)/x(x(x(x(x(z+x(n*n))+x(l+l))*x(.25))*x(62341.81640625))+x(1)))+x(-.014999999664723873);u[K+12>>2]=p;u[r+972>>2]=s;u[d>>2]=l;h=h+1|0;if((h|0)!=240){continue}break}h=2;s=u[m+10008>>2];while(1){d=h<<2;r=d+(m+960|0)|0;n=u[r>>2];p=u[(d+m|0)+9996>>2];h=h+1|0;l=u[(m+1e4|0)+(h<<2)>>2];d=p>l;D=r;r=(d?p:l)>s;p=r?s:p;p=x((d?p:r?p:l)+x(-.10000000149011612));u[D>>2]=(p>2]=0;Z=q[a+7436>>2];if(!Z){q[a+7008>>2]=1343554297;q[a+7012>>2]=1343554297;q[a+7080>>2]=-803929351;q[a+7084>>2]=-803929351;q[a+7088>>2]=-803929351;q[a+7092>>2]=-803929351;q[a+7016>>2]=1343554297;q[a+7020>>2]=1343554297;q[a+7096>>2]=-803929351;q[a+7100>>2]=-803929351;q[a+7024>>2]=1343554297;q[a+7028>>2]=1343554297;q[a+7104>>2]=-803929351;q[a+7108>>2]=-803929351;q[a+7032>>2]=1343554297;q[a+7036>>2]=1343554297;q[a+7112>>2]=-803929351;q[a+7116>>2]=-803929351;q[a+7040>>2]=1343554297;q[a+7044>>2]=1343554297;q[a+7048>>2]=1343554297;q[a+7052>>2]=1343554297;q[a+7120>>2]=-803929351;q[a+7124>>2]=-803929351;q[a+7056>>2]=1343554297;q[a+7060>>2]=1343554297;q[a+7136>>2]=-803929351;q[a+7140>>2]=-803929351;q[a+7128>>2]=-803929351;q[a+7132>>2]=-803929351;q[a+7064>>2]=1343554297;q[a+7068>>2]=1343554297;q[a+7072>>2]=1343554297;q[a+7144>>2]=-803929351;q[a+7148>>2]=-803929351;q[a+7076>>2]=1343554297}l=x(J+J);p=x(l*l);l=u[m+1924>>2];l=x(l+l);p=x(p+x(l*l));l=u[m+1928>>2];n=x(l*l);l=u[m+5752>>2];n=x(n+x(l*l));l=u[m+1932>>2];n=x(n+x(l*l));l=u[m+5756>>2];p=x(p+x(n+x(l*l)));l=u[m+1936>>2];n=x(l*l);l=u[m+5744>>2];n=x(n+x(l*l));l=u[m+1940>>2];n=x(n+x(l*l));l=u[m+5748>>2];p=x(p+x(n+x(l*l)));l=u[m+1944>>2];n=x(l*l);l=u[m+5736>>2];n=x(n+x(l*l));l=u[m+1948>>2];n=x(n+x(l*l));l=u[m+5740>>2];E=x(x(Ua(+x(x(p+x(n+x(l*l)))+x(1.000000013351432e-10))))*x(.7213475108146667));u[m+9888>>2]=E;J=x(0);d=0;h=4;L=x(0);N=x(0);S=x(0);ga=x(0);ha=x(0);O=x(0);while(1){z=x(0);H=x(0);s=x(0);D=d+1|0;K=D<<2;r=q[K+41568>>2];if((r|0)>(h|0)){while(1){G=(m+1920|0)+(h<<3)|0;l=u[G>>2];p=x(l*l);R=((0-h<<3)+m|0)+5760|0;l=u[R>>2];p=x(p+x(l*l));l=u[G+4>>2];p=x(p+x(l*l));l=u[R+4>>2];l=x(p+x(l*l));s=x(s+l);G=h<<2;H=x(H+x(l*x(B(u[G+(m+960|0)>>2],x(0)))));z=x(z+x(x(l+l)*x(x(.5)-u[m+G>>2])));h=h+1|0;if((r|0)!=(h|0)){continue}break}}if(!(s==s?!(s>2]=0;break b}G=d<<2;h=G+(w(q[a+7432>>2],72)+a|0)|0;u[h+5856>>2]=s;U=x(s+x(1.000000013351432e-10));l=x(Ua(+U));u[K+(m+9888|0)>>2]=l*x(.7213475108146667);u[G+(m+11200|0)>>2]=l;u[h+6432>>2]=l;h=a+G|0;K=h+7008|0;R=h+7080|0;g:{if(Z){_=a+G|0;p=u[_+7008>>2];n=u[_+7080>>2];break g}_=a+G|0;u[_+7080>>2]=l;u[_+7008>>2]=l;p=l;n=l}h:{if(+n>+p+7.5^1){break h}if(!(x(n-l)>x(l-p)^1)){n=x(n+x(-.009999999776482582));u[R>>2]=n;break h}p=x(p+x(.009999999776482582));u[K>>2]=p}P=x(s+x(1.0000000036274937e-15));i:{if(!(l>n^1)){u[R>>2]=l;n=x(l+x(-15));p=p>2]=p;n=l;break i}if(l>2]=l;p=x(l+x(15));n=p>2]=n;p=l}s=x(H/P);K=h+5776|0;H=u[h+5856>>2];Q=u[h+5928>>2];V=u[h+6e3>>2];W=u[h+6072>>2];X=u[h+6144>>2];$=u[h+6216>>2];aa=u[h+6288>>2];T=u[h+6360>>2];H=x(A(x(x(x(x(x(x(x(x(x(x(F(H))+x(0))+x(F(Q)))+x(F(V)))+x(F(W)))+x(F(X)))+x(F($)))+x(F(aa)))+x(F(T)))/x(F(+x(x(x(x(x(x(x(x(x(H+x(0))+Q)+V)+W)+X)+$)+aa)+T)*x(8))+1e-15))),x(.9900000095367432)));H=x(H*H);H=x(H*H);Q=x(u[K>>2]*H);s=s>Q?s:Q;u[G+(m+11280|0)>>2]=s;J=x(J+s);J=d>>>0>=9?x(J-u[(m+G|0)+11244>>2]):J;O=x(O+x(F(U)));N=x(N+x(z/P));ga=x(ga+H);ha=x(ha+x(x(l-p)/x(x(n-p)+x(9999999747378752e-21))));u[K>>2]=s;l=x(x(x(x(d-18|0)*x(.029999999329447746))+x(1))*J);L=l>2]=E;s=x(E+x(-2.5));u[m+9728>>2]=s;d=1;r=4;z=E;while(1){D=d<<2;h=q[D+41568>>2];l=x(h-r|0);p=x(x(l+l)*x(.25));l=x(z+p);n=u[D+(m+9888|0)>>2];z=l>2]=z;l=x(s-p);n=x(n+x(-2.5));s=l>n?l:n;u[D+(m+9728|0)>>2]=s;r=h;d=d+1|0;if((d|0)!=19){continue}break}d=16;r=192;l=u[m+9796>>2];s=u[m+9876>>2];while(1){h=d;D=h<<2;G=D+(m+9808|0)|0;d=r;r=q[D+41568>>2];n=x(d-r|0);n=x(x(n+n)*x(.25));p=x(s+n);s=u[G>>2];s=p>2]=s;l=x(l-n);D=D+(m+9728|0)|0;n=u[D>>2];l=l>n?l:n;u[D>>2]=l;d=h-1|0;if(h){continue}break}h=0;while(1){s=x(0);r=(h+M|0)+7648|0;d=h<<2;xa=C(+x(x(x(B(x(u[d+(m+9728|0)>>2]-E),x(0)))+x(B(x(E-x(u[d+(m+9808|0)>>2]+x(2.5))),x(0))))*x(64))+.5);j:{if(y(xa)<2147483648){d=~~xa;break j}d=-2147483648}o[r|0]=(d|0)<255?d:255;r=0;h=h+1|0;if((h|0)!=19){E=u[(m+9888|0)+(h<<2)>>2];continue}break}while(1){d=w(r,72)+a|0;n=u[d+6500>>2];p=u[d+6496>>2];z=u[d+6448>>2];E=u[d+6444>>2];J=u[d+6440>>2];H=u[d+6436>>2];P=u[d+6432>>2];U=u[d+6492>>2];Q=u[d+6488>>2];V=u[d+6484>>2];W=u[d+6480>>2];X=u[d+6476>>2];$=u[d+6472>>2];aa=u[d+6468>>2];T=u[d+6464>>2];ba=u[d+6460>>2];da=u[d+6456>>2];ea=u[d+6452>>2];l=x(999999986991104);d=0;while(1){h=w(d,72)+a|0;t=x(P-u[h+6432>>2]);v=x(x(t*t)+x(0));t=x(H-u[h+6436>>2]);v=x(v+x(t*t));t=x(J-u[h+6440>>2]);v=x(v+x(t*t));t=x(E-u[h+6444>>2]);v=x(v+x(t*t));t=x(z-u[h+6448>>2]);v=x(v+x(t*t));t=x(ea-u[h+6452>>2]);v=x(v+x(t*t));t=x(da-u[h+6456>>2]);v=x(v+x(t*t));t=x(ba-u[h+6460>>2]);v=x(v+x(t*t));t=x(T-u[h+6464>>2]);v=x(v+x(t*t));t=x(aa-u[h+6468>>2]);v=x(v+x(t*t));t=x($-u[h+6472>>2]);v=x(v+x(t*t));t=x(X-u[h+6476>>2]);v=x(v+x(t*t));t=x(W-u[h+6480>>2]);v=x(v+x(t*t));t=x(V-u[h+6484>>2]);v=x(v+x(t*t));t=x(Q-u[h+6488>>2]);v=x(v+x(t*t));t=x(U-u[h+6492>>2]);v=x(v+x(t*t));t=x(p-u[h+6496>>2]);v=x(v+x(t*t));t=x(n-u[h+6500>>2]);t=x(v+x(t*t));l=(d|0)==(r|0)?l:l>2];d=0;r=4;K=0;n=x(0);H=x(0);z=x(0);while(1){l=x(0);h=r;D=d+1|0;G=q[(D<<2)+41568>>2];if((h|0)<(G|0)){while(1){E=l;Z=(m+1920|0)+(h<<3)|0;l=u[Z>>2];v=x(l*l);_=((0-h<<3)+m|0)+5760|0;l=u[_>>2];v=x(v+x(l*l));l=u[Z+4>>2];v=x(v+x(l*l));l=u[_+4>>2];l=x(E+x(v+x(l*l)));h=h+1|0;if((G|0)!=(h|0)){continue}break}}h=d<<2;Z=(h+a|0)+7152|0;E=x(J*u[Z>>2]);E=l>2]=E;n=lE?l:E)?D:K}r=d>>>0<11;H=r?x(H+l):H;z=r?z:x(z+l);q[h+(m+10960|0)>>2]=x(p*((d|0)<(R|0)?x(.009999999776482582):x(.05000000074505806)))>l;p=x(p*x(.05000000074505806));p=l>2]==48e3){n=x(J*u[a+7224>>2]);l=x(Y*x(.00027777778450399637));n=l>2]=n;d=(R|0)==20;E=d?x(10):x(30);K=(l>x(x(qa*E)*x(160))^1?!(x(x(qa*x(E*x(3)))*x(160))<(l>n?l:n)):0)?K:20;q[m+11032>>2]=l>2]=z>H?x(H/z):x(1);k:{if((K|0)==20){K=q[m+11032>>2]?18:20;break k}d=K-1|0;if(d>>>0>17){break k}K=q[(m+10960|0)+(d<<2)>>2]?d:K}Ga=x(F(p));s=x(u[a+7424>>2]+x(-.003000000026077032));p=x(x(db(+O))*x(20));s=p>2]=s;z=l;l=x(x(x(1)-l)*u[a+7428>>2]);u[a+7428>>2]=p>2];d=0;l=u[m+11204>>2];p=u[m+11200>>2];s=u[m+11260>>2];z=u[m+11256>>2];E=u[m+11252>>2];J=u[m+11248>>2];H=u[m+11244>>2];O=u[m+11240>>2];P=u[m+11236>>2];Y=u[m+11232>>2];fa=u[m+11228>>2];U=u[m+11224>>2];Q=u[m+11220>>2];V=u[m+11216>>2];W=u[m+11212>>2];X=u[m+11208>>2];while(1){h=d<<6;u[(m+11168|0)+(d<<2)>>2]=x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(p*u[h+41648>>2])+x(0))+x(l*u[(h|4)+41648>>2]))+x(X*u[(h|8)+41648>>2]))+x(W*u[(h|12)+41648>>2]))+x(V*u[(h|16)+41648>>2]))+x(Q*u[(h|20)+41648>>2]))+x(U*u[(h|24)+41648>>2]))+x(fa*u[(h|28)+41648>>2]))+x(Y*u[(h|32)+41648>>2]))+x(P*u[(h|36)+41648>>2]))+x(O*u[(h|40)+41648>>2]))+x(H*u[(h|44)+41648>>2]))+x(J*u[(h|48)+41648>>2]))+x(E*u[(h|52)+41648>>2]))+x(z*u[(h|56)+41648>>2]))+x(s*u[(h|60)+41648>>2]);d=d+1|0;if((d|0)!=8){continue}break}r=0;while(1){d=r<<4;l=x(0);h=0;while(1){G=(h<<2)+a|0;l=x(l+x(x(u[(d+h<<2)+41648>>2]*x(.5))*x(u[G+7080>>2]+u[G+7008>>2])));h=h+1|0;if((h|0)!=16){continue}break}u[(m+9968|0)+(r<<2)>>2]=l;r=r+1|0;if((r|0)!=8){continue}break}H=x(N/x(18));u[ta>>2]=H+x(x(x(1)-H)*((D|0)<10?x(.5):x(ha/x(18))));l=x(L/x(9));p=x(u[a+5848>>2]*x(.800000011920929));l=l>p?l:p;u[a+5848>>2]=l;h=M+7612|0;u[h>>2]=S*x(.015625);r=(D|0)<9999?D+1|0:1e4;q[a+7436>>2]=r;q[a+7432>>2]=(q[a+7432>>2]+1|0)%8;G=M+7608|0;u[G>>2]=l;ha=u[a+7260>>2];P=u[a+7228>>2];Y=u[a+7292>>2];J=x(P+Y);p=u[m+11168>>2];t=u[a+7324>>2];T=x(p+t);ba=u[a+7356>>2];L=x(x(x(ha*x(.6969299912452698))+x(x(J*x(.49195000529289246))-x(T*x(.12298999726772308))))-x(ba*x(1.4349000453948975)));u[m+11056>>2]=L;fa=u[a+7264>>2];U=u[a+7232>>2];Q=u[a+7296>>2];da=x(U+Q);s=u[m+11172>>2];ea=u[a+7328>>2];la=x(s+ea);ma=u[a+7360>>2];N=x(x(x(fa*x(.6969299912452698))+x(x(da*x(.49195000529289246))-x(la*x(.12298999726772308))))-x(ma*x(1.4349000453948975)));u[m+11060>>2]=N;V=u[a+7268>>2];W=u[a+7236>>2];X=u[a+7300>>2];ra=x(W+X);z=u[m+11176>>2];ya=u[a+7332>>2];za=x(z+ya);Aa=u[a+7364>>2];S=x(x(x(V*x(.6969299912452698))+x(x(ra*x(.49195000529289246))-x(za*x(.12298999726772308))))-x(Aa*x(1.4349000453948975)));u[m+11064>>2]=S;Ba=u[a+7272>>2];$=u[a+7240>>2];aa=u[a+7304>>2];E=u[m+11180>>2];Ca=u[a+7336>>2];l=u[a+7368>>2];O=x(x(x(Ba*x(.6969299912452698))+x(x(x($+aa)*x(.49195000529289246))-x(x(E+Ca)*x(.12298999726772308))))-x(l*x(1.4349000453948975)));u[m+11068>>2]=O;v=l;l=x(x(1)-n);u[a+7368>>2]=x(n*E)+x(v*l);u[a+7364>>2]=x(n*z)+x(l*Aa);u[a+7360>>2]=x(n*s)+x(l*ma);u[a+7356>>2]=x(n*p)+x(l*ba);u[m+11096>>2]=x(x(za*x(.5345199704170227))-x(ra*x(.26725998520851135)))-x(V*x(.5345199704170227));u[m+11092>>2]=x(x(la*x(.5345199704170227))-x(da*x(.26725998520851135)))-x(fa*x(.5345199704170227));T=x(x(x(T*x(.5345199704170227))-x(J*x(.26725998520851135)))-x(ha*x(.5345199704170227)));u[m+11088>>2]=T;ba=x(x(x(E-Ca)*x(.6324599981307983))+x(x($-aa)*x(.31622999906539917)));u[m+11084>>2]=ba;da=x(x(x(z-ya)*x(.6324599981307983))+x(x(W-X)*x(.31622999906539917)));u[m+11080>>2]=da;ea=x(x(x(s-ea)*x(.6324599981307983))+x(x(U-Q)*x(.31622999906539917)));u[m+11076>>2]=ea;t=x(x(x(p-t)*x(.6324599981307983))+x(x(P-Y)*x(.31622999906539917)));u[m+11072>>2]=t;d=(D|0)<3?20:K;ra=x(ga/x(18));J=u[a+7388>>2];l:{if((r|0)<=5){L=u[a+7420>>2];N=u[a+7412>>2];S=u[a+7408>>2];ga=u[a+7404>>2];O=u[a+7400>>2];la=u[a+7396>>2];ma=u[a+7392>>2];break l}J=x(x(L*x(n*L))+x(l*J));u[a+7388>>2]=J;ma=x(x(N*x(n*N))+x(l*u[a+7392>>2]));u[a+7392>>2]=ma;la=x(x(S*x(n*S))+x(l*u[a+7396>>2]));u[a+7396>>2]=la;O=x(x(O*x(n*O))+x(l*u[a+7400>>2]));u[a+7400>>2]=O;ga=x(x(t*x(n*t))+x(l*u[a+7404>>2]));u[a+7404>>2]=ga;S=x(x(ea*x(n*ea))+x(l*u[a+7408>>2]));u[a+7408>>2]=S;N=x(x(da*x(n*da))+x(l*u[a+7412>>2]));u[a+7412>>2]=N;u[a+7416>>2]=x(ba*x(n*ba))+x(l*u[a+7416>>2]);L=x(x(T*x(n*T))+x(l*u[a+7420>>2]));u[a+7420>>2]=L}u[m+11056>>2]=p-u[m+9968>>2];u[m+11060>>2]=s-u[m+9972>>2];u[m+11064>>2]=z-u[m+9976>>2];u[m+11068>>2]=E-u[m+9980>>2];u[a+7260>>2]=P;u[a+7328>>2]=Q;u[a+7228>>2]=p;u[a+7296>>2]=fa;u[a+7264>>2]=U;u[a+7332>>2]=X;u[a+7232>>2]=s;u[a+7300>>2]=V;u[a+7268>>2]=W;u[a+7336>>2]=aa;u[a+7236>>2]=z;u[a+7304>>2]=Ba;u[a+7272>>2]=$;u[a+7240>>2]=E;u[a+7324>>2]=Y;u[a+7292>>2]=ha;l=u[a+7308>>2];u[a+7308>>2]=u[a+7276>>2];u[a+7340>>2]=l;u[a+7276>>2]=u[a+7244>>2];u[a+7244>>2]=u[m+11184>>2];u[a+7344>>2]=u[a+7312>>2];u[a+7312>>2]=u[a+7280>>2];u[a+7280>>2]=u[a+7248>>2];u[a+7248>>2]=u[m+11188>>2];u[a+7348>>2]=u[a+7316>>2];u[a+7316>>2]=u[a+7284>>2];u[a+7284>>2]=u[a+7252>>2];u[a+7252>>2]=u[m+11192>>2];u[a+7352>>2]=u[a+7320>>2];u[a+7320>>2]=u[a+7288>>2];u[a+7288>>2]=u[a+7256>>2];u[a+7256>>2]=u[m+11196>>2];u[m+11132>>2]=x(F(L))+x(-1.9187949895858765);u[m+11124>>2]=x(F(N))+x(-1.260756015777588);u[m+11120>>2]=x(F(S))+x(-2.1633129119873047);u[m+11116>>2]=x(F(ga))+x(-3.7732150554656982);u[m+11112>>2]=x(F(O))+x(-1.599784016609192);u[m+11108>>2]=x(F(la))+x(-1.7706340551376343);u[m+11104>>2]=x(F(ma))+x(-3.475287914276123);u[m+11100>>2]=x(F(J))+x(-5.6849470138549805);u[m+11128>>2]=Ga+x(-.7799999713897705);u[m+11136>>2]=u[G>>2]+x(-.15472300350666046);l=u[ta>>2];u[m+11144>>2]=ra+x(-.7437170147895813);u[m+11140>>2]=l+x(-.7246429920196533);u[m+11148>>2]=u[h>>2]+x(.06921599805355072);u[m+11152>>2]=u[a+7428>>2]+x(-.06792999804019928);vc(43808,m+9600|0,m+11056|0);Ze(va,m+9600|0);vc(48032,m+11048|0,va);u[M+7640>>2]=u[m+11052>>2];l=u[m+11048>>2];q[M+7636>>2]=d;u[M+7624>>2]=l;q[a+5852>>2]=d;u[M+7616>>2]=H;q[I>>2]=1}ia=ia+pa|0;ja=ja-pa|0;if((ja|0)>0){continue}break}}q[a+7440>>2]=ua-e}$e(a,k,e);ca=m+11360|0}function Ra(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=ca-16|0;ca=m;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{if(a>>>0<=244){h=q[14673];g=a>>>0<11?16:a+11&-8;a=g>>>3|0;b=h>>>a|0;if(b&3){c=a+((b^-1)&1)|0;e=c<<3;b=q[e+58740>>2];a=b+8|0;d=q[b+8>>2];e=e+58732|0;n:{if((d|0)==(e|0)){n=58692,o=Ag(-2,c)&h,q[n>>2]=o;break n}q[d+12>>2]=e;q[e+8>>2]=d}c=c<<3;q[b+4>>2]=c|3;b=b+c|0;q[b+4>>2]=q[b+4>>2]|1;break a}f=q[14675];if(f>>>0>=g>>>0){break m}if(b){c=2<>>12&16;c=b;a=a>>>b|0;b=a>>>5&8;c=c|b;a=a>>>b|0;b=a>>>2&4;c=c|b;a=a>>>b|0;b=a>>>1&2;c=c|b;a=a>>>b|0;b=a>>>1&1;c=(c|b)+(a>>>b|0)|0;d=c<<3;b=q[d+58740>>2];a=q[b+8>>2];d=d+58732|0;o:{if((a|0)==(d|0)){h=Ag(-2,c)&h;q[14673]=h;break o}q[a+12>>2]=d;q[d+8>>2]=a}a=b+8|0;q[b+4>>2]=g|3;i=b+g|0;c=c<<3;e=c-g|0;q[i+4>>2]=e|1;q[b+c>>2]=e;if(f){c=f>>>3|0;b=(c<<3)+58732|0;d=q[14678];c=1<>2]}q[b+8>>2]=d;q[c+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=c}q[14678]=i;q[14675]=e;break a}k=q[14674];if(!k){break m}a=(k&0-k)-1|0;b=a>>>12&16;c=b;a=a>>>b|0;b=a>>>5&8;c=c|b;a=a>>>b|0;b=a>>>2&4;c=c|b;a=a>>>b|0;b=a>>>1&2;c=c|b;a=a>>>b|0;b=a>>>1&1;d=q[((c|b)+(a>>>b|0)<<2)+58996>>2];c=(q[d+4>>2]&-8)-g|0;b=d;while(1){q:{a=q[b+16>>2];if(!a){a=q[b+20>>2];if(!a){break q}}e=(q[a+4>>2]&-8)-g|0;b=e>>>0>>0;c=b?e:c;d=b?a:d;b=a;continue}break}l=d+g|0;if(l>>>0<=d>>>0){break l}j=q[d+24>>2];e=q[d+12>>2];if((e|0)!=(d|0)){a=q[d+8>>2];q[a+12>>2]=e;q[e+8>>2]=a;break b}b=d+20|0;a=q[b>>2];if(!a){a=q[d+16>>2];if(!a){break k}b=d+16|0}while(1){i=b;e=a;b=a+20|0;a=q[b>>2];if(a){continue}b=e+16|0;a=q[e+16>>2];if(a){continue}break}q[i>>2]=0;break b}g=-1;if(a>>>0>4294967231){break m}a=a+11|0;g=a&-8;h=q[14674];if(!h){break m}i=31;if(g>>>0<=16777215){b=a>>>8|0;a=b+1048320>>>16&8;c=b<>>16&4;d=c<>>16&2;a=(d<>>15|0)-(c|(a|b))|0;i=(a<<1|g>>>a+21&1)+28|0}c=0-g|0;b=q[(i<<2)+58996>>2];r:{s:{t:{if(!b){a=0;break t}a=0;d=g<<((i|0)==31?0:25-(i>>>1|0)|0);while(1){u:{f=(q[b+4>>2]&-8)-g|0;if(f>>>0>=c>>>0){break u}e=b;c=f;if(c){break u}c=0;a=b;break s}f=q[b+20>>2];b=q[((d>>>29&4)+b|0)+16>>2];a=f?(f|0)==(b|0)?a:f:a;d=d<<1;if(b){continue}break}}if(!(a|e)){a=2<>>12&16;d=b;a=a>>>b|0;b=a>>>5&8;d=d|b;a=a>>>b|0;b=a>>>2&4;d=d|b;a=a>>>b|0;b=a>>>1&2;d=d|b;a=a>>>b|0;b=a>>>1&1;a=q[((d|b)+(a>>>b|0)<<2)+58996>>2]}if(!a){break r}}while(1){d=(q[a+4>>2]&-8)-g|0;b=d>>>0>>0;c=b?d:c;e=b?a:e;b=q[a+16>>2];if(b){a=b}else{a=q[a+20>>2]}if(a){continue}break}}if(!e|q[14675]-g>>>0<=c>>>0){break m}f=e+g|0;if(f>>>0<=e>>>0){break l}j=q[e+24>>2];d=q[e+12>>2];if((e|0)!=(d|0)){a=q[e+8>>2];q[a+12>>2]=d;q[d+8>>2]=a;break c}b=e+20|0;a=q[b>>2];if(!a){a=q[e+16>>2];if(!a){break j}b=e+16|0}while(1){i=b;d=a;b=a+20|0;a=q[b>>2];if(a){continue}b=d+16|0;a=q[d+16>>2];if(a){continue}break}q[i>>2]=0;break c}b=q[14675];if(b>>>0>=g>>>0){a=q[14678];c=b-g|0;v:{if(c>>>0>=16){q[14675]=c;d=a+g|0;q[14678]=d;q[d+4>>2]=c|1;q[a+b>>2]=c;q[a+4>>2]=g|3;break v}q[14678]=0;q[14675]=0;q[a+4>>2]=b|3;b=a+b|0;q[b+4>>2]=q[b+4>>2]|1}a=a+8|0;break a}c=q[14676];if(c>>>0>g>>>0){b=c-g|0;q[14676]=b;a=q[14679];c=a+g|0;q[14679]=c;q[c+4>>2]=b|1;q[a+4>>2]=g|3;a=a+8|0;break a}a=0;f=g+47|0;d=f;if(q[14791]){b=q[14793]}else{q[14794]=-1;q[14795]=-1;q[14792]=4096;q[14793]=4096;q[14791]=m+12&-16^1431655768;q[14796]=0;q[14784]=0;b=4096}i=d+b|0;j=0-b|0;d=i&j;if(d>>>0<=g>>>0){break a}e=q[14783];if(e){h=q[14781];b=h+d|0;if(b>>>0<=h>>>0|b>>>0>e>>>0){break a}}if(r[59136]&4){break f}w:{e=q[14679];if(e){k=g+48|0;a=59140;while(1){b=q[a>>2];if(e>>>0>=b>>>0){h=q[a+4>>2];if(e>>>0>>0){break w}}a=q[a+8>>2];if(a){continue}break}}a=Jg();x:{c=q[14650];if(c>>>0<=a<<16>>>0){break x}if(L(c|0)|0){break x}q[14656]=48;break g}q[14650]=c;if((c|0)==-1){break g}i=d;a=q[14792];b=a-1|0;if(b&c){i=(d-c|0)+(b+c&0-a)|0}if(i>>>0>2147483646|g>>>0>=i>>>0){break g}b=q[14783];if(b){e=q[14781];a=e+i|0;if(a>>>0<=e>>>0|a>>>0>b>>>0){break g}}b=i+3&-4;a=b+c|0;y:{if(a>>>0<=c>>>0?(b|0)>=1:0){break y}if(a>>>0>Jg()<<16>>>0){if(!(L(a|0)|0)){break y}}q[14650]=a;break e}q[14656]=48;if((c|0)!=-1){break g}break e}i=j&i-c;if(i>>>0>2147483646){break g}c=q[14650];j=i+3&-4;e=c+j|0;if(c>>>0>=e>>>0?(j|0)>=1:0){break i}if(e>>>0>Jg()<<16>>>0){if(!(L(e|0)|0)){break i}h=q[a+4>>2];b=q[a>>2]}q[14650]=e;if((b+h|0)==(c|0)){if((c|0)==-1){break g}break e}if(!((c|0)==-1|i>>>0>=k>>>0)){a=q[14793];e=a+(f-i|0)&0-a;if(e>>>0>2147483646){break e}b=q[14650];f=e+3&-4;a=b+f|0;z:{if((f|0)<1|a>>>0>b>>>0){if(Jg()<<16>>>0>=a>>>0){break z}if(L(a|0)|0){break z}a=q[14650]}else{a=b}q[14656]=48;break h}q[14650]=a;if((b|0)==-1){break h}i=e+i|0;break e}if((c|0)!=-1){break e}break g}G()}e=0;break b}d=0;break c}q[14656]=48;break g}c=3-i&-4;b=c+a|0;A:{if(a>>>0>=b>>>0?(c|0)>=1:0){break A}if(b>>>0>Jg()<<16>>>0){if(!(L(b|0)|0)){break A}}q[14650]=b;break g}q[14656]=48}q[14784]=q[14784]|4}if(d>>>0>2147483646){break d}c=q[14650];b=d+3&-4;a=c+b|0;B:{C:{if((b|0)<1|a>>>0>c>>>0){if(Jg()<<16>>>0>=a>>>0){break C}if(L(a|0)|0){break C}a=q[14650]}else{a=c}q[14656]=48;c=-1;break B}q[14650]=a}if(Jg()<<16>>>0>>0){if(!(L(a|0)|0)){break d}}q[14650]=a;if((c|0)==-1|a>>>0<=c>>>0|(a|0)==-1){break d}i=a-c|0;if(i>>>0<=g+40>>>0){break d}}a=q[14781]+i|0;q[14781]=a;if(a>>>0>t[14782]){q[14782]=a}D:{E:{F:{f=q[14679];if(f){a=59140;while(1){b=q[a>>2];d=q[a+4>>2];if((b+d|0)==(c|0)){break F}a=q[a+8>>2];if(a){continue}break}break E}a=q[14677];if(!(a>>>0<=c>>>0?a:0)){q[14677]=c}a=0;q[14786]=i;q[14785]=c;q[14681]=-1;q[14682]=q[14791];q[14788]=0;while(1){b=a<<3;d=b+58732|0;q[b+58740>>2]=d;q[b+58744>>2]=d;a=a+1|0;if((a|0)!=32){continue}break}a=i-40|0;b=c+8&7?-8-c&7:0;d=a-b|0;q[14676]=d;b=b+c|0;q[14679]=b;q[b+4>>2]=d|1;q[(a+c|0)+4>>2]=40;q[14680]=q[14795];break D}if(q[a+12>>2]&8|(c>>>0<=f>>>0|b>>>0>f>>>0)){break E}q[a+4>>2]=d+i;a=f+8&7?-8-f&7:0;b=a+f|0;q[14679]=b;c=q[14676]+i|0;a=c-a|0;q[14676]=a;q[b+4>>2]=a|1;q[(c+f|0)+4>>2]=40;q[14680]=q[14795];break D}e=q[14677];if(e>>>0>c>>>0){q[14677]=c;e=0}b=c+i|0;a=59140;G:{H:{I:{J:{K:{L:{while(1){if((b|0)!=q[a>>2]){a=q[a+8>>2];if(a){continue}break L}break}if(!(r[a+12|0]&8)){break K}}a=59140;while(1){b=q[a>>2];if(b>>>0<=f>>>0){d=b+q[a+4>>2]|0;if(d>>>0>f>>>0){break J}}a=q[a+8>>2];continue}}q[a>>2]=c;q[a+4>>2]=q[a+4>>2]+i;j=(c+8&7?-8-c&7:0)+c|0;q[j+4>>2]=g|3;h=b+(b+8&7?-8-b&7:0)|0;d=(h-j|0)-g|0;g=g+j|0;if((f|0)==(h|0)){q[14679]=g;a=q[14676]+d|0;q[14676]=a;q[g+4>>2]=a|1;break H}if(q[14678]==(h|0)){q[14678]=g;a=q[14675]+d|0;q[14675]=a;q[g+4>>2]=a|1;q[a+g>>2]=a;break H}a=q[h+4>>2];if((a&3)==1){f=a&-8;M:{if(a>>>0<=255){c=a>>>3|0;a=q[h+8>>2];b=q[h+12>>2];if((b|0)==(a|0)){n=58692,o=q[14673]&Ag(-2,c),q[n>>2]=o;break M}q[a+12>>2]=b;q[b+8>>2]=a;break M}i=q[h+24>>2];b=q[h+12>>2];N:{if((h|0)!=(b|0)){a=q[h+8>>2];q[a+12>>2]=b;q[b+8>>2]=a;break N}O:{a=h+20|0;c=q[a>>2];if(c){break O}a=h+16|0;c=q[a>>2];if(c){break O}b=0;break N}while(1){e=a;b=c;a=b+20|0;c=q[a>>2];if(c){continue}a=b+16|0;c=q[b+16>>2];if(c){continue}break}q[e>>2]=0}if(!i){break M}a=q[h+28>>2];c=(a<<2)+58996|0;P:{if(q[c>>2]==(h|0)){q[c>>2]=b;if(b){break P}n=58696,o=q[14674]&Ag(-2,a),q[n>>2]=o;break M}q[i+(q[i+16>>2]==(h|0)?16:20)>>2]=b;if(!b){break M}}q[b+24>>2]=i;a=q[h+16>>2];if(a){q[b+16>>2]=a;q[a+24>>2]=b}a=q[h+20>>2];if(!a){break M}q[b+20>>2]=a;q[a+24>>2]=b}h=f+h|0;d=d+f|0}q[h+4>>2]=q[h+4>>2]&-2;q[g+4>>2]=d|1;q[d+g>>2]=d;if(d>>>0<=255){b=d>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=g;q[b+12>>2]=g;q[g+12>>2]=a;q[g+8>>2]=b;break H}a=31;if(d>>>0<=16777215){b=d>>>8|0;a=b+1048320>>>16&8;c=b<>>16&4;e=c<>>16&2;a=(e<>>15|0)-(c|(a|b))|0;a=(a<<1|d>>>a+21&1)+28|0}q[g+28>>2]=a;q[g+16>>2]=0;q[g+20>>2]=0;b=(a<<2)+58996|0;c=q[14674];e=1<>2]=g;q[g+24>>2]=b;break R}a=d<<((a|0)==31?0:25-(a>>>1|0)|0);b=q[b>>2];while(1){c=b;if((q[b+4>>2]&-8)==(d|0)){break I}b=a>>>29|0;a=a<<1;e=c+(b&4)|0;b=q[e+16>>2];if(b){continue}break}q[e+16>>2]=g;q[g+24>>2]=c}q[g+12>>2]=g;q[g+8>>2]=g;break H}a=i-40|0;b=c+8&7?-8-c&7:0;e=a-b|0;q[14676]=e;b=b+c|0;q[14679]=b;q[b+4>>2]=e|1;q[(a+c|0)+4>>2]=40;q[14680]=q[14795];a=(d+(d-39&7?39-d&7:0)|0)-47|0;b=a>>>0>>0?f:a;q[b+4>>2]=27;a=q[14788];q[b+16>>2]=q[14787];q[b+20>>2]=a;a=q[14786];q[b+8>>2]=q[14785];q[b+12>>2]=a;q[14787]=b+8;q[14786]=i;q[14785]=c;q[14788]=0;a=b+24|0;while(1){q[a+4>>2]=7;c=a+8|0;a=a+4|0;if(c>>>0>>0){continue}break}if((b|0)==(f|0)){break D}q[b+4>>2]=q[b+4>>2]&-2;c=b-f|0;q[f+4>>2]=c|1;q[b>>2]=c;if(c>>>0<=255){b=c>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=f;q[b+12>>2]=f;q[f+12>>2]=a;q[f+8>>2]=b;break D}a=31;q[f+16>>2]=0;q[f+20>>2]=0;if(c>>>0<=16777215){b=c>>>8|0;a=b+1048320>>>16&8;d=b<>>16&4;e=d<>>16&2;a=(e<>>15|0)-(d|(a|b))|0;a=(a<<1|c>>>a+21&1)+28|0}q[f+28>>2]=a;b=(a<<2)+58996|0;d=q[14674];e=1<>2]=f;break T}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);d=q[b>>2];while(1){b=d;if((c|0)==(q[b+4>>2]&-8)){break G}d=a>>>29|0;a=a<<1;e=(d&4)+b|0;d=q[e+16>>2];if(d){continue}break}q[e+16>>2]=f}q[f+24>>2]=b;q[f+12>>2]=f;q[f+8>>2]=f;break D}a=q[c+8>>2];q[a+12>>2]=g;q[c+8>>2]=g;q[g+24>>2]=0;q[g+12>>2]=c;q[g+8>>2]=a}a=j+8|0;break a}a=q[b+8>>2];q[a+12>>2]=f;q[b+8>>2]=f;q[f+24>>2]=0;q[f+12>>2]=b;q[f+8>>2]=a}a=q[14676];if(a>>>0<=g>>>0){break d}b=a-g|0;q[14676]=b;a=q[14679];c=a+g|0;q[14679]=c;q[c+4>>2]=b|1;q[a+4>>2]=g|3;a=a+8|0;break a}a=0;q[14656]=48;break a}U:{if(!j){break U}a=q[e+28>>2];b=(a<<2)+58996|0;V:{if(q[b>>2]==(e|0)){q[b>>2]=d;if(d){break V}h=Ag(-2,a)&h;q[14674]=h;break U}q[j+(q[j+16>>2]==(e|0)?16:20)>>2]=d;if(!d){break U}}q[d+24>>2]=j;a=q[e+16>>2];if(a){q[d+16>>2]=a;q[a+24>>2]=d}a=q[e+20>>2];if(!a){break U}q[d+20>>2]=a;q[a+24>>2]=d}W:{if(c>>>0<=15){a=c+g|0;q[e+4>>2]=a|3;a=a+e|0;q[a+4>>2]=q[a+4>>2]|1;break W}q[e+4>>2]=g|3;q[f+4>>2]=c|1;q[c+f>>2]=c;if(c>>>0<=255){b=c>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=f;q[b+12>>2]=f;q[f+12>>2]=a;q[f+8>>2]=b;break W}a=31;if(c>>>0<=16777215){b=c>>>8|0;a=b+1048320>>>16&8;d=b<>>16&4;g=d<>>16&2;a=(g<>>15|0)-(d|(a|b))|0;a=(a<<1|c>>>a+21&1)+28|0}q[f+28>>2]=a;q[f+16>>2]=0;q[f+20>>2]=0;b=(a<<2)+58996|0;Y:{d=1<>2]=f;break Z}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);g=q[b>>2];while(1){b=g;if((q[b+4>>2]&-8)==(c|0)){break Y}d=a>>>29|0;a=a<<1;d=(d&4)+b|0;g=q[d+16>>2];if(g){continue}break}q[d+16>>2]=f}q[f+24>>2]=b;q[f+12>>2]=f;q[f+8>>2]=f;break W}a=q[b+8>>2];q[a+12>>2]=f;q[b+8>>2]=f;q[f+24>>2]=0;q[f+12>>2]=b;q[f+8>>2]=a}a=e+8|0;break a}_:{if(!j){break _}a=q[d+28>>2];b=(a<<2)+58996|0;$:{if(q[b>>2]==(d|0)){q[b>>2]=e;if(e){break $}n=58696,o=Ag(-2,a)&k,q[n>>2]=o;break _}q[j+(q[j+16>>2]==(d|0)?16:20)>>2]=e;if(!e){break _}}q[e+24>>2]=j;a=q[d+16>>2];if(a){q[e+16>>2]=a;q[a+24>>2]=e}a=q[d+20>>2];if(!a){break _}q[e+20>>2]=a;q[a+24>>2]=e}aa:{if(c>>>0<=15){a=c+g|0;q[d+4>>2]=a|3;a=a+d|0;q[a+4>>2]=q[a+4>>2]|1;break aa}q[d+4>>2]=g|3;q[l+4>>2]=c|1;q[c+l>>2]=c;if(f){b=f>>>3|0;a=(b<<3)+58732|0;e=q[14678];b=1<>2]}q[a+8>>2]=e;q[b+12>>2]=e;q[e+12>>2]=a;q[e+8>>2]=b}q[14678]=l;q[14675]=c}a=d+8|0}ca=m+16|0;return a|0}function Sf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,r=0,t=0,v=0,z=x(0),A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=x(0),L=0,M=0,N=0,O=0,P=0,Q=0,R=x(0),S=x(0),T=x(0),U=x(0),V=0,W=x(0),X=x(0);m=ca-11552|0;ca=m;a:{b:{c:{d:{e:{f:{g:{h:{if(!(!(1<>>0>16)){if((j|0)<=-1){break h}if((j|0)>=3){break g}A=w(k,5);D=A+20|0;n=D<<3;t=w(i,D);i:{if((i|0)==16){if((t|0)>=1){l=t;while(1){r=l-1|0;N=(m+2720|0)+(r<<1)|0;z=zg(u[(r<<2)+a>>2]);j:{if(x(y(z))-32768?v:-32768;p[N>>1]=(v|0)<32767?v:32767;v=(l|0)>1;l=r;if(v){continue}break}}q[m+8544>>2]=0;q[m+8548>>2]=0;Rc(m+8544|0,m+8896|0,m+2720|0,t);if((A|0)<-19){break i}l=n;while(1){t=l-1|0;u[(m+10176|0)+(t<<2)>>2]=p[(m+8896|0)+(t<<1)>>1];r=(l|0)>1;l=t;if(r){continue}break}break i}if((i|0)==12){if((t|0)>=1){l=t;while(1){r=l-1|0;N=(m+2720|0)+(r<<1)|0;z=zg(u[(r<<2)+a>>2]);k:{if(x(y(z))-32768?v:-32768;p[N>>1]=(v|0)<32767?v:32767;v=(l|0)>1;l=r;if(v){continue}break}}l=m+8560|0;q[l>>2]=0;q[l+4>>2]=0;q[m+8552>>2]=0;q[m+8556>>2]=0;q[m+8544>>2]=0;q[m+8548>>2]=0;Uf(m+8544|0,m+8896|0,m+2720|0,t);if((A|0)<-19){break i}l=n;while(1){t=l-1|0;u[(m+10176|0)+(t<<2)>>2]=p[(m+8896|0)+(t<<1)>>1];r=(l|0)>1;l=t;if(r){continue}break}break i}if((i|0)!=8){break f}if((A|0)<-19){break i}l=n;while(1){t=l-1|0;v=(m+8896|0)+(t<<1)|0;z=zg(u[(t<<2)+a>>2]);l:{if(x(y(z))-32768?r:-32768;p[v>>1]=(r|0)<32767?r:32767;r=(l|0)>1;l=t;if(r){continue}break}}t=D<<2;q[m+8544>>2]=0;q[m+8548>>2]=0;Rc(m+8544|0,m+8576|0,m+8896|0,n);m:{if((A|0)<-19){break m}l=t;while(1){n=l-1|0;u[(m+9536|0)+(n<<2)>>2]=p[(m+8576|0)+(n<<1)>>1];r=(l|0)>1;l=n;if(r){continue}break}if((A|0)<-19){break m}l=t;while(1){K=u[((l<<2)+m|0)+9528>>2];n=l-1|0;r=(m+9536|0)+(n<<2)|0;z=u[r>>2];n:{if(x(y(z))x(32767)){break o}z=x(-32768);if(K>2]=A|0;r=(l|0)>2;l=n;if(r){continue}break}}r=0;la(m+6160|0,0,w(k,596));if((k|0)>=2){l=k>>1;D=(l|0)>1?l:1;v=(m+9536|0)+(t<<2)|0;l=m+9856|0;while(1){t=l+160|0;if(t>>>0>v>>>0){break e}n=l-32|0;if(n>>>0>>0){break d}if(v>>>0>>0){break c}lb(l,l-288|0,m+5888|0,40,65);z=u[m+6144>>2];F=ta(l,40)+ta(n,40)+16e4;B=+z;u[m+6192>>2]=u[m+6192>>2]+x((B+B)/F);l=9;while(1){A=(m+6160|0)+(l<<2)|0;N=A;z=u[A>>2];B=+u[((0-l<<2)+m|0)+6176>>2];V=B+B;A=n-4|0;B=+u[A>>2];O=B*B;B=+u[n+156>>2];F=F+(O-B*B);u[N>>2]=z+x(V/F);n=A;l=l+1|0;if((l|0)!=73){continue}break}l=t;r=r+1|0;if((D|0)!=(r|0)){continue}break}}A=i<<1;P=w(i,5);L=w(i,18);E=L-1|0;t=k<<2;l=72;while(1){n=(m+6160|0)+(l<<2)|0;z=u[n>>2];u[n>>2]=z+x(x(z*x(l|0))*x(-.000244140625));n=l>>>0>8;l=l-1|0;if(n){continue}break}n=(j<<1)+4|0;Tf(m+6192|0,m+5744|0,n);q:{z=u[m+6192>>2];r:{if(!(z1?n:1;l=0;while(1){r=l<<2;if(g>2]^1){n=l;break s}r=r+(m+5744|0)|0;q[r>>2]=(q[r>>2]<<1)+16;l=l+1|0;if((t|0)!=(l|0)){continue}break}}l=0;if((n|0)<=0){break b}la(m+5462|0,0,274);while(1){p[(m+5440|0)+(q[(m+5744|0)+(l<<2)>>2]<<1)>>1]=1;l=l+1|0;if((n|0)!=(l|0)){continue}break}l=146;t=s[m+5730>>1];while(1){n=t;r=(m+5440|0)+(l<<1)|0;t=s[r-4>>1];p[r>>1]=s[r>>1]+(n+t|0);n=16;r=l>>>0>16;l=l-1|0;if(r){continue}break}D=0;while(1){l=n+1|0;if(p[(m+5440|0)+(l<<1)>>1]>=1){q[(m+5744|0)+(D<<2)>>2]=n;D=D+1|0}n=l;if((l|0)!=144){continue}break}n=146;t=s[m+5728>>1];r=s[m+5730>>1];while(1){l=r;r=t;v=(m+5440|0)+(n<<1)|0;t=s[v-6>>1];p[v>>1]=s[v>>1]+((l+r|0)+t|0);l=16;v=n>>>0>16;n=n-1|0;if(v){continue}break}t=0;while(1){if(p[(m+5440|0)+(l<<1)>>1]>=1){p[(m+5440|0)+(t<<1)>>1]=l-2;t=t+1|0}l=l+1|0;if((l|0)!=147){continue}break}r=0;la(m+6160|0,0,2384);if((k|0)>=1){n=(i|0)==8?a+640|0:m+10816|0;v=(t|0)<1;while(1){B=ta(n,40);if(!v){O=B+1;l=0;while(1){z=x(0);C=p[(m+5440|0)+(l<<1)>>1]<<2;H=n-C|0;B=Wa(H,n,40);if(!(B>0^1)){z=x((B+B)/(O+ta(H,40)))}u[C+((m+6160|0)+w(r,596)|0)>>2]=z;l=l+1|0;if((t|0)!=(l|0)){continue}break}}n=n+160|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}}if((f|0)<1){S=x(0)}else{f=(i|0)==12?(f<<1)/3|0:f>>>((i|0)==16)|0;S=x(db(+x(f|0))*3.32192809488736)}if((D|0)>=1){v=0;l=(k|0)==4;r=l?(i|0)==8?(j|0)>0?11:3:3:3;I=l?9008:8969;Q=l?11:3;R=x(k|0);W=x(R*h);T=x(R*x(.20000000298023224));C=-1;h=x(-1e3);K=x(0);M=(k|0)<1;J=(f|0)<1;f=0;while(1){t=q[(m+5744|0)+(v<<2)>>2];n=0;while(1){H=(m+5840|0)+(n<<2)|0;q[H>>2]=0;z=x(0);l=0;if(!M){while(1){z=x(u[((m+6160|0)+w(l,596)|0)+(t+o[I+(w(l,Q)+n|0)|0]<<2)>>2]+z);l=l+1|0;if((l|0)!=(k|0)){continue}break}u[H>>2]=z}n=n+1|0;if((r|0)!=(n|0)){continue}break}z=x(-1e3);l=0;n=0;while(1){g=u[(m+5840|0)+(l<<2)>>2];H=g>z;z=H?g:z;n=H?l:n;l=l+1|0;if((r|0)!=(l|0)){continue}break}U=x(db(+x(t|0))*3.32192809488736);g=x(z-x(T*U));if(!J){X=g;g=x(U-S);g=x(g*g);g=x(X-x(x(g*x(T*u[e>>2]))/x(g+x(.5))))}if(!(z>W^1|g>h^1)){C=t;h=g;K=z;f=n}v=v+1|0;if((D|0)!=(v|0)){continue}break}if((C|0)!=-1){break q}}q[b>>2]=0;q[b+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0}q[e>>2]=0;p[c>>1]=0;o[d|0]=0;l=1;break a}u[e>>2]=K/R;N=c;t:{if((i|0)<=8){l=0;if((k|0)>0){while(1){a=o[I+(w(l,Q)+f|0)|0]+C|0;a=(a|0)>16?a:16;q[(l<<2)+b>>2]=(a|0)<144?a:144;l=l+1|0;if((l|0)!=(k|0)){continue}break}}a=C-16|0;break t}u:{if((i|0)==12){e=w(C<<16>>16,3);f=(e>>1)+(e&1)|0;break u}f=C<<1}v:{if((A|0)>=(L|0)){e=A;if((f|0)>(A|0)){break v}e=(f|0)<(E|0)?E:f;break v}e=E;if((f|0)>=(L|0)){break v}e=(f|0)<(A|0)?A:f}I=8976;f=9e3;t=12;C=12;w:{switch(k-2|0){default:ja(37111,36670,518);G();case 2:f=(j<<3)+9200|0;t=o[j+9224|0];I=9056;C=34;break;case 0:break w}}l=e+2|0;Q=(l|0)<(E|0)?l:E;l=e-2|0;D=(l|0)>(A|0)?l:A;M=0-D<<2;i=w(i,80)+a|0;v=i;r=0;while(1){a=r<<1;E=o[(a|1)+f|0];a=o[a+f|0];l=1-a|0;lb(v,(v+M|0)-(E<<2)|0,m+2720|0,P,l+E|0);n=(a|0)>(E|0);if(!n){J=l+(n?a:E)|0;l=0;n=a;while(1){u[(m+11456|0)+(l<<2)>>2]=u[(m+2720|0)+(E-n<<2)>>2];n=n+1|0;l=l+1|0;if((J|0)!=(l|0)){continue}break}}if((t|0)>=1){E=w(r,C);J=(m+11456|0)+(0-a<<2)|0;l=0;while(1){n=J+(o[(l+E|0)+I|0]<<2)|0;H=q[n+4>>2];a=(w(r,680)+m|0)+w(l,20)|0;q[a>>2]=q[n>>2];q[a+4>>2]=H;q[a+16>>2]=q[n+16>>2];H=q[n+12>>2];q[a+8>>2]=q[n+8>>2];q[a+12>>2]=H;l=l+1|0;if((t|0)!=(l|0)){continue}break}}v=(P<<2)+v|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}I=8976;a=9e3;t=12;n=12;x:{switch(k-2|0){default:ja(37111,36670,584);G();case 2:a=(j<<3)+9200|0;t=o[j+9224|0];I=9056;n=34;break;case 0:break x}}v=i;r=0;while(1){l=r<<1;f=o[l+a|0];C=v-(f+D<<2)|0;F=ta(C,P)+.001;u[m+11456>>2]=F;E=o[(l|1)+a|0];if((E|0)>(f|0)){l=1;E=(E-f|0)+1|0;while(1){B=+u[C+(P-l<<2)>>2];O=F-B*B;M=l<<2;B=+u[C-M>>2];F=O+B*B;u[M+(m+11456|0)>>2]=F;l=l+1|0;if((E|0)!=(l|0)){continue}break}}if((t|0)>=1){E=w(n,r);M=(m+11456|0)+(0-f<<2)|0;l=0;while(1){C=M+(o[(l+E|0)+I|0]<<2)|0;J=q[C+4>>2];f=((m+2720|0)+w(r,680)|0)+w(l,20)|0;q[f>>2]=q[C>>2];q[f+4>>2]=J;q[f+16>>2]=q[C+16>>2];J=q[C+12>>2];q[f+8>>2]=q[C+8>>2];q[f+12>>2]=J;l=l+1|0;if((t|0)!=(l|0)){continue}break}}v=(P<<2)+v|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}y:{if((k|0)!=4){I=8976;v=12;a=12;break y}I=9056;v=34;a=o[j+9224|0]}B=ta(i,w(k,P));f=0;if((D|0)<=(Q|0)){h=x(x(.05000000074505806)/x(e|0));O=B+1;i=(Q-D|0)+1|0;g=x(-1e3);r=0;while(1){t=0;if((a|0)>0){while(1){z=x(0);z:{if((k|0)<1){break z}F=0;l=0;B=O;while(1){C=r<<2;n=w(t,20);j=w(l,680);B=B+ +u[C+(n+(j+(m+2720|0)|0)|0)>>2];F=F+ +u[C+(n+(j+m|0)|0)>>2];l=l+1|0;if((l|0)!=(k|0)){continue}break}if(F>0^1){break z}z=x(x(x(1)-x(h*x(t|0)))*x((F+F)/B))}if(!(g=(L|0))){f=t;g=z;e=D}t=t+1|0;if((a|0)!=(t|0)){continue}break}}D=D+1|0;r=r+1|0;if((i|0)!=(r|0)){continue}break}}if((k|0)>=1){l=0;while(1){a=(l<<2)+b|0;j=o[(w(l,v)+f|0)+I|0]+e|0;q[a>>2]=j;t=a;A:{if((A|0)>(L|0)){a=A;i=a;if((a|0)<(j|0)){break A}i=(j|0)<(L|0)?L:j;break A}a=L;i=a;if((a|0)<(j|0)){break A}i=(j|0)<(A|0)?A:j}q[t>>2]=i;l=l+1|0;if((l|0)!=(k|0)){continue}break}}a=e-A|0}p[N>>1]=a;o[d|0]=f;l=0;if(p[c>>1]>-1){break a}ja(37078,36670,474);G()}ja(36608,36670,112);G()}ja(36707,36670,115);G()}ja(36759,36670,116);G()}ja(36811,36670,151);G()}ja(36841,36670,173);G()}ja(36921,36670,178);G()}ja(36963,36670,179);G()}ja(37042,36670,241);G()}ca=m+11552|0;return l}function Bf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,t){var u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;u=ca;_=u;q[b+4340>>2]=o[c+34|0];Q=q[b+4328>>2];R=r[c+31|0];E=o[c+29|0];H=o[c+30|0];A=q[a+4592>>2];x=q[a+4584>>2];u=A+x|0;N=_-((u<<2)+15&-16)|0;ca=N;U=N-((u<<1)+15&-16)|0;u=U;ca=u;v=q[a+4588>>2];V=u-((v<<2)+15&-16)|0;ca=V;q[b+4332>>2]=A;q[b+4336>>2]=A;a:{b:{c:{u=q[a+4580>>2];if((u|0)>=1){O=n<<16>>16;H=p[((E<<1&-4)+6416|0)+(H<<1)>>1];W=H+944|0;$=w(O,W<<16>>16);sa=w(61865984-(H<<16)>>16,O);aa=(R|0)==4;ta=aa?3:1;ua=H-80|0;va=H-944|0;wa=b+3900|0;u=n>>>1|0;xa=512-u|0;X=u-512|0;ba=t<<16>>16;Y=(A<<1)+b|0;R=w(H,O);ya=(n|0)<2049;F=b+3840|0;ea=F;while(1){A=J<<2;L=q[A+i>>2];q[b+4348>>2]=0;y=1;D=((J>>>1|aa)<<5)+f|0;d:{if((E&255)!=2){break d}E=2;Q=q[(J<<2)+m>>2];if(J&ta){break d}t=q[a+4592>>2];u=q[a+4640>>2];n=(t-Q|0)-u|0;if((n|0)<=2){break c}n=n-2|0;ib((n<<1)+U|0,(n+w(v,J)<<1)+b|0,D,t-n|0,u);q[b+4348>>2]=1;q[b+4332>>2]=q[a+4592>>2];E=r[c+29|0];y=0}K=l+A|0;t=q[K>>2];x=(t|0)>1?t:1;u=z(x);v=x<>16;C=536870911/(B|0)|0;I=C<<16;n=I>>16;v=0-(w(n,B)+(w(n,v&65535)>>16)<<3)|0;n=((I+w(v,(C>>15)+1>>1)|0)+w(n,v>>16)|0)+(w(n,v&65528)>>16)|0;C=q[m+A>>2];e:{if(x>>>0<=131071){u=u-15|0;x=2147483647>>>u|0;v=-2147483648>>u;n=((n|0)>(x|0)?x:(n|0)<(v|0)?v:n)<>15-u}B=q[a+4588>>2];if((B|0)>=1){x=(n>>4)+1|0;u=x<<15>>16;x=(x>>16)+1>>1;v=0;while(1){I=s[(v<<1)+d>>1];P=I<<16;q[(v<<2)+V>>2]=(w(u,P>>31)+w(x,P>>16)|0)+(w(u,I)>>16);v=v+1|0;if((B|0)!=(v|0)){continue}break}}f:{if(y){break f}n=J?n:w(n>>16,ba)+(w(n&65535,ba)>>16)<<2;u=q[b+4332>>2];v=(u-C|0)-2|0;if((v|0)>=(u|0)){break f}x=n&65535;n=n>>16;while(1){y=p[(v<<1)+U>>1];q[(v<<2)+N>>2]=(w(y,x)>>16)+w(n,y);v=v+1|0;if((u|0)!=(v|0)){continue}break}}n=q[b+4344>>2];if((n|0)!=(t|0)){u=n;n=n>>31;x=z(u+n^n);u=u<>31;y=z(n+t^n);t=t<>16)<<16>>16;u=(w(n,u&65535)>>16)+w(n,u>>16)|0;t=yg(u,u>>31,t,t>>31);t=S-(((da&536870911)<<3|t>>>29)&-8)|0;n=(w(t>>16,n)+u|0)+(w(n,t&65535)>>16)|0;t=(x-y|0)+29|0;g:{if((t|0)<=15){t=16-t|0;u=2147483647>>>t|0;x=-2147483648>>t;n=((n|0)>(u|0)?u:(n|0)<(x|0)?x:n)<>t-16:0}t=q[a+4592>>2];if((t|0)>=1){u=n&65535;x=n>>16;v=q[b+4336>>2]-t|0;while(1){y=((v<<2)+b|0)+1280|0;B=q[y>>2];t=B<<16>>16;q[y>>2]=(w(t,x)+(w(t,u)>>16)|0)+w(n,(B>>15)+1>>1);v=v+1|0;if((v|0)>2]){continue}break}}h:{if(q[b+4348>>2]|(E&255)!=2){break h}t=q[b+4332>>2];v=(t-C|0)-2|0;if((v|0)>=(t|0)){break h}x=n&65535;y=n>>16;while(1){B=(v<<2)+N|0;C=q[B>>2];u=C<<16>>16;q[B>>2]=(w(u,y)+(w(u,x)>>16)|0)+w(n,(C>>15)+1>>1);v=v+1|0;if((t|0)!=(v|0)){continue}break}}u=q[b+4320>>2];x=u<<16>>16;t=n&65535;y=w(x,t)>>16;S=x;x=n>>16;q[b+4320>>2]=(y+w(S,x)|0)+w(n,(u>>15)+1>>1);u=q[b+4324>>2];y=u<<16>>16;q[b+4324>>2]=((w(y,t)>>16)+w(x,y)|0)+w(n,(u>>15)+1>>1);v=0;u=0;while(1){B=((u<<2)+b|0)+3840|0;C=q[B>>2];y=C<<16>>16;q[B>>2]=(w(x,y)+(w(t,y)>>16)|0)+w(n,(C>>15)+1>>1);u=u+1|0;if((u|0)!=16){continue}break}while(1){y=((v<<2)+b|0)+4224|0;B=q[y>>2];u=B<<16>>16;q[y>>2]=(w(u,x)+(w(t,u)>>16)|0)+w(n,(B>>15)+1>>1);v=v+1|0;if((v|0)!=24){continue}break}q[b+4344>>2]=q[K>>2];B=q[a+4588>>2];t=q[K>>2]}if((B|0)>=1){K=w(J,10)+g|0;C=0;fa=(E&255)!=2;za=fa|(Q|0)>0;n=L>>2;ga=(n|L<<15)>>16;u=q[k+A>>2];ha=u>>16;I=q[a+4636>>2];Aa=I>>1;Ba=I&1;ia=q[a+4640>>2];Ca=ia>>1;ka=t<<10>>16;la=n<<16>>16;ma=u<<16>>16;Da=(t>>21)+1>>1;T=w(J,48)+h|0;n=I-1|0;Ea=T+(n<<1)|0;S=((n<<2)+b|0)+4224|0;L=((q[b+4336>>2]-Q<<2)+b|0)+1284|0;E=((q[b+4332>>2]-Q<<2)+N|0)+8|0;na=p[j+A>>1];v=q[b+4340>>2];y=wa;while(1){q[b+4340>>2]=w(v,196314165)+907633515;t=p[D>>1];n=q[y>>2];u=(w(t,n>>16)+Ca|0)+(w(t,n&65535)>>16)|0;t=p[D+2>>1];n=q[y-4>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+4>>1];n=q[y-8>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+6>>1];n=q[y-12>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+8>>1];n=q[y-16>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+10>>1];n=q[y-20>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+12>>1];n=q[y-24>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+14>>1];n=q[y-28>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+16>>1];n=q[y-32>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+18>>1];n=q[y-36>>2];P=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;if((ia|0)==16){t=p[D+20>>1];n=q[y-40>>2];u=(w(t,n>>16)+P|0)+(w(t,n&65535)>>16)|0;t=p[D+22>>1];n=q[y-44>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+24>>1];n=q[y-48>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+26>>1];n=q[y-52>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+28>>1];n=q[y-56>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+30>>1];n=q[y-60>>2];P=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0}Z=0;if(!fa){t=p[K>>1];n=q[E>>2];u=w(t,n>>16)+(w(t,n&65535)>>16)|0;t=p[K+2>>1];n=q[E-4>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+4>>1];n=q[E-8>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+6>>1];n=q[E-12>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+8>>1];n=q[E-16>>2];Z=((u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0)+2|0;E=E+4|0}if(Ba){break b}u=q[b+4224>>2];n=q[b+4324>>2];q[b+4224>>2]=n;t=p[T>>1];x=(w(t,n>>16)+Aa|0)+(w(t,n&65535)>>16)|0;v=2;if((I|0)>=3){while(1){n=b+4224|0;A=v-1|0;M=n+(A<<2)|0;t=q[M>>2];q[M>>2]=u;M=n+(v<<2)|0;n=q[M>>2];A=p[(A<<1)+T>>1];q[M>>2]=t;x=(w(A,u>>16)+x|0)+(w(A,u&65535)>>16)|0;u=p[(v<<1)+T>>1];x=(x+w(u,t>>16)|0)+(w(u,t&65535)>>16)|0;u=n;v=v+2|0;if((I|0)>(v|0)){continue}break}}q[S>>2]=u;if(!za){break a}n=q[b+4320>>2];t=n&65535;n=n>>16;A=p[Ea>>1];M=((w(t,na)>>16)+w(n,na)|0)+((w(A,u>>16)+x|0)+(w(A,u&65535)>>16)<<1)|0;t=w(n,ha)+(w(t,ha)>>16)|0;n=q[((q[b+4336>>2]<<2)+b|0)+1276>>2];oa=(t+w(n>>16,ma)|0)+(w(n&65535,ma)>>16)|0;n=((P<<2)-M|0)-oa|0;i:{if((Q|0)>=1){u=n;n=q[L-8>>2]+q[L>>2]|0;t=q[L-4>>2];v=((u-(w(n&65535,la)>>16)|0)-(w(t&65535,ga)>>16)-(w(t>>16,ga)+w(n>>16,la))<<1)+Z>>2;L=L+4|0;break i}v=n>>1}j:{k:{l:{m:{pa=q[(C<<2)+V>>2];n=pa-(v+1>>1)|0;n=q[b+4340>>2]<0?0-n|0:n;n=(n|0)>-31744?n:-31744;v=(n|0)<30720?n:30720;t=v-H|0;n=t;n:{if(ya){break n}n=t-X|0;if((t|0)>(X|0)){break n}if((t|0)>=(xa|0)){break m}n=t+X|0}t=n;if((t|0)>=1024){u=(t&-1024)+ua|0;x=w(u<<16>>16,O);A=u+1024|0;n=w(A<<16>>16,O);break j}u=H;A=W;x=R;n=$;switch((t>>10)+1|0){case 1:break j;case 0:break l;default:break k}}u=H;A=W;x=R;n=$;if((t|0)>=0){break j}}u=va;A=H;x=sa;n=R;break j}u=H+(t&-1024|80)|0;A=u+1024|0;t=u<<16;n=w(-67108864-t>>16,O);x=w(0-t>>16,O)}qa=e+C|0;t=n;n=v-A<<16>>16;t=t+w(n,n)|0;n=v-u<<16>>16;n=(t|0)<(w(n,n)+x|0)?A:u;o[qa|0]=(n>>>9|0)+1>>>1;n=n<<4;u=(Z<<1)+(q[b+4340>>2]<0?0-n|0:n)|0;n=u+(P<<4)|0;t=(w(n>>16,ka)+w(n,Da)|0)+(w(n&65534,ka)>>16)|0;p[(C<<1)+Y>>1]=(t|0)>8388479?32767:(t|0)<-8388736?-32768:(t>>>7|0)+1>>>1|0;q[y+4>>2]=n;n=n-(pa<<4)|0;t=n-(M<<2)|0;q[b+4320>>2]=t;q[b+4324>>2]=n;q[((q[b+4336>>2]<<2)+b|0)+1280>>2]=t-(oa<<2);n=q[b+4332>>2];q[(n<<2)+N>>2]=u<<1;q[b+4332>>2]=n+1;q[b+4336>>2]=q[b+4336>>2]+1;v=q[b+4340>>2]+o[qa|0]|0;q[b+4340>>2]=v;y=y+4|0;C=C+1|0;if((C|0)!=(B|0)){continue}break}}n=(B<<2)+b|0;t=n+3896|0;u=q[t+4>>2];q[ea+56>>2]=q[t>>2];q[ea+60>>2]=u;t=n+3888|0;u=q[t+4>>2];q[F+48>>2]=q[t>>2];q[F+52>>2]=u;t=n+3880|0;u=q[t+4>>2];q[F+40>>2]=q[t>>2];q[F+44>>2]=u;t=n+3872|0;u=q[t+4>>2];q[F+32>>2]=q[t>>2];q[F+36>>2]=u;t=n+3864|0;u=q[t+4>>2];q[F+24>>2]=q[t>>2];q[F+28>>2]=u;t=n+3856|0;u=q[t+4>>2];q[F+16>>2]=q[t>>2];q[F+20>>2]=u;t=n+3848|0;u=q[t+4>>2];q[F+8>>2]=q[t>>2];q[F+12>>2]=u;n=n+3840|0;t=q[n+4>>2];q[F>>2]=q[n>>2];q[F+4>>2]=t;u=q[a+4580>>2];J=J+1|0;if((u|0)>(J|0)){v=q[a+4588>>2];e=v+e|0;n=v<<1;d=n+d|0;Y=n+Y|0;E=r[c+29|0];continue}break}x=q[a+4584>>2];A=q[a+4592>>2]}q[b+4328>>2]=q[((u<<2)+m|0)-4>>2];b=ra(b,(x<<1)+b|0,A<<1)+1280|0;ra(b,b+(q[a+4584>>2]<<2)|0,q[a+4592>>2]<<2);ca=_;return}ja(37992,38024,146);G()}ja(38035,38024,250);G()}ja(38082,38024,258);G()}function Gc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;v=ca-32|0;x=v;ca=v;if(q[b+68>>2]){q[a+14728>>2]=1;q[a+4664>>2]=1}q[a+5748>>2]=0;q[a+15812>>2]=0;if(!bg(b)){Q=a+10064|0;q[b+88>>2]=0;a:{if(q[b+4>>2]<=q[a+20196>>2]){break a}t=hb(Q,q[a+5092>>2]);q[a+20144>>2]=1;q[a+20148>>2]=0;q[a+20136>>2]=0;q[a+20140>>2]=0;q[a+20128>>2]=0;q[a+20152>>2]=1;q[a+20156>>2]=16384;if(q[a+20192>>2]!=2){break a}ka(a+15840|0,a+5776|0,300);i=q[a+4>>2];q[a+10064>>2]=q[a>>2];q[a+10068>>2]=i}C=q[b+24>>2];b:{if((C|0)!=q[a+4612>>2]){j=q[b+4>>2];i=1;break b}j=q[b+4>>2];i=(j|0)!=q[a+20196>>2]}k=q[b>>2];q[a+20196>>2]=j;q[a+20192>>2]=k;m=w(d,100);k=q[b+8>>2];n=(m|0)/(k|0)|0;c:{d:{e:{f:{if(g){if((n|0)!=1){break c}if((g|0)==2){k=q[a+28>>2];q[x+24>>2]=q[a+24>>2];q[x+28>>2]=k;k=q[a+20>>2];q[x+16>>2]=q[a+16>>2];q[x+20>>2]=k;y=q[a+4576>>2]}g:{if((j|0)>0){m=(g|0)!=2;break g}q[b+24>>2]=10;R=q[b+36>>2];q[b+36>>2]=0;break f}h:{while(1){k=w(l,10064)+a|0;J=hb(k,q[k+5092>>2]);if(!m){j=q[x+20>>2];q[k+16>>2]=q[x+16>>2];q[k+20>>2]=j;j=q[x+28>>2];q[k+24>>2]=q[x+24>>2];q[k+28>>2]=j;q[k+32>>2]=y}if(!J){j=q[b+4>>2];l=l+1|0;if((j|0)<=(l|0)){break h}continue}break}ja(39202,39187,222);G()}C=q[b+24>>2];q[b+24>>2]=10;R=q[b+36>>2];t=0;q[b+36>>2]=0;if((j|0)<1){break f}while(1){k=w(t,10064)+a|0;q[k+4680>>2]=1;q[k+4668>>2]=0;t=t+1|0;if((t|0)!=(j|0)){continue}break}t=0;break f}if((m|0)!=(w(k,n)|0)|(d|0)<0){break d}k=w(k,C);C=0;if((k|0)<(w(d,1e3)|0)){break e}}i:{j:{k:{l:{if((j|0)<1){break l}u=i^-1;i=0;while(1){j=0;l=w(i,10064)+a|0;t=$f(l,b,q[a+20208>>2],i,(i|0)==1?q[a+4576>>2]:0);if(t){break j}if(!(u&!q[l+4664>>2]|q[a+5744>>2]<1)){while(1){q[(l+(j<<2)|0)+4724>>2]=0;j=j+1|0;if((j|0)>2]){continue}break}}q[l+6080>>2]=q[l+6076>>2];i=i+1|0;k=q[b+4>>2];if((i|0)<(k|0)){continue}break}t=0;if((k|0)!=1){break l}j=q[a+4576>>2];break k}j=q[a+4576>>2];if((j|0)!=q[a+14640>>2]){break i}}H=(n|0)>1?n>>1:1;V=H<<1;W=H-1|0;X=a+10212|0;J=a+17232|0;S=a+14784|0;Y=a+15164|0;Z=a+5100|0;_=a+20128|0;D=a+20180|0;$=a+14788|0;K=a+20162|0;L=a+15160|0;M=a+15840|0;E=a+5096|0;I=a+5776|0;T=w(n,10);N=w(T,j);A=v-(((w(N,q[a+4556>>2])|0)/(w(j,1e3)|0)<<1)+15&-16)|0;ca=A;m:{while(1){i=q[a+5740>>2];k=q[a+4584>>2]-i|0;k=(k|0)<(N|0)?k:N;v=(w(k,q[a+4556>>2])|0)/(w(q[a+4576>>2],1e3)|0)|0;n:{o:{p:{q:{r:{s:{t:{switch(q[b>>2]-1|0){case 1:u:{switch(q[b+4>>2]-1|0){case 1:m=q[a+5748>>2];j=0;l=(v|0)<1;if(!l){while(1){p[(j<<1)+A>>1]=s[(j<<2)+c>>1];j=j+1|0;if((v|0)!=(j|0)){continue}break}}if(!(q[a+20200>>2]!=1|m)){ka(M,I,300)}i=Aa(I,((i<<1)+E|0)+4|0,A,v);q[a+5740>>2]=k+q[a+5740>>2];k=q[a+15804>>2];m=q[a+14648>>2]-k|0;n=w(q[a+14640>>2],T);m=(m|0)<(n|0)?m:n;j=0;if(!l){while(1){p[(j<<1)+A>>1]=s[(j<<2|2)+c>>1];j=j+1|0;if((v|0)!=(j|0)){continue}break}}k=Aa(M,((k<<1)+L|0)+4|0,A,v);q[a+15804>>2]=m+q[a+15804>>2];t=k+(i+t|0)|0;j=q[a+5740>>2];break s;case 0:break u;default:break r}}j=0;if((v|0)>=1){while(1){m=j<<2;m=p[(m|2)+c>>1]+p[c+m>>1]|0;p[(j<<1)+A>>1]=(m>>>1|0)+(m&1);j=j+1|0;if((v|0)!=(j|0)){continue}break}}t=Aa(I,((i<<1)+E|0)+4|0,A,v)+t|0;v:{if(q[a+5748>>2]|q[a+20200>>2]!=2){break v}t=Aa(M,((q[a+15804>>2]<<1)+L|0)+4|0,A,v)+t|0;i=q[a+4584>>2];if((i|0)<1){break v}m=q[a+15804>>2];l=q[a+5740>>2];j=0;while(1){n=j+2|0;u=(n+l<<1)+E|0;p[u>>1]=p[(m+n<<1)+L>>1]+p[u>>1]>>>1;j=j+1|0;if((i|0)!=(j|0)){continue}break}}j=k+q[a+5740>>2]|0;q[a+5740>>2]=j;break s;case 0:break t;default:break r}}if(q[b+4>>2]!=1){break r}i=Aa(I,((i<<1)+E|0)+4|0,ka(A,c,v<<1),v);j=k+q[a+5740>>2]|0;q[a+5740>>2]=j;t=i+t|0}aa=q[b>>2];q[a+20208>>2]=0;k=q[a+4584>>2];i=0;if((k|0)>(j|0)){break m}if((j|0)!=(k|0)){break q}i=q[b+4>>2];if(q[a+15804>>2]!=q[a+14648>>2]?(i|0)!=1:0){break p}if(q[a+5748>>2]|g){break n}u=0;p[x+14>>1]=0;o[x+14|0]=0-(256>>>w(i,q[a+5744>>2]+1|0)|0);ma(e,0,x+14|0,8);n=q[b+4>>2];if((n|0)<=0){break o}while(1){j=0;l=0;k=w(u,10064)+a|0;i=q[k+5744>>2];if((i|0)>=1){while(1){l=q[(k+(j<<2)|0)+4724>>2]<0;if(!(!l|(i|0)<2)){ma(e,l-1|0,q[(i<<2)+6384>>2],8);n=q[b+4>>2]}u=u+1|0;if((u|0)<(n|0)){continue}break}break o}ja(39352,39187,320);G()}ja(39438,39187,336);G()}ja(39537,39187,337);G()}i=0;j=q[a+5744>>2];if((j|0)>0){while(1){if((n|0)>=1){y=i-1|0;O=i+D|0;U=i<<2;u=U+$|0;j=w(i,6)+K|0;l=0;while(1){k=w(l,10064)+a|0;if(q[(k+U|0)+4724>>2]){w:{if((n|0)!=2|l){break w}Yc(e,j);if(q[u>>2]){break w}Xc(e,o[O|0])}m=k;n=e;B=i;x:{if(i){P=2;if(q[(k+(y<<2)|0)+4724>>2]){break x}}P=0}Gb(m,n,B,1,P);m=k+w(i,36)|0;Fb(e,o[m+6129|0],o[m+6130|0],(k+w(i,320)|0)+6208|0,q[k+4584>>2]);n=q[b+4>>2]}l=l+1|0;if((l|0)<(n|0)){continue}break}j=q[a+5744>>2]}i=i+1|0;if((i|0)<(j|0)){continue}break}}j=0;if((n|0)>0){while(1){i=w(j,10064)+a|0;q[i+4724>>2]=0;q[i+4728>>2]=0;q[i+4732>>2]=0;j=j+1|0;if((j|0)>2]){continue}break}}q[a+20184>>2]=(q[e+20>>2]+z(q[e+28>>2])|0)-32}_f(a);m=q[b+24>>2];i=q[b+28>>2];k=(w(m,i)|0)/1e3|0;if(!g){k=k-q[a+20184>>2]|0}k=(k|0)/q[a+5744>>2]|0;l=w(k<<16>>16,(m|0)==10?100:50)-(q[a+20188>>2]<<1)|0;y:{if(g){break y}m=q[a+5748>>2];if((m|0)<1){break y}l=((q[a+20184>>2]+((w(k,m)-q[e+20>>2]|0)-z(q[e+28>>2])|0)<<1)+l|0)- -64|0}z:{if((i|0)>=5001){k=i;if((i|0)<(l|0)){break z}k=(l|0)>5e3?l:5e3;break z}k=5e3;if((l|0)>5e3){break z}k=(i|0)>(l|0)?i:l}A:{if(q[b+4>>2]==2){i=q[a+5748>>2];Yf(_,Z,Y,w(i,6)+K|0,i+D|0,x+16|0,k,q[a+4532>>2],q[b+60>>2],q[a+4576>>2],q[a+4584>>2]);i=q[a+5748>>2];B:{if(!r[i+D|0]){if(q[a+20212>>2]==1){i=J;q[i>>2]=0;q[i+4>>2]=0;q[i+8>>2]=0;q[a+10080>>2]=0;q[a+10084>>2]=0;la(X,0,4384);o[a+17232|0]=10;q[a+14540>>2]=100;q[a+14608>>2]=100;o[a+14605|0]=0;q[a+14728>>2]=1;q[a+14556>>2]=65536}Hc(Q,h);break B}o[i+S|0]=0}if(g){break A}Yc(e,w(q[a+5748>>2],6)+K|0);i=q[a+5748>>2];if(r[i+S|0]){break A}Xc(e,o[i+D|0]);break A}q[a+5096>>2]=q[a+20132>>2];i=(q[a+4584>>2]<<1)+E|0;q[a+20132>>2]=s[i>>1]|s[i+2>>1]<<16}Hc(a,h);y=q[b+4>>2];if((y|0)>=1){O=!F&(H|0)==2;j=0;while(1){m=q[b+56>>2];i=(w(m,3)|0)/5|0;C:{if(O){break C}i=m;if((H|0)!=3){break C}i=(m<<1)/5|0;if(!F){break C}i=m;if((F|0)!=1){break C}i=(w(m,3)|0)/4|0}n=i;u=(F|0)==(W|0)&q[b+52>>2]!=0;D:{if((y|0)==1){l=k;break D}l=q[(x+16|0)+(j<<2)>>2];if(q[x+20>>2]<1|j){break D}n=n-((m|0)/(V|0)|0)|0;u=0}if((l|0)>=1){i=w(j,10064)+a|0;pf(i,l);m=f;l=e;B=0;E:{if(q[a+5748>>2]<=(j|0)){break E}if(j){B=1;if(q[a+20212>>2]){break E}}B=2}t=qf(i,m,l,B,n,u);y=q[b+4>>2]}i=w(j,10064)+a|0;q[i+5740>>2]=0;q[i+4668>>2]=0;q[i+5748>>2]=q[i+5748>>2]+1;j=j+1|0;if((y|0)>(j|0)){continue}break}}m=w(v,aa)<<1;d=d-v|0;i=q[a+5748>>2];q[a+20212>>2]=o[(i+D|0)-1|0];F:{if((i|0)!=q[a+5744>>2]|q[f>>2]<1){break F}u=0;l=0;if((y|0)>=1){while(1){j=0;k=w(u,10064)+a|0;n=q[k+5744>>2];if((n|0)>=1){while(1){l=o[(j+k|0)+4720|0]|l<<1;j=j+1|0;if((n|0)!=(j|0)){continue}break}}l=o[k+4723|0]|l<<1;u=u+1|0;if((u|0)!=(y|0)){continue}break}}if(!g){Nd(e,l,w(i+1|0,y))}if(!(!q[a+6080>>2]|(q[a+16144>>2]?0:q[b+4>>2]!=1))){q[f>>2]=0}i=q[b+24>>2];k=(q[a+20188>>2]+(q[f>>2]<<3)|0)+((w(i,q[b+28>>2])|0)/-1e3|0)|0;k=(k|0)>0?k:0;q[a+20188>>2]=(k|0)<1e4?k:1e4;k=q[a+20204>>2];if(q[a+4532>>2]<((w(k<<16>>16,3188)>>16)+13|0)){q[a+20204>>2]=0;q[a+20208>>2]=1;break F}q[a+20208>>2]=0;q[a+20204>>2]=i+k}c=c+m|0;F=F+1|0;if(d){continue}break}i=q[a+20208>>2]}d=q[b+4>>2];q[a+20200>>2]=d;q[b+76>>2]=i;f=q[a+4576>>2];q[b+80>>2]=(f|0)==16?!q[a+28>>2]:0;q[b+72>>2]=w(f<<16>>16,1e3);j=0;q[b+84>>2]=q[b+60>>2]?0:p[a+20156>>1];G:{if(!g){break G}q[b+36>>2]=R;q[b+24>>2]=C;if((d|0)<1){break G}while(1){c=w(j,10064)+a|0;q[c+4680>>2]=0;q[c+4668>>2]=0;j=j+1|0;if((d|0)!=(j|0)){continue}break}}c=o[a+4765|0];q[b+92>>2]=c;q[b+96>>2]=p[((c<<1&-4)+6416|0)+(o[a+4766|0]<<1)>>1]}ca=x+32|0;return t}ja(39225,39187,262);G()}ja(39167,39187,241);G()}ja(39167,39187,235);G()}ja(39167,39187,206);G()}ja(39167,39187,170);G()}function Lb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,s,t,v,y,z,A,B,C,D){var E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=x(0),ba=x(0),da=0,ea=x(0),fa=x(0),ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,pa=x(0),qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0;E=ca-1568|0;ca=E;F=1;S=q[b+32>>2];Ra=S+(c<<1)|0;ia=p[Ra>>1];la=f?2:1;L=E-((w(la,p[((q[b+8>>2]<<1)+S|0)-2>>1]-ia<>2];N=p[((H<<1)+S|0)-2>>1];ga=N<7;qa=ma|!a;T=j?1<>1]-N<>2]=v;q[E+1540>>2]=h;q[E+1520>>2]=m;q[E+1504>>2]=a;q[E+1512>>2]=b;a=q[A>>2];q[E+1556>>2]=D;q[E+1548>>2]=C;q[E+1524>>2]=k;q[E+1544>>2]=a;j=(T|0)>1;q[E+1560>>2]=j;q[E+1552>>2]=0;q[E+1508>>2]=qa;gb=A;if((c|0)<(d|0)){hb=f?L:0;ib=j|(k|0)!=3;R=v+28|0;P=v+8|0;jb=qa^1;Wa=la-1|0;Xa=c+2|0;na=c+1|0;Ya=d-1|0;sa=ia<>2]=H;b:{c:{C=H+1|0;Q=(H<<1)+S|0;a=p[Q>>1];k=p[(C<<1)+S>>1]-a|0;A=k<0){B=a<>2]=a-1;Za=t-((c|0)==(H|0)?0:ta)|0;j=0;d:{if((z|0)<=(H|0)){break d}t=z-H|0;t=q[(H<<2)+i>>2]+((Za|0)/(((t|0)<3?t:3)|0)|0)|0;a=(a|0)<(t|0)?a:t;j=16383;if((a|0)>16383){break d}j=(a|0)>0?a:0}a=B<<2;N=!qa|(p[Q>>1]-k<>1]<>2];F=p[t+(na<<1)>>1];B=F-p[t+(c<<1)>>1]<>1]-F<>2];q[E+1528>>2]=t;F=(H|0)>2];I=F?O:0;W=(H|0)==(Ya|0);O=W?0:I;M=-1;f:{if(!N){a=ga;J=a;break f}a=ga;J=a;if(!((t|0)<0|ib)){break f}a=p[(N<<1)+S>>1]-(k+ia|0)<0?a:0;a=sa+M|0;t=N;while(1){D=t;t=t-1|0;if((a|0)>1]<p[(k<<1)+S>>1]<>1]-ia<>2]=x(u[F>>2]+u[l+da>>2])*x(.5);t=t+1|0;if((k|0)!=(t|0)){continue}break}break c}if((m|0)==(H|0)){break c}k=M<<2;F=(M|0)==-1;K=F?0:k+L|0;t=j>>>1|0;h:{if((H|0)==(Ya|0)){k=F?0:k+da|0;B=Ba(E+1504|0,B,A,t,T,K,y,0,x(1),O,a);a=0;break h}k=F?0:k+da|0;B=Ba(E+1504|0,B,A,t,T,K,y,(p[Q>>1]<>1]<>2];fa=u[(H+q[b+8>>2]<<2)+h>>2];$a=q[v+4>>2];ab=q[v>>2];l=q[P+12>>2];va=E+1496|0;k=va;q[k>>2]=q[P+8>>2];q[k+4>>2]=l;k=q[P+4>>2];q[E+1488>>2]=q[P>>2];q[E+1492>>2]=k;ha=q[v+24>>2];bb=E+1480|0;q[bb>>2]=q[R+16>>2];l=q[R+12>>2];xa=E+1472|0;k=xa;q[k>>2]=q[R+8>>2];q[k+4>>2]=l;k=q[R+4>>2];q[E+1464>>2]=q[R>>2];q[E+1468>>2]=k;cb=E+1408|0;oa=E+1560|0;q[cb>>2]=q[oa>>2];U=E+1552|0;l=U;t=q[l+4>>2];ya=E+1400|0;k=ya;q[k>>2]=q[l>>2];q[k+4>>2]=t;X=E+1544|0;l=X;t=q[l+4>>2];za=E+1392|0;k=za;q[k>>2]=q[l>>2];q[k+4>>2]=t;Y=E+1536|0;l=Y;t=q[l+4>>2];Aa=E+1384|0;k=Aa;q[k>>2]=q[l>>2];q[k+4>>2]=t;Z=E+1528|0;l=Z;t=q[l+4>>2];Ca=E+1376|0;k=Ca;q[k>>2]=q[l>>2];q[k+4>>2]=t;_=E+1520|0;l=_;t=q[l+4>>2];Da=E+1368|0;k=Da;q[k>>2]=q[l>>2];q[k+4>>2]=t;$=E+1512|0;l=$;t=q[l+4>>2];Ea=E+1360|0;k=Ea;q[k>>2]=q[l>>2];q[k+4>>2]=t;k=q[E+1508>>2];q[E+1352>>2]=q[E+1504>>2];q[E+1356>>2]=k;K=A<<2;Fa=ka(Sa,B,K);Ga=ka(Ta,D,K);q[U>>2]=-1;t=0;db=a|J;aa=x(0);J=(M|0)==-1?0:(M<<2)+L|0;l=Kb(E+1504|0,B,D,A,j,T,J,y,W?0:(p[Q>>1]<>2]*u[a+B>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}t=0;while(1){a=t<<2;aa=x(aa+x(u[a+Ga>>2]*u[a+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}k=q[v+44>>2];M=E+1456|0;a=M;q[a>>2]=q[v+40>>2];q[a+4>>2]=k;k=q[v+36>>2];Ha=E+1448|0;a=Ha;q[a>>2]=q[v+32>>2];q[a+4>>2]=k;k=q[v+28>>2];Ia=E+1440|0;a=Ia;q[a>>2]=q[v+24>>2];q[a+4>>2]=k;k=q[v+20>>2];Ja=E+1432|0;a=Ja;q[a>>2]=q[v+16>>2];q[a+4>>2]=k;k=q[P+4>>2];Ka=E+1424|0;a=Ka;q[a>>2]=q[P>>2];q[a+4>>2]=k;a=q[v>>2];k=q[v+4>>2];F=q[$+4>>2];La=E+1296|0;t=La;q[t>>2]=q[$>>2];q[t+4>>2]=F;F=q[_+4>>2];Ma=E+1304|0;t=Ma;q[t>>2]=q[_>>2];q[t+4>>2]=F;F=q[Z+4>>2];Na=E+1312|0;t=Na;q[t>>2]=q[Z>>2];q[t+4>>2]=F;F=q[Y+4>>2];Oa=E+1320|0;t=Oa;q[t>>2]=q[Y>>2];q[t+4>>2]=F;F=q[X+4>>2];Pa=E+1328|0;t=Pa;q[t>>2]=q[X>>2];q[t+4>>2]=F;F=q[U+4>>2];Qa=E+1336|0;t=Qa;q[t>>2]=q[U>>2];q[t+4>>2]=F;F=E+1344|0;q[F>>2]=q[oa>>2];q[E+1416>>2]=a;q[E+1420>>2]=k;a=q[E+1508>>2];q[E+1288>>2]=q[E+1504>>2];q[E+1292>>2]=a;lb=ka(Ua,B,K);mb=ka(Va,D,K);if(!W){ka(ra,(p[Q>>1]<>2]=$a;q[v>>2]=ab;a=q[va+4>>2];q[P+8>>2]=q[va>>2];q[P+12>>2]=a;a=q[I+1492>>2];q[P>>2]=q[I+1488>>2];q[P+4>>2]=a;q[v+24>>2]=ha;q[R+16>>2]=q[bb>>2];a=q[xa+4>>2];q[R+8>>2]=q[xa>>2];q[R+12>>2]=a;a=q[I+1468>>2];q[R>>2]=q[I+1464>>2];q[R+4>>2]=a;a=q[Ea+4>>2];q[$>>2]=q[Ea>>2];q[$+4>>2]=a;a=q[Da+4>>2];q[_>>2]=q[Da>>2];q[_+4>>2]=a;a=q[Ca+4>>2];q[Z>>2]=q[Ca>>2];q[Z+4>>2]=a;a=q[Aa+4>>2];q[Y>>2]=q[Aa>>2];q[Y+4>>2]=a;a=q[za+4>>2];q[X>>2]=q[za>>2];q[X+4>>2]=a;a=q[ya+4>>2];q[U>>2]=q[ya>>2];q[U+4>>2]=a;q[oa>>2]=q[cb>>2];a=q[I+1356>>2];q[I+1504>>2]=q[I+1352>>2];q[I+1508>>2]=a;a=ka(B,Fa,K);k=ka(D,Ga,K);if(!_a){t=q[b+32>>2];D=p[t+(na<<1)>>1];B=D-p[t+(c<<1)>>1]<>1]-D<>2]=1;t=0;pa=x((fa>ea?ea:fa)/x(3));fa=x(fa+pa);ea=x(ea+pa);pa=x(x(ea*ba)+x(fa*aa));aa=x(0);B=Kb(I+1504|0,a,k,A,j,T,J,y,W?0:(p[Q>>1]<>2]*u[a+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}t=0;while(1){D=t<<2;aa=x(aa+x(u[D+Ga>>2]*u[k+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}if(!(pa>=x(x(ea*ba)+x(fa*aa))^1)){t=q[I+1420>>2];q[v>>2]=q[I+1416>>2];q[v+4>>2]=t;t=q[M+4>>2];q[v+40>>2]=q[M>>2];q[v+44>>2]=t;t=q[Ha+4>>2];q[v+32>>2]=q[Ha>>2];q[v+36>>2]=t;t=q[Ia+4>>2];q[v+24>>2]=q[Ia>>2];q[v+28>>2]=t;t=q[Ja+4>>2];q[v+16>>2]=q[Ja>>2];q[v+20>>2]=t;t=q[Ka+4>>2];q[P>>2]=q[Ka>>2];q[P+4>>2]=t;t=q[La+4>>2];q[$>>2]=q[La>>2];q[$+4>>2]=t;t=q[Ma+4>>2];q[_>>2]=q[Ma>>2];q[_+4>>2]=t;t=q[Na+4>>2];q[Z>>2]=q[Na>>2];q[Z+4>>2]=t;t=q[Oa+4>>2];q[Y>>2]=q[Oa>>2];q[Y+4>>2]=t;t=q[Pa+4>>2];q[X>>2]=q[Pa>>2];q[X+4>>2]=t;t=q[Qa+4>>2];q[U>>2]=q[Qa>>2];q[U+4>>2]=t;q[oa>>2]=q[F>>2];t=q[I+1292>>2];q[I+1504>>2]=q[I+1288>>2];q[I+1508>>2]=t;ka(a,lb,K);ka(k,mb,K);if(!W){ka((p[Q>>1]<>2]=0;B=Kb(E+1504|0,B,D,A,j,T,(M|0)==-1?0:(M<<2)+L|0,y,W?0:(p[Q>>1]<>1]<>2];q[E+1560>>2]=0;t=a+(ta+Za|0)|0;F=A<<3<(j|0);if((d|0)!=(C|0)){continue}break}a=q[E+1544>>2]}q[gb>>2]=a;ca=E+1568|0}function qf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,t=0,v=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=x(0),W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;i=ca-13584|0;ca=i;q[i+40>>2]=0;q[i+44>>2]=0;q[i+32>>2]=0;q[i+36>>2]=0;g=q[a+4620>>2];o[a+4770|0]=g&3;q[a+4620>>2]=g+1;g=q[a+4592>>2];Wf(a+16|0,a+5098|0,q[a+4584>>2]);Q=a+7180|0;n=g<<2;t=Q+n|0;k=w(q[a+4576>>2],5);v=t+(k<<2)|0;g=q[a+4584>>2];if((g|0)>=1){h=g;while(1){j=h-1|0;u[v+(j<<2)>>2]=p[((h<<1)+a|0)+5096>>1];m=(h|0)>1;h=j;if(m){continue}break}}u[v>>2]=u[v>>2]+x(9.999999974752427e-7);g=g>>3;h=(g+k<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+(g<<1)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);h=(k+w(g,3)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);h=(k+(g<<2)<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+w(g,5)<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+w(g,6)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);g=(k+w(g,7)<<2)+t|0;u[g>>2]=u[g>>2]+x(-9.999999974752427e-7);a:{if(q[a+4680>>2]){break a}D=a+4736|0;Rf(a,i+8480|0,i+5792|0,t);g=n+(i+5792|0)|0;Of(a,i+8480|0,g,t);sf(a,i+8480|0,g,t,d);rf(a,i+8480|0,d);if(!(!q[a+6092>>2]|q[a+4532>>2]<78)){g=q[a+5748>>2];q[((g<<2)+a|0)+4724>>2]=1;ka(i+9232|0,a+148|0,4352);g=(w(g,36)+a|0)+6100|0;h=a+4768|0;h=s[h>>1]|s[h+2>>1]<<16;p[g+32>>1]=h;p[g+34>>1]=h>>>16;h=a+4760|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+24>>1]=h;p[g+26>>1]=h>>>16;p[g+28>>1]=j;p[g+30>>1]=j>>>16;h=a+4752|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+16>>1]=h;p[g+18>>1]=h>>>16;p[g+20>>1]=j;p[g+22>>1]=j>>>16;h=a+4744|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+8>>1]=h;p[g+10>>1]=h>>>16;p[g+12>>1]=j;p[g+14>>1]=j>>>16;h=s[a+4740>>1]|s[a+4742>>1]<<16;j=s[a+4736>>1]|s[a+4738>>1]<<16;p[g>>1]=j;p[g+2>>1]=j>>>16;p[g+4>>1]=h;p[g+6>>1]=h>>>16;h=q[a+4580>>2];ka(i+48|0,i+8480|0,h<<2);j=q[a+5748>>2];if(!(q[((j<<2)+a|0)+4720>>2]?j:0)){o[a+4540|0]=r[a+7168|0];j=r[g|0]+r[a+6096|0]|0;o[g|0]=j<<24>>24<63?j:63}Wb(i+1344|0,g,a+4540|0,(d|0)==2,h);j=q[a+4580>>2];if((j|0)>=1){h=0;while(1){k=h<<2;u[k+(i+8480|0)>>2]=x(q[k+(i+1344|0)>>2])*x(152587890625e-16);h=h+1|0;if((j|0)!=(h|0)){continue}break}}Lc(a,i+8480|0,g,i+9232|0,(w(q[a+5748>>2],320)+a|0)+6208|0,t);ka(i+8480|0,i+48|0,q[a+4580>>2]<<2)}j=Vb(D,q[a+4580>>2]);h=q[c+44>>2];J=i+5784|0;g=J;q[g>>2]=q[c+40>>2];q[g+4>>2]=h;h=q[c+36>>2];K=i+5776|0;g=K;q[g>>2]=q[c+32>>2];q[g+4>>2]=h;h=q[c+28>>2];L=i+5768|0;g=L;q[g>>2]=q[c+24>>2];q[g+4>>2]=h;h=q[c+20>>2];M=i+5760|0;g=M;q[g>>2]=q[c+16>>2];q[g+4>>2]=h;h=q[c+12>>2];N=i+5752|0;g=N;q[g>>2]=q[c+8>>2];q[g+4>>2]=h;g=q[c+4>>2];q[i+5744>>2]=q[c>>2];q[i+5748>>2]=g;E=a+148|0;ka(i+9232|0,E,4352);_=a+4736|0;R=(d|0)==2;$=e-5|0;O=a+7168|0;I=a+4772|0;S=q[a+5768>>2];T=s[a+5772>>1];aa=r[a+4770|0];n=256;v=-1;k=0;h=0;U=-1;while(1){m=(j|0)==(v|0);b:{if(m){g=k;break b}if((j|0)==(U|0)){g=h;break b}if(A){g=q[i+5748>>2];q[c>>2]=q[i+5744>>2];q[c+4>>2]=g;g=q[J+4>>2];q[c+40>>2]=q[J>>2];q[c+44>>2]=g;g=q[K+4>>2];q[c+32>>2]=q[K>>2];q[c+36>>2]=g;g=q[L+4>>2];q[c+24>>2]=q[L>>2];q[c+28>>2]=g;g=q[M+4>>2];q[c+16>>2]=q[M>>2];q[c+20>>2]=g;g=q[N+4>>2];q[c+8>>2]=q[N>>2];q[c+12>>2]=g;ka(E,i+9232|0,4352);p[a+5772>>1]=T;o[a+4770|0]=aa;q[a+5768>>2]=S}Lc(a,i+8480|0,D,E,I,t);l=(A|0)!=6|F;if(!l){y=q[c+20>>2];g=i+5736|0;q[g>>2]=q[c+16>>2];q[g+4>>2]=y;y=q[c+12>>2];g=i+5728|0;q[g>>2]=q[c+8>>2];q[g+4>>2]=y;g=q[c+4>>2];q[i+5720>>2]=q[c>>2];q[i+5724>>2]=g;y=q[c+24>>2];B=q[c+40>>2];g=i+5704|0;q[g>>2]=q[c+36>>2];q[g+4>>2]=B;q[i+5712>>2]=q[c+44>>2];g=q[c+32>>2];q[i+5696>>2]=q[c+28>>2];q[i+5700>>2]=g}Gb(a,c,q[a+5748>>2],0,d);Fb(c,o[a+4765|0],o[a+4766|0],I,q[a+4584>>2]);g=(q[c+20>>2]+z(q[c+28>>2])|0)-32|0;if(!(l|(g|0)<=(e|0))){g=q[i+5724>>2];q[c>>2]=q[i+5720>>2];q[c+4>>2]=g;g=i+5736|0;l=q[g+4>>2];q[c+16>>2]=q[g>>2];q[c+20>>2]=l;g=i+5728|0;l=q[g+4>>2];q[c+8>>2]=q[g>>2];q[c+12>>2]=l;q[c+24>>2]=y;q[c+44>>2]=q[i+5712>>2];g=i+5704|0;l=q[g+4>>2];q[c+36>>2]=q[g>>2];q[c+40>>2]=l;g=q[i+5700>>2];q[c+28>>2]=q[i+5696>>2];q[c+32>>2]=g;g=r[i+9224|0];o[a+7168|0]=g;l=q[a+4580>>2];if((l|0)>=1){la(_,4,l)}if(!R){o[D|0]=g}q[a+5768>>2]=S;p[a+5772>>1]=T;g=q[a+4584>>2];if((g|0)>=1){la(I,0,g)}Gb(a,c,q[a+5748>>2],0,d);Fb(c,o[a+4765|0],o[a+4766|0],I,q[a+4584>>2]);g=(q[c+20>>2]+z(q[c+28>>2])|0)-32|0}if(f|A){break b}if((e|0)>=(g|0)){break a}}c:{d:{e:{f:{if((A|0)==6){if(!F|!(m|(e|0)<(g|0))){break a}d=q[i+5724>>2];q[c>>2]=q[i+5720>>2];q[c+4>>2]=d;d=i+5736|0;e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;d=i+5728|0;e=q[d+4>>2];q[c+8>>2]=q[d>>2];q[c+12>>2]=e;q[c+24>>2]=y;q[c+44>>2]=q[i+5712>>2];d=i+5704|0;e=q[d+4>>2];q[c+36>>2]=q[d>>2];q[c+40>>2]=e;d=q[i+5700>>2];q[c+28>>2]=q[i+5696>>2];q[c+32>>2]=d;if(y>>>0>=1276){break f}ka(q[c>>2],i+48|0,y);ka(E,i+1344|0,4352);o[O|0]=ba;break a}g:{h:{i:{if((e|0)<(g|0)){if(A>>>0<2|F){break i}V=x(u[i+9172>>2]*x(1.5));u[i+9172>>2]=V>x(1.5)?V:x(1.5);o[a+4766|0]=0;g=h;j=-1;P=0;break h}if((g|0)>=($|0)){break a}if(!m){v=q[c+20>>2];k=i+5736|0;q[k>>2]=q[c+16>>2];q[k+4>>2]=v;v=q[c+12>>2];k=i+5728|0;q[k>>2]=q[c+8>>2];q[k+4>>2]=v;k=q[c+4>>2];q[i+5720>>2]=q[c>>2];q[i+5724>>2]=k;y=q[c+24>>2];v=q[c+40>>2];k=i+5704|0;q[k>>2]=q[c+36>>2];q[k+4>>2]=v;q[i+5712>>2]=q[c+44>>2];k=q[c+32>>2];q[i+5696>>2]=q[c+28>>2];q[i+5700>>2]=k;if(y>>>0>=1276){break e}ka(i+48|0,q[c>>2],y);ka(i+1344|0,E,4352);ba=r[O|0]}H=n<<16>>16;F=1;if(!P){break g}k=g;g=h;v=j;break d}W=n<<16>>16;P=1}U=j;j:{if(!F){X=q[a+4580>>2];if((X|0)<1){break j}m=0;C=q[a+4588>>2];j=C;while(1){B=0;h=w(m,C);l=m+1|0;if((h|0)<(w(l,C)|0)){while(1){Y=o[(a+h|0)+4772|0];Z=Y>>31;B=((Z^Z+Y)&255)+B|0;h=h+1|0;if((j|0)!=(h|0)){continue}break}}k:{l:{if(A){h=m<<2;if(q[h+i>>2]<=(B|0)|q[h+(i+32|0)>>2]){break l}}p[(i+24|0)+(m<<1)>>1]=n;q[(m<<2)+i>>2]=B;break k}q[h+(i+32|0)>>2]=1}j=j+C|0;m=l;if((m|0)!=(X|0)){continue}break}break j}if(F&P){break d}}n=n<<16>>16<16384?n<<1:32767;break c}k=Na(((g-e<<7)/q[a+4584>>2]|0)+2048|0);n=(w(k&65535,H)>>>16|0)+w(k>>16,H)|0;k=g;g=h;v=j;break c}ja(38569,38616,251);G()}ja(38646,38616,281);G()}j=W-H|0;m=((w(j,e-k|0)|0)/(g-k|0)|0)+H|0;h=m<<16>>16;j=j>>2;n=j+H|0;if((h|0)>(n|0)){break c}j=W-j|0;n=(h|0)<(j|0)?j:m}h=0;m=q[a+4580>>2];if((m|0)>=1){while(1){j=n;l=h<<2;j=q[l+(i+32|0)>>2]?p[(i+24|0)+(h<<1)>>1]:j;C=l+(i+1328|0)|0;j=j<<16>>16;l=q[(i+l|0)+9208>>2];j=(w(j,l&65535)>>16)+w(j,l>>16)|0;j=(j|0)>-8388608?j:-8388608;q[C>>2]=((j|0)<8388607?j:8388607)<<8;h=h+1|0;if((m|0)!=(h|0)){continue}break}}o[a+7168|0]=r[i+9224|0];Xb(D,i+1328|0,O,R,m);j=Vb(D,q[a+4580>>2]);h=0;m=q[a+4580>>2];if((m|0)>=1){while(1){l=h<<2;u[l+(i+8480|0)>>2]=x(q[l+(i+1328|0)>>2])*x(152587890625e-16);h=h+1|0;if((m|0)!=(h|0)){continue}break}}A=A+1|0;h=g;continue}}ra(Q,((q[a+4584>>2]<<2)+a|0)+7180|0,q[a+4592>>2]+w(q[a+4576>>2],5)<<2);if(q[a+4680>>2]){a=0}else{d=q[((q[a+4580>>2]<<2)+i|0)+8704>>2];q[a+4664>>2]=0;o[a+4541|0]=r[a+4765|0];q[a+4544>>2]=d;a=(q[c+20>>2]+z(q[c+28>>2])|0)-25>>3}q[b>>2]=a;ca=i+13584|0;return 0}function Df(a,b,c,d,e,f,g,h,i,j,k,l,m,n,t){var u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;u=ca-176|0;N=u;ca=u;O=q[b+4328>>2];u=u-(w(q[a+4628>>2],1300)+15&-16)|0;y=u;ca=u;A=q[a+4628>>2];J=la(u,0,w(A,1300));if((A|0)>=1){F=b+4224|0;x=b+3840|0;C=q[((q[a+4592>>2]<<2)+b|0)+1276>>2];D=q[b+4324>>2];K=q[b+4320>>2];L=r[c+34|0];while(1){B=w(v,1300)+J|0;q[B+1296>>2]=0;u=v+L&3;q[B+1292>>2]=u;q[B+1288>>2]=u;q[B+1284>>2]=D;q[B+1280>>2]=K;q[B+1024>>2]=C;u=x;H=q[u+4>>2];q[B>>2]=q[u>>2];q[B+4>>2]=H;H=q[u+12>>2];q[B+8>>2]=q[u+8>>2];q[B+12>>2]=H;H=q[u+20>>2];q[B+16>>2]=q[u+16>>2];q[B+20>>2]=H;H=q[u+28>>2];q[B+24>>2]=q[u+24>>2];q[B+28>>2]=H;H=q[u+36>>2];q[B+32>>2]=q[u+32>>2];q[B+36>>2]=H;H=q[u+44>>2];q[B+40>>2]=q[u+40>>2];q[B+44>>2]=H;H=q[u+52>>2];q[B+48>>2]=q[u+48>>2];q[B+52>>2]=H;H=q[u+60>>2];q[B+56>>2]=q[u+56>>2];q[B+60>>2]=H;ka(B+1184|0,F,96);v=v+1|0;if((A|0)!=(v|0)){continue}break}}F=r[c+29|0];x=o[c+30|0];q[N+172>>2]=0;v=q[a+4588>>2];B=(v|0)<40?v:40;a:{if((F|0)==2){C=q[a+4580>>2];if((C|0)<1){break a}u=0;while(1){D=q[(u<<2)+m>>2]-3|0;B=(B|0)<(D|0)?B:D;u=u+1|0;if((C|0)!=(u|0)){continue}break}break a}if((O|0)<1){break a}u=O-3|0;B=(u|0)>(B|0)?B:u}D=r[c+31|0];C=y;u=q[a+4592>>2];y=u+q[a+4584>>2]|0;Q=C-((y<<2)+15&-16)|0;C=Q;ca=C;R=C-((y<<1)+15&-16)|0;y=R;ca=y;S=y-((v<<2)+15&-16)|0;ca=S;q[b+4332>>2]=u;q[b+4336>>2]=u;K=(u<<1)+b|0;b:{C=q[a+4580>>2];if((C|0)>=1){Y=p[((F<<24>>24<<1&-4)+6416|0)+(x<<1)>>1];U=(D|0)==4;Z=U?3:1;V=t<<16>>16;t=0;L=0;while(1){H=t<<2;W=q[H+i>>2];q[b+4348>>2]=0;y=1;X=((t>>>1|U)<<5)+f|0;c:{if((F|0)!=2){break c}F=2;O=q[(t<<2)+m>>2];if(t&Z){break c}d:{if((t|0)!=2){break d}x=0;u=0;A=q[a+4628>>2];if((A|0)>=2){y=q[J+1296>>2];v=1;while(1){C=q[(w(v,1300)+J|0)+1296>>2];F=(C|0)<(y|0);y=F?C:y;u=F?v:u;v=v+1|0;if((A|0)!=(v|0)){continue}break}}if((A|0)>0){while(1){if((u|0)!=(x|0)){v=w(x,1300)+J|0;q[v+1296>>2]=q[v+1296>>2]+134217727}x=x+1|0;if((A|0)!=(x|0)){continue}break}}if((B|0)<1){L=0;break d}v=q[N+172>>2]+B|0;L=0;x=0;while(1){y=x-B|0;v=(v-1|0)%40|0;v=(v|0)<0?v+40|0:v;A=(w(u,1300)+J|0)+(v<<2)|0;o[y+e|0]=(q[A+544>>2]>>>9|0)+1>>>1;C=q[l+4>>2];D=C<<16>>16;F=q[A+704>>2];F=((w(D,F&65535)>>16)+w(D,F>>16)|0)+w(F,(C>>15)+1>>1)|0;p[(y<<1)+K>>1]=(F|0)>536862719?32767:(F|0)<-536879104?-32768:(F>>>13|0)+1>>>1|0;q[((y+q[b+4336>>2]<<2)+b|0)+1280>>2]=q[A+1024>>2];x=x+1|0;if((B|0)!=(x|0)){continue}break}}u=q[a+4592>>2];x=q[a+4640>>2];v=(u-O|0)-x|0;if((v|0)<=2){break b}v=v-2|0;ib((v<<1)+R|0,(v+w(q[a+4588>>2],t)<<1)+b|0,X,u-v|0,x);v=q[a+4592>>2];q[b+4348>>2]=1;q[b+4332>>2]=v;F=r[c+29|0];y=0}T=l+H|0;x=q[T>>2];A=(x|0)>1?x:1;u=z(A);C=A<>16;M=536870911/(D|0)|0;E=M<<16;v=E>>16;C=0-(w(v,D)+(w(v,C&65535)>>16)<<3)|0;v=((E+w(C,(M>>15)+1>>1)|0)+w(v,C>>16)|0)+(w(v,C&65528)>>16)|0;C=q[m+H>>2];M=q[a+4628>>2];e:{if(A>>>0<=131071){u=u-15|0;A=2147483647>>>u|0;D=-2147483648>>u;v=((v|0)>(A|0)?A:(v|0)<(D|0)?D:v)<>15-u}A=q[a+4588>>2];if((A|0)>=1){u=(v>>4)+1|0;D=u<<15>>16;E=(u>>16)+1>>1;u=0;while(1){I=s[(u<<1)+d>>1];P=I<<16;q[(u<<2)+S>>2]=(w(D,P>>31)+w(E,P>>16)|0)+(w(D,I)>>16);u=u+1|0;if((A|0)!=(u|0)){continue}break}}f:{if(y){break f}v=t?v:w(v>>16,V)+(w(v&65535,V)>>16)<<2;y=q[b+4332>>2];u=(y-C|0)-2|0;if((u|0)>=(y|0)){break f}D=v&65535;v=v>>16;while(1){E=p[(u<<1)+R>>1];q[(u<<2)+Q>>2]=(w(E,D)>>16)+w(v,E);u=u+1|0;if((y|0)!=(u|0)){continue}break}}v=q[b+4344>>2];if((v|0)!=(x|0)){u=v;v=v>>31;y=z(u+v^v);u=u<>31;A=z(v+x^v);x=x<>16)<<16>>16;u=(w(v,u&65535)>>16)+w(v,u>>16)|0;x=yg(u,u>>31,x,x>>31);x=D-(((da&536870911)<<3|x>>>29)&-8)|0;v=(w(x>>16,v)+u|0)+(w(v,x&65535)>>16)|0;u=(y-A|0)+29|0;g:{if((u|0)<=15){u=16-u|0;x=2147483647>>>u|0;y=-2147483648>>u;u=((v|0)>(x|0)?x:(v|0)<(y|0)?y:v)<>u-16:0}v=q[a+4592>>2];if((v|0)>=1){y=u&65535;A=u>>16;x=q[b+4336>>2]-v|0;while(1){D=((x<<2)+b|0)+1280|0;E=q[D>>2];v=E<<16>>16;q[D>>2]=(w(v,A)+(w(v,y)>>16)|0)+w(u,(E>>15)+1>>1);x=x+1|0;if((x|0)>2]){continue}break}}h:{if(q[b+4348>>2]|(F|0)!=2){break h}v=q[b+4332>>2];x=(v-C|0)-2|0;y=v-B|0;if((x|0)>=(y|0)){break h}A=u&65535;C=u>>16;while(1){D=(x<<2)+Q|0;E=q[D>>2];v=E<<16>>16;q[D>>2]=(w(v,C)+(w(v,A)>>16)|0)+w(u,(E>>15)+1>>1);x=x+1|0;if((y|0)!=(x|0)){continue}break}}if((M|0)>=1){x=u&65535;A=u>>16;C=0;while(1){D=w(C,1300)+J|0;y=q[D+1280>>2];v=y<<16>>16;q[D+1280>>2]=(w(v,A)+(w(v,x)>>16)|0)+w(u,(y>>15)+1>>1);v=q[D+1284>>2];y=v<<16>>16;q[D+1284>>2]=((w(y,x)>>16)+w(y,A)|0)+w(u,(v>>15)+1>>1);v=0;while(1){E=D+(v<<2)|0;I=q[E>>2];y=I<<16>>16;q[E>>2]=(w(y,A)+(w(x,y)>>16)|0)+w(u,(I>>15)+1>>1);y=0;v=v+1|0;if((v|0)!=16){continue}break}v=0;while(1){I=(D+(v<<2)|0)+1184|0;P=q[I>>2];E=P<<16>>16;q[I>>2]=(w(A,E)+(w(x,E)>>16)|0)+w(u,(P>>15)+1>>1);v=v+1|0;if((v|0)!=24){continue}break}while(1){v=D+(y<<2)|0;E=q[v+864>>2];I=E<<16>>16;q[v+864>>2]=((w(I,x)>>16)+w(A,I)|0)+w(u,(E>>15)+1>>1);E=v+1024|0;I=q[E>>2];v=I<<16>>16;q[E>>2]=(w(v,A)+(w(v,x)>>16)|0)+w(u,(I>>15)+1>>1);y=y+1|0;if((y|0)!=40){continue}break}C=C+1|0;if((M|0)!=(C|0)){continue}break}}q[b+4344>>2]=q[T>>2];M=q[a+4628>>2];A=q[a+4588>>2];x=q[T>>2]}Cf(b,J,F<<24>>24,S,e,K,Q,N,X,w(t,10)+g|0,w(t,48)+h|0,O,W<<15&-65536|W>>2,q[j+H>>2],q[k+H>>2],x,n,Y,A,L,q[a+4636>>2],q[a+4640>>2],q[a+4672>>2],M,N+172|0,B);v=q[a+4588>>2];e=v+e|0;u=v<<1;K=u+K|0;t=t+1|0;C=q[a+4580>>2];if((t|0)<(C|0)){L=L+1|0;d=d+u|0;F=r[c+29|0];continue}break}A=q[a+4628>>2]}y=0;if((A|0)>=2){x=q[J+1296>>2];u=1;while(1){f=q[(w(u,1300)+J|0)+1296>>2];d=(f|0)<(x|0);x=d?f:x;y=d?u:y;u=u+1|0;if((A|0)!=(u|0)){continue}break}}d=c;c=w(y,1300)+J|0;o[d+34|0]=q[c+1292>>2];d=b;f=c;if((B|0)>=1){A=q[N+172>>2]+B|0;h=q[((C<<2)+l|0)-4>>2];g=h<<10>>16;k=(h>>21)+1>>1;u=0;while(1){h=u-B|0;i=(A-1|0)%40|0;A=(i|0)<0?i+40|0:i;i=c+(A<<2)|0;o[h+e|0]=(q[i+544>>2]>>>9|0)+1>>>1;j=q[i+704>>2];j=(w(g,j>>16)+w(j,k)|0)+(w(g,j&65535)>>16)|0;p[(h<<1)+K>>1]=(j|0)>8388479?32767:(j|0)<-8388736?-32768:(j>>>7|0)+1>>>1|0;q[((h+q[b+4336>>2]<<2)+b|0)+1280>>2]=q[i+1024>>2];u=u+1|0;if((B|0)!=(u|0)){continue}break}v=q[a+4588>>2]}e=(v<<2)+f|0;f=q[e+4>>2];q[d+3840>>2]=q[e>>2];q[d+3844>>2]=f;f=q[e+60>>2];d=b+3896|0;q[d>>2]=q[e+56>>2];q[d+4>>2]=f;f=q[e+52>>2];d=b+3888|0;q[d>>2]=q[e+48>>2];q[d+4>>2]=f;f=q[e+44>>2];d=b+3880|0;q[d>>2]=q[e+40>>2];q[d+4>>2]=f;f=q[e+36>>2];d=b+3872|0;q[d>>2]=q[e+32>>2];q[d+4>>2]=f;f=q[e+28>>2];d=b+3864|0;q[d>>2]=q[e+24>>2];q[d+4>>2]=f;f=q[e+20>>2];d=b+3856|0;q[d>>2]=q[e+16>>2];q[d+4>>2]=f;f=q[e+12>>2];d=b+3848|0;q[d>>2]=q[e+8>>2];q[d+4>>2]=f;ka(b+4224|0,c+1184|0,96);q[b+4320>>2]=q[c+1280>>2];q[b+4324>>2]=q[c+1284>>2];q[b+4328>>2]=q[((q[a+4580>>2]<<2)+m|0)-4>>2];b=ra(b,(q[a+4584>>2]<<1)+b|0,q[a+4592>>2]<<1)+1280|0;ra(b,b+(q[a+4584>>2]<<2)|0,q[a+4592>>2]<<2);ca=N+176|0;return}ja(37849,37881,253);G()}function Cf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,r,s,t,u,v,x,y,z,A,B,C,D){var E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;N=ca;ta=N;a:{if((B|0)>0){H=N-(w(B,56)+15&-16)|0;ca=H;if((v|0)>=1){ua=s>>6;J=t<<16>>16;s=u<<16;N=w(J,s>>16);U=u+944|0;_=w(U<<16>>16,J);va=w(61865984-s>>16,J);wa=u-80|0;xa=u-944|0;$=r>>16;ya=y>>1;za=y&1;Aa=z>>1;aa=m>>16;s=t>>>1|0;Ba=512-s|0;V=s-512|0;ba=r<<16>>16;da=n<<16>>16;I=A<<16>>16;ea=m<<16>>16;fa=y-1|0;Ca=(fa<<1)+k|0;O=((q[a+4336>>2]-l<<2)+a|0)+1284|0;K=((q[a+4332>>2]-l<<2)+g|0)+8|0;Da=(c|0)!=2;Ea=(y|0)<3;Fa=(t|0)<2049;Ga=(x|0)>0;while(1){b:{if(Da){T=0;break b}c=p[j>>1];m=q[K>>2];n=w(c,m>>16)+(w(c,m&65535)>>16)|0;c=p[j+2>>1];m=q[K-4>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+4>>1];m=q[K-8>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+6>>1];m=q[K-12>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+8>>1];m=q[K-16>>2];T=((n+w(c,m>>16)|0)+(w(c,m&65535)>>16)<<1)+4|0;K=K+4|0}P=0;c:{if((l|0)<1){ga=0;break c}m=q[O-4>>2];c=q[O-8>>2]+q[O>>2]|0;ga=T-(((w(m>>16,aa)+w(c>>16,ea)|0)+(w(c&65535,ea)>>16)|0)+(w(m&65535,aa)>>16)<<2)|0;O=O+4|0}M=L+15|0;Q=L<<2;R=Q+d|0;ha=p[i+18>>1];ia=p[i+16>>1];la=p[i+14>>1];ma=p[i+12>>1];na=p[i+10>>1];oa=p[i+8>>1];pa=p[i+6>>1];qa=p[i+4>>1];ra=p[i+2>>1];sa=p[i>>1];while(1){E=w(P,1300)+b|0;q[E+1288>>2]=w(q[E+1288>>2],196314165)+907633515;n=E+(M<<2)|0;c=q[n>>2];m=(w(c>>16,sa)+Aa|0)+(w(c&65535,sa)>>16)|0;c=q[n-4>>2];m=(m+w(c>>16,ra)|0)+(w(c&65535,ra)>>16)|0;c=q[n-8>>2];m=(m+w(c>>16,qa)|0)+(w(c&65535,qa)>>16)|0;c=q[n-12>>2];m=(m+w(c>>16,pa)|0)+(w(c&65535,pa)>>16)|0;c=q[n-16>>2];m=(m+w(c>>16,oa)|0)+(w(c&65535,oa)>>16)|0;c=q[n-20>>2];m=(m+w(c>>16,na)|0)+(w(c&65535,na)>>16)|0;c=q[n-24>>2];m=(m+w(c>>16,ma)|0)+(w(c&65535,ma)>>16)|0;c=q[n-28>>2];m=(m+w(c>>16,la)|0)+(w(c&65535,la)>>16)|0;c=q[n-32>>2];m=(m+w(c>>16,ia)|0)+(w(c&65535,ia)>>16)|0;c=q[n-36>>2];m=(m+w(c>>16,ha)|0)+(w(c&65535,ha)>>16)|0;if((z|0)==16){r=m;c=p[i+20>>1];m=q[n-40>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+22>>1];m=q[n-44>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+24>>1];m=q[n-48>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+26>>1];m=q[n-52>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+28>>1];m=q[n-56>>2];n=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+30>>1];m=q[E+Q>>2];m=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0}if(za){break a}W=m<<4;m=q[E+1184>>2];n=(q[E+1284>>2]+w(I,m>>16)|0)+(w(I,m&65535)>>16)|0;q[E+1184>>2]=n;c=p[k>>1];s=(w(c,n>>16)+ya|0)+(w(c,n&65535)>>16)|0;c=q[E+1188>>2]-n|0;t=(m+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;m=2;if(!Ea){while(1){F=E+1184|0;A=m-1|0;x=F+(A<<2)|0;r=q[x>>2];n=m<<2;c=n+F|0;S=q[c>>2];q[x>>2]=t;n=q[F+(n|4)>>2];x=p[(A<<1)+k>>1];A=c;c=S-t|0;r=(r+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;q[A>>2]=r;c=p[(m<<1)+k>>1];s=(((w(x,t>>16)+s|0)+(w(x,t&65535)>>16)|0)+w(c,r>>16)|0)+(w(c,r&65535)>>16)|0;c=n-r|0;t=(S+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;m=m+2|0;if((y|0)>(m|0)){continue}break}}q[(E+(fa<<2)|0)+1184>>2]=t;d:{e:{f:{g:{A=q[R>>2];c=q[E+1280>>2];n=c&65535;m=c>>16;c=p[Ca>>1];X=((w(n,da)>>16)+w(m,da)|0)+((w(c,t>>16)+s|0)+(w(c,t&65535)>>16)<<1)<<2;x=q[C>>2];c=q[(E+(x<<2)|0)+1024>>2];Y=((w(m,$)+(w(n,$)>>16)|0)+w(c>>16,ba)|0)+(w(c&65535,ba)>>16)<<2;c=A-((((W+ga|0)-X|0)-Y>>3)+1>>1)|0;Z=q[E+1288>>2]<0;c=Z?0-c|0:c;c=(c|0)>-31744?c:-31744;F=(c|0)<30720?c:30720;t=F-u|0;s=t;h:{if(Fa){break h}s=t-V|0;if((t|0)>(V|0)){break h}if((t|0)>=(Ba|0)){break g}s=t+V|0}if((s|0)>=1024){m=(s&-1024)+wa|0;c=w(m<<16>>16,J);r=m+1024|0;n=w(r<<16>>16,J);break d}c=N;n=_;m=u;r=U;switch((s>>10)+1|0){case 1:break d;case 0:break f;default:break e}}c=N;n=_;m=u;r=U;if((t|0)>=0){break d}}c=va;n=N;m=xa;r=u;break d}m=(s&-1024|80)+u|0;r=m+1024|0;c=m<<16;n=w(-67108864-c>>16,J);c=w(0-c>>16,J)}S=q[E+1296>>2];E=w(P,56)+H|0;s=c;c=F-m<<16>>16;t=s+w(c,c)>>10;c=F-r<<16>>16;n=w(c,c)+n>>10;F=(t|0)<(n|0);s=F?r:m;q[E+28>>2]=s;c=F?m:r;q[E>>2]=c;q[E+32>>2]=S+(F?n:t);q[E+4>>2]=S+(F?t:n);c=c<<4;n=(Z?0-c|0:c)+T|0;q[E+24>>2]=n;c=s<<4;m=(Z?0-c|0:c)+T|0;q[E+52>>2]=m;c=n+W|0;q[E+8>>2]=c;n=m+W|0;q[E+36>>2]=n;m=c;c=A<<4;m=m-c|0;q[E+16>>2]=m;c=n-c|0;q[E+44>>2]=c;m=m-X|0;q[E+12>>2]=m;c=c-X|0;q[E+40>>2]=c;q[E+20>>2]=m-Y;q[E+48>>2]=c-Y;P=P+1|0;if((P|0)!=(B|0)){continue}break}t=0;c=(x-1|0)%40|0;x=(c|0)<0?c+40|0:c;q[C>>2]=x;c=0;s=(B|0)<2;if(!s){r=q[H+4>>2];m=1;while(1){n=q[(w(m,56)+H|0)+4>>2];A=(n|0)<(r|0);r=A?n:r;c=A?m:c;m=m+1|0;if((B|0)!=(m|0)){continue}break}}R=(x+D|0)%40<<2;M=R+(w(c,1300)+b|0)|0;c=q[M+384>>2];while(1){if((c|0)!=q[(R+(w(t,1300)+b|0)|0)+384>>2]){m=w(t,56)+H|0;q[m+4>>2]=q[m+4>>2]+134217727;q[m+32>>2]=q[m+32>>2]+134217727}t=t+1|0;if((B|0)!=(t|0)){continue}break}m=q[H+32>>2];r=q[H+4>>2];c=0;t=1;n=0;if(!s){while(1){x=w(t,56)+H|0;s=q[x+4>>2];A=(s|0)>(r|0);r=A?s:r;s=q[x+32>>2];x=(s|0)<(m|0);m=x?s:m;n=A?t:n;c=x?t:c;t=t+1|0;if((B|0)!=(t|0)){continue}break}}if((m|0)<(r|0)){ka((w(n,1300)+b|0)+Q|0,(w(c,1300)+b|0)+Q|0,1300-Q|0);n=w(n,56)+H|0;m=w(c,56)+H|0;q[n+24>>2]=q[m+52>>2];c=q[m+48>>2];q[n+16>>2]=q[m+44>>2];q[n+20>>2]=c;c=q[m+40>>2];q[n+8>>2]=q[m+36>>2];q[n+12>>2]=c;c=q[m+32>>2];q[n>>2]=q[m+28>>2];q[n+4>>2]=c}if(!((D|0)>(L|0)?!Ga:0)){c=L-D|0;o[c+e|0]=(q[M+544>>2]>>>9|0)+1>>>1;r=(c<<1)+f|0;m=q[h+R>>2];c=m<<16>>16;n=q[M+704>>2];c=((w(c,n&65535)>>16)+w(c,n>>16)|0)+w(n,(m>>15)+1>>1)|0;p[r>>1]=(c|0)>8388479?32767:(c|0)<-8388736?-32768:(c>>>7|0)+1>>>1|0;q[((q[a+4336>>2]-D<<2)+a|0)+1280>>2]=q[M+1024>>2];q[(q[a+4332>>2]-D<<2)+g>>2]=q[M+864>>2]}q[a+4336>>2]=q[a+4336>>2]+1;q[a+4332>>2]=q[a+4332>>2]+1;m=L+16|0;r=0;while(1){s=w(r,1300)+b|0;n=w(r,56)+H|0;q[s+1280>>2]=q[n+12>>2];q[s+1284>>2]=q[n+16>>2];c=q[n+8>>2];q[s+(m<<2)>>2]=c;q[(s+(q[C>>2]<<2)|0)+704>>2]=c;c=q[n>>2];q[(s+(q[C>>2]<<2)|0)+544>>2]=c;q[(s+(q[C>>2]<<2)|0)+864>>2]=q[n+24>>2]<<1;q[(s+(q[C>>2]<<2)|0)+1024>>2]=q[n+20>>2];c=q[s+1288>>2]+((c>>9)+1>>1)|0;q[s+1288>>2]=c;q[(s+(q[C>>2]<<2)|0)+384>>2]=c;q[s+1296>>2]=q[n+4>>2];r=r+1|0;if((B|0)!=(r|0)){continue}break}q[(q[C>>2]<<2)+h>>2]=ua;L=L+1|0;if((L|0)!=(v|0)){continue}break}}r=0;c=v<<2;while(1){e=w(r,1300)+b|0;d=e+c|0;a=q[d+4>>2];q[e>>2]=q[d>>2];q[e+4>>2]=a;a=q[d+60>>2];q[e+56>>2]=q[d+56>>2];q[e+60>>2]=a;a=q[d+52>>2];q[e+48>>2]=q[d+48>>2];q[e+52>>2]=a;a=q[d+44>>2];q[e+40>>2]=q[d+40>>2];q[e+44>>2]=a;a=q[d+36>>2];q[e+32>>2]=q[d+32>>2];q[e+36>>2]=a;a=q[d+28>>2];q[e+24>>2]=q[d+24>>2];q[e+28>>2]=a;a=q[d+20>>2];q[e+16>>2]=q[d+16>>2];q[e+20>>2]=a;a=q[d+12>>2];q[e+8>>2]=q[d+8>>2];q[e+12>>2]=a;r=r+1|0;if((B|0)!=(r|0)){continue}break}ca=ta;return}ja(37900,37881,364);G()}ja(37945,37881,422);G()}function af(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ca-208|0;ca=d;q[d+204>>2]=c;e=q[a>>2]+a|0;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{x:{y:{switch(b-4e3|0){default:z:{switch(b-10015|0){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 10:break a;case 0:break b;case 11:break d;case 9:break e;default:break z}}switch(b-11002|0){case 17:break w;case 16:break x;case 0:break f;default:break a};case 0:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];e=b-2048|0;if(e>>>0>3|(e|0)==2|((b|0)!=q[a+108>>2]?!q[a+14252>>2]:0)){break a}q[a+108>>2]=b;q[a+192>>2]=b;c=0;break a;case 1:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+108>>2];c=0;break a;case 2:b=q[d+204>>2];q[d+204>>2]=b+4;f=a;b=q[b>>2];A:{if((b|0)==-1e3){e=b;break A}c=-1;e=b;if((b|0)==-1){break A}if((b|0)<1){break a}e=500;if((b|0)<501){break A}a=w(q[a+112>>2],3e5);e=(a|0)<(b|0)?a:b}q[f+164>>2]=e;c=0;break a;case 3:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}f=q[a+14236>>2];if(!f){f=q[a+144>>2]/400|0}c=q[a+164>>2];B:{if((c|0)!=-1){if((c|0)!=-1e3){break B}c=q[a+112>>2];a=q[a+144>>2];c=w(c,a)+((w(a,60)|0)/(f|0)|0)|0;break B}c=(w(q[a+144>>2],10208)|0)/(f|0)|0}q[b>>2]=c;c=0;break a;case 22:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];C:{if((b|0)>=1){c=-1;if((b|0)<=q[a+112>>2]){break C}break a}c=-1;if((b|0)!=-1e3){break a}}q[a+120>>2]=b;c=0;break a;case 23:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+120>>2];c=0;break a;case 4:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];e=b-1101|0;if(e>>>0>4){break a}q[a+132>>2]=b;D:{switch(e|0){case 0:q[a+20>>2]=8e3;c=0;break a;case 1:q[a+20>>2]=12e3;c=0;break a;default:break D}}q[a+20>>2]=16e3;c=0;break a;case 5:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+132>>2];c=0;break a;case 8:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];e=b-1101|0;if(e>>>0>=5){c=-1;if((b|0)!=-1e3){break a}}q[a+128>>2]=b;E:{switch(e|0){case 0:q[a+20>>2]=8e3;c=0;break a;case 1:q[a+20>>2]=12e3;c=0;break a;default:break E}}q[a+20>>2]=16e3;c=0;break a;case 9:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+14240>>2];c=0;break a;case 16:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+184>>2]=b;c=0;break a;case 17:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+184>>2];c=0;break a;case 10:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>10){break a}q[a+44>>2]=b;q[d>>2]=b;oa(e,4010,d);c=0;break a;case 11:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+44>>2];c=0;break a;case 12:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+48>>2]=b;c=0;break a;case 13:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+48>>2];c=0;break a;case 14:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>100){break a}q[a+40>>2]=b;q[d+16>>2]=b;oa(e,4014,d+16|0);c=0;break a;case 15:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];c=0;break a;case 6:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+148>>2]=b;q[a+60>>2]=1-b;c=0;break a;case 18:case 19:case 26:case 30:case 32:case 33:case 34:case 35:case 38:case 39:case 44:case 45:case 48:break a;case 43:break j;case 42:break k;case 41:break l;case 40:break m;case 37:break n;case 36:break o;case 31:break p;case 29:break q;case 27:break r;case 25:break s;case 24:break t;case 21:break u;case 20:break v;case 7:break y;case 49:break c;case 28:break g;case 47:break h;case 46:break i}}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+148>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b+1>>>0>101){break a}q[a+140>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+140>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+152>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+152>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(b-3001>>>0>=2){c=-1;if((b|0)!=-1e3){break a}}q[a+124>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+124>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}e=q[a+144>>2]/400|0;q[b>>2]=e;c=0;if(q[a+108>>2]==2051){break a}q[b>>2]=e+q[a+116>>2];break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+144>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+18136>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b-8>>>0>16){break a}q[a+168>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+168>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b-5e3>>>0>9){break a}q[a+156>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+156>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+76>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+76>>2];c=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;c=-1;a=q[a>>2];if(a>>>0>1){break a}q[d+32>>2]=a;oa(e,4046,d+32|0);c=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+48>>2]=a;oa(e,4047,d+48|0);c=0;break a}b=q[a+4>>2];xc(a+188|0);c=0;la(a+14192|0,0,3948);oa(e,4028,0);Cb(a+b|0,q[a+180>>2],d+104|0);q[a+14252>>2]=1;q[a+14204>>2]=1065353216;p[a+14196>>1]=16384;q[a+14240>>2]=1105;q[a+14224>>2]=1001;q[a+14192>>2]=q[a+112>>2];i=a,j=pa(60)<<8,q[i+14200>>2]=j;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(b-1e3>>>0>=3){c=-1;if((b|0)!=-1e3){break a}}q[a+136>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=a;a=q[b>>2];q[c+176>>2]=a;q[d+64>>2]=a;c=oa(e,10024,d- -64|0);break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=a;a=q[b>>2];q[c+14256>>2]=a;q[d+80>>2]=a;c=oa(e,10026,d+80|0);break a}b=q[d+204>>2];q[d+204>>2]=b+4;g=q[b>>2];if(!g){c=-1;break a}if(!(!q[a+56>>2]|(q[a+14228>>2]&-2)!=1e3)){b=q[a+4>>2];q[g>>2]=1;if(q[a+12>>2]<1){c=0;break a}h=a+b|0;e=1;while(1){b=0;b=e?q[(w(f,10064)+h|0)+6084>>2]>9:b;q[g>>2]=b;c=0;e=b;f=f+1|0;if((f|0)>2]){continue}break}break a}if(q[a+184>>2]){q[g>>2]=q[a+18124>>2]>9;c=0;break a}c=0;q[g>>2]=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+96>>2]=a;c=oa(e,10015,d+96|0)}ca=d+208|0;return c}function Ed(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;j=ca-32|0;H=j;ca=j;D=j-((q[a+2336>>2]<<1)+15&-16)|0;ca=D;j=q[a+2328>>2];B=D-((j+q[a+2336>>2]<<2)+15&-16)|0;ca=B;g=q[a+2332>>2]<<2;F=B-(g+15&-16)|0;e=F;ca=e;g=e-(g+79&-16)|0;ca=g;v=o[a+2767|0];if((j|0)>=1){i=p[((o[a+2765|0]<<1&-4)+6416|0)+(o[a+2766|0]<<1)>>1]<<4;A=o[a+2770|0];while(1){n=(h<<2)+a|0;j=p[(h<<1)+d>>1];e=j<<14;q[n+4>>2]=e;f=w(A,196314165)+907633515|0;m=n;a:{if((j|0)>=1){e=e-1280|0}else{if((j|0)>-1){break a}e=e|1280}q[m+4>>2]=e}e=e+i|0;q[n+4>>2]=(f|0)<0?0-e|0:e;A=f+j|0;h=h+1|0;if((h|0)>2]){continue}break}}d=q[a+1288>>2];q[g>>2]=q[a+1284>>2];q[g+4>>2]=d;d=a+1340|0;j=q[d+4>>2];q[g+56>>2]=q[d>>2];q[g+60>>2]=j;d=a+1332|0;j=q[d+4>>2];q[g+48>>2]=q[d>>2];q[g+52>>2]=j;d=a+1324|0;j=q[d+4>>2];q[g+40>>2]=q[d>>2];q[g+44>>2]=j;d=a+1316|0;j=q[d+4>>2];q[g+32>>2]=q[d>>2];q[g+36>>2]=j;d=a+1308|0;j=q[d+4>>2];q[g+24>>2]=q[d>>2];q[g+28>>2]=j;d=a+1300|0;j=q[d+4>>2];q[g+16>>2]=q[d>>2];q[g+20>>2]=j;d=a+1292|0;j=q[d+4>>2];q[g+8>>2]=q[d>>2];q[g+12>>2]=j;b:{if(q[a+2324>>2]>=1){E=a+4|0;A=q[a+2336>>2];R=(v|0)<4;v=0;j=c;while(1){k=((v<<4&-32)+b|0)+32|0;n=ka(H,k,q[a+2340>>2]<<1);s=(v<<2)+b|0;y=q[s+16>>2];d=y>>31;i=d^d+y;h=z(i);f=y<>16;m=536870911/(d|0)|0;t=m<<16;e=t>>16;d=0-(w(d,e)+(w(e,f&65535)>>16)<<3)|0;d=((t+w(d,(m>>15)+1>>1)|0)+w(e,d>>16)|0)+(w(e,d&65528)>>16)|0;c:{if(i>>>0<=131071){i=h-15|0;m=2147483647>>>i|0;t=-2147483648>>i;m=((d|0)>(m|0)?m:(d|0)<(t|0)?t:d)<>15-h}t=r[a+2765|0];d=65536;i=q[a>>2];if((i|0)!=(y|0)){u=i;d=i>>31;i=z(d+i^d);d=u<>16)+(w(e,d&65535)>>16)|0;f=yg(d,d>>31,f,f>>31);f=u-(((da&536870911)<<3|f>>>29)&-8)|0;d=(w(e,f>>16)+d|0)+(w(e,f&65535)>>16)|0;e=(i-h|0)+29|0;d:{if((e|0)<=15){e=16-e|0;h=2147483647>>>e|0;f=-2147483648>>e;d=((d|0)>(h|0)?h:(d|0)<(f|0)?f:d)<>e-16:0}f=d&65535;i=d>>16;e=0;while(1){u=g+(e<<2)|0;C=q[u>>2];h=C<<16>>16;q[u>>2]=(w(h,i)+(w(f,h)>>16)|0)+w((C>>15)+1>>1,d);e=e+1|0;if((e|0)!=16){continue}break}}i=w(v,10)+b|0;q[a>>2]=y;e:{f:{g:{if(!(!q[a+4160>>2]|q[a+4164>>2]!=2|((t|0)==2|v>>>0>1))){p[i+96>>1]=0;p[i+98>>1]=0;p[i+100>>1]=0;p[i+102>>1]=0;p[i+104>>1]=0;p[i+100>>1]=4096;e=s;s=q[a+2308>>2];q[e>>2]=s;break g}if((t|0)!=2){f=q[a+2332>>2];d=E;break f}s=q[s>>2]}h:{if(!((v|0)==2&R?0:v)){h=q[a+2336>>2];f=q[a+2340>>2];d=(h-s|0)-f|0;if((d|0)<=2){break b}if((v|0)==2){ka(((h<<1)+a|0)+1348|0,c,q[a+2332>>2]<<2);f=q[a+2340>>2];h=q[a+2336>>2]}d=d-2|0;ib((d<<1)+D|0,((d+w(q[a+2332>>2],v)<<1)+a|0)+1348|0,k,h-d|0,f);if(!v){d=p[b+136>>1];m=(w(d,m&65535)>>16)+w(d,m>>16)<<2}if((s|0)<-1){break h}h=s+1|0;f=m&65535;m=m>>16;t=q[a+2336>>2];e=0;while(1){k=e^-1;d=p[(k+t<<1)+D>>1];q[(k+A<<2)+B>>2]=w(d,m)+(w(d,f)>>16);d=(e|0)==(h|0);e=e+1|0;if(!d){continue}break}break h}if((d|0)==65536|(s|0)<-1){break h}f=s+1|0;m=d&65535;t=d>>16;e=0;while(1){k=((e^-1)+A<<2)+B|0;u=q[k>>2];h=u<<16>>16;q[k>>2]=(w(h,t)+(w(h,m)>>16)|0)+w((u>>15)+1>>1,d);h=(e|0)!=(f|0);e=e+1|0;if(h){continue}break}}f=q[a+2332>>2];if((f|0)<1){break e}e=((A-s<<2)+B|0)+8|0;d=p[i+104>>1];s=p[i+102>>1];m=p[i+100>>1];t=p[i+98>>1];i=p[i+96>>1];h=0;while(1){u=h<<2;k=q[e>>2];x=w(i,k>>16)+(w(i,k&65535)>>16)|0;k=q[e-4>>2];x=(x+w(t,k>>16)|0)+(w(t,k&65535)>>16)|0;k=q[e-8>>2];x=(x+w(m,k>>16)|0)+(w(m,k&65535)>>16)|0;k=q[e-12>>2];x=(x+w(s,k>>16)|0)+(w(s,k&65535)>>16)|0;k=q[e-16>>2];k=(q[u+E>>2]+((x+w(d,k>>16)|0)+(w(d,k&65535)>>16)<<1)|0)+4|0;q[u+F>>2]=k;q[(A<<2)+B>>2]=k<<1;A=A+1|0;e=e+4|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}d=F}if((f|0)<1){break e}i=y<<10>>16;s=q[a+2340>>2];S=s>>>1|0;T=(y>>21)+1>>1;h=0;y=p[n+30>>1];m=p[n+28>>1];t=p[n+26>>1];k=p[n+24>>1];u=p[n+22>>1];C=p[n+20>>1];I=p[n+18>>1];J=p[n+16>>1];K=p[n+14>>1];L=p[n+12>>1];M=p[n+10>>1];N=p[n+8>>1];O=p[n+6>>1];P=p[n+4>>1];Q=p[n+2>>1];n=p[n>>1];while(1){i:{switch(s-10|0){default:ja(9349,9330,199);G();case 0:case 6:break i}}x=h<<2;e=x+g|0;f=q[e+60>>2];l=(w(n,f>>16)+S|0)+(w(n,f&65535)>>16)|0;f=q[e+56>>2];l=(l+w(f>>16,Q)|0)+(w(f&65535,Q)>>16)|0;f=q[e+52>>2];l=(l+w(f>>16,P)|0)+(w(f&65535,P)>>16)|0;f=q[e+48>>2];l=(l+w(f>>16,O)|0)+(w(f&65535,O)>>16)|0;f=q[e+44>>2];l=(l+w(f>>16,N)|0)+(w(f&65535,N)>>16)|0;f=q[e+40>>2];l=(l+w(f>>16,M)|0)+(w(f&65535,M)>>16)|0;f=q[e+36>>2];l=(l+w(f>>16,L)|0)+(w(f&65535,L)>>16)|0;f=q[e+32>>2];l=(l+w(f>>16,K)|0)+(w(f&65535,K)>>16)|0;f=q[e+28>>2];l=(l+w(f>>16,J)|0)+(w(f&65535,J)>>16)|0;f=q[e+24>>2];f=(l+w(f>>16,I)|0)+(w(f&65535,I)>>16)|0;U=g+(h+16<<2)|0;if((s|0)==16){l=q[e+20>>2];l=(f+w(l>>16,C)|0)+(w(l&65535,C)>>16)|0;f=q[e+16>>2];l=(l+w(u,f>>16)|0)+(w(u,f&65535)>>16)|0;f=q[e+12>>2];l=(l+w(k,f>>16)|0)+(w(k,f&65535)>>16)|0;f=q[e+8>>2];l=(l+w(t,f>>16)|0)+(w(t,f&65535)>>16)|0;f=q[e+4>>2];e=q[e>>2];f=(((l+w(m,f>>16)|0)+(w(m,f&65535)>>16)|0)+w(y,e>>16)|0)+(w(y,e&65535)>>16)|0}e=(f|0)>-134217728?f:-134217728;e=((e|0)<134217727?e:134217727)<<4;f=q[d+x>>2];x=e+f|0;j:{if((x|0)>=0){e=(e&f)>-1?x:-2147483648;break j}e=(e|f)>-1?2147483647:x}q[U>>2]=e;e=(w(i,e>>16)+w(e,T)|0)+(w(i,e&65535)>>16)|0;p[(h<<1)+j>>1]=(e|0)>8388479?32767:(e|0)<-8388736?-32768:(e>>>7|0)+1>>>1|0;f=q[a+2332>>2];h=h+1|0;if((f|0)>(h|0)){continue}break}}e=f<<2;d=e+g|0;h=q[d+4>>2];q[g>>2]=q[d>>2];q[g+4>>2]=h;h=q[d+60>>2];q[g+56>>2]=q[d+56>>2];q[g+60>>2]=h;h=q[d+52>>2];q[g+48>>2]=q[d+48>>2];q[g+52>>2]=h;h=q[d+44>>2];q[g+40>>2]=q[d+40>>2];q[g+44>>2]=h;h=q[d+36>>2];q[g+32>>2]=q[d+32>>2];q[g+36>>2]=h;h=q[d+28>>2];q[g+24>>2]=q[d+24>>2];q[g+28>>2]=h;h=q[d+20>>2];q[g+16>>2]=q[d+16>>2];q[g+20>>2]=h;h=q[d+12>>2];q[g+8>>2]=q[d+8>>2];q[g+12>>2]=h;j=(f<<1)+j|0;E=e+E|0;v=v+1|0;if((v|0)>2]){continue}break}}b=q[g+4>>2];a=a+1284|0;q[a>>2]=q[g>>2];q[a+4>>2]=b;b=q[g+60>>2];q[a+56>>2]=q[g+56>>2];q[a+60>>2]=b;b=q[g+52>>2];q[a+48>>2]=q[g+48>>2];q[a+52>>2]=b;b=q[g+44>>2];q[a+40>>2]=q[g+40>>2];q[a+44>>2]=b;b=q[g+36>>2];q[a+32>>2]=q[g+32>>2];q[a+36>>2]=b;b=q[g+28>>2];q[a+24>>2]=q[g+24>>2];q[a+28>>2]=b;b=q[g+20>>2];q[a+16>>2]=q[g+16>>2];q[a+20>>2]=b;b=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=b;ca=H+32|0;return}ja(9298,9330,144);G()}function Ma(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=0,n=0,o=0,r=0,s=0,t=0,v=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0;f=ca-192|0;ca=f;q[f+136>>2]=0;g=-2;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{D=q[a+12>>2];s=(D|0)/50|0;y=s>>3;l:{if((y|0)>(e|0)){break l}J=q[a>>2];n=q[a+4>>2];r=s>>2;h=s>>1;g=w((D|0)/25|0,3);g=(e|0)<(g|0)?e:g;A=f;m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{x:{y:{if((c|0)<=1){b=q[a+64>>2];g=(b|0)>(g|0)?g:b;break y}if(b){break x}}e=q[a+60>>2];if(!e){a=w(q[a+8>>2],g);if((a|0)<1){break l}la(d,0,a<<2);break l}if((g|0)>(s|0)){e=g;while(1){b=Ma(a,0,0,d,(e|0)<(s|0)?e:s);if((b|0)<0){g=b;break l}d=(w(b,q[a+8>>2])<<2)+d|0;e=e-b|0;if((e|0)>0){continue}break}break l}if((g|0)>=(s|0)){break w}m=1;if((g|0)>(h|0)){k=h;break u}if((e|0)==1e3){b=0;e=1e3;k=g;break s}k=(g|0)>(r|0)?(g|0)<(h|0)?r:g:g;break u}E=q[a+52>>2];e=q[a+56>>2];k=q[a+64>>2];oc(f+144|0,b,c);o=1;t=q[a+60>>2];if((t|0)<1){m=1;break t}z:{if(!(q[a+68>>2]?0:!((t|0)==1002|(e|0)!=1002))){if((e|0)==1002){e=1002;m=1;break t}if((t|0)==1002){break z}m=1;break t}if((e|0)==1002){break v}}m=w(r,q[a+8>>2]);H=1;break t}if((e|0)!=1002){m=1;b=0;k=g;break s}A=f-16|0;i=A;ca=i;m=1;k=g;b=0;C=1;break q}B=f-((w(r,q[a+8>>2])<<2)+15&-16)|0;e=B;ca=e;Ma(a,0,0,e,(k|0)>(r|0)?r:k);v=-1;if((g|0)<(k|0)){break m}A=e-16|0;i=A;ca=i;H=1;m=1;C=1;break q}b=0}v=-1;if((g|0)<(k|0)){break m}t=1002;C=1;g=1;if((e|0)==1002){break r}}C=0;t=e;g=w(q[a+8>>2],(h|0)>(k|0)?h:k)}A=A-((g<<1)+15&-16)|0;i=A;ca=i;F=(t|0)!=1002;if(F){break p}}F=0;t=1002;break o}B=a+n|0;if(q[a+60>>2]==1002){rb(B)}e=(w(k,1e3)|0)/q[a+12>>2]|0;q[a+32>>2]=(e|0)>10?e:10;A:{if(o){q[a+20>>2]=q[a+48>>2];e=a;if((t|0)==1e3){g=E-1101|0;if(g>>>0>=3){break A}g=w(g,4e3)+8e3|0}else{g=16e3}q[e+28>>2]=g}I=a+16|0;j=!b;g=0;e=A;while(1){B:{if(!Bd(B,I,j,!g,f+144|0,e,f+140|0)){h=q[f+140>>2];n=w(h,q[a+8>>2]);break B}v=-3;if(!j){break m}q[f+140>>2]=k;n=w(q[a+8>>2],k);if((n|0)>=1){la(e,0,n<<1)}h=k}e=(n<<1)+e|0;g=g+h|0;if((k|0)>(g|0)){continue}break}B=0;j=17;if(!(o&1)|(((q[f+164>>2]+z(q[f+172>>2])|0)+(q[a+56>>2]==1001?20:0)|0)-15|0)>c<<3){break o}C:{if((t|0)==1001){h=sa(f+144|0,12);if(!h){t=1001;break o}g=sa(f+144|0,1);e=Qa(f+144|0,256)+2|0;n=z(q[f+172>>2]);t=1001;o=q[f+164>>2];break C}h=1;g=sa(f+144|0,1);o=q[f+164>>2];n=z(q[f+172>>2]);e=c-((o+n|0)-25>>3)|0}v=e;c=c-e|0;e=((n+o|0)-32|0)>c<<3;n=e?0:v;q[f+148>>2]=q[f+148>>2]-n;c=e?0:c;e=e?0:h;break n}q[a+28>>2]=16e3;ja(34124,33038,389);G()}n=0;g=0;e=0}v=e;h=i-(((v?1:m)<<2)+15&-16)|0;ca=h;I=!v;H=I&H;if(!(!F|!H)){Ma(a,0,0,h,(k|0)>(r|0)?r:k);B=h}i=a+J|0;e=13;D:{E:{F:{G:{switch(E-1101|0){case 3:e=19;break F;case 4:e=21;break F;case 0:break F;case 1:case 2:break G;default:break E}}e=17}q[f+128>>2]=e;if(!ua(i,10012,f+128|0)){break D}ja(34144,33038,491);G()}if(E){break a}}q[f+112>>2]=q[a+48>>2];if(ua(i,10008,f+112|0)){break k}H:{if(!v){m=0;g=(g|0)!=0;o=h-16|0;ca=o;break H}o=h-((w(r,q[a+8>>2])<<2)+15&-16)|0;ca=o;if(!g){m=0;g=0;break H}q[f+96>>2]=0;if(ua(i,10010,f+96|0)){break j}jb(i,b+c|0,n,o,r,0);q[f+80>>2]=f+136;m=1;g=1;if(ua(i,4031,f+80|0)){break i}}q[f+64>>2]=j;if(ua(i,10010,f- -64|0)){break h}I:{if((t|0)!=1e3){e=q[a+60>>2];if(!(q[a+68>>2]|((e|0)==(t|0)|(e|0)<1))){if(ua(i,4028,0)){break g}}h=jb(i,b,c,d,(k|0)>(s|0)?s:k,f+144|0);break I}p[f+132>>1]=65535;e=w(q[a+8>>2],k);if((e|0)>=1){la(d,0,e<<2)}if(!(q[a+60>>2]!=1001|(q[a+68>>2]?m:0))){q[f+48>>2]=0;if(ua(i,10010,f+48|0)){break f}jb(i,f+132|0,2,d,y,0)}h=0}J:{if(C){break J}j=w(q[a+8>>2],k);if((j|0)<1){break J}e=0;while(1){s=(e<<2)+d|0;u[s>>2]=u[s>>2]+x(x(p[(e<<1)+A>>1])*x(30517578125e-15));e=e+1|0;if((j|0)!=(e|0)){continue}break}}q[f+32>>2]=f+132;if(ua(i,10015,f+32|0)){break e}A=h;s=q[q[f+132>>2]+60>>2];K:{if(g|I){break K}if(ua(i,4028,0)){break d}q[f+16>>2]=0;if(ua(i,10010,f+16|0)){break c}jb(i,b+c|0,n,o,r,0);q[f>>2]=f+136;if(ua(i,4031,f)){break b}b=q[a+8>>2];if((b|0)<1){break K}i=48e3/q[a+12>>2]|0;j=(w(b,y)<<2)+o|0;n=(w(b,k-y|0)<<2)+d|0;h=0;C=(D|0)<400;while(1){e=0;if(!C){while(1){E=w(b,e)+h<<2;F=E+n|0;l=u[s+(w(e,i)<<2)>>2];l=x(l*l);u[F>>2]=x(l*u[j+E>>2])+x(x(x(1)-l)*u[F>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}h=h+1|0;if((b|0)!=(h|0)){continue}break}}L:{if(!m){break L}b=q[a+8>>2];if((b|0)<1){break L}i=(y|0)>1?y:1;h=0;m=(D|0)<400;while(1){e=0;if(!m){while(1){j=w(b,e)+h<<2;u[j+d>>2]=u[j+o>>2];e=e+1|0;if((i|0)!=(e|0)){continue}break}}h=h+1|0;if((b|0)!=(h|0)){continue}break}if((b|0)<1){break L}h=48e3/q[a+12>>2]|0;e=w(b,y)<<2;i=e+d|0;m=e+o|0;j=0;o=(D|0)<400;while(1){e=0;if(!o){while(1){n=w(b,e)+j<<2;C=n+i|0;l=u[s+(w(e,h)<<2)>>2];l=x(l*l);u[C>>2]=x(l*u[C>>2])+x(x(x(1)-l)*u[m+n>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}}M:{if(!H){break M}b=q[a+8>>2];if((k|0)>=(r|0)){h=w(b,y);if((h|0)>=1){e=0;while(1){i=e<<2;u[i+d>>2]=u[i+B>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}}if((b|0)<1){break M}i=48e3/q[a+12>>2]|0;e=h<<2;h=e+d|0;B=e+B|0;j=0;m=(D|0)<400;while(1){e=0;if(!m){while(1){r=w(b,e)+j<<2;o=r+h|0;l=u[s+(w(e,i)<<2)>>2];l=x(l*l);u[o>>2]=x(l*u[o>>2])+x(x(x(1)-l)*u[r+B>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}break M}if((b|0)<1){break M}h=48e3/q[a+12>>2]|0;j=0;i=(D|0)<400;while(1){e=0;if(!i){while(1){m=w(b,e)+j<<2;r=m+d|0;l=u[s+(w(e,h)<<2)>>2];l=x(l*l);u[r>>2]=x(l*u[r>>2])+x(x(x(1)-l)*u[m+B>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}}b=q[a+40>>2];N:{if(!b){break N}e=q[a+8>>2];K=Da(+x(x(b|0)*x(.0006488140788860619))*.6931471805599453);b=w(e,k);if((b|0)<1){break N}l=x(K);e=0;while(1){h=(e<<2)+d|0;u[h>>2]=u[h>>2]*l;e=e+1|0;if((b|0)!=(e|0)){continue}break}}b=q[f+136>>2];d=q[f+172>>2];q[a+60>>2]=t;q[a+68>>2]=(g^1)&(v|0)!=0;q[a+84>>2]=(c|0)<2?0:b^d;v=(A|0)<0?A:k}g=v}ca=f+192|0;return g}ja(34279,33038,493);G()}ja(34438,33038,502);G()}ja(34561,33038,505);G()}ja(34706,33038,509);G()}ja(34847,33038,516);G()}ja(34438,33038,531);G()}ja(34918,33038,549);G()}ja(34847,33038,556);G()}ja(34438,33038,557);G()}ja(34561,33038,560);G()}ja(34124,33038,488);G()}function jb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,v=0,y=0,A=x(0),B=0,C=0,D=0,E=0,F=x(0),G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=x(0),$=0,aa=0,ba=0,da=0,ea=0;m=ca-80|0;ca=m;K=q[a+8>>2];q[m+12>>2]=0;q[m+8>>2]=0;v=q[a+12>>2];ng(a);j=-1;k=q[a>>2];g=q[k+36>>2];a:{if((g|0)<0){break a}y=w(q[a+16>>2],e);l=q[a+24>>2];e=q[k+44>>2];while(1){if(e<(h|0);h=h+1|0;if(n){continue}break a}break}if(!d|c>>>0>1275){break a}Q=q[k+4>>2];i=Q+2048|0;t=(((w(i,K)<<2)+a|0)+w(K,96)|0)+92|0;s=q[k+8>>2];e=s<<3;E=t+e|0;L=E+e|0;$=L+e|0;n=q[a+20>>2];R=q[k+32>>2];T=(K|0)>1?K:1;g=0;e=0-y<<2;while(1){j=g<<2;D=((w(g,i)<<2)+a|0)+92|0;q[j+(m+24|0)>>2]=D;q[j+(m+16|0)>>2]=(e+D|0)- -8192;g=g+1|0;if((T|0)!=(g|0)){continue}break}if(!((c|0)>1?b:0)){lg(a,y,h);bd(m+16|0,d,y,K,q[a+16>>2],k+16|0,a+84|0);j=(y|0)/q[a+16>>2]|0;break a}Y=q[k+12>>2];g=0;q[a+56>>2]=q[a+52>>2]!=0;if(!f){oc(m+32|0,b,c);f=m+32|0}O=1;if(!((v|0)!=1|(s|0)<1)){while(1){b=(g<<2)+t|0;A=u[b>>2];F=u[(g+s<<2)+t>>2];u[b>>2]=A>F?A:F;g=g+1|0;if((s|0)!=(g|0)){continue}break}}i=z(q[f+28>>2]);g=(i+q[f+20>>2]|0)-32|0;C=c<<3;b:{if((g|0)<(C|0)){O=0;b=0;if((g|0)!=1){break b}O=sa(f,15);if(!O){O=0;g=1;b=0;break b}i=z(q[f+28>>2])}q[f+20>>2]=(C-i|0)+32;g=C;b=1}aa=b;A=x(0);i=!h;e=C;if(!((g+16|0)>(C|0)|n)){b=0;c:{if(!sa(f,1)){break c}b=Qa(f,6);U=(za(f,b+4|0)+(16<>2]+z(q[f+28>>2])|0)-30|0)<=(C|0)){b=na(f,32951,2)}else{b=0}}V=b;g=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}g=g+3|0;if(!(i|(e|0)<(g|0))){H=sa(f,3);g=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0}b=k;e=n;i=l;B=t;if((g|0)<=(C|0)){g=sa(f,3)}else{g=0}vd(b,e,i,B,g,f,v,h);P=m-((s<<2)+15&-16)|0;B=P;ca=B;g=q[f+4>>2]<<3;e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;b=H?2:4;D=(h|0)!=0&g>>>0>=e+(b|1)>>>0;j=0;G=(l|0)<=(n|0);d:{if(G){break d}N=g-D|0;if(N>>>0>=b+e>>>0){j=sa(f,b);e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}q[(n<<2)+P>>2]=j;g=n+1|0;if((l|0)==(g|0)){break d}b=H?4:5;i=j;while(1){if(N>>>0>=b+e>>>0){i=sa(f,b)^i;j=i|j;e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}q[(g<<2)+P>>2]=i;g=g+1|0;if((l|0)!=(g|0)){continue}break}}g=0;e:{if(!D){break e}e=(h<<3)+1152|0;b=H<<2;if(r[e+(b+j|0)|0]==r[e+((b|2)+j|0)|0]){break e}g=sa(f,1)<<1}if(!G){b=(H<<2)+g|0;e=(h<<3)+1152|0;g=n;while(1){i=(g<<2)+P|0;q[i>>2]=o[e+(b+q[i>>2]|0)|0];g=g+1|0;if((l|0)!=(g|0)){continue}break}}Z=2;if(((q[f+20>>2]+z(q[f+28>>2])|0)-28|0)<=(C|0)){Z=na(f,32954,5)}e=(s<<2)+15&-16;W=B-e|0;b=W;ca=b;$b(k,b,h,v);B=6;D=c<<6;N=b-e|0;I=N;ca=I;c=wa(f);f:{if(G){e=D;break f}b=n;e=D;while(1){g=b;b=b+1|0;i=w(p[R+(b<<1)>>1]-p[R+(g<<1)>>1]|0,v)<48?i:48;J=(i|0)>(j|0)?j:i;M=g<<2;S=W+M|0;g=e;i=B;j=0;while(1){g:{e=g;G=j;if(((i<<3)+c|0)>=(g|0)|(j|0)>=q[S>>2]){break g}g=e-J|0;j=J+G|0;X=sa(f,i);c=wa(f);i=1;if(X){continue}}break}q[M+N>>2]=G;B=(G|0)>0?(B|0)>2?B-1|0:2:B;if((b|0)!=(l|0)){continue}break}}J=I-((s<<2)+15&-16)|0;b=J;ca=b;i=5;if((c+48|0)<=(e|0)){i=na(f,32958,7)}e=D+(wa(f)^-1)|0;g=0;S=1<>>0<2){b=0;c=0;break h}b=0;c=0;if(!H){break h}b=(e|0)>=((h<<3)+16|0);c=b<<3}j=Ob(j,G,R,N,W,i,ba,da,ea-c|0,m+4|0,I,J,M,v,h,f,0,0,0);ud(k,n,l,t,J,f,v);e=(((Q|0)/2|0)-y<<2)- -8192|0;while(1){i=q[(m+24|0)+(g<<2)>>2];ra(i,i+(y<<2)|0,e);g=g+1|0;if((T|0)!=(g|0)){continue}break}i=w(s,v);g=B-(i+15&-16)|0;ca=g;e=g-((w(v,y)<<2)+15&-16)|0;ca=e;Lb(0,k,n,l,e,(v|0)==2?e+(y<<2)|0:0,g,0,I,X,Z,q[m+8>>2],q[m+12>>2],P,D-c|0,q[m+4>>2],f,h,j,a+40|0,0,q[a+36>>2],q[a+32>>2]);i:{if(b){b=za(f,1);Pb(k,n,l,t,J,M,((C-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,v);if(!b){break i}ld(k,e,g,h,v,y,n,l,t,E,L,I,q[a+40>>2]);break i}Pb(k,n,l,t,J,M,((C-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,v)}if(!(aa^1|(i|0)<1)){g=0;while(1){q[(g<<2)+t>>2]=-1042284544;g=g+1|0;if((i|0)!=(g|0)){continue}break}}ad(k,e,m+16|0,t,n,(l|0)>(Y|0)?Y:l,v,K,H,h,q[a+16>>2],O);g=0;while(1){b=q[a+60>>2];c=(b|0)>15?b:15;q[a+60>>2]=c;b=q[a+64>>2];e=(b|0)>15?b:15;q[a+64>>2]=e;b=q[(m+16|0)+(g<<2)>>2];Ta(b,b,e,c,q[k+44>>2],u[a+72>>2],u[a+68>>2],q[a+80>>2],q[a+76>>2],q[k+60>>2],Q);if(h){c=q[k+44>>2];b=b+(c<<2)|0;Ta(b,b,q[a+60>>2],U,y-c|0,u[a+68>>2],A,q[a+76>>2],V,q[k+60>>2],Q)}g=g+1|0;if((T|0)!=(g|0)){continue}break}q[a+64>>2]=q[a+60>>2];F=u[a+68>>2];u[a+68>>2]=A;u[a+72>>2]=F;b=q[a+76>>2];q[a+76>>2]=V;q[a+80>>2]=b;q[a+60>>2]=U;if(h){q[a+80>>2]=V;u[a+72>>2]=A;q[a+64>>2]=U}if((v|0)==1){b=s<<2;ka(b+t|0,t,b)}b=s<<1;j:{if(H){if((s|0)<1){break j}b=(b|0)>1?b:1;h=0;while(1){c=h<<2;e=c+E|0;A=u[e>>2];F=u[c+t>>2];u[e>>2]=A>2]<10?x(x(S|0)*x(.0010000000474974513)):x(1);b=(b|0)>1?b:1;h=0;while(1){c=h<<2;e=c+$|0;A=x(F+u[e>>2]);_=u[c+t>>2];u[e>>2]=A<_?A:_;h=h+1|0;if((b|0)!=(h|0)){continue}break}}h=0;if((n|0)>0){while(1){b=h<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((n|0)!=(h|0)){continue}break}}if((l|0)<(s|0)){h=l;while(1){b=h<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((s|0)!=(h|0)){continue}break}}h=0;if((n|0)>0){while(1){b=h+s<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((n|0)!=(h|0)){continue}break}}if((l|0)<(s|0)){while(1){b=l+s<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;l=l+1|0;if((s|0)!=(l|0)){continue}break}}q[a+40>>2]=q[f+28>>2];bd(m+16|0,d,y,K,q[a+16>>2],k+16|0,a+84|0);q[a+52>>2]=0;j=-3;if(((q[f+20>>2]+z(q[f+28>>2])|0)-32|0)<=(C|0)){if(q[f+44>>2]){q[a+44>>2]=1}j=(y|0)/q[a+16>>2]|0}}ca=m+80|0;return j}function Vf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;h=ca+ -64|0;ca=h;y=h-((q[a+2328>>2]+q[a+2336>>2]<<2)+15&-16)|0;d=y;ca=d;n=d-((q[a+2336>>2]<<1)+15&-16)|0;ca=n;q[h+8>>2]=q[a+4244>>2]>>6;D=q[a+4248>>2];E=D>>6;q[h+12>>2]=E;if(q[a+2376>>2]){d=a+4210|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4202|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4194|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4186|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0}Qf(h+52|0,h+60|0,h+48|0,h+56|0,a+4|0,h+8|0,q[a+2332>>2],q[a+2324>>2]);k=q[a+4256>>2];a:{if(q[h+52>>2]>>q[h+56>>2]>2]>>q[h+60>>2]){o=k-1|0;k=q[a+4260>>2];break a}o=q[a+4260>>2]}C=s[a+4228>>1];d=q[a+4160>>2];g=q[a+4164>>2];e=a+4186|0;Jb(e,q[a+2340>>2],64881);f=q[a+2340>>2];ka(h+16|0,e,f<<1);m=((d|0)<1?d:1)<<1;u=p[((g|0)==2?m+1914|0:m+1918|0)>>1];b:{if(q[a+4160>>2]){break b}if(q[a+4164>>2]==2){d=16384-(s[a+4184>>1]+(s[a+4182>>1]+(s[a+4180>>1]+(s[a+4176>>1]+s[a+4178>>1]|0)|0)|0)|0)|0;C=w(p[a+4240>>1],(d<<16>>16>3277?d:3277)&65535)>>>14|0;break b}d=qb(e,f);d=(d|0)<134217728?d:134217728;d=(d|0)>4194304?d:4194304;u=(w(d<<3&65528,u)>>16)+w(d>>>13&65535,u)>>14;f=q[a+2340>>2];C=16384}d=q[a+2336>>2];i=(q[a+4172>>2]>>7)+1>>1;e=(d-i|0)-f|0;if((e|0)>2){H=q[a+4224>>2];g=e-2|0;e=g<<1;ib(e+n|0,(a+e|0)+1348|0,h+16|0,d-g|0,f);e=q[a+4248>>2];f=e>>31;v=f^e+f;f=z(v);j=e<>16;A=536870911/(x|0)|0;B=A<<16;e=B>>16;j=0-(w(e,x)+(w(e,j&65535)>>16)<<3)|0;e=((B+w(j,(A>>15)+1>>1)|0)+w(e,j>>16)|0)+(w(e,j&65528)>>16)|0;c:{if(v>>>0<=65535){f=f-16|0;j=2147483647>>>f|0;v=-2147483648>>f;e=((e|0)>(j|0)?j:(e|0)<(v|0)?v:e)<>16-f}v=q[a+2340>>2];f=v+g|0;x=q[a+2336>>2];if((f|0)<(x|0)){e=(e|0)<1073741823?e:1073741823;g=e&65535;e=e>>16;while(1){j=p[n+(f<<1)>>1];q[y+(f<<2)>>2]=(w(j,g)>>16)+w(e,j);f=f+1|0;if((x|0)>(f|0)){continue}break}}F=q[a+2324>>2];if((F|0)>=1){e=w(k,o);I=((((e|0)>128?e:128)<<2)+a|0)-508|0;j=p[m+1910>>1];A=w(p[a+2316>>1],4608);J=u<<16>>16;f=s[a+4184>>1];m=s[a+4182>>1];e=s[a+4180>>1];k=s[a+4178>>1];g=s[a+4176>>1];B=q[a+2332>>2];K=r[a+2765|0];while(1){d:{if((B|0)<=0){n=C<<16>>16;o=f<<16>>16;m=m<<16>>16;e=e<<16>>16;k=k<<16>>16;g=g<<16>>16;break d}n=C<<16>>16;o=f<<16>>16;m=m<<16>>16;e=e<<16>>16;k=k<<16>>16;g=g<<16>>16;f=(y+(d-i<<2)|0)+8|0;u=0;while(1){i=q[f>>2];t=w(i>>16,g)+(w(i&65535,g)>>16)|0;i=q[f-4>>2];t=(t+w(i>>16,k)|0)+(w(i&65535,k)>>16)|0;i=q[f-8>>2];t=(t+w(i>>16,e)|0)+(w(i&65535,e)>>16)|0;i=q[f-12>>2];t=(t+w(i>>16,m)|0)+(w(i&65535,m)>>16)|0;i=q[f-16>>2];t=(t+w(i>>16,o)|0)+(w(i&65535,o)>>16)|0;H=w(H,196314165)+907633515|0;i=q[I+(H>>>23&508)>>2];q[y+(d<<2)>>2]=((t+w(i>>16,n)|0)+(w(i&65535,n)>>16)<<2)+8;d=d+1|0;f=f+4|0;u=u+1|0;if((B|0)!=(u|0)){continue}break}}f=q[a+4172>>2];f=w(f>>16,655)+f+(w(f&65535,655)>>>16)|0;f=(f|0)<(A|0)?f:A;q[a+4172>>2]=f;i=(f>>7)+1>>1;C=K?w(n,J)>>>15|0:C;f=w(j,o)>>>15|0;m=w(j,m)>>>15|0;e=w(e,j)>>>15|0;k=w(k,j)>>>15|0;g=w(g,j)>>>15|0;l=l+1|0;if((F|0)!=(l|0)){continue}break}p[a+4184>>1]=f;p[a+4182>>1]=m;p[a+4180>>1]=e;p[a+4178>>1]=k;p[a+4176>>1]=g}d=q[a+1288>>2];g=(y+(x<<2)|0)+ -64|0;e=g;q[e>>2]=q[a+1284>>2];q[e+4>>2]=d;d=a+1340|0;e=q[d+4>>2];q[g+56>>2]=q[d>>2];q[g+60>>2]=e;d=a+1332|0;e=q[d+4>>2];q[g+48>>2]=q[d>>2];q[g+52>>2]=e;d=a+1324|0;e=q[d+4>>2];q[g+40>>2]=q[d>>2];q[g+44>>2]=e;d=a+1316|0;e=q[d+4>>2];q[g+32>>2]=q[d>>2];q[g+36>>2]=e;d=a+1308|0;e=q[d+4>>2];q[g+24>>2]=q[d>>2];q[g+28>>2]=e;d=a+1300|0;e=q[d+4>>2];q[g+16>>2]=q[d>>2];q[g+20>>2]=e;d=a+1292|0;e=q[d+4>>2];q[g+8>>2]=q[d>>2];q[g+12>>2]=e;if((v|0)>=10){u=q[a+2328>>2];if((u|0)>=1){M=v>>>1|0;j=E<<16>>16;N=(D>>21)+1>>1;d=q[g+28>>2];n=q[g+36>>2];o=q[g+44>>2];e=q[g+52>>2];f=q[g+60>>2];y=p[h+34>>1];x=p[h+32>>1];A=p[h+30>>1];B=p[h+28>>1];D=p[h+26>>1];E=p[h+24>>1];F=p[h+22>>1];I=p[h+20>>1];J=p[h+18>>1];K=p[h+16>>1];O=(v|0)<11;k=0;while(1){l=(w(K,f>>16)+M|0)+(w(K,f&65535)>>16)|0;f=g+(k<<2)|0;m=q[f+56>>2];l=(((l+w(J,m>>16)|0)+(w(J,m&65535)>>16)|0)+w(I,e>>16)|0)+(w(I,e&65535)>>16)|0;e=q[f+48>>2];l=(((l+w(F,e>>16)|0)+(w(F,e&65535)>>16)|0)+w(E,o>>16)|0)+(w(E,o&65535)>>16)|0;o=q[f+40>>2];l=(((l+w(D,o>>16)|0)+(w(D,o&65535)>>16)|0)+w(B,n>>16)|0)+(w(B,n&65535)>>16)|0;n=q[f+32>>2];l=(((l+w(A,n>>16)|0)+(w(A,n&65535)>>16)|0)+w(x,d>>16)|0)+(w(x,d&65535)>>16)|0;d=q[f+24>>2];d=(l+w(y,d>>16)|0)+(w(y,d&65535)>>16)|0;l=k+16|0;f=10;if(!O){while(1){t=p[(h+16|0)+(f<<1)>>1];L=q[g+(l+(f^-1)<<2)>>2];d=(d+w(t,L>>16)|0)+(w(t,L&65535)>>16)|0;f=f+1|0;if((v|0)!=(f|0)){continue}break}}t=g+(l<<2)|0;f=q[t>>2];d=(d|0)>-134217728?d:-134217728;d=((d|0)<134217727?d:134217727)<<4;l=f+d|0;e:{if((l|0)>=0){f=(d&f)>-1?l:-2147483648;break e}f=(d|f)>-1?2147483647:l}q[t>>2]=f;d=(w(j,f>>16)+w(f,N)|0)+(w(j,f&65535)>>16)|0;p[(k<<1)+c>>1]=(d|0)>8388479?32767:(d|0)<-8388736?-32768:(d>>>7|0)+1>>>1|0;d=n;n=o;o=e;e=m;k=k+1|0;if((u|0)!=(k|0)){continue}break}}c=g+(u<<2)|0;e=q[c+4>>2];d=a+1284|0;q[d>>2]=q[c>>2];q[d+4>>2]=e;e=q[c+60>>2];q[d+56>>2]=q[c+56>>2];q[d+60>>2]=e;e=q[c+52>>2];q[d+48>>2]=q[c+48>>2];q[d+52>>2]=e;e=q[c+44>>2];q[d+40>>2]=q[c+40>>2];q[d+44>>2]=e;e=q[c+36>>2];q[d+32>>2]=q[c+32>>2];q[d+36>>2]=e;e=q[c+28>>2];q[d+24>>2]=q[c+24>>2];q[d+28>>2]=e;e=q[c+20>>2];q[d+16>>2]=q[c+16>>2];q[d+20>>2]=e;e=q[c+12>>2];q[d+8>>2]=q[c+8>>2];q[d+12>>2]=e;p[a+4228>>1]=C;q[a+4224>>2]=H;q[b+12>>2]=i;q[b+8>>2]=i;q[b+4>>2]=i;q[b>>2]=i;ca=h- -64|0;return}ja(1959,1948,350);G()}ja(1922,1948,294);G()}function Bd(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0;m=ca-656|0;ca=m;k=m;q[k+652>>2]=0;q[k+640>>2]=0;q[k+644>>2]=0;a:{b:{c:{d:{e:{h=q[b+4>>2];if(h-1>>>0<2){if(d){while(1){q[(w(i,4264)+a|0)+2388>>2]=0;i=i+1|0;if((i|0)!=(h|0)){continue}break}}if(q[a+8544>>2]<(h|0)){n=Db(a+4264|0);h=q[b+4>>2]}if(!((h|0)!=1|q[a+8544>>2]!=2)){z=q[b+12>>2]==(w(q[a+2316>>2],1e3)|0)}f:{if(!(q[a+2388>>2]|(h|0)<1)){i=0;while(1){d=2;j=1;g:{h:{i:{j:{k:{h=q[b+16>>2];switch(h|0){case 0:case 10:break g;case 20:break i;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:break j;default:break k}}if((h|0)==40){break h}if((h|0)!=60){break j}d=4;j=3;break g}ja(9729,9714,146);G()}d=4;break g}d=4;j=2}h=w(i,4264)+a|0;q[h+2324>>2]=d;q[h+2392>>2]=j;d=q[b+12>>2]>>10;if(d>>>0>15|!(1<>2])+n|0;h=q[b+4>>2];i=i+1|0;if((h|0)>(i|0)){continue}break}}i=2;d=q[b>>2];l:{if((d|0)!=2){i=d;break l}if((h|0)!=2){break l}if(q[a+8540>>2]!=1){h=2;if(q[a+8544>>2]!=1){break l}}q[a+8536>>2]=0;q[a+8528>>2]=0;ka(a+6696|0,a+2432|0,300);h=q[b+4>>2];i=q[b>>2]}q[a+8544>>2]=h;q[a+8540>>2]=i;i=-200;if(q[b+8>>2]-8e3>>>0>4e4){break a}m:{if(q[a+2388>>2]|(c|0)==1){break m}n:{if((h|0)<1){break n}j=0;while(1){h=0;d=w(j,4264)+a|0;if(q[d+2392>>2]>0){i=d+2392|0;while(1){B=(d+(h<<2)|0)+2404|0,C=sa(e,1),q[B>>2]=C;h=h+1|0;if((h|0)>2]){continue}break}}B=d,C=sa(e,1),q[B+2416>>2]=C;h=q[b+4>>2];j=j+1|0;if((h|0)>(j|0)){continue}break}d=0;if((h|0)<=0){break n}while(1){i=w(d,4264)+a|0;q[i+2420>>2]=0;q[i+2424>>2]=0;q[i+2428>>2]=0;o:{if(!q[i+2416>>2]){break o}j=q[i+2392>>2];if((j|0)==1){q[i+2420>>2]=1;break o}j=na(e,q[(j<<2)+6384>>2],8);l=q[i+2392>>2];if((l|0)<1){break o}j=j+1|0;h=0;while(1){q[(i+(h<<2)|0)+2420>>2]=j>>>h&1;h=h+1|0;if((l|0)>(h|0)){continue}break}}h=q[b+4>>2];d=d+1|0;if((h|0)>(d|0)){continue}break}}if(c){break m}i=q[a+2392>>2];if((i|0)<1){break m}l=a+6684|0;j=0;while(1){if((h|0)>=1){t=j-1|0;r=j<<2;x=r+l|0;d=0;while(1){i=w(d,4264)+a|0;if(q[(r+i|0)+2420>>2]){p:{if((h|0)!=2|d){break p}tb(e,k+640|0);if(q[x>>2]){break p}bc(e,k+652|0)}u=i;y=e;h=j;q:{if(j){v=2;if(q[((t<<2)+i|0)+2420>>2]){break q}}v=0}ac(u,y,h,1,v);Yb(e,k,o[i+2765|0],o[i+2766|0],q[i+2328>>2]);h=q[b+4>>2]}d=d+1|0;if((h|0)>(d|0)){continue}break}i=q[a+2392>>2]}j=j+1|0;if((j|0)<(i|0)){continue}break}}if((h|0)!=2){break b}r:{switch(c|0){case 0:tb(e,k+640|0);if(!q[((q[a+2388>>2]<<2)+a|0)+6668>>2]){break d}break c;case 2:if(q[((q[a+2388>>2]<<2)+a|0)+2420>>2]==1){break e}break;default:break r}}q[k+640>>2]=p[a+8528>>1];q[k+644>>2]=p[a+8530>>1];break b}ja(9729,9714,152);G()}ja(9623,9714,107);G()}tb(e,k+640|0);if(q[((q[a+2388>>2]<<2)+a|0)+6684>>2]){break c}}bc(e,k+652|0);break b}q[k+652>>2]=0}h=q[b+4>>2];s:{if(q[k+652>>2]|(h|0)!=2){break s}h=2;if(q[a+8548>>2]!=1){break s}la(a+5548|0,0,1024);q[a+8428>>2]=0;o[a+6576|0]=10;q[a+6572>>2]=100;q[a+6640>>2]=1;h=q[b+4>>2]}l=(w(q[b+12>>2],h)|0)>=(w(q[b>>2],q[b+8>>2])|0);t:{if(!l){j=f;d=a+2328|0;break t}j=k-((w(q[a+2328>>2]+2|0,h)<<1)+15&-16)|0;m=j;ca=j;d=a+2328|0}i=q[d>>2];d=1;q[k>>2]=j;t=((i<<1)+j|0)+4|0;q[k+4>>2]=t;u:{v:{if(!c){d=!q[k+652>>2];break v}if(!q[a+8548>>2]){break v}d=0;h=q[b+4>>2];if((c|0)!=2|(h|0)!=2){break u}d=q[((q[a+6652>>2]<<2)+a|0)+6684>>2]==1}h=q[b+4>>2]}w:{x:{if((h|0)<1){break x}i=q[a+2388>>2];i=Rb(a,e,j+4|0,k+648|0,c,(c|0)!=2|(i|0)<1?((i|0)>0)<<1:(q[((i<<2)+a|0)+2416>>2]!=0)<<1);h=1;r=q[b+4>>2];q[a+2388>>2]=q[a+2388>>2]+1;n=i+n|0;if((r|0)<2){break x}while(1){y:{if(d){v=w(h,4264)+a|0;u=e;x=q[(h<<2)+k>>2]+4|0;A=k+648|0;y=c;i=q[a+2388>>2]-h|0;r=0;z:{if((i|0)<1){break z}r=(q[((w(h,4264)+a|0)+(i<<2)|0)+2416>>2]!=0)<<1;if((c|0)==2){break z}r=q[a+8548>>2]?1:2}n=Rb(v,u,x,A,y,r)+n|0;break y}la(q[(h<<2)+k>>2]+4|0,0,q[k+648>>2]<<1)}i=w(h,4264)+a|0;q[i+2388>>2]=q[i+2388>>2]+1;h=h+1|0;i=q[b+4>>2];if((h|0)<(i|0)){continue}break}if((i|0)!=2|q[b>>2]!=2){break x}Dd(a+8528|0,j,t,k+640|0,q[a+2316>>2],q[k+648>>2]);e=q[k+648>>2];break w}d=q[a+8532>>2];p[j>>1]=d;p[j+2>>1]=d>>>16;e=q[k+648>>2];d=(e<<1)+j|0;q[a+8532>>2]=s[d>>1]|s[d+2>>1]<<16}d=(w(q[b+8>>2],e)|0)/(w(p[a+2316>>1],1e3)|0)|0;q[g>>2]=d;j=d;d=q[b>>2];i=(d|0)==2;j=m-(((i?j:1)<<1)+15&-16)|0;m=j;ca=j;h=q[b+4>>2];if(!l){u=m;m=q[a+2328>>2];l=w(m+2|0,h)<<1;t=u-(l+15&-16)|0;ca=t;l=ka(t,f,l);q[k+4>>2]=(l+(m<<1)|0)+4;q[k>>2]=l}j=i?j:f;A:{if((((d|0)<(h|0)?d:h)|0)<1){break A}i=0;while(1){e=Aa((w(i,4264)+a|0)+2432|0,j,q[(i<<2)+k>>2]+2|0,e);d=q[b>>2];B:{if((d|0)!=2){break B}h=0;m=q[g>>2];if((m|0)<1){break B}while(1){l=h<<1;p[(l+i<<1)+f>>1]=s[j+l>>1];h=h+1|0;if((m|0)!=(h|0)){continue}break}}n=e+n|0;i=i+1|0;h=q[b+4>>2];if((i|0)>=(((d|0)<(h|0)?d:h)|0)){break A}e=q[k+648>>2];continue}}C:{D:{E:{if((d|0)!=2|(h|0)!=1){break E}if(z){break D}h=0;d=q[g>>2];if((d|0)<=0){break E}while(1){e=h<<2;p[(e|2)+f>>1]=s[e+f>>1];h=h+1|0;if((d|0)!=(h|0)){continue}break}}i=n;break C}i=Aa(a+6696|0,j,q[k>>2]+2|0,q[k+648>>2])+n|0;d=q[g>>2];if((d|0)<1){break C}h=0;while(1){p[(h<<2|2)+f>>1]=s[j+(h<<1)>>1];h=h+1|0;if((d|0)!=(h|0)){continue}break}}h=0;q[b+20>>2]=q[a+4164>>2]==2?w(q[(q[a+2316>>2]-8&-4)+9752>>2],q[a+2308>>2]):0;F:{if((c|0)==1){b=q[a+8544>>2];if((b|0)<1){break F}while(1){o[(w(h,4264)+a|0)+2312|0]=10;h=h+1|0;if((b|0)!=(h|0)){continue}break}break F}q[a+8548>>2]=q[k+652>>2]}}ca=k+656|0;return i}function cg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0,v=0,x=0,y=0;g=ca-48|0;k=g;ca=g;j=q[a+4584>>2];if((j|0)<321){if((j|0)==(j&-8)){q[k>>2]=0;h=j>>3;e=j>>2;d=h+e|0;q[k+4>>2]=d;f=d+h|0;q[k+8>>2]=f;c=f+e|0;q[k+12>>2]=c;n=g;g=j>>1;i=n-((g+c<<1)+15&-16)|0;ca=i;Hb(b,a+36|0,i,i+(c<<1)|0,q[a+4584>>2]);Hb(i,a+44|0,i,i+(f<<1)|0,g);Hb(i,a+52|0,i,i+(d<<1)|0,e);d=h-1|0;b=i+(d<<1)|0;f=p[b>>1]>>1;p[b>>1]=f;if((j|0)>=16){b=f;while(1){g=d-1|0;e=i+(g<<1)|0;c=p[e>>1]>>1;p[e>>1]=c;p[i+(d<<1)>>1]=b-c;e=(d|0)>1;b=c;d=g;if(e){continue}break}}p[i>>1]=s[i>>1]-s[a+92>>1];p[a+92>>1]=f;while(1){b=q[a+4584>>2];g=l<<2;t=g+(k+32|0)|0;j=a+g|0;h=q[j+60>>2];q[t>>2]=h;f=b;b=4-l|0;e=f>>(b>>>0<3?b:3);c=(e|0)>3;a:{if(!c){b=(h|0)>-1?h:2147483647;d=0;break a}m=e>>2;o=(m|0)>1?m:1;r=g+k|0;g=q[r>>2];d=0;f=0;while(1){b=p[i+(d+g<<1)>>1]>>3;f=w(b,b)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=f+h|0;b=(b|0)>-1?b:2147483647;d=0;if(!c){break a}c=q[r>>2];f=0;while(1){g=p[i+(c+(d+m|0)<<1)>>1]>>3;f=w(g,g)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=b+f|0;b=(b|0)>-1?b:2147483647;d=0;h=(e|0)<4;if(h){break a}e=m<<1;c=q[r>>2];f=0;while(1){g=p[i+(c+(d+e|0)<<1)>>1]>>3;f=w(g,g)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=b+f|0;b=(b|0)>-1?b:2147483647;d=0;if(h){break a}e=w(m,3);c=q[r>>2];f=0;while(1){g=p[i+(c+(f+e|0)<<1)>>1]>>3;d=w(g,g)+d|0;f=f+1|0;if((o|0)!=(f|0)){continue}break}}b=(d>>>1|0)+b|0;q[t>>2]=(b|0)>-1?b:2147483647;q[j+60>>2]=d;l=l+1|0;if((l|0)!=4){continue}break}d=0;b=q[a+144>>2];if((b|0)<=999){q[a+144>>2]=b+1;d=32767/((b>>4)+1|0)|0}f=128;g=q[k+32>>2];b=g+q[a+128>>2]|0;c=(b|0)>-1?b:2147483647;j=2147483647/(c|0)|0;b=a;e=q[b+96>>2];h=128;b:{if((c|0)>e<<3){break b}h=1024;if((c|0)<(e|0)){break b}c=e<<16>>16;c=(w(c,j>>16)+w(j,(e>>15)+1>>1)|0)+(w(c,j&65535)>>16)|0;h=c>>5&-2048|c>>>5&2047}n=b;b=((d|0)<(h|0)?h:d)<<16>>16;e=q[a+112>>2];c=j-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[n+112>>2]=b;b=2147483647/(b|0)|0;l=(b|0)<16777215?b:16777215;q[a+96>>2]=l;r=q[k+36>>2];b=r+q[a+132>>2]|0;b=(b|0)>-1?b:2147483647;e=2147483647/(b|0)|0;c=q[a+100>>2];c:{if((b|0)>c<<3){break c}f=1024;if((b|0)<(c|0)){break c}b=c<<16>>16;b=(w(b,e>>16)+w(e,(c>>15)+1>>1)|0)+(w(b,e&65535)>>16)|0;f=b>>5&-2048|b>>>5&2047}b=((d|0)<(f|0)?f:d)<<16>>16;h=e;e=q[a+116>>2];c=h-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[a+116>>2]=b;b=2147483647/(b|0)|0;q[a+100>>2]=(b|0)<16777215?b:16777215;t=q[k+40>>2];b=t+q[a+136>>2]|0;c=(b|0)>-1?b:2147483647;j=2147483647/(c|0)|0;f=128;b=a;e=q[b+104>>2];h=128;d:{if((c|0)>e<<3){break d}h=1024;if((c|0)<(e|0)){break d}c=e<<16>>16;c=(w(c,j>>16)+w(j,(e>>15)+1>>1)|0)+(w(c,j&65535)>>16)|0;h=c>>5&-2048|c>>>5&2047}n=b;b=((d|0)<(h|0)?h:d)<<16>>16;e=q[a+120>>2];c=j-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[n+120>>2]=b;b=2147483647/(b|0)|0;q[a+104>>2]=(b|0)<16777215?b:16777215;j=q[k+44>>2];b=j+q[a+140>>2]|0;b=(b|0)>-1?b:2147483647;e=2147483647/(b|0)|0;c=q[a+108>>2];e:{if((b|0)>c<<3){break e}f=1024;if((b|0)<(c|0)){break e}b=c<<16>>16;b=(w(b,e>>16)+w(e,(c>>15)+1>>1)|0)+(w(b,e&65535)>>16)|0;f=b>>5&-2048|b>>>5&2047}b=((d|0)<(f|0)?f:d)<<16>>16;h=e;e=q[a+124>>2];c=h-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[a+124>>2]=b;b=2147483647/(b|0)|0;q[a+108>>2]=(b|0)<16777215?b:16777215;i=0;b=g;e=0;d=0;while(1){f=b-l|0;f:{if((f|0)>=1){h=d<<2;u=b<<8;n=b;b=b>>>0<8388608;b=((b?u:n)|0)/((b?l:l>>8)+1|0)|0;q[h+(k+16|0)>>2]=b;b=(pa(b)<<16)-67108864>>16;e=w(b,b)+e|0;u=i;if((f|0)<=1048575){i=z(f);o=i-24|0;l=(i&1?32768:46214)>>>(i>>>1)|0;n=l;m=24-i|0;c=f;g:{if(!m){break g}c=f<>>56-i;if(f>>>0<=127){break g}c=f<>>m}c=w((w(n,w(c&127,13959168)>>>16|0)>>>16|0)+l>>>10|0,b);h:{if(!m){break h}if(f>>>0<=127){f=f<>>56-i;break h}f=f<>>m}b=w(l+(w(l,w(f&127,13959168)>>>16|0)>>>16|0)<<6&65472,b)+(c<<16)>>16}c=q[h+35328>>2];i=(u+w(c>>16,b)|0)+(w(c&65535,b)>>16)|0;break f}q[(k+16|0)+(d<<2)>>2]=256}d=d+1|0;if((d|0)!=4){c=d<<2;b=q[c+(k+32|0)>>2];l=q[(a+c|0)+96>>2];continue}break}d=(e|0)/4|0;if((e|0)>=4){c=z(d);b=24-c|0;i:{if(!b){break i}if(d>>>0<=127){d=d<>>56-c;break i}d=d<>>b}b=(c&1?32768:46214)>>>(c>>>1)|0;b=(w(w((w(b,w(d&127,13959168)>>>16|0)>>>16|0)+b|0,196608)>>16,45e3)>>16)-128|0}else{b=-128}d=La(b);v=a,x=(La(i)<<1)-32768|0,q[v+4712>>2]=x;c=q[a+4584>>2];f=q[a+4576>>2];b=(((r-q[a+100>>2]>>3&-2)+(g-q[a+96>>2]>>4)|0)+w(t-q[a+104>>2]>>4,3)|0)+(j-q[a+108>>2]>>2&-4)>>((c|0)==(w(f,20)|0));j:{if((b|0)<=0){d=d>>1;break j}if((b|0)>16383){break j}b=b<<16;e=z(b);g=(e&1?32768:46214)>>>(e>>>1)|0;g=(g+(w(g,(v=0,x=w(Ag(b,e+8|0)&127,13959168)>>>16|0,y=(e|0)==24,y?v:x))>>>16|0)|0)+32768|0;b=d<<16>>16;d=(w(g&65535,b)>>16)+w(b,g>>>16|0)|0}b=d>>7;q[a+4532>>2]=(b|0)<255?b:255;c=w(d<<16>>16,d)>>((c|0)==(w(f,10)|0)?21:20);g=q[a+76>>2];b=q[k+16>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+76>>2]=b;v=a,x=La(w(pa(b),3)-5120>>4),q[v+4696>>2]=x;g=q[a+80>>2];b=q[k+20>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+80>>2]=b;v=a+4700|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;g=q[a+84>>2];b=q[k+24>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+84>>2]=b;v=a+4704|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;g=q[a+88>>2];b=q[k+28>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+88>>2]=b;v=a+4708|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;ca=k+48|0;return}ja(35230,35219,106);G()}ja(35160,35219,104);G()}function kf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,t,v,z,A,D,E){var F=x(0),G=x(0),H=0,I=0,J=x(0),K=x(0),L=x(0),M=x(0),N=0,O=0,P=0,Q=x(0),R=0,S=0,T=0,U=x(0),V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=x(0);Z=ca;I=(w(c,f)<<2)+15&-16;N=Z-I|0;ca=N;R=N-I|0;T=R;ca=R;_=la(g,0,c<<2);H=(e|0)<1;if(!H){F=x(9-h|0);g=0;while(1){I=g<<2;h=g+5|0;u[I+R>>2]=x(x(w(h,h)|0)*x(.006200000178068876))+x(x(x(x(x(p[(g<<1)+i>>1])*x(.0625))+x(.5))+F)-u[I+24768>>2]);g=g+1|0;if((g|0)!=(e|0)){continue}break}}W=(f|0)>1?f:1;U=x(-31.899999618530273);a:{b:{c:{d:{while(1){if(!H){h=w(c,O);g=0;while(1){F=x(u[(g+h<<2)+a>>2]-u[(g<<2)+R>>2]);U=F>2]=u[a+I>>2]-u[I+R>>2];h=h+1|0;if((h|0)!=(e|0)){continue}break}if(!((f|0)!=2|(e|0)<1)){h=0;while(1){H=h<<2;I=H+g|0;G=u[I>>2];F=x(u[(c+h<<2)+a>>2]-u[H+R>>2]);u[I>>2]=F1){break c}h=e-2|0;I=0;break b}O=O+1|0;if((W|0)!=(O|0)){continue}break}h=(c<<2)+15&-16;g=T-h|0;ca=g;i=g-h|0;ca=i}ka(i,g,e<<2);h=e-2|0;$=(f|0)==2;I=0;break a}F=u[g>>2];i=1;while(1){h=(i<<2)+g|0;G=u[h>>2];F=x(F+x(-2));F=F>2]=F;i=i+1|0;if((i|0)!=(e|0)){continue}break}h=e-2|0;I=0;if((e|0)<=1){break b}i=h;while(1){I=(i<<2)+g|0;G=u[I>>2];F=x(u[I+4>>2]+x(-3));u[I>>2]=F0;i=i-1|0;if(I){continue}break}I=1}$=(f|0)==2;if((e|0)<1){break a}G=x(B(x(U+x(-12)),x(0)));i=0;while(1){H=i<<2;F=u[H+g>>2];F=x(C(x(x(u[H+T>>2]-(F0?0:0-O|0;q[X>>2]=32>>>((H|0)<5?H:5);i=i+1|0;if((i|0)!=(e|0)){continue}break}}f:{if(!(v|((n|0)<1|(o|0)<51))){aa=e-3|0;i=0;O=(e|0)>4;T=e-1<<2;v=0;while(1){V=w(c,v);g=V<<2;P=g+N|0;Y=b+g|0;K=u[Y>>2];u[P>>2]=K;F=K;g=1;if(I){while(1){E=(g+V<<2)+b|0;G=u[E-4>>2];F=x(F+x(1.5));J=u[E>>2];F=F>2]=F;i=J>x(G+x(.5))?g:i;g=g+1|0;if((g|0)!=(e|0)){continue}break}}if((i|0)>=1){F=u[P+(i<<2)>>2];g=i;while(1){E=g-1|0;H=P+(E<<2)|0;J=u[H>>2];F=x(F+x(2));G=u[(E+V<<2)+b>>2];S=F>2]=F;H=(g|0)>1;g=E;if(H){continue}break}}g=2;if(O){while(1){S=(g+V<<2)+b|0;E=S-8|0;L=u[E>>2];G=u[E+4>>2];H=L>G;Q=u[S+4>>2];F=u[S+8>>2];E=Q>F;M=H?L:G;J=E?Q:F;G=H?G:L;F=E?F:Q;H=G>F;Q=H?M:J;G=H?G:F;E=P+(g<<2)|0;F=u[E>>2];ba=F;L=u[S>>2];M=H?J:M;H=L>M^1;g:{if(!H){J=G>L?L:G;if(!(G>M^1)){break g}J=M>Q?Q:M;break g}J=G>M?M:G;if(!(G>L^1)){break g}J=Lx(J+x(-1)))){h:{if(!H){F=G>L?L:G;if(!(G>M^1)){break h}F=M>Q?Q:M;break h}F=G>M?M:G;if(!(G>L^1)){break h}F=L>2]=F;g=g+1|0;if((h|0)!=(g|0)){continue}break}}J=u[Y+4>>2];g=J>2];i:{if(FG){break i}F=G}G=u[P>>2];K=x(F+x(-1));u[P>>2]=G>K?G:K;F=u[P+4>>2];u[P+4>>2]=F>K?F:K;E=(V+aa<<2)+b|0;J=u[E>>2];K=u[E+4>>2];g=J>K;F=g?J:K;G=u[E+8>>2];j:{if(FG){break j}F=G}g=P+(h<<2)|0;G=u[g>>2];K=x(F+x(-1));u[g>>2]=G>K?G:K;g=P+T|0;F=u[g>>2];u[g>>2]=F>K?F:K;g=0;if((e|0)>=1){while(1){H=g<<2;E=H+P|0;G=u[E>>2];F=u[H+R>>2];u[E>>2]=F=(e|0)){break k}g=d;while(1){c=g<<2;b=c+N|0;u[b>>2]=B(x(u[a+c>>2]-u[b>>2]),x(0));g=g+1|0;if((g|0)!=(e|0)){continue}break}break k}if((d|0)>=(e|0)){break k}g=d;while(1){h=c+g<<2;i=h+N|0;G=u[i>>2];b=g<<2;v=b+N|0;F=x(u[v>>2]+x(-4));F=F>2]=F;G=u[v>>2];F=x(F+x(-4));F=F>2]=F;u[v>>2]=x(x(B(x(u[a+b>>2]-F),x(0)))+x(B(x(u[a+h>>2]-u[i>>2]),x(0))))*x(.5);g=g+1|0;if((g|0)!=(e|0)){continue}break}}c=(d|0)<(e|0);l:{if(!c){break l}g=d;while(1){b=g<<2;a=b+N|0;G=u[a>>2];F=u[b+z>>2];u[a>>2]=F>2];F=x(C(x(x(x(Da(+(F>2]=b;g=g+1|0;if((g|0)!=(e|0)){continue}break}}h=!l;if(!(h&(k|0)!=0|j|(d|0)>=(e|0))){g=d;while(1){a=(g<<2)+N|0;u[a>>2]=u[a>>2]*x(.5);g=g+1|0;if((g|0)!=(e|0)){continue}break}}c=(d|0)>=(e|0);if(!c){g=d;while(1){F=x(2);n:{if((g|0)>=8){F=x(.5);if((g|0)<12){break n}}a=(g<<2)+N|0;u[a>>2]=u[a>>2]*F}g=g+1|0;if((g|0)!=(e|0)){continue}break}}o:{if(!q[A>>2]){break o}b=(e|0)<19?e:19;if((b|0)<=(d|0)){break o}g=d;while(1){a=(g<<2)+N|0;u[a>>2]=u[a>>2]+x(x(r[(g+A|0)+44|0])*x(.015625));g=g+1|0;if((b|0)!=(g|0)){continue}break}}i=0;if(c){break f}b=0;j=(h|(j|0)!=0)&(k|0)!=0;l=(o<<1)/3|0;h=s[(d<<1)+m>>1];while(1){k=d<<2;a=k+N|0;F=u[a>>2];F=F>2]=F;a=h<<16;o=l;c=d+1|0;h=p[(c<<1)+m>>1];a=w(h-(a>>16)|0,f)<=49){F=x(F*x(8));q:{if(x(y(F))=i>>6|j)){i=l<<6;q[(d<<2)+_>>2]=i-b;break f}q[k+_>>2]=g;b=i;d=c;if((e|0)!=(d|0)){continue}break}break f}i=0;if((d|0)>=(e|0)){break f}while(1){q[(d<<2)+D>>2]=13;d=d+1|0;if((e|0)!=(d|0)){continue}break}}q[t>>2]=i;ca=Z;return U}function Ob(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,t,u,v,x){var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;y=ca;V=y;i=(i|0)>0?i:0;U=((i|0)>7)<<3;J=i-U|0;D=q[a+8>>2];a:{if((n|0)!=2){break a}I=r[(c-b|0)+25264|0];if((I|0)>(J|0)){I=0;break a}i=J-I|0;L=((i|0)>7)<<3;J=i-L|0}i=(D<<2)+15&-16;O=y-i|0;y=O;ca=y;M=y-i|0;y=M;ca=y;P=y-i|0;y=P;ca=y;H=n<<3;K=y-i|0;ca=K;N=(b|0)>=(c|0);if(!N){z=o+3|0;B=w((f-o|0)-5|0,n);E=q[a+32>>2];A=s[E+(b<<1)>>1];i=b;while(1){y=A<<16;C=i<<2;f=i+1|0;A=p[E+(f<<1)>>1];y=A-(y>>16)|0;F=w(y,3)<>4;q[C+P>>2]=(H|0)>(F|0)?H:F;q[C+K>>2]=(w(y,w(B,(i^-1)+c|0))<>6)-(y<>2];f=Q-1|0;C=1;b:{while(1){E=f+C>>1;if(!N){T=w(D,E);R=q[a+32>>2];z=s[R+(c<<1)>>1];S=q[a+52>>2];A=0;B=0;i=c;while(1){y=z<<16>>16;i=i-1|0;z=p[R+(i<<1)>>1];F=w(w(y-z|0,n),r[S+(i+T|0)|0])<>2;if((F|0)>=4){y=y+q[K+(i<<2)>>2]|0;y=(y|0)>0?y:0}F=i<<2;y=q[F+d>>2]+y|0;c:{if(!((y|0)>2]?!B:0)){B=q[e+F>>2];y=(y|0)<(B|0)?y:B;B=1;break c}y=(y|0)<(H|0)?0:H;B=0}A=y+A|0;if((b|0)<(i|0)){continue}break}i=(A|0)>(J|0);C=i?C:E+1|0;f=i?E-1|0:f;if((C|0)<=(f|0)){continue}E=b;if(N){break b}T=w(C,D);R=w(D,C-1|0);S=q[a+32>>2];B=s[S+(b<<1)>>1];A=q[a+52>>2];i=b;E=i;while(1){y=B<<16;f=i+1|0;B=p[S+(f<<1)>>1];y=w(B-(y>>16)|0,n);D=w(y,r[A+(i+R|0)|0])<=(Q|0)){y=q[(i<<2)+e>>2]}else{y=w(y,r[A+(i+T|0)|0])<>2}z=D>>2;if((D|0)>=4){z=q[K+(i<<2)>>2]+z|0;z=(z|0)>0?z:0}if((y|0)>=1){y=q[K+(i<<2)>>2]+y|0;y=(y|0)>0?y:0}F=z;z=i<<2;D=q[z+d>>2];F=F+((C|0)>1?D:0)|0;q[z+O>>2]=F;y=D+(y-F|0)|0;q[z+M>>2]=(y|0)>0?y:0;E=(D|0)>0?i:E;i=f;if((i|0)!=(c|0)){continue}break}break b}i=(J|0)<0;C=i?C:E+1|0;f=i?E-1|0:f;if((C|0)<=(f|0)){continue}break}E=b}K=(n|0)>1;d=64;B=0;y=0;while(1){d:{C=d+B>>1;f=c;A=0;z=0;if(!N){while(1){f=f-1|0;D=f<<2;i=(w(C,q[D+M>>2])>>6)+q[D+O>>2]|0;e:{if(!((i|0)>2]?!z:0)){z=q[e+D>>2];i=(i|0)<(z|0)?i:z;z=1;break e}i=(i|0)<(H|0)?0:H;z=0}A=i+A|0;if((b|0)<(f|0)){continue}break}f=(A|0)>(J|0);B=f?B:C;d=f?C:d;y=y+1|0;if((y|0)!=6){continue}i=0;A=c;z=0;while(1){A=A-1|0;d=A<<2;f=q[d+O>>2]+(w(q[d+M>>2],B)>>6)|0;y=f;F=d+k|0;f=(y|0)>=q[d+P>>2];y=z?y:f?y:(y|0)<(H|0)?0:H;d=q[d+e>>2];d=(d|0)>(y|0)?y:d;q[F>>2]=d;i=d+i|0;z=f|z;if((b|0)<(A|0)){continue}break}break d}i=0;f=(J|0)<0;B=f?B:C;d=f?C:d;y=y+1|0;if((y|0)!=6){continue}}break}B=c-1|0;f:{g:{if((E|0)>=(B|0)){f=c;y=I;break g}O=b+2|0;d=H+8|0;z=c;while(1){y=q[a+32>>2];A=p[y+(z<<1)>>1];f=B;M=p[y+(f<<1)>>1];B=A-M|0;N=f<<2;D=N+k|0;C=q[D>>2];F=J-i|0;y=p[y+(b<<1)>>1];Q=(F>>>0)/(A-y>>>0)|0;y=F+w(Q,y-A|0)+(y-M)|0;A=(C+w(Q,B)|0)+((y|0)>0?y:0)|0;y=q[P+N>>2];if((A|0)>=(((d|0)<(y|0)?y:d)|0)){h:{i:{if(u){if(!((z|0)<=(O|0)|(w(B,(z|0)>17?(v|0)<(z|0)?9:7:0)<>4<(A|0)?(f|0)<=(x|0):0))){va(t,0,1);break h}va(t,1,1);break i}if(!sa(t,1)){break h}}f=z;y=I;break f}A=A-8|0;C=q[D>>2];i=i+8|0}y=I;if((y|0)>=1){y=r[(f-b|0)+25264|0]}z=(A|0)<(H|0)?0:H;q[D>>2]=z;i=(z+(i-(C+I|0)|0)|0)+y|0;I=y;z=f;B=z-1|0;if((E|0)<(B|0)){continue}break}}J=J+U|0}j:{k:{l:{if((b|0)<(f|0)){m:{n:{o:{p:{x=L;q:{if((y|0)>=1){if(!u){break p}v=q[g>>2];v=(f|0)>(v|0)?v:f;q[g>>2]=v;Pa(t,v-b|0,(f-b|0)+1|0);d=q[g>>2];break q}q[g>>2]=0;d=0}d=(d|0)>(b|0);A=d?0:x;if(!L|!d){break n}if(!u){break o}va(t,q[h>>2],1);break m}d=Qa(t,(f-b|0)+1|0)+b|0;q[g>>2]=d;d=(b|0)<(d|0);A=d?0:L;if(!L|!d){break n}}W=h,X=sa(t,1),q[W>>2]=X;break m}q[h>>2]=0}L=o<<3;I=q[a+32>>2];d=p[I+(b<<1)>>1];u=(J-i|0)+A|0;i=p[I+(f<<1)>>1];t=(u>>>0)/(i-d>>>0)|0;v=w(t,d-i|0);A=d;i=b;while(1){x=A<<16;y=(i<<2)+k|0;i=i+1|0;A=p[I+(i<<1)>>1];q[y>>2]=q[y>>2]+w(t,A-(x>>16)|0);if((f|0)!=(i|0)){continue}break}i=u+v|0;z=d;y=b;while(1){t=z<<16;u=(y<<2)+k|0;y=y+1|0;z=p[I+(y<<1)>>1];t=z-(t>>16)|0;t=(i|0)<(t|0)?i:t;q[u>>2]=t+q[u>>2];i=i-t|0;if((f|0)!=(y|0)){continue}break}C=(n|0)>1?4:3;J=0-(n<<3)|0;x=0;r:{while(1){if((b|0)==(f|0)){break r}t=b<<2;u=t+k|0;i=q[u>>2];if((i|0)<=-1){break l}y=d<<16;v=i+x|0;i=b+1|0;d=p[I+(i<<1)>>1];z=d-(y>>16)<=2){y=0;E=v;v=v-q[e+t>>2]|0;A=(v|0)>0?v:0;B=E-A|0;q[u>>2]=B;v=w(n,z);if(!(q[h>>2]|((z|0)==2|(n|0)!=2))){y=q[g>>2]>(b|0)}v=v+y|0;E=v<<3;y=w(v,L+p[q[a+56>>2]+(b<<1)>>1]|0);b=(w(v,-21)+((z|0)==2?E>>2:0)|0)+(y>>1)|0;z=B+b|0;t:{if((z|0)>2)+b|0;break t}if((z|0)>=(w(v,24)|0)){break t}b=(y>>3)+b|0}y=l+t|0;z=(B+(v<<2)|0)+b|0;z=(((z|0)>0?z:0)>>>0)/(v>>>0)>>>3|0;q[y>>2]=z;v=q[u>>2];if((w(n,z)|0)>v>>3){z=v>>K>>3;q[y>>2]=z}v=(z|0)<8?z:8;q[y>>2]=v;q[m+t>>2]=(q[u>>2]+b|0)<=(w(v,E)|0);q[u>>2]=q[u>>2]+w(J,q[y>>2]);break s}b=v-H|0;A=(b|0)>0?b:0;q[u>>2]=v-A;q[l+t>>2]=0;q[m+t>>2]=1}if(A){b=A>>>C|0;v=l+t|0;y=q[v>>2];z=8-y|0;b=(b|0)<(z|0)?b:z;q[v>>2]=b+y;b=w(b,H);q[m+t>>2]=(b|0)>=(A-x|0);x=A-b|0}else{x=0}if(q[u>>2]<=-1){break k}b=i;if(q[l+t>>2]>-1){continue}break}ja(25368,25325,514);G()}q[j>>2]=x;if((c|0)>(f|0)){i=f;while(1){a=i<<2;d=a+l|0;b=a+k|0;e=q[b>>2]>>K>>3;q[d>>2]=e;if(q[b>>2]!=(w(e,H)|0)){break j}q[b>>2]=0;q[a+m>>2]=q[d>>2]<1;i=i+1|0;if((i|0)!=(c|0)){continue}break}}ca=V;return f}ja(25288,25325,391);G()}ja(25337,25325,442);G()}ja(25337,25325,513);G()}ja(25400,25325,524);G()}function Of(a,b,c,d){var e=0,f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=x(0),s=0,t=x(0),v=0,z=0,A=0,B=0,C=x(0),D=0,E=x(0),G=0,H=0,I=0;m=ca-1184|0;ca=m;s=q[a+4600>>2];e=q[a+4716>>2];l=x(x(x(q[a+4700>>2]+q[a+4696>>2]|0)*x(.5))*x(30517578125e-15));u[b+696>>2]=l;t=x(e|0);n=x(t*x(.0078125));f=x(1/(Da(+x(x(n+x(-20))*x(-.25)))+1));u[b+700>>2]=f;if(!q[a+4676>>2]){j=x(x(x(q[a+4532>>2])*x(-.00390625))+x(1));n=x(n-x(j*x(j*x(x(x(l*x(.5))+x(.5))*x(f+f)))))}a:{if(r[a+4765|0]==2){o[a+4766|0]=0;f=u[a+10060>>2];f=x(f+f);break a}i=w(p[a+4580>>1],5);e=(i|0)/2|0;if((i|0)>=2){i=q[a+4576>>2]<<1;C=x(i|0);f=x(0);k=i<<2;while(1){j=x(db(+x(C+x(ta(c,i))))*3.32192809488736);g=h?x(g+x(y(x(j-f)))):g;c=c+k|0;f=j;h=h+1|0;if((e|0)!=(h|0)){continue}break}}f=x(x(x(x(t*x(-.4000000059604645))*x(.0078125))+x(6))*x(x(1)-l));if(!(x(x(e-1|0)*x(.6000000238418579))>2];b:{if((c|0)<1){break b}s=d-(s<<2)|0;C=x(n+f);f=x(u[b+704>>2]*x(.0010000000474974513));E=x(x(.9399999976158142)/x(x(f*f)+x(1)));l=x(x(x(q[a+4672>>2])*x(152587890625e-16))+x(u[b+700>>2]*x(.009999999776482582)));t=x(x(1)-x(l*l));while(1){d=q[a+4576>>2];e=w(d,3);c=(q[a+4604>>2]-e|0)/2|0;gb(m+224|0,s,1,c);i=c<<2;ka(i+(m+224|0)|0,i+s|0,w(d,12));d=c+e<<2;gb(d+(m+224|0)|0,d+s|0,2,c);e=q[a+4588>>2];c=q[a+4636>>2];d=q[a+4604>>2];c:{if(q[a+4672>>2]>=1){Pf(m+112|0,m+224|0,l,d,c);break c}Uc(m+112|0,m+224|0,d,c+1|0)}f=u[m+112>>2];u[m+112>>2]=f+x(x(f*x(29999999242136255e-21))+x(1));f=Tc(m,m+112|0,q[a+4636>>2]);i=(w(z,96)+b|0)+244|0;Sc(i,m,q[a+4636>>2]);d=(z<<2)+b|0;f=x(F(f));u[d>>2]=f;c=q[a+4636>>2];if(q[a+4672>>2]>=1){g=u[(i+(c<<2)|0)-4>>2];if((c|0)>=2){h=c-2|0;while(1){g=x(u[i+(h<<2)>>2]-x(l*g));k=(h|0)>0;h=h-1|0;if(k){continue}break}}u[d>>2]=f*x(x(1)/x(x(l*g)+x(1)))}G=e<<2;fb(i,c,E);h=q[a+4636>>2];d:{if(q[a+4672>>2]>=1){c=h-1|0;D=(h|0)<2;if(!D){g=u[i+(c<<2)>>2];e=c;while(1){d=e-1|0;k=i+(d<<2)|0;g=x(u[k>>2]-x(l*g));u[k>>2]=g;k=(e|0)>1;e=d;if(k){continue}break}}d=(h|0)<1;if(d){break d}f=u[i>>2];n=x(t/x(x(l*f)+x(1)));f=x(n*f);u[i>>2]=f;k=1;if((h|0)!=1){while(1){e=i+(k<<2)|0;u[e>>2]=n*u[e>>2];k=k+1|0;if((h|0)!=(k|0)){continue}break}if(d){break d}k=(h|0)==1}H=i+(c<<2)|0;A=0;v=0;while(1){j=x(y(f));d=j>x(-1);g=d?j:x(-1);v=d?0:v;e=1;if((h|0)!=1){while(1){j=x(y(u[i+(e<<2)>>2]));d=j>g;g=d?j:g;v=d?e:v;e=e+1|0;if((h|0)!=(e|0)){continue}break}}if(g<=x(3.999000072479248)){break d}e=1;if(!D){while(1){j=f;d=i+(e<<2)|0;f=u[d>>2];u[d-4>>2]=j+x(l*f);e=e+1|0;if((h|0)!=(e|0)){continue}break}}f=x(x(1)/n);e=0;while(1){d=i+(e<<2)|0;u[d>>2]=f*u[d>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}fb(i,h,x(x(.9900000095367432)-x(x(x(x(x(A|0)*x(.10000000149011612))+x(.800000011920929))*x(g+x(-3.999000072479248)))/x(g*x(v+1|0)))));if(!D){g=u[H>>2];e=c;while(1){d=e-1|0;B=i+(d<<2)|0;g=x(u[B>>2]-x(l*g));u[B>>2]=g;B=(e|0)>1;e=d;if(B){continue}break}}f=u[i>>2];n=x(t/x(x(l*f)+x(1)));f=x(n*f);u[i>>2]=f;e=1;if(!k){while(1){d=i+(e<<2)|0;u[d>>2]=n*u[d>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}}A=A+1|0;if((A|0)!=10){continue}break}break d}d=0;c=0;if((h|0)<1){break d}while(1){g=x(-1);e=0;while(1){f=x(y(u[i+(e<<2)>>2]));k=f>g;g=k?f:g;c=k?e:c;e=e+1|0;if((h|0)!=(e|0)){continue}break}if(g<=x(3.999000072479248)){break d}fb(i,h,x(x(.9900000095367432)-x(x(x(x(x(d|0)*x(.10000000149011612))+x(.800000011920929))*x(g+x(-3.999000072479248)))/x(g*x(c+1|0)))));d=d+1|0;if((d|0)!=10){continue}break}}s=s+G|0;c=q[a+4580>>2];z=z+1|0;if((c|0)>(z|0)){continue}break}I=Ab(+x(C*x(-.1599999964237213)));h=0;e=0;if((c|0)<1){break b}e=(c|0)>0;f=x(I);while(1){d=(h<<2)+b|0;u[d>>2]=x(u[d>>2]*f)+x(1.2483305931091309);h=h+1|0;if((h|0)!=(c|0)){continue}break}}d=e;g=x(q[a+4532>>2]);j=x(x(g*x(.00390625))*x(x(x(x(x(x(q[a+4696>>2])*x(30517578125e-15))+x(-1))*x(.5))+x(1))*x(4)));e:{f:{g:{h=r[a+4765|0];if((h|0)==2){if(d){l=x(x(.20000000298023224)/x(q[a+4576>>2]));e=0;while(1){i=(e<<2)+b|0;f=x(l+x(x(3)/x(q[i+228>>2])));u[i+628>>2]=f+x(-1);u[i+644>>2]=x(x(1)-f)-x(j*f);e=e+1|0;if((e|0)!=(c|0)){continue}break}}f=x(x(x(g*x(-.26249998807907104))*x(.00390625))+x(-.25));break g}f=x(x(1.2999999523162842)/x(q[a+4576>>2]));g=x(f+x(-1));u[b+628>>2]=g;u[b+644>>2]=x(x(1)-f)+x(x(j*f)*x(-.6000000238418579));e=1;if((c|0)>1){i=b+644|0;while(1){s=e<<2;u[(s+b|0)+628>>2]=g;u[i+s>>2]=u[b+644>>2];e=e+1|0;if((e|0)!=(c|0)){continue}break}f=x(-.25);break g}if(!d){break e}f=x(-.25);j=x(0);break f}if((h|0)==2){if(!d){break e}j=x(x(F(u[a+10060>>2]))*x(x(x(x(1)-x(x(x(1)-u[b+700>>2])*u[b+696>>2]))*x(.20000000298023224))+x(.30000001192092896)));break f}j=x(0);if(!d){break e}}h=0;while(1){g=u[a+7172>>2];g=x(g+x(x(j-g)*x(.4000000059604645)));u[a+7172>>2]=g;d=(h<<2)+b|0;u[d+676>>2]=g;g=u[a+7176>>2];g=x(g+x(x(f-g)*x(.4000000059604645)));u[a+7176>>2]=g;u[d+660>>2]=g;h=h+1|0;if((h|0)!=(c|0)){continue}break}}ca=m+1184|0}function rg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;k=ca-32|0;l=k;ca=k;j=q[a+2316>>2];if((j|0)!=q[a+4156>>2]){g=q[a+2340>>2];m=32767/(g+1|0)|0;if((g|0)>=1){while(1){f=f+m|0;p[((e<<1)+a|0)+4052>>1]=f;e=e+1|0;if((g|0)!=(e|0)){continue}break}}q[a+4156>>2]=j;e=a+4148|0;q[e>>2]=0;q[e+4>>2]=3176576}a:{b:{if(!q[a+4160>>2]){c:{if(q[a+4164>>2]){break c}e=0;g=q[a+2340>>2];if((g|0)>0){while(1){j=(e<<1)+a|0;m=j+4052|0;f=p[m>>1];j=p[j+2344>>1]-f|0;p[m>>1]=f+((w(j&65535,16348)>>>16|0)+w(j>>>16|0,16348)|0);e=e+1|0;if((g|0)!=(e|0)){continue}break}}j=a+2772|0;e=0;m=q[a+2324>>2];d:{if((m|0)<=0){g=0;break d}g=0;f=0;while(1){n=q[((e<<2)+b|0)+16>>2];h=(n|0)>(f|0);f=h?n:f;g=h?e:g;e=e+1|0;if((m|0)!=(e|0)){continue}break}}e=q[a+2332>>2];ra(((e<<2)+a|0)+2772|0,j,w(e,(m<<2)-4|0));e=q[a+2332>>2];ka(j,((w(e,g)<<2)+a|0)+4|0,e<<2);g=q[a+2324>>2];if((g|0)<1){break c}e=q[a+4148>>2];f=0;while(1){j=e;e=q[((f<<2)+b|0)+16>>2]-e|0;e=j+w(e>>16,4634)+(w(e&65535,4634)>>>16)|0;q[a+4148>>2]=e;f=f+1|0;if((g|0)!=(f|0)){continue}break}}if(!q[a+4160>>2]){break b}}h=k-((d<<2)+79&-16)|0;ca=h;e=s[a+4228>>1];b=e<<16;f=q[a+4248>>2];g=f<<16>>16;f=((w(e,g)>>16)+w(g,b>>31)|0)+w((f>>15)+1>>1,b>>16)|0;g=f>>16;e=q[a+4148>>2];e:{if(!((e|0)<8388609?(f|0)<=2097151:0)){e=e>>16;e=w(e,e)-(w(g,g)<<5)|0;b=0;if((e|0)<1){break e}b=z(e);f=24-b|0;f:{if(!f){break f}if(e>>>0<=127){e=e<>>56-b;break f}e=e<>>f}b=w(w(e&127,13959168)>>>16|65536,(b&1?32768:46214)>>>(b>>>1)|0)&-65536;break e}j=e<<16>>16;m=f<<16>>16;e=((w(j,e>>16)-(((w(m,f&65535)>>16)+w(g,m)|0)+w(f,(f>>15)+1>>>1|0)<<5)|0)+(w(j,e&65535)>>16)|0)+w(e,(e>>15)+1>>1)|0;b=0;if((e|0)<1){break e}b=z(e);f=24-b|0;g:{if(!f){break g}if(e>>>0<=127){e=e<>>56-b;break g}e=e<>>f}b=(b&1?32768:46214)>>>(b>>>1)|0;b=(w(b,w(e&127,13959168)>>>16|0)>>>16|0)+b<<8}j=h- -64|0;f=255;while(1){e=f;f=e>>1;if((d|0)<(e|0)){continue}break}g=q[a+4152>>2];if((d|0)>=1){f=0;while(1){g=w(g,196314165)+907633515|0;q[j+(f<<2)>>2]=q[(((e&g>>24)<<2)+a|0)+2772>>2];f=f+1|0;if((f|0)!=(d|0)){continue}break}}q[a+4152>>2]=g;Ga(l,a+4052|0,q[a+2340>>2]);e=a+4140|0;f=q[e+4>>2];q[h+56>>2]=q[e>>2];q[h+60>>2]=f;e=a+4132|0;f=q[e+4>>2];q[h+48>>2]=q[e>>2];q[h+52>>2]=f;e=a+4124|0;f=q[e+4>>2];q[h+40>>2]=q[e>>2];q[h+44>>2]=f;e=a+4116|0;f=q[e+4>>2];q[h+32>>2]=q[e>>2];q[h+36>>2]=f;e=a+4108|0;f=q[e+4>>2];q[h+24>>2]=q[e>>2];q[h+28>>2]=f;e=a+4100|0;f=q[e+4>>2];q[h+16>>2]=q[e>>2];q[h+20>>2]=f;e=a+4092|0;f=q[e+4>>2];q[h+8>>2]=q[e>>2];q[h+12>>2]=f;k=a+4084|0;e=k;f=q[e+4>>2];q[h>>2]=q[e>>2];q[h+4>>2]=f;h:{i:{n=q[a+2340>>2];switch(n-10|0){case 0:case 6:break h;default:break i}}ja(1721,1788,149);G()}if((d|0)>=1){M=n>>>1|0;o=b<<10>>16;N=(b>>21)+1>>1;a=q[h+28>>2];g=q[h+36>>2];j=q[h+44>>2];b=q[h+52>>2];e=q[h+60>>2];r=p[l+30>>1];t=p[l+28>>1];u=p[l+26>>1];v=p[l+24>>1];x=p[l+22>>1];y=p[l+20>>1];A=p[l+18>>1];B=p[l+16>>1];C=p[l+14>>1];D=p[l+12>>1];E=p[l+10>>1];F=p[l+8>>1];H=p[l+6>>1];I=p[l+4>>1];J=p[l+2>>1];K=p[l>>1];f=0;while(1){i=(w(e>>16,K)+M|0)+(w(e&65535,K)>>16)|0;e=h+(f<<2)|0;m=q[e+56>>2];i=(((i+w(m>>16,J)|0)+(w(m&65535,J)>>16)|0)+w(b>>16,I)|0)+(w(b&65535,I)>>16)|0;b=q[e+48>>2];i=(((i+w(b>>16,H)|0)+(w(b&65535,H)>>16)|0)+w(j>>16,F)|0)+(w(j&65535,F)>>16)|0;j=q[e+40>>2];i=(((i+w(j>>16,E)|0)+(w(j&65535,E)>>16)|0)+w(g>>16,D)|0)+(w(g&65535,D)>>16)|0;g=q[e+32>>2];i=(((i+w(g>>16,C)|0)+(w(g&65535,C)>>16)|0)+w(a>>16,B)|0)+(w(a&65535,B)>>16)|0;a=q[e+24>>2];a=(i+w(a>>16,A)|0)+(w(a&65535,A)>>16)|0;if((n|0)==16){i=a;a=q[e+20>>2];i=(i+w(a>>16,y)|0)+(w(a&65535,y)>>16)|0;a=q[e+16>>2];i=(i+w(a>>16,x)|0)+(w(a&65535,x)>>16)|0;a=q[e+12>>2];i=(i+w(a>>16,v)|0)+(w(a&65535,v)>>16)|0;a=q[e+8>>2];i=(i+w(a>>16,u)|0)+(w(a&65535,u)>>16)|0;a=q[e+4>>2];i=(i+w(a>>16,t)|0)+(w(a&65535,t)>>16)|0;a=q[e>>2];a=(i+w(a>>16,r)|0)+(w(a&65535,r)>>16)|0}a=(a|0)>-134217728?a:-134217728;a=((a|0)<134217727?a:134217727)<<4;L=h+(f+16<<2)|0;e=q[L>>2];i=a+e|0;j:{if((i|0)>=0){e=(a&e)>-1?i:-2147483648;break j}e=(a|e)>-1?2147483647:i}q[L>>2]=e;i=(f<<1)+c|0;a=(w(e>>16,o)+w(e,N)|0)+(w(e&65535,o)>>16)|0;a=p[i>>1]+((a|0)>8388479?32767:(a|0)<-8388736?-32768:(a>>7)+1>>1)|0;a=(a|0)>-32768?a:-32768;p[i>>1]=(a|0)<32767?a:32767;a=g;g=j;j=b;b=m;f=f+1|0;if((f|0)!=(d|0)){continue}break}}a=h+(d<<2)|0;b=q[a+4>>2];q[k>>2]=q[a>>2];q[k+4>>2]=b;b=q[a+60>>2];q[k+56>>2]=q[a+56>>2];q[k+60>>2]=b;b=q[a+52>>2];q[k+48>>2]=q[a+48>>2];q[k+52>>2]=b;b=q[a+44>>2];q[k+40>>2]=q[a+40>>2];q[k+44>>2]=b;b=q[a+36>>2];q[k+32>>2]=q[a+32>>2];q[k+36>>2]=b;b=q[a+28>>2];q[k+24>>2]=q[a+24>>2];q[k+28>>2]=b;b=q[a+20>>2];q[k+16>>2]=q[a+16>>2];q[k+20>>2]=b;b=q[a+12>>2];q[k+8>>2]=q[a+8>>2];q[k+12>>2]=b;break a}la(a+4084|0,0,q[a+2340>>2]<<2)}ca=l+32|0}function uc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0;k=ca;x=k;e=q[a+268>>2];j=q[a+276>>2];k=k-((e+j<<2)+15&-16)|0;ca=k;u=a+24|0;n=ka(k,u,j<<2);k=q[a+296>>2];v=k+4|0;s=q[a+272>>2];h=k;while(1){o=(d|0)<(e|0)?d:e;yc(a,(j<<2)+n|0,c,h,o);r=o<<16;a:{b:{c:{d:{e:{t=q[a+276>>2];switch(t-18|0){case 18:break b;case 6:break d;case 0:break e;default:break c}}if((r|0)<1){break a}g=q[a+280>>2];y=g<<16>>16;h=0;while(1){l=w(h&65535,y)>>16;e=w(l,18)+v|0;i=p[e>>1];j=(h>>16<<2)+n|0;f=q[j>>2];m=(w(i,f&65535)>>16)+w(i,f>>16)|0;i=p[e+2>>1];f=q[j+4>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+4>>1];f=q[j+8>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+6>>1];f=q[j+12>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+8>>1];f=q[j+16>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+10>>1];f=q[j+20>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+12>>1];f=q[j+24>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+14>>1];f=q[j+28>>2];i=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;e=p[e+16>>1];f=q[j+32>>2];i=(i+w(e,f>>16)|0)+(w(e,f&65535)>>16)|0;e=w(g+(l^-1)|0,18)+v|0;l=p[e>>1];f=q[j+68>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+2>>1];f=q[j+64>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+4>>1];f=q[j+60>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+6>>1];f=q[j+56>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+8>>1];f=q[j+52>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+10>>1];f=q[j+48>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+12>>1];f=q[j+44>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+14>>1];f=q[j+40>>2];e=p[e+16>>1];j=q[j+36>>2];j=(((i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0)+w(e,j>>16)|0)+(w(e,j&65535)>>16)|0;e=(j>>5)+1>>1;p[b>>1]=(j|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;h=h+s|0;if((r|0)>(h|0)){continue}break}break a}j=0;if((r|0)<=0){break a}while(1){g=p[k+4>>1];h=(j>>16<<2)+n|0;e=q[h+92>>2]+q[h>>2]|0;f=(w(g,e&65535)>>16)+w(g,e>>16)|0;g=p[k+6>>1];e=q[h+88>>2]+q[h+4>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+8>>1];e=q[h+84>>2]+q[h+8>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+10>>1];e=q[h+80>>2]+q[h+12>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+12>>1];e=q[h+76>>2]+q[h+16>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+14>>1];e=q[h+72>>2]+q[h+20>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+16>>1];e=q[h+68>>2]+q[h+24>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+18>>1];e=q[h+64>>2]+q[h+28>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+20>>1];e=q[h+60>>2]+q[h+32>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+22>>1];e=q[h+56>>2]+q[h+36>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+24>>1];e=q[h+52>>2]+q[h+40>>2]|0;g=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;e=p[k+26>>1];h=q[h+48>>2]+q[h+44>>2]|0;h=(g+w(e,h>>16)|0)+(w(e,h&65535)>>16)|0;e=(h>>5)+1>>1;p[b>>1]=(h|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;j=j+s|0;if((r|0)>(j|0)){continue}break}break a}ja(2400,2420,139);G()}j=0;if((r|0)<=0){break a}while(1){g=p[k+4>>1];h=(j>>16<<2)+n|0;e=q[h+140>>2]+q[h>>2]|0;f=(w(g,e&65535)>>16)+w(g,e>>16)|0;g=p[k+6>>1];e=q[h+136>>2]+q[h+4>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+8>>1];e=q[h+132>>2]+q[h+8>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+10>>1];e=q[h+128>>2]+q[h+12>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+12>>1];e=q[h+124>>2]+q[h+16>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+14>>1];e=q[h+120>>2]+q[h+20>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+16>>1];e=q[h+116>>2]+q[h+24>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+18>>1];e=q[h+112>>2]+q[h+28>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+20>>1];e=q[h+108>>2]+q[h+32>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+22>>1];e=q[h+104>>2]+q[h+36>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+24>>1];e=q[h+100>>2]+q[h+40>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+26>>1];e=q[h+96>>2]+q[h+44>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+28>>1];e=q[h+92>>2]+q[h+48>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+30>>1];e=q[h+88>>2]+q[h+52>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+32>>1];e=q[h+84>>2]+q[h+56>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+34>>1];e=q[h+80>>2]+q[h+60>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+36>>1];e=q[h+76>>2]+q[h+64>>2]|0;g=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;e=p[k+38>>1];h=q[h+72>>2]+q[h+68>>2]|0;h=(g+w(e,h>>16)|0)+(w(e,h&65535)>>16)|0;e=(h>>5)+1>>1;p[b>>1]=(h|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;j=j+s|0;if((r|0)>(j|0)){continue}break}}d=d-o|0;if((d|0)>=2){ka(n,(o<<2)+n|0,t<<2);c=(o<<1)+c|0;h=q[a+296>>2];j=q[a+276>>2];e=q[a+268>>2];continue}break}ka(u,(o<<2)+n|0,t<<2);ca=x}function Ya(a,b){var c=0,d=x(0),e=x(0),f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=0,m=0,n=0,o=x(0),r=x(0),t=x(0),v=x(0),y=0,z=0,A=0,B=x(0),C=x(0),D=0,E=0,F=0,H=x(0),I=0,J=0,K=0,L=x(0),M=0,N=0,O=0,P=0,Q=x(0),R=x(0),S=x(0),T=x(0),U=x(0),V=x(0),W=x(0),X=x(0),Y=x(0),Z=x(0),_=0,$=x(0),aa=x(0),ba=x(0),da=x(0),ea=x(0);I=ca-32|0;ca=I;A=q[a+8>>2];q[I>>2]=1;F=a+12|0;k=1;while(1){c=h;l=c<<2;i=s[F+(l|2)>>1];h=c+1|0;k=w(p[l+F>>1],k);q[(h<<2)+I>>2]=k;if((i|0)!=1){continue}break}_=(A|0)>0?A:0;F=p[((h<<2)+a|0)+10>>1];a:{while(1){i=F;h=0;F=1;A=c;b:{c:{d:{e:{f:{if(c){F=p[((A<<2)+a|0)+10>>1];c=A<<1}else{c=0}switch(p[((c<<1)+a|0)+12>>1]-2|0){case 3:break c;case 1:break d;case 2:break e;case 0:break f;default:break b}}if((i|0)!=4){break a}c=b;i=q[(A<<2)+I>>2];if((i|0)<=0){break b}while(1){e=u[c>>2];d=u[c+32>>2];u[c+32>>2]=e-d;u[c>>2]=d+e;e=u[c+36>>2];d=u[c+4>>2];u[c+4>>2]=e+d;u[c+36>>2]=d-e;j=u[c+8>>2];g=u[c+40>>2];d=u[c+44>>2];f=x(x(g+d)*x(.7071067690849304));u[c+40>>2]=j-f;e=u[c+12>>2];d=x(x(d-g)*x(.7071067690849304));u[c+44>>2]=e-d;u[c+8>>2]=j+f;u[c+12>>2]=d+e;g=u[c+48>>2];f=u[c+16>>2];e=u[c+52>>2];u[c+48>>2]=f-e;d=u[c+20>>2];u[c+52>>2]=g+d;u[c+20>>2]=d-g;u[c+16>>2]=e+f;j=u[c+24>>2];g=u[c+60>>2];d=u[c+56>>2];f=x(x(g-d)*x(.7071067690849304));u[c+56>>2]=j-f;e=u[c+28>>2];d=x(x(g+d)*x(-.7071067690849304));u[c+60>>2]=e-d;u[c+28>>2]=d+e;u[c+24>>2]=j+f;c=c- -64|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}break b}N=q[(A<<2)+I>>2];if((i|0)==1){c=b;if((N|0)<1){break b}while(1){o=u[c>>2];B=u[c+16>>2];e=x(o+B);C=u[c+8>>2];r=u[c+24>>2];d=x(C+r);u[c+16>>2]=e-d;u[c>>2]=e+d;f=u[c+4>>2];e=u[c+20>>2];t=x(f+e);v=u[c+12>>2];d=u[c+28>>2];j=x(v+d);u[c+20>>2]=t-j;g=x(f-e);f=x(C-r);u[c+28>>2]=g+f;e=x(o-B);d=x(v-d);u[c+24>>2]=e-d;u[c+12>>2]=g-f;u[c+8>>2]=e+d;u[c+4>>2]=t+j;c=c+32|0;h=h+1|0;if((N|0)!=(h|0)){continue}break}break b}if((N|0)<1){break b}J=w(i,3);M=i<<1;z=N<<_;O=w(z,3);P=z<<1;l=q[a+48>>2];D=0;while(1){if((i|0)>=1){c=(w(D,F)<<3)+b|0;K=0;h=l;n=h;k=h;while(1){Q=u[c>>2];E=(M<<3)+c|0;R=u[E+4>>2];S=u[n>>2];j=u[E>>2];g=u[n+4>>2];T=x(x(S*R)+x(j*g));U=u[c+4>>2];H=x(T+U);V=u[k>>2];m=(i<<3)+c|0;L=u[m+4>>2];o=u[m>>2];f=u[k+4>>2];B=x(x(V*L)+x(o*f));C=u[h>>2];y=(J<<3)+c|0;r=u[y+4>>2];e=u[y>>2];d=u[h+4>>2];t=x(x(C*r)+x(e*d));v=x(B+t);u[E+4>>2]=H-v;j=x(x(j*S)-x(R*g));g=x(Q+j);f=x(x(o*V)-x(L*f));e=x(x(e*C)-x(r*d));d=x(f+e);u[E>>2]=g-d;u[c+4>>2]=v+H;u[c>>2]=g+d;g=x(U-T);f=x(f-e);u[m+4>>2]=g-f;e=x(Q-j);d=x(B-t);u[m>>2]=e+d;u[y+4>>2]=g+f;u[y>>2]=e-d;c=c+8|0;h=(O<<3)+h|0;n=(P<<3)+n|0;k=(z<<3)+k|0;K=K+1|0;if((i|0)!=(K|0)){continue}break}}D=D+1|0;if((N|0)!=(D|0)){continue}break}break b}J=q[(A<<2)+I>>2];if((J|0)<1){break b}O=i<<1;l=q[a+48>>2];M=J<<_;L=u[(l+(w(M,i)<<3)|0)+4>>2];P=M<<1;y=0;while(1){c=(w(y,F)<<3)+b|0;n=l;k=l;h=i;while(1){m=(i<<3)+c|0;o=u[m>>2];B=u[k>>2];C=u[m+4>>2];f=u[k+4>>2];r=x(x(o*B)-x(C*f));z=(O<<3)+c|0;t=u[z>>2];v=u[n>>2];e=u[z+4>>2];d=u[n+4>>2];j=x(x(t*v)-x(e*d));g=x(r+j);u[m>>2]=u[c>>2]-x(g*x(.5));f=x(x(B*C)+x(o*f));e=x(x(v*e)+x(t*d));d=x(f+e);u[m+4>>2]=u[c+4>>2]-x(d*x(.5));u[c>>2]=g+u[c>>2];u[c+4>>2]=d+u[c+4>>2];e=x(L*x(f-e));u[z>>2]=e+u[m>>2];d=x(L*x(r-j));u[z+4>>2]=u[m+4>>2]-d;u[m>>2]=u[m>>2]-e;u[m+4>>2]=d+u[m+4>>2];c=c+8|0;n=(P<<3)+n|0;k=(M<<3)+k|0;h=h-1|0;if(h){continue}break}y=y+1|0;if((J|0)!=(y|0)){continue}break}break b}z=q[(A<<2)+I>>2];if((z|0)<1){break b}E=q[a+48>>2];J=z<<_;c=w(J,i);h=E+(c<<4)|0;W=u[h+4>>2];X=u[h>>2];h=E+(c<<3)|0;Y=u[h+4>>2];Z=u[h>>2];M=i<<2;O=w(i,3);P=i<<1;m=0;while(1){if((i|0)>=1){c=(w(m,F)<<3)+b|0;h=c+(i<<3)|0;n=(P<<3)+c|0;k=(O<<3)+c|0;D=(M<<3)+c|0;K=0;while(1){$=u[c>>2];aa=u[c+4>>2];y=w(J,K);l=E+(y<<4)|0;ea=u[l>>2];Q=u[n+4>>2];R=u[n>>2];g=u[l+4>>2];S=x(x(ea*Q)+x(R*g));l=E+w(y,24)|0;T=u[l>>2];U=u[k+4>>2];H=u[k>>2];f=u[l+4>>2];V=x(x(T*U)+x(H*f));ba=x(S+V);l=E+(y<<3)|0;L=u[l>>2];o=u[h+4>>2];r=u[h>>2];e=u[l+4>>2];B=x(x(L*o)+x(r*e));l=E+(y<<5)|0;t=u[l>>2];v=u[D+4>>2];j=u[D>>2];d=u[l+4>>2];C=x(x(t*v)+x(j*d));da=x(B+C);u[c+4>>2]=aa+x(ba+da);g=x(x(R*ea)-x(Q*g));f=x(x(H*T)-x(U*f));H=x(g+f);e=x(x(r*L)-x(o*e));d=x(x(j*t)-x(v*d));o=x(e+d);u[c>>2]=$+x(H+o);r=x(g-f);t=x(e-d);v=x(x(W*r)+x(Y*t));g=x(aa+x(x(X*ba)+x(Z*da)));u[h+4>>2]=v+g;f=x($+x(x(X*H)+x(Z*o)));j=x(S-V);e=x(B-C);d=x(x(W*j)+x(Y*e));u[h>>2]=f-d;u[D+4>>2]=g-v;u[D>>2]=d+f;g=x(x(W*t)-x(Y*r));f=x(aa+x(x(Z*ba)+x(X*da)));u[n+4>>2]=g+f;e=x(x(Y*j)-x(W*e));d=x($+x(x(Z*H)+x(X*o)));u[n>>2]=e+d;u[k+4>>2]=f-g;u[k>>2]=d-e;D=D+8|0;k=k+8|0;n=n+8|0;h=h+8|0;c=c+8|0;K=K+1|0;if((i|0)!=(K|0)){continue}break}}m=m+1|0;if((z|0)!=(m|0)){continue}break}}c=A-1|0;if((A|0)>0){continue}break}ca=I+32|0;return}ja(31793,31777,76);G()}function lg(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=0,m=x(0),n=0,o=x(0),r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=x(0),C=0,D=0,E=0,G=0,H=x(0),I=0,J=0,K=x(0),L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0;k=ca-4320|0;f=k;ca=f;n=q[a+8>>2];L=(n|0)>1?n:1;U=0-b|0;t=q[a>>2];l=q[t+4>>2];g=l+2048|0;M=q[t+32>>2];v=q[t+8>>2];while(1){h=e<<2;d=((w(e,g)<<2)+a|0)+92|0;q[h+(f+4312|0)>>2]=d;q[h+(f+4304|0)>>2]=(d+(U<<2)|0)- -8192;e=e+1|0;if((L|0)!=(e|0)){continue}break}Q=((w(g,n)<<2)+a|0)+92|0;d=q[a+20>>2];C=q[a+52>>2];a:{if(!(q[a+56>>2]?0:!(d|(C|0)>4))){D=Q+w(n,96)|0;h=v<<3;y=((D+h|0)+h|0)+h|0;m=C?x(.5):x(1.5);r=q[a+24>>2];h=q[t+12>>2];E=(h|0)>(r|0)?r:h;z=k-((w(b,n)<<2)+15&-16)|0;ca=z;g=0;while(1){if((d|0)<(r|0)){G=w(g,v);e=d;while(1){k=e+G<<2;h=k+D|0;j=u[k+y>>2];H=x(u[h>>2]-m);u[h>>2]=j>H?j:H;e=e+1|0;if((r|0)!=(e|0)){continue}break}}g=g+1|0;if((L|0)!=(g|0)){continue}break}v=(d|0)>(E|0)?d:E;g=q[a+40>>2];if((n|0)>=1){r=0;while(1){if((d|0)<(E|0)){G=w(b,r);h=d;while(1){k=p[M+(h<<1)>>1];y=G+(k<>1]-k<=1){while(1){g=w(g,1664525)+1013904223|0;u[z+(e+y<<2)>>2]=g>>20;e=e+1|0;if((k|0)!=(e|0)){continue}break}}nb(z+(y<<2)|0,k,x(1));if((h|0)!=(v|0)){continue}break}}r=r+1|0;if((n|0)!=(r|0)){continue}break}}q[a+40>>2]=g;l=((l>>>1|0)-b<<2)- -8192|0;e=0;while(1){h=q[(f+4312|0)+(e<<2)>>2];ra(h,h+(b<<2)|0,l);e=e+1|0;if((L|0)!=(e|0)){continue}break}ad(t,z,f+4304|0,D,d,v,n,n,0,c,q[a+16>>2],0);break a}b:{if(!C){c=q[a+36>>2];dd(f+4312|0,f+112|0,2048,n,c);cd(f+1552|0,f+112|0,1328,620,f);c=720-q[f>>2]|0;q[a+48>>2]=c;H=x(1);break b}c=q[a+48>>2];H=x(.800000011920929)}d=c<<1;s=(d|0)<1024?d:1024;d=(s|0)>-1?s:-1;e=(d|0)<1?d:1;d=0-s|0;d=w(e,((d|0)<(s|0)?s:d)>>>1|0);X=(d|0)>1?d:1;N=k-((l<<2)+15&-16)|0;d=N;ca=d;Y=1024-s|0;Z=1024-(s>>1)|0;R=s<<2;V=(f-R|0)+4304|0;_=(l|0)/2|0;$=1024-c|0;A=b+l|0;aa=A<<2;I=2048-b|0;W=I<<2;S=d-(R+15&-16)|0;ca=S;O=f+208|0;P=q[t+60>>2];ba=2047-b<<2;da=2046-b<<2;ea=2045-b<<2;fa=2044-b<<2;ga=2043-b<<2;ha=2042-b<<2;ia=2041-b<<2;ja=2040-b<<2;ma=2039-b<<2;na=2038-b<<2;oa=2037-b<<2;pa=2036-b<<2;qa=2035-b<<2;sa=2034-b<<2;n=2033-b<<2;t=2032-b<<2;E=2031-b<<2;z=2030-b<<2;r=2029-b<<2;M=2028-b<<2;D=2027-b<<2;v=2026-b<<2;y=2025-b<<2;G=2024-b<<2;while(1){h=q[(f+4312|0)+(J<<2)>>2];e=0;while(1){d=e<<2;u[d+(f+112|0)>>2]=u[(d+h|0)+4e3>>2];e=e+1|0;if((e|0)!=1048){continue}break}c:{if(C){e=w(J,24);break c}ed(O,f,P,l,24,1024);u[f>>2]=u[f>>2]*x(1.000100016593933);e=1;while(1){d=(e<<2)+f|0;j=u[d>>2];m=j;o=x(j*x(-6400000711437315e-20));j=x(e|0);u[d>>2]=m+x(x(o*j)*j);e=e+1|0;if((e|0)!=25){continue}break}e=w(J,24);gd(Q+(e<<2)|0,f,24)}k=Q+(e<<2)|0;tg(V,k,S,s);ka(V,S,R);o=x(1);e=0;m=x(1);if((c|0)>=1){while(1){j=u[O+(e+Y<<2)>>2];o=x(o+x(j*j));j=u[O+(e+Z<<2)>>2];m=x(m+x(j*j));e=e+1|0;if((X|0)!=(e|0)){continue}break}}i=ra(h,h+(b<<2)|0,W);K=x(0);B=x(0);T=(A|0)<1;if(!T){m=x(F(x((m(e|0);o=d?o:x(m*o);h=e-(d?0:c)|0;d=h+$|0;u[i+(g+I<<2)>>2]=o*u[O+(d<<2)>>2];e=h+1|0;j=u[(i+(d-b<<2)|0)+4096>>2];B=x(B+x(j*j));g=g+1|0;if((A|0)!=(g|0)){continue}break}}u[f>>2]=u[i+ba>>2];u[f+4>>2]=u[i+da>>2];u[f+8>>2]=u[i+ea>>2];u[f+12>>2]=u[i+fa>>2];u[f+16>>2]=u[i+ga>>2];u[f+20>>2]=u[i+ha>>2];u[f+24>>2]=u[i+ia>>2];u[f+28>>2]=u[i+ja>>2];u[f+32>>2]=u[i+ma>>2];u[f+36>>2]=u[i+na>>2];u[f+40>>2]=u[i+oa>>2];u[f+44>>2]=u[i+pa>>2];u[f+48>>2]=u[i+qa>>2];u[f+52>>2]=u[i+sa>>2];u[f+56>>2]=u[i+n>>2];u[f+60>>2]=u[i+t>>2];u[f+64>>2]=u[i+E>>2];u[f+68>>2]=u[i+z>>2];u[f+72>>2]=u[i+r>>2];u[f+76>>2]=u[i+M>>2];u[f+80>>2]=u[i+D>>2];u[f+84>>2]=u[i+v>>2];u[f+88>>2]=u[i+y>>2];u[f+92>>2]=u[i+G>>2];h=i- -8192|0;d=h+(U<<2)|0;sg(d,k,d,A,f);g=0;d:{e:{if(!T){while(1){j=u[i+(g+I<<2)>>2];K=x(K+x(j*j));g=g+1|0;if((A|0)!=(g|0)){continue}break}if(x(K*x(.20000000298023224))x(0))){break d}}if(B=1){j=x(x(1)-m);g=0;while(1){d=i+(g+I<<2)|0;u[d>>2]=u[d>>2]*x(x(1)-x(j*u[P+(g<<2)>>2]));g=g+1|0;if((l|0)!=(g|0)){continue}break}}g=l;if((b|0)<=0){break d}while(1){d=i+(g+I<<2)|0;u[d>>2]=m*u[d>>2];g=g+1|0;if((A|0)>(g|0)){continue}break}}g=0;d=q[a+60>>2];e=d;j=x(-u[a+68>>2]);d=q[a+76>>2];Ta(N,h,e,e,l,j,j,d,d,0,0);if((l|0)>=2){while(1){h=g<<2;d=l+(g^-1)<<2;u[(h+i|0)- -8192>>2]=x(u[h+P>>2]*u[d+N>>2])+x(u[d+P>>2]*u[h+N>>2]);g=g+1|0;if((_|0)!=(g|0)){continue}break}}J=J+1|0;if((L|0)!=(J|0)){continue}break}}q[a+52>>2]=C+1;ca=f+4320|0}function Yf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;l=ca-16|0;u=l;ca=l;C=b-4|0;l=k+2|0;F=u-((l<<1)+15&-16)|0;t=F;ca=t;if((k|0)>=-1){A=(l|0)>1?l:1;l=0;while(1){m=l<<1;x=m-4|0;v=p[x+c>>1];x=p[b+x>>1];n=x+v|0;p[m+C>>1]=(n>>>1|0)+(n&1);B=m+F|0;m=x-v|0;m=(m>>1)+(m&1)|0;p[B>>1]=(m|0)<32767?m:32767;l=l+1|0;if((A|0)!=(l|0)){continue}break}}l=q[a+4>>2];p[C>>1]=l;p[C+2>>1]=l>>>16;v=q[a+8>>2];q[F>>2]=v;l=k<<1;m=l+C|0;q[a+4>>2]=s[m>>1]|s[m+2>>1]<<16;m=l+F|0;q[a+8>>2]=s[m>>1]|s[m+2>>1]<<16;m=l+15&-16;B=t-m|0;t=B;ca=t;l=0;A=t-m|0;x=A;ca=x;a:{if((k|0)<=0){l=(k<<1)+15&-16;x=x-l|0;m=x;ca=m;n=m-l|0;ca=n;break a}m=v>>>16|0;t=s[C>>1];while(1){n=l<<1;t=p[n+b>>1]+(t<<16>>16)|0;D=t;l=l+1|0;t=p[(l<<1)+C>>1];y=(D+(t<<1)>>>1|0)+1>>>1|0;p[n+B>>1]=y;p[n+A>>1]=t-y;if((k|0)!=(l|0)){continue}break}l=(k<<1)+15&-16;x=x-l|0;t=x;ca=t;n=t-l|0;ca=n;if((k|0)<1){break a}t=0;while(1){l=m;y=t<<1;m=p[(y+F|0)+4>>1];v=((m+(v<<16>>16)|0)+(l<<16>>16<<1)>>>1|0)+1>>>1|0;p[x+y>>1]=v;p[n+y>>1]=l-v;v=l;t=t+1|0;if((t|0)!=(k|0)){continue}break}}l=(w(j,10)|0)==(k|0);m=l?328:655;h=h<<16>>16;h=w(h,h);t=(w(m,h&65535)>>>16|0)+w(m,h>>>16|0)|0;x=Vc(u+4|0,B,x,a+12|0,k,t);q[u+8>>2]=x;A=Vc(u,A,n,a+20|0,k,t);q[u+12>>2]=A;B=(l?-1200:-600)+g|0;m=(B|0)>1?B:1;n=z(m);g=q[u>>2]+w(p[u+4>>1],3)|0;v=(g|0)<65536?g:65536;y=w(v,3);g=y+851968|0;h=g>>31;l=m<>31;g=536870911/(g>>16)<<16>>16;h=(w(g,l&65535)>>16)+w(g,l>>16)|0;l=yg(G,H,h,h>>31);l=D-(((da&536870911)<<3|l>>>29)&-8)|0;g=(w(l>>16,g)+h|0)+(w(g,l&65535)>>16)|0;l=w(j<<16>>16,600)+2e3|0;D=f;n=(n-E|0)+10|0;b:{if((n|0)<=-1){n=0-n|0;E=2147483647>>>n|0;h=-2147483648>>n;g=((g|0)>(E|0)?E:(g|0)<(h|0)?h:g)<>n:0}q[D>>2]=g;D=a;c:{if((g|0)<(l|0)){q[f>>2]=l;g=m-l|0;q[f+4>>2]=g;g=(g<<1)-l|0;h=g>>31;n=l<<16>>16;n=w(n,y+65536>>16)+(w(n,y&65535)>>16)|0;y=n>>31;E=z(h^g+h);h=g<>16)<<16>>16;h=(w(g,h&65535)>>16)+w(g,h>>16)|0;n=yg(h,h>>31,n,n>>31);n=G-(((da&536870911)<<3|n>>>29)&-8)|0;g=(w(n>>16,g)+h|0)+(w(g,n&65535)>>16)|0;h=(E-y|0)+13|0;d:{if((h|0)<=-1){h=0-h|0;n=2147483647>>>h|0;y=-2147483648>>h;g=((g|0)>(n|0)?n:(g|0)<(y|0)?y:g)<>h:0}g=(g|0)>0?g:0;h=(g|0)<16384?g:16384;break c}q[f+4>>2]=m-g;h=16384}g=p[a+28>>1];h=h-g|0;p[D+28>>1]=((w(h&65535,t<<16>>16)>>>16|0)+w(t,h>>>16|0)|0)+g;g=0;o[e|0]=0;e:{f:{g:{h:{i:{j:{if(i){q[u+8>>2]=0;q[u+12>>2]=0;Xa(u+8|0,d);break j}h=m<<3;k:{if(!s[a+30>>1]){l:{if((h|0)<(w(l,13)|0)){l=p[a+28>>1];break l}l=p[a+28>>1];if(((w(l,v&65535)>>16)+w(v>>16,l)|0)>818){break k}}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);q[u+8>>2]=0;q[u+12>>2]=0;q[f+4>>2]=0;q[f>>2]=m;o[e|0]=1;break i}m:{if((h|0)<(w(l,11)|0)){l=p[a+28>>1];break m}l=p[a+28>>1];if(((w(l,v&65535)>>16)+w(v>>16,l)|0)>327){break k}}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);q[u+8>>2]=0;q[u+12>>2]=0;break j}if((l|0)>=15566){Xa(u+8|0,d);g=16384;break j}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);g=p[a+28>>1]}if(r[e|0]!=1){break h}}d=s[a+32>>1]+(k-(j<<3)|0)|0;p[a+32>>1]=d;if((w(j,5)|0)>d<<16>>16){o[e|0]=0;break f}p[a+32>>1]=1e4;break g}p[a+32>>1]=0}if(r[e|0]){break e}}if(q[f+4>>2]>0){break e}q[f+4>>2]=1;q[f>>2]=(m|0)>2?B-1|0:1}l=j<<3;f=65536/(l|0)|0;d=q[u+12>>2];e=q[u+8>>2];if((j|0)>=1){f=f<<16>>16;i=p[a+30>>1];h=g-i|0;x=(w(f,h&65535)>>16)+w(f,h>>16)<<10;h=s[a+2>>1];n=(w(f,d-h<<16>>16)>>15)+1>>1;j=s[a>>1];B=(w(f,e-j<<16>>16)>>15)+1>>1;y=(l|0)>1?l:1;t=0;m=0-j|0;h=0-h|0;f=i<<10;while(1){i=t<<1;t=t+1|0;v=t<<1;j=p[v+F>>1];v=p[v+C>>1];A=(p[b+i>>1]+p[i+C>>1]|0)+(v<<1)|0;D=(c+i|0)-2|0;f=f+x|0;h=h-n|0;i=h<<16>>16;j=((w(j,f>>16)+w(i,v>>5)|0)+(w(j,f&64512)>>16)|0)+(w(i,v<<11&63488)>>16)|0;m=m-B|0;i=m<<16>>16;i=(j+w(i,A>>7)|0)+(w(i,A<<9&65024)>>16)|0;j=(i>>7)+1>>1;p[D>>1]=(i|0)>8388479?32767:(j|0)>-32768?j:-32768;if((t|0)!=(y|0)){continue}break}}if((k|0)>(l|0)){t=g>>6;A=g<<10&64512;h=0-(d<<16)>>16;i=0-(e<<16)>>16;while(1){f=l<<1;l=l+1|0;m=l<<1;j=p[m+F>>1];m=p[m+C>>1];v=(p[b+f>>1]+p[f+C>>1]|0)+(m<<1)|0;x=(c+f|0)-2|0;f=((((w(j,t)+w(h,m>>5)|0)+(w(j,A)>>16)|0)+(w(h,m<<11&63488)>>16)|0)+w(i,v>>7)|0)+(w(i,v<<9&65024)>>16)|0;j=(f>>7)+1>>1;p[x>>1]=(f|0)>8388479?32767:(j|0)>-32768?j:-32768;if((k|0)!=(l|0)){continue}break}}p[a+30>>1]=g;p[a+2>>1]=d;p[a>>1]=e;ca=u+16|0}function yb(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0;g=ca-80|0;ca=g;q[g+76>>2]=1024;y=g+55|0;v=g+56|0;a:{b:while(1){c:{if((n|0)<0){break c}if((2147483647-n|0)<(e|0)){q[14656]=61;n=-1;break c}n=e+n|0}d:{e:{f:{g:{k=q[g+76>>2];e=k;f=r[e|0];if(f){while(1){h:{f=f&255;i:{if(!f){f=e;break i}if((f|0)!=37){break h}f=e;while(1){if(r[e+1|0]!=37){break i}h=e+2|0;q[g+76>>2]=h;f=f+1|0;i=r[e+2|0];e=h;if((i|0)==37){continue}break}}e=f-k|0;if(a){Ha(a,k,e)}if(e){continue b}f=q[g+76>>2];e=f+1|0;u=-1;h=o[f+1|0];if(!(r[f+2|0]!=36|h-48>>>0>=10)){u=h-48|0;x=1;e=f+3|0}q[g+76>>2]=e;m=0;i=o[e|0];h=i-32|0;j:{if(h>>>0>31){f=e;break j}f=e;h=1<>2]=f;m=h|m;i=o[e+1|0];h=i-32|0;if(h>>>0>=32){break j}e=f;h=1<>>0>=10)){q[((e<<2)+d|0)-192>>2]=10;e=f+3|0;x=1;s=q[((o[f+1|0]<<3)+c|0)-384>>2];break l}if(x){break g}e=f+1|0;if(!a){q[g+76>>2]=e;x=0;s=0;break k}f=q[b>>2];q[b>>2]=f+4;x=0;s=q[f>>2]}q[g+76>>2]=e;if((s|0)>-1){break k}s=0-s|0;m=m|8192;break k}s=gc(g+76|0);if((s|0)<0){break g}e=q[g+76>>2]}j=-1;m:{if(r[e|0]!=46){break m}if(r[e+1|0]==42){f=o[e+2|0];n:{if(!(r[e+3|0]!=36|f-48>>>0>=10)){q[((f<<2)+d|0)-192>>2]=10;j=q[((o[e+2|0]<<3)+c|0)-384>>2];e=e+4|0;break n}if(x){break g}e=e+2|0;if(!a){j=0;break n}f=q[b>>2];q[b>>2]=f+4;j=q[f>>2]}q[g+76>>2]=e;break m}q[g+76>>2]=e+1;j=gc(g+76|0);e=q[g+76>>2]}h=0;while(1){l=h;i=-1;t=e;if(o[e|0]-65>>>0>57){break a}e=t+1|0;q[g+76>>2]=e;h=r[(o[t|0]+w(l,58)|0)+57055|0];if(h-1>>>0<8){continue}break}o:{p:{if((h|0)!=19){if(!h){break a}if((u|0)>=0){q[(u<<2)+d>>2]=h;e=(u<<3)+c|0;f=q[e+4>>2];q[g+64>>2]=q[e>>2];q[g+68>>2]=f;break p}if(!a){break d}fc(g- -64|0,h,b);break o}if((u|0)>-1){break a}}e=0;if(!a){continue b}}f=m&-65537;h=m&8192?f:m;i=0;u=57584;m=v;q:{z=a;A=s;r:{s:{t:{u:{v:{w:{x:{y:{z:{e=o[t|0];e=l?(e&15)==3?e&-33:e:e;A:{if((e|0)<=98){if((e|0)==67){break t}if((e|0)==83){break u}if((e|0)==88){break A}break e}B:{switch(e-99|0){case 18:l=q[g+64>>2];t=q[g+68>>2];u=57584;break x;case 11:e=0;C:{switch(l&255){case 0:q[q[g+64>>2]>>2]=n;continue b;case 1:q[q[g+64>>2]>>2]=n;continue b;case 2:f=q[g+64>>2];q[f>>2]=n;q[f+4>>2]=n>>31;continue b;case 3:p[q[g+64>>2]>>1]=n;continue b;case 4:o[q[g+64>>2]]=n;continue b;case 6:q[q[g+64>>2]>>2]=n;continue b;case 7:break C;default:continue b}}f=q[g+64>>2];q[f>>2]=n;q[f+4>>2]=n>>31;continue b;case 0:break q;case 16:break v;case 1:case 6:break y;case 12:break z;case 21:break A;case 13:break B;default:break e}}j=j>>>0>8?j:8;h=h|8;e=120}f=q[g+68>>2];t=f;l=q[g+64>>2];k=me(l,f,v,e&32);if(!(h&8)|!(l|f)){break w}h=(j|0)>-1?h&-65537:h;f=(l|0)!=0|(t|0)!=0;u=(e>>>4|0)+57584|0;i=2;break f}e=q[g+68>>2];t=e;l=q[g+64>>2];k=le(l,e,v);if(!(h&8)){break w}e=v-k|0;j=(e|0)<(j|0)?j:e+1|0;break w}e=q[g+68>>2];t=e;l=q[g+64>>2];if((e|0)<-1?1:(e|0)<=-1){t=0-(t+((l|0)!=0)|0)|0;l=0-l|0;q[g+64>>2]=l;q[g+68>>2]=t;i=1;u=57584;break x}if(h&2048){i=1;u=57585;break x}i=h&1;u=i?57586:57584}k=ke(l,t,v)}h=(j|0)>-1?h&-65537:h;f=(l|0)!=0|(t|0)!=0;if(l|t|j){break f}j=0;k=v;m=k;break e}e=q[g+64>>2];k=e?e:57594;e=je(k,j);m=e?e:j+k|0;h=f;j=e?e-k|0:j;break e}k=q[g+64>>2];if(j){break s}Fa(a,32,s,0,h);i=0;break r}q[g+12>>2]=0;q[g+8>>2]=q[g+64>>2];q[g+64>>2]=g+8;j=-1;k=g+8|0}f=k;e=0;D:{while(1){i=q[f>>2];if(!i){break D}i=ec(g+4|0,i);m=(i|0)<0;if(!(m|i>>>0>j-e>>>0)){f=f+4|0;e=e+i|0;if(j>>>0>e>>>0){continue}break D}break}i=-1;if(m){break a}}Fa(a,32,s,e,h);f=0;i=0;if(!e){break r}while(1){E:{i=q[k>>2];if(!i){break E}i=ec(g+4|0,i);f=i+f|0;if((f|0)>(e|0)){break E}Ha(a,g+4|0,i);k=k+4|0;if(e>>>0>f>>>0){continue}}break}i=e}Fa(z,32,A,i,h^8192);e=(i|0)<(s|0)?s:i;continue b}o[g+55|0]=q[g+64>>2];j=1;k=y;h=f;break e}h=e+1|0;q[g+76>>2]=h;f=r[e+1|0];e=h;continue}}i=n;if(a){break a}if(!x){break d}e=1;while(1){a=q[(e<<2)+d>>2];if(a){fc((e<<3)+c|0,a,b);i=1;e=e+1|0;if((e|0)!=10){continue}break a}break}i=1;if(e>>>0>=10){break a}f=0;while(1){if(f){break g}e=e+1|0;if((e|0)==10){break a}f=q[(e<<2)+d>>2];continue}}i=-1;break a}e=(v-k|0)+(f^1)|0;j=(e|0)<(j|0)?j:e}m=m-k|0;l=(j|0)<(m|0)?m:j;f=l+i|0;e=(f|0)>(s|0)?f:s;Fa(a,32,e,f,h);Ha(a,u,i);Fa(a,48,e,f,h^65536);Fa(a,48,l,m,0);Ha(a,k,m);Fa(a,32,e,f,h^8192);continue}break}i=0}ca=g+80|0;return i}function hd(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,r=x(0),s=x(0),t=0,v=0,y=0,A=0,B=x(0),C=0,D=0,E=0;C=q[a+36>>2];t=q[a+28>>2];A=q[a+16>>2];D=q[a>>2];l=1;m=(e|0)==2&(j|0)!=0;n=(e<<1)+(m?-2:-1)|0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{o=q[f>>2];E=q[a+8>>2];y=q[a+12>>2];i=p[q[E+56>>2]+(y<<1)>>1]+(i<<3)|0;v=(o-i|0)-32|0;i=(o+w(n,(i>>1)+(m?-16:-4)|0)|0)/(n|0)|0;i=(i|0)>(v|0)?v:i;i=(i|0)<64?i:64;if((i|0)>=4){l=(p[((i&7)<<1)+31344>>1]>>14-(i>>>3|0))+1&-2;if((l|0)>=257){break l}}n=j?(A|0)<=(y|0)?1:l:l;m:{n:{o:{if(D){i=od(c,d,j,e);A=wa(t);if((n|0)==1){break m}p:{q:{if(j){a=q[a+48>>2];if(a){break q}l=w(i,n)- -8192>>14;break p}m=w(i,n);o=m- -8192|0;i=o>>14;r:{if((i|0)>=(n|0)){l=i;break r}if((m|0)<8192){l=i;break r}if(!q[a+56>>2]){l=i;break r}m=((o&-16384)>>>0)/(n>>>0)<<16;a=w(m>>13,m>>16)+32768>>16;o=((w((w((w(a,-626)+16384>>15)+8277|0,a)<<1)-501383168>>16,a)+16384>>>15|0)-a<<16)- -2147483648>>16;v=z(o);a=1073741824-m|0;a=w(a>>13,a>>16)+32768>>16;a=((w((w((w(a,-626)+16384>>15)+8277|0,a)<<1)-501383168>>16,a)+16384>>>15|0)-a<<16)- -2147483648>>16;m=z(a);o=o<>16;a=a<>16;a=w((v-m<<11)-(w((w(o,-2597)+16384>>15)+7932|0,o)+16384>>>15|0)+(w((w(a,-2597)+16384>>15)+7932|0,a)+16384>>>15)<<16>>16,(e<<23)-8388608>>16)+16384>>15;m=q[f>>2];if((a|0)>(m|0)){break r}l=(a|0)<(0-m|0)?0:i}if((h|0)<2){break o}break i}h=(a^-1)>>>31|0;a=w(i,n)+((((i|0)>8192?32767:-32767)|0)/(n|0)|0)|0;a=(a|0)<0?0:a>>14;l=h+((a|0)<(n|0)?a:n-1|0)|0}if((e|0)<=2){break i}a=(n|0)/2|0;h=w(a,3)+3|0;i=w(l,3);m=(a|0)<(l|0);$a(t,m?(h+(a^-1)|0)+l|0:i,m?(h-a|0)+l|0:i+3|0,a+h|0);break h}A=wa(t);if((n|0)==1){break k}if(!(!j|(e|0)<3)){a=t;v=a;h=(n|0)/2|0;m=h+1|0;i=w(m,3);o=h+i|0;l=jc(a,o);s:{if((i|0)>(l|0)){l=(l|0)/3|0;break s}l=l-(m<<1)|0}m=w(l,3);a=(h|0)<(l|0);xb(v,a?l+(i+(h^-1)|0)|0:m,a?(i-h|0)+l|0:m+3|0,o);break h}if(j?0:(h|0)<=1){break n}l=Qa(t,n+1|0);break h}h=n-l|0;m=h+1|0;o=l+1|0;a=n>>1;v=(a|0)<(l|0);a=a+1|0;i=w(a,a);h=v?i-(w(m,h+2|0)>>1)|0:w(l,o)>>1;$a(t,h,h+(v?m:o)|0,i);break h}d=t;i=n>>1;c=i+1|0;h=w(c,c);a=jc(t,h);t:{if((a|0)>1){c=Nb(a<<3|1)-1>>>1|0;a=c+1|0;i=w(a,c)>>>1|0;break t}i=n+1|0;c=(i<<1)-Nb(h+(a^-1)<<3|1)>>>1|0;a=i-c|0;i=h-(w(a,(n-c|0)+2|0)>>1)|0}xb(d,i,a+i|0,h);i=(c<<14>>>0)/(n>>>0)|0;break e}if(!j){break e}l=0;h=0;u:{if(q[a+52>>2]|(i|0)<8193){break u}h=1;if((e|0)<1){break u}j=0;while(1){h=(j<<2)+d|0;u[h>>2]=-u[h>>2];h=1;j=j+1|0;if((j|0)!=(e|0)){continue}break}}if((e|0)<1){break j}r=u[(y<<2)+C>>2];s=u[(q[E+8>>2]+y<<2)+C>>2];B=x(x(F(x(x(x(r*r)+x(1.0000000036274937e-15))+x(s*s))))+x(1.0000000036274937e-15));s=x(s/B);r=x(r/B);while(1){i=l<<2;j=i+c|0;u[j>>2]=x(r*u[j>>2])+x(s*u[d+i>>2]);l=l+1|0;if((l|0)!=(e|0)){continue}break}break j}ja(31360,30999,669);G()}h=0;if(!j){break g}}c=0;v:{if(q[f>>2]<17){break v}c=0;if(q[a+32>>2]<17){break v}if(D){va(t,h,2);c=h;break v}c=sa(t,2)}h=q[a+52>>2]?0:c;break g}Pa(t,l,n+1|0)}if((l|0)<=-1){break f}a=l<<14;i=(a>>>0)/(n>>>0)|0;if(!j|!D){break e}if(a>>>0>>0){h=0;if((e|0)<1){break g}r=u[(y<<2)+C>>2];s=u[(q[E+8>>2]+y<<2)+C>>2];B=x(x(F(x(x(x(r*r)+x(1.0000000036274937e-15))+x(s*s))))+x(1.0000000036274937e-15));s=x(s/B);r=x(r/B);l=0;while(1){a=l<<2;i=a+c|0;u[i>>2]=x(r*u[i>>2])+x(s*u[a+d>>2]);l=l+1|0;if((l|0)!=(e|0)){continue}break}break g}if((e|0)<1){break e}l=0;while(1){a=l<<2;h=a+c|0;r=x(u[h>>2]*x(.7071067690849304));a=a+d|0;s=x(u[a>>2]*x(.7071067690849304));u[h>>2]=r+s;u[a>>2]=s-r;l=l+1|0;if((l|0)!=(e|0)){continue}break}break e}a=wa(t)-A|0;q[f>>2]=q[f>>2]-a;break d}ja(31304,30999,838);G()}a=wa(t)-A|0;q[f>>2]=q[f>>2]-a;l=16384;if((i|0)==16384){break c}if(i){break b}h=i}q[k>>2]=q[k>>2]&(-1<>2]=q[k>>2]&(-1<>13,f>>16)+32768>>16;d=((w((w((w(c,-626)+16384>>15)+8277|0,c)<<1)-501383168>>16,c)+16384>>>15|0)-c<<16)- -2147483648>>16;g=z(d);c=1073741824-f|0;c=w(c>>13,c>>16)+32768>>16;c=((w((w((w(c,-626)+16384>>15)+8277|0,c)<<1)-501383168>>16,c)+16384>>>15|0)-c<<16)- -2147483648>>16;f=z(c);i=g-f<<11;g=d<>16;f=c<>16;e=w(i-(w((w(g,-2597)+16384>>15)+7932|0,g)+16384>>>15|0)+(w((w(f,-2597)+16384>>15)+7932|0,f)+16384>>>15)<<16>>16,(e<<23)-8388608>>16)+16384>>15}q[b+20>>2]=a;q[b+16>>2]=l;q[b+12>>2]=e;q[b+8>>2]=c;q[b+4>>2]=d;q[b>>2]=h}function $f(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;q[a+6076>>2]=q[b+48>>2];q[a+4676>>2]=q[b+52>>2];f=q[b+8>>2];q[a+4556>>2]=f;q[a+4564>>2]=q[b+12>>2];q[a+4568>>2]=q[b+16>>2];q[a+4572>>2]=q[b+20>>2];q[a+6088>>2]=q[b+40>>2];q[a+5752>>2]=q[b>>2];g=q[b+4>>2];q[a+5760>>2]=d;q[a+4536>>2]=c;q[a+5756>>2]=g;a:{b:{if(!(q[a+4680>>2]|!q[a+4668>>2])){b=0;if((f|0)==q[a+4560>>2]){break b}c=q[a+4576>>2];if((c|0)<1){break b}return Zc(a,c)}c=(j=e,k=ag(a,b),l=e,l?j:k);h=Zc(a,c);d=q[b+24>>2];if((d|0)!=q[a+4612>>2]){c:{d:{switch(d-10|0){default:if((d|0)==40|(d|0)==60){break c}break;case 0:case 10:break c;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:break d}}i=-103}e:{if((d|0)<=10){q[a+5744>>2]=1;q[a+4580>>2]=(d|0)==10?2:1;e=c<<16>>16;q[a+4584>>2]=w(e,d<<16>>16);q[a+4548>>2]=w(e,14);if(q[a+4576>>2]==8){q[a+4688>>2]=2745;break e}q[a+4688>>2]=2733;break e}q[a+4580>>2]=4;q[a+5744>>2]=(d>>>0)/20;e=c<<16>>16;q[a+4584>>2]=w(e,20);q[a+4548>>2]=w(e,24);if(q[a+4576>>2]==8){q[a+4688>>2]=2722;break e}q[a+4688>>2]=2688}q[a+4608>>2]=0;q[a+4612>>2]=d}f:{g:{h:{i:{if(!(!(1<>>0>16)){j:{k:{f=q[a+4580>>2];switch(f-2|0){case 0:case 2:break j;default:break k}}ja(35511,35490,242);G()}l:{if((c|0)==q[a+4576>>2]){e=q[a+4584>>2];d=q[a+4588>>2];break l}q[a+7168>>2]=0;q[a+7172>>2]=0;q[a+5748>>2]=0;q[a+5740>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+4608>>2]=0;q[a+7176>>2]=0;la(a+148|0,0,4384);d=10;o[a+7168|0]=10;q[a+4664>>2]=1;q[a+4544>>2]=100;q[a+4576>>2]=c;o[a+4541|0]=0;q[a+4492>>2]=65536;q[a+4476>>2]=100;m:{if((c|0)==8){q[a+4688>>2]=(f|0)==4?2722:2745;e=4152;break m}q[a+4688>>2]=(f|0)==4?2688:2733;d=(c|0)==12;e=d?4152:6276;d=d?10:16}q[a+4692>>2]=e;q[a+4640>>2]=d;d=w(c,5);q[a+4588>>2]=d;q[a+4596>>2]=c<<1;q[a+4592>>2]=w(c,20);q[a+4552>>2]=w(c,18);e=w(f,w(c,327680)>>16);q[a+4584>>2]=e;q[a+4548>>2]=w(c,(f|0)==4?24:14);n:{switch(c-12|0){case 4:q[a+4684>>2]=6448;d=80;break l;case 0:q[a+4684>>2]=6442;d=60;break l;default:break n}}q[a+4684>>2]=6433}if((w(d,f)|0)!=(e|0)){break i}d=q[b+36>>2];if(d>>>0>=11){break h}if(!d){q[a+4652>>2]=52429;g=0;q[a+4644>>2]=0;q[a+4636>>2]=12;q[a+4660>>2]=2;q[a+4628>>2]=1;q[a+4632>>2]=0;e=w(c,3);q[a+4600>>2]=e;f=6;break f}if((d|0)<=1){q[a+4652>>2]=49807;q[a+4644>>2]=1;q[a+4636>>2]=14;q[a+4660>>2]=3;q[a+4628>>2]=1;q[a+4632>>2]=0;break g}if((d|0)==2){q[a+4652>>2]=52429;q[a+4644>>2]=0;q[a+4648>>2]=6;q[a+4636>>2]=12;q[a+4660>>2]=2;q[a+4628>>2]=2;q[a+4632>>2]=0;e=w(c,3);q[a+4600>>2]=e;g=0;f=6;break f}if((d|0)<=3){q[a+4652>>2]=49807;q[a+4644>>2]=1;q[a+4648>>2]=8;q[a+4636>>2]=14;q[a+4660>>2]=4;q[a+4628>>2]=2;q[a+4632>>2]=0;break g}if((d|0)<=5){q[a+4652>>2]=48497;q[a+4644>>2]=1;q[a+4648>>2]=10;q[a+4636>>2]=16;q[a+4660>>2]=6;q[a+4628>>2]=2;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=10;break f}if((d|0)<=7){q[a+4652>>2]=47186;q[a+4644>>2]=1;q[a+4648>>2]=12;q[a+4636>>2]=20;q[a+4660>>2]=8;q[a+4628>>2]=3;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=12;break f}q[a+4652>>2]=45875;q[a+4644>>2]=2;q[a+4648>>2]=16;q[a+4636>>2]=24;q[a+4660>>2]=16;q[a+4628>>2]=4;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=16;break f}ja(35428,35490,241);G()}ja(35584,35490,302);G()}ja(35682,35490,315);G()}e=w(c,5);q[a+4600>>2]=e;g=0;f=8}q[a+4672>>2]=g;q[a+4624>>2]=d;q[a+4604>>2]=w(c,5)+(e<<1);c=q[a+4640>>2];c=(c|0)>(f|0)?f:c;q[a+4648>>2]=c;if((c|0)>=17){break a}c=q[b+32>>2];q[a+4616>>2]=c;d=q[a+6092>>2];b=q[b+44>>2];q[a+6092>>2]=b;if(b){b=a;if(d){c=(w(c>>16,-26214)-(w(c&65535,26214)>>>16|0)|0)+7|0;c=(c|0)>2?c:2}else{c=7}q[b+6096>>2]=c}b=h+i|0;q[a+4668>>2]=1}return b}ja(35736,35490,393);G()}function Gf(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;k=ca-320|0;ca=k;m=g<<16>>16;g=-10;while(1){l=g<<10;a:{if((g|0)>=1){u=l|922;l=l-102|0;break a}u=l+1024|0;b:{switch(g+1|0){case 1:u=l|922;break a;default:u=u|102;break;case 0:break b}}l=l|102}n=(g<<2)+40|0;q[n+k>>2]=w(u<<16>>16,m)>>16;q[(k+80|0)+n>>2]=w(l<<16>>16,m)>>16;g=g+1|0;if((g|0)!=10){continue}break}p[k+224>>1]=0;q[k+192>>2]=0;if((j|0)<1){b=0}else{C=i<<16>>16;i=j;u=1;while(1){F=i;i=i-1|0;c:{d:{e:{A=(u|0)<1;f:{if(A){break f}g=i<<1;m=p[g+e>>1]+f|0;n=s[b+g>>1];z=r[d+i|0];x=p[c+g>>1];g=0;while(1){y=(k+224|0)+(g<<1)|0;v=w(z,p[y>>1])>>8;l=w(n-v<<16>>16,h)>>16;l=(l|0)>-10?l:-10;l=(l|0)<9?l:9;o[((k+240|0)+(g<<4)|0)+i|0]=l;t=y;y=(l<<2)+40|0;D=v+q[y+(k+80|0)>>2]|0;p[t>>1]=D;E=g+u|0;y=v+q[k+y>>2]|0;p[(k+224|0)+(E<<1)>>1]=y;t=(k+192|0)+(g<<2)|0;v=q[t>>2];G=t;H=v;g:{if((l|0)>=3){if((l|0)==3){t=280;B=r[m+7|0];break g}l=w(l,43);t=l+151|0;B=l+108|0;break g}if((l|0)<=-4){if((l|0)==-4){t=r[m+1|0];B=280;break g}l=w(l,-43);t=l+65|0;B=l+108|0;break g}l=l+m|0;t=r[l+5|0];B=r[l+4|0]}l=n-D<<16>>16;q[G>>2]=(H+w(B,C)|0)+w(x,w(l,l));l=n-y<<16>>16;q[(k+192|0)+(E<<2)>>2]=(v+w(t,C)|0)+w(x,w(l,l));g=g+1|0;if((u|0)!=(g|0)){continue}break}if((u|0)>=3){l=0;g=q[k+208>>2];m=q[k+192>>2];if((g|0)<(m|0)){break e}x=g;g=m;break d}g=0;if(A){break f}while(1){o[((k+240|0)+(g+u<<4)|0)+i|0]=r[((k+240|0)+(g<<4)|0)+i|0]+1;g=g+1|0;if((u|0)!=(g|0)){continue}break}}u=u<<1;g=u;if((g|0)>3){break c}while(1){o[((k+240|0)+(g<<4)|0)+i|0]=r[((k+240|0)+(g-u<<4)|0)+i|0];g=g+1|0;if((g|0)!=4){continue}break}break c}q[k+208>>2]=m;q[k+192>>2]=g;l=s[k+224>>1];p[k+224>>1]=s[k+232>>1];p[k+232>>1]=l;l=4;x=m}q[k+176>>2]=g;q[k+160>>2]=x;q[k+304>>2]=l;m=1;l=q[k+212>>2];n=q[k+196>>2];h:{if((l|0)>=(n|0)){v=l;l=n;break h}q[k+212>>2]=n;q[k+196>>2]=l;m=s[k+226>>1];p[k+226>>1]=s[k+234>>1];p[k+234>>1]=m;m=5;v=n}q[k+180>>2]=l;q[k+164>>2]=v;q[k+308>>2]=m;m=2;n=q[k+216>>2];z=q[k+200>>2];i:{if((n|0)>=(z|0)){A=n;n=z;break i}q[k+216>>2]=z;q[k+200>>2]=n;m=s[k+228>>1];p[k+228>>1]=s[k+236>>1];p[k+236>>1]=m;m=6;A=z}q[k+184>>2]=n;q[k+168>>2]=A;q[k+312>>2]=m;t=3;m=q[k+220>>2];y=q[k+204>>2];j:{if((m|0)>=(y|0)){z=m;m=y;break j}q[k+220>>2]=y;q[k+204>>2]=m;z=s[k+230>>1];p[k+230>>1]=s[k+238>>1];p[k+238>>1]=z;t=7;z=y}q[k+188>>2]=m;q[k+172>>2]=z;q[k+316>>2]=t;while(1){y=(x|0)>(v|0);v=y?v:x;x=(v|0)>(A|0);A=x?A:v;v=(A|0)>(z|0);t=(g|0)>0?g:0;g=(t|0)<(l|0);t=g?l:t;l=(t|0)<(n|0);t=l?n:t;n=(t|0)<(m|0);if(((v?z:A)|0)<((n?m:t)|0)){g=n?3:l?2:g;l=g<<2;m=v?3:x?2:y;n=m<<2;q[(l|k+304)>>2]=q[(n|k+304)>>2]^4;x=m|4;q[(l|k+192)>>2]=q[(k+192|0)+(x<<2)>>2];q[(l|k+176)>>2]=0;p[(k+224|g<<1)>>1]=s[(k+224|x<<1)>>1];q[(n|k+160)>>2]=2147483647;l=(k+240|0)+(m<<4)|0;m=q[l+4>>2];g=(k+240|0)+(g<<4)|0;q[g>>2]=q[l>>2];q[g+4>>2]=m;m=q[l+12>>2];q[g+8>>2]=q[l+8>>2];q[g+12>>2]=m;m=q[k+188>>2];z=q[k+172>>2];n=q[k+184>>2];A=q[k+168>>2];l=q[k+180>>2];v=q[k+164>>2];g=q[k+176>>2];x=q[k+160>>2];continue}break}g=(k+240|0)+i|0;o[g|0]=r[g|0]+(q[k+304>>2]>>>2|0);o[g+16|0]=r[g+16|0]+(q[k+308>>2]>>>2|0);o[g+48|0]=r[g+48|0]+(q[k+316>>2]>>>2|0);o[g+32|0]=r[g+32|0]+(q[k+312>>2]>>>2|0)}if((F|0)>1){continue}break}g=q[k+220>>2];l=q[k+216>>2];u=q[k+212>>2];m=q[k+208>>2];n=q[k+204>>2];i=q[k+200>>2];x=q[k+196>>2];b=q[k+192>>2]}c=(b|0)>(x|0);d=c;b=c?x:b;c=(b|0)>(i|0);d=c?2:d;b=c?i:b;c=(b|0)>(n|0);d=c?3:d;b=c?n:b;c=(b|0)>(m|0);d=c?4:d;b=c?m:b;c=(b|0)>(u|0);d=c?5:d;b=c?u:b;c=(b|0)>(l|0);e=c?6:d;c=c?l:b;d=(c|0)>(g|0);b=d?7:e;if((j|0)>0){ka(a,(k+240|0)+((b&3)<<4)|0,j)}o[a|0]=r[a|0]+(b>>>2|0);ca=k+320|0;return d?g:c}function Ze(a,b){var c=x(0),d=0,e=0,f=x(0),g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=x(0),s=x(0);h=ca-512|0;ca=h;g=q[11992];a:{if((g|0)<1){break a}j=q[11991];e=q[11988];while(1){u[(h+256|0)+(d<<2)>>2]=o[d+e|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}l=w(g,3);m=q[11989];e=0;n=(j|0)<1;while(1){if(!n){i=(h+256|0)+(e<<2)|0;c=u[i>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[m+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[i>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}n=q[11990];e=0;while(1){i=(h+256|0)+(e<<2)|0;c=u[i>>2];d=0;while(1){c=x(c+x(u[(d<<2)+a>>2]*x(o[n+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[i>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){i=(h+256|0)+(d<<2)|0;c=x(x(u[i>>2]*x(.0078125))*x(.5));f=x(1);b:{if(cx(-8)^1){break b}f=x(.5);if(c!=c){break b}k=c>2];f=x(f+x(x(e|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=x(x((k?x(-c):c)*x(.5))+x(.5))}u[i>>2]=f;d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=q[11988];d=0;while(1){u[(h+128|0)+(d<<2)>>2]=o[e+(d+g|0)|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}i=g+m|0;e=0;k=(j|0)<1;while(1){if(!k){p=(h+128|0)+(e<<2)|0;c=u[p>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[p>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}i=g+n|0;e=0;while(1){k=(h+128|0)+(e<<2)|0;c=u[k>>2];d=0;while(1){c=x(c+x(u[(d<<2)+a>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[k>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){i=(h+128|0)+(d<<2)|0;c=x(x(u[i>>2]*x(.0078125))*x(.5));f=x(1);d:{if(cx(-8)^1){break d}f=x(.5);if(c!=c){break d}k=c>2];f=x(f+x(x(e|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=x(x((k?x(-c):c)*x(.5))+x(.5))}u[i>>2]=f;d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=g<<1;i=q[11988];d=0;while(1){u[(d<<2)+h>>2]=o[i+(d+e|0)|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){e=d<<2;u[e+(h+384|0)>>2]=u[a+e>>2]*u[e+(h+128|0)>>2];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=m;m=g<<1;i=e+m|0;e=0;k=(j|0)<1;while(1){if(!k){p=(e<<2)+h|0;c=u[p>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[p>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}b=m+n|0;e=0;while(1){j=(e<<2)+h|0;c=u[j>>2];d=0;while(1){c=x(c+x(u[(h+384|0)+(d<<2)>>2]*x(o[b+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[j>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){b=d<<2;c=u[b+(h+256|0)>>2];r=x(c*u[a+b>>2]);s=x(x(1)-c);e=b+h|0;c=x(u[e>>2]*x(.0078125));f=x(1);f:{if(cx(-8)^1){break f}f=x(0);if(c!=c){break f}j=c>2];f=x(f+x(x(b|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=j?x(-c):c}u[e>>2]=r+x(s*f);d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}ka(a,h,g<<2)}ca=h+512|0}function oa(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=ca-16|0;ca=d;q[d+12>>2]=c;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{switch(b-4002|0){default:switch(b-10002|0){case 6:break o;case 0:break t;case 10:break u;case 8:break v;case 24:break c;case 22:break d;case 13:break f;case 26:break g;case 20:break h;case 14:break i;default:break a};case 1:case 2:case 3:case 5:case 6:case 7:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 17:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 27:case 28:case 30:case 31:case 32:case 33:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:break a;case 26:break j;case 45:break k;case 44:break l;case 35:break m;case 34:break n;case 0:break p;case 4:break q;case 18:break r;case 12:break s;case 8:break w;case 29:break e}}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>10){break a}q[a+24>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<0|(b|0)>=q[q[a>>2]+8>>2]){break a}q[a+32>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<1|(b|0)>q[q[a>>2]+8>>2]){break a}q[a+36>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>2){break a}q[a+12>>2]=!b;q[a+20>>2]=(b|0)!=2;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>100){break a}q[a+56>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+52>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+44>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if((b|0)<=500){c=-1;if((b|0)!=-1){break a}}c=a;a=w(q[a+4>>2],26e4);q[c+40>>2]=(a|0)>(b|0)?b:a;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-1>>>0>1){break a}q[a+8>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-8>>>0>16){break a}q[a+60>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[q[b>>2]>>2]=q[a+60>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+68>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+68>>2];break b}c=0;b=q[a+4>>2];e=q[a>>2];f=q[e+4>>2];g=q[e+8>>2];la(a+76|0,0,w(b,((f<<2)+(g<<4)|0)+4096|0)+168|0);e=w(b,q[e+8>>2]);if((e|0)>=1){h=(w(b,f+1024|0)<<2)+a|0;f=w(b,g)<<2;b=(h+f|0)+244|0;f=b+f|0;while(1){g=c<<2;q[g+f>>2]=-1042284544;q[b+g>>2]=-1042284544;c=c+1|0;if((e|0)!=(c|0)){continue}break}}c=0;q[a+216>>2]=0;q[a+96>>2]=0;q[a+100>>2]=0;q[a+88>>2]=256;q[a+80>>2]=2;q[a+84>>2]=1065353216;break a}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+48>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=0;b=q[b>>2];if(!b){break a}e=q[b+4>>2];q[a+120>>2]=q[b>>2];q[a+124>>2]=e;e=q[b+60>>2];q[a+176>>2]=q[b+56>>2];q[a+180>>2]=e;e=q[b+52>>2];q[a+168>>2]=q[b+48>>2];q[a+172>>2]=e;e=q[b+44>>2];q[a+160>>2]=q[b+40>>2];q[a+164>>2]=e;e=q[b+36>>2];q[a+152>>2]=q[b+32>>2];q[a+156>>2]=e;e=q[b+28>>2];q[a+144>>2]=q[b+24>>2];q[a+148>>2]=e;e=q[b+20>>2];q[a+136>>2]=q[b+16>>2];q[a+140>>2]=e;e=q[b+12>>2];q[a+128>>2]=q[b+8>>2];q[a+132>>2]=e;break a}b=q[d+12>>2];q[d+12>>2]=b+4;c=0;b=q[b>>2];if(!b){break a}e=q[b+4>>2];q[a+184>>2]=q[b>>2];q[a+188>>2]=e;break a}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+76>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+64>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+236>>2]=q[b>>2]}c=0}ca=d+16|0;return c}function Fb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=ca;J=g;a:{b:{c:{h=e&-16;if((h|0)<(e|0)){if((e|0)!=120){break c}o[d+120|0]=0;o[d+121|0]=0;o[d+122|0]=0;o[d+123|0]=0;o[d+124|0]=0;o[d+125|0]=0;o[d+126|0]=0;o[d+127|0]=0;h=128;o[d+128|0]=0;o[d+129|0]=0;o[d+130|0]=0;o[d+131|0]=0;o[d+132|0]=0;o[d+133|0]=0;o[d+134|0]=0;o[d+135|0]=0;s=g-512|0;k=s;ca=k;u=8;break b}u=e>>4;s=g-(h<<2)|0;k=s;ca=k;if((e|0)>15){break b}f=(u<<2)+15&-16;t=k-f|0;h=t;ca=h;y=h-f|0;ca=y;break a}ja(36154,36196,89);G()}while(1){j=o[d+f|0];g=j>>31;q[(f<<2)+s>>2]=(g^g+j)&255;j=f|1;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;j=f|2;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;j=f|3;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;f=f+4|0;if((h|0)>(f|0)){continue}break}f=(u<<2)+15&-16;t=k-f|0;h=t;ca=h;y=h-f|0;ca=y;K=r[7510];F=r[7509];A=r[7508];v=r[7507];h=0;k=0;f=s;while(1){g=C<<2;H=g+y|0;q[H>>2]=0;L=g+t|0;B=q[f+4>>2];n=q[f>>2];x=0;while(1){D=1;d:{e:{f:{g:{h:{g=n+B|0;i:{if((v|0)<(g|0)){g=h;break i}i=q[f+12>>2]+q[f+8>>2]|0;if((v|0)>=(i|0)){break h}}i=l;break g}l=q[f+20>>2]+q[f+16>>2]|0;if((v|0)<(l|0)){break g}j=q[f+28>>2]+q[f+24>>2]|0;if((v|0)<(j|0)){break f}h=q[f+36>>2]+q[f+32>>2]|0;if((h|0)>(v|0)){break e}k=q[f+44>>2]+q[f+40>>2]|0;if((k|0)>(v|0)){p=h;break e}m=q[f+52>>2]+q[f+48>>2]|0;if((m|0)>(v|0)){p=h;z=k;break e}p=q[f+60>>2]+q[f+56>>2]|0;E=(p|0)>(v|0);I=E?I:p;p=h;z=k;M=m;break d}l=k}j=m}E=1}j:{k:{l:{h=g+i|0;m:{if((A|0)<(h|0)){h=g;break m}g=j+l|0;if((A|0)>=(g|0)){break l}}g=i;break k}k=p+z|0;if((A|0)<(k|0)){break k}l=I+M|0;D=(l|0)>(A|0);m=D?j:l;break j}k=l;m=j}l=k+m|0;j=(l|0)>(F|0);N=g;l=j?g:l;i=g+h|0;g=(i|0)>(F|0);l=g?N:l;n:{h=g?h:i;i=l+h|0;if((i|0)<=(K|0)){q[L>>2]=i;if((D+E|0)==(0-(g|j)|0)){break n}}x=x+1|0;q[H>>2]=x;B=B>>1;q[f+4>>2]=B;n=n>>1;q[f>>2]=n;q[f+8>>2]=q[f+8>>2]>>1;q[f+12>>2]=q[f+12>>2]>>1;q[f+16>>2]=q[f+16>>2]>>1;q[f+20>>2]=q[f+20>>2]>>1;q[f+24>>2]=q[f+24>>2]>>1;q[f+28>>2]=q[f+28>>2]>>1;q[f+32>>2]=q[f+32>>2]>>1;q[f+36>>2]=q[f+36>>2]>>1;q[f+40>>2]=q[f+40>>2]>>1;q[f+44>>2]=q[f+44>>2]>>1;q[f+48>>2]=q[f+48>>2]>>1;q[f+52>>2]=q[f+52>>2]>>1;q[f+56>>2]=q[f+56>>2]>>1;q[f+60>>2]=q[f+60>>2]>>1;continue}break}f=f- -64|0;x=1;C=C+1|0;if((C|0)!=(u|0)){continue}break}}m=2147483647;p=b>>1;k=w(p,9)+7920|0;n=0;j=0;while(1){h=r[k+n|0];if(x){i=w(n,18)+7712|0;l=i+17|0;f=0;while(1){g=l;z=f<<2;if(q[z+y>>2]<=0){g=i+q[t+z>>2]|0}h=r[g|0]+h|0;f=f+1|0;if((u|0)!=(f|0)){continue}break}}f=(h|0)<(m|0);j=f?n:j;m=f?h:m;n=n+1|0;if((n|0)!=9){continue}break}ma(a,j,w(p,9)+7888|0,8);o:{if(!x){break o}h=w(j,18)+7520|0;k=0;while(1){g=k<<2;f=q[g+y>>2];p:{if(!f){ma(a,q[g+t>>2],h,8);break p}ma(a,17,h,8);if((f|0)>=2){l=f-1|0;f=0;while(1){ma(a,17,7682,8);f=f+1|0;if((l|0)!=(f|0)){continue}break}}ma(a,q[g+t>>2],7682,8)}k=k+1|0;if((u|0)!=(k|0)){continue}break}if(!x){break o}f=0;while(1){if(q[(f<<2)+t>>2]>=1){Ld(a,(f<<6)+s|0)}f=f+1|0;if((u|0)!=(f|0)){continue}break}if(!x){break o}m=0;while(1){h=q[(m<<2)+y>>2];if((h|0)>=1){p=(m<<4)+d|0;i=0;while(1){g=o[i+p|0];f=g>>31;l=(f^f+g)<<24>>24;f=h;if((f|0)!=1){while(1){g=f-1|0;ma(a,l>>>g&1,6400,8);k=(f|0)>2;f=g;if(k){continue}break}}ma(a,l&1,6400,8);i=i+1|0;if((i|0)!=16){continue}break}}m=m+1|0;if((u|0)!=(m|0)){continue}break}}Jd(a,d,e,b,c,t);ca=J}function Ba(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,s=x(0),t=0,v=0,y=x(0),z=0,A=0,B=0,C=0,D=0,E=0;C=(c>>>0)/(e>>>0)|0;D=q[a>>2];a:{if((c|0)==1){f=0;if(q[a+32>>2]>=8){c=q[a+28>>2];b:{if(D){f=u[b>>2]>2]=q[a+32>>2]-8}if(q[a+4>>2]){u[b>>2]=f?x(-1):x(1)}k=1;if(!h){break a}u[h>>2]=u[b>>2];return 1}z=q[a+24>>2];l=(z|0)>0;c:{if(!f){j=f;break c}if(!j){j=f;break c}if(!(!(C&1)&(z|0)!=0|((z|0)>0|(e|0)>1))){j=f;break c}ka(j,f,c<<2)}v=l?z:0;if((z|0)>=1){l=0;while(1){d:{if(D){if((l|0)==31){break d}t=c>>l;f=t>>1;A=(f|0)>1?f:1;n=1<=2){while(1){o=(w(f,p)+m<<2)+b|0;y=x(u[o>>2]*x(.7071067690849304));B=o;o=(((f<<1|1)<>2]*x(.7071067690849304));u[B>>2]=y+s;u[o>>2]=y-s;f=f+1|0;if((A|0)!=(f|0)){continue}break}}m=m+1|0;if((n|0)!=(m|0)){continue}break}}if(!j|(l|0)==31){break d}t=c>>l;f=t>>1;A=(f|0)>1?f:1;n=1<=2){while(1){o=(w(f,p)+m<<2)+j|0;y=x(u[o>>2]*x(.7071067690849304));B=o;o=(((f<<1|1)<>2]*x(.7071067690849304));u[B>>2]=y+s;u[o>>2]=y-s;f=f+1|0;if((A|0)!=(f|0)){continue}break}}m=m+1|0;if((n|0)!=(m|0)){continue}break}}k=r[(k&15)+31120|0]|r[(k>>4)+31120|0]<<2;l=l+1|0;if((v|0)!=(l|0)){continue}break}}m=e>>v;o=C<-1)){A=z;while(1){p=o>>1;if(!(!D|(m|0)<1)){C=(p|0)>1?p:1;t=m<<1;n=0;while(1){f=0;if((o|0)>=2){while(1){l=(w(f,t)+n<<2)+b|0;y=x(u[l>>2]*x(.7071067690849304));B=l;l=(w(f<<1|1,m)+n<<2)+b|0;s=x(u[l>>2]*x(.7071067690849304));u[B>>2]=y+s;u[l>>2]=y-s;f=f+1|0;if((C|0)!=(f|0)){continue}break}}n=n+1|0;if((n|0)!=(m|0)){continue}break}}f:{if(!((m|0)>0?j:0)){l=m<<1;break f}C=(p|0)>1?p:1;l=m<<1;n=0;while(1){f=0;if((o|0)>=2){while(1){t=(w(f,l)+n<<2)+j|0;y=x(u[t>>2]*x(.7071067690849304));B=t;t=(w(f<<1|1,m)+n<<2)+j|0;s=x(u[t>>2]*x(.7071067690849304));u[B>>2]=y+s;u[t>>2]=y-s;f=f+1|0;if((C|0)!=(f|0)){continue}break}}n=n+1|0;if((n|0)!=(m|0)){continue}break}}E=E+1|0;k=k<>v,l<>v,l<>2]){break a}if((l|0)>=2){ug(b,p>>v,l<>1;o=k>>>n|0;if((l|0)>=2){d=p>>1;g=(d|0)>1?d:1;e=l&-2;j=0;while(1){f=0;if((p|0)>=2){while(1){d=(w(e,f)+j<<2)+b|0;s=x(u[d>>2]*x(.7071067690849304));l=d;d=(w(f<<1|1,n)+j<<2)+b|0;i=x(u[d>>2]*x(.7071067690849304));u[l>>2]=s+i;u[d>>2]=s-i;f=f+1|0;if((g|0)!=(f|0)){continue}break}}j=j+1|0;if((n|0)!=(j|0)){continue}break}}k=k|o;l=n;a=a+1|0;if((E|0)!=(a|0)){continue}break}}l=0;if((z|0)>0){while(1){k=r[k+31136|0];if((l|0)!=31){o=c>>l;a=o>>1;g=(a|0)>1?a:1;e=1<=2){while(1){a=(w(d,f)+j<<2)+b|0;s=x(u[a>>2]*x(.7071067690849304));m=a;a=(((f<<1|1)<>2]*x(.7071067690849304));u[m>>2]=s+i;u[a>>2]=s-i;f=f+1|0;if((g|0)!=(f|0)){continue}break}}j=j+1|0;if((e|0)!=(j|0)){continue}break}}l=l+1|0;if((v|0)!=(l|0)){continue}break}}d=n<>2]=u[a+b>>2]*i;f=f+1|0;if((f|0)!=(c|0)){continue}break}}k=(-1<0?c:0;j=f+w(r,-24)|0;l=q[13569];i=d-1|0;if((l+i|0)>=0){f=d+l|0;c=r-i|0;while(1){v[(h+320|0)+(g<<3)>>3]=(c|0)<0?0:+q[(c<<2)+54288>>2];c=c+1|0;g=g+1|0;if((f|0)!=(g|0)){continue}break}}m=j-24|0;f=0;s=(l|0)>0?l:0;g=(d|0)<1;while(1){a:{if(g){e=0;break a}k=f+i|0;c=0;e=0;while(1){e=e+v[(c<<3)+a>>3]*v[(h+320|0)+(k-c<<3)>>3];c=c+1|0;if((d|0)!=(c|0)){continue}break}}v[(f<<3)+h>>3]=e;c=(f|0)==(s|0);f=f+1|0;if(!c){continue}break}z=47-j|0;t=48-j|0;A=j-25|0;f=l;b:{while(1){e=v[(f<<3)+h>>3];c=0;g=f;o=(f|0)<1;if(!o){while(1){k=(h+480|0)+(c<<2)|0;n=e;e=e*5.960464477539063e-8;c:{if(y(e)<2147483648){i=~~e;break c}i=-2147483648}e=+(i|0);n=n+e*-16777216;d:{if(y(n)<2147483648){i=~~n;break d}i=-2147483648}q[k>>2]=i;g=g-1|0;e=v[(g<<3)+h>>3]+e;c=c+1|0;if((f|0)!=(c|0)){continue}break}}e=Ja(e,m);e=e+C(e*.125)*-8;e:{if(y(e)<2147483648){k=~~e;break e}k=-2147483648}e=e- +(k|0);f:{g:{h:{u=(m|0)<1;i:{if(!u){g=(f<<2)+h|0;i=q[g+476>>2];c=i>>t;p=g;g=i-(c<>2]=g;k=c+k|0;i=g>>z;break i}if(m){break h}i=q[((f<<2)+h|0)+476>>2]>>23}if((i|0)<1){break f}break g}i=2;if(!(e>=.5^1)){break g}i=0;break f}c=0;g=0;if(!o){while(1){p=(h+480|0)+(c<<2)|0;o=q[p>>2];x=16777215;j:{k:{if(g){break k}x=16777216;if(o){break k}g=0;break j}q[p>>2]=x-o;g=1}c=c+1|0;if((f|0)!=(c|0)){continue}break}}l:{if(u){break l}m:{switch(A|0){case 0:c=(f<<2)+h|0;q[c+476>>2]=q[c+476>>2]&8388607;break l;case 1:break m;default:break l}}c=(f<<2)+h|0;q[c+476>>2]=q[c+476>>2]&4194303}k=k+1|0;if((i|0)!=2){break f}e=1-e;i=2;if(!g){break f}e=e-Ja(1,m)}if(e==0){g=0;n:{c=f;if((l|0)>=(c|0)){break n}while(1){c=c-1|0;g=q[(h+480|0)+(c<<2)>>2]|g;if((c|0)>(l|0)){continue}break}if(!g){break n}j=m;while(1){j=j-24|0;f=f-1|0;if(!q[(h+480|0)+(f<<2)>>2]){continue}break}break b}c=1;while(1){g=c;c=c+1|0;if(!q[(h+480|0)+(l-g<<2)>>2]){continue}break}g=f+g|0;while(1){i=d+f|0;f=f+1|0;v[(h+320|0)+(i<<3)>>3]=q[(r+f<<2)+54288>>2];c=0;e=0;if((d|0)>=1){while(1){e=e+v[(c<<3)+a>>3]*v[(h+320|0)+(i-c<<3)>>3];c=c+1|0;if((d|0)!=(c|0)){continue}break}}v[(f<<3)+h>>3]=e;if((f|0)<(g|0)){continue}break}f=g;continue}break}e=Ja(e,24-j|0);o:{if(!(e>=16777216^1)){d=(h+480|0)+(f<<2)|0;n=e;e=e*5.960464477539063e-8;p:{if(y(e)<2147483648){c=~~e;break p}c=-2147483648}e=n+ +(c|0)*-16777216;q:{if(y(e)<2147483648){a=~~e;break q}a=-2147483648}q[d>>2]=a;f=f+1|0;break o}if(y(e)<2147483648){c=~~e}else{c=-2147483648}j=m}q[(h+480|0)+(f<<2)>>2]=c}e=Ja(1,j);if((f|0)>=0){c=f;while(1){v[(c<<3)+h>>3]=e*+q[(h+480|0)+(c<<2)>>2];e=e*5.960464477539063e-8;a=0;d=(c|0)>0;c=c-1|0;if(d){continue}break}g=f;while(1){d=a>>>0>s>>>0?s:a;c=0;e=0;while(1){e=e+v[(c<<3)+57056>>3]*v[(c+g<<3)+h>>3];j=(c|0)!=(d|0);c=c+1|0;if(j){continue}break}v[(h+160|0)+(f-g<<3)>>3]=e;g=g-1|0;c=(a|0)!=(f|0);a=a+1|0;if(c){continue}break}}e=0;if((f|0)>=0){c=f;while(1){e=e+v[(h+160|0)+(c<<3)>>3];a=(c|0)>0;c=c-1|0;if(a){continue}break}}v[b>>3]=i?-e:e;e=v[h+160>>3]-e;c=1;if((f|0)>=1){while(1){e=e+v[(h+160|0)+(c<<3)>>3];a=(c|0)!=(f|0);c=c+1|0;if(a){continue}break}}v[b+8>>3]=i?-e:e;ca=h+560|0;return k&7}function Ca(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{if(!a){break a}d=a-8|0;b=q[a-4>>2];a=b&-8;f=d+a|0;b:{if(b&1){break b}if(!(b&3)){break a}b=q[d>>2];d=d-b|0;if(d>>>0>>0<=255){e=q[d+8>>2];b=b>>>3|0;c=q[d+12>>2];if((c|0)==(e|0)){i=58692,j=q[14673]&Ag(-2,b),q[i>>2]=j;break b}q[e+12>>2]=c;q[c+8>>2]=e;break b}h=q[d+24>>2];b=q[d+12>>2];c:{if((d|0)!=(b|0)){c=q[d+8>>2];q[c+12>>2]=b;q[b+8>>2]=c;break c}d:{e=d+20|0;c=q[e>>2];if(c){break d}e=d+16|0;c=q[e>>2];if(c){break d}b=0;break c}while(1){g=e;b=c;e=b+20|0;c=q[e>>2];if(c){continue}e=b+16|0;c=q[b+16>>2];if(c){continue}break}q[g>>2]=0}if(!h){break b}e=q[d+28>>2];c=(e<<2)+58996|0;e:{if(q[c>>2]==(d|0)){q[c>>2]=b;if(b){break e}i=58696,j=q[14674]&Ag(-2,e),q[i>>2]=j;break b}q[h+(q[h+16>>2]==(d|0)?16:20)>>2]=b;if(!b){break b}}q[b+24>>2]=h;c=q[d+16>>2];if(c){q[b+16>>2]=c;q[c+24>>2]=b}c=q[d+20>>2];if(!c){break b}q[b+20>>2]=c;q[c+24>>2]=b;break b}b=q[f+4>>2];if((b&3)!=3){break b}q[14675]=a;q[f+4>>2]=b&-2;q[d+4>>2]=a|1;q[a+d>>2]=a;return}if(d>>>0>=f>>>0){break a}b=q[f+4>>2];if(!(b&1)){break a}f:{if(!(b&2)){if(q[14679]==(f|0)){q[14679]=d;a=q[14676]+a|0;q[14676]=a;q[d+4>>2]=a|1;if(q[14678]!=(d|0)){break a}q[14675]=0;q[14678]=0;return}if(q[14678]==(f|0)){q[14678]=d;a=q[14675]+a|0;q[14675]=a;q[d+4>>2]=a|1;q[a+d>>2]=a;return}a=(b&-8)+a|0;g:{if(b>>>0<=255){c=q[f+8>>2];b=b>>>3|0;e=q[f+12>>2];if((c|0)==(e|0)){i=58692,j=q[14673]&Ag(-2,b),q[i>>2]=j;break g}q[c+12>>2]=e;q[e+8>>2]=c;break g}h=q[f+24>>2];b=q[f+12>>2];h:{if((f|0)!=(b|0)){c=q[f+8>>2];q[c+12>>2]=b;q[b+8>>2]=c;break h}i:{e=f+20|0;c=q[e>>2];if(c){break i}e=f+16|0;c=q[e>>2];if(c){break i}b=0;break h}while(1){g=e;b=c;e=b+20|0;c=q[e>>2];if(c){continue}e=b+16|0;c=q[b+16>>2];if(c){continue}break}q[g>>2]=0}if(!h){break g}e=q[f+28>>2];c=(e<<2)+58996|0;j:{if(q[c>>2]==(f|0)){q[c>>2]=b;if(b){break j}i=58696,j=q[14674]&Ag(-2,e),q[i>>2]=j;break g}q[h+(q[h+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break g}}q[b+24>>2]=h;c=q[f+16>>2];if(c){q[b+16>>2]=c;q[c+24>>2]=b}c=q[f+20>>2];if(!c){break g}q[b+20>>2]=c;q[c+24>>2]=b}q[d+4>>2]=a|1;q[a+d>>2]=a;if(q[14678]!=(d|0)){break f}q[14675]=a;return}q[f+4>>2]=b&-2;q[d+4>>2]=a|1;q[a+d>>2]=a}if(a>>>0<=255){a=a>>>3|0;b=(a<<3)+58732|0;c=q[14673];a=1<>2]}q[b+8>>2]=d;q[a+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=a;return}e=31;q[d+16>>2]=0;q[d+20>>2]=0;if(a>>>0<=16777215){b=a>>>8|0;g=b+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(c|(e|g))|0;e=(b<<1|a>>>b+21&1)+28|0}q[d+28>>2]=e;g=(e<<2)+58996|0;l:{m:{c=q[14674];b=1<>2]=d;q[d+24>>2]=g;break n}e=a<<((e|0)==31?0:25-(e>>>1|0)|0);b=q[g>>2];while(1){c=b;if((q[b+4>>2]&-8)==(a|0)){break m}b=e>>>29|0;e=e<<1;g=c+(b&4)|0;b=q[g+16>>2];if(b){continue}break}q[g+16>>2]=d;q[d+24>>2]=c}q[d+12>>2]=d;q[d+8>>2]=d;break l}a=q[c+8>>2];q[a+12>>2]=d;q[c+8>>2]=d;q[d+24>>2]=0;q[d+12>>2]=c;q[d+8>>2]=a}a=q[14681]-1|0;q[14681]=a?a:-1}}function jf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,r=0,s=0,t=0,v=0,z=0,A=0,C=0,D=0,E=0,F=x(0),G=0,H=0,I=0,J=x(0),K=0,L=0,M=x(0),N=0,O=0,P=x(0),Q=0;l=ca;K=l;A=1;m=(b<<2)+15&-16;D=l-m|0;ca=D;l=q[a+32>>2];G=b-1|0;n=(p[l+(b<<1)>>1]-p[(G<<1)+l>>1]<=1){J=x(x(B(x(x(.5)-i),x(-.25)))*x(.03999999910593033));M=x(J*x((c?h:0)|0));E=1<>1];t=p[(C<<1)+l>>1]-g|0;n=t<>2])));l=l+1|0;if((n|0)!=(l|0)){continue}break}}F=x(i+x(M*i));l=0;g=0;a:{if(!c){break a}g=0;if((t|0)==1){break a}g=ka(z,r,m);Mb(g,n>>h,E);m=0;i=x(0);if(!v){while(1){i=x(i+x(y(u[g+(m<<2)>>2])));m=m+1|0;if((n|0)!=(m|0)){continue}break}}i=x(i+x(P*i));g=0;if(i=1){while(1){Mb(r,n>>l,1<>2])));l=l+1|0;if((n|0)!=(l|0)){continue}break}}i=x(i+x(x(J*x(Q|0))*i));l=i>2]=g;if(!(((g|0)!=(O|0)?g:0)|t)){q[j>>2]=g-1}if((b|0)!=(C|0)){l=q[a+32>>2];j=C;continue}break}C=q[D>>2]}f=(h<<3)+1152|0;n=c<<2;g=o[f+n|0]<<1;j=C-g|0;a=j>>31;a=a^a+j;j=q[k>>2];l=w(a,j);m=o[f+(n|1)|0]<<1;r=C-m|0;a=r>>31;a=w(j,a^a+r);r=c?0:e;a=a+r|0;b:{if((b|0)<=1){g=a;break b}t=0-m|0;v=0-g|0;while(1){g=e+l|0;s=A<<2;z=q[s+D>>2];E=z+v|0;m=E>>31;s=q[k+s>>2];E=w(s,m^m+E);m=a+e|0;l=E+((l|0)<(m|0)?l:m)|0;z=t+z|0;m=z>>31;g=w(m^m+z,s)+((a|0)>(g|0)?g:a)|0;a=g;A=A+1|0;if((A|0)!=(b|0)){continue}break}}m=1;A=o[f+(n|2)|0]<<1;t=C-A|0;a=t>>31;a=w(j,a^a+t);t=o[f+(n|3)|0]<<1;v=C-t|0;f=v>>31;f=w(j,f^f+v)+r|0;r=(g|0)>(l|0)?l:g;c:{if((b|0)<=1){l=f;break c}t=0-t|0;A=0-A|0;while(1){g=a+e|0;v=m<<2;s=q[v+D>>2];z=s+A|0;l=z>>31;v=q[k+v>>2];z=w(v,l^l+z);l=e+f|0;a=z+((a|0)<(l|0)?a:l)|0;s=t+s|0;l=s>>31;l=w(l^l+s,v)+((f|0)>(g|0)?g:f)|0;f=l;m=m+1|0;if((m|0)!=(b|0)){continue}break}}m=1;g=(h<<3)+1152|0;f=(c|0)!=0&(r|0)>(((a|0)<(l|0)?a:l)|0);h=n|(f?2:0);n=o[g+h|0]<<1;l=C-n|0;a=l>>31;l=w(j,a^a+l);g=o[g+(h|1)|0]<<1;h=C-g|0;a=h>>31;a=w(j,a^a+h)+(c?0:e)|0;d:{if((b|0)>1){C=0-n|0;n=0-g|0;break d}q[(G<<2)+d>>2]=(a|0)<=(l|0);ca=K;return f}while(1){c=m<<2;g=a+e|0;q[c+H>>2]=(g|0)<=(l|0);h=e+l|0;q[c+I>>2]=(h|0)>=(a|0);r=q[c+D>>2];A=r+n|0;j=A>>31;s=j^j+A;j=q[c+k>>2];a=w(s,j)+((a|0)>(h|0)?h:a)|0;h=r+C|0;c=h>>31;l=w(j,c^c+h)+((g|0)>(l|0)?l:g)|0;m=m+1|0;if((m|0)!=(b|0)){continue}break}a=(a|0)<=(l|0);q[(G<<2)+d>>2]=a;if((b|0)>=2){l=b-2|0;while(1){b=l<<2;a=q[(b+((a|0)==1?I:H)|0)+4>>2];q[b+d>>2]=a;b=(l|0)>0;l=l-1|0;if(b){continue}break}}ca=K;return f}function $e(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=0,k=0,l=x(0),m=x(0),n=0,o=0,p=x(0),r=0,s=0,t=x(0),v=x(0);e=q[a+8>>2];i=q[a+7452>>2]+((c|0)/((e|0)/400|0)|0)|0;q[a+7452>>2]=i;j=q[a+7448>>2];k=j;if((i|0)>=8){d=(i-((i|0)<15?i:15)|0)+7|0;k=(j+(d>>>3|0)|0)+1|0;q[a+7448>>2]=k;q[a+7452>>2]=(i-(d&-8)|0)-8}i=q[a+7444>>2];if((k|0)>=100){q[a+7448>>2]=k-100}r=6;d=j+1|0;c=(i|0)==(j|0)?j:((e|0)/50|0)>=(c|0)?j:(d|0)==100?0:d;c=c-((c|0)==(i|0))|0;c=(c|0)<0?99:c;k=(c<<6)+a|0;e=k+7660|0;d=q[e+4>>2];q[b+56>>2]=q[e>>2];q[b+60>>2]=d;e=k+7652|0;d=q[e+4>>2];q[b+48>>2]=q[e>>2];q[b+52>>2]=d;e=k+7644|0;d=q[e+4>>2];q[b+40>>2]=q[e>>2];q[b+44>>2]=d;e=k+7636|0;d=q[e+4>>2];q[b+32>>2]=q[e>>2];q[b+36>>2]=d;e=k+7628|0;d=q[e+4>>2];q[b+24>>2]=q[e>>2];q[b+28>>2]=d;e=k+7620|0;d=q[e+4>>2];q[b+16>>2]=q[e>>2];q[b+20>>2]=d;e=k+7612|0;d=q[e+4>>2];q[b+8>>2]=q[e>>2];q[b+12>>2]=d;d=k+7604|0;e=q[d+4>>2];d=q[d>>2];q[b>>2]=d;q[b+4>>2]=e;if(d){s=i-j|0;k=(s|0)<0;i=s+100|0;f=u[b+4>>2];g=x(1);o=c+1|0;j=(o|0)==100?0:o;n=q[a+7444>>2];a:{if((j|0)==(n|0)){h=f;break a}d=(j<<6)+a|0;g=u[d+7608>>2];e=q[b+32>>2];d=q[d+7636>>2];e=(d|0)<(e|0)?e:d;q[b+32>>2]=e;h=f>g?f:g;f=x(f+g);d=j+1|0;j=(d|0)==100?0:d;if((j|0)==(n|0)){r=5;g=x(2);break a}d=(j<<6)+a|0;g=u[d+7608>>2];d=q[d+7636>>2];e=(d|0)<(e|0)?e:d;q[b+32>>2]=e;h=g>2];d=q[d+7636>>2];q[b+32>>2]=(d|0)<(e|0)?e:d;h=g>2];i=q[((e<<6)+a|0)+7636>>2];q[b+32>>2]=(i|0)<(k|0)?k:i;d=d+1|0;if((r|0)!=(d|0)){continue}}break}f=x(f/g);h=x(h+x(-.20000000298023224));u[b+4>>2]=f>h?f:h;d=c;e=d;if((j|0)>=16){d=((c|0)>94?-95:5)+c|0;o=d+1|0;e=((c|0)>98?-99:1)+c|0}i=a+7604|0;t=u[(i+(e<<6)|0)+36>>2];f=x(B(t,x(.10000000149011612)));h=x(u[(i+(d<<6)|0)+20>>2]*f);d=(o|0)==100?0:o;b:{if((n|0)==(d|0)){g=x(1);break b}g=x(1);while(1){e=e+1|0;e=(e|0)==100?0:e;if((n|0)==(e|0)){break b}v=u[(i+(e<<6)|0)+36>>2];p=x(x(t-v)*x(10));l=x(x(h+p)/f);m=l>m?l:m;l=x(x(h-p)/f);g=g>l?l:g;l=x(B(v,x(.10000000149011612)));h=x(h+x(u[(i+(d<<6)|0)+20>>2]*l));f=x(f+l);d=d+1|0;d=(d|0)==100?0:d;if((n|0)!=(d|0)){continue}break}}f=x(h/f);u[b+20>>2]=f;h=f>m?f:m;m=hx(0)?h:x(0);if((j|0)<=9){h=f;g=m;d=q[a+7436>>2];if((d|0)>=2){d=(d|0)>15?15:d-1|0;d=(d|0)>1?d:1;e=0;while(1){c=(c|0)<1?99:c-1|0;l=u[((c<<6)+a|0)+7624>>2];g=g>l?g:l;h=h>2]=m;u[b+24>>2]=f}}function Kc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,H=x(0),I=x(0),J=x(0),K=0,L=0,M=0;h=ca-992|0;ca=h;g=w(d,e);if((g|0)<385){y=ta(b,g);la(h+800|0,0,192);if((e|0)>=1){while(1){g=1;if((f|0)>=1){m=(w(d,i)<<2)+b|0;while(1){n=(g<<3)+h|0;L=n+792|0,M=Wa(m,m+(g<<2)|0,d-g|0)+v[n+792>>3],v[L>>3]=M;n=(f|0)!=(g|0);g=g+1|0;if(n){continue}break}}i=i+1|0;if((i|0)!=(e|0)){continue}break}}ka(h+608|0,h+800|0,192);D=y*9999999747378752e-21;r=y+D+9.999999717180685e-10;v[h+192>>3]=r;v[h+400>>3]=r;a:{b:{if((f|0)<1){k=1;break b}z=+c;i=0;B=2;A=1;E=1;q=1;c:{while(1){if((e|0)>=1){s=d-i|0;t=s-1|0;n=0;while(1){m=(w(d,n)<<2)+b|0;c=u[m+(t<<2)>>2];l=+c;H=u[m+(i<<2)>>2];k=+H;g=0;if(i){while(1){p=g<<3;o=p+(h+800|0)|0;I=u[m+((g^-1)+i<<2)>>2];v[o>>3]=v[o>>3]- +x(H*I);o=p+(h+608|0)|0;J=u[m+(g+s<<2)>>2];v[o>>3]=v[o>>3]- +x(c*J);j=v[h+p>>3];k=k+j*+I;l=l+j*+J;g=g+1|0;if((i|0)!=(g|0)){continue}break}}g=0;while(1){p=g<<3;o=p+(h+400|0)|0;v[o>>3]=v[o>>3]-k*+u[m+(i-g<<2)>>2];p=p+(h+192|0)|0;v[p>>3]=v[p>>3]-l*+u[m+(g+t<<2)>>2];g=g+1|0;if((A|0)!=(g|0)){continue}break}n=n+1|0;if((n|0)!=(e|0)){continue}break}}t=i<<3;k=v[t+(h+608|0)>>3];l=v[t+(h+800|0)>>3];g=0;if(i){while(1){j=v[(g<<3)+h>>3];m=(g^-1)+i<<3;k=k+j*v[m+(h+800|0)>>3];l=l+j*v[m+(h+608|0)>>3];g=g+1|0;if((i|0)!=(g|0)){continue}break}}m=i+1|0;g=m<<3;v[g+(h+400|0)>>3]=l;p=g+(h+192|0)|0;v[p>>3]=k;g=0;l=v[h+192>>3];r=v[h+400>>3];j=r;if(i){while(1){C=v[(g<<3)+h>>3];n=g+1|0;s=n<<3;j=j+C*v[s+(h+400|0)>>3];l=l+C*v[s+(h+192|0)>>3];k=k+C*v[(h+192|0)+(i-g<<3)>>3];g=n;if((i|0)!=(g|0)){continue}break}}l=k*-2/(j+l);j=q*(1-l*l);n=z>=j;if(!(n^1)){j=F(1-z/q);l=k>0?-j:j;j=z}if(m&2147483646){s=A>>>1|0;g=0;while(1){o=(g<<3)+h|0;q=v[o>>3];K=o;o=((g^-1)+i<<3)+h|0;k=v[o>>3];v[K>>3]=q+l*k;v[o>>3]=k+l*q;g=g+1|0;if((s|0)!=(g|0)){continue}break}}v[h+t>>3]=l;d:{if(!n){q=v[p>>3];v[p>>3]=q+l*r;v[h+400>>3]=r+l*q;g=1;while(1){i=(h+192|0)+(m-g<<3)|0;q=v[i>>3];n=i;i=(h+400|0)+(g<<3)|0;k=v[i>>3];v[n>>3]=q+l*k;v[i>>3]=k+l*q;g=g+1|0;if((B|0)!=(g|0)){continue}break}break d}if((f|0)>(m|0)){la((m<<3)+h|0,0,f-m<<3)}if(!E){break c}g=0;while(1){u[(g<<2)+a>>2]=-x(v[(g<<3)+h>>3]);g=g+1|0;if((g|0)!=(f|0)){continue}break}g=0;if((e|0)>0){while(1){y=y-ta((w(d,g)<<2)+b|0,f);g=g+1|0;if((g|0)!=(e|0)){continue}break}}j=j*y;break a}B=B+1|0;A=A+1|0;E=(f|0)>(m|0);q=j;i=m;if((i|0)!=(f|0)){continue}break}r=v[h+400>>3]}k=1;if((f|0)<1){break b}g=0;while(1){b=g+1|0;z=v[(h+400|0)+(b<<3)>>3];j=v[(g<<3)+h>>3];u[(g<<2)+a>>2]=-x(j);r=r+j*z;k=k+j*j;g=b;if((g|0)!=(f|0)){continue}break}}j=r-D*k}ca=h+992|0;return x(j)}ja(38137,38197,55);G()}function Ga(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,s=0,t=0,u=0,v=0,x=0;g=ca-320|0;ca=g;a:{switch(c-10|0){default:ja(1674,1707,89);G();case 0:case 6:break a}}i=(c|0)==16?1648:1664;while(1){h=p[(f<<1)+b>>1];d=(h>>8<<1)+1376|0;e=p[d>>1];q[(g+224|0)+(r[f+i|0]<<2)>>2]=(w(p[d+2>>1]-e|0,h&255)+(e<<8)>>3)+1>>1;f=f+1|0;if((f|0)!=(c|0)){continue}break}h=65536;q[g+160>>2]=65536;e=0-q[g+224>>2]|0;q[g+164>>2]=e;f=1;k=c>>1;b:{v=(c|0)<4;if(v){break b}b=e;while(1){s=q[(g+224|0)+(f<<3)>>2];i=s;l=i;m=i>>31;i=yg(i,m,b,b>>31);j=da;d=j>>>15|0;j=((j&32767)<<17|i>>>15)+1|0;if(j>>>0<1){d=d+1|0}i=f+1|0;t=(g+160|0)+(i<<2)|0;q[t>>2]=(h<<1)-((d&1)<<31|j>>>1);d=f<<2;j=d+(g+160|0)|0;x=g;if(f>>>0>=2){n=j;e=q[(d+g|0)+152>>2];o=e+b|0;b=yg(h,h>>31,l,m);h=da;d=h>>>15|0;b=((h&32767)<<17|b>>>15)+1|0;if(b>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|b>>>1);if((f|0)!=2){while(1){b=f-1|0;d=(g+160|0)+(b<<2)|0;n=d;h=q[((f<<2)+g|0)+148>>2];o=h+q[d>>2]|0;e=yg(e,e>>31,l,m);u=da;d=u>>>15|0;e=((u&32767)<<17|e>>>15)+1|0;if(e>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|e>>>1);d=(f|0)>3;f=b;e=h;if(d){continue}break}}e=q[g+164>>2]}e=e-s|0;q[x+164>>2]=e;if((i|0)==(k|0)){break b}b=q[t>>2];h=q[j>>2];f=i;continue}}h=65536;q[g+96>>2]=65536;e=0-q[g+228>>2]|0;q[g+100>>2]=e;c:{if(v){break c}v=g+224|4;f=1;b=e;while(1){s=q[v+(f<<3)>>2];i=s;l=i;m=i>>31;i=yg(i,m,b,b>>31);j=da;d=j>>>15|0;j=((j&32767)<<17|i>>>15)+1|0;if(j>>>0<1){d=d+1|0}i=f+1|0;t=(g+96|0)+(i<<2)|0;q[t>>2]=(h<<1)-((d&1)<<31|j>>>1);d=f<<2;j=d+(g+96|0)|0;x=g;if(f>>>0>=2){n=j;e=q[(d+g|0)+88>>2];o=e+b|0;b=yg(h,h>>31,l,m);h=da;d=h>>>15|0;b=((h&32767)<<17|b>>>15)+1|0;if(b>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|b>>>1);if((f|0)!=2){while(1){b=f-1|0;d=(g+96|0)+(b<<2)|0;n=d;h=q[((f<<2)+g|0)+84>>2];o=h+q[d>>2]|0;e=yg(e,e>>31,l,m);u=da;d=u>>>15|0;e=((u&32767)<<17|e>>>15)+1|0;if(e>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|e>>>1);d=(f|0)>3;f=b;e=h;if(d){continue}break}}e=q[g+100>>2]}e=e-s|0;q[x+100>>2]=e;if((i|0)==(k|0)){break c}b=q[t>>2];h=q[j>>2];f=i;continue}}if((c|0)>=2){d=(k|0)>1?k:1;h=q[g+96>>2];b=q[g+160>>2];f=0;while(1){e=f+1|0;k=e<<2;i=q[k+(g+96|0)>>2];h=i-h|0;l=b;b=q[k+(g+160|0)>>2];k=l+b|0;q[(f<<2)+g>>2]=0-(h+k|0);q[((f^-1)+c<<2)+g>>2]=h-k;h=i;f=e;if((d|0)!=(f|0)){continue}break}}Cd(a,g,c);d:{if(qb(a,c)){break d}e=0;while(1){sb(g,c,(-2<>1]=(q[(f<<2)+g>>2]>>>4|0)+1>>>1;f=f+1|0;if((f|0)!=(c|0)){continue}break}b=qb(a,c);if(e>>>0>14){break d}e=e+1|0;if(!b){continue}break}}ca=g+320|0}function Lc(a,b,c,d,e,f){var g=0,h=x(0),i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0;i=ca-1008|0;ca=i;a:{b:{n=q[a+4580>>2];if((n|0)<1){break b}k=q[a+4636>>2];m=(k|0)<1;while(1){if(!m){s=w(j,24);g=0;while(1){l=g+s|0;t=(i+48|0)+(l<<1)|0;h=zg(x(u[((l<<2)+b|0)+244>>2]*x(8192)));c:{if(x(y(h))>1]=l;g=g+1|0;if((k|0)!=(g|0)){continue}break}}j=j+1|0;if((n|0)!=(j|0)){continue}break}j=0;if((n|0)<=0){break b}while(1){g=j<<2;k=g+b|0;h=zg(x(u[k+644>>2]*x(16384)));d:{if(x(y(h))>2]*x(16384)));e:{if(x(y(h))>2]=m&65535|l<<16;m=g+(i+16|0)|0;h=zg(x(u[k+660>>2]*x(16384)));f:{if(x(y(h))>2]=l;g=g+i|0;h=zg(x(u[k+676>>2]*x(16384)));g:{if(x(y(h))>2]=l;j=j+1|0;if((n|0)!=(j|0)){continue}break}h=zg(x(u[b+692>>2]*x(1024)));h:{if(x(y(h))1?g:1;g=0;while(1){m=(i+240|0)+(g<<1)|0;h=zg(x(u[((g<<2)+b|0)+144>>2]*x(16384)));i:{if(x(y(h))>1]=j;g=g+1|0;if((k|0)!=(g|0)){continue}break}break a}h=zg(x(u[b+692>>2]*x(1024)));j:{if(x(y(h))>2];k:{if((j|0)<=0){break k}while(1){m=(i+288|0)+(g<<1)|0;h=zg(x(u[((g<<2)+b|0)+16>>2]*x(4096)));l:{if(x(y(h))>1]=k;g=g+1|0;if((j|0)!=(g|0)){continue}break}g=0;if((j|0)<=0){break k}while(1){m=(g<<1)+i|0;h=zg(x(u[((g<<2)+b|0)+80>>2]*x(4096)));m:{if(x(y(h))>1]=k;g=g+1|0;if((j|0)!=(g|0)){continue}break}}g=0;if((n|0)>0){while(1){j=g<<2;k=j+(i+352|0)|0;h=zg(x(u[b+j>>2]*x(65536)));n:{if(x(y(h))>2]=j;g=g+1|0;if((n|0)!=(g|0)){continue}break}}g=0;j=0;j=r[c+29|0]==2?p[(o[c+33|0]<<1)+6424>>1]:j;k=q[a+4584>>2];if((k|0)>=1){while(1){m=(i+368|0)+(g<<1)|0;h=zg(u[(g<<2)+f>>2]);o:{if(x(y(h))>1]=n;g=g+1|0;if((k|0)!=(g|0)){continue}break}}p:{if(!(q[a+4672>>2]<1?q[a+4628>>2]<=1:0)){Df(a,d,c,i+368|0,e,i+288|0,i+240|0,i+48|0,i,i+16|0,i+32|0,i+352|0,b+228|0,l,j);break p}Bf(a,d,c,i+368|0,e,i+288|0,i+240|0,i+48|0,i,i+16|0,i+32|0,i+352|0,b+228|0,l,j)}ca=i+1008|0}function qb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0;i=ca-96|0;a:{b:{if((b|0)>0){while(1){j=p[(d<<1)+a>>1];q[(d<<2)+i>>2]=j<<12;f=f+j|0;d=d+1|0;if((d|0)!=(b|0)){continue}break}if((f|0)>4095){return 0}d=b-1|0;a=1073741824;if((b|0)<2){f=d;break b}while(1){j=d;f=q[(d<<2)+i>>2];if(f+16773022>>>0>33546044){return 0}d=a;c=h;a=0-(f<<7)|0;h=a>>31;l=a;yg(a,h,a,h);a=1073741824-da|0;f=yg(d,c,a,a>>31);s=((da&1073741823)<<2|f>>>30)&-4;d=0;if((s|0)<107374){break a}f=0;d=a;a=a>>31;m=z(d+a^a);d=d<>16;g=536870911/(c|0)|0;e=g<<16;a=e>>16;d=0-(w(a,c)+(w(a,d&65535)>>16)<<3)|0;a=((e+w(d,(g>>15)+1>>1)|0)+w(a,d>>16)|0)+(w(a,d&65528)>>16)|0;n=a;o=a>>31;a=b>>>1|0;u=a>>>0>1?a:1;d=31-m|0;while(1){r=(f<<2)+i|0;c=q[r>>2];k=c;t=(j+(f^-1)<<2)+i|0;g=q[t>>2];a=g;e=yg(a,a>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|e>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;e=k-b|0;a=(e|0)>-1;a=(((a?b:c)^-1)&(a?c:b))>-1?e:a?-2147483648:2147483647;e=yg(a,a>>31,n,o);a=da;c:{d:{e:{if((m|0)==31){b=a;a=a>>1;k=(b&1)<<31|e>>>1;e=k+(e&1)|0;b=e>>>0>>0?a+1|0:a;a=b;if(!(e- -2147483648>>>0<2147483648?a+1|0:a)){break e}return 0}b=a;k=e;a=d;e=a&31;if((a&63)>>>0>=32){a=b>>31;b=b>>e}else{a=b>>e;b=((1<>>e}b=b+1|0;if(b>>>0<1){a=a+1|0}e=(a&1)<<31|b>>>1;a=a>>1;if(!(e- -2147483648>>>0<2147483648?a+1|0:a)){break d}return 0}q[r>>2]=e;c=yg(c,c>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|c>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;c=g-b|0;a=(c|0)>-1;a=(((a?b:g)^-1)&(a?g:b))>-1?c:a?-2147483648:2147483647;a=yg(a,a>>31,n,o);e=a&1;c=a;b=da;a=b>>1;c=(b&1)<<31|c>>>1;b=e+c|0;a=b>>>0>>0?a+1|0:a;break c}q[r>>2]=e;c=yg(c,c>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|c>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;c=g-b|0;a=(c|0)>-1;a=(((a?b:g)^-1)&(a?g:b))>-1?c:a?-2147483648:2147483647;a=yg(a,a>>31,n,o);c=da;g=a;a=d;b=a&31;if((a&63)>>>0>=32){a=c>>31;b=c>>b}else{a=c>>b;b=((1<>>b}c=b+1|0;b=c>>>0<1?a+1|0:a;a=b>>1;b=(b&1)<<31|c>>>1}if(b- -2147483648>>>0<2147483648){a=a+1|0}if(a){return 0}q[t>>2]=b;f=f+1|0;if((u|0)!=(f|0)){continue}break}d=j-1|0;a=s;h=a>>31;f=0;b=j;if((b|0)>1){continue}break}break b}f=b-1|0;a=1073741824}d=0;if(q[(f<<2)+i>>2]+16773022>>>0>33546044){break a}d=a;b=0-(q[i>>2]<<7)|0;a=b>>31;yg(b,a,b,a);b=1073741824-(da&2147483647)|0;a=yg(d,h,b,b>>31);a=((da&1073741823)<<2|a>>>30)&-4;d=(a|0)<107374?0:a}return d}function pe(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=ca-48|0;ca=g;Hg(+a);d=Eg(1)|0;f=Eg(0)|0;a:{b:{e=d;d=e;h=e&2147483647;c:{if(h>>>0<=1074752122){if((d&1048575)==598523){break c}if(h>>>0<=1073928572){if((e|0)>0?1:(e|0)>=0){a=a+ -1.5707963267341256;c=a+ -6.077100506506192e-11;v[b>>3]=c;v[b+8>>3]=a-c+ -6.077100506506192e-11;d=1;break a}a=a+1.5707963267341256;c=a+6.077100506506192e-11;v[b>>3]=c;v[b+8>>3]=a-c+6.077100506506192e-11;d=-1;break a}if((e|0)>0?1:(e|0)>=0){a=a+ -3.1415926534682512;c=a+ -1.2154201013012384e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -1.2154201013012384e-10;d=2;break a}a=a+3.1415926534682512;c=a+1.2154201013012384e-10;v[b>>3]=c;v[b+8>>3]=a-c+1.2154201013012384e-10;d=-2;break a}if(h>>>0<=1075594811){if(h>>>0<=1075183036){if((h|0)==1074977148){break c}if((e|0)>0?1:(e|0)>=0){a=a+ -4.712388980202377;c=a+ -1.8231301519518578e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -1.8231301519518578e-10;d=3;break a}a=a+4.712388980202377;c=a+1.8231301519518578e-10;v[b>>3]=c;v[b+8>>3]=a-c+1.8231301519518578e-10;d=-3;break a}if((h|0)==1075388923){break c}if((e|0)>0?1:(e|0)>=0){a=a+ -6.2831853069365025;c=a+ -2.430840202602477e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -2.430840202602477e-10;d=4;break a}a=a+6.2831853069365025;c=a+2.430840202602477e-10;v[b>>3]=c;v[b+8>>3]=a-c+2.430840202602477e-10;d=-4;break a}if(h>>>0>1094263290){break b}}j=a*.6366197723675814+6755399441055744+ -6755399441055744;c=a+j*-1.5707963267341256;i=j*6.077100506506192e-11;a=c-i;v[b>>3]=a;Hg(+a);d=Eg(1)|0;Eg(0)|0;e=h>>>20|0;f=(e-(d>>>20&2047)|0)<17;if(y(j)<2147483648){d=~~j}else{d=-2147483648}d:{if(f){break d}i=c;a=j*6.077100506303966e-11;c=c-a;i=j*2.0222662487959506e-21-(i-c-a);a=c-i;v[b>>3]=a;f=e;Hg(+a);e=Eg(1)|0;Eg(0)|0;if((f-(e>>>20&2047)|0)<50){break d}i=c;a=j*2.0222662487111665e-21;c=c-a;i=j*8.4784276603689e-32-(i-c-a);a=c-i;v[b>>3]=a}v[b+8>>3]=c-a-i;break a}if(h>>>0>=2146435072){a=a-a;v[b>>3]=a;v[b+8>>3]=a;d=0;break a}Fg(0,f|0);Fg(1,e&1048575|1096810496);a=+Gg();d=0;f=1;while(1){k=(g+16|0)+(d<<3)|0;if(y(a)<2147483648){d=~~a}else{d=-2147483648}c=+(d|0);v[k>>3]=c;a=(a-c)*16777216;d=1;k=f&1;f=0;if(k){continue}break}v[g+32>>3]=a;e:{if(a!=0){d=2;break e}f=1;while(1){d=f;f=d-1|0;if(v[(g+16|0)+(d<<3)>>3]==0){continue}break}}d=qe(g+16|0,g,(h>>>20|0)-1046|0,d+1|0);a=v[g>>3];if((e|0)<-1?1:(e|0)<=-1){v[b>>3]=-a;v[b+8>>3]=-v[g+8>>3];d=0-d|0;break a}v[b>>3]=a;v[b+8>>3]=v[g+8>>3]}ca=g+48|0;return d}function yd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r){var s=0,t=0,v=x(0),B=0,C=0,D=0,E=0,F=0,G=x(0),H=0,I=x(0),J=0,K=0,L=0;t=ca-96|0;s=t;ca=s;F=1;a:{if(m){break a}F=0;if(o){break a}m=w(c-b|0,j);if(u[n>>2]>x(m<<1)^1){break a}F=(l|0)>(m|0)}G=x(x(x(u[n>>2]*x(g>>>0))*x(p|0))/x(j<<9));D=(j|0)>1?j:1;C=q[a+8>>2];p=0;while(1){if((b|0)<(d|0)){H=w(p,C);m=b;while(1){I=v;B=m+H<<2;v=x(u[B+e>>2]-u[f+B>>2]);v=x(I+x(v*v));m=m+1|0;if((m|0)!=(d|0)){continue}break}}p=p+1|0;if((D|0)!=(p|0)){continue}break}d=q[i+20>>2];D=q[i+28>>2];m=q[i+20>>2];q[s+88>>2]=q[i+16>>2];q[s+92>>2]=m;m=q[i+12>>2];q[s+80>>2]=q[i+8>>2];q[s+84>>2]=m;m=q[i+4>>2];q[s+72>>2]=q[i>>2];q[s+76>>2]=m;m=q[i+24>>2];p=q[i+40>>2];q[s+56>>2]=q[i+36>>2];q[s+60>>2]=p;q[s- -64>>2]=q[i+44>>2];p=q[i+32>>2];q[s+48>>2]=q[i+28>>2];q[s+52>>2]=p;C=t-((w(j,C)<<2)+15&-16)|0;p=C;ca=p;t=w(q[a+8>>2],j)<<2;p=p-(t+15&-16)|0;B=p;ca=p;C=ka(C,f,t);I=(c-b|0)>10?x(A(x(x(l|0)*x(.125)),x(16))):x(16);l=0;t=o;o=d+z(D)|0;d=o-29>>>0>g>>>0;K=d?0:t;t=d?0:F;D=K|t;if(x(y(G))>2];q[s+40>>2]=q[i+20>>2];o=q[i+16>>2];q[s+32>>2]=q[i+12>>2];q[s+36>>2]=o;o=q[i+8>>2];q[s+24>>2]=q[i+4>>2];q[s+28>>2]=o;D=q[i+24>>2];H=i+28|0;o=H+8|0;J=q[o+4>>2];q[s+8>>2]=q[o>>2];q[s+12>>2]=J;q[s+16>>2]=q[i+44>>2];o=q[i+32>>2];q[s>>2]=q[i+28>>2];q[s+4>>2]=o;o=D-m|0;B=B-((o?o:1)+15&-16)|0;ca=B;E=B;B=m+t|0;J=ka(E,B,o);E=q[s+92>>2];q[i+16>>2]=q[s+88>>2];q[i+20>>2]=E;E=q[s+84>>2];q[i+8>>2]=q[s+80>>2];q[i+12>>2]=E;E=q[s+76>>2];q[i>>2]=q[s+72>>2];q[i+4>>2]=E;q[i+24>>2]=m;q[i+44>>2]=q[s- -64>>2];m=q[s+60>>2];q[H+8>>2]=q[s+56>>2];q[H+12>>2]=m;m=q[s+52>>2];q[i+28>>2]=q[s+48>>2];q[i+32>>2]=m;b=Qb(a,b,c,e,f,g,F,w(k,84)+24880|0,h,i,j,k,0,G,r);if(!K){break c}if((b|0)<=(l|0)){if((b|0)!=(l|0)){break c}if((L|0)>=(wa(i)+d|0)){break c}}q[i>>2]=t;q[i+20>>2]=q[s+40>>2];b=q[s+36>>2];q[i+12>>2]=q[s+32>>2];q[i+16>>2]=b;b=q[s+28>>2];q[i+4>>2]=q[s+24>>2];q[i+8>>2]=b;q[i+24>>2]=D;q[i+44>>2]=q[s+16>>2];b=q[s+12>>2];q[i+36>>2]=q[s+8>>2];q[i+40>>2]=b;b=q[s+4>>2];q[i+28>>2]=q[s>>2];q[i+32>>2]=b;ka(B,J,o);b=j<<2;ka(f,C,w(b,q[a+8>>2]));ka(h,p,w(b,q[a+8>>2]));break b}b=j<<2;ka(f,C,w(b,q[a+8>>2]));ka(h,p,w(b,q[a+8>>2]));break b}I=v;v=u[(k<<2)+25216>>2];v=x(I+x(x(v*v)*u[n>>2]))}u[n>>2]=v;ca=s+96|0}function Kb(a,b,c,d,e,f,g,h,i,j,k){var l=x(0),m=0,n=0,o=0,p=x(0),r=0,s=0,t=x(0),v=0,w=x(0),y=0,z=x(0),A=0;n=ca-32|0;ca=n;q[n+24>>2]=k;q[n+28>>2]=e;e=q[a+28>>2];v=q[a>>2];a:{if((d|0)==1){d=0;k=q[a+32>>2];if((k|0)>=8){b:{if(v){d=u[b>>2]>2]-8|0;q[a+32>>2]=k}h=q[a+4>>2];if(h){u[b>>2]=d?x(-1):x(1)}if(c){g=c?2:1;f=1;while(1){d=0;if((k|0)>=8){c:{if(v){d=u[c>>2]>2]-8|0;q[a+32>>2]=k;h=q[a+4>>2]}if(h){u[c>>2]=d?x(-1):x(1)}f=f+1|0;if((g|0)!=(f|0)){continue}break}}h=1;if(!i){break a}u[i>>2]=u[b>>2];break a}hd(a,n,b,c,d,n+28|0,f,f,h,1,n+24|0);l=x(x(q[n+8>>2])*x(30517578125e-15));w=x(x(q[n+4>>2])*x(30517578125e-15));m=q[n+20>>2];o=q[n+16>>2];A=q[n>>2];d:{if((d|0)==2){r=q[n+28>>2];y=o&-16385;s=((y|0)!=0)<<3;q[a+32>>2]=q[a+32>>2]-(s+m|0);o=(o|0)>8192;m=o?b:c;o=o?c:b;s=r-s|0;r=0;e:{if(!y){break e}if(v){r=x(x(u[o>>2]*u[m+4>>2])-x(u[o+4>>2]*u[m>>2]))>2]=u[o+4>>2]*x(0-e|0);u[m+4>>2]=u[o>>2]*x(e|0);if(!q[a+4>>2]){break d}u[b>>2]=w*u[b>>2];u[b+4>>2]=w*u[b+4>>2];p=x(l*u[c>>2]);u[c>>2]=p;u[c+4>>2]=l*u[c+4>>2];l=u[b>>2];u[b>>2]=l-p;u[c>>2]=l+u[c>>2];l=u[b+4>>2];u[b+4>>2]=l-u[c+4>>2];u[c+4>>2]=l+u[c+4>>2];break d}e=q[n+28>>2];r=q[n+12>>2];v=q[a+32>>2]-m|0;q[a+32>>2]=v;k=q[n+24>>2];s=e;m=(e-r|0)/2|0;e=(e|0)<(m|0)?e:m;e=(e|0)>0?e:0;m=s-e|0;if((e|0)>=(m|0)){g=Ba(a,b,d,e,f,g,h,i,x(1),j,k);e=e+(q[a+32>>2]-v|0)|0;h=g|Ba(a,c,d,(o?(e|0)>24?e-24|0:0:0)+m|0,f,0,h,0,l,0,k>>f);break d}s=Ba(a,c,d,m,f,0,h,0,l,0,k>>f);m=m+(q[a+32>>2]-v|0)|0;h=s|Ba(a,b,d,e+((o|0)!=16384?(m|0)>24?m-24|0:0:0)|0,f,g,h,i,x(1),j,k)}if(!q[a+4>>2]){break a}f:{if((d|0)==2){break f}p=x(0);g:{if((d|0)<1){l=x(0);break g}a=0;l=x(0);while(1){e=a<<2;t=u[e+c>>2];l=x(l+x(t*u[b+e>>2]));p=x(p+x(t*t));a=a+1|0;if((d|0)!=(a|0)){continue}break}}h:{p=x(x(w*w)+p);l=x(w*l);l=x(l+l);t=x(p+l);if(!(t>2]);e=c+e|0;z=u[e>>2];u[f>>2]=t*x(l-z);u[e>>2]=p*x(l+z);a=a+1|0;if((d|0)!=(a|0)){continue}break}}if(!A|(d|0)<1){break a}a=0;while(1){b=(a<<2)+c|0;u[b>>2]=-u[b>>2];a=a+1|0;if((d|0)!=(a|0)){continue}break}}ca=n+32|0;return h}function Za(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,s=0,t=0,v=0,y=x(0),z=x(0),A=0;l=ca-32|0;ca=l;q[l+24>>2]=i;q[l+28>>2]=d;j=q[a+8>>2];m=q[j+100>>2]+p[q[j+96>>2]+(q[a+12>>2]+w(q[j+8>>2],g+1|0)<<1)>>1]|0;k=r[m|0];n=-1;o=q[a+28>>2];s=q[a+20>>2];v=q[a>>2];a:{if(!((g|0)==-1|(c|0)<3|(r[k+m|0]+12|0)>=(d|0))){n=c>>>1|0;j=(n<<2)+b|0;if((e|0)==1){q[l+24>>2]=i&1|i<<1}o=e+1>>1;s=g-1|0;hd(a,l,b,j,n,l+28|0,o,e,s,0,l+24|0);y=x(q[l+8>>2]);z=x(q[l+4>>2]);d=q[l+20>>2];i=q[l+12>>2];v=q[l+16>>2];c=i;b:{if(!(v&16383)|(e|0)<2){break b}c=i-(i>>5-g)|0;if((v|0)>=8193){break b}c=(n<<3>>6-g)+i|0;c=c>>31&c}i=c;y=x(y*x(30517578125e-15));z=x(z*x(30517578125e-15));k=q[l+28>>2];g=q[a+32>>2]-d|0;q[a+32>>2]=g;d=f?(n<<2)+f|0:0;m=k;c=(k-i|0)/2|0;c=(c|0)>(k|0)?k:c;k=(c|0)>0?c:0;i=m-k|0;if((i|0)<=(k|0)){c=b;b=q[l+24>>2];f=Za(a,c,n,k,o,f,s,x(z*h),b);c=a;a=k+(q[a+32>>2]-g|0)|0;j=f|Za(c,j,n,i+(v?(a|0)>24?a-24|0:0:0)|0,o,d,s,x(y*h),b>>o)<<(e>>1);break a}c=d;d=q[l+24>>2];c=Za(a,j,n,i,o,c,s,x(y*h),d>>o);j=a;a=i+(q[a+32>>2]-g|0)|0;j=Za(j,b,n,k+((v|0)!=16384?(a|0)>24?a-24|0:0:0)|0,o,f,s,x(z*h),d)|c<<(e>>1);break a}t=d-1|0;j=k+1>>>1|0;d=(t|0)>r[j+m|0];g=d?k:j;d=d?j:0;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>1;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>1;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;if(d){n=r[d+m|0]}d=(t-n|0)>(r[g+m|0]-t|0)?g:d;if(d){A=r[d+m|0]+1|0}j=q[a+32>>2]-A|0;q[a+32>>2]=j;c:{d:{if((j|0)>-1){g=d;break d}if((d|0)<1){g=d;break d}while(1){j=j+A|0;q[a+32>>2]=j;g=d-1|0;if(!g){q[a+32>>2]=j;break c}A=r[g+m|0]+1|0;j=j-A|0;q[a+32>>2]=j;if((j|0)>-1){break d}k=(d|0)>1;d=g;if(k){continue}break}}if(!g){break c}g=(g|0)>=8?(g&7|8)<<(g>>>3|0)-1:g;if(v){j=qd(b,c,g,s,e,o,h,q[a+4>>2]);break a}j=pd(b,c,g,s,e,o,h);break a}if(!q[a+4>>2]){j=0;break a}j=-1<>2]=e;if(!e){j=0;la(b,0,c<<2);break a}e:{if(f){if((c|0)>=1){d=q[a+40>>2];g=0;while(1){i=g<<2;d=w(d,1664525)+1013904223|0;u[i+b>>2]=u[f+i>>2]+(d&32768?x(.00390625):x(-.00390625));g=g+1|0;if((g|0)!=(c|0)){continue}break}q[a+40>>2]=d}j=e;break e}if((c|0)<1){break e}d=q[a+40>>2];g=0;while(1){d=w(d,1664525)+1013904223|0;u[(g<<2)+b>>2]=d>>20;g=g+1|0;if((g|0)!=(c|0)){continue}break}q[a+40>>2]=d}nb(b,c,h)}ca=l+32|0;return j}function eb(a,b,c,d,e){var f=0,g=0,h=0;a:{if((d|0)>=(e|0)){b:{c:{switch(e-6|0){case 0:if((d|0)<7){break b}g=6;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 2:if((d|0)<9){break b}g=8;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 4:if((d|0)<11){break b}g=10;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 6:if((d|0)<13){break b}g=12;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]))+x(u[f-44>>2]*u[b+40>>2]))+x(u[f-48>>2]*u[b+44>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 10:break c;default:break a}}if((d|0)<17){break b}g=16;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]))+x(u[f-44>>2]*u[b+40>>2]))+x(u[f-48>>2]*u[b+44>>2]))+x(u[f-52>>2]*u[b+48>>2]))+x(u[f-56>>2]*u[b+52>>2]))+x(u[f-60>>2]*u[b+56>>2]))+x(u[f+ -64>>2]*u[b+60>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}}la(a,0,e<<2);return}ja(36422,36456,218);G()}ja(36493,36456,242);G()}function Vc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0;j=ca-16|0;ca=j;Ka(j+4|0,j+12|0,b,e);Ka(j,j+8|0,c,e);g=q[j+12>>2];k=q[j+8>>2];i=(g|0)>(k|0)?g:k;i=(i&1)+i|0;q[j>>2]=q[j>>2]>>i-k;g=q[j+4>>2]>>i-g;q[j+4>>2]=(g|0)>1?g:1;k=Zf(b,c,i,e);c=k>>31;b=q[j+4>>2];e=b>>31;m=z(c^c+k);g=k<>16)<<16>>16;g=(w(c,g&65535)>>16)+w(c,g>>16)|0;e=yg(g,g>>31,e,e>>31);e=h-(((da&536870911)<<3|e>>>29)&-8)|0;e=(w(e>>16,c)+g|0)+(w(c,e&65535)>>16)|0;c=f;g=(m-l|0)+16|0;a:{if((g|0)<=-1){g=0-g|0;m=2147483647>>>g|0;l=-2147483648>>g;e=((e|0)>(m|0)?m:(e|0)<(l|0)?l:e)<>g:0}e=(e|0)>-16384?e:-16384;g=(e|0)<16384?e:16384;p=(w(g&65535,g)>>16)+w(g,g>>16)|0;e=p>>31;h=c;c=e^e+p;e=(c|0)<(f|0)?h:c;m=i>>1;f=0;l=q[d>>2];r=d;b:{if((b|0)<=0){c=e<<16>>16;e=w(c,0-l>>16);break b}f=z(b);i=f-24|0;h=(f&1?32768:46214)>>>(f>>>1)|0;o=h;n=24-f|0;c=b;c:{if(!n){break c}c=b<>>56-f;if(b>>>0<=127){break c}c=b<>>n}s=((w(o,w(c&127,13959168)>>>16|0)>>>16|0)+h<>16;c=e<<16>>16;o=h;e=b;d:{if(!n){break d}e=b<>>56-f;if(b>>>0<=127){break d}e=b<>>n}f=o+(w(h,w(e&127,13959168)>>>16|0)>>>16|0)|0;e=w(c,s)}l=(e+l|0)+(w((f<>16)|0;q[r>>2]=l;f=d;h=q[d+4>>2];r=h;d=p<<16>>16;e=q[j>>2]+(((w(d,b&65535)>>16)+w(d,b>>16)<<6)-(w(g,k>>16)+(w(g,k&65535)>>16)<<4)|0)|0;e:{if((e|0)<1){e=0;b=0;break e}d=z(e);n=d-24|0;i=(d&1?32768:46214)>>>(d>>>1)|0;o=i;k=24-d|0;b=e;f:{if(!k){break f}b=e<>>56-d;if(e>>>0<=127){break f}b=e<>>k}b=(w(o,w(b&127,13959168)>>>16|0)>>>16|0)+i|0;g:{if(!k){break g}if(e>>>0<=127){e=e<>>56-d;break g}e=e<>>k}e=i+(w(i,w(e&127,13959168)>>>16|0)>>>16|0)|0;b=b<>16,c)|0)+(w((e<>16)|0;q[f+4>>2]=b;e=(l|0)>1?l:1;c=z(e);d=b;b=b>>31;f=z(d+b^b);d=d<>16)<<16>>16;d=(w(b,d&65535)>>16)+w(b,d>>16)|0;e=yg(d,d>>31,e,e>>31);e=h-(((da&536870911)<<3|e>>>29)&-8)|0;b=(w(e>>16,b)+d|0)+(w(b,e&65535)>>16)|0;h=a;c=(f-c|0)+15|0;h:{if((c|0)<=-1){c=0-c|0;d=2147483647>>>c|0;e=-2147483648>>c;b=((b|0)>(d|0)?d:(b|0)<(e|0)?e:b)<>c:0}a=(b|0)>0?b:0;q[h>>2]=(a|0)<32767?a:32767;ca=j+16|0;return g}function qg(a,b,c,d,e){var f=x(0),g=0,h=x(0),i=0,j=0,k=0,l=x(0),m=x(0),n=0,o=x(0),p=0,r=0,s=x(0),t=x(0),v=x(0),y=0,z=0,A=0,C=x(0),D=0,E=x(0),G=x(0),H=x(0),I=x(0),J=0,K=0,L=x(0);j=q[c>>2]/2|0;j=(j|0)<512?j:511;k=a+2048|0;n=(b|0)/2|0;D=(d|0)/-2|0;if((b|0)>=2){a=k-(j<<2)|0;d=0;while(1){g=d<<2;f=u[g+k>>2];t=x(t+x(f*u[a+g>>2]));m=x(m+x(f*f));d=d+1|0;if((n|0)!=(d|0)){continue}break}}p=ca-2064|0;u[p>>2]=m;d=1;f=m;while(1){h=f;a=d<<2;f=u[k-a>>2];h=x(h+x(f*f));f=u[(n-d<<2)+k>>2];f=x(h-x(f*f));u[a+p>>2]=B(f,x(0));a=(d|0)!=512;d=d+1|0;if(a){continue}break}E=x(e*x(.5));z=j<<1;v=u[(j<<2)+p>>2];o=x(t/x(F(x(x(m*v)+x(1)))));G=x(o*x(.8500000238418579));H=x(o*x(.8999999761581421));I=x(o*x(.699999988079071));i=2;a=j;while(1){d=i<<1;g=(i+z>>>0)/(d>>>0)|0;if((g|0)>=7){a:{if((i|0)==2){d=g+j|0;d=(d|0)>512?j:d;break a}d=(w(q[(i<<2)+31616>>2],z)+i>>>0)/(d>>>0)|0}r=d<<2;A=g<<2;f=x(0);b:{if((b|0)<2){l=x(0);break b}J=k-r|0;K=k-A|0;d=0;l=x(0);while(1){y=d<<2;s=u[y+k>>2];f=x(f+x(s*u[y+J>>2]));l=x(l+x(s*u[y+K>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}}l=x(x(l+f)*x(.5));s=x(x(u[p+A>>2]+u[p+r>>2])*x(.5));f=x(l/x(F(x(x(m*s)+x(1)))));L=G;r=g+D|0;d=r>>31;d=d^d+r;h=e;c:{if(d>>>0<2){break c}h=x(0);if((d|0)!=2){break c}h=(j|0)>(w(w(i,i),5)|0)?E:x(0)}C=h;h=x(B(x(L-h),x(.4000000059604645)));d:{if((g|0)<21){break d}h=x(B(x(I-C),x(.30000001192092896)));if((g|0)>=14){break d}h=x(B(x(H-C),x(.5)))}if(!(h=v)){m=x(e/x(v+x(1)))}j=1;e:{if((b|0)<2){l=x(0);e=x(0);break e}g=(1-a<<2)+k|0;d=0;while(1){i=d<<2;f=x(f+x(u[i+k>>2]*u[g+i>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}l=x(0);if((b|0)<=1){e=x(0);break e}g=k-(a<<2)|0;d=0;while(1){i=d<<2;l=x(l+x(u[i+k>>2]*u[g+i>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}e=x(0);if((b|0)<2){break e}b=((a^-1)<<2)+k|0;d=0;while(1){g=d<<2;e=x(e+x(u[g+k>>2]*u[b+g>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}}f:{if(x(e-f)>x(x(l-f)*x(.699999988079071))){break f}j=-1;if(x(f-e)>x(x(l-e)*x(.699999988079071))){break f}j=0}a=(a<<1)+j|0;q[c>>2]=(a|0)<15?15:a;return m>o?o:m}function cd(a,b,c,d,e){var f=0,g=x(0),h=x(0),i=0,j=x(0),k=0,l=x(0),m=0,n=x(0),o=0,p=x(0),r=0,s=0,t=0,v=0,w=x(0),y=0;f=ca;y=f;a:{if((c|0)>0){if((d|0)<=0){break a}k=c>>>2|0;m=f-((k<<2)+15&-16)|0;f=m;ca=f;i=c+d|0;o=f-((i&-4)+15&-16)|0;f=o;ca=f;r=d>>>1|0;s=f-((r<<2)+15&-16)|0;ca=s;if(k){f=0;while(1){u[m+(f<<2)>>2]=u[(f<<3)+a>>2];f=f+1|0;if((k|0)!=(f|0)){continue}break}}if((i|0)>=4){f=i>>2;i=(f|0)>1?f:1;f=0;while(1){u[o+(f<<2)>>2]=u[(f<<3)+b>>2];f=f+1|0;if((i|0)!=(f|0)){continue}break}}v=d>>2;lb(m,o,s,k,v);g=x(1);if(k){f=0;while(1){j=u[o+(f<<2)>>2];g=x(g+x(j*j));f=f+1|0;if((k|0)!=(f|0)){continue}break}}m=0;i=1;if((d|0)>3){p=x(-1);f=0;j=x(-1);while(1){d=f<<2;h=u[d+s>>2];b:{if(h>x(0)^1){break b}h=x(h*x(9.999999960041972e-13));h=x(h*h);if(x(n*h)>x(j*g)^1){break b}if(x(l*h)>x(p*g)){i=m;m=f;j=p;p=h;n=l;l=g;break b}i=f;j=h;n=g}h=g;g=u[o+(f+k<<2)>>2];w=x(g*g);g=u[d+o>>2];g=x(B(x(h+x(w-x(g*g))),x(1)));f=f+1|0;if((v|0)!=(f|0)){continue}break}}c:{if(!r){k=c>>1;break c}k=c>>1;o=0-(i<<1)|0;v=0-(m<<1)|0;while(1){f=t<<2;m=f+s|0;q[m>>2]=0;d=t+v|0;i=d>>31;d:{if((i^d+i)>>>0>=3){d=o+t|0;i=d>>31;if((i^d+i)>>>0>2){break d}}g=x(0);if((c|0)>=2){i=b+f|0;f=0;while(1){d=f<<2;g=x(g+x(u[d+a>>2]*u[d+i>>2]));f=f+1|0;if((k|0)!=(f|0)){continue}break}}u[m>>2]=B(g,x(-1))}t=t+1|0;if((t|0)!=(r|0)){continue}break}}g=x(1);if((c|0)>1){f=0;while(1){l=u[(f<<2)+b>>2];g=x(g+x(l*l));f=f+1|0;if((k|0)!=(f|0)){continue}break}}d=0;e:{if(!r){a=0;break e}p=x(-1);l=x(0);a=0;f=0;n=x(0);j=x(-1);while(1){c=f<<2;h=u[c+s>>2];f:{if(h>x(0)^1){break f}h=x(h*x(9.999999960041972e-13));h=x(h*h);if(x(n*h)>x(j*g)^1){break f}if(x(l*h)>x(p*g)){a=f;j=p;p=h;n=l;l=g;break f}j=h;n=g}h=g;g=u[(f+k<<2)+b>>2];w=x(g*g);g=u[b+c>>2];g=x(B(x(h+x(w-x(g*g))),x(1)));f=f+1|0;if((r|0)!=(f|0)){continue}break}if((a|0)<1|(r-1|0)<=(a|0)){break e}b=(a<<2)+s|0;j=u[b+4>>2];n=u[b-4>>2];l=u[b>>2];if(x(j-n)>x(x(l-n)*x(.699999988079071))){d=-1;break e}if(!(x(n-j)>x(x(l-j)*x(.699999988079071)))){break e}d=1}q[e>>2]=(a<<1)+d;ca=y;return}ja(31592,31579,302);G()}ja(31549,31579,303);G()}function mf(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=x(0),o=0,p=x(0),r=0,s=0,t=x(0),v=0,z=0,A=0,B=0,D=0,E=0,F=0,G=x(0),H=0,I=x(0),J=0,K=0,L=0,M=0;o=ca-16|0;ca=o;B=q[a>>2];v=q[B+4>>2];s=e+1024|0;m=o-((w(s,d)<<2)+15&-16)|0;z=m;ca=m;q[o+12>>2]=m+(s<<2);q[o+8>>2]=m;D=(d|0)>1?d:1;E=e<<2;F=e+v|0;r=(v<<2)+b|0;m=0;while(1){ka(ka(q[(o+8|0)+(m<<2)>>2],(m<<12)+c|0,4096)+4096|0,r+(w(m,F)<<2)|0,E);m=m+1|0;if((D|0)!=(m|0)){continue}break}a:{if(j){j=z-((s<<1&-4)+15&-16)|0;ca=j;dd(o+8|0,j,s,d,q[a+72>>2]);cd(j+2048|0,j,e,979,o+4|0);q[o+4>>2]=1024-q[o+4>>2];n=qg(j,e,o+4|0,q[a+104>>2],u[a+108>>2]);if(q[o+4>>2]>=1023){q[o+4>>2]=1022}n=x(n*x(.699999988079071));d=q[a+56>>2];n=(d|0)>2?x(n*x(.5)):n;n=(d|0)>8?x(0):(d|0)>4?x(n*x(.5)):n;break a}q[o+4>>2]=15;n=x(0)}n=q[l>>2]?x(n*u[l+40>>2]):n;s=0;z=0;l=q[o+4>>2];d=q[a+104>>2];m=l-d|0;j=m>>31;p=(l|0)<(w(j^j+m,10)|0)?x(.4000000059604645):x(.20000000298023224);p=(k|0)<25?x(p+x(.10000000149011612)):p;p=(k|0)<35?x(p+x(.10000000149011612)):p;I=x(p+x(-.10000000149011612));t=p;p=u[a+108>>2];t=p>x(.4000000059604645)?I:t;t=p>x(.550000011920929)?x(t+x(-.10000000149011612)):t;if(!((t>x(.20000000298023224)?t:x(.20000000298023224))>n)){z=1;n=x(C(x(x(x((x(y(x(n-p)))7?7:j-1|0;s=(j|0)>0?j:0;G=x(x(s+1|0)*x(.09375))}j=v<<2;k=e<<2;J=4096-k|0;n=x(-G);K=(e|0)<1025;L=0-e<<2;m=0;while(1){l=q[B+44>>2];q[a+104>>2]=(d|0)>15?d:15;H=((w(m,v)<<2)+a|0)+244|0;d=ka((w(m,F)<<2)+b|0,H,j);l=l-v|0;if(l){r=q[a+104>>2];A=r;p=x(-u[a+108>>2]);r=q[a+112>>2];Ta(d+j|0,q[(o+8|0)+(m<<2)>>2]+4096|0,A,A,l,p,p,r,r,0,0)}r=l<<2;M=r+(d+j|0)|0;A=r;r=(o+8|0)+(m<<2)|0;Ta(M,(A+q[r>>2]|0)+4096|0,q[a+104>>2],q[o+4>>2],e-l|0,x(-u[a+108>>2]),n,q[a+112>>2],f,q[B+60>>2],v);ka(H,d+k|0,j);d=(m<<12)+c|0;c:{if(!K){ka(d,k+q[r>>2]|0,4096);break c}ka((ra(d,d+k|0,J)+L|0)+4096|0,q[r>>2]+4096|0,E)}m=m+1|0;if((D|0)!=(m|0)){d=q[a+104>>2];continue}break}u[h>>2]=G;q[g>>2]=q[o+4>>2];q[i>>2]=s;ca=o+16|0;return z}function ob(a,b,c,d,e,f){var g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,v=0,y=0;a:{if(!f|e<<1>=(b|0)){break a}i=x(x(b|0)/x(w(q[(f<<2)+30692>>2],e)+b|0));i=x(x(i*i)*x(.5));t=ic(+x(i*x(1.5707963705062866)));v=ic(+x(x(x(1)-i)*x(1.5707963705062866)));f=0;if(d<<3<=(b|0)){m=d>>2;e=1;while(1){f=e;e=e+1|0;if((m+w(w(f,f)+f|0,d)|0)<(b|0)){continue}break}}if((d|0)<1){break a}i=x(t);k=x(v);p=(b>>>0)/(d>>>0)|0;o=p-1|0;m=o-(f<<1)|0;r=p-f|0;n=p-3|0;y=(c|0)>-1;c=0;while(1){j=w(c,p);b:{if(!y){c:{if(!f){break c}b=0;l=(j<<2)+a|0;e=l;if((r|0)>=1){while(1){s=(f<<2)+e|0;g=u[s>>2];h=u[e>>2];u[s>>2]=x(h*i)+x(g*k);u[e>>2]=x(h*k)-x(g*i);e=e+4|0;b=b+1|0;if((r|0)!=(b|0)){continue}break}}if((m|0)<0){break c}e=l+(m<<2)|0;b=m;while(1){l=(f<<2)+e|0;g=u[l>>2];h=u[e>>2];u[l>>2]=x(h*i)+x(g*k);u[e>>2]=x(h*k)-x(g*i);e=e-4|0;l=(b|0)>0;b=b-1|0;if(l){continue}break}}j=(j<<2)+a|0;if((o|0)>=1){g=u[j>>2];b=0;e=j;while(1){h=u[e+4>>2];u[e>>2]=x(g*i)-x(h*k);g=x(x(g*k)+x(h*i));u[e+4>>2]=g;e=e+4|0;b=b+1|0;if((o|0)!=(b|0)){continue}break}}if((n|0)<0){break b}e=j+(n<<2)|0;b=n;while(1){g=u[e>>2];h=u[e+4>>2];u[e+4>>2]=x(g*k)+x(h*i);u[e>>2]=x(g*i)-x(h*k);e=e-4|0;j=(b|0)>0;b=b-1|0;if(j){continue}break}break b}j=(j<<2)+a|0;if((o|0)>=1){g=u[j>>2];b=0;e=j;while(1){h=u[e+4>>2];u[e>>2]=x(g*i)+x(h*k);g=x(x(h*i)-x(g*k));u[e+4>>2]=g;e=e+4|0;b=b+1|0;if((o|0)!=(b|0)){continue}break}}if((n|0)>=0){e=j+(n<<2)|0;b=n;while(1){g=u[e+4>>2];h=u[e>>2];u[e+4>>2]=x(g*i)-x(h*k);u[e>>2]=x(h*i)+x(g*k);e=e-4|0;l=(b|0)>0;b=b-1|0;if(l){continue}break}}if(!f){break b}b=0;e=j;if((r|0)>=1){while(1){l=(f<<2)+e|0;g=u[l>>2];h=u[e>>2];u[l>>2]=x(g*k)-x(h*i);u[e>>2]=x(h*k)+x(g*i);e=e+4|0;b=b+1|0;if((r|0)!=(b|0)){continue}break}}if((m|0)<0){break b}e=j+(m<<2)|0;b=m;while(1){j=(f<<2)+e|0;g=u[j>>2];h=u[e>>2];u[j>>2]=x(g*k)-x(h*i);u[e>>2]=x(h*k)+x(g*i);e=e-4|0;j=(b|0)>0;b=b-1|0;if(j){continue}break}}c=c+1|0;if((d|0)!=(c|0)){continue}break}}}function hg(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=ca-112|0;ca=i;a:{b:{c:{d:{e:{f:{g:{h=q[a+8>>2];if(h-1>>>0<2){g=q[a+12>>2];h:{if((g|0)<=15999){if((g|0)==8e3|(g|0)==12e3){break h}break a}if((g|0)==16e3|(g|0)==24e3){break h}if((g|0)!=48e3){break a}}if((g|0)!=q[a+24>>2]){break g}f=q[a+28>>2];i:{if((f|0)<=11999){if(!f|(f|0)==8e3){break i}break b}if((f|0)==12e3){break i}if((f|0)!=16e3){break b}}if((h|0)!=q[a+16>>2]){break f}if(t[a+20>>2]>=3){break e}f=q[a+32>>2];if(f>>>0>20|!(1<>2];if((f|0)>-1){if(f){break m}f=-1;if(q[a+48>>2]-1>>>0>=2){break l}n:{if(!b|!c){if((e|0)%(((g&65535)>>>0)/400|0)|0){break n}}if(!(c?b:0)){c=Ma(a,0,0,d,e);if((c|0)<0){f=c;break n}b=c;while(1){if((c|0)<(e|0)){c=b;f=Ma(a,0,0,(w(q[a+8>>2],b)<<2)+d|0,e-b|0);b=f+b|0;g=(f|0)<0;c=g?c:b;if(!g){continue}break n}break}if((c|0)!=(e|0)){break k}q[a+72>>2]=e;f=b;break n}if((c|0)<0){break n}f=r[b|0];o:{if(f&128){j=1002;f=f>>>5&3;h=f?f+1102|0:1101;break o}p:{if((f&96)==96){j=1001;h=f&16?1105:1104;break p}j=1e3;h=(f>>>5&3)+1101|0}}k=Ib(b,g);l=r[b|0];g=_c(b,c,i+107|0,0,i,i+108|0);if((g|0)<0){f=g;break n}b=q[i+108>>2]+b|0;f=-2;if((w(g,k)|0)>(e|0)){break n}q[a+64>>2]=k;q[a+52>>2]=h;q[a+56>>2]=j;q[a+48>>2]=l&4?2:1;c=0;q:{if((g|0)<1){f=0;break q}f=0;while(1){j=(c<<1)+i|0;h=Ma(a,b,p[j>>1],(w(q[a+8>>2],f)<<2)+d|0,e-f|0);if((h|0)<0){f=h;break n}if((h|0)!=(k|0)){break j}f=f+k|0;b=p[j>>1]+b|0;c=c+1|0;if((g|0)!=(c|0)){continue}break}}q[a+72>>2]=f;kg(d,f,q[a+8>>2],a+76|0)}ca=i+112|0;return f}ja(33977,33038,92);G()}ja(34009,33038,93);G()}ja(34053,33038,95);G()}ja(32996,33038,652);G()}ja(33109,33038,724);G()}ja(33374,33038,87);G()}ja(33207,33038,85);G()}function Wc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=q[a+2316>>2];if((e|0)!=q[a+4252>>2]){q[a+4252>>2]=e;f=a+4244|0;q[f>>2]=65536;q[f+4>>2]=65536;f=a+4256|0;q[f>>2]=2;q[f+4>>2]=20;q[a+4172>>2]=q[a+2328>>2]<<7}if(d){Vf(a,b,c);q[a+4160>>2]=q[a+4160>>2]+1;return}c=o[a+2765|0];q[a+4164>>2]=c;a:{if((c|0)==2){d=0;c=q[a+2324>>2];b:{if(!c){break b}e=c-1|0;i=(e<<2)+b|0;g=q[i>>2];if((g|0)<1){break b}f=a+4176|0;d=w(e,10)+b|0;d=(((p[d+98>>1]+p[d+96>>1]|0)+p[d+100>>1]|0)+p[d+102>>1]|0)+p[d+104>>1]|0;c:{if((d|0)<1){d=0;break c}e=w(e<<16>>16,10)+b|0;p[f+8>>1]=s[e+104>>1];g=s[e+100>>1]|s[e+102>>1]<<16;e=s[e+96>>1]|s[e+98>>1]<<16;p[f>>1]=e;p[f+2>>1]=e>>>16;p[f+4>>1]=g;p[f+6>>1]=g>>>16;q[a+4172>>2]=q[i>>2]<<8;g=q[i>>2]}h=1;if((c|0)==1){break b}k=q[a+2332>>2];if((k|0)>=(g|0)){break b}while(1){j=(h^-1)+c|0;e=w(j,10)+b|0;e=(((p[e+98>>1]+p[e+96>>1]|0)+p[e+100>>1]|0)+p[e+102>>1]|0)+p[e+104>>1]|0;if((e|0)>(d|0)){d=w(j<<16>>16,10)+b|0;p[f+8>>1]=s[d+104>>1];g=s[d+100>>1]|s[d+102>>1]<<16;d=s[d+96>>1]|s[d+98>>1]<<16;p[f>>1]=d;p[f+2>>1]=d>>>16;p[f+4>>1]=g;p[f+6>>1]=g>>>16;q[a+4172>>2]=q[(j<<2)+b>>2]<<8;g=q[i>>2];d=e}h=h+1|0;if((h|0)==(c|0)){break b}if((w(h,k)|0)<(g|0)){continue}break}}e=a+4176|0;q[e>>2]=0;q[e+4>>2]=0;p[a+4184>>1]=0;p[a+4180>>1]=d;if((d|0)<=11468){f=a+4182|0;p[f>>1]=0;p[f+2>>1]=0;p[e>>1]=0;p[e+2>>1]=0;p[a+4180>>1]=w(11744256/(((d|0)>1?d:1)>>>0)<<16>>16,d<<16>>16)>>>10;break a}if((d|0)<15566){break a}e=a+4182|0;p[e>>1]=0;p[e+2>>1]=0;e=a+4176|0;p[e>>1]=0;p[e+2>>1]=0;p[a+4180>>1]=w(255016960/(d>>>0)|0,d<<16>>16)>>>14;break a}c=a+4176|0;q[c>>2]=0;q[c+4>>2]=0;p[a+4184>>1]=0;q[a+4172>>2]=w(e<<16>>16,4608);c=q[a+2324>>2]}ka(a+4186|0,b- -64|0,q[a+2340>>2]<<1);p[a+4240>>1]=q[b+136>>2];b=(c<<2)+b|0;d=q[b+12>>2];e=a+4244|0;q[e>>2]=q[b+8>>2];q[e+4>>2]=d;q[a+4260>>2]=q[a+2332>>2];q[a+4256>>2]=c}function ua(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=ca-16|0;ca=d;q[d+12>>2]=c;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{switch(b-4027|0){default:i:{switch(b-10007|0){case 3:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<0|(b|0)>=q[q[a>>2]+8>>2]){break a}q[a+20>>2]=b;break b;case 5:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<1|(b|0)>q[q[a>>2]+8>>2]){break a}q[a+24>>2]=b;break b;case 1:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-1>>>0>1){break a}q[a+12>>2]=b;break b;case 0:break i;case 9:break f;case 8:break g;default:break a}}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+44>>2];c=0;q[a+44>>2]=0;break a;case 0:b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+4>>2]/q[a+16>>2];break b;case 1:f=q[a+4>>2];c=0;e=q[a>>2];b=q[e+8>>2];g=(q[e+4>>2]<<2)+8288|0;e=q[a+8>>2];la(a+40|0,0,((b<<5)+w(g,e)|0)+52|0);if((b|0)>=1){e=((w(e,f+2048|0)<<2)+a|0)+w(e,96)|0;f=b<<3;e=(e+f|0)+92|0;f=e+f|0;b=b<<1;h=(b|0)>1?b:1;b=0;while(1){g=b<<2;q[f+g>>2]=-1042284544;q[e+g>>2]=-1042284544;b=b+1|0;if((h|0)!=(b|0)){continue}break}}q[a+56>>2]=1;break a;case 2:case 3:case 5:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:break a;case 20:break c;case 19:break d;case 4:break e;case 6:break h}}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+60>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+28>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+32>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+32>>2]}c=0}ca=d+16|0;return c}function Zb(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;e=q[a+28>>2];g=z(e);b=2147483647>>>g|0;c=q[a+32>>2];d=b+c&-2147483648>>g;a:{b:{if((d|b)>>>0>=c+e>>>0){b=b>>>1|0;d=b+c&(b^-1);g=g+1|0;break b}if(!g){break a}}c=g;while(1){h=d>>>23|0;c:{if((h|0)!=255){g=d>>>31|0;f=q[a+40>>2];if((f|0)>=0){b=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g+f;f=0}else{f=-1}q[b+44>>2]=f|q[a+44>>2]}b=q[a+36>>2];if(b){i=g-1|0;while(1){e=-1;g=a;f=q[a+24>>2];if(t[a+4>>2]>f+q[a+8>>2]>>>0){q[a+24>>2]=f+1;o[f+q[a>>2]|0]=i;e=0;b=q[a+36>>2]}b=b-1|0;q[g+36>>2]=b;q[a+44>>2]=q[a+44>>2]|e;if(b){continue}break}}q[a+40>>2]=h&255;break c}q[a+36>>2]=q[a+36>>2]+1}d=d<<8&2147483392;b=(c|0)>8;g=c-8|0;c=g;if(b){continue}break}}c=q[a+40>>2];d:{e:{f:{if((c|0)<=-1){b=q[a+36>>2];if(b){break f}break d}b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2];b=q[a+36>>2];if(!b){break e}}while(1){e=-1;d=a;c=q[a+24>>2];if(t[a+4>>2]>c+q[a+8>>2]>>>0){q[a+24>>2]=c+1;o[c+q[a>>2]|0]=255;e=0;b=q[a+36>>2]}b=b-1|0;q[d+36>>2]=b;q[a+44>>2]=q[a+44>>2]|e;if(b){continue}break}}q[a+40>>2]=0}e=q[a+12>>2];d=q[a+16>>2];g:{if((d|0)<=7){c=q[a+44>>2];break g}b=d;while(1){d=a;f=q[a+4>>2];c=q[a+8>>2];if(f>>>0>c+q[a+24>>2]>>>0){c=c+1|0;q[a+8>>2]=c;o[q[a>>2]+(f-c|0)|0]=e;c=0}else{c=-1}c=c|q[a+44>>2];q[d+44>>2]=c;e=e>>>8|0;f=(b|0)>15;d=b-8|0;b=d;if(f){continue}break}}h:{if(c){break h}b=q[a+24>>2];la(b+q[a>>2]|0,0,(q[a+4>>2]-b|0)-q[a+8>>2]|0);if((d|0)<1){break h}b=q[a+8>>2];c=q[a+4>>2];if(b>>>0>=c>>>0){q[a+44>>2]=-1;return}f=d;d=0-g|0;if(!((f|0)<=(d|0)|c>>>0>b+q[a+24>>2]>>>0)){q[a+44>>2]=-1;e=(-1<>2]+(c+(b^-1)|0)|0;o[a|0]=r[a|0]|e}}function ac(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ca-48|0;ca=f;g=a+2766|0;a:{if(!(q[((c<<2)+a|0)+2404>>2]?0:!d)){c=na(b,6405,8)+2|0;break a}c=na(b,6409,8)}o[g|0]=c&1;c=c>>>1|0;o[a+2765|0]=c;b:{if((e|0)==2){h=a,i=na(b,6832,8),o[h+2736|0]=i;break b}h=a,i=na(b,(c<<24>>21)+6800|0,8)<<3,o[h+2736|0]=i;h=a,i=na(b,6448,8)+r[a+2736|0]|0,o[h+2736|0]=i}if(q[a+2324>>2]>=2){d=1;while(1){h=(a+d|0)+2736|0,i=na(b,6832,8),o[h|0]=i;d=d+1|0;if((d|0)>2]){continue}break}}c=q[a+2732>>2];c=na(b,q[c+16>>2]+w(p[c>>1],o[a+2765|0]>>1)|0,8);o[a+2744|0]=c;ab(f+16|0,f,q[a+2732>>2],c<<24>>24);c=q[a+2732>>2];g=p[c+2>>1];if((g|0)==q[a+2340>>2]){d=0;if((g|0)>0){while(1){c:{d:{e:{c=na(b,q[c+28>>2]+p[(f+16|0)+(d<<1)>>1]|0,8);switch(c|0){case 8:break d;case 0:break e;default:break c}}c=0-na(b,6456,8)|0;break c}c=na(b,6456,8)+8|0}d=d+1|0;o[(d+a|0)+2744|0]=c-4;c=q[a+2732>>2];if(p[c+2>>1]>(d|0)){continue}break}}d=a+2767|0;if(q[a+2324>>2]==4){c=na(b,6411,8)}else{c=4}o[d|0]=c;if(r[a+2765|0]==2){f:{g:{if((e|0)!=2|q[a+2396>>2]!=2){break g}c=na(b,2656,8);if(c<<16<1){break g}c=(c+s[a+2400>>1]|0)-9|0;p[a+2762>>1]=c;break f}c=a+2762|0;h=c,i=w(na(b,2624,8),q[a+2316>>2]>>>1|0),p[h>>1]=i;d=c;c=na(b,q[a+2380>>2],8)+s[c>>1]|0;p[d>>1]=c}p[a+2400>>1]=c;h=a+2764|0,i=na(b,q[a+2384>>2],8),o[h|0]=i;c=na(b,6873,8);o[a+2768|0]=c;d=1;h:{if(q[a+2324>>2]<1){break h}h=a+2740|0,i=na(b,q[(c<<24>>22)+6944>>2],8),o[h|0]=i;if(q[a+2324>>2]<2){break h}while(1){h=(a+d|0)+2740|0,i=na(b,q[(o[a+2768|0]<<2)+6944>>2],8),o[h|0]=i;d=d+1|0;if((d|0)>2]){continue}break}}d=a+2769|0;if(e){c=0}else{c=na(b,6402,8)}o[d|0]=c}q[a+2396>>2]=o[a+2765|0];h=a+2770|0,i=na(b,6433,8),o[h|0]=i;ca=f+48|0;return}ja(7423,7485,82);G()}function lf(a,b,c,d,e,f,g){var h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),n=x(0),o=0,p=0,s=0,t=0,v=0,z=0,D=x(0),E=0,H=0,I=x(0),J=0,K=0,L=0,M=x(0);h=ca;z=h;j=h-((b<<2)+15&-16)|0;ca=j;q[g>>2]=0;p=(b|0)/2|0;a:{b:{h=0;c:{if((c|0)<1){break c}D=f?x(.03125):x(.0625);E=p-5|0;H=w(p,6)-102|0;I=x(p|0);J=+(p|0);K=(b|0)<1;L=(b|0)<36;while(1){if(!K){o=w(b,t);k=x(0);h=0;m=x(0);while(1){i=u[(h+o<<2)+a>>2];n=x(k+i);u[(h<<2)+j>>2]=n;k=x(x(m+n)-x(i+i));m=x(i+x(n*x(-.5)));h=h+1|0;if((h|0)!=(b|0)){continue}break}}q[j>>2]=0;q[j+4>>2]=0;q[j+40>>2]=0;q[j+44>>2]=0;q[j+32>>2]=0;q[j+36>>2]=0;q[j+24>>2]=0;q[j+28>>2]=0;q[j+16>>2]=0;q[j+20>>2]=0;q[j+8>>2]=0;q[j+12>>2]=0;h=0;k=x(0);n=x(0);m=x(0);o=(b|0)>1;i=x(0);d:{if(!o){break d}while(1){l=h<<3;i=u[l+j>>2];M=x(i*i);i=u[(l|4)+j>>2];i=x(M+x(i*i));m=x(m+x(D*x(i-m)));u[(h<<2)+j>>2]=m;k=x(k+i);h=h+1|0;if((p|0)!=(h|0)){continue}break}h=p;m=x(0);i=k;if(!o){break d}while(1){o=h-1|0;l=(o<<2)+j|0;n=x(n+x(x(u[l>>2]-n)*x(.125)));u[l>>2]=n;m=n1;h=o;if(l){continue}break}n=m;i=k}k=u[j>>2];if(k!=k){break b}k=x(I/x(x(F(+x(i*n)*.5*J))+x(1.0000000036274937e-15)));if(k!=k){break a}o=0;if(!L){i=x(k*x(64));h=12;while(1){k=x(C(x(i*x(u[(h<<2)+j>>2]+x(1.0000000036274937e-15)))));l=x(A(k,x(127)))x(127)?s:l?s:+k;e:{if(y(s)<2147483648){l=~~s;break e}l=-2147483648}o=r[l+40032|0]+o|0;h=h+4|0;if((E|0)>(h|0)){continue}break}}h=(o<<8)/(H|0)|0;if((h|0)>(v|0)){q[e>>2]=t;v=h}t=t+1|0;if((t|0)!=(c|0)){continue}break}h=(v|0)>200;if(!f|v-201>>>0>398){break c}q[g>>2]=1;h=0}u[d>>2]=F(B(+x(x(A(x(B(x(x(F(+(w(v,27)|0)))+x(-42)),x(0))),x(163)))*x(.006899999920278788))+ -.139,0));ca=z;return h}ja(40160,39710,369);G()}ja(40198,39710,370);G()}function Gb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;h=ca-48|0;ca=h;a:{b:{f=d?(w(c,36)+a|0)+6100|0:a+4736|0;c=(o[f+29|0]<<1)+o[f+30|0]|0;if(c>>>0<6){if((c|0)<=1?d:0){break b}c:{if(!((c|0)<2?!d:0)){ma(b,c-2|0,6405,8);break c}ma(b,c,6409,8)}c=o[f|0];d:{if((e|0)==2){ma(b,c,6832,8);break d}ma(b,c>>3,(o[f+29|0]<<3)+6800|0,8);ma(b,r[f|0]&7,6448,8)}if(q[a+4580>>2]>=2){d=1;while(1){ma(b,o[d+f|0],6832,8);d=d+1|0;if((d|0)>2]){continue}break}}c=q[a+4692>>2];ma(b,o[f+8|0],q[c+16>>2]+w(p[c>>1],o[f+29|0]>>1)|0,8);ab(h+16|0,h,q[a+4692>>2],o[f+8|0]);g=q[a+4692>>2];c=p[g+2>>1];if((c|0)!=q[a+4640>>2]){break a}d=0;if((c|0)>0){while(1){c=d;d=c+1|0;i=f+d|0;j=o[i+8|0];e:{if((j|0)>=4){ma(b,8,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8);ma(b,o[i+8|0]-4|0,6456,8);break e}if((j|0)<=-4){ma(b,0,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8);ma(b,-4-o[i+8|0]|0,6456,8);break e}ma(b,j+4|0,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8)}g=q[a+4692>>2];if(p[g+2>>1]>(d|0)){continue}break}}if(q[a+4580>>2]==4){ma(b,o[f+31|0],6411,8)}f:{if(r[f+29|0]!=2){break f}g:{if(!((e|0)!=2|q[a+5768>>2]!=2)){d=p[f+26>>1]-p[a+5772>>1]|0;c=d+8|0;ma(b,c>>>0>19?0:d+9|0,2656,8);if(c>>>0<20){break g}}c=p[f+26>>1];d=q[a+4576>>2]>>1;g=(c|0)/(d|0)|0;ma(b,g,2624,8);ma(b,c-w(g<<16>>16,d<<16>>16)|0,q[a+4684>>2],8)}p[a+5772>>1]=s[f+26>>1];ma(b,o[f+28|0],q[a+4688>>2],8);ma(b,o[f+32|0],6873,8);if(q[a+4580>>2]>=1){d=0;while(1){ma(b,o[(d+f|0)+4|0],q[(o[f+32|0]<<2)+6944>>2],8);d=d+1|0;if((d|0)>2]){continue}break}}if(e){break f}ma(b,o[f+33|0],6402,8)}q[a+5768>>2]=o[f+29|0];ma(b,o[f+34|0],6433,8);ca=h+48|0;return}ja(35956,36008,59);G()}ja(36030,36008,60);G()}ja(36084,36008,93);G()}function Ac(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=-1;a:{if(q[a+4>>2]<(b|0)|(b|0)<=0){break a}j=a+200|0;b:{c:{d:{e:{f:{g:{i=b;switch(i-1|0){case 1:break f;case 0:break g;default:break e}}g=p[j>>1]+1|0;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252;f=c+1|0;break d}f=s[j>>1];g=f<<16>>16;h=s[j+2>>1];if((h|0)==(f|0)){g=g<<1|1;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252|1;f=c+1|0;break d}g=((g+(h<<16>>16)|0)+((g|0)>251)|0)+2|0;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252|2;f=c+1|0;f=$c(p[j>>1],f)+f|0;break d}f=c;if((i|0)>2){break c}}if(!e|(d|0)<=(g|0)){break b}}k=p[j>>1];h:{if((i|0)>=2){f=1;m=1;i:{l=k&65535;if((l|0)==s[j+2>>1]){g=2;while(1){h=g;if((g|0)==(i|0)){break i}g=h+1|0;if(s[(h<<1)+j>>1]==(l|0)){continue}break}m=(i|0)>(h|0)}g=(k+2|0)+((k|0)>251?2:1)|0;h=b-1|0;if((h|0)>=2){while(1){l=g;g=p[(f<<1)+j>>1];g=(l+g|0)+((g|0)>251?2:1)|0;f=f+1|0;if((h|0)!=(f|0)){continue}break}}g=p[(i-1<<1)+j>>1]+g|0;f=-2;if((g|0)>(d|0)){break a}f=r[a|0];h=i|-128;o[c+1|0]=h;o[c|0]=f|3;break h}m=(i|0)>(h|0)}g=w(i,k)+2|0;f=-2;if((g|0)>(d|0)){break a}f=r[a|0];o[c+1|0]=i;o[c|0]=f|3;h=i}f=c+2|0;j:{if(!e){break j}k=d-g|0;if(!k){break j}o[c+1|0]=h|64;g=(k-1|0)/255|0;if((k|0)>=256){h=f;f=(g|0)>1?g:1;la(h,255,f);f=(c+f|0)+2|0}o[f|0]=(k+w(g,-255)|0)-1;f=f+1|0;g=d}if(m^1|(i|0)<2){break b}b=b-1|0;h=(b|0)>1?b:1;b=0;while(1){f=$c(p[(b<<1)+j>>1],f)+f|0;b=b+1|0;if((h|0)!=(b|0)){continue}break}}if((i|0)>=1){b=a+8|0;a=0;while(1){h=f;f=(a<<1)+j|0;f=ra(h,q[b+(a<<2)>>2],p[f>>1])+p[f>>1]|0;a=a+1|0;if((i|0)!=(a|0)){continue}break}}if(!(!e|c+d>>>0<=f>>>0)){la(f,0,(d-f|0)+c|0)}f=g}return f}function Kd(a,b,c){var d=0,e=0,f=0,g=0,h=0;g=a;a:{b:{if((c|0)<1){break b}f=c;c=na(b,r[c+8592|0]+8432|0,8);f=f-c|0;c=c<<16;if((c|0)<1){break b}d=c>>16;c=na(b,r[d+8592|0]+8272|0,8);d=d-c|0;c=c<<16;if((c|0)<=0){break b}e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break b}h=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a>>1]=h;c=c-h|0;break a}p[a>>1]=0;c=0}p[g+2>>1]=c;g=a;c:{if(e<<16>=1){c=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+4>>1]=c;c=e-c|0;break c}p[a+4>>1]=0;c=0}p[g+6>>1]=c;e=0;g=a;d:{e:{c=d<<16;if((c|0)<=0){d=a+8|0;break e}d=a+8|0;e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break e}d=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a+8>>1]=d;c=c-d|0;break d}p[d>>1]=0;c=0}p[g+10>>1]=c;g=a;f:{if(e<<16>=1){c=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+12>>1]=c;c=e-c|0;break f}p[a+12>>1]=0;c=0}p[g+14>>1]=c;e=0;c=0;g=a;g:{h:{i:{d=f<<16;if((d|0)>=1){c=d>>16;d=na(b,r[c+8592|0]+8272|0,8);c=c-d|0;d=d<<16;if((d|0)>0){break i}}f=a+16|0;break h}f=a+16|0;e=d>>16;d=na(b,r[e+8592|0]+8112|0,8);e=e-d|0;if(d<<16<1){break h}f=na(b,r[(d&65535)+8592|0]+7952|0,8);p[a+16>>1]=f;f=d-f|0;break g}p[f>>1]=0;f=0}p[g+18>>1]=f;g=a;j:{if(e<<16>=1){d=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+20>>1]=d;f=e-d|0;break j}p[a+20>>1]=0;f=0}p[g+22>>1]=f;e=0;g=a;k:{l:{c=c<<16;if((c|0)<=0){d=a+24|0;break l}d=a+24|0;e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break l}d=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a+24>>1]=d;c=c-d|0;break k}p[d>>1]=0;c=0}p[g+26>>1]=c;if(e<<16>=1){b=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+28>>1]=b;p[a+30>>1]=e-b;return}p[a+28>>1]=0;p[a+30>>1]=0}function og(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=x(0),n=x(0),o=0,r=0,s=0,t=0,v=0,y=x(0),z=x(0),A=0,B=0,C=0,D=0,E=x(0);h=ca;D=h;j=(f<<2)+a|0;r=q[a+24>>2];o=q[a>>2];if((f|0)>=1){a=0;while(1){o=o>>1;r=(o<<2)+r|0;a=a+1|0;if((f|0)!=(a|0)){continue}break}}A=q[j+8>>2];v=e<<1&-4;s=o>>1;a=s<<2;f=(v+(a+b|0)|0)-4|0;j=h-(a+15&-16)|0;a=j;ca=a;B=e+3>>2;b=b+v|0;i=o>>2;l=a-((i<<3)+15&-16)|0;ca=l;a:{if((e|0)<1){h=0;a=j;break a}h=(B|0)>1?B:1;k=d+v|0;C=k-4|0;v=0-s<<2;a=j;while(1){m=u[C>>2];n=u[k>>2];u[a>>2]=x(m*u[(s<<2)+b>>2])+x(n*u[f>>2]);u[a+4>>2]=x(n*u[b>>2])-x(m*u[f+v>>2]);C=C-8|0;k=k+8|0;f=f-8|0;b=b+8|0;a=a+8|0;t=t+1|0;if((t|0)!=(h|0)){continue}break}}E=u[A+4>>2];t=i-B|0;if((t|0)>(h|0)){while(1){u[a>>2]=u[f>>2];u[a+4>>2]=u[b>>2];f=f-8|0;b=b+8|0;a=a+8|0;h=h+1|0;if((t|0)>(h|0)){continue}break}h=t}if((h|0)<(i|0)){k=((e<<2)+d|0)-4|0;e=0-s<<2;while(1){u[a>>2]=x(u[k>>2]*u[f>>2])-x(u[d>>2]*u[b+e>>2]);u[a+4>>2]=x(u[k>>2]*u[b>>2])+x(u[d>>2]*u[(s<<2)+f>>2]);k=k-8|0;d=d+8|0;f=f-8|0;b=b+8|0;a=a+8|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}}if((o|0)<=3){Ya(A,l);ca=D;return}d=(i|0)>1?i:1;a=0;while(1){b=(p[q[A+44>>2]+(a<<1)>>1]<<3)+l|0;y=u[(a+i<<2)+r>>2];z=u[j>>2];m=u[(a<<2)+r>>2];n=u[j+4>>2];u[b+4>>2]=E*x(x(y*z)+x(m*n));u[b>>2]=E*x(x(m*z)-x(y*n));j=j+8|0;a=a+1|0;if((d|0)!=(a|0)){continue}break}Ya(A,l);if((o|0)>=4){e=(i|0)>1?i:1;a=0;f=(w(s-1|0,g)<<2)+c|0;d=g<<1;b=0-d<<2;while(1){y=u[l+4>>2];z=u[(a+i<<2)+r>>2];m=u[l>>2];n=u[(a<<2)+r>>2];u[c>>2]=x(y*z)-x(m*n);u[f>>2]=x(z*m)+x(y*n);l=l+8|0;f=b+f|0;c=(d<<2)+c|0;a=a+1|0;if((e|0)!=(a|0)){continue}break}}ca=D}function _c(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0;s=-1;a:{if(!e|(b|0)<0){break a}s=-4;if(!b){break a}l=r[a|0];b:{if(l&128){g=(48e3<<(l>>>3&3)>>>0)/400|0;break b}g=l&8?960:480;if((l&96)==96){break b}h=l>>>3&3;g=2880;if((h|0)==3){break b}g=(48e3<>>0)/100|0}j=1;i=a+1|0;k=b-1|0;h=k;c:{d:{switch(l&3){case 1:if(k&1){break a}h=k>>>1|0;p[e>>1]=h;j=2;break c;case 2:if((b|0)<=1){p[e>>1]=65535;return-4}g=r[i|0];if(g>>>0>=252){j=2;if((b|0)<=2){p[e>>1]=65535;return-4}g=(r[a+2|0]<<2)+g|0}p[e>>1]=g;b=k-j|0;if((b|0)<(g|0)){break a}h=b-g|0;i=j+i|0;j=2;break c;case 0:break c;default:break d}}if((b|0)<2){break a}m=r[a+1|0];j=m&63;if(!j|w(g,j)>>>0>5760){break a}h=a+2|0;b=b-2|0;g=0;e:{if(!(m&64)){i=h;break e}while(1){if((b|0)<1){break a}i=r[h|0];k=(i|0)==255;i=(k?-2:i)&255;g=i+g|0;b=(i^-1)+b|0;i=h+1|0;h=i;if(k){continue}break}if((b|0)<0){break a}}if(m&128){if(j>>>0<2){h=b;break c}k=j-1|0;h=b;g=b;while(1){m=(t<<1)+e|0;if((g|0)<=0){p[m>>1]=65535;return-4}n=1;b=r[i|0];if(b>>>0>=252){if((g|0)<=1){p[m>>1]=65535;return-4}n=2;b=(r[i+1|0]<<2)+b|0}p[m>>1]=b;g=g-n|0;if((g|0)<(b|0)){break a}i=i+n|0;h=(h-n|0)-b|0;t=t+1|0;if((k|0)!=(t|0)){continue}break}if((h|0)>=0){break c}break a}h=(b|0)/(j|0)|0;if((w(j,h)|0)!=(b|0)){break a}if(j>>>0<2){break c}b=j-1|0;g=0;while(1){p[(g<<1)+e>>1]=h;g=g+1|0;if((b|0)!=(g|0)){continue}break}}if((h|0)>1275){break a}p[((j<<1)+e|0)-2>>1]=h;if(f){q[f>>2]=i-a}if(j){b=0;while(1){if(d){q[(b<<2)+d>>2]=i}i=p[(b<<1)+e>>1]+i|0;b=b+1|0;if((j|0)!=(b|0)){continue}break}}if(c){o[c|0]=l}s=j}return s}function cb(a,b,c,d){var e=0,f=0,g=0;a:{b:{e=la(a,0,300);a=e;c:{if(d){d:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break d}break a}if((b|0)==16e3|(b|0)==48e3){break d}if((b|0)!=24e3){break a}}if((c|0)!=16e3?!((c|0)==8e3|(c|0)==12e3):0){break a}d=(w((b>>>12|0)-((b|0)>16e3)>>((b|0)>24e3),3)+(c>>>12|0)|0)+2487|0;break c}if((b|0)!=12e3?!((b|0)==8e3|(b|0)==16e3):0){break b}e:{if((c|0)<=15999){if((c|0)==8e3|(c|0)==12e3){break e}break b}if((c|0)==16e3|(c|0)==24e3){break e}if((c|0)!=48e3){break b}}d=(w(b>>>12|0,5)+((c>>>12|0)-((c|0)>16e3)>>((c|0)>24e3))|0)+2500|0}q[a+292>>2]=o[d|0];q[e+288>>2]=((c&65535)>>>0)/1e3;a=((b&65535)>>>0)/1e3|0;q[e+284>>2]=a;q[e+268>>2]=w(a,10);f:{if((b|0)<(c|0)){a=1;if(b<<1==(c|0)){q[e+264>>2]=1;a=0;break f}q[e+264>>2]=2;break f}if((b|0)>(c|0)){q[e+264>>2]=3;a=c<<2;if((a|0)==(w(b,3)|0)){q[e+296>>2]=2e3;q[e+276>>2]=18;q[e+280>>2]=3;a=0;break f}d=w(c,3);if((d|0)==b<<1){q[e+296>>2]=2064;q[e+276>>2]=18;q[e+280>>2]=2;a=0;break f}if(c<<1==(b|0)){q[e+296>>2]=2112;q[e+276>>2]=24;q[e+280>>2]=1;a=0;break f}if((b|0)==(d|0)){q[e+296>>2]=2144;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}if((a|0)==(b|0)){q[e+296>>2]=2192;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}if((w(c,6)|0)==(b|0)){q[e+296>>2]=2240;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}ja(2454,2474,154);G()}a=0;q[e+264>>2]=0}f=b<>16;g=(c>>>15|0)+1>>>1|0;b=(b<<(a|14))/(c|0)<<2;while(1){a=b;b=b+1|0;if(((w(d,a>>16)+w(a,g)|0)+(w(d,a&65535)>>16)|0)<(f|0)){continue}break}q[e+272>>2]=a;return 0}ja(2454,2474,101);G()}ja(2454,2474,94);G()}function dd(a,b,c,d,e){var f=x(0),g=0,h=0,i=x(0),j=0,k=0,l=x(0),m=0,n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0);g=ca-48|0;ca=g;k=c>>1;j=q[a>>2];if((c|0)>=4){m=(k|0)>2?k:2;h=1;while(1){n=h<<3;e=n+j|0;u[(h<<2)+b>>2]=x(u[e>>2]+x(x(u[e-4>>2]+u[(n|4)+j>>2])*x(.5)))*x(.5);h=h+1|0;if((m|0)!=(h|0)){continue}break}}f=x(x(x(u[j+4>>2]*x(.5))+u[j>>2])*x(.5));u[b>>2]=f;if((d|0)==2){a=q[a+4>>2];if((c|0)>=4){d=(k|0)>2?k:2;h=1;while(1){j=(h<<2)+b|0;e=j;i=u[j>>2];j=h<<3;m=j+a|0;u[e>>2]=i+x(x(u[m>>2]+x(x(u[m-4>>2]+u[a+(j|4)>>2])*x(.5)))*x(.5));h=h+1|0;if((d|0)!=(h|0)){continue}break}}u[b>>2]=f+x(x(x(u[a+4>>2]*x(.5))+u[a>>2])*x(.5))}h=0;ed(b,g+16|0,0,0,4,k);u[g+16>>2]=u[g+16>>2]*x(1.000100016593933);f=u[g+20>>2];u[g+20>>2]=f-x(x(f*x(.00800000037997961))*x(.00800000037997961));f=u[g+24>>2];u[g+24>>2]=f-x(x(f*x(.01600000075995922))*x(.01600000075995922));f=u[g+28>>2];u[g+28>>2]=f-x(x(f*x(.024000000208616257))*x(.024000000208616257));f=u[g+32>>2];u[g+32>>2]=f-x(x(f*x(.03200000151991844))*x(.03200000151991844));gd(g,g+16|0,4);if((c|0)>=2){f=x(u[g+12>>2]*x(.6560999155044556));i=x(u[g+8>>2]*x(.7289999127388));r=x(f+x(i*x(.800000011920929)));l=i;i=x(u[g+4>>2]*x(.809999942779541));s=x(l+x(i*x(.800000011920929)));l=i;i=x(u[g>>2]*x(.8999999761581421));t=x(l+x(i*x(.800000011920929)));v=x(f*x(.800000011920929));w=x(i+x(.800000011920929));f=x(0);i=x(0);while(1){a=(h<<2)+b|0;l=u[a>>2];u[a>>2]=x(v*y)+x(x(r*o)+x(x(s*p)+x(x(t*f)+x(x(w*i)+l))));y=o;o=p;p=f;f=i;i=l;h=h+1|0;if((k|0)!=(h|0)){continue}break}}ca=g+48|0}function Tb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0;m=(c<<1)+b|0;k=c-1|0;l=(k<<1)+a|0;q=(c|0)<2;a:{while(1){g=p[a>>1];h=p[b>>1];f=g-h|0;d=1;e=0;if(!q){while(1){i=g<<16;j=d<<1;g=p[j+a>>1];j=(g-(i>>16)|0)-p[b+j>>1]|0;i=(j|0)<(f|0);f=i?j:f;e=i?d:e;d=d+1|0;if((d|0)!=(c|0)){continue}break}}i=p[m>>1];g=32768-(i+p[l>>1]|0)|0;d=(g|0)<(f|0);if(((d?g:f)|0)>-1){break a}g=d?c:e;b:{if(!g){p[a>>1]=h;break b}c:{d:{if((c|0)!=(g|0)){if((g|0)>=1){break d}h=0;break c}p[l>>1]=-32768-i;break b}d=1;if((g|0)==1){break c}while(1){h=p[(d<<1)+b>>1]+h|0;d=d+1|0;if((g|0)!=(d|0)){continue}break}}e=h;j=g<<1;n=j+b|0;h=p[n>>1]>>1;f=e+h|0;e=32768;e:{if((c|0)<=(g|0)){break e}e=32768-i|0;d=k;if((g|0)>=(d|0)){break e}while(1){e=e-p[(d<<1)+b>>1]|0;d=d-1|0;if((g|0)<(d|0)){continue}break}}i=a+j|0;j=(g-1<<1)+a|0;d=p[i>>1]+p[j>>1]|0;g=(d>>1)+(d&1)|0;d=e-h|0;f:{if((d|0)<(f|0)){e=f;if((g|0)>(f|0)){break f}e=(d|0)>(g|0)?d:g;break f}e=d;if((d|0)<(g|0)){break f}e=(g|0)<(f|0)?f:g}e=e-h|0;p[j>>1]=e;p[i>>1]=e+s[n>>1]}o=o+1|0;if((o|0)!=20){continue}break}Hd(a,c);e=p[a>>1];d=p[b>>1];f=(d|0)<(e|0)?e:d;p[a>>1]=f;k=(c|0)<2;if(!k){d=1;while(1){g=d<<1;h=g+a|0;e=p[h>>1];f=p[b+g>>1]+(f<<16>>16)|0;f=(f|0)<32767?f:32767;f=(f|0)>-32768?f:-32768;f=(e|0)>(f|0)?e:f;p[h>>1]=f;d=d+1|0;if((d|0)!=(c|0)){continue}break}}e=p[l>>1];d=32768-p[m>>1]|0;f=(d|0)>(e|0)?e:d;p[l>>1]=f;if(k){break a}d=c-2|0;while(1){e=d<<1;k=e+a|0;c=p[k>>1];e=(f<<16>>16)-p[(b+e|0)+2>>1]|0;f=(c|0)<(e|0)?c:e;p[k>>1]=f;c=(d|0)>0;d=d-1|0;if(c){continue}break}}}function kg(a,b,c,d){var e=x(0),f=0,g=0,h=0,i=x(0),j=0,k=x(0),l=0,m=0,n=0,o=0,p=0,q=x(0),r=x(0),s=x(0);if(!(!d|!a|((b|0)<1|(c|0)<1))){h=w(b,c);if((h|0)>=1){while(1){l=(g<<2)+a|0;e=u[l>>2];f=e>x(2);j=l;l=(f?x(2):e)>2]=f?i:l?i:e;g=g+1|0;if((h|0)!=(g|0)){continue}break}}while(1){f=o<<2;m=f+a|0;p=d+f|0;i=u[p>>2];g=0;while(1){f=(w(c,g)<<2)+m|0;e=u[f>>2];k=x(i*e);if(!(k>=x(0))){u[f>>2]=e+x(e*k);g=g+1|0;if((g|0)!=(b|0)){continue}}break}r=u[m>>2];f=0;while(1){a:{l=f;b:{h=f;if((f|0)>=(b|0)){break b}while(1){e=u[(w(c,h)<<2)+m>>2];if(e>x(1)|e>31&h;i=u[(w(c,h)<<2)+m>>2];e=x(y(i));f=h;while(1){c:{g=f;if((f|0)<1){g=j;break c}f=g-1|0;if(x(i*u[(w(f,c)<<2)+m>>2])>=x(0)){continue}}break}f=h;d:{if((f|0)>=(b|0)){break d}while(1){k=u[(w(c,f)<<2)+m>>2];if(x(i*k)>=x(0)^1){break d}k=x(y(k));j=k>e;h=j?f:h;e=j?k:e;f=f+1|0;if((f|0)!=(b|0)){continue}break}f=b}j=0;j=g?j:x(i*u[m>>2])>=x(0);e=x(x(e+x(-1))/x(e*e));e=x(e+x(e*x(2.399999914359796e-7)));e=i>x(0)?x(-e):e;if((f|0)>(g|0)){while(1){n=(w(c,g)<<2)+m|0;i=u[n>>2];u[n>>2]=i+x(i*x(e*i));g=g+1|0;if((g|0)!=(f|0)){continue}break}}if(!(j^1|(h|0)<2|(h|0)<=(l|0))){i=x(r-u[m>>2]);s=x(i/x(h|0));while(1){i=x(i-s);j=(w(c,l)<<2)+m|0;k=x(i+u[j>>2]);g=k>x(1);n=j;j=(g?x(1):k)>2]=g?q:j?q:k;l=l+1|0;if((l|0)!=(h|0)){continue}break}}if((b|0)!=(f|0)){continue}}break}u[p>>2]=e;o=o+1|0;if((o|0)!=(c|0)){continue}break}}}function Qa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0>1){k=b-1|0;a:{if(k>>>0>=256){d=q[a+28>>2];i=24-z(k)|0;c=k>>>i|0;g=c+1|0;b=(d>>>0)/(g>>>0)|0;q[a+36>>2]=b;f=q[a+32>>2];j=(f>>>0)/(b>>>0)|0;e=j+1|0;g=e-g|0;l=(g>>>0>e>>>0?0:g)+(c-j|0)|0;c=w(b,c-l|0);h=f-c|0;q[a+32>>2]=h;c=l?b:d-c|0;q[a+28>>2]=c;if(c>>>0<=8388608){d=q[a+24>>2];g=q[a+40>>2];f=q[a+20>>2];m=q[a+4>>2];while(1){j=c<<8;q[a+28>>2]=j;f=f+8|0;q[a+20>>2]=f;b=0;if(d>>>0>>0){e=d+1|0;q[a+24>>2]=e;b=r[q[a>>2]+d|0];d=e}q[a+40>>2]=b;h=((g<<8|b)>>>1&255|h<<8&2147483392)^255;q[a+32>>2]=h;e=c>>>0<32769;g=b;c=j;if(e){continue}break}}j=l<>2];b=q[a+16>>2];b:{if(i>>>0<=b>>>0){f=b;break b}c=q[a+8>>2];d=q[a+4>>2];while(1){if(c>>>0>>0){c=c+1|0;q[a+8>>2]=c;e=r[q[a>>2]+(d-c|0)|0]}else{e=0}h=e<>2]=f-i;q[a+12>>2]=h>>>i;q[a+20>>2]=i+q[a+20>>2];i=j|(-1<>>0>=i>>>0){break a}q[a+44>>2]=1;return k}g=q[a+28>>2];c=(g>>>0)/(b>>>0)|0;q[a+36>>2]=c;f=q[a+32>>2];j=(f>>>0)/(c>>>0)|0;e=j+1|0;d=e-b|0;i=((j^-1)+b|0)+(d>>>0>e>>>0?0:d)|0;b=w(c,(i^-1)+b|0);h=f-b|0;q[a+32>>2]=h;c=i?c:g-b|0;q[a+28>>2]=c;if(c>>>0>8388608){break a}d=q[a+24>>2];g=q[a+40>>2];f=q[a+20>>2];k=q[a+4>>2];while(1){j=c<<8;q[a+28>>2]=j;f=f+8|0;q[a+20>>2]=f;b=0;if(d>>>0>>0){e=d+1|0;q[a+24>>2]=e;b=r[q[a>>2]+d|0];d=e}q[a+40>>2]=b;h=((g<<8|b)>>>1&255|h<<8&2147483392)^255;q[a+32>>2]=h;e=c>>>0<32769;g=b;c=j;if(e){continue}break}}return i}ja(6759,6783,203);G()}function Jf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0;g=ca-144|0;ca=g;q[g+12>>2]=g+16;q[g+8>>2]=g+80;i=c>>1;Pc(b,g+80|0,g+16|0,i);l=g+80|0;r=p[688];d=Ea(g+80|0,r,i);if((d|0)<=-1){p[a>>1]=0;l=g+16|0;m=1;d=Ea(g+16|0,r,i)}a:while(1){j=1;e=0;n=r;while(1){b:{c:{d:{e:{o=(d|0)>0;u=(j<<1)+1376|0;f=p[u>>1];s=Ea(l,f,i);if(!((d|0)<0|(0-e|0)<(s|0)?!((s|0)>=(e|0)?!o:0):0)){k=-256;e=f+n|0;h=(e>>1)+(e&1)|0;e=Ea(l,h,i);f:{if(!((e|0)<=-1|o)){f=h;break f}if(!((d|0)<0|(e|0)>=1)){f=h;break f}k=-128;n=h;d=e;e=s}h=f+n|0;h=(h>>1)+(h&1)|0;o=Ea(l,h,i);if((o|0)<=-1|(d|0)>0){break e}break d}h=(j|0)<128;e=0;n=f;d=s;j=j+1|0;if(h){continue}if(t>>>0>=16){j=1;b=32768/(c+1|0)|0;p[a>>1]=b;if((c|0)<2){break b}d=b;while(1){d=b+d|0;p[(j<<1)+a>>1]=d;j=j+1|0;if((j|0)!=(c|0)){continue}break}break b}sb(b,c,(-2<-1){continue a}p[a>>1]=0;m=1;l=g+16|0;d=Ea(g+16|0,r,i);t=e;continue a}if((o|0)<1?(d|0)>=0:0){break d}k=k|64;n=h;d=o;break c}f=h;e=o}f=f+n|0;f=Ea(l,(f>>1)+(f&1)|0,i);g:{if(!((f|0)<=-1|(d|0)>0)){e=f;break g}if(!((d|0)<0|(f|0)>=1)){e=f;break g}k=k+32|0;d=f}f=d-e|0;e=d>>31;h:{if((e+d^e)>>>0>=65536){k=((d|0)/(f>>5)|0)+k|0;break h}if(!f){break h}k=(((d<<5)+(f>>1)|0)/(f|0)|0)+k|0}e=(j<<8)+k|0;p[(m<<1)+a>>1]=(e|0)<32767?e:32767;m=m+1|0;if((m|0)>=(c|0)){break b}e=!s;d=4096-(m<<12&8192)|0;n=p[u-2>>1];l=q[(g+8|0)+((m&1)<<2)>>2];continue}break}break}ca=g+144|0}function wc(a,b,c,d,e,f,g,h,i){var j=x(0),k=0,l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=0,r=x(0),s=x(0),t=0;k=ca;q=k;if(!e){ca=q;return x(0)}a:{if((i|0)==48e3){f=f<<1;e=e<<1;break a}if((i|0)!=16e3){break a}f=(f<<1)/3|0;e=(e<<1)/3|0}k=k-((e<<2)+15&-16)|0;t=k;ca=k;ea[a|0](b,k,e,f,0,g,h);l=(g|0)==-2?x(x(30517578125e-15)/x(h|0)):(g|0)>-1?x(152587890625e-16):x(30517578125e-15);if((e|0)>=1){g=0;while(1){a=k+(g<<2)|0;u[a>>2]=l*u[a>>2];g=g+1|0;if((g|0)!=(e|0)){continue}break}}b:{if((i|0)==48e3){l=x(0);if((e|0)<2){break b}a=(e|0)/2|0;g=0;while(1){b=g<<3;j=u[b+k>>2];m=u[d>>2];n=x(x(j-m)*x(.6074370741844177));u[d>>2]=j+n;j=u[k+(b|4)>>2];o=u[d+4>>2];p=x(x(j-o)*x(.15062999725341797));u[d+4>>2]=j+p;r=u[d+8>>2];s=x(x(x(-j)-r)*x(.15062999725341797));u[d+8>>2]=s-j;j=x(m+n);u[(g<<2)+c>>2]=x(x(o+j)+p)*x(.5);m=l;l=x(x(j+r)+s);l=x(m+x(l*l));g=g+1|0;if((a|0)!=(g|0)){continue}break}break b}l=x(0);if((i|0)!=16e3){if((i|0)!=24e3){break b}ka(c,k,e<<2);break b}b=w(e,3);a=t-((b<<2)+15&-16)|0;ca=a;if((e|0)>=1){g=0;while(1){f=a+w(g,12)|0;j=u[k+(g<<2)>>2];u[f+8>>2]=j;u[f+4>>2]=j;u[f>>2]=j;g=g+1|0;if((g|0)!=(e|0)){continue}break}}e=(b|0)/2|0;if((b|0)>=2){g=0;while(1){b=g<<3;j=u[b+a>>2];m=u[d>>2];n=x(x(j-m)*x(.6074370741844177));u[d>>2]=j+n;j=u[a+(b|4)>>2];o=u[d+4>>2];p=x(x(j-o)*x(.15062999725341797));u[d+4>>2]=j+p;u[d+8>>2]=x(x(x(-j)-u[d+8>>2])*x(.15062999725341797))-j;u[(g<<2)+c>>2]=x(x(o+x(m+n))+p)*x(.5);g=g+1|0;if((e|0)!=(g|0)){continue}break}}}ca=q;return l}function Ff(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0;h=ca-128|0;l=h;ca=h;if(g>>>0<3){Tb(b,q[c+36>>2],p[c+2>>1]);h=h-((s[c>>1]<<2)+15&524272)|0;ca=h;Hf(h,b,q[c+8>>2],q[c+12>>2],p[c>>1],p[c+2>>1]);m=(f<<2)+15&-16;u=h-m|0;i=u;ca=i;Ub(h,i,p[c>>1],f);v=i-m|0;h=v;ca=h;x=h-(f<<4)|0;ca=x;if((f|0)>=1){C=g>>>1|0;D=e<<14>>16;m=0;while(1){A=m<<2;t=q[A+u>>2];y=p[c+2>>1];if((y|0)>=1){g=w(t,y);E=g+q[c+8>>2]|0;F=q[c+12>>2]+(g<<1)|0;g=0;while(1){h=g<<1;i=p[h+F>>1];p[h+(l+80|0)>>1]=w(i,s[b+h>>1]-(r[g+E|0]<<7)<<16>>16)>>>14;j=p[d+h>>1];k=j>>31;i=w(i,i);n=z(i);B=z(k^k+j);j=j<>16)<<16>>16;j=(w(i,j&65535)>>16)+w(i,j>>16)|0;k=yg(j,j>>31,k,k>>31);k=H-(((da&536870911)<<3|k>>>29)&-8)|0;i=(w(k>>16,i)+j|0)+(w(i,k&65535)>>16)|0;j=h+(l+48|0)|0;h=(B-n|0)+29|0;a:{if((h|0)<=20){h=21-h|0;k=2147483647>>>h|0;n=-2147483648>>h;h=((i|0)>(k|0)?k:(i|0)<(n|0)?n:i)<>h-21:0}p[j>>1]=h;g=g+1|0;if((y|0)!=(g|0)){continue}break}}ab(l,l+32|0,c,t);h=v+A|0;I=h,J=Gf((m<<4)+x|0,l+80|0,l+48|0,l+32|0,l,q[c+32>>2],p[c+4>>1],p[c+6>>1],e,p[c+2>>1]),q[I>>2]=J;g=q[c+16>>2]+w(p[c>>1],C)|0;i=h;if(t){g=g+t|0;j=r[g-1|0]}else{j=256}I=i,J=w(67108864-(pa(j-r[g|0]|0)<<16)>>16,D)+q[h>>2]|0,q[I>>2]=J;m=m+1|0;if((m|0)!=(f|0)){continue}break}}Ub(v,l+124|0,f,1);d=q[l+124>>2];o[a|0]=q[(d<<2)+u>>2];ka(a+1|0,(d<<4)+x|0,p[c+2>>1]);Sb(b,a,c);ca=l+128|0;return}ja(37560,37613,63);G()}function lb(a,b,c,d,e){var f=0,g=0,h=x(0),i=x(0),j=x(0),k=0,l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=0,r=0,s=x(0),t=0,v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=0,C=0,D=x(0),E=0,F=0,H=0;if((e|0)>=1){a:{if((e|0)<4){break a}if((d|0)>=3){t=e-3|0;E=d-3|0;F=(d|0)==3;B=d&-4;C=B|1;H=(C+1|0)>=(d|0);while(1){r=q<<2;f=r+b|0;g=f+12|0;i=u[f+8>>2];j=u[f+4>>2];s=u[f>>2];l=x(0);m=x(0);n=x(0);o=x(0);f=a;k=0;p=x(0);if(!F){while(1){v=u[f>>2];p=u[g>>2];w=u[f+4>>2];h=u[g+4>>2];y=u[f+8>>2];A=u[g+8>>2];z=u[f+12>>2];D=u[g+12>>2];l=x(x(x(x(l+x(v*p))+x(w*h))+x(y*A))+x(z*D));m=x(x(x(x(m+x(i*v))+x(p*w))+x(h*y))+x(A*z));n=x(x(x(x(n+x(j*v))+x(i*w))+x(p*y))+x(h*z));o=x(x(x(x(o+x(s*v))+x(j*w))+x(i*y))+x(p*z));g=g+16|0;f=f+16|0;s=h;i=D;j=A;k=k+4|0;if((E|0)>(k|0)){continue}break}}if(!((d|0)<=(B|0))){h=u[f>>2];p=u[g>>2];l=x(l+x(h*p));m=x(m+x(i*h));n=x(n+x(j*h));o=x(o+x(s*h));g=g+4|0;f=f+4|0}k=f;f=g;if(!((d|0)<=(C|0))){h=u[k>>2];s=u[f>>2];l=x(l+x(h*s));m=x(m+x(p*h));n=x(n+x(i*h));o=x(o+x(j*h));k=k+4|0;f=f+4|0}g=f;f=c+r|0;if(!H){j=u[k>>2];l=x(l+x(j*u[g>>2]));n=x(n+x(p*j));m=x(m+x(s*j));o=x(o+x(i*j))}u[f>>2]=o;u[(r|4)+c>>2]=n;u[(r|8)+c>>2]=m;u[(r|12)+c>>2]=l;q=q+4|0;if((t|0)>(q|0)){continue}break}break a}ja(31680,31705,69);G()}if((e|0)>(q|0)){k=(d|0)<1;while(1){f=q<<2;i=x(0);if(!k){r=b+f|0;g=0;while(1){t=g<<2;i=x(i+x(u[t+a>>2]*u[r+t>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}}u[c+f>>2]=i;q=q+1|0;if((q|0)!=(e|0)){continue}break}}return}ja(31549,31579,251);G()}function vc(a,b,c){var d=x(0),e=x(0),f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=q[a+12>>2];a:{if((h|0)<1){break a}i=q[a+8>>2];g=q[a>>2];while(1){u[(f<<2)+b>>2]=o[f+g|0];f=f+1|0;if((h|0)!=(f|0)){continue}break}if((h|0)<1){break a}k=q[a+4>>2];g=0;l=(i|0)<1;while(1){if(!l){j=(g<<2)+b|0;d=u[j>>2];f=0;while(1){d=x(d+x(u[(f<<2)+c>>2]*x(o[(w(f,h)+g|0)+k|0])));u[j>>2]=d;f=f+1|0;if((i|0)!=(f|0)){continue}break}}g=g+1|0;if((g|0)!=(h|0)){continue}break}if((h|0)<1){break a}f=0;while(1){c=(f<<2)+b|0;u[c>>2]=u[c>>2]*x(.0078125);f=f+1|0;if((h|0)!=(f|0)){continue}break}}b:{if(q[a+16>>2]){f=0;if((h|0)<=0){break b}while(1){c=(f<<2)+b|0;d=x(u[c>>2]*x(.5));e=x(1);c:{if(dx(-8)^1){break c}e=x(.5);if(d!=d){break c}g=d>2];e=x(e+x(x(a|0)*x(-.03999999910593033)));d=x(d+x(x(x(1)-x(d*e))*x(e*x(x(1)-x(d*d)))));e=x(x((g?x(-d):d)*x(.5))+x(.5))}u[c>>2]=e;f=f+1|0;if((h|0)!=(f|0)){continue}break}break b}f=0;if((h|0)<=0){break b}while(1){c=(f<<2)+b|0;d=u[c>>2];e=x(1);e:{if(dx(-8)^1){break e}e=x(0);if(d!=d){break e}g=d>2];e=x(e+x(x(a|0)*x(-.03999999910593033)));d=x(d+x(x(x(1)-x(d*e))*x(e*x(x(1)-x(d*d)))));e=g?x(-d):d}u[c>>2]=e;f=f+1|0;if((h|0)!=(f|0)){continue}break}}}function Qb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,s=x(0),t=0,v=x(0),A=0,D=x(0),E=x(0),F=x(0),G=0,H=x(0),I=x(0),J=x(0),K=0,L=0,M=0,N=0,O=0,P=0,Q=0;p=ca-16|0;ca=p;q[p+8>>2]=0;q[p+12>>2]=0;if((g+3|0)<=(f|0)){va(j,m,3)}if(m){D=x(.149993896484375)}else{g=l<<2;J=u[g+25216>>2];D=u[g+25232>>2]}g=0;if((b|0)<(c|0)){K=(k|0)>1?k:1;L=w(k,3);M=f+32|0;f=q[a+8>>2];l=b;while(1){N=(o|0)!=0&(l|0)>1;O=w(l-c|0,L);k=((l|0)<20?l:20)<<1;P=k+h|0;Q=(k|1)+h|0;k=0;while(1){f=w(f,k)+l<<2;s=u[f+d>>2];v=u[e+f>>2];E=x(x(B(v,x(-28)))-n);f=s>2];H=x(x(s-F)-v);I=x(C(x(H+x(.5))));a:{if(x(y(I))-1)){s=x(E-s);b:{if(x(y(s))>31&f}q[p+4>>2]=m;t=(M-q[j+20>>2]|0)-z(q[j+28>>2])|0;f=m;c:{if((b|0)==(l|0)){break c}A=t+O|0;if((A|0)>23){break c}f=(m|0)<1?m:1;q[p+4>>2]=f;if((A|0)>15){break c}f=(f|0)>-1?f:-1;q[p+4>>2]=f}if(N){f=f>>31&f;q[p+4>>2]=f}d:{if((t|0)>=15){Ad(j,p+4|0,r[P|0]<<7,r[Q|0]<<6);break d}if((t|0)>=2){f=(f|0)<1?f:1;f=(f|0)>-1?f:-1;q[p+4>>2]=f;ma(j,f<<1^f>>31,25248,2);break d}if((t|0)==1){f=f>>31&f;q[p+4>>2]=f;va(j,0-f|0,1);break d}q[p+4>>2]=-1}f=q[a+8>>2];t=w(k,f)+l<<2;A=q[p+4>>2];s=x(A|0);u[t+i>>2]=H-s;u[e+t>>2]=x(v+F)+s;u[G>>2]=x(v+s)-x(D*s);t=m-A|0;m=t>>31;g=(m^m+t)+g|0;k=k+1|0;if((K|0)!=(k|0)){continue}break}l=l+1|0;if((l|0)!=(c|0)){continue}break}}ca=p+16|0;return o?0:g}function rf(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=0,j=x(0),k=0;h=ca-16|0;ca=h;a:{if(r[a+4765|0]!=2){f=q[a+4580>>2];break a}i=Da(+x(x(u[b+708>>2]+x(-12))*x(-.25)));f=q[a+4580>>2];if((f|0)<1){break a}g=x(x(x(1/(i+1))*x(-.5))+x(1));while(1){e=(d<<2)+b|0;u[e>>2]=g*u[e>>2];d=d+1|0;if((f|0)!=(d|0)){continue}break}}d=0;e=q[a+4588>>2];i=Ab(+x(x(x(x(q[a+4716>>2])*x(-.0078125))+x(21))*x(.33000001311302185)));b:{if((f|0)<=0){break b}j=x(i/+(e|0));while(1){e=(d<<2)+b|0;g=u[e>>2];g=x(F(x(x(g*g)+x(u[e+712>>2]*j))));u[e>>2]=g>2]*x(65536));c:{if(x(y(g))>2]=e;d=d+1|0;if((f|0)!=(d|0)){continue}break}}ka(b+728|0,h,f<<2);o[b+744|0]=r[a+7168|0];Xb(a+4736|0,h,a+7168|0,(c|0)==2,q[a+4580>>2]);c=q[a+4580>>2];if((c|0)>=1){d=0;while(1){f=d<<2;u[f+b>>2]=x(q[f+h>>2])*x(152587890625e-16);d=d+1|0;if((c|0)!=(d|0)){continue}break}}c=r[a+4765|0];d:{if((c|0)!=2){d=o[a+4766|0];break d}d=x(u[b+708>>2]+x(x(q[a+4712>>2])*x(30517578125e-15)))>x(1)^1;o[a+4766|0]=d}u[b+692>>2]=x(x(x(p[((c<<24>>24<<1&-4)+6416|0)+(d<<1)>>1])*x(.0009765625))*x(.800000011920929))+x(x(x(x(x(x(q[a+4628>>2])*x(-.05000000074505806))+x(1.2000000476837158))+x(x(x(q[a+4532>>2])*x(.20000000298023224))*x(-.00390625)))+x(u[b+696>>2]*x(-.10000000149011612)))-x(u[b+700>>2]*x(.20000000298023224)));ca=h+16|0}function Wf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=ca-32|0;ca=e;l=q[a+12>>2];if(l){m=q[a+8>>2];d=m<<10;f=262144-d|0;a:{if((f|0)<=262143){f=f>>16;d=0-d&64512;if(d){i=f+1|0;if(d>>>0>=32768){d=d<<16>>16;g=w(i,12)+6464|0;j=q[g+8>>2];h=w(f,12)+6464|0;k=j-q[h+8>>2]|0;q[e+24>>2]=(w(d,k>>16)+j|0)+(w(d,k&65535)>>16);j=q[g+4>>2];k=j-q[h+4>>2]|0;q[e+20>>2]=(w(d,k>>16)+j|0)+(w(d,k&65535)>>16);g=q[g>>2];h=g-q[h>>2]|0;q[e+16>>2]=(w(d,h>>16)+g|0)+(w(d,h&65535)>>16);i=(i<<3)+6528|0;g=q[i+4>>2];f=(f<<3)+6528|0;h=g-q[f+4>>2]|0;q[e+12>>2]=(w(d,h>>16)+g|0)+(w(d,h&65535)>>16);i=q[i>>2];f=i-q[f>>2]|0;q[e+8>>2]=(w(d,f>>16)+i|0)+(w(d,f&65535)>>16);break a}g=w(i,12)+6464|0;h=w(f,12)+6464|0;j=q[h+8>>2];k=q[g+8>>2]-j|0;q[e+24>>2]=w(d,k>>16)+j+(w(d,k&65535)>>>16);j=q[h+4>>2];k=q[g+4>>2]-j|0;q[e+20>>2]=w(d,k>>16)+j+(w(d,k&65535)>>>16);j=q[g>>2];g=q[h>>2];h=j-g|0;q[e+16>>2]=w(d,h>>16)+g+(w(d,h&65535)>>>16);i=(i<<3)+6528|0;f=(f<<3)+6528|0;g=q[f+4>>2];h=q[i+4>>2]-g|0;q[e+12>>2]=w(d,h>>16)+g+(w(d,h&65535)>>>16);f=q[f>>2];i=q[i>>2]-f|0;q[e+8>>2]=w(d,i>>16)+f+(w(d,i&65535)>>>16);break a}d=w(f,12)+6464|0;q[e+24>>2]=q[d+8>>2];i=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=i;d=(f<<3)+6528|0;f=q[d+4>>2];q[e+8>>2]=q[d>>2];q[e+12>>2]=f;break a}q[e+24>>2]=q[1630];d=q[1629];q[e+16>>2]=q[1628];q[e+20>>2]=d;d=q[1641];q[e+8>>2]=q[1640];q[e+12>>2]=d}d=l+m|0;d=(d|0)>0?d:0;q[a+8>>2]=(d|0)<256?d:256;Xf(b,e+16|0,e+8|0,a,b,c)}ca=e+32|0}function Dd(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0;g=s[a+4>>1]|s[a+6>>1]<<16;p[b>>1]=g;p[b+2>>1]=g>>>16;g=s[a+8>>1]|s[a+10>>1]<<16;p[c>>1]=g;p[c+2>>1]=g>>>16;g=f<<1;i=g+b|0;i=s[i>>1]|s[i+2>>1]<<16;p[a+4>>1]=i;p[a+6>>1]=i>>>16;g=c+g|0;g=s[g>>1]|s[g+2>>1]<<16;p[a+8>>1]=g;p[a+10>>1]=g>>>16;g=e<<3;h=65536/(g|0)|0;i=q[d+4>>2];n=q[d>>2];if((e|0)>=1){d=h<<16>>16;k=s[a+2>>1];r=(w(d,i-k<<16>>16)>>15)+1>>1;h=s[a>>1];t=(w(d,n-h<<16>>16)>>15)+1>>1;u=(g|0)>1?g:1;d=0;while(1){e=d+1|0;m=e<<1;j=m+c|0;d=(d<<1)+b|0;l=p[d+4>>1]+p[d>>1]|0;d=p[b+m>>1];m=l+(d<<1)|0;l=j;k=k+r|0;o=k<<16>>16;j=(w(o,d>>5)+(p[j>>1]<<8)|0)+(w(d<<11&63488,o)>>16)|0;h=h+t|0;d=h<<16>>16;d=(j+w(d,m>>7)|0)+(w(d,m<<9&65024)>>16)|0;j=(d>>7)+1>>1;p[l>>1]=(d|0)>8388479?32767:(j|0)>-32768?j:-32768;d=e;if((u|0)!=(d|0)){continue}break}}if((f|0)>(g|0)){d=i<<16>>16;e=n<<16>>16;while(1){h=g<<1;g=g+1|0;j=g<<1;k=j+c|0;h=b+h|0;l=p[h+4>>1]+p[h>>1]|0;h=p[b+j>>1];j=l+(h<<1)|0;l=k;k=(((w(d,h>>5)+(p[k>>1]<<8)|0)+(w(d,h<<11&63488)>>16)|0)+w(e,j>>7)|0)+(w(e,j<<9&65024)>>16)|0;h=(k>>7)+1>>1;p[l>>1]=(k|0)>8388479?32767:(h|0)>-32768?h:-32768;if((f|0)!=(g|0)){continue}break}}p[a+2>>1]=i;p[a>>1]=n;if((f|0)>=1){g=0;while(1){g=g+1|0;d=g<<1;e=d+b|0;a=p[e>>1];j=e;d=c+d|0;e=p[d>>1];i=e+a|0;i=(i|0)<32767?i:32767;p[j>>1]=(i|0)>-32768?i:-32768;a=a-e|0;a=(a|0)<32767?a:32767;p[d>>1]=(a|0)>-32768?a:-32768;if((f|0)!=(g|0)){continue}break}}}function rd(a,b,c,d){var e=0,f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=0,m=x(0),n=x(0),o=x(0),p=0,r=0,s=0,t=x(0),v=x(0);s=ca;h=(d<<2)+15&-16;e=s-h|0;ca=e;p=e-h|0;ca=p;k=(d|0)>1?d:1;l=la(e,0,k<<2);e=0;while(1){h=e<<2;i=h+a|0;f=u[i>>2];q[h+p>>2]=f>2]=y(f);q[b+h>>2]=0;e=e+1|0;if((k|0)!=(e|0)){continue}break}f=x(0);if(d>>1<(c|0)){e=0;while(1){f=x(f+u[(e<<2)+a>>2]);e=e+1|0;if((k|0)!=(e|0)){continue}break}g=x(x(c|0)+x(.800000011920929));if(!(fx(1.0000000036274937e-15)^1):0)){q[a>>2]=1065353216;la(a+4|0,0,(((d|0)>2?d:2)<<2)-4|0);f=x(1)}m=x(g*x(x(1)/f));h=0;f=x(0);while(1){i=h<<2;r=i+b|0;n=u[a+i>>2];g=x(C(x(m*n)));a:{if(x(y(g))>2]=e;g=x(e|0);u[i+l>>2]=g+g;j=x(j+x(n*g));c=c-e|0;f=x(f+x(g*g));h=h+1|0;if((k|0)!=(h|0)){continue}break}}b:{if((d+3|0)<(c|0)){j=u[l>>2];q[b>>2]=q[b>>2]+c;o=f;f=x(c|0);f=x(x(o+x(f*f))+x(j*f));break b}if((c|0)<1){break b}r=(d|0)>2?d:2;n=u[a>>2];d=0;while(1){m=x(f+x(1));f=x(m+u[l>>2]);g=x(j+n);g=x(g*g);e=1;h=0;while(1){i=e<<2;t=x(m+u[i+l>>2]);o=f;f=x(j+u[a+i>>2]);v=x(f*f);i=x(o*v)>x(g*t);f=i?t:o;g=i?v:g;h=i?e:h;e=e+1|0;if((r|0)!=(e|0)){continue}break}e=h<<2;g=u[e+a>>2];h=e+l|0;f=u[h>>2];u[h>>2]=f+x(2);e=b+e|0;q[e>>2]=q[e>>2]+1;f=x(m+f);j=x(j+g);d=d+1|0;if((d|0)!=(c|0)){continue}break}}e=0;while(1){a=e<<2;c=a+b|0;a=q[a+p>>2];q[c>>2]=(q[c>>2]^0-a)+a;e=e+1|0;if((k|0)!=(e|0)){continue}break}ca=s;return f}function hf(a,b,c,d){var e=0,f=0,g=0;e=ca-32|0;ca=e;g=-1;a:{b:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break b}break a}if((b|0)==16e3|(b|0)==48e3){break b}if((b|0)!=24e3){break a}}if(c-1>>>0>1){break a}f=d-2048|0;if(f>>>0>3|(f|0)==2){break a}q[e+28>>2]=20216;q[e+28>>2]=q[e+28>>2]+3&-4;a=la(a,0,(q[e+28>>2]+w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,c)|0)+18384|0);q[e+28>>2]=20216;g=q[e+28>>2]+3&-4;q[e+28>>2]=g;q[a+14192>>2]=c;q[a+112>>2]=c;q[a+4>>2]=18140;q[a+180>>2]=0;q[a+144>>2]=b;f=g+18140|0;q[a>>2]=f;g=-3;if(Cb(a+18140|0,0,a+8|0)){break a}q[a+8>>2]=c;q[a+12>>2]=c;q[a+76>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;q[a+44>>2]=9;q[a+48>>2]=0;q[a+36>>2]=25e3;q[a+40>>2]=0;q[a+28>>2]=16e3;q[a+32>>2]=20;q[a+20>>2]=16e3;q[a+24>>2]=8e3;q[a+16>>2]=q[a+144>>2];f=a+f|0;if(of(f,b,c,q[a+180>>2])){break a}g=0;q[e+16>>2]=0;oa(f,10016,e+16|0);q[e>>2]=q[a+44>>2];oa(f,4010,e);q[a+148>>2]=1;q[a+152>>2]=1;q[a+160>>2]=w(b,c)+3e3;q[a+128>>2]=-1e3;q[a+132>>2]=1105;q[a+108>>2]=d;q[a+136>>2]=-1e3;q[a+140>>2]=-1;q[a+120>>2]=-1e3;q[a+124>>2]=-1e3;q[a+164>>2]=-1e3;q[a+168>>2]=24;q[a+156>>2]=5e3;q[a+14204>>2]=1065353216;p[a+14196>>1]=16384;b=q[a+144>>2];q[a+172>>2]=(b|0)/100;q[a+116>>2]=(b|0)/250;b=pa(60);q[a+14252>>2]=1;q[a+14240>>2]=1105;q[a+14224>>2]=1001;q[a+14200>>2]=b<<8;b=a+188|0;q[b+8>>2]=q[a+144>>2];q[b>>2]=0;la(b+12|0,0,13992);q[a+192>>2]=q[a+108>>2]}ca=e+32|0;return g}function sf(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=x(0);f=ca-2064|0;ca=f;a:{b:{h=q[a+4580>>2];c:{if((h|0)>=1){while(1){i=g<<2;u[i+(f+1568|0)>>2]=x(1)/u[b+i>>2];g=g+1|0;if((h|0)!=(g|0)){continue}break}if(r[a+4765|0]==2){break c}if((h|0)<1){break b}e=q[a+4640>>2];g=d-(e<<2)|0;i=q[a+4588>>2];d=0;c=f;while(1){Nf(c,g,u[(f+1568|0)+(d<<2)>>2],e+i|0);i=q[a+4588>>2];g=(i<<2)+g|0;e=q[a+4640>>2];c=(i+e<<2)+c|0;d=d+1|0;h=q[a+4580>>2];if((d|0)<(h|0)){continue}break}break b}if(r[a+4765|0]!=2){break b}}if((q[b+228>>2]+2|0)<=(q[a+4592>>2]-q[a+4640>>2]|0)){g=c;c=b+228|0;Kf(f+1664|0,f+1584|0,g,c,q[a+4588>>2],h);g=b+144|0;xf(g,a+4740|0,a+4768|0,a+4656|0,b+708|0,f+1664|0,f+1584|0,q[a+4588>>2],q[a+4580>>2]);wf(a,b,e);e=d;d=q[a+4640>>2];vf(f,e-(d<<2)|0,g,c,f+1568|0,q[a+4588>>2],q[a+4580>>2],d);break a}ja(38419,38536,62);G()}la(b+144|0,0,w(h,20));q[b+708>>2]=0;q[a+4656>>2]=0}c=a;e=f+1536|0;d=f;if(q[a+4664>>2]){j=x(.009999999776482582)}else{j=u[b+700>>2];j=x(x(x(Ab(+x(u[b+708>>2]/x(3))))/x(1e4))/x(x(j*x(.75))+x(.25)))}uf(c,e,d,j);c=b+16|0;yf(a,c,f+1536|0,a+4500|0);tf(b+712|0,f,c,b,q[a+4588>>2],q[a+4580>>2],q[a+4640>>2]);c=f+1560|0;d=q[c+4>>2];b=a+4524|0;q[b>>2]=q[c>>2];q[b+4>>2]=d;c=f+1552|0;d=q[c+4>>2];b=a+4516|0;q[b>>2]=q[c>>2];q[b+4>>2]=d;c=q[f+1548>>2];b=a+4508|0;q[b>>2]=q[f+1544>>2];q[b+4>>2]=c;b=q[f+1540>>2];q[a+4500>>2]=q[f+1536>>2];q[a+4504>>2]=b;ca=f+2064|0}function fg(a,b,c){var d=0,e=0,f=0;d=ca-48|0;ca=d;f=q[a+4>>2];e=q[a>>2];q[d+44>>2]=c;e=a+e|0;c=-5;a:{b:{switch(b-4009|0){case 0:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+52>>2];c=0;break a;case 22:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+84>>2];c=0;break a;case 19:q[a+48>>2]=0;q[a+52>>2]=0;q[a+80>>2]=0;q[a+84>>2]=0;q[a+72>>2]=0;q[a+76>>2]=0;b=a- -64|0;q[b>>2]=0;q[b+4>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;c=0;ua(e,4028,0);rb(a+f|0);q[a+48>>2]=q[a+8>>2];q[b>>2]=q[a+12>>2]/400;break a;case 20:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+12>>2];c=0;break a;case 24:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}if(q[a+60>>2]==1002){q[d>>2]=b;c=ua(e,4033,d);break a}q[b>>2]=q[a+36>>2];c=0;break a;case 36:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];c=0;break a;case 25:b=q[d+44>>2];q[d+44>>2]=b+4;c=-1;b=q[b>>2];if(b+32768>>>0>65535){break a}q[a+40>>2]=b;c=0;break a;case 30:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+72>>2];c=0;break a;case 37:a=q[d+44>>2];q[d+44>>2]=a+4;c=-1;a=q[a>>2];if(a>>>0>1){break a}q[d+16>>2]=a;c=ua(e,4046,d+16|0);break a;case 38:break b;default:break a}}a=q[d+44>>2];q[d+44>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+32>>2]=a;c=ua(e,4047,d+32|0)}ca=d+48|0;return c}function ad(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=0,o=0,p=0,r=0,s=0,t=0,v=0,y=0,z=0;m=ca;y=m;v=q[a+8>>2];p=q[a+4>>2];s=q[a+44>>2];o=s<>2]-(i?0:j)|0;r=1<>2]+((p|0)/2<<2)|0,n,o<<2);if((m|0)<1){break a}d=a- -64|0;j=0;while(1){kb(d,b+(j<<2)|0,q[c>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}if((m|0)<1){break a}b=a- -64|0;j=0;while(1){kb(b,(j<<2)+n|0,q[c+4>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}break a}if(!((h|0)==1?(g|0)==2:0)){h=(h|0)>1?h:1;s=a- -64|0;g=0;while(1){_a(a,(w(g,o)<<2)+b|0,n,(w(g,v)<<2)+d|0,e,f,r,k,l);if((m|0)>=1){z=(g<<2)+c|0;j=0;while(1){kb(s,(j<<2)+n|0,q[z>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}}g=g+1|0;if((h|0)!=(g|0)){continue}break}break a}g=q[c>>2];_a(a,b,n,d,e,f,r,k,l);h=(o<<2)+b|0;b=g+((p|0)/2<<2)|0;_a(a,h,b,(v<<2)+d|0,e,f,r,k,l);j=0;if((o|0)>0){while(1){d=j<<2;e=d+n|0;u[e>>2]=x(u[e>>2]*x(.5))+x(u[b+d>>2]*x(.5));j=j+1|0;if((o|0)!=(j|0)){continue}break}}if((m|0)<1){break a}b=a- -64|0;j=0;while(1){kb(b,(j<<2)+n|0,q[c>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}}ca=y}function sd(a,b,c,d){var e=0,f=x(0),g=0,h=0,i=0,j=x(0),k=0,l=0;g=d;d=c+1|0;e=(b|0)>(c|0);e=Qa(g,q[q[((e?d:b)<<2)+25488>>2]+(((b|0)>(d|0)?b:d)<<2)>>2]+q[q[(((b|0)<(c|0)?b:c)<<2)+25488>>2]+((e?b:c)<<2)>>2]|0);a:{if((c|0)>0){if((b|0)<2){break a}if((b|0)!=2){while(1){g=b;b:{if((b|0)<=(c|0)){d=c;k=g<<2;l=q[k+25488>>2];i=q[(l+(c<<2)|0)+4>>2];h=i>>>0<=e>>>0?-1:0;e=e-(h&i)|0;c:{if(e>>>0>2]){while(1){b=b-1|0;i=q[k+q[(b<<2)+25488>>2]>>2];if(e>>>0>>0){continue}break c}}while(1){b=d;d=b-1|0;i=q[l+(b<<2)>>2];if(e>>>0>>0){continue}break}}c=(h^(c+h|0)-b)<<16>>16;q[a>>2]=c;j=f;f=x(c|0);f=x(j+x(f*f));c=b;e=e-i|0;break b}d=g<<2;k=c+1|0;b=q[d+q[(k<<2)+25488>>2]>>2];h=q[d+q[(c<<2)+25488>>2]>>2];if(!(b>>>0<=e>>>0|h>>>0>e>>>0)){q[a>>2]=0;e=e-h|0;break b}h=e;e=b>>>0<=e>>>0?-1:0;h=h-(e&b)|0;while(1){b=c;c=b-1|0;l=q[d+q[(c<<2)+25488>>2]>>2];if(l>>>0>h>>>0){continue}break}b=(e^(e+k|0)-b)<<16>>16;q[a>>2]=b;j=f;f=x(b|0);f=x(j+x(f*f));e=h-l|0}b=g-1|0;a=a+4|0;if((g|0)>3){continue}break}}d=c<<1|1;g=d>>>0<=e>>>0;b=g?-1:0;g=c-g|0;d=e-(b&d)|0;e=d+1|0;c=e>>>1|0;b=(b^g-c)<<16>>16;q[a>>2]=b;g=a;a=d-(c?(e&-2)-1|0:0)|0;a=(c-a^0-a)<<16>>16;q[g+4>>2]=a;j=f;f=x(b|0);j=x(j+x(f*f));f=x(a|0);return x(j+x(f*f))}ja(25448,25471,469);G()}ja(30672,25471,470);G()}function Ta(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=0,s=x(0),t=0,v=0,y=0,z=0,A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0);a:{if(!(f!=x(0)|g!=x(0))){if((a|0)==(b|0)){break a}ra(a,b,e<<2);return}l=(d|0)>15?d:15;t=-2-l|0;v=l^-1;y=1-l|0;z=0-l|0;d=w(i,12);A=x(u[d+1112>>2]*g);B=x(u[d+1108>>2]*g);C=x(u[d+1104>>2]*g);d=f==g?(h|0)==(i|0)?0:k:k;i=(c|0)>15?c:15;c=(i|0)==(l|0)?d:k;if((c|0)>=1){d=w(h,12);D=x(u[d+1112>>2]*f);E=x(u[d+1108>>2]*f);F=x(u[d+1104>>2]*f);d=2-l|0;m=u[(y<<2)+b>>2];n=u[(z<<2)+b>>2];o=u[(v<<2)+b>>2];f=u[(t<<2)+b>>2];k=0;while(1){h=k<<2;p=u[h+j>>2];q=x(p*p);s=x(x(1)-q);r=a+h|0;p=u[(d+k<<2)+b>>2];G=u[b+h>>2];h=(k-i<<2)+b|0;u[r>>2]=x(x(f+p)*x(A*q))+x(x(x(m+o)*x(B*q))+x(x(n*x(C*q))+x(x(x(G+x(u[h>>2]*x(F*s)))+x(x(E*s)*x(u[h+4>>2]+u[h-4>>2])))+x(x(D*s)*x(u[h+8>>2]+u[h-8>>2])))));f=o;o=n;n=m;m=p;k=k+1|0;if((c|0)!=(k|0)){continue}break}r=c}if(g==x(0)){if((a|0)==(b|0)){break a}d=c<<2;ra(a+d|0,b+d|0,e-c<<2);return}h=e-r|0;if((h|0)<1){break a}e=r<<2;d=a+e|0;c=2-l|0;b=b+e|0;o=u[b+(t<<2)>>2];f=u[b+(v<<2)>>2];m=u[b+(z<<2)>>2];n=u[b+(y<<2)>>2];k=0;while(1){a=k<<2;g=u[b+(c+k<<2)>>2];u[a+d>>2]=x(A*x(o+g))+x(x(B*x(f+n))+x(x(C*m)+u[a+b>>2]));o=f;f=m;m=n;n=g;k=k+1|0;if((h|0)!=(k|0)){continue}break}}}function kd(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=x(0),r=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=x(0);a:{b:{c:{if((h|0)>0){y=q[a+32>>2];m=y+(h<<1)|0;d:{if((w(p[m>>1]-p[m-2>>1]|0,j)|0)<9){break d}F=w(q[a+44>>2],j);H=(i|0)>1?i:1;I=s[y>>1];while(1){J=(w(z,F)<<2)+b|0;A=I;m=0;while(1){l=A<<16;E=m+1|0;A=p[(E<<1)+y>>1];l=l>>16;n=w(A-l|0,j);if((n|0)>=9){K=(w(j,l)<<2)+J|0;L=x(n|0);B=0;r=0;t=0;l=0;while(1){o=u[(l<<2)+K>>2];o=x(x(o*o)*L);B=(o>2]-4|0)<(m|0)?((r+t<<5>>>0)/(n>>>0)|0)+v|0:v;m=q[(m<<2)+k>>2];C=w(m,((r<<1>=(n|0))+(t<<1>=(n|0))|0)+(B<<1>=(n|0))|0)+C|0;D=m+D|0}m=E;if((m|0)!=(h|0)){continue}break}z=z+1|0;if((H|0)!=(z|0)){continue}break}if(g){l=q[e>>2]+(v?(v>>>0)/(w((h-q[a+8>>2]|0)+4|0,i)>>>0)|0:0)>>1;q[e>>2]=l;e:{f:{switch(q[f>>2]){case 2:l=l+4|0;break e;case 0:break f;default:break e}}l=l-4|0}q[f>>2]=(l|0)>22?2:(l|0)>18}if((D|0)<=0){break c}if((C|0)<=-1){break b}a=q[c>>2]+((C<<8>>>0)/(D>>>0)|0)>>1;q[c>>2]=a;l=3;a=(w(a,3)-(d<<7)|0)+448|0;if((a|0)<318){break d}l=2;if((a|0)>=1022){break a}}return l}ja(31012,30999,489);G()}ja(31036,30999,545);G()}ja(31064,30999,546);G()}return(a|0)<1534}function Rf(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=0,k=0,l=0;e=ca-1744|0;ca=e;j=q[a+4592>>2];h=q[a+4596>>2];g=h+q[a+4584>>2]|0;k=j+g|0;f=q[a+4548>>2];if((k|0)>=(f|0)){g=((g<<2)+d|0)-(f<<2)|0;gb(e,g,1,h);h=q[a+4596>>2];f=h<<2;g=f+g|0;l=e+f|0;f=q[a+4548>>2]-(h<<1)<<2;gb(ka(l,g,f)+f|0,g+f|0,2,h);Uc(e+1664|0,e,q[a+4548>>2],q[a+4648>>2]+1|0);i=u[e+1664>>2];u[e+1664>>2]=i+x(x(i*x(.0010000000474974513))+x(1));i=Tc(e+1536|0,e+1664|0,q[a+4648>>2]);u[b+704>>2]=u[e+1664>>2]/(i>x(1)?i:x(1));Sc(e+1600|0,e+1536|0,q[a+4648>>2]);fb(e+1600|0,q[a+4648>>2],x(.9900000095367432));eb(c,e+1600|0,d-(j<<2)|0,k,q[a+4648>>2]);a:{if(!(q[a+4664>>2]|!r[a+4765|0])){if(!Sf(c,b+228|0,a+4762|0,a+4764|0,a+10060|0,q[a+4544>>2],x(x(q[a+4652>>2])*x(152587890625e-16)),x(x(x(x(x(x(q[a+4648>>2])*x(-.004000000189989805))+x(.6000000238418579))+x(x(x(q[a+4532>>2])*x(.10000000149011612))*x(-.00390625)))+x(x(o[a+4541|0]>>1)*x(-.15000000596046448)))+x(x(x(q[a+4712>>2])*x(.10000000149011612))*x(-30517578125e-15))),q[a+4576>>2],q[a+4644>>2],q[a+4580>>2])){o[a+4765|0]=2;break a}o[a+4765|0]=1;break a}q[b+228>>2]=0;q[b+232>>2]=0;q[b+236>>2]=0;q[b+240>>2]=0;q[a+10060>>2]=0;o[a+4764|0]=0;p[a+4762>>1]=0}ca=e+1744|0;return}ja(37162,37224,59);G()}function bg(a){var b=0,c=0,d=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{if(a){b=q[a+8>>2];k:{if((b|0)<=23999){if((b|0)==8e3|(b|0)==12e3){break k}if((b|0)!=16e3){break a}break k}if((b|0)<=44099){if((b|0)==24e3|(b|0)==32e3){break k}break a}if((b|0)==48e3){break k}if((b|0)!=44100){break a}}b=q[a+20>>2];if((b|0)!=12e3?!((b|0)==8e3|(b|0)==16e3):0){break a}c=q[a+12>>2];if((c|0)!=12e3?!((c|0)==8e3|(c|0)==16e3):0){break a}d=q[a+16>>2];if(((d|0)!=12e3?!((d|0)==8e3|(d|0)==16e3):0)|((b|0)<(d|0)|(b|0)>(c|0))){break a}if((c|0)<(d|0)){break a}l:{m:{b=q[a+24>>2];switch(b-10|0){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:break j;case 0:case 10:break l;default:break m}}if((b|0)==40){break l}if((b|0)!=60){break j}}if(t[a+32>>2]>=101){break i}if(t[a+48>>2]>=2){break h}if(t[a+52>>2]>=2){break g}if(t[a+40>>2]>=2){break f}b=q[a>>2];if(b-1>>>0>=2){break e}c=q[a+4>>2];if(c-1>>>0>=2){break d}if((b|0)<(c|0)){break c}if(t[a+36>>2]>=11){break b}return 0}ja(35344,35381,41);G()}ja(35408,35381,69);G()}ja(35408,35381,73);G()}ja(35408,35381,77);G()}ja(35408,35381,81);G()}ja(35408,35381,85);G()}ja(35408,35381,89);G()}ja(35408,35381,93);G()}ja(35408,35381,97);G()}ja(35408,35381,101);G()}ja(35408,35381,62);G()}function Td(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(qa(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;if(q[b+44>>2]!=4){f=a+16|0;i=f+(q[a+12>>2]<<3)|0;j=b;b:{c:{while(1){d:{if(f>>>0>=i>>>0){break d}p[b+52>>1]=0;ub(f,b,c,c,1,e);if(r[b+54|0]){break d}e:{if(!r[b+53|0]){break e}if(r[b+52|0]){d=1;if(q[b+24>>2]==1){break c}h=1;g=1;if(r[a+8|0]&2){break e}break c}h=1;d=g;if(!(o[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=g;a=4;if(!h){break b}}a=3}q[j+44>>2]=a;if(d&1){break a}}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}g=q[a+12>>2];f=a+16|0;bb(f,b,c,d,e);if((g|0)<2){break a}g=f+(g<<3)|0;f=a+24|0;a=q[a+8>>2];if(!(q[b+36>>2]!=1?!(a&2):0)){while(1){if(r[b+54|0]){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}break a}if(!(a&1)){while(1){if(r[b+54|0]|q[b+36>>2]==1){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break a}}while(1){if(r[b+54|0]|(q[b+24>>2]==1?q[b+36>>2]==1:0)){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}}}function ef(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=0;j=(c|0)/(b|0)|0;i=x(x(x(-25)/x(((j|0)>50?j:50)|0))+x(1));a:{b:{if((b|0)>=4){r=b-3|0;c=0;while(1){b=c<<3;g=u[b+a>>2];k=u[(b|4)+a>>2];l=u[(b|8)+a>>2];m=u[(b|12)+a>>2];n=u[(b|16)+a>>2];o=u[(b|20)+a>>2];p=u[(b|24)+a>>2];q=u[(b|28)+a>>2];h=x(h+x(x(x(x(g*k)+x(l*m))+x(n*o))+x(p*q)));e=x(e+x(x(x(x(k*k)+x(m*m))+x(o*o))+x(q*q)));f=x(f+x(x(x(x(g*g)+x(l*l))+x(n*n))+x(p*p)));c=c+4|0;if((r|0)>(c|0)){continue}break}if(f>2];e=x(B(x(g+x(i*x(e-g))),x(0)));u[d+8>>2]=e;g=u[d+4>>2];h=x(B(x(g+x(i*x(h-g))),x(0)));u[d+4>>2]=h;g=u[d>>2];f=x(B(x(g+x(i*x(f-g))),x(0)));u[d>>2]=f;c:{if(!((ex(.0007999999797903001))){e=u[d+16>>2];break c}f=x(F(f));i=x(F(e));e=x(f*i);h=e>h?h:e;u[d+4>>2]=h;g=u[d+12>>2];f=x(F(f));i=x(F(i));e=x(h/x(e+x(1.0000000036274937e-15)));e=x(x(x(x(y(x(f-i)))/x(x(f+x(1.0000000036274937e-15))+i))*x(F(x(x(1)-x(e*e)))))-g);f=x(j|0);e=x(g+x(e/f));u[d+12>>2]=e;f=x(u[d+16>>2]+x(x(-.019999999552965164)/f));e=e>2]=e}return x(A(x(e*x(20)),x(1)))}function bd(a,b,c,d,e,f,g){var h=0,i=x(0),j=x(0),k=0,l=0,m=0,n=x(0),o=0,p=0,r=0,s=0,t=x(0),v=0;h=ca;m=h;if(!((d|0)!=2|(e|0)!=1)){i=u[g+4>>2];j=u[g>>2];if((c|0)>=1){d=q[a+4>>2];a=q[a>>2];n=u[f>>2];h=0;while(1){e=h<<2;t=u[e+d>>2];f=h<<3;j=x(j+x(u[a+e>>2]+x(1.0000000031710769e-30)));u[f+b>>2]=j*x(30517578125e-15);i=x(i+x(t+x(1.0000000031710769e-30)));u[(f|4)+b>>2]=i*x(30517578125e-15);i=x(n*i);j=x(n*j);h=h+1|0;if((h|0)!=(c|0)){continue}break}}u[g+4>>2]=i;u[g>>2]=j;ca=m;return}v=(d|0)>1?d:1;o=(c|0)/(e|0)|0;k=h-((c<<2)+15&-16)|0;ca=k;j=u[f>>2];f=0;while(1){h=l<<2;p=h+b|0;r=q[a+h>>2];s=g+h|0;i=u[s>>2];a:{if((e|0)<=1){h=0;if((c|0)<=0){break a}while(1){i=x(i+x(u[(h<<2)+r>>2]+x(1.0000000031710769e-30)));u[(w(d,h)<<2)+p>>2]=i*x(30517578125e-15);i=x(j*i);h=h+1|0;if((h|0)!=(c|0)){continue}break}break a}f=1;h=0;if((c|0)<1){break a}while(1){f=h<<2;i=x(i+x(u[f+r>>2]+x(1.0000000031710769e-30)));u[f+k>>2]=i;i=x(j*i);f=1;h=h+1|0;if((h|0)!=(c|0)){continue}break}}u[s>>2]=i;b:{if(!f){break b}h=0;if((o|0)<1){break b}while(1){u[(w(d,h)<<2)+p>>2]=u[(w(e,h)<<2)+k>>2]*x(30517578125e-15);h=h+1|0;if((o|0)!=(h|0)){continue}break}}l=l+1|0;if((v|0)!=(l|0)){continue}break}ca=m}function od(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=0;a:{if(c){f=x(1.0000000036274937e-15);if((d|0)<1){e=x(1.0000000036274937e-15);break a}c=0;e=x(1.0000000036274937e-15);while(1){g=e;j=c<<2;h=u[j+a>>2];i=u[b+j>>2];e=x(h-i);e=x(g+x(e*e));g=f;f=x(h+i);f=x(g+x(f*f));c=c+1|0;if((d|0)!=(c|0)){continue}break}break a}if((d|0)<1){e=x(1.0000000036274937e-15);f=x(1.0000000036274937e-15);break a}c=0;while(1){e=u[(c<<2)+a>>2];f=x(f+x(e*e));c=c+1|0;if((d|0)!=(c|0)){continue}break}f=x(f+x(1.0000000036274937e-15));c=0;e=x(0);while(1){g=e;e=u[(c<<2)+b>>2];e=x(g+x(e*e));c=c+1|0;if((d|0)!=(c|0)){continue}break}e=x(e+x(1.0000000036274937e-15))}h=x(F(e));e=x(h*h);i=x(F(f));f=x(i*i);g=x(0);b:{if(x(e+f)f^1)){break b}g=x(x(x(x(x(h*i)*x(f+x(e*x(.43157973885536194))))/x(x(f+x(e*x(.6784840226173401)))*x(f+x(e*x(.0859554186463356)))))+x(1.5707963705062866))+x(-1.5707963705062866))}e=x(C(x(x(g*x(10430.3818359375))+x(.5))));if(x(y(e))>2];n=q[a>>2];if((f|0)>=1){while(1){n=n>>1;i=(n<<2)+i|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}}h=(e<<1&-4)+c|0;r=q[((f<<2)+a|0)+8>>2];a:{if((n|0)<=3){Ya(r,h);break a}o=n>>2;A=(o|0)>1?o:1;f=0;s=n>>1;a=(w(s-1|0,g)<<2)+b|0;t=q[r+44>>2];g=g<<1;B=0-g<<2;while(1){v=p[t>>1]<<3;l=u[a>>2];m=u[(f<<2)+i>>2];j=u[b>>2];k=u[(f+o<<2)+i>>2];u[(v|4)+h>>2]=x(l*m)+x(j*k);u[h+v>>2]=x(m*j)-x(l*k);t=t+2|0;a=a+B|0;b=(g<<2)+b|0;f=f+1|0;if((A|0)!=(f|0)){continue}break}Ya(r,h);if((n|0)<4){break a}a=o+1>>1;a=(a|0)>1?a:1;b=(s<<2)+h|0;f=0;while(1){g=b-4|0;l=u[g>>2];b=b-8|0;m=u[b>>2];j=u[h+4>>2];k=u[(f<<2)+i>>2];y=u[h>>2];z=u[(f+o<<2)+i>>2];u[h>>2]=x(j*k)+x(y*z);u[g>>2]=x(j*z)-x(y*k);g=f^-1;j=u[(g+o<<2)+i>>2];k=u[(g+s<<2)+i>>2];u[b>>2]=x(l*j)+x(m*k);u[h+4>>2]=x(l*k)-x(m*j);h=h+8|0;f=f+1|0;if((a|0)!=(f|0)){continue}break}}a=(e|0)/2|0;if((e|0)>=2){b=e<<2;i=b+c|0;h=b+d|0;f=0;while(1){l=u[c>>2];h=h-4|0;m=u[h>>2];i=i-4|0;j=u[i>>2];k=u[d>>2];u[c>>2]=x(l*m)-x(j*k);u[i>>2]=x(j*m)+x(l*k);d=d+4|0;c=c+4|0;f=f+1|0;if((a|0)!=(f|0)){continue}break}}}function ng(a){var b=0,c=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{if(q[a>>2]==9764){if(q[a+4>>2]!=120){break r}if(q[a+8>>2]-1>>>0>=2){break q}if(q[a+12>>2]-1>>>0>=2){break p}if(q[a+16>>2]<=0){break o}b=q[a+20>>2];if(!(!b|(b|0)==17)){ja(32110,31888,124);G()}c=q[a+24>>2];if((b|0)>=(c|0)){break n}if((c|0)>=22){break m}b=q[a+36>>2];if((b|0)<=-1){break l}if(b){break k}b=q[a+48>>2];if((b|0)>=721){break j}if(b?(b|0)<=99:0){break i}b=q[a+60>>2];if((b|0)>=1024){break h}if(b?(b|0)<=14:0){break g}b=q[a+64>>2];if((b|0)>=1024){break f}if(b?(b|0)<=14:0){break e}b=q[a+76>>2];if((b|0)>=3){break d}if((b|0)<=-1){break c}a=q[a+80>>2];if((a|0)>=3){break b}if((a|0)<=-1){break a}return}ja(31816,31888,118);G()}ja(31908,31888,119);G()}ja(31945,31888,121);G()}ja(32002,31888,122);G()}ja(32073,31888,123);G()}ja(32162,31888,125);G()}ja(32200,31888,126);G()}ja(32232,31888,128);G()}ja(32264,31888,129);G()}ja(32308,31888,131);G()}ja(32368,31888,132);G()}ja(32457,31888,133);G()}ja(32510,31888,134);G()}ja(32604,31888,135);G()}ja(32661,31888,136);G()}ja(32763,31888,137);G()}ja(32808,31888,138);G()}ja(32853,31888,139);G()}ja(32902,31888,140);G()}function sg(a,b,c,d,e){var f=0,g=0,h=x(0),i=0,j=0,k=0,l=0,m=x(0),n=x(0),o=0,p=0,q=0,r=0;g=ca-16|0;i=g;ca=g;l=g-96|0;g=l;ca=g;g=d+24|0;k=l-((g<<2)+15&-16)|0;ca=k;j=g;while(1){u[(f<<2)+l>>2]=u[((f^-1)+24<<2)+b>>2];f=f+1|0;if((f|0)!=24){continue}break}f=0;while(1){u[(f<<2)+k>>2]=-u[((f^-1)+24<<2)+e>>2];f=f+1|0;if((f|0)!=24){continue}break}if((j|0)>24){la(k+96|0,0,g-24<<2)}g=0;if((d|0)>=4){r=d-3|0;while(1){j=g<<2;u[i>>2]=u[j+a>>2];o=j|4;u[i+4>>2]=u[o+a>>2];p=j|8;u[i+8>>2]=u[p+a>>2];q=j|12;u[i+12>>2]=u[q+a>>2];fd(l,j+k|0,i);f=(g+24<<2)+k|0;h=u[i>>2];u[f>>2]=-h;u[c+j>>2]=h;m=x(u[i+4>>2]-x(h*u[b>>2]));u[f+4>>2]=-m;u[c+o>>2]=m;n=x(x(u[i+8>>2]-x(m*u[b>>2]))-x(h*u[b+4>>2]));u[f+8>>2]=-n;u[c+p>>2]=n;h=x(x(x(u[i+12>>2]-x(n*u[b>>2]))-x(m*u[b+4>>2]))-x(h*u[b+8>>2]));u[f+12>>2]=-h;u[c+q>>2]=h;g=g+4|0;if((r|0)>(g|0)){continue}break}}if((d|0)>(g|0)){while(1){b=g<<2;h=u[b+a>>2];f=0;while(1){h=x(h-x(u[(f<<2)+l>>2]*u[(f+g<<2)+k>>2]));f=f+1|0;if((f|0)!=24){continue}break}u[(g+24<<2)+k>>2]=h;u[b+c>>2]=h;g=g+1|0;if((g|0)!=(d|0)){continue}break}}f=0;while(1){u[(f<<2)+e>>2]=u[((f^-1)+d<<2)+c>>2];f=f+1|0;if((f|0)!=24){continue}break}ca=i+16|0}function Yb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=ca-160|0;ca=i;m=8;g=na(a,w(c>>1,9)+7888|0,8);a:{b:{if((e&-16)<(e|0)){if((e|0)==120){break b}ja(8821,8863,59);G()}if((e|0)<16){break a}m=e>>4}h=w(g,18)+7520|0;while(1){g=f<<2;k=g+i|0;q[k>>2]=0;l=g+(i+80|0)|0;j=na(a,h,8);q[l>>2]=j;g=0;if((j|0)==17){while(1){g=g+1|0;j=na(a,((g|0)==10)+7682|0,8);q[l>>2]=j;if((j|0)==17){continue}break}q[k>>2]=g}f=f+1|0;if((m|0)!=(f|0)){continue}break}g=0;while(1){f=(g<<16>>11)+b|0;h=q[(i+80|0)+(g<<2)>>2];c:{if((h|0)>=1){Kd(f,a,h);break c}p[f>>1]=0;p[f+2>>1]=0;p[f+4>>1]=0;p[f+6>>1]=0;p[f+24>>1]=0;p[f+26>>1]=0;p[f+28>>1]=0;p[f+30>>1]=0;p[f+16>>1]=0;p[f+18>>1]=0;p[f+20>>1]=0;p[f+22>>1]=0;p[f+8>>1]=0;p[f+10>>1]=0;p[f+12>>1]=0;p[f+14>>1]=0}g=g+1|0;if((m|0)!=(g|0)){continue}break}h=0;while(1){j=h<<2;k=q[j+i>>2];if((k|0)>=1){o=(h<<16>>11)+b|0;f=0;while(1){n=(f<<1)+o|0;g=s[n>>1];l=0;while(1){g=na(a,6400,8)+(g<<1)|0;l=l+1|0;if((k|0)!=(l|0)){continue}break}p[n>>1]=g;f=f+1|0;if((f|0)!=16){continue}break}f=j+(i+80|0)|0;q[f>>2]=q[f>>2]|k<<5}h=h+1|0;if((m|0)!=(h|0)){continue}break}}Id(a,b,e,c,d,i+80|0);ca=i+160|0}function ka(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){Y(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if((c|0)<1){c=a;break b}if(!(a&3)){c=a;break b}c=a;while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if(e>>>0<=c>>>0){break b}if(c&3){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+ -64|0;if(f>>>0>>0){break c}while(1){q[c>>2]=q[b>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=q[b+16>>2];q[c+20>>2]=q[b+20>>2];q[c+24>>2]=q[b+24>>2];q[c+28>>2]=q[b+28>>2];q[c+32>>2]=q[b+32>>2];q[c+36>>2]=q[b+36>>2];q[c+40>>2]=q[b+40>>2];q[c+44>>2]=q[b+44>>2];q[c+48>>2]=q[b+48>>2];q[c+52>>2]=q[b+52>>2];q[c+56>>2]=q[b+56>>2];q[c+60>>2]=q[b+60>>2];b=b- -64|0;c=c- -64|0;if(f>>>0>=c>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){q[c>>2]=q[b>>2];b=b+4|0;c=c+4|0;if(d>>>0>c>>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e-4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){o[c|0]=r[b|0];o[c+1|0]=r[b+1|0];o[c+2|0]=r[b+2|0];o[c+3|0]=r[b+3|0];b=b+4|0;c=c+4|0;if(d>>>0>=c>>>0){continue}break}}if(c>>>0>>0){while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function Uf(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0;e=ca-1936|0;ca=e;g=a;f=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=f;f=q[g+12>>2];q[e+8>>2]=q[g+8>>2];q[e+12>>2]=f;x=g+16|0;l=p[1144];r=p[1145];m=p[1143];n=p[1142];y=e+16|0;while(1){g=(d|0)<480?d:480;yc(x,y,c,2280,g);if((g|0)>=3){h=q[e>>2];f=e;j=g;while(1){o=w(h>>16,n)+(w(h&65535,n)>>16)|0;h=q[f+4>>2];i=h>>16;k=h&65535;h=q[f+8>>2];s=(w(h&65535,r)>>16)+w(h>>16,r)|0;h=q[f+12>>2];t=h>>16;u=h&65535;o=((((o+w(i,m)|0)+(w(k,m)>>16)|0)+s|0)+w(t,l)|0)+(w(u,l)>>16)|0;v=(o>>5)+1>>1;p[b>>1]=(o|0)>2097119?32767:(v|0)>-32768?v:-32768;k=(s+((w(m,t)+(w(m,u)>>16)|0)+w(i,l)|0)|0)+(w(l,k)>>16)|0;i=q[f+16>>2];i=(k+w(i>>16,n)|0)+(w(i&65535,n)>>16)|0;k=(i>>5)+1>>1;p[b+2>>1]=(i|0)>2097119?32767:(k|0)>-32768?k:-32768;b=b+4|0;f=f+12|0;i=(j|0)>5;j=j-3|0;if(i){continue}break}}d=d-g|0;if((d|0)>=1){f=(g<<2)+e|0;j=q[f+4>>2];q[e>>2]=q[f>>2];q[e+4>>2]=j;j=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=j;c=(g<<1)+c|0;continue}break}b=(g<<2)+e|0;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=c;ca=e+1936|0}function ld(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=x(0),o=0,s=0,t=0,v=0,y=x(0),z=0,A=x(0),C=0,D=0,E=0,G=x(0),H=0,I=0,J=0,K=0,L=0,M=x(0),N=0,O=x(0),P=0,Q=0;if((g|0)<(h|0)){s=1<1?s:1;J=(e|0)>1?e:1;K=(d|0)==3;L=(d|0)==31;while(1){t=q[a+32>>2];s=g;g=s+1|0;D=s<<1;C=p[t+(g<<1)>>1]-p[t+D>>1]|0;E=C<>2]+1>>>0)/(C>>>0)>>>d|0)*x(-.125))*.6931471805599453))*x(.5));N=w(e,s);t=0;while(1){v=q[a+8>>2];o=s+w(v,t)<<2;n=u[o+k>>2];y=u[j+o>>2];O=u[i+o>>2];if((e|0)==1){o=s+v<<2;A=u[o+k>>2];n=n>A?n:A;A=u[j+o>>2];y=y>A?y:A}P=Da(+x(B(x(O-(n>y?y:n)),x(0)))*-.6931471805599453);a:{if(L){break a}H=((w(f,t)<<2)+b|0)+(p[q[a+32>>2]+D>>1]<G?G:n));y=x(-n);o=0;v=0;while(1){z=r[Q|0]>>>v&1;o=z?o:1;b:{if(z){break b}z=0;if((C|0)<1){break b}while(1){m=w(m,1664525)+1013904223|0;u[((z<>2]=m&32768?n:y;o=1;z=z+1|0;if((C|0)!=(z|0)){continue}break}}v=v+1|0;if((I|0)!=(v|0)){continue}break}if(!o){break a}nb(H,E,x(1))}t=t+1|0;if((J|0)!=(t|0)){continue}break}if((g|0)!=(h|0)){continue}break}}}function Af(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=0,p=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0;s=q[f+16>>2];m=q[f>>2];n=q[f+4>>2];p=q[f+8>>2];f=q[f+12>>2];q[c>>2]=2147483647;q[b>>2]=2147483647;o[a|0]=0;if((l|0)>=1){u=0-(f<<7)|0;v=0-(p<<7)|0;x=0-(n<<7)|0;y=0-(m<<7)|0;z=j<<16>>16;A=0-(s<<8)|0;j=0;while(1){p=o[g|0];n=o[g+1|0];m=o[g+2|0];s=o[g+3|0];f=o[g+4|0];t=w(p,q[e>>2])+((((w(n,q[e+4>>2])+y|0)+w(m,q[e+8>>2])|0)+w(s,q[e+12>>2])|0)+w(f,q[e+16>>2])<<1)|0;t=w(t>>16,p)+(w(p,t&65535)>>16)|0;p=w(n,q[e+24>>2])+(((w(m,q[e+28>>2])+x|0)+w(s,q[e+32>>2])|0)+w(f,q[e+36>>2])<<1)|0;p=(t+w(n,p>>16)|0)+(w(n,p&65535)>>16)|0;n=w(m,q[e+48>>2])+((w(s,q[e+52>>2])+v|0)+w(f,q[e+56>>2])<<1)|0;p=(p+w(m,n>>16)|0)+(w(m,n&65535)>>16)|0;m=w(f,q[e+96>>2])+A|0;n=w(s,q[e+72>>2])+(w(f,q[e+76>>2])+u<<1)|0;f=((((p+w(f,m>>16)|0)+w(s,n>>16)|0)+(w(f,m&65535)>>16)|0)+(w(s,n&65535)>>16)|0)+32801|0;a:{if((f|0)<0){break a}s=r[h+j|0];m=s-k|0;m=f+(((m|0)>0?m:0)<<11)|0;f=w((pa(m)<<16)-125829120>>16,z)+(r[i+j|0]<<2)|0;if((f|0)>q[c>>2]){break a}q[c>>2]=f;q[b>>2]=m;o[a|0]=j;q[d>>2]=s}g=g+5|0;j=j+1|0;if((l|0)!=(j|0)){continue}break}}}function Fd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=ca+ -64|0;ca=f;Wb(b+16|0,a+2736|0,a+2312|0,(c|0)==2,q[a+2324>>2]);Sb(f+32|0,a+2744|0,q[a+2732>>2]);d=b- -64|0;Ga(d,f+32|0,q[a+2340>>2]);h=b+32|0;a:{b:{if(q[a+2376>>2]==1){o[a+2767|0]=4;break b}j=o[a+2767|0];if((j|0)>3){break b}e=q[a+2340>>2];if((e|0)>=1){c=0;while(1){g=c<<1;i=p[(g+a|0)+2344>>1];p[f+g>>1]=(w(p[g+(f+32|0)>>1]-i|0,j)>>>2|0)+i;c=c+1|0;if((e|0)!=(c|0)){continue}break}}Ga(h,f,e);break a}ka(h,d,q[a+2340>>2]<<1)}c=q[a+2340>>2];ka(a+2344|0,f+32|0,c<<1);if(q[a+4160>>2]){Jb(h,c,63570);Jb(d,q[a+2340>>2],63570)}h=b;c:{if(r[a+2765|0]==2){Gd(p[a+2762>>1],o[a+2764|0],b,q[a+2316>>2],q[a+2324>>2]);g=q[a+2324>>2];if((g|0)>=1){i=q[(o[a+2768|0]<<2)+7328>>2];c=0;while(1){d=w(c,10)+b|0;e=i+w(o[(a+c|0)+2740|0],5)|0;p[d+96>>1]=o[e|0]<<7;p[d+98>>1]=o[e+1|0]<<7;p[d+100>>1]=o[e+2|0]<<7;p[d+102>>1]=o[e+3|0]<<7;p[d+104>>1]=o[e+4|0]<<7;c=c+1|0;if((g|0)!=(c|0)){continue}break}}a=p[(o[a+2769|0]<<1)+6424>>1];break c}la(la(b,0,q[a+2324>>2]<<2)+96|0,0,w(q[a+2324>>2],10));o[a+2768|0]=0;a=0}q[h+136>>2]=a;ca=f- -64|0}function Ld(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0;c=q[b+4>>2]+q[b>>2]|0;j=q[b+12>>2]+q[b+8>>2]|0;d=c+j|0;e=q[b+20>>2]+q[b+16>>2]|0;k=q[b+28>>2]+q[b+24>>2]|0;l=e+k|0;f=d+l|0;g=q[b+36>>2]+q[b+32>>2]|0;m=q[b+44>>2]+q[b+40>>2]|0;h=g+m|0;i=q[b+52>>2]+q[b+48>>2]|0;n=q[b+60>>2]+q[b+56>>2]|0;o=i+n|0;p=h+o|0;s=f+p|0;if((s|0)>=1){ma(a,f,r[s+8592|0]+8432|0,8)}if((f|0)>=1){ma(a,d,r[f+8592|0]+8272|0,8)}if((d|0)>=1){ma(a,c,r[d+8592|0]+8112|0,8)}if((c|0)>=1){ma(a,q[b>>2],r[c+8592|0]+7952|0,8)}if((j|0)>=1){ma(a,q[b+8>>2],r[j+8592|0]+7952|0,8)}if((l|0)>=1){ma(a,e,r[l+8592|0]+8112|0,8)}if((e|0)>=1){ma(a,q[b+16>>2],r[e+8592|0]+7952|0,8)}if((k|0)>=1){ma(a,q[b+24>>2],r[k+8592|0]+7952|0,8)}if((p|0)>=1){ma(a,h,r[p+8592|0]+8272|0,8)}if((h|0)>=1){ma(a,g,r[h+8592|0]+8112|0,8)}if((g|0)>=1){ma(a,q[b+32>>2],r[g+8592|0]+7952|0,8)}if((m|0)>=1){ma(a,q[b+40>>2],r[m+8592|0]+7952|0,8)}if((o|0)>=1){ma(a,i,r[o+8592|0]+8112|0,8)}if((i|0)>=1){ma(a,q[b+48>>2],r[i+8592|0]+7952|0,8)}if((n|0)>=1){ma(a,q[b+56>>2],r[n+8592|0]+7952|0,8)}}function Nc(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;j=ca-16|0;ca=j;x=(i|0)<1;v=2147483647;while(1){r=q[d>>2];a:{if(x){n=0;l=0;m=r;break a}y=o[s+7420|0];m=s<<2;z=q[m+7408>>2];A=q[m+7328>>2];B=q[m+7024>>2];t=0;l=0;n=0;u=g;k=f;while(1){Af((j+12|0)+t|0,j+8|0,j+4|0,j,k,u,A,z,B,h,Na(6229-r|0)-51|0,y);m=0;l=q[j+4>>2]+l|0;l=(l|0)>-1?l:2147483647;n=q[j+8>>2]+n|0;n=(n|0)>-1?n:2147483647;u=u+20|0;k=k+100|0;if((pa(q[j>>2]+51|0)+r|0)>=896){m=(pa(q[j>>2]+51|0)+r|0)-896|0}r=m;t=t+1|0;if((t|0)!=(i|0)){continue}break}}if((l|0)<=(v|0)){o[c|0]=s;ka(b,j+12|0,i);C=m;v=l}s=s+1|0;if((s|0)!=3){continue}break}if((i|0)>=1){c=q[(o[c|0]<<2)+7328>>2];k=0;while(1){f=w(k,10)+a|0;g=b+k|0;p[f>>1]=o[c+w(o[g|0],5)|0]<<7;p[f+2>>1]=o[(c+w(o[g|0],5)|0)+1|0]<<7;p[f+4>>1]=o[(c+w(o[g|0],5)|0)+2|0]<<7;p[f+6>>1]=o[(c+w(o[g|0],5)|0)+3|0]<<7;p[f+8>>1]=o[(c+w(o[g|0],5)|0)+4|0]<<7;k=k+1|0;if((k|0)!=(i|0)){continue}break}}q[d>>2]=C;D=e,E=w((pa(n>>((i|0)==2?1:2))<<16)-125829120>>16,-3),q[D>>2]=E;ca=j+16|0}function Ec(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=ca;l=f;e=q[a+268>>2];f=f-((e<<2)+31&-16)|0;ca=f;h=q[a+36>>2];q[f+8>>2]=q[a+32>>2];q[f+12>>2]=h;h=q[a+28>>2];q[f>>2]=q[a+24>>2];q[f+4>>2]=h;m=f+16|0;n=q[a+272>>2];while(1){h=(d|0)<(e|0)?d:e;Ic(a,m,c,h);i=0;j=h<<17;if((j|0)>=1){while(1){k=w(i&65535,12)>>>16|0;g=(k<<3)+2304|0;e=f+(i>>16<<1)|0;o=((w(p[g+2>>1],p[e+2>>1])+w(p[g>>1],p[e>>1])|0)+w(p[g+4>>1],p[e+4>>1])|0)+w(p[g+6>>1],p[e+6>>1])|0;g=(0-k<<3)+2392|0;e=(((o+w(p[g+6>>1],p[e+8>>1])|0)+w(p[g+4>>1],p[e+10>>1])|0)+w(p[g+2>>1],p[e+12>>1])|0)+w(p[g>>1],p[e+14>>1])|0;g=(e>>14)+1>>1;p[b>>1]=(e|0)>1073725439?32767:(g|0)>-32768?g:-32768;b=b+2|0;i=i+n|0;if((j|0)>(i|0)){continue}break}}d=d-h|0;if((d|0)>=1){e=f+(h<<2)|0;i=q[e+4>>2];q[f>>2]=q[e>>2];q[f+4>>2]=i;i=q[e+12>>2];q[f+8>>2]=q[e+8>>2];q[f+12>>2]=i;c=(h<<1)+c|0;e=q[a+268>>2];continue}break}b=f+(h<<2)|0;c=q[b+4>>2];q[a+24>>2]=q[b>>2];q[a+28>>2]=c;c=q[b+12>>2];q[a+32>>2]=q[b+8>>2];q[a+36>>2]=c;ca=l}function Vd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ca+ -64|0;ca=e;a:{if(qa(b,57892,0)){q[c>>2]=0;f=1;break a}if(Wd(a,b)){f=1;a=q[c>>2];if(!a){break a}q[c>>2]=q[a>>2];break a}if(!b){break a}b=xa(b,57900);if(!b){break a}d=q[c>>2];if(d){q[c>>2]=q[d>>2]}g=q[b+8>>2];d=q[a+8>>2];if(g&(d^-1)&7|(g^-1)&d&96){break a}f=1;if(qa(q[a+12>>2],q[b+12>>2],0)){break a}if(qa(q[a+12>>2],57912,0)){a=q[b+12>>2];if(!a){break a}f=!xa(a,57920);break a}f=0;d=q[a+12>>2];if(!d){break a}d=xa(d,57900);if(d){if(!(o[a+8|0]&1)){break a}f=Ud(d,q[b+12>>2]);break a}d=q[a+12>>2];if(!d){break a}d=xa(d,57932);if(d){if(!(o[a+8|0]&1)){break a}f=cc(d,q[b+12>>2]);break a}a=q[a+12>>2];if(!a){break a}d=xa(a,57672);if(!d){break a}a=q[b+12>>2];if(!a){break a}a=xa(a,57672);if(!a){break a}la(e+8|4,0,52);q[e+56>>2]=1;q[e+20>>2]=-1;q[e+16>>2]=d;q[e+8>>2]=a;ea[q[q[a>>2]+28>>2]](a,e+8|0,q[c>>2],1);a=q[e+32>>2];if(!(!q[c>>2]|(a|0)!=1)){q[c>>2]=q[e+24>>2]}f=(a|0)==1}ca=e- -64|0;return f|0}function cf(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0;j=ca-304|0;m=j;ca=j;o=c-1|0;k=(c|0)==2?-3:-2-(o<<1)|0;n=j;if(!(q[a+148>>2]|q[a+164>>2]==-1)){l=(w(q[a+160>>2],3)|0)/((w(q[a+144>>2],24)|0)/(w(c,d)|0)|0)|0;f=(f|0)>(l|0)?l:f}j=(f+k|0)/(c|0)|0;l=(j|0)<1276?j+1|0:1276;n=n-(w(l,c)+15&-16)|0;ca=n;q[m+4>>2]=0;t=q[a+136>>2];q[a+136>>2]=q[a+14224>>2];u=q[a+128>>2];q[a+128>>2]=q[a+14240>>2];v=q[a+120>>2];j=q[a+14192>>2];q[a+120>>2]=j;p=q[a+68>>2];a:{if(p){q[a+120>>2]=1;break a}q[a+14232>>2]=j}b:{if((c|0)>=1){j=0;while(1){q[a+68>>2]=0;q[a+18132>>2]=(j|0)<(o|0);if(!(!g|(j|0)!=(o|0))){q[a+136>>2]=1002}k=-3;r=w(j,l)+n|0;s=Dc(a,(w(q[a+112>>2],w(d,j))<<2)+b|0,d,r,l,h,0,0,0,0,0,i);if((s|0)<0){break b}if((Bc(m,r,s)|0)<0){break b}j=j+1|0;if((j|0)!=(c|0)){continue}break}}k=Ac(m,c,e,f,!q[a+148>>2]);if((k|0)<0){k=-3;break b}q[a+128>>2]=u;q[a+136>>2]=t;q[a+120>>2]=v;q[a+68>>2]=p}ca=m+304|0;return k}function wd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,n=0,o=0,p=0,r=x(0),s=0,t=0,v=0;s=(j|0)>1?j:1;m=(b|0)>=(c|0);a:{if(m|(h|0)<(j|0)){break a}l=b;while(1){k=l<<2;p=k+f|0;if(!(q[p>>2]>7|q[g+k>>2])){o=q[a+8>>2];k=0;while(1){n=u[(w(k,o)+l<<2)+e>>2]>2];t=w(o,k)+l<<2;v=t+d|0;r=x(x((n?x(-.5):x(.5))*x(1<<13-q[p>>2]))*x(6103515625e-14));u[v>>2]=u[v>>2]+r;n=e+t|0;u[n>>2]=u[n>>2]-r;k=k+1|0;if((s|0)!=(k|0)){continue}break}h=h-s|0}l=l+1|0;if((l|0)>=(c|0)){break a}if((h|0)>=(j|0)){continue}break}}b:{if((h|0)<(j|0)|m){break b}while(1){l=b<<2;o=l+f|0;if(!(q[o>>2]>7|q[g+l>>2]!=1)){l=q[a+8>>2];k=0;while(1){m=u[(w(k,l)+b<<2)+e>>2]>2];p=w(l,k)+b<<2;n=p+d|0;r=x(x((m?x(-.5):x(.5))*x(1<<13-q[o>>2]))*x(6103515625e-14));u[n>>2]=u[n>>2]+r;m=e+p|0;u[m>>2]=u[m>>2]-r;k=k+1|0;if((s|0)!=(k|0)){continue}break}h=h-s|0}b=b+1|0;if((c|0)<=(b|0)){break b}if((h|0)>=(j|0)){continue}break}}}function Xa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0;t=1;while(1){m=(c<<2)+a|0;h=w(c,3)+b|0;n=h;e=2147483647;c=0;a:{b:{while(1){j=c+1|0;k=p[(c<<1)+6320>>1];f=p[(j<<1)+6320>>1]-k|0;u=w(f&65535,6554)>>>16|0;v=f>>16;i=w(v,6554)+u|0;f=i+k|0;g=q[m>>2]-f|0;d=g>>31;d=d^d+g;if(d>>>0>=e>>>0){c=r[h|0];break a}o[h|0]=c;o[n+1|0]=0;l=w(i,3)+k|0;g=q[m>>2]-l|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){l=f;break a}o[h|0]=c;o[n+1|0]=1;f=w(i,5)+k|0;g=q[m>>2]-f|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){break a}o[h|0]=c;o[n+1|0]=2;l=w(i,7)+k|0;g=q[m>>2]-l|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){break b}o[h|0]=c;o[n+1|0]=3;i=q[m>>2]-(w(i,9)+k|0)|0;f=i>>31;e=f^f+i;if(d>>>0<=e>>>0){break a}l=(w(v,58986)+w(u,9)|0)+k|0;o[h|0]=c;o[n+1|0]=4;c=j;if((c|0)!=15){continue}break}c=14;break a}l=f}j=(c<<24>>24)/3|0;o[h+2|0]=j;o[h|0]=w(j,-3)+c;q[m>>2]=l;c=1;j=t;t=0;if(j){continue}break}q[a>>2]=q[a>>2]-q[a+4>>2]}function ag(a,b){var c=0,d=0,e=0,f=0;c=q[a+4576>>2];if(!c){c=q[a+32>>2]}d=c<<16;if(!d){b=q[a+4572>>2];a=q[a+4556>>2];return(((a|0)>(b|0)?b:a)|0)/1e3|0}d=w(d>>16,1e3);e=q[a+4556>>2];f=q[a+4564>>2];if(!((d|0)>=q[a+4568>>2]?!((d|0)>(e|0)|(d|0)>(f|0)):0)){b=(e|0)<(f|0)?e:f;a=q[a+4568>>2];return(((a|0)<(b|0)?b:a)|0)/1e3|0}f=q[a+24>>2];if((f|0)>=256){q[a+28>>2]=0}a:{b:{if(q[b+64>>2]?0:!q[a+4536>>2]){break b}e=q[a+4572>>2];if((e|0)<(d|0)){c:{d:{if(q[a+28>>2]){if(q[b+64>>2]){break d}if((f|0)>0){break c}break a}q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=256;if(!q[b+64>>2]){break c}}q[a+28>>2]=0;return(c|0)==16?12:8}q[a+28>>2]=-2;return c}if((d|0)<(e|0)){if(q[b+64>>2]){q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+28>>2]=1;return(c|0)==8?12:16}if(!q[a+28>>2]){break a}q[a+28>>2]=1;return c}if(q[a+28>>2]>-1){break b}q[a+28>>2]=1}return c}q[b+88>>2]=1;a=q[b+56>>2];q[b+56>>2]=a-((w(a,5)|0)/(q[b+24>>2]+5|0)|0);return c}function Pc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=d<<2;q[e+b>>2]=65536;q[c+e>>2]=65536;e=0;a:{if((d|0)<=0){break a}while(1){f=e<<2;g=(d+e<<2)+a|0;h=((e^-1)+d<<2)+a|0;q[f+b>>2]=0-(q[g>>2]+q[h>>2]|0);q[c+f>>2]=q[g>>2]-q[h>>2];e=e+1|0;if((e|0)!=(d|0)){continue}break}if((d|0)<=0){break a}e=d;while(1){a=e-1|0;f=a<<2;g=f+b|0;h=g;i=q[g>>2];g=e<<2;q[h>>2]=i-q[g+b>>2];f=c+f|0;q[f>>2]=q[f>>2]+q[c+g>>2];f=(e|0)>1;e=a;if(f){continue}break}a=2;if((d|0)<2){break a}while(1){e=d;if((e|0)>(a|0)){while(1){f=(e<<2)+b|0;g=f-8|0;q[g>>2]=q[g>>2]-q[f>>2];e=e-1|0;if((e|0)>(a|0)){continue}break}}f=2;e=(a<<2)+b|0;g=e-8|0;q[g>>2]=q[g>>2]-(q[e>>2]<<1);e=(a|0)!=(d|0);a=a+1|0;if(e){continue}break}while(1){e=d;if((f|0)<(e|0)){while(1){a=(e<<2)+c|0;b=a-8|0;q[b>>2]=q[b>>2]-q[a>>2];e=e-1|0;if((f|0)<(e|0)){continue}break}}a=(f<<2)+c|0;b=a-8|0;q[b>>2]=q[b>>2]-(q[a>>2]<<1);a=(d|0)!=(f|0);f=f+1|0;if(a){continue}break}}}function db(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;Hg(+a);b=Eg(1)|0;d=Eg(0)|0;a:{b:{c:{d:{if((b|0)>0?1:(b|0)>=0){e=b;if(b>>>0>1048575){break d}}if(!(b&2147483647|d)){return-1/(a*a)}if((b|0)>-1){break c}return(a-a)/0}if(e>>>0>2146435071){break a}b=1072693248;k=-1023;if((e|0)!=1072693248){b=e;break b}if(d){break b}return 0}Hg(+(a*0x40000000000000));b=Eg(1)|0;d=Eg(0)|0;k=-1077}b=b+614242|0;l=+((b>>>20|0)+k|0);f=l*.30102999566361177;Fg(0,d|0);Fg(1,(b&1048575)+1072079006|0);c=+Gg()+ -1;g=c*(c*.5);h=c/(c+2);i=h*h;a=i*i;Hg(+(c-g));b=Eg(1)|0;Eg(0)|0;Fg(0,0);Fg(1,b|0);j=+Gg();m=j*.4342944818781689;n=f+m;a=c-j-g+h*(g+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+i*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));a=n+(m+(f-n)+(a*.4342944818781689+(l*3.694239077158931e-13+(a+j)*2.5082946711645275e-11)))}return a}function Ef(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=ca-96|0;ca=f;a:{b:{if(!(r[a+4767|0]!=4?q[a+4632>>2]!=1:0)){e=p[a+4532>>1];e=(w(e,-5)+(w(e,59246)>>16)|0)+3146|0;g=(q[a+4580>>2]==2?e>>1:0)+e|0;if((g|0)<=0){break b}Oc(f+32|0,c,q[a+4640>>2]);c:{if(q[a+4632>>2]!=1){break c}e=o[a+4767|0];if((e|0)>3){break c}Eb(f- -64|0,d,c,e,q[a+4640>>2]);Oc(f,f- -64|0,q[a+4640>>2]);k=1;h=q[a+4640>>2];if((h|0)<1){break c}e=r[a+4767|0];l=w(e,e)<<27>>16;e=0;while(1){i=e<<1;j=i+(f+32|0)|0;p[j>>1]=(p[j>>1]>>>1)+(w(p[f+i>>1],l)>>>16);e=e+1|0;if((h|0)!=(e|0)){continue}break}}Ff(a+4744|0,c,q[a+4692>>2],f+32|0,g,q[a+4660>>2],o[a+4765|0]);e=b+32|0;Ga(e,c,q[a+4640>>2]);d:{if(k){Eb(f- -64|0,d,c,o[a+4767|0],q[a+4640>>2]);Ga(b,f- -64|0,q[a+4640>>2]);break d}a=q[a+4640>>2];if((a|0)>=17){break a}ka(b,e,a<<1)}ca=f+96|0;return}ja(37632,37735,51);G()}ja(37756,37735,63);G()}ja(37790,37735,104);G()}function Zc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=0,m=0;f=ca-304|0;i=f;ca=f;d=q[a+4576>>2];a:{if((d|0)==(b|0)){c=0;if(q[a+4560>>2]==q[a+4556>>2]){break a}}if(!d){c=cb(a+5776|0,q[a+4556>>2],w(b,1e3),1);break a}c=f;j=w(q[a+4580>>2],10)+5|0;d=w(j,d);f=w(b,j);h=c-((((d|0)>(f|0)?d:f)<<1)+15&-16)|0;l=h;ca=h;if((d|0)>=1){c=d;while(1){g=c-1|0;m=(g<<1)+h|0;k=zg(u[((g<<2)+a|0)+7180>>2]);b:{if(x(y(k))-32768?e:-32768;p[m>>1]=(e|0)<32767?e:32767;e=(c|0)>1;c=g;if(e){continue}break}}g=cb(i,w(p[a+4576>>1],1e3),q[a+4556>>2],0);e=w(j,q[a+4556>>2]/1e3|0);c=l-((e<<1)+15&-16)|0;ca=c;g=Aa(i,c,h,d)+g|0;d=a+5776|0;g=g+cb(d,q[a+4556>>2],w(b<<16>>16,1e3),1)|0;c=Aa(d,h,c,e);if((f|0)>=1){while(1){b=f-1|0;u[((b<<2)+a|0)+7180>>2]=p[(b<<1)+h>>1];d=(f|0)>1;f=b;if(d){continue}break}}c=c+g|0}q[a+4560>>2]=q[a+4556>>2];ca=i+304|0;return c}function If(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;g=ca-16|0;ca=g;a:{if(q[a+4160>>2]){Ka(a+4232|0,a+4236|0,b,c);q[a+4220>>2]=1;break a}b:{if(!q[a+4220>>2]){break b}Ka(g+8|0,g+12|0,b,c);d=q[g+12>>2];e=q[a+4236>>2];c:{if((d|0)>(e|0)){h=a+4232|0;q[h>>2]=q[h>>2]>>d-e;break c}if((d|0)>=(e|0)){break c}q[g+8>>2]=q[g+8>>2]>>e-d}i=q[g+8>>2];d=q[a+4232>>2];if((i|0)<=(d|0)){break b}f=d;d=z(d);f=f<>2]=f;h=0;e=0;d=25-d|0;d=i>>((d|0)>0?d:0);d=(f|0)/(((d|0)>1?d:1)|0)|0;if((d|0)>=1){e=z(d);i=24-e|0;d:{if(!i){break d}if(d>>>0<=127){d=d<>>56-e;break d}d=d<>>i}f=w(d&127,13959168)>>>16|0;d=(e&1?32768:46214)>>>(e>>>1)|0;e=(w(f,d)>>>16|0)+d<<4}if((c|0)<1){break b}i=(65536-e|0)/(c|0)<<2;while(1){f=(h<<1)+b|0;d=p[f>>1];p[f>>1]=w(d,e>>>16|0)+(w(d,e&65532)>>>16|0);e=e+i|0;if((e|0)>65536){break b}h=h+1|0;if((h|0)<(c|0)){continue}break}}q[a+4220>>2]=0}ca=g+16|0} + + + +function Ic(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0;if((d|0)>=1){j=q[a+20>>2];g=q[a+16>>2];e=q[a+12>>2];h=q[a+8>>2];i=q[a+4>>2];f=q[a>>2];while(1){k=m<<2;n=p[(m<<1)+c>>1]<<10;l=n-f|0;l=(w(l&65535,1746)>>>16|0)+w(l>>16,1746)|0;r=f+l|0;f=r-i|0;s=(w(f&65535,14986)>>>16|0)+w(f>>16,14986)|0;f=i+s|0;i=f-h|0;f=((w(i&65535,-26453)>>16)+w(i>>16,-26453)|0)+f|0;h=(f>>9)+1>>1;p[k+b>>1]=(f|0)>33553919?32767:(h|0)>-32768?h:-32768;h=(k|2)+b|0;o=e;e=n-e|0;k=(w(e&65535,6854)>>>16|0)+w(e>>16,6854)|0;t=o+k|0;e=t-g|0;o=(w(e&65535,25769)>>>16|0)+w(e>>16,25769)|0;e=g+o|0;g=e-j|0;e=((w(g&65535,-9994)>>16)+w(g>>16,-9994)|0)+e|0;j=(e>>9)+1>>1;p[h>>1]=(e|0)>33553919?32767:(j|0)>-32768?j:-32768;j=e+g|0;h=f+i|0;g=t+o|0;i=r+s|0;e=k+n|0;f=n+l|0;m=m+1|0;if((m|0)!=(d|0)){continue}break}q[a+20>>2]=j;q[a+16>>2]=g;q[a+12>>2]=e;q[a+8>>2]=h;q[a+4>>2]=i;q[a>>2]=f}}function Ub(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{b:{if((d|0)>0){if((c|0)<=0){break b}if((c|0)<(d|0)){break a}while(1){q[(e<<2)+b>>2]=e;e=e+1|0;if((e|0)!=(d|0)){continue}break}f=1;if((d|0)>1){while(1){j=q[(f<<2)+a>>2];e=f;c:{while(1){g=e-1|0;h=g<<2;k=q[h+a>>2];if((k|0)<=(j|0)){break c}i=e<<2;q[i+a>>2]=k;q[b+i>>2]=q[b+h>>2];h=(e|0)>1;e=g;if(h){continue}break}e=0}e=e<<2;q[e+a>>2]=j;q[b+e>>2]=f;f=f+1|0;if((f|0)!=(d|0)){continue}break}}if((c|0)>(d|0)){j=d-2|0;k=((d<<2)+a|0)-4|0;f=d;while(1){h=q[(f<<2)+a>>2];if((h|0)>2]){e=j;g=e;d:{if((d|0)<2){break d}while(1){g=e<<2;i=q[g+a>>2];if((i|0)<=(h|0)){g=e;break d}l=g+4|0;q[l+a>>2]=i;q[b+l>>2]=q[b+g>>2];g=-1;i=(e|0)>0;e=e-1|0;if(i){continue}break}}e=(g<<2)+4|0;q[e+a>>2]=h;q[b+e>>2]=f}f=f+1|0;if((f|0)!=(c|0)){continue}break}}return}ja(8884,8908,51);G()}ja(8920,8908,52);G()}ja(8944,8908,53);G()}function Da(a){var b=0,c=0,d=0,e=0,f=0,g=0;Hg(+a);e=Eg(1)|0;Eg(0)|0;b=e;e=b>>>31|0;a:{b:{c:{d:{d=a;e:{f:{b=b&2147483647;g:{if(b>>>0>=1082532651){Hg(+a);b=Eg(1)|0;b=b&2147483647;if((b|0)==2146435072&(Eg(0)|0)!=0|b>>>0>2146435072){return a}if(!(a>709.782712893384^1)){return a*8.98846567431158e+307}if(!(a<-745.1332191019411)|a<-708.3964185322641^1){break g}break b}if(b>>>0<1071001155){break d}if(b>>>0<1072734898){break f}}a=a*1.4426950408889634+v[(e<<3)+54256>>3];if(y(a)<2147483648){b=~~a;break e}b=-2147483648;break e}b=(e^1)-e|0}c=+(b|0);a=d+c*-.6931471803691238;f=c*1.9082149292705877e-10;d=a-f;break c}if(b>>>0<=1043333120){break a}b=0;d=a}c=d;g=a;c=c*c;a=d-c*(c*(c*(c*(c*4.1381367970572385e-8+ -16533902205465252e-22)+6613756321437934e-20)+ -.0027777777777015593)+.16666666666666602);c=g+(d*a/(2-a)-f)+1;if(!b){break b}c=Ja(c,b)}return c}return a+1}function uf(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0),k=0,l=0,m=0;e=ca-1696|0;ca=e;o[a+4767|0]=4;g=q[a+4640>>2];h=g+q[a+4588>>2]|0;i=Kc(e+1632|0,c,d,h,q[a+4580>>2],g);a:{if(q[a+4664>>2]|!q[a+4632>>2]|q[a+4580>>2]!=4){break a}f=3;d=Kc(e+1536|0,(h<<3)+c|0,d,h,2,q[a+4640>>2]);Mc(b,e+1536|0,q[a+4640>>2]);k=a+4500|0;l=h<<1;i=x(i-d);j=x(3.4028234663852886e+38);while(1){g=f;Eb(e+1600|0,k,b,g,q[a+4640>>2]);zf(e+1536|0,e+1600|0,q[a+4640>>2]);eb(e,e+1536|0,c,l,q[a+4640>>2]);f=q[a+4640>>2];m=ta((f<<2)+e|0,h-f|0);f=q[a+4640>>2];d=x(m+ta(((f<<2)+e|0)+(h<<2)|0,h-f|0));b:{if(!(dj){break a}}f=g-1|0;j=d;if(g){continue}break}}c:{if(r[a+4767|0]==4){Mc(b,e+1632|0,q[a+4640>>2]);if(r[a+4767|0]==4){break c}}if(q[a+4580>>2]==4?!(q[a+4664>>2]|!q[a+4632>>2]):0){break c}ja(38228,38393,103);G()}ca=e+1696|0}function ma(a,b,c,d){var e=0,f=0,g=0;f=q[a+28>>2];d=f>>>d|0;e=a;a:{if((b|0)>=1){b=b+c|0;c=b-1|0;q[a+32>>2]=(f+q[a+32>>2]|0)-w(d,r[c|0]);d=w(d,r[c|0]-r[b|0]|0);break a}d=f-w(d,r[b+c|0])|0}q[e+28>>2]=d;if(d>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){d=-1;c=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;d=0;b=q[a+36>>2]}b=b-1|0;q[c+36>>2]=b;q[a+44>>2]=q[a+44>>2]|d;if(b){continue}break}}q[a+40>>2]=f&255;d=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}d=d<<8;q[a+28>>2]=d;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(d>>>0<8388609){continue}break}}}function Fe(a,b,c){var d=0,e=0,f=0;if(!(!(1<>>0>16)){a:{b:{d=q[a+2324>>2];switch(d-2|0){case 0:case 2:break a;default:break b}}ja(6652,6630,44);G()}q[a+2332>>2]=w(b,5);d=w(d,w(b,327680)>>16);c:{d:{if(!(q[a+2320>>2]==(c|0)?q[a+2316>>2]==(b|0):0)){e=cb(a+2432|0,w(b,1e3),c,0);q[a+2320>>2]=c;if(q[a+2316>>2]!=(b|0)){break d}}f=1;if((d|0)==q[a+2328>>2]){break c}}c=q[a+2324>>2]==4;q[a+2384>>2]=(b|0)==8?c?2722:2745:c?2688:2733;if(!f){q[a+2336>>2]=w(b,20);c=(b&-5)==8;q[a+2732>>2]=c?4152:6276;q[a+2340>>2]=c?10:16;c=6448;e:{f:{switch(b-12|0){default:c=6433;if((b|0)==8){break e}ja(6739,6630,89);G();case 0:break f;case 4:break e}}c=6442}q[a+2376>>2]=1;q[a+2380>>2]=c;q[a+4164>>2]=0;o[a+2312|0]=10;q[a+2308>>2]=100;la(a+1284|0,0,1024)}q[a+2328>>2]=d;q[a+2316>>2]=b}return e}ja(6568,6630,43);G()}function Tf(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0;a:{if((c|0)>0){if((c|0)>65){break a}while(1){q[(d<<2)+b>>2]=d;d=d+1|0;if((d|0)!=(c|0)){continue}break}e=1;if((c|0)>1){while(1){g=u[(e<<2)+a>>2];d=e;b:{while(1){f=d-1|0;h=f<<2;i=u[h+a>>2];if(i>2]=i;q[b+j>>2]=q[b+h>>2];h=(d|0)>1;d=f;if(h){continue}break}d=0}d=d<<2;u[d+a>>2]=g;q[b+d>>2]=e;e=e+1|0;if((e|0)!=(c|0)){continue}break}}if((c|0)<65){h=c-2|0;j=((c<<2)+a|0)-4|0;e=c;while(1){g=u[(e<<2)+a>>2];if(!(g>u[j>>2]^1)){d=h;f=d;c:{if((c|0)<2){break c}while(1){f=d<<2;i=u[f+a>>2];if(i>2]=i;q[b+k>>2]=q[b+f>>2];f=-1;k=(d|0)>0;d=d-1|0;if(k){continue}break}}d=(f<<2)+4|0;u[d+a>>2]=g;q[b+d>>2]=e}e=e+1|0;if((e|0)!=65){continue}break}}return}ja(36513,36537,50);G()}ja(36583,36537,52);G()}function Bb(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=x(0);j=q[a+44>>2];l=q[a+4>>2];if(b){m=q[a+36>>2]}else{j=j<>2]-g|0}n=(f|0)>1?f:1;o=a- -64|0;i=w(b,j);p=l+i|0;while(1){if((b|0)>=1){r=w(i,k);s=(w(k,p)<<2)+c|0;g=0;while(1){og(o,(w(g,j)<<2)+s|0,(g+r<<2)+d|0,q[a+60>>2],l,m,b);g=g+1|0;if((g|0)!=(b|0)){continue}break}}k=k+1|0;if((n|0)!=(k|0)){continue}break}if(!((e|0)!=1|(f|0)!=2|(i|0)<1)){g=0;while(1){a=(g<<2)+d|0;u[a>>2]=x(u[a>>2]*x(.5))+x(u[(g+i<<2)+d>>2]*x(.5));g=g+1|0;if((i|0)!=(g|0)){continue}break}}if((h|0)!=1){e=(e|0)>1?e:1;b=(i|0)/(h|0)|0;f=i-b<<2;t=x(h|0);a=0;while(1){c=w(a,i);g=0;if((b|0)>=1){while(1){h=(c+g<<2)+d|0;u[h>>2]=u[h>>2]*t;g=g+1|0;if((b|0)!=(g|0)){continue}break}}la((b+c<<2)+d|0,0,f);a=a+1|0;if((e|0)!=(a|0)){continue}break}}}function Od(a,b,c){var d=0,e=0,f=0,g=0;f=q[a+28>>2];d=f>>>15|0;e=a;a:{if(b){q[a+32>>2]=q[a+32>>2]+(f+w(d,b-32768|0)|0);c=w(d,c-b|0);break a}c=f+w(d,c-32768|0)|0}q[e+28>>2]=c;if(c>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;d=q[a+40>>2];if((d|0)>=0){b=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=c+d;e=0}else{e=-1}q[b+44>>2]=e|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){c=-1;e=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=g;c=0;b=q[a+36>>2]}b=b-1|0;q[e+36>>2]=b;q[a+44>>2]=q[a+44>>2]|c;if(b){continue}break}}q[a+40>>2]=f&255;c=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}c=c<<8;q[a+28>>2]=c;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(c>>>0<8388609){continue}break}}}function $a(a,b,c,d){var e=0,f=0,g=0;g=q[a+28>>2];f=(g>>>0)/(d>>>0)|0;e=a;a:{if(b){q[a+32>>2]=q[a+32>>2]+(g+w(f,b-d|0)|0);d=w(f,c-b|0);break a}d=g+w(f,c-d|0)|0}q[e+28>>2]=d;if(d>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){d=-1;c=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;d=0;b=q[a+36>>2]}b=b-1|0;q[c+36>>2]=b;q[a+44>>2]=q[a+44>>2]|d;if(b){continue}break}}q[a+40>>2]=f&255;d=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}d=d<<8;q[a+28>>2]=d;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(d>>>0<8388609){continue}break}}}function Ea(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=b<<4;d=q[(c<<2)+a>>2];if((c|0)!=8){if((c|0)>=1){f=b<<20>>16;e=(e>>15)+1>>1;while(1){b=c-1|0;d=q[(b<<2)+a>>2]+((w(d>>16,f)+w(d,e)|0)+(w(d&65535,f)>>16)|0)|0;g=(c|0)>1;c=b;if(g){continue}break}}return d}b=b<<20>>16;c=(e>>15)+1>>1;d=q[a+28>>2]+((w(b,d>>16)+w(c,d)|0)+(w(b,d&65535)>>16)|0)|0;e=q[a>>2];f=q[a+4>>2];g=q[a+8>>2];h=q[a+12>>2];i=q[a+16>>2];j=q[a+20>>2];a=((q[a+24>>2]+w(c,d)|0)+w(b,d>>16)|0)+(w(b,d&65535)>>16)|0;a=((j+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((i+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((h+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((g+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((f+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;return((e+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0}function Xb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;if((e|0)>=1){while(1){l=(j<<2)+b|0;pa(q[l>>2]);h=a+j|0;g=w((pa(q[l>>2])<<16)-136970240>>16,2251);f=g>>>16|0;o[h|0]=f;if(o[c|0]>g<<8>>24){f=f+1|0;o[h|0]=f}f=f<<24>>24>0?f:0;g=f<<24>>24<63?f:63;o[h|0]=g;f=o[c|0];a:{if(!(d|j)){m=h;h=f-4|0;g=g&255;f=(f|0)>67?63:(g|0)<(h|0)?h:g;o[m|0]=f;o[c|0]=f;break a}f=g-f|0;o[h|0]=f;i=f<<24>>24;k=o[c|0];g=k+8|0;if((i|0)>(g|0)){f=g+((i-k|0)+505>>>1|0)|0;o[h|0]=f}f=f<<24>>24>-4?f:-4;i=f<<24>>24<36?f:36;o[h|0]=i;m=c;k=i<<24>>24;b:{if((k|0)>(g|0)){g=r[c|0]+((k<<1)-g|0)|0;f=g<<24>>24<63?g:63;break b}f=i+r[c|0]|0}o[m|0]=f;o[h|0]=r[h|0]+4;f=r[c|0]}f=f<<24>>24;f=(w(f,7281)>>16)+w(f,29)|0;n=l,p=Na(((f|0)<1877?f:1877)+2090|0),q[n>>2]=p;j=j+1|0;if((j|0)!=(e|0)){continue}break}}}function Rb(a,b,c,d,e,f){var g=0,h=0,i=0;g=ca-144|0;ca=g;h=q[a+2328>>2];q[g+136>>2]=0;a:{b:{if(h-1>>>0<320){c:{d:{e:{switch(e|0){case 2:if(q[((q[a+2388>>2]<<2)+a|0)+2420>>2]!=1){break d}break;case 0:break e;default:break d}}i=g-((h+15&2147483632)<<1)|0;ca=i;ac(a,b,q[a+2388>>2],e,f);e=b;b=a+2765|0;Yb(e,i,o[b|0],o[a+2766|0],q[a+2328>>2]);Fd(a,g,f);Ed(a,g,c,i);Wc(a,g,c,0);q[a+4160>>2]=0;b=o[b|0];q[a+4164>>2]=b;if(b>>>0>=3){break b}q[a+2376>>2]=0;break c}o[a+2765|0]=q[a+4164>>2];Wc(a,g,c,1)}e=q[a+2336>>2];b=q[a+2328>>2];if((e|0)<(b|0)){break a}f=a+1348|0;i=f+(b<<1)|0;b=e-b<<1;ka(ra(f,i,b)+b|0,c,q[a+2328>>2]<<1);rg(a,g,c,h);If(a,c,h);q[a+2308>>2]=q[((q[a+2324>>2]<<2)+g|0)-4>>2];q[d>>2]=h;ca=g+144|0;return 0}ja(9416,9465,58);G()}ja(9485,9465,94);G()}ja(9560,9465,107);G()}function xf(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=x(0),o=0;j=ca-528|0;ca=j;l=w(i,25);if((l|0)>0){while(1){m=k<<2;o=m+(j+80|0)|0;n=zg(x(u[f+m>>2]*x(131072)));a:{if(x(y(n))>2]=m;k=k+1|0;if((l|0)!=(k|0)){continue}break}}b:{if((i|0)>=1){f=w(i,5);f=(f|0)>1?f:1;k=0;while(1){l=k<<2;m=l+j|0;n=zg(x(u[g+l>>2]*x(131072)));c:{if(x(y(n))>2]=l;k=k+1|0;if((f|0)!=(k|0)){continue}break}Nc(j+480|0,b,c,d,j+524|0,j+80|0,j,h,i);if((i|0)<1){break b}b=w(i,5);b=(b|0)>1?b:1;k=0;while(1){u[(k<<2)+a>>2]=x(p[(j+480|0)+(k<<1)>>1])*x(6103515625e-14);k=k+1|0;if((b|0)!=(k|0)){continue}break}break b}Nc(j+480|0,b,c,d,j+524|0,j+80|0,j,h,i)}u[e>>2]=x(q[j+524>>2])*x(.0078125);ca=j+528|0}function Pb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=(i|0)>1?i:1;l=(b|0)>=(c|0);a:{if(l|(g|0)<(i|0)){break a}k=b;while(1){j=k<<2;m=j+e|0;if(!(q[m>>2]>7|q[f+j>>2])){j=0;while(1){p=za(h,1);o=(w(q[a+8>>2],j)+k<<2)+d|0;u[o>>2]=u[o>>2]+x(x(x(x(p|0)+x(-.5))*x(1<<13-q[m>>2]))*x(6103515625e-14));j=j+1|0;if((n|0)!=(j|0)){continue}break}g=g-n|0}k=k+1|0;if((k|0)>=(c|0)){break a}if((g|0)>=(i|0)){continue}break}}b:{if((g|0)<(i|0)|l){break b}while(1){k=b<<2;l=k+e|0;c:{if(q[l>>2]>7){break c}j=0;if(q[f+k>>2]!=1){break c}while(1){k=za(h,1);m=(w(q[a+8>>2],j)+b<<2)+d|0;u[m>>2]=u[m>>2]+x(x(x(x(k|0)+x(-.5))*x(1<<13-q[l>>2]))*x(6103515625e-14));j=j+1|0;if((n|0)!=(j|0)){continue}break}g=g-n|0}b=b+1|0;if((c|0)<=(b|0)){break b}if((g|0)>=(i|0)){continue}break}}}function fd(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0);i=b+12|0;j=u[b+8>>2];k=u[b+4>>2];l=u[b>>2];e=u[c+12>>2];f=u[c+8>>2];g=u[c+4>>2];h=u[c>>2];b=0;while(1){d=u[a>>2];m=u[i>>2];e=x(x(d*m)+e);u[c+12>>2]=e;f=x(x(j*d)+f);u[c+8>>2]=f;g=x(x(k*d)+g);u[c+4>>2]=g;h=x(x(l*d)+h);u[c>>2]=h;d=u[a+4>>2];l=u[i+4>>2];e=x(e+x(d*l));u[c+12>>2]=e;f=x(f+x(m*d));u[c+8>>2]=f;g=x(g+x(j*d));u[c+4>>2]=g;h=x(h+x(k*d));u[c>>2]=h;d=u[a+8>>2];k=u[i+8>>2];e=x(e+x(d*k));u[c+12>>2]=e;f=x(f+x(l*d));u[c+8>>2]=f;g=x(g+x(m*d));u[c+4>>2]=g;h=x(h+x(j*d));u[c>>2]=h;d=u[a+12>>2];j=u[i+12>>2];e=x(e+x(d*j));u[c+12>>2]=e;f=x(f+x(k*d));u[c+8>>2]=f;g=x(g+x(l*d));u[c+4>>2]=g;h=x(h+x(m*d));u[c>>2]=h;i=i+16|0;a=a+16|0;b=b+4|0;if((b|0)<21){continue}break}}function nf(a,b,c,d,e,f,g,h){var i=x(0),j=x(0),k=0,l=x(0),m=x(0);j=u[g>>2];l=u[f>>2];a:{if(!((e|0)!=1|h|u[f+4>>2]!=x(0))){if((c|0)<1){break a}f=0;while(1){i=x(u[(w(d,f)<<2)+a>>2]*x(32768));u[(f<<2)+b>>2]=i-j;j=x(l*i);f=f+1|0;if((f|0)!=(c|0)){continue}break}break a}k=(c|0)/(e|0)|0;if((e|0)!=1){la(b,0,c<<2)}b:{if((k|0)<1){break b}f=0;while(1){u[(w(e,f)<<2)+b>>2]=u[(w(d,f)<<2)+a>>2]*x(32768);f=f+1|0;if((k|0)!=(f|0)){continue}break}if(!h|(k|0)<1){break b}f=0;while(1){d=(w(e,f)<<2)+b|0;i=u[d>>2];a=i>x(65536);h=d;d=(a?x(65536):i)>2]=a?m:d?m:i;f=f+1|0;if((k|0)!=(f|0)){continue}break}}if((c|0)<1){break a}f=0;while(1){a=(f<<2)+b|0;i=u[a>>2];u[a>>2]=i-j;j=x(l*i);f=f+1|0;if((f|0)!=(c|0)){continue}break}}u[g>>2]=j}function vd(a,b,c,d,e,f,g,h){var i=0,j=0,k=x(0),l=x(0),m=0,n=x(0),o=x(0),p=0,s=0,t=0,v=0;j=ca-16|0;ca=j;q[j+8>>2]=0;q[j+12>>2]=0;if(e){l=x(.149993896484375)}else{i=h<<2;o=u[i+25216>>2];l=u[i+25232>>2]}if((b|0)<(c|0)){p=(g|0)>1?g:1;s=(q[f+4>>2]<<3)+32|0;h=(w(h,84)+w(e,42)|0)+24880|0;while(1){e=((b|0)<20?b:20)<<1;t=e+h|0;v=h+(e|1)|0;e=0;while(1){i=(s-q[f+20>>2]|0)-z(q[f+28>>2])|0;a:{if((i|0)>=15){g=zd(f,r[t|0]<<7,r[v|0]<<6);break a}if((i|0)>=2){g=na(f,25248,2);g=g>>1^0-(g&1);break a}g=-1;if((i|0)!=1){break a}g=0-sa(f,1)|0}i=(w(q[a+8>>2],e)+b<<2)+d|0;m=(j+8|0)+(e<<2)|0;n=u[m>>2];k=x(g|0);u[i>>2]=x(n+x(o*x(B(u[i>>2],x(-9)))))+k;u[m>>2]=x(n+k)-x(l*k);e=e+1|0;if((p|0)!=(e|0)){continue}break}b=b+1|0;if((c|0)!=(b|0)){continue}break}}ca=j+16|0}function Ua(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;Hg(+a);b=Eg(1)|0;e=Eg(0)|0;a:{b:{c:{d:{if((b|0)>0?1:(b|0)>=0){f=b;if(b>>>0>1048575){break d}}if(!(b&2147483647|e)){return-1/(a*a)}if((b|0)>-1){break c}return(a-a)/0}if(f>>>0>2146435071){break a}b=1072693248;g=-1023;if((f|0)!=1072693248){b=f;break b}if(e){break b}return 0}Hg(+(a*0x40000000000000));b=Eg(1)|0;e=Eg(0)|0;g=-1077}b=b+614242|0;d=+((b>>>20|0)+g|0);Fg(0,e|0);Fg(1,(b&1048575)+1072079006|0);a=+Gg()+ -1;c=a/(a+2);h=d*.6931471803691238;i=a;j=d*1.9082149292705877e-10;k=c;d=a*(a*.5);c=c*c;a=c*c;a=h+(i+(j+k*(d+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+c*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-d))}return a}function va(a,b,c){var d=0,e=0,f=0,g=0;d=q[a+28>>2];c=d>>>c|0;d=d-c|0;a:{if(!b){c=d;break a}q[a+32>>2]=d+q[a+32>>2]}q[a+28>>2]=c;if(c>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){c=-1;d=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;c=0;b=q[a+36>>2]}b=b-1|0;q[d+36>>2]=b;q[a+44>>2]=q[a+44>>2]|c;if(b){continue}break}}q[a+40>>2]=f&255;c=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}c=c<<8;q[a+28>>2]=c;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(c>>>0<8388609){continue}break}}}function ra(a,b,c){var d=0;a:{if((a|0)==(b|0)){break a}if((b-a|0)-c>>>0<=0-(c<<1)>>>0){return ka(a,b,c)}d=(a^b)&3;b:{c:{if(a>>>0>>0){if(d){d=a;break b}if(!(a&3)){d=a;break c}d=a;while(1){if(!c){break a}o[d|0]=r[b|0];b=b+1|0;c=c-1|0;d=d+1|0;if(d&3){continue}break}break c}d:{if(d){break d}if(a+c&3){while(1){if(!c){break a}c=c-1|0;d=c+a|0;o[d|0]=r[b+c|0];if(d&3){continue}break}}if(c>>>0<=3){break d}while(1){c=c-4|0;q[c+a>>2]=q[b+c>>2];if(c>>>0>3){continue}break}}if(!c){break a}while(1){c=c-1|0;o[c+a|0]=r[b+c|0];if(c){continue}break}break a}if(c>>>0<=3){break b}while(1){q[d>>2]=q[b>>2];b=b+4|0;d=d+4|0;c=c-4|0;if(c>>>0>3){continue}break}}if(!c){break a}while(1){o[d|0]=r[b|0];d=d+1|0;b=b+1|0;c=c-1|0;if(c){continue}break}}return a}function fe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ca-32|0;ca=d;g=q[a+28>>2];q[d+16>>2]=g;h=q[a+20>>2];q[d+28>>2]=c;q[d+24>>2]=b;b=h-g|0;q[d+20>>2]=b;g=b+c|0;h=2;b=d+16|0;a:{while(1){b:{c:{f=Z(q[a+60>>2],b|0,h|0,d+12|0)|0;e=0;d:{if(!f){break d}q[14656]=f;e=-1}e:{if(!e){e=q[d+12>>2];if((e|0)==(g|0)){break e}if((e|0)>-1){break c}break b}if((g|0)!=-1){break b}}b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];a=c;break a}i=q[b+4>>2];f=i>>>0>>0;j=(f<<3)+b|0;i=e-(f?i:0)|0;q[j>>2]=i+q[j>>2];j=(f?12:4)+b|0;q[j>>2]=q[j>>2]-i;b=f?b+8|0:b;g=g-e|0;h=h-f|0;continue}break}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a>>2]=q[a>>2]|32;a=0;if((h|0)==2){break a}a=c-q[b+4>>2]|0}ca=d+32|0;return a|0}function Cd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=(c|0)<1;a:{b:{while(1){d=0;e=0;if(!j){while(1){g=q[(d<<2)+b>>2];f=g>>31;g=f^f+g;f=(g|0)>(e|0);e=f?g:e;i=f?d:i;d=d+1|0;if((d|0)!=(c|0)){continue}break}}d=(e>>4)+1>>1;if((d|0)>=32768){d=(d|0)<163838?d:163838;sb(b,c,65470-(((d<<14)-536854528|0)/(w(d,i+1|0)>>2)|0)|0);h=h+1|0;if((h|0)!=10){continue}break b}break}if((h|0)==10){break b}d=0;if((c|0)<=0){break a}while(1){p[(d<<1)+a>>1]=(q[(d<<2)+b>>2]>>4)+1>>1;d=d+1|0;if((d|0)!=(c|0)){continue}break}break a}if((c|0)<1){break a}d=0;while(1){g=(d<<1)+a|0;h=(d<<2)+b|0;f=q[h>>2]>>4;e=32767;c:{if((f|0)>65534){break c}e=-32768;if((f|0)<-65537){break c}e=f+1>>1}p[g>>1]=e;q[h>>2]=e<<5;d=d+1|0;if((d|0)!=(c|0)){continue}break}}}function tg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=0,m=0;e=ca-16|0;f=e;ca=e;if((a|0)!=(c|0)){g=e-96|0;ca=g;e=0;while(1){u[(e<<2)+g>>2]=u[((e^-1)+24<<2)+b>>2];e=e+1|0;if((e|0)!=24){continue}break}b=0;if((d|0)>=4){h=d-3|0;while(1){e=b<<2;i=e+a|0;u[f>>2]=u[i>>2];k=e|4;u[f+4>>2]=u[k+a>>2];l=e|8;u[f+8>>2]=u[l+a>>2];m=e|12;u[f+12>>2]=u[m+a>>2];fd(g,i-96|0,f);u[c+e>>2]=u[f>>2];u[c+k>>2]=u[f+4>>2];u[c+l>>2]=u[f+8>>2];u[c+m>>2]=u[f+12>>2];b=b+4|0;if((h|0)>(b|0)){continue}break}}if((b|0)<(d|0)){while(1){h=b<<2;j=u[h+a>>2];i=b-24|0;e=0;while(1){j=x(j+x(u[(e<<2)+g>>2]*u[(e+i<<2)+a>>2]));e=e+1|0;if((e|0)!=24){continue}break}u[c+h>>2]=j;b=b+1|0;if((d|0)!=(b|0)){continue}break}}ca=f+16|0;return}ja(31388,31413,102);G()}function gg(a,b,c,d){var e=0,f=0,g=x(0),h=0,i=0,j=0;f=5760;i=ca;j=i;a:{b:{if(!(!b|(c|0)<1)){h=q[a+12>>2];e=1;c:{d:{switch((r[b|0]&3)-1|0){case 0:case 1:e=2;break c;case 2:break d;default:break c}}f=-4;if((c|0)<2){break b}e=r[b+1|0]&63}f=-4;e=w(Ib(b,h),e);if((e|0)<1|(w(e,25)|0)>(w(h,3)|0)){break b}f=(e|0)>5760?5760:e}e=q[a+8>>2];if(e-1>>>0>=2){break a}h=i-((w(e,f)<<2)+15&-16)|0;ca=h;e=0;f=hg(a,b,c,h,f);e:{if((f|0)<1){break e}b=w(q[a+8>>2],f);if((b|0)<1){break e}while(1){c=(e<<1)+d|0;g=x(u[h+(e<<2)>>2]*x(32768));g=g>x(-32768)?g:x(-32768);g=zg(g>1]=a;e=e+1|0;if((b|0)!=(e|0)){continue}break}}}ca=j;return f}ja(33150,33038,810);G()}function Pf(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=ca-416|0;ca=f;la(f+208|0,0,200);f=la(f,0,200);if(!(e&1)){if((d|0)>=1){g=e<<3;l=g+f|0;s=g+(f+208|0)|0;m=+c;t=(e|0)<1;while(1){j=+u[(k<<2)+b>>2];g=0;if(!t){while(1){h=g<<3;n=h|8;o=n+(f+208|0)|0;p=v[o>>3];v[h+(f+208|0)>>3]=j;h=f+h|0;q=v[f+208>>3];v[h>>3]=v[h>>3]+j*q;g=g+2|0;r=v[(f+208|0)+(g<<3)>>3];i=i+(p-j)*m;v[o>>3]=i;h=f+n|0;v[h>>3]=q*i+v[h>>3];j=p+(r-i)*m;i=r;if((e|0)>(g|0)){continue}break}}v[s>>3]=j;i=v[f+208>>3];v[l>>3]=v[l>>3]+j*i;k=k+1|0;if((k|0)!=(d|0)){continue}break}}g=0;if((e|0)>=0){while(1){u[(g<<2)+a>>2]=v[f+(g<<3)>>3];b=(e|0)!=(g|0);g=g+1|0;if(b){continue}break}}ca=f+416|0;return}ja(37257,37294,49);G()}function la(a,b,c){var d=0,e=0,f=0,g=0;a:{if(!c){break a}d=a+c|0;o[d-1|0]=b;o[a|0]=b;if(c>>>0<3){break a}o[d-2|0]=b;o[a+1|0]=b;o[d-3|0]=b;o[a+2|0]=b;if(c>>>0<7){break a}o[d-4|0]=b;o[a+3|0]=b;if(c>>>0<9){break a}d=0-a&3;e=d+a|0;b=w(b&255,16843009);q[e>>2]=b;c=c-d&-4;d=c+e|0;q[d-4>>2]=b;if(c>>>0<9){break a}q[e+8>>2]=b;q[e+4>>2]=b;q[d-8>>2]=b;q[d-12>>2]=b;if(c>>>0<25){break a}q[e+24>>2]=b;q[e+20>>2]=b;q[e+16>>2]=b;q[e+12>>2]=b;q[d-16>>2]=b;q[d-20>>2]=b;q[d-24>>2]=b;q[d-28>>2]=b;g=e&4|24;c=c-g|0;if(c>>>0<32){break a}d=b;f=b;b=e+g|0;while(1){q[b+24>>2]=f;q[b+28>>2]=d;q[b+16>>2]=f;q[b+20>>2]=d;q[b+8>>2]=f;q[b+12>>2]=d;q[b>>2]=f;q[b+4>>2]=d;b=b+32|0;c=c-32|0;if(c>>>0>31){continue}break}}return a}function _f(a){var b=0,c=0,d=0,e=0,f=0,g=0;if(r[a+4541|0]==2){b=pa((w(q[a+4576>>2],65536e3)|0)/q[a+4544>>2]|0);c=q[a+4696>>2];d=pa(3932160);e=pa(3932160);f=q[a+8>>2];g=c<<16>>16;c=0-(c<<2)|0;c=(w(g,c&65532)>>16)+w(c>>16,g)|0;b=(((b-(f>>8)|0)+w(c>>16,b-d<<16>>16)|0)+(w(c&65535,b-e<<16>>16)>>16)|0)-2048|0;b=(b|0)<0?w(b,3):b;b=(b|0)>-51?b:-51;b=w(p[a+4532>>1],(b|0)<51?b:51);q[a+8>>2]=w(b>>16,6554)+f+(w(b&65535,6554)>>>16);d=pa(60);e=pa(100);c=q[a+8>>2];b=a;a:{b:{if(d<<8>e<<8){if((c|0)>pa(60)<<8){a=pa(60)<<8;break a}if(q[a+8>>2]>=pa(100)<<8){break b}a=pa(100)<<8;break a}if((c|0)>pa(100)<<8){a=pa(100)<<8;break a}if(q[a+8>>2]>=pa(60)<<8){break b}a=pa(60)<<8;break a}a=q[a+8>>2]}q[b+8>>2]=a}}function bf(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=ca;k=h;i=-1;e=q[a+144>>2];j=(e|0)/400|0;a:{if((j|0)>(c|0)){break a}f=c;g=q[a+156>>2];if((g|0)!=5e3){f=g-5001|0;if(f>>>0>8){break a}f=(g|0)<=5005?j<(c|0)){break a}}if((f|0)<1){break a}g=w(f,50);if(!((g|0)==(w(e,6)|0)|((e|0)==(w(f,400)|0)|(e|0)==(w(f,200)|0)|(e|0)==(w(f,100)|0)|(e|0)==(g|0)|(e|0)==(w(f,25)|0)|(g|0)==(w(e,3)|0)|(g|0)==e<<2|(g|0)==(w(e,5)|0)))){break a}g=h-((w(q[a+112>>2],f)<<2)+15&-16)|0;ca=g;i=q[a+112>>2];h=w(i,f);if((h|0)>=1){e=0;while(1){u[g+(e<<2)>>2]=x(p[(e<<1)+b>>1])*x(30517578125e-15);e=e+1|0;if((h|0)!=(e|0)){continue}break}}i=Dc(a,g,f,d,3828,16,b,c,-2,i,1,0)}ca=k;return i}function ib(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a:{b:{if((e|0)>5){if(e&1){break b}if((d|0)<(e|0)){break a}if((d|0)>(e|0)){m=(e|0)<7;h=e;while(1){l=h<<1;f=l+b|0;i=f-2|0;j=((((w(p[c+2>>1],p[f-4>>1])+w(p[c>>1],p[i>>1])|0)+w(p[c+4>>1],p[f-6>>1])|0)+w(p[c+6>>1],p[f-8>>1])|0)+w(p[c+8>>1],p[f-10>>1])|0)+w(p[c+10>>1],p[f-12>>1])|0;g=6;if(!m){while(1){k=g<<1;j=(j+w(p[k+c>>1],p[i-k>>1])|0)+w(p[(k|2)+c>>1],p[((g^-1)<<1)+i>>1])|0;g=g+2|0;if((g|0)<(e|0)){continue}break}}f=((p[f>>1]<<12)-j>>11)+1>>1;f=(f|0)>-32768?f:-32768;p[a+l>>1]=(f|0)<32767?f:32767;h=h+1|0;if((h|0)!=(d|0)){continue}break}}la(a,0,e<<1);return}ja(1799,1824,67);G()}ja(1851,1824,68);G()}ja(1882,1824,69);G()}function oc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;q[a+24>>2]=0;q[a+28>>2]=128;q[a+16>>2]=0;q[a+20>>2]=9;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=c;q[a>>2]=b;if(c){q[a+24>>2]=1;e=r[b|0];f=1}q[a+44>>2]=0;q[a+40>>2]=e;q[a+28>>2]=32768;q[a+20>>2]=17;g=e>>>1^127;q[a+32>>2]=g;a:{if(c>>>0<=f>>>0){d=f;break a}d=f+1|0;q[a+24>>2]=d;h=r[b+f|0]}q[a+40>>2]=h;q[a+28>>2]=8388608;q[a+20>>2]=25;g=((e<<8|h)>>>1&255|g<<8)^255;q[a+32>>2]=g;f=0;i=a;b:{if(c>>>0<=d>>>0){e=d;d=0;break b}e=d+1|0;q[a+24>>2]=e;d=r[b+d|0]}q[i+40>>2]=d;q[a+28>>2]=-2147483648;q[a+20>>2]=33;g=((d|h<<8)>>>1&255|g<<8)^255;q[a+32>>2]=g;if(c>>>0>e>>>0){q[a+24>>2]=e+1;f=r[b+e|0]}q[a+40>>2]=f;q[a+32>>2]=((d<<8|f)>>>1&255|g<<8)^255}function Xf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0;if((f|0)>=1){h=0-q[c+4>>2]|0;l=h&16383;c=0-q[c>>2]|0;m=c&16383;n=h<<2>>16;o=c<<2>>16;c=q[d+4>>2];i=q[d>>2];while(1){j=c;r=k<<1;c=p[r+a>>1];h=q[b>>2];h=(w(c,h>>16)+i|0)+(w(c,h&65535)>>16)<<2;i=h>>16;g=h&65532;s=((j+w(i,o)|0)+(w(g,o)>>16)|0)+((w(i,m)+(w(g,m)>>>16|0)>>13)+1>>1)|0;q[d>>2]=s;j=q[b+4>>2];g=(w(i,n)+(w(g,n)>>16)|0)+((w(i,l)+(w(g,l)>>>16|0)>>13)+1>>1)|0;q[d+4>>2]=g;i=(w(c,j>>16)+(w(c,j&65535)>>16)|0)+s|0;q[d>>2]=i;j=g;g=q[b+8>>2];c=j+((w(c,g&65535)>>16)+w(c,g>>16)|0)|0;q[d+4>>2]=c;g=h+16383>>14;p[e+r>>1]=(h|0)>536854528?32767:(g|0)>-32768?g:-32768;k=k+1|0;if((k|0)!=(f|0)){continue}break}}}function fc(a,b,c){a:{if(b>>>0>20){break a}b:{switch(b-9|0){case 0:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];return;case 1:b=q[c>>2];q[c>>2]=b+4;b=q[b>>2];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 2:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];q[a+4>>2]=0;return;case 3:b=q[c>>2]+7&-8;q[c>>2]=b+8;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;return;case 4:b=q[c>>2];q[c>>2]=b+4;b=p[b>>1];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 5:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=s[b>>1];q[a+4>>2]=0;return;case 6:b=q[c>>2];q[c>>2]=b+4;b=o[b|0];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 7:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=r[b|0];q[a+4>>2]=0;return;case 8:break b;default:break a}}b=q[c>>2]+7&-8;q[c>>2]=b+8;v[a>>3]=v[b>>3]}}function Qf(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=ca;n=k;k=k-((g<<2)+15&-16)|0;ca=k;a:{if((g|0)<=0){l=k+(g<<1)|0;break a}m=w(h-2|0,g);i=q[f>>2];l=i<<16>>16;o=(i>>15)+1>>1;while(1){i=q[(j+m<<2)+e>>2];i=((w(l,i&65535)>>16)+w(l,i>>16)|0)+w(i,o)|0;p[k+(j<<1)>>1]=(i|0)>8388607?32767:(i|0)<-8388608?-32768:i>>>8|0;j=j+1|0;if((j|0)!=(g|0)){continue}break}l=k+(g<<1)|0;if((g|0)<1){break a}i=w(h-1|0,g);h=q[f+4>>2];f=h<<16>>16;m=(h>>15)+1>>1;j=0;while(1){h=q[(i+j<<2)+e>>2];h=((w(f,h&65535)>>16)+w(f,h>>16)|0)+w(h,m)|0;p[(j<<1)+l>>1]=(h|0)>8388607?32767:(h|0)<-8388608?-32768:h>>>8|0;j=j+1|0;if((j|0)!=(g|0)){continue}break}}Ka(a,b,k,g);Ka(c,d,l,g);ca=n}function Tc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ca-400|0;ca=e;if(c>>>0<=24){while(1){f=(d<<4)+e|0;g=+u[(d<<2)+b>>2];v[f>>3]=g;v[f+8>>3]=g;f=(c|0)!=(d|0);d=d+1|0;if(f){continue}break}if(c){b=0;g=v[e+8>>3];f=c;while(1){d=b;b=d+1|0;h=(b<<4)+e|0;i=-v[h>>3]/(g>9.999999717180685e-10?g:9.999999717180685e-10);u[(d<<2)+a>>2]=i;a:{if((c|0)<=(d|0)){break a}j=v[h>>3];v[h>>3]=j+i*g;g=g+i*j;d=1;if((f|0)==1){break a}while(1){h=(b+d<<4)+e|0;j=v[h>>3];l=h;h=(d<<4)+e|0;k=v[h+8>>3];v[l>>3]=j+i*k;v[h+8>>3]=k+i*j;d=d+1|0;if((f|0)!=(d|0)){continue}break}}f=f-1|0;if((b|0)!=(c|0)){continue}break}v[e+8>>3]=g}ca=e+400|0;return x(v[e+8>>3])}ja(36339,36399,44);G()}function Oc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{if((c|0)>0){f=1;if(c&1){break a}e=p[b>>1];d=p[b+2>>1]-e|0;d=131072/(((d|0)>1?d:1)>>>0)|0;e=d+(131072/(((e|0)>1?e:1)>>>0)|0)|0;p[a>>1]=e>>>0<32767?e:32767;e=c-1|0;if((c|0)>=3){while(1){j=d;c=f<<1;g=c+2|0;h=g+b|0;d=p[h>>1]-p[b+c>>1]|0;i=131072/(((d|0)>1?d:1)>>>0)|0;d=j+i|0;p[a+c>>1]=d>>>0<32767?d:32767;f=f+2|0;c=p[(f<<1)+b>>1]-p[h>>1]|0;d=131072/(((c|0)>1?c:1)>>>0)|0;c=i+d|0;p[a+g>>1]=c>>>0<32767?c:32767;if((e|0)>(f|0)){continue}break}}c=e<<1;b=32768-p[c+b>>1]|0;b=(131072/(((b|0)>1?b:1)>>>0)|0)+d|0;p[a+c>>1]=b>>>0<32767?b:32767;return}ja(37334,37358,51);G()}ja(37388,37358,52);G()}function Cc(a,b,c,d,e,f,g,h,i){var j=x(0),k=0,l=0;l=48e3/(i|0)|0;i=(e|0)/(l|0)|0;a:{if((g|0)!=1){e=0;if((i|0)<=0){break a}while(1){k=e<<3;j=u[(w(e,l)<<2)+h>>2];j=x(j*j);j=x(x(j*d)+x(x(x(1)-j)*c));u[k+b>>2]=u[a+k>>2]*j;k=k|4;u[k+b>>2]=u[a+k>>2]*j;e=e+1|0;if((i|0)!=(e|0)){continue}break}break a}if((i|0)<1){break a}e=0;while(1){k=e<<2;j=u[(w(e,l)<<2)+h>>2];j=x(j*j);u[k+b>>2]=u[a+k>>2]*x(x(j*d)+x(x(x(1)-j)*c));e=e+1|0;if((i|0)!=(e|0)){continue}break}}l=(g|0)>1?g:1;h=0;while(1){e=i;if((f|0)>(e|0)){while(1){k=w(e,g)+h<<2;u[k+b>>2]=u[a+k>>2]*d;e=e+1|0;if((f|0)!=(e|0)){continue}break}}h=h+1|0;if((l|0)!=(h|0)){continue}break}}function jg(a,b,c){var d=0,e=0,f=0;d=ca-16|0;ca=d;f=-1;a:{b:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break b}break a}if((b|0)==16e3|(b|0)==48e3){break b}if((b|0)!=24e3){break a}}if(c-1>>>0>1){break a}q[d+12>>2]=8552;q[d+12>>2]=q[d+12>>2]+3&-4;a=la(a,0,(q[d+12>>2]+(w((q[2442]<<2)+8288|0,c)+(q[2443]<<5)|0)|0)+180|0);f=-3;q[d+8>>2]=8552;e=q[d+8>>2]+3&-4;q[d+8>>2]=e;q[a+48>>2]=c;q[a+8>>2]=c;q[a+4>>2]=88;q[a+24>>2]=b;q[a+12>>2]=b;q[a+16>>2]=c;e=e+88|0;q[a>>2]=e;if(rb(a+88|0)){break a}e=a+e|0;if(mg(e,b,c)){break a}f=0;q[d>>2]=0;ua(e,10016,d);q[a+64>>2]=((b&65535)>>>0)/400;q[a+60>>2]=0;q[a+44>>2]=0}ca=d+16|0;return f}function Aa(a,b,c,d){var e=0,f=0,g=0;a:{e=q[a+284>>2];if((e|0)<=(d|0)){g=q[a+292>>2];if((e|0)<(g|0)){break a}f=a+168|0;e=e-g<<1;ka(f+(g<<1)|0,c,e);b:{c:{switch(q[a+264>>2]-1|0){case 0:Fc(a,b,f,q[a+284>>2]);Fc(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;case 1:Ec(a,b,f,q[a+284>>2]);Ec(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;case 2:uc(a,b,f,q[a+284>>2]);uc(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;default:break c}}ka(ka(b,f,q[a+284>>2]<<1)+(q[a+288>>2]<<1)|0,c+e|0,d-q[a+284>>2]<<1)}a=q[a+292>>2];ka(f,(d-a<<1)+c|0,a<<1);return 0}ja(2521,2474,184);G()}ja(2561,2474,186);G()}function xd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=x(0),m=0,n=0,o=0,p=0,r=0,s=0,t=x(0),v=x(0);if((b|0)<(c|0)){r=(h|0)>1?h:1;while(1){o=(b<<2)+f|0;i=q[o>>2];if((i|0)>=1){m=65536<>16;s=m-1|0;t=x(m|0);k=q[a+8>>2];h=0;while(1){n=g;l=x(C(x(x(u[(w(h,k)+b<<2)+e>>2]+x(.5))*t)));a:{if(x(y(l))0?j:0;ya(n,j,i);k=q[a+8>>2];p=w(k,h)+b<<2;i=p+d|0;n=i;v=u[i>>2];i=q[o>>2];l=x(x(x(x(x(j|0)+x(.5))*x(1<<14-i))*x(6103515625e-14))+x(-.5));u[n>>2]=v+l;j=e+p|0;u[j>>2]=u[j>>2]-l;h=h+1|0;if((r|0)!=(h|0)){continue}break}}b=b+1|0;if((c|0)!=(b|0)){continue}break}}}function td(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:{if((c|0)>0){if((b|0)<=1){break a}j=b-1|0;g=q[(j<<2)+a>>2];e=g>>31;e=e^e+g;h=g>>>31|0;while(1){g=j-1|0;f=b-g|0;h=q[q[(((e|0)>(f|0)?f:e)<<2)+25488>>2]+(((e|0)<(f|0)?f:e)<<2)>>2]+h|0;i=q[(g<<2)+a>>2];k=i>>31;e=(k^i+k)+e|0;if((i|0)<=-1){i=h;h=e+1|0;h=i+q[q[(((e|0)<(f|0)?h:f)<<2)+25488>>2]+(((h|0)<(f|0)?f:h)<<2)>>2]|0}f=(j|0)>1;j=g;if(f){continue}break}g=d;a=c+1|0;d=(b|0)>(c|0);Pa(g,h,q[q[((d?a:b)<<2)+25488>>2]+(((a|0)<(b|0)?b:a)<<2)>>2]+q[q[(((b|0)<(c|0)?b:c)<<2)+25488>>2]+((d?b:c)<<2)>>2]|0);return}ja(25448,25471,459);G()}ja(25548,25471,444);G()}function gd(a,b,c){var d=x(0),e=0,f=x(0),g=0,h=0,i=0,j=x(0),k=x(0),l=0,m=0,n=0;f=u[b>>2];h=la(a,0,c<<2);a:{if(u[b>>2]==x(0)){break a}l=(c|0)>0?c:0;i=1;while(1){if((e|0)==(l|0)){break a}c=0;d=x(0);if(e){while(1){d=x(d+x(u[(c<<2)+h>>2]*u[(e-c<<2)+b>>2]));c=c+1|0;if((e|0)!=(c|0)){continue}break}}a=e+1|0;d=x(x(-x(d+u[(a<<2)+b>>2]))/f);u[(e<<2)+h>>2]=d;if(e){m=i>>>1|0;c=0;while(1){g=(c<<2)+h|0;j=u[g>>2];n=g;g=((c^-1)+e<<2)+h|0;k=u[g>>2];u[n>>2]=j+x(d*k);u[g>>2]=k+x(d*j);c=c+1|0;if((m|0)!=(c|0)){continue}break}}i=i+1|0;e=a;f=x(f-x(f*x(d*d)));if(f>2]*x(.0010000000474974513))^1){continue}break}}}function Sb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=ca-80|0;ca=g;ab(g+32|0,g- -64|0,c,o[b|0]);d=s[c+2>>1];i=d<<16>>16;h=(i|0)<1;if(!h){j=p[c+4>>1];while(1){e=o[b+d|0];f=e<<10;e=(e|0)>0?f-102|0:(f|102)&e>>31;f=d-1|0;k=(w(e>>16,j)+(w(r[f+(g- -64|0)|0],k<<16>>16)>>8)|0)+(w(e&65534,j)>>16)|0;p[(f<<1)+g>>1]=k;e=(d|0)>1;d=f;if(e){continue}break}}if(!h){b=w(o[b|0],i);e=b+q[c+8>>2]|0;f=q[c+12>>2]+(b<<1)|0;d=0;while(1){h=d<<1;b=((p[h+g>>1]<<14)/p[f+h>>1]|0)+(r[d+e|0]<<7)|0;b=(b|0)>0?b:0;p[a+h>>1]=(b|0)<32767?b:32767;d=d+1|0;i=p[c+2>>1];if((d|0)<(i|0)){continue}break}}Tb(a,q[c+36>>2],i);ca=g+80|0}function vf(a,b,c,d,e,f,g,h){var i=x(0),j=0,k=0,l=0,m=0,n=0,o=0,p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),y=x(0);if((g|0)>=1){m=f+h|0;o=(m|0)<1;while(1){if(!o){h=w(k,20)+c|0;p=u[h+16>>2];r=u[h+12>>2];s=u[h+8>>2];t=u[h+4>>2];v=u[h>>2];h=k<<2;y=u[h+e>>2];h=b-(q[d+h>>2]<<2)|0;l=0;while(1){n=l<<2;j=n+a|0;i=u[b+n>>2];u[j>>2]=i;i=x(i-x(v*u[h+8>>2]));u[j>>2]=i;i=x(i-x(t*u[h+4>>2]));u[j>>2]=i;i=x(i-x(s*u[h>>2]));u[j>>2]=i;i=x(i-x(r*u[h-4>>2]));u[j>>2]=i;u[j>>2]=y*x(i-x(p*u[h-8>>2]));h=h+4|0;l=l+1|0;if((m|0)!=(l|0)){continue}break}}b=(f<<2)+b|0;a=(m<<2)+a|0;k=k+1|0;if((k|0)!=(g|0)){continue}break}}}function _a(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=x(0),r=0;n=w(q[a+44>>2],g);l=q[a+32>>2];j=w(p[l+(f<<1)>>1],g);if((h|0)!=1){a=(n|0)/(h|0)|0;j=(a|0)>(j|0)?j:a}m=i?0:f;e=i?0:e;k=p[(e<<1)+l>>1];h=w(k,g);a=h<<2;f=c;if((h|0)>=1){f=la(c,0,a)+a|0}if((e|0)<(m|0)){a=a+b|0;b=e;while(1){h=b<<2;o=x(Da(+x(A(x(u[h+d>>2]+u[h+24768>>2]),x(32)))*.6931471805599453));h=w(g,k);b=b+1|0;k=p[(b<<1)+l>>1];r=w(k,g);while(1){u[f>>2]=u[a>>2]*o;f=f+4|0;a=a+4|0;h=h+1|0;if((r|0)>(h|0)){continue}break}if((b|0)!=(m|0)){continue}break}}if((e|0)>(m|0)){ja(30968,30999,263);G()}a=i?0:j;la((a<<2)+c|0,0,n-a<<2)}function ff(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a:{b:{if((c|0)>=1){while(1){u[(h<<2)+b>>2]=p[(w(d+h|0,g)+e<<1)+a>>1];h=h+1|0;if((h|0)!=(c|0)){continue}break}if((f|0)<=-1){break b}if((c|0)<1){break a}h=0;while(1){e=(h<<2)+b|0;u[e>>2]=u[e>>2]+x(p[(w(d+h|0,g)+f<<1)+a>>1]);h=h+1|0;if((h|0)!=(c|0)){continue}break}break a}if((f|0)>-1){break a}}if((f|0)!=-2|(g|0)<2){break a}f=1;e=(c|0)<1;while(1){h=0;if(!e){while(1){i=(h<<2)+b|0;u[i>>2]=u[i>>2]+x(p[(w(d+h|0,g)+f<<1)+a>>1]);h=h+1|0;if((h|0)!=(c|0)){continue}break}}f=f+1|0;if((g|0)!=(f|0)){continue}break}}}function ed(a,b,c,d,e,f){var g=0,h=0,i=0,j=x(0),k=0;g=ca;k=g;g=g-((f<<2)+15&-16)|0;ca=g;a:{if((f|0)>0){if((d|0)<=-1){break a}if(d){g=ka(g,a,f<<2);while(1){i=h<<2;j=u[i+c>>2];u[g+i>>2]=u[a+i>>2]*j;i=(h^-1)+f<<2;u[i+g>>2]=j*u[a+i>>2];h=h+1|0;if((h|0)!=(d|0)){continue}break}a=g}d=f-e|0;lb(a,a,b,d,e+1|0);c=0;if((e|0)>=0){while(1){j=x(0);h=c+d|0;if((h|0)<(f|0)){while(1){j=x(j+x(u[(h<<2)+a>>2]*u[(h-c<<2)+a>>2]));h=h+1|0;if((h|0)!=(f|0)){continue}break}}g=(c<<2)+b|0;u[g>>2]=j+u[g>>2];g=(c|0)!=(e|0);c=c+1|0;if(g){continue}break}}ca=k;return}ja(31458,31413,228);G()}ja(31480,31413,229);G()}function Rd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e);return}h=r[b+53|0];g=q[a+12>>2];o[b+53|0]=0;i=r[b+52|0];o[b+52|0]=0;j=a+16|0;ub(j,b,c,d,e,f);k=r[b+53|0];h=h|k;l=r[b+52|0];i=i|l;a:{if((g|0)<2){break a}j=j+(g<<3)|0;g=a+24|0;while(1){if(r[b+54|0]){break a}b:{if(l){if(q[b+24>>2]==1){break a}if(r[a+8|0]&2){break b}break a}if(!k){break b}if(!(o[a+8|0]&1)){break a}}p[b+52>>1]=0;ub(g,b,c,d,e,f);k=r[b+53|0];h=k|h;l=r[b+52|0];i=l|i;g=g+8|0;if(j>>>0>g>>>0){continue}break}}o[b+53|0]=(h&255)!=0;o[b+52|0]=(i&255)!=0}function Ab(a){var b=0,c=0,d=0,e=0;a:{Hg(+a);b=Eg(1)|0;Eg(0)|0;c=b;b=b&2147483647;b:{if(b>>>0>=1083174912){if(!((c|0)<0|b>>>0<1083179008)){return a*8.98846567431158e+307}if(b>>>0>=2146435072){return-1/a}if(a<=-1075^1){break a}d=0;if((c|0)<-1?1:(c|0)<=-1){break b}break a}if(b>>>0>1016070143){break a}d=a+1}return d}e=a+26388279066624;Hg(+e);Eg(1)|0;c=(Eg(0)|0)+128|0;b=c<<4&4080;d=v[b+48064>>3];a=a-(e+ -26388279066624)-v[(b|8)+48064>>3];return Ja(d+d*a*(a*(a*(a*(a*.0013333559164630223+.009618129842126066)+.0555041086648214)+.2402265069591)+.6931471805599453),(c&-256)/256|0)}function Lf(a,b,c){var d=0,e=x(0),f=0,g=0,h=0,i=0,j=0,k=0,l=x(0);j=4;h=a+16|0;f=ta(h,b);u[c>>2]=f;d=1;while(1){e=u[h-(d<<2)>>2];l=x(e*e);e=u[(b-d<<2)+h>>2];f=f+ +x(l-x(e*e));u[(w(d,5)+d<<2)+c>>2]=f;d=d+1|0;if((d|0)!=5){continue}break}a=a+12|0;g=1;while(1){f=Wa(h,a,b);e=x(f);u[(w(g,5)<<2)+c>>2]=e;u[(g<<2)+c>>2]=e;d=1;if((5-g|0)>=2){while(1){k=d+g|0;i=d<<2;e=x(u[h-i>>2]*u[a-i>>2]);i=b-d<<2;f=f+ +x(e-x(u[i+h>>2]*u[a+i>>2]));e=x(f);u[(w(k,5)+d<<2)+c>>2]=e;u[(w(d,5)+k<<2)+c>>2]=e;d=d+1|0;if((j|0)!=(d|0)){continue}break}}j=j-1|0;a=a-4|0;g=g+1|0;if((g|0)!=5){continue}break}}function qd(a,b,c,d,e,f,g,h){var i=0,j=0,k=x(0),l=0;i=ca;j=i;a:{if((c|0)>0){if((b|0)<=1){break a}i=i-((b<<2)+27&-16)|0;ca=i;ob(a,b,1,e,c,d);k=rd(a,i,c,b);td(i,b,c,f);if(h){g=x(x(x(1)/x(F(k)))*g);f=0;while(1){h=f<<2;u[h+a>>2]=g*x(q[h+i>>2]);f=f+1|0;if((f|0)!=(b|0)){continue}break}ob(a,b,-1,e,c,d)}d=1;if((e|0)>=2){a=(b>>>0)/(e>>>0)|0;b=(a|0)>1?a:1;d=0;c=0;while(1){l=w(a,c);f=0;h=0;while(1){h=q[i+(f+l<<2)>>2]|h;f=f+1|0;if((b|0)!=(f|0)){continue}break}d=((h|0)!=0)<>>0>>0){h=b;b=0;break d}h=1;e=w(16384-c|0,32736-b|0)>>>15|0;e:{f:{if(!e){d=b;f=1;break f}f=1;while(1){e=e+1|0;i=e<<1;d=i+b|0;if(g>>>0>>0){h=e;break e}f=f+1|0;b=d;e=w(i-2|0,c)>>>15|0;if(e){continue}break}}c=g-d|0;b=(c&-2)+d|0;f=(c>>>1|0)+f|0}d=b+h|0;c=d>>>0>g>>>0;d=c?b:d;if(d>>>0>=32768){break c}if(d>>>0>g>>>0){break b}b=c?0-f|0:f}c=d+h|0;c=c>>>0<32768?c:32768;if(c>>>0<=g>>>0){break a}xb(a,d,c,32768);return b}ja(24677,24639,128);G()}ja(24704,24639,130);G()}ja(24729,24639,131);G()}function Pa(a,b,c){var d=0,e=0,f=0,g=0,h=0;a:{if(c>>>0>1){d=c-1|0;if(d>>>0>=256){f=24-z(d)|0;c=b>>>f|0;$a(a,c,c+1|0,(d>>>f|0)+1|0);if(!f){break a}g=(-1<>2];c=q[a+16>>2];e=f+c|0;b:{if(e>>>0<33){d=c;break b}while(1){h=a;d=q[a+4>>2];e=q[a+8>>2];if(d>>>0>e+q[a+24>>2]>>>0){e=e+1|0;q[a+8>>2]=e;o[q[a>>2]+(d-e|0)|0]=b;d=0}else{d=-1}q[h+44>>2]=d|q[a+44>>2];b=b>>>8|0;e=(c|0)>15;d=c-8|0;c=d;if(e){continue}break}e=d+f|0}q[a+16>>2]=e;q[a+12>>2]=g<>2]=q[a+20>>2]+f;return}$a(a,b,b+1|0,c);return}ja(8666,8690,180);G()}ja(8704,8690,198);G()}function _d(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(qa(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;b:{if(q[b+44>>2]==4){break b}p[b+52>>1]=0;a=q[a+8>>2];ea[q[q[a>>2]+20>>2]](a,b,c,c,1,e);if(r[b+53|0]){q[b+44>>2]=3;if(!r[b+52|0]){break b}break a}q[b+44>>2]=4}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}a=q[a+8>>2];ea[q[q[a>>2]+24>>2]](a,b,c,d,e)}}function id(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ca;j=e;i=w(b,c);f=e-((i<<2)+15&-16)|0;ca=f;if((c|0)>0){a:{if(!d){d=0;g=(b|0)<1;while(1){if(!g){h=w(b,d);e=0;while(1){u[(e+h<<2)+f>>2]=u[(w(c,e)+d<<2)+a>>2];e=e+1|0;if((e|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}break a}g=(c<<2)+31176|0;d=0;h=(b|0)<1;while(1){if(!h){k=w(q[g+(d<<2)>>2],b);e=0;while(1){u[(e+k<<2)+f>>2]=u[(w(c,e)+d<<2)+a>>2];e=e+1|0;if((e|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}}ka(a,f,i<<2);ca=j;return}ja(31152,30999,591);G()}function Gd(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{if((d|0)==8){i=9008;j=11;b:{switch(e-2|0){default:ja(9227,9278,54);G();case 2:break a;case 0:break b}}i=8969;j=3;break a}i=9056;j=34;c:{switch(e-2|0){default:ja(9227,9278,63);G();case 2:break a;case 0:break c}}i=8976;j=12}d=d<<16;g=d>>15;l=a+g|0;a=w(d>>16,18);d=0;while(1){k=(d<<2)+c|0;f=o[(w(d,j)+b|0)+i|0]+l|0;q[k>>2]=f;d:{if((a|0)<(g|0)){h=g;if((f|0)>(g|0)){break d}h=(a|0)>(f|0)?a:f;break d}h=a;if((a|0)<(f|0)){break d}h=(f|0)<(g|0)?g:f}q[k>>2]=h;d=d+1|0;if((e|0)!=(d|0)){continue}break}}function ug(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ca;j=e;i=w(b,c);f=e-((i<<2)+15&-16)|0;ca=f;a:{if(!d){if((c|0)<1){break a}e=0;g=(b|0)<1;while(1){if(!g){h=w(b,e);d=0;while(1){u[(w(c,d)+e<<2)+f>>2]=u[(d+h<<2)+a>>2];d=d+1|0;if((d|0)!=(b|0)){continue}break}}e=e+1|0;if((e|0)!=(c|0)){continue}break}break a}if((c|0)<1){break a}g=(c<<2)+31176|0;e=0;h=(b|0)<1;while(1){if(!h){k=w(q[g+(e<<2)>>2],b);d=0;while(1){u[(w(c,d)+e<<2)+f>>2]=u[(d+k<<2)+a>>2];d=d+1|0;if((d|0)!=(b|0)){continue}break}}e=e+1|0;if((e|0)!=(c|0)){continue}break}}ka(a,f,i<<2);ca=j}function Ka(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=d-1|0;h=z(d);f=31-h|0;a:{if((d|0)<2){e=d;break a}e=d;while(1){i=e;e=g<<1;k=p[(e|2)+c>>1];e=p[c+e>>1];e=i+(w(k,k)+w(e,e)>>>f|0)|0;g=g+2|0;if((j|0)>(g|0)){continue}break}g=d&-2}if((d|0)>(g|0)){i=e;e=p[(g<<1)+c>>1];e=i+(w(e,e)>>>f|0)|0}f=0;e=34-(h+z(e)|0)|0;h=(e|0)>0?e:0;if((d|0)<2){e=0}else{g=0;while(1){i=f;e=g<<1;f=p[(e|2)+c>>1];e=p[c+e>>1];f=i+(w(f,f)+w(e,e)>>>h|0)|0;g=g+2|0;if((j|0)>(g|0)){continue}break}e=d&-2}if((e|0)<(d|0)){c=p[(e<<1)+c>>1];f=(w(c,c)>>>h|0)+f|0}q[b>>2]=h;q[a>>2]=f}function Hb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((e|0)>=2){e=e>>1;m=(e|0)>1?e:1;f=q[b+4>>2];g=q[b>>2];e=0;while(1){j=e<<1;h=e<<2;k=p[(h|2)+a>>1]<<10;i=k-f|0;i=(w(i&65535,10788)>>>16|0)+w(i>>16,10788)|0;l=f+i|0;f=p[a+h>>1]<<10;g=f-g|0;h=((w(g&65535,-24290)>>16)+w(g>>16,-24290)|0)+f|0;f=l+h|0;p[j+c>>1]=(f|0)>67107839?32767:(f|0)<-67109888?-32768:(f>>>10|0)+1>>>1|0;f=l-h|0;p[d+j>>1]=(f|0)>67107839?32767:(f|0)<-67109888?-32768:(f>>>10|0)+1>>>1|0;f=i+k|0;g=g+h|0;e=e+1|0;if((m|0)!=(e|0)){continue}break}q[b+4>>2]=f;q[b>>2]=g}}function Cb(a,b,c){a:{a=la(a,0,20216);if(hb(a,b)){break a}if(hb(a+10064|0,b)){break a}q[a+20192>>2]=1;q[a+20196>>2]=1;q[c>>2]=1;q[c+4>>2]=1;q[c+8>>2]=q[a+4556>>2];q[c+12>>2]=q[a+4564>>2];q[c+16>>2]=q[a+4568>>2];q[c+20>>2]=q[a+4572>>2];q[c+24>>2]=q[a+4612>>2];q[c+28>>2]=q[a+4608>>2];q[c+32>>2]=q[a+4616>>2];q[c+36>>2]=q[a+4624>>2];q[c+40>>2]=q[a+6088>>2];q[c+48>>2]=q[a+6076>>2];q[c+52>>2]=q[a+4676>>2];b=q[a+4576>>2];q[c+72>>2]=w(b<<16>>16,1e3);q[c+76>>2]=q[a+4536>>2];q[c+80>>2]=(b|0)==16?!q[a+28>>2]:0;return 0}ja(39167,39187,85);G()}function oe(a,b){var c=0,d=0,e=0;c=ca-208|0;ca=c;q[c+204>>2]=b;la(c+160|0,0,40);q[c+200>>2]=q[c+204>>2];a:{if((yb(0,c+200|0,c+80|0,c+160|0)|0)<0){break a}d=q[a+76>>2]>=0;b=q[a>>2];if(o[a+74|0]<=0){q[a>>2]=b&-33}e=b&32;b:{if(q[a+48>>2]){yb(a,c+200|0,c+80|0,c+160|0);break b}q[a+48>>2]=80;q[a+16>>2]=c+80;q[a+28>>2]=c;q[a+20>>2]=c;b=q[a+44>>2];q[a+44>>2]=c;yb(a,c+200|0,c+80|0,c+160|0);if(!b){break b}ea[q[a+36>>2]](a,0,0)|0;q[a+48>>2]=0;q[a+44>>2]=b;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0}q[a>>2]=q[a>>2]|e;if(!d){break a}}ca=c+208|0}function pd(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0;h=ca;j=h;a:{if((c|0)>0){if((b|0)<=1){break a}h=h-((b<<2)+15&-16)|0;ca=h;g=x(x(x(1)/x(F(sd(h,b,c,f))))*g);f=0;while(1){i=f<<2;u[i+a>>2]=g*x(q[h+i>>2]);f=f+1|0;if((f|0)!=(b|0)){continue}break}ob(a,b,-1,e,c,d);d=1;if((e|0)>=2){b=(b>>>0)/(e>>>0)|0;i=(b|0)>1?b:1;d=0;c=0;while(1){k=w(b,c);f=0;a=0;while(1){a=q[h+(f+k<<2)>>2]|a;f=f+1|0;if((i|0)!=(f|0)){continue}break}d=((a|0)!=0)<>>0>1){break c}e=c-2048|0;if(e>>>0>3){break c}if((e|0)!=2){break b}}e=0;if(!d){break a}q[d>>2]=-1;break a}q[f+12>>2]=20216;q[f+12>>2]=q[f+12>>2]+3&-4;e=Ra((q[f+12>>2]+w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,b)|0)+18384|0);if(!e){e=0;if(!d){break a}q[d>>2]=-7;break a}a=hf(e,a,b,c);if(d){q[d>>2]=a}if(!a){break a}Ca(e);e=0}ca=f+16|0;return e}function Ad(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;a:{b:{h=q[b>>2];if(h){g=1;e=w(16384-d|0,32736-c|0)>>>15|0;f=h>>31;i=f^f+h;c:{if(!e|(i|0)<2){break c}while(1){j=e<<1;e=w(j,d)>>>15|0;c=(c+j|0)+2|0;g=g+1|0;if((i|0)<=(g|0)){break c}if(e){continue}break}}d:{if(!e){e=b;b=i-g|0;d=((h>>>31|32768)-c>>1)-1|0;b=(b|0)<(d|0)?b:d;q[e>>2]=b+(f+g|0)^f;e=((c+f|0)+(b<<1)|0)+1|0;c=(e|0)!=32768;break d}b=c;c=e+1|0;e=b+(c&(f^-1))|0}if(c+e>>>0>=32769){break b}if(!c){break a}}Od(a,e,c+e|0);return}ja(24608,24639,88);G()}ja(24654,24639,89);G()}function xa(a,b){var c=0,d=0,e=0,f=0;c=ca+ -64|0;ca=c;d=q[a>>2];e=q[d-4>>2];f=q[d-8>>2];q[c+16>>2]=57660;q[c+12>>2]=a;q[c+8>>2]=b;d=0;la(c+20|0,0,43);a=a+f|0;a:{if(qa(e,b,0)){q[c+56>>2]=1;ea[q[q[e>>2]+20>>2]](e,c+8|0,a,a,1,0);d=q[c+32>>2]==1?a:0;break a}ea[q[q[e>>2]+24>>2]](e,c+8|0,a,1,0);b:{switch(q[c+44>>2]){case 0:d=q[c+48>>2]==1?q[c+36>>2]==1?q[c+40>>2]==1?q[c+28>>2]:0:0:0;break a;case 1:break b;default:break a}}if(q[c+32>>2]!=1){if(q[c+48>>2]|q[c+36>>2]!=1|q[c+40>>2]!=1){break a}}d=q[c+24>>2]}ca=c- -64|0;return d}function mb(a,b,c,d,e,f){var g=x(0),h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,v=0,y=x(0);n=(e|0)>1?e:1;o=q[a+44>>2]<>2];while(1){if((d|0)>=1){r=w(h,o);t=w(q[a+8>>2],h);j=s[k>>1];i=0;while(1){e=j<<16;g=x(0);l=i+1|0;j=p[(l<<1)+k>>1];e=e>>16;m=j-e<=1){v=((e<>2];g=x(y+x(g*g));e=e+1|0;if((m|0)!=(e|0)){continue}break}}u[(i+t<<2)+c>>2]=F(x(g+x(1.0000000272452012e-27)));i=l;if((i|0)!=(d|0)){continue}break}}h=h+1|0;if((n|0)!=(h|0)){continue}break}}function na(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=q[a+28>>2];g=d>>>c|0;f=q[a+32>>2];c=-1;while(1){e=d;c=c+1|0;d=w(g,r[c+b|0]);if(f>>>0>>0){continue}break}b=e-d|0;q[a+28>>2]=b;h=f-d|0;q[a+32>>2]=h;if(b>>>0<=8388608){i=q[a+24>>2];f=q[a+40>>2];j=q[a+20>>2];k=q[a+4>>2];while(1){g=b<<8;q[a+28>>2]=g;j=j+8|0;q[a+20>>2]=j;d=0;if(i>>>0>>0){e=i+1|0;q[a+24>>2]=e;d=r[q[a>>2]+i|0];i=e}q[a+40>>2]=d;h=(h<<8&2147483392|(f<<8|d)>>>1&255)^255;q[a+32>>2]=h;e=b>>>0<32769;f=d;b=g;if(e){continue}break}}return c}function Hf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,t=0;if(!(f&1)){if((e|0)>=1){t=(f|0)<2;while(1){h=0;l=0;k=f;if(!t){while(1){i=k-1|0;g=i<<1;j=w(s[g+b>>1]-(r[c+i|0]<<7)<<16>>16,p[d+g>>1]);n=j-(h>>1)|0;g=n>>31;i=k-2|0;h=i<<1;h=w(s[h+b>>1]-(r[c+i|0]<<7)<<16>>16,p[d+h>>1]);o=h-(j>>1)|0;j=o>>31;l=((g^g+n)+l|0)+(j^j+o)|0;g=(k|0)>3;k=i;if(g){continue}break}}q[(m<<2)+a>>2]=l;c=c+f|0;d=(f<<1)+d|0;m=m+1|0;if((m|0)!=(e|0)){continue}break}}return}ja(37504,37545,49);G()}function md(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=x(0);n=(f|0)>1?f:1;o=w(q[a+44>>2],g);l=q[a+32>>2];while(1){if((e|0)>=1){r=w(i,o);s=w(q[a+8>>2],i);k=p[l>>1];j=0;while(1){f=w(g,k);h=j;j=h+1|0;k=p[(j<<1)+l>>1];m=w(k,g);if((f|0)<(m|0)){t=x(x(1)/x(u[(h+s<<2)+d>>2]+x(1.0000000272452012e-27)));while(1){h=f+r<<2;u[h+c>>2]=t*u[b+h>>2];f=f+1|0;if((m|0)>(f|0)){continue}break}}if((e|0)!=(j|0)){continue}break}}i=i+1|0;if((n|0)!=(i|0)){continue}break}}function gb(a,b,c,d){var e=x(0),f=x(0),g=0,h=x(0),i=0;a:{if(c-1>>>0<2){if(d&3){break a}if((d|0)>=1){e=x(x(3.1415927410125732)/x(d+1|0));h=x(x(2)-x(e*e));c=(c|0)<2;e=c?e:x(h*x(.5));f=c?x(0):x(1);while(1){c=i<<2;u[c+a>>2]=x(f+e)*x(u[b+c>>2]*x(.5));g=c|4;u[g+a>>2]=e*u[b+g>>2];g=c|8;f=x(x(h*e)-f);u[g+a>>2]=x(e+f)*x(u[b+g>>2]*x(.5));c=c|12;u[c+a>>2]=f*u[b+c>>2];e=x(x(h*f)-e);i=i+4|0;if((i|0)<(d|0)){continue}break}}return}ja(36217,36266,48);G()}ja(36301,36266,51);G()}function ig(a,b,c){var d=0,e=0;d=ca-16|0;ca=d;a:{b:{c:{d:{if((a|0)<=15999){if((a|0)==8e3|(a|0)==12e3){break d}break c}if((a|0)==16e3|(a|0)==48e3){break d}if((a|0)!=24e3){break c}}if(b-1>>>0<2){break b}}if(!c){break a}q[c>>2]=-1;break a}q[d+12>>2]=8552;q[d+12>>2]=q[d+12>>2]+3&-4;e=Ra((q[d+12>>2]+(w((q[2442]<<2)+8288|0,b)+(q[2443]<<5)|0)|0)+180|0);if(!e){e=0;if(!c){break a}q[c>>2]=-7;break a}a=jg(e,a,b);if(c){q[c>>2]=a}if(!a){break a}Ca(e);e=0}ca=d+16|0;return e}function xg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b;if(!c){da=0;return(a>>>0)/10|0}g=61-z(c)|0;f=0-g|0;e=g&63;d=e&31;if(e>>>0>=32){e=0;d=c>>>d|0}else{e=c>>>d|0;d=((1<>>d}f=f&63;c=f&31;if(f>>>0>=32){b=a<>>32-c|b<>>31;f=c;e=e<<1|d>>>31;c=0-(e+(c>>>0>9)|0)>>31;h=c&10;d=f-h|0;e=e-(f>>>0>>0)|0;b=b<<1|a>>>31;a=i|a<<1;h=c&1;i=h;g=g-1|0;if(g){continue}break}}da=b<<1|a>>>31;return h|a<<1}function sa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=q[a+32>>2];d=q[a+28>>2];b=d>>>b|0;g=c>>>0>>0;if(!g){c=c-b|0;q[a+32>>2]=c}e=g?b:d-b|0;q[a+28>>2]=e;if(e>>>0<=8388608){f=q[a+24>>2];i=q[a+40>>2];h=q[a+20>>2];k=q[a+4>>2];while(1){j=e<<8;q[a+28>>2]=j;h=h+8|0;q[a+20>>2]=h;b=0;if(f>>>0>>0){d=f+1|0;q[a+24>>2]=d;b=r[q[a>>2]+f|0];f=d}q[a+40>>2]=b;c=(c<<8&2147483392|(i<<8|b)>>>1&255)^255;q[a+32>>2]=c;d=e>>>0<32769;i=b;e=j;if(d){continue}break}}return g}function dg(a){var b=0;q[a>>2]=0;q[a+4>>2]=0;q[a+56>>2]=0;q[a+60>>2]=5e3;q[a+32>>2]=0;q[a+36>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a+96>>2]=25;q[a+100>>2]=16;q[a+80>>2]=858993;q[a+84>>2]=1342177;b=a- -64|0;q[b>>2]=2500;q[b+4>>2]=1600;q[a+104>>2]=12;q[a+108>>2]=15;q[a+88>>2]=1789569;q[a+92>>2]=50;q[a+72>>2]=1200;q[a+76>>2]=429496;q[a+40>>2]=25600;q[a+44>>2]=25600;q[a+48>>2]=25600;q[a+52>>2]=25600;return 0}function xb(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=q[a+36>>2];f=w(e,d-c|0);g=q[a+32>>2]-f|0;q[a+32>>2]=g;c=b?w(e,c-b|0):q[a+28>>2]-f|0;q[a+28>>2]=c;if(c>>>0<=8388608){d=q[a+24>>2];e=q[a+40>>2];i=q[a+20>>2];j=q[a+4>>2];while(1){f=c<<8;q[a+28>>2]=f;i=i+8|0;q[a+20>>2]=i;b=0;if(d>>>0>>0){h=d+1|0;q[a+24>>2]=h;b=r[q[a>>2]+d|0];d=h}q[a+40>>2]=b;g=(g<<8&2147483392|(e<<8|b)>>>1&255)^255;q[a+32>>2]=g;h=c>>>0<32769;e=b;c=f;if(h){continue}break}}}function Rc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((d|0)>=2){d=d>>1;k=(d|0)>1?d:1;e=q[a+4>>2];f=q[a>>2];d=0;while(1){g=d<<2;h=p[g+c>>1]<<10;f=h-f|0;h=((w(f&65535,-25727)>>16)+w(f>>16,-25727)|0)+h|0;i=h+e|0;g=p[(g|2)+c>>1]<<10;e=g-e|0;e=(w(e&65535,9872)>>>16|0)+w(e>>16,9872)|0;i=i+e|0;j=(i>>10)+1>>1;p[(d<<1)+b>>1]=(i|0)>67107839?32767:(j|0)>-32768?j:-32768;e=e+g|0;f=f+h|0;d=d+1|0;if((k|0)!=(d|0)){continue}break}q[a+4>>2]=e;q[a>>2]=f}}function ee(a,b){a:{if(a){if(b>>>0<=127){break a}b:{if(!q[14667]){if((b&-128)==57216){break a}break b}if(b>>>0<=2047){o[a+1|0]=b&63|128;o[a|0]=b>>>6|192;return 2}if(!((b&-8192)!=57344?b>>>0>=55296:0)){o[a+2|0]=b&63|128;o[a|0]=b>>>12|224;o[a+1|0]=b>>>6&63|128;return 3}if(b-65536>>>0<=1048575){o[a+3|0]=b&63|128;o[a|0]=b>>>18|240;o[a+2|0]=b>>>6&63|128;o[a+1|0]=b>>>12&63|128;return 4}}q[14656]=25;a=-1}else{a=1}return a}o[a|0]=b;return 1}function Ve(){var a=0;ba(52160,52168,52184,0,52200,2,52203,0,52203,0,52205,52223,3);aa(52160,4,52240,52256,4,5);a=Ia(8);q[a+4>>2]=0;q[a>>2]=6;M(52160,52262,6,52272,52296,7,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=8;M(52160,52304,5,52320,52340,9,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=10;M(52160,52347,4,52368,52256,11,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=12;M(52160,52384,4,52368,52256,11,a|0,0);V(52160,52397,2,52416,52424,13,14)}function Se(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=ca-16|0;ca=d;e=Ia(16);g=q[c>>2];c=q[a>>2];a=q[b>>2];q[e>>2]=a;b=w(a,11520);f=b+b|0;h=e,i=Ia(b>>>0>f>>>0?-1:f),q[h+12>>2]=i;h=e,i=gf(c,a,g,d+12|0),q[h+4>>2]=i;a:{if(q[d+12>>2]>-1){h=e,i=ig(c,a,d+8|0),q[h+8>>2]=i;if(q[d+8>>2]<=-1){break a}ca=d+16|0;return e|0}a=R(4)|0;q[a>>2]=q[d+12>>2];Q(a|0,58228,0);G()}a=R(4)|0;q[a>>2]=q[d+8>>2];Q(a|0,58228,0);G()}function Wb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((e|0)>=1){while(1){j=c;a:{if(!(d|h)){f=o[b|0];g=o[c|0]-16|0;f=(f|0)>(g|0)?f:g;break a}f=o[c|0];i=f+8|0;g=o[b+h|0]-4|0;if((i|0)<(g|0)){f=f+((g<<1)-i|0)|0;break a}f=f+g|0}f=f<<24>>24>0?f:0;f=f<<24>>24<63?f:63;o[j|0]=f;f=f&255;f=(w(f,7281)>>>16|0)+w(f,29)|0;k=(h<<2)+a|0,l=Na((f>>>0<1877?f:1877)+2090|0),q[k>>2]=l;h=h+1|0;if((h|0)!=(e|0)){continue}break}}}function Id(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0;g=ca-16|0;ca=g;o[g+15|0]=0;if((c|0)>=8){e=w((d<<1)+e<<16>>16,7)+8624|0;c=c+8>>4;i=(c|0)>1?c:1;while(1){c=q[(h<<2)+f>>2];if((c|0)>=1){c=c&31;o[g+14|0]=r[e+(c>>>0<6?c:6)|0];c=0;while(1){d=(c<<1)+b|0;if(p[d>>1]>=1){j=d,k=w((na(a,g+14|0,8)<<1)-1|0,s[d>>1]),p[j>>1]=k}c=c+1|0;if((c|0)!=16){continue}break}}b=b+32|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}}ca=g+16|0}function pb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=x(0);j=(f|0)>1?f:1;while(1){if((b|0)>=1){h=w(q[a+8>>2],g);f=0;while(1){i=f+h<<2;k=e+i|0,l=x(x(Ua(+u[i+d>>2])*1.4426950408889634)-u[(f<<2)+24768>>2]),u[k>>2]=l;f=f+1|0;if((f|0)!=(b|0)){continue}break}}if((b|0)<(c|0)){h=w(q[a+8>>2],g);f=b;while(1){q[(f+h<<2)+e>>2]=-1050673152;f=f+1|0;if((f|0)!=(c|0)){continue}break}}g=g+1|0;if((j|0)!=(g|0)){continue}break}}function je(a,b){var c=0;c=(b|0)!=0;a:{b:{c:{if(!b|!(a&3)){break c}while(1){if(!r[a|0]){break b}a=a+1|0;b=b-1|0;c=(b|0)!=0;if(!b){break c}if(a&3){continue}break}}if(!c){break a}d:{if(!r[a|0]|b>>>0<4){break d}while(1){c=q[a>>2];if((c^-1)&c-16843009&-2139062144){break d}a=a+4|0;b=b-4|0;if(b>>>0>3){continue}break}}if(!b){break a}}while(1){if(!r[a|0]){return a}a=a+1|0;b=b-1|0;if(b){continue}break}}return 0}function ya(a,b,c){var d=0,e=0,f=0,g=0,h=0;if(c){g=q[a+12>>2];f=q[a+16>>2];d=f+c|0;a:{if(d>>>0<33){e=f;break a}while(1){h=a;e=q[a+4>>2];d=q[a+8>>2];if(e>>>0>d+q[a+24>>2]>>>0){d=d+1|0;q[a+8>>2]=d;o[q[a>>2]+(e-d|0)|0]=g;e=0}else{e=-1}q[h+44>>2]=e|q[a+44>>2];g=g>>>8|0;d=(f|0)>15;e=f-8|0;f=e;if(d){continue}break}d=c+e|0}q[a+16>>2]=d;q[a+12>>2]=b<>2]=q[a+20>>2]+c;return}ja(8704,8690,198);G()}function ic(a){var b=0,c=0,d=0;b=ca-16|0;ca=b;Hg(+a);d=Eg(1)|0;Eg(0)|0;d=d&2147483647;a:{if(d>>>0<=1072243195){c=1;if(d>>>0<1044816030){break a}c=zb(a,0);break a}c=a-a;if(d>>>0>=2146435072){break a}b:{switch(pe(a,b)&3){case 0:c=zb(v[b>>3],v[b+8>>3]);break a;case 1:c=-hc(v[b>>3],v[b+8>>3]);break a;case 2:c=-zb(v[b>>3],v[b+8>>3]);break a;default:break b}}c=hc(v[b>>3],v[b+8>>3])}a=c;ca=b+16|0;return a}function of(a,b,c,d){var e=0,f=0,g=0;e=-1;a:{if(c>>>0>2){break a}e=-7;if(!a){break a}a=la(a,0,w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,c)+244|0);q[a+28>>2]=1;q[a+32>>2]=0;q[a+8>>2]=c;q[a+4>>2]=c;q[a>>2]=9764;c=q[2444];q[a+24>>2]=5;q[a+60>>2]=24;q[a+12>>2]=0;q[a+16>>2]=1;q[a+40>>2]=-1;q[a+44>>2]=0;q[a+72>>2]=d;q[a+48>>2]=1;q[a+52>>2]=1;q[a+36>>2]=c;oa(a,4028,0);f=a,g=Jc(b),q[f+28>>2]=g;e=0}return e}function Bc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=ca-16|0;ca=e;d=-4;a:{if((c|0)<1){break a}b:{if(!q[a+4>>2]){o[a|0]=r[b|0];h=a,i=Ib(b,8e3),q[h+296>>2]=i;break b}if((r[b|0]^r[a|0])>>>0>3){break a}}f=eg(b,c);if((f|0)<1){break a}g=q[a+4>>2];if((w(q[a+296>>2],g+f|0)|0)>960){break a}d=_c(b,c,e+15|0,((g<<2)+a|0)+8|0,((g<<1)+a|0)+200|0,0);if((d|0)<1){break a}q[a+4>>2]=q[a+4>>2]+f;d=0}ca=e+16|0;return d}function tf(a,b,c,d,e,f,g){var h=x(0),i=0,j=0,k=0,l=0,m=0,n=x(0);i=ca-768|0;ca=i;j=e+g|0;k=j<<1;eb(i,c,b,k,g);h=u[d>>2];l=(g<<2)+i|0;m=a,n=x(ta(l,e)*+x(h*h)),u[m>>2]=n;h=u[d+4>>2];j=(j<<2)+l|0;m=a,n=x(ta(j,e)*+x(h*h)),u[m+4>>2]=n;if((f|0)==4){eb(i,c- -64|0,(k<<2)+b|0,k,g);h=u[d+8>>2];m=a,n=x(ta(l,e)*+x(h*h)),u[m+8>>2]=n;h=u[d+12>>2];m=a,n=x(ta(j,e)*+x(h*h)),u[m+12>>2]=n}ca=i+768|0}function Jd(a,b,c,d,e,f){var g=0,h=0,i=0;g=ca-16|0;ca=g;o[g+15|0]=0;if((c|0)>=8){d=w((d<<1)+e<<16>>16,7)+8624|0;c=c+8>>4;e=(c|0)>1?c:1;while(1){c=q[(h<<2)+f>>2];if((c|0)>=1){c=c&31;o[g+14|0]=r[d+(c>>>0<6?c:6)|0];c=0;while(1){i=r[b+c|0];if(i){ma(a,(i<<24>>24>>>7|0)+1&255,g+14|0,8)}c=c+1|0;if((c|0)!=16){continue}break}}b=b+16|0;h=h+1|0;if((e|0)!=(h|0)){continue}break}}ca=g+16|0}function tb(a,b){var c=0,d=0,e=0,f=0,g=0;c=na(a,6352,8);e=na(a,6430,8);g=na(a,6437,8);f=(c|0)/5|0;d=(na(a,6430,8)+w(c+w(f,-5)|0,3)<<1)+6320|0;c=p[d>>1];d=p[d+2>>1]-c|0;c=c+w((w(d&65535,6554)>>>16|0)+w(d>>16,6554)|0,na(a,6437,8)<<17>>16|1)|0;q[b+4>>2]=c;e=(w(f,3)+e<<1)+6320|0;a=p[e>>1];d=b;b=p[e+2>>1]-a|0;q[d>>2]=(a+w((w(b&65535,6554)>>>16|0)+w(b>>16,6554)|0,g<<17>>16|1)|0)-c}function Mb(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=0,i=0,j=0,k=0;if((c|0)>=1){d=b>>1;h=(d|0)>1?d:1;i=c<<1;d=0;j=(b|0)<2;while(1){b=0;if(!j){while(1){e=(w(b,i)+d<<2)+a|0;f=x(u[e>>2]*x(.7071067690849304));k=e;e=(w(b<<1|1,c)+d<<2)+a|0;g=x(u[e>>2]*x(.7071067690849304));u[k>>2]=f+g;u[e>>2]=f-g;b=b+1|0;if((h|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}}}function Xe(a,b,c){var d=0,e=0,f=0;a:{d=b;e=q[c+16>>2];if(!e){if(Ye(c)){break a}e=q[c+16>>2]}f=q[c+20>>2];if(e-f>>>0>>0){ea[q[c+36>>2]](c,a,b)|0;return}b:{if(o[c+75|0]<0){break b}e=b;while(1){d=e;if(!d){break b}e=d-1|0;if(r[e+a|0]!=10){continue}break}if(ea[q[c+36>>2]](c,a,d)>>>0>>0){break a}a=a+d|0;b=b-d|0;f=q[c+20>>2]}ka(f,a,b);q[c+20>>2]=q[c+20>>2]+b}}function Sd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(!qa(a,q[b>>2],e)){break a}if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+20>>2]=c;q[b+32>>2]=d;q[b+40>>2]=q[b+40>>2]+1;if(!(q[b+36>>2]!=1|q[b+24>>2]!=2)){o[b+54|0]=1}q[b+44>>2]=4}}function Sc(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=x(0),m=0,n=0;g=1;if((c|0)>=1){while(1){i=f<<2;h=u[i+b>>2];j=f+1|0;if(j&2147483646){m=g>>>1|0;d=0;while(1){e=(d<<2)+a|0;k=u[e>>2];n=e;e=((d^-1)+f<<2)+a|0;l=u[e>>2];u[n>>2]=k+x(h*l);u[e>>2]=l+x(h*k);d=d+1|0;if((m|0)!=(d|0)){continue}break}}u[a+i>>2]=-h;g=g+1|0;f=j;if((f|0)!=(c|0)){continue}break}}}function Wa(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;if((c|0)>3){h=c-3|0;while(1){d=e<<2;f=d|4;i=+u[a+d>>2]*+u[b+d>>2]+ +u[a+f>>2]*+u[b+f>>2];f=d|8;d=d|12;g=g+(i+ +u[f+a>>2]*+u[b+f>>2]+ +u[d+a>>2]*+u[b+d>>2]);e=e+4|0;if((h|0)>(e|0)){continue}break}e=c&-4}if((c|0)>(e|0)){while(1){d=e<<2;g=g+ +u[d+a>>2]*+u[b+d>>2];e=e+1|0;if((e|0)!=(c|0)){continue}break}}return g}function ud(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=x(0);if((b|0)<(c|0)){k=(g|0)>1?g:1;while(1){g=0;i=(b<<2)+e|0;h=q[i>>2];if((h|0)>=1){while(1){h=za(f,h);j=(w(q[a+8>>2],g)+b<<2)+d|0;l=x(x(h|0)+x(.5));h=q[i>>2];u[j>>2]=u[j>>2]+x(x(x(l*x(1<<14-h))*x(6103515625e-14))+x(-.5));g=g+1|0;if((k|0)!=(g|0)){continue}break}}b=b+1|0;if((c|0)!=(b|0)){continue}break}}}function yf(a,b,c,d){var e=0;e=ca+ -64|0;ca=e;Ef(a,e,c,d);c=q[a+4640>>2];a:{if((c|0)<1){break a}a=0;while(1){u[(a<<2)+b>>2]=x(p[(a<<1)+e>>1])*x(.000244140625);a=a+1|0;if((c|0)!=(a|0)){continue}break}if((c|0)<1){break a}a=0;while(1){u[((a<<2)+b|0)- -64>>2]=x(p[((a<<1)+e|0)+32>>1])*x(.000244140625);a=a+1|0;if((c|0)!=(a|0)){continue}break}}ca=e- -64|0}function sb(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=b-1|0;if((b|0)>=2){h=c-65536|0;b=0;while(1){e=(b<<2)+a|0;f=q[e>>2];g=f<<16>>16;q[e>>2]=(w(c>>16,g)+(w(c&65535,g)>>16)|0)+w((f>>15)+1>>1,c);c=((w(c,h)>>15)+1>>1)+c|0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}b=(d<<2)+a|0;d=q[b>>2];a=d<<16>>16;q[b>>2]=(w(a,c>>16)+(w(a,c&65535)>>16)|0)+w((d>>15)+1>>1,c)}function rc(){U(57912,52491);T(58156,52496,1,1,0);Je();Ie();He();Ge();Ee();De();Ce();Be();Ae();ze();ye();O(54160,52602);O(54072,52614);N(53984,4,52647);N(53892,2,52660);N(53752,4,52675);$(53724,52690);xe();qc(52736);pc(52773);nc(52812);mc(52843);lc(52883);kc(52912);we();ve();qc(53019);pc(53051);nc(53084);mc(53117);lc(53151);kc(53184);ue();te()}function mg(a,b,c){var d=0;a:{if(c>>>0<=2){if(a){break a}a=-7}else{a=-1}return a}a=la(a,0,(w((q[2442]<<2)+8288|0,c)+(q[2443]<<5)|0)+92|0);q[a>>2]=9764;d=q[2442];q[a+16>>2]=1;q[a+20>>2]=0;q[a+12>>2]=c;q[a+8>>2]=c;q[a+4>>2]=d;d=q[2444];q[a+28>>2]=1;q[a+32>>2]=(c|0)==1;q[a+36>>2]=0;q[a+24>>2]=d;ua(a,4028,0);c=a;a=Jc(b);q[c+16>>2]=a;return a?0:-1}function ab(a,b,c,d){var e=0,f=0,g=0;e=p[c+2>>1];if((e|0)>=1){e=q[c+24>>2]+((w(e&65535,d)|0)/2|0)|0;d=0;while(1){f=r[e|0];p[(d<<1)+a>>1]=w(f>>>1&7,9);o[b+d|0]=r[q[c+20>>2]+(w(p[c+2>>1]-1|0,f&1)+d|0)|0];g=d|1;p[(g<<1)+a>>1]=w(f>>>5|0,9);o[b+g|0]=r[q[c+20>>2]+(w(p[c+2>>1]-1|0,f>>>4&1)+g|0)|0];e=e+1|0;d=d+2|0;if((d|0)>1]){continue}break}}}function Ja(a,b){a:{if((b|0)>=1024){a=a*8.98846567431158e+307;if((b|0)<2047){b=b-1023|0;break a}a=a*8.98846567431158e+307;b=((b|0)<3069?b:3069)-2046|0;break a}if((b|0)>-1023){break a}a=a*2.2250738585072014e-308;if((b|0)>-2045){b=b+1022|0;break a}a=a*2.2250738585072014e-308;b=((b|0)>-3066?b:-3066)+2044|0}Fg(0,0);Fg(1,b+1023<<20);return a*+Gg()}function Yc(a,b){var c=0;a:{b:{c=o[b+5|0]+w(o[b+2|0],5)|0;if((c|0)<25){ma(a,c,6352,8);c=o[b|0];if((c|0)>=3){break b}if(o[b+1|0]>=5){break a}ma(a,c,6430,8);ma(a,o[b+1|0],6437,8);c=o[b+3|0];if((c|0)>2){break b}if(o[b+4|0]>4){break a}ma(a,c,6430,8);ma(a,o[b+4|0],6437,8);return}ja(35814,35839,44);G()}ja(35865,35839,47);G()}ja(35900,35839,48);G()}function Ud(a,b){var c=0,d=0;a:{while(1){if(!b){break a}b=xa(b,57900);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(qa(q[a+12>>2],q[b+12>>2],0)){return 1}if(!(o[a+8|0]&1)){break a}c=q[a+12>>2];if(!c){break a}c=xa(c,57900);if(c){b=q[b+12>>2];a=c;continue}break}a=q[a+12>>2];if(!a){break a}a=xa(a,57932);if(!a){break a}d=cc(a,q[b+12>>2])}return d}function wb(a,b,c,d){o[a+53|0]=1;a:{if(q[a+4>>2]!=(c|0)){break a}o[a+52|0]=1;c=q[a+16>>2];if(!c){q[a+36>>2]=1;q[a+24>>2]=d;q[a+16>>2]=b;if((d|0)!=1|q[a+48>>2]!=1){break a}o[a+54|0]=1;return}if((b|0)==(c|0)){c=q[a+24>>2];if((c|0)==2){q[a+24>>2]=d;c=d}if(q[a+48>>2]!=1|(c|0)!=1){break a}o[a+54|0]=1;return}o[a+54|0]=1;q[a+36>>2]=q[a+36>>2]+1}}function Hc(a,b){var c=0;cg(a,a+5098|0);c=q[a+4532>>2];a:{b:{c:{if(!b){if((c|0)<13){break c}q[a+4532>>2]=12;break c}if((c|0)>12){break b}}b=0;o[a+4765|0]=0;c=q[a+6084>>2];q[a+6084>>2]=c+1;if((c|0)>=10){if((c|0)<30){break a}q[a+6084>>2]=10}q[a+6080>>2]=0;break a}q[a+6080>>2]=0;q[a+6084>>2]=0;b=1;o[a+4765|0]=1}o[(q[a+5748>>2]+a|0)+4720|0]=b}function ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ca+ -64|0;ca=d;e=1;a:{if(qa(a,b,0)){break a}e=0;if(!b){break a}b=xa(b,57672);e=0;if(!b){break a}la(d+8|4,0,52);q[d+56>>2]=1;q[d+20>>2]=-1;q[d+16>>2]=a;q[d+8>>2]=b;ea[q[q[b>>2]+28>>2]](b,d+8|0,q[c>>2],1);a=q[d+32>>2];if((a|0)==1){q[c>>2]=q[d+24>>2]}e=(a|0)==1}a=e;ca=d- -64|0;return a|0}function ta(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;if((b|0)>3){h=b-3|0;while(1){g=c;f=d<<2;c=+u[f+a>>2];e=c*c;c=+u[(f|4)+a>>2];e=e+c*c;c=+u[(f|8)+a>>2];e=e+c*c;c=+u[(f|12)+a>>2];c=g+(e+c*c);d=d+4|0;if((h|0)>(d|0)){continue}break}d=b&-4}if((b|0)>(d|0)){while(1){g=c;c=+u[(d<<2)+a>>2];c=g+c*c;d=d+1|0;if((d|0)!=(b|0)){continue}break}}return c}function za(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=q[a+12>>2];c=q[a+16>>2];a:{if(c>>>0>=b>>>0){d=c;break a}e=q[a+8>>2];g=q[a+4>>2];while(1){if(e>>>0>>0){e=e+1|0;q[a+8>>2]=e;d=r[q[a>>2]+(g-e|0)|0]}else{d=0}f=d<>2]=d-b;q[a+12>>2]=f>>>b;q[a+20>>2]=q[a+20>>2]+b;return(-1<>2];if(!((d^-1)&d-16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=r[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function Qc(a,b,c){var d=0,e=0,f=0,g=0;g=c&65532;if(g){while(1){d=e<<2;f=d+a|0;u[f>>2]=u[f>>2]*b;f=(d|4)+a|0;u[f>>2]=u[f>>2]*b;f=(d|8)+a|0;u[f>>2]=u[f>>2]*b;d=(d|12)+a|0;u[d>>2]=u[d>>2]*b;e=e+4|0;if(g>>>0>e>>>0){continue}break}}if((c|0)>(e|0)){while(1){d=(e<<2)+a|0;u[d>>2]=u[d>>2]*b;e=e+1|0;if((e|0)!=(c|0)){continue}break}}}function Kf(a,b,c,d,e,f){var g=x(0),h=0,i=0,j=x(0),k=0;if((f|0)>=1){k=e+5|0;while(1){i=(-2-q[(h<<2)+d>>2]<<2)+c|0;Lf(i,e,a);Mf(i,c,e,b);g=x(ta(c,k));j=x(x(x(u[a>>2]+u[a+96>>2])*x(.014999999664723873))+x(1));g=x(x(1)/(g>j?g:j));Qc(a,g,25);Qc(b,g,5);b=b+20|0;a=a+100|0;c=(e<<2)+c|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}}}function Nf(a,b,c,d){var e=0,f=0,g=0,h=0;h=d&65532;if(h){while(1){e=f<<2;u[e+a>>2]=u[b+e>>2]*c;g=e|4;u[g+a>>2]=u[b+g>>2]*c;g=e|8;u[g+a>>2]=u[b+g>>2]*c;e=e|12;u[e+a>>2]=u[b+e>>2]*c;f=f+4|0;if(h>>>0>f>>>0){continue}break}}if((d|0)>(f|0)){while(1){e=f<<2;u[e+a>>2]=u[b+e>>2]*c;f=f+1|0;if((f|0)!=(d|0)){continue}break}}}function pf(a,b){var c=0,d=0,e=0;q[a+4608>>2]=b;e=q[a+4576>>2];b=q[a+4580>>2]==2?(((e|0)/-16|0)+b|0)-2e3|0:b;d=38704;c=106;a:{b:{switch(e-8|0){case 4:d=38816;c=154;break a;case 0:break a;default:break b}}d=38976;c=190}b=((b+200|0)/400|0)-10|0;b=(b|0)<(c|0)?b:c;if((b|0)>=1){b=w(r[b+d|0],21)}else{b=0}q[a+4716>>2]=b}function Nd(a,b,c){var d=0,e=0,f=0;if(c>>>0<9){d=8-c|0;e=(-1<>2]){a=q[a>>2];o[a|0]=r[a|0]&(e^-1)|b<>2];if((f|0)>=0){q[a+40>>2]=(e^-1)&f|b<>2]<=-2147483648>>>c>>>0){q[a+32>>2]=q[a+32>>2]&(e<<23^-1)|b<<31-c;return}q[a+44>>2]=-1;return}ja(8730,8690,217);G()}function Hd(a,b){var c=0,d=0,e=0,f=0,g=0;d=1;if((b|0)>=1){if((b|0)!=1){while(1){f=p[(d<<1)+a>>1];c=d;a:{while(1){g=c-1|0;e=p[(g<<1)+a>>1];if((e|0)<=(f|0)){break a}p[(c<<1)+a>>1]=e;e=(c|0)>1;c=g;if(e){continue}break}c=0}p[(c<<1)+a>>1]=f;d=d+1|0;if((d|0)!=(b|0)){continue}break}}return}ja(8920,8908,144);G()}function wf(a,b,c){var d=0,e=x(0),f=0;f=a+4769|0;d=0;a:{if(c){break a}e=x(x(u[b+708>>2]*x(q[a+5744>>2]+q[a+4616>>2]|0))*x(.10000000149011612));d=2;if(e>x(2)){break a}d=0;if(e>2]=x(p[(d<<1)+6424>>1])*x(6103515625e-14)}function nb(a,b,c){var d=0,e=x(0),f=x(0);a:{if((b|0)<1){break a}while(1){f=e;e=u[(d<<2)+a>>2];e=x(f+x(e*e));d=d+1|0;if((d|0)!=(b|0)){continue}break}if((b|0)<1){break a}c=x(x(x(1)/x(F(x(e+x(1.0000000036274937e-15)))))*c);d=0;while(1){u[a>>2]=c*u[a>>2];a=a+4|0;d=d+1|0;if((d|0)!=(b|0)){continue}break}}}function $b(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=q[a+8>>2];if((e|0)>=1){i=((c<<1)+d|0)-1|0;j=q[a+104>>2];h=q[a+32>>2];g=s[h>>1];while(1){k=g<<16;l=(f<<2)+b|0;e=r[(w(e,i)+f|0)+j|0]- -64|0;f=f+1|0;g=p[(f<<1)+h>>1];q[l>>2]=w(e,w(g-(k>>16)<>2;e=q[a+8>>2];if((e|0)>(f|0)){continue}break}}}function yc(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;if((e|0)>=1){f=q[a>>2];g=p[d+2>>1];h=p[d>>1];d=0;while(1){f=(p[(d<<1)+c>>1]<<8)+f|0;q[(d<<2)+b>>2]=f;j=q[a+4>>2];f=f<<2;i=f&65532;f=f>>16;q[a+4>>2]=(w(i,g)>>16)+w(f,g);f=(w(f,h)+j|0)+(w(h,i)>>16)|0;q[a>>2]=f;d=d+1|0;if((e|0)!=(d|0)){continue}break}}}function pg(a,b,c){var d=0,e=0,f=x(0),g=0,h=0,i=0,j=x(0);if((b|0)!=(c|0)){e=q[a>>2];if((e|0)>=1){f=u[a+4>>2];i=q[a+44>>2];while(1){g=(d<<3)+b|0;j=u[g>>2];h=(p[(d<<1)+i>>1]<<3)+c|0;u[h+4>>2]=f*u[g+4>>2];u[h>>2]=f*j;d=d+1|0;if((e|0)!=(d|0)){continue}break}}Ya(a,c);return}ja(31720,31777,580);G()}function nd(a,b){var c=0,d=0;a:{while(1){if(u[(c<<2)+39840>>2]>a){break a}c=c+1|0;if((c|0)!=21){continue}break}c=21}b:{c:{if((b|0)<(c|0)){d=b<<2;if(x(u[d+39840>>2]+u[d+39936>>2])>a){break c}}if((b|0)<=(c|0)){break b}d=(b<<2)-4|0;if(x(u[d+39840>>2]-u[d+39936>>2])>>0<1){d=a;break a}while(1){d=xg(a,b);e=da;f=e;c=c-1|0;g=c,h=yg(d,e,-10,-1)+a|48,o[g|0]=h;e=b>>>0>9;a=d;b=f;if(e){continue}break}}if(d){while(1){c=c-1|0;a=(d>>>0)/10|0;o[c|0]=w(a,-10)+d|48;b=d>>>0>9;d=a;if(b){continue}break}}return c}function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(qa(a,q[b+8>>2],0)){vb(b,c,d);return}e=q[a+12>>2];f=a+16|0;dc(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){dc(a,b,c,d);a=a+8|0;if(e>>>0<=a>>>0){break a}if(!r[b+54|0]){continue}break}}}function Mc(a,b,c){var d=0,e=0,f=0,g=x(0),h=0;e=ca+ -64|0;ca=e;if((c|0)>=1){while(1){d=f<<2;h=d+e|0;g=zg(x(u[b+d>>2]*x(65536)));a:{if(x(y(g))>2]=d;f=f+1|0;if((f|0)!=(c|0)){continue}break}}Jf(a,e,c);ca=e- -64|0}function Pe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;b=gg(q[a+8>>2],b,c,q[a+12>>2]);c=w(b,q[a>>2]);if((c|0)>=1){a=q[a+12>>2];while(1){f=e<<2;g=a+(e<<1)|0;p[f+d>>1]=r[g|0];p[(f|2)+d>>1]=r[g+1|0];e=e+1|0;if((c|0)!=(e|0)){continue}break}}return b|0}function Eb(a,b,c,d,e){var f=0,g=0,h=0;a:{if((d|0)>-1){if((d|0)>4){break a}if((e|0)>0){while(1){g=f<<1;h=s[g+b>>1];p[a+g>>1]=(w(s[c+g>>1]-h<<16>>16,d)>>>2|0)+h;f=f+1|0;if((f|0)!=(e|0)){continue}break}}return}ja(37421,37453,45);G()}ja(37472,37453,46);G()}function Jb(a,b,c){var d=0,e=0,f=0;d=b-1|0;if((b|0)>=2){f=c-65536|0;b=0;while(1){e=(b<<1)+a|0;p[e>>1]=(w(p[e>>1],c)>>>15|0)+1>>>1;c=((w(c,f)>>15)+1>>1)+c|0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}a=(d<<1)+a|0;p[a>>1]=(w(p[a>>1],c)>>>15|0)+1>>>1}function zb(a,b){var c=0,d=0,e=0,f=0;c=a*a;d=c*.5;e=1-d;f=1-e-d;d=c*c;return e+(f+(c*(c*(c*(c*2480158728947673e-20+ -.001388888888887411)+.0416666666666666)+d*d*(c*(c*-1.1359647557788195e-11+2.087572321298175e-9)+ -2.7557314351390663e-7))-a*b))}function zc(a,b,c){var d=0,e=0;d=ca-304|0;ca=d;e=-1;a:{if((b|0)<1){break a}e=0;if((b|0)==(c|0)){break a}e=-1;if((b|0)>(c|0)){break a}q[d+4>>2]=0;e=Bc(d,ra((a+c|0)-b|0,a,b),b);if(e){break a}a=Ac(d,q[d+4>>2],a,c,1);e=a>>31&a}ca=d+304|0;return e}function Jc(a){var b=0;a:{b:{c:{d:{if((a|0)<=15999){if((a|0)==8e3){break d}if((a|0)!=12e3){break c}return 4}if((a|0)==16e3){break b}b=1;if((a|0)==48e3){break a}if((a|0)!=24e3){break c}return 2}return 6}ja(1067,1087,84);G()}b=3}return b}function La(a){var b=0;a:{if((a|0)<=-1){b=0;if((a|0)<-191){break a}a=0-a|0;b=a>>>3&536870908;return q[b+35072>>2]-w(p[b+35104>>1],a&31)|0}b=32767;if((a|0)>191){break a}b=a>>>3&536870908;b=w(p[b+35104>>1],a&31)+q[b+35136>>2]|0}return b}function Na(a){var b=0,c=0,d=0;b=0;a:{if((a|0)<0){break a}b=2147483647;if((a|0)>3966){break a}b=a&127;c=a>>>7|0;d=1<>16)+b<>7:w((w(w(128-b|0,b),-174)>>16)+b|0,d>>>7|0))|0}return b}function wg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=c>>>16|0;f=a>>>16|0;j=w(e,f);g=c&65535;h=a&65535;i=w(g,h);f=(i>>>16|0)+w(f,g)|0;e=(f&65535)+w(e,h)|0;a=(w(b,c)+j|0)+w(a,d)+(f>>>16)+(e>>>16)|0;b=i&65535|e<<16;da=a;return b}function qa(a,b,c){if(!c){return q[a+4>>2]==q[b+4>>2]}if((a|0)==(b|0)){return 1}c=ca-16|0;q[c+8>>2]=a;q[c+12>>2]=q[q[c+8>>2]+4>>2];c=q[c+12>>2];a=ca-16|0;q[a+8>>2]=b;q[a+12>>2]=q[q[a+8>>2]+4>>2];return!de(c,q[a+12>>2])}function hc(a,b){var c=0,d=0;c=a*a;d=c*a;return a-(c*(b*.5-d*(c*(c*c)*(c*1.58969099521155e-10+ -2.5050760253406863e-8)+(c*(c*27557313707070068e-22+ -.0001984126982985795)+.00833333333332249)))-b+d*.16666666666666632)}function vb(a,b,c){var d=0;d=q[a+16>>2];if(!d){q[a+36>>2]=1;q[a+24>>2]=c;q[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(q[a+24>>2]!=2){break a}q[a+24>>2]=c;return}o[a+54|0]=1;q[a+24>>2]=2;q[a+36>>2]=q[a+36>>2]+1}}function Re(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if((c|0)>0){while(1){g=f<<2;p[(f<<1)+b>>1]=s[(g|2)+b>>1]<<8|s[b+g>>1];f=f+1|0;if((f|0)!=(c|0)){continue}break}}return bf(q[a+4>>2],b,e,d)|0}function vg(a){var b=0,c=0,d=0,e=0;b=q[a+2340>>2];e=32767/(b+1|0)|0;if((b|0)>=1){while(1){d=e+d|0;p[((c<<1)+a|0)+4052>>1]=d;c=c+1|0;if((b|0)!=(c|0)){continue}break}}a=a+4148|0;q[a>>2]=0;q[a+4>>2]=3176576}function Fa(a,b,c,d,e){var f=0;f=ca-256|0;ca=f;if(!(e&73728|(c|0)<=(d|0))){c=c-d|0;d=c>>>0<256;la(f,b&255,d?c:256);if(!d){while(1){Ha(a,f,256);c=c-256|0;if(c>>>0>255){continue}break}}Ha(a,f,c)}ca=f+256|0}function Db(a){var b=0;la(a+4|0,0,4260);q[a+4168>>2]=0;q[a>>2]=65536;q[a+2376>>2]=1;vg(a);b=a+4244|0;q[b>>2]=65536;q[b+4>>2]=65536;b=a+4256|0;q[b>>2]=2;q[b+4>>2]=20;q[a+4172>>2]=q[a+2328>>2]<<7;return 0}function he(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ca-16|0;ca=e;a=W(q[a+60>>2],b|0,c|0,d&255,e+8|0)|0;b=0;a:{if(!a){break a}q[14656]=a;b=-1}a=b;ca=e+16|0;da=a?-1:q[e+12>>2];return(a?-1:q[e+8>>2])|0}function fb(a,b,c){var d=x(0),e=0,f=0;e=b-1|0;a:{if((b|0)<2){d=c;break a}b=0;d=c;while(1){f=(b<<2)+a|0;u[f>>2]=d*u[f>>2];d=x(d*c);b=b+1|0;if((e|0)!=(b|0)){continue}break}}a=(e<<2)+a|0;u[a>>2]=d*u[a>>2]}function Ye(a){var b=0;b=r[a+74|0];o[a+74|0]=b-1|b;b=q[a>>2];if(b&8){q[a>>2]=b|32;return-1}q[a+4>>2]=0;q[a+8>>2]=0;b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];return 0}function Ib(a,b){a=r[a|0];if(a&128){return(b<<(a>>>3&3))/400|0}if((a&96)==96){if(a&8){return(b|0)/50|0}return(b|0)/100|0}a=a>>>3&3;if((a|0)==3){return(w(b,60)|0)/1e3|0}return(b<>2]=0;q[a+28>>2]=-2147483648;q[a+16>>2]=0;q[a+20>>2]=33;q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=b;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=-1;q[a+44>>2]=0;q[a+4>>2]=c}function Nb(a){var b=0,c=0,d=0,e=0,f=0;b=31-z(a)>>1;c=1<>>0>a>>>0;a=a-(d?0:f)|0;e=(d?0:c)+e|0;d=(b|0)>0;c=c>>>1|0;b=b-1|0;if(d){continue}break}return e}function dc(a,b,c,d){var e=0,f=0,g=0,h=0;f=q[a+4>>2];a=q[a>>2];g=a;h=b;e=0;a:{if(!c){break a}b=f>>8;e=b;if(!(f&1)){break a}e=q[b+q[c>>2]>>2]}ea[q[q[a>>2]+28>>2]](g,h,e+c|0,f&2?d:2)}function zf(a,b,c){var d=0;d=ca-32|0;ca=d;Ga(d,b,c);if((c|0)>=1){b=0;while(1){u[(b<<2)+a>>2]=x(p[(b<<1)+d>>1])*x(.000244140625);b=b+1|0;if((c|0)!=(b|0)){continue}break}}ca=d+32|0}function pa(a){var b=0,c=0;b=z(a);c=24-b|0;a:{if(!c){break a}if(a>>>0<=127){a=a<>>56-b;break a}a=a<>>c}a=a&127;return(a-(b<<7)+(w(w(a,128-a|0),179)>>>16)|0)+3968|0}function Uc(a,b,c,d){var e=0,f=0,g=0,h=x(0);e=(c|0)<(d|0)?c:d;if((e|0)>=1){d=0;while(1){f=d<<2;g=f+a|0,h=x(Wa(b,b+f|0,c-d|0)),u[g>>2]=h;d=d+1|0;if((e|0)!=(d|0)){continue}break}}}function cc(a,b){a:{if(!b){break a}b=xa(b,57932);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(!qa(q[a+12>>2],q[b+12>>2],0)){break a}return qa(q[a+16>>2],q[b+16>>2],0)}return 0}function df(a,b){var c=x(0),d=x(0),e=x(0),f=0;while(1){d=u[(f<<2)+a>>2];c=cd?e:d;f=f+1|0;if((f|0)!=720){continue}break}c=x(-c);return x(x(1)/x(1<=(c>2];a=q[a+4>>2];b=(a>>1)+b|0;h=b;if(a&1){g=q[g+q[b>>2]>>2]}return ea[g|0](h,c,d,e,f)|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ca-16|0;ca=e;q[e+12>>2]=b;q[e+8>>2]=c;q[e+4>>2]=d;a=ea[a|0](e+12|0,e+8|0,e+4|0)|0;ca=e+16|0;return a|0}function Oe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=q[a>>2];a=q[a+4>>2];b=(a>>1)+b|0;g=b;if(a&1){f=q[f+q[b>>2]>>2]}return ea[f|0](g,c,d,e)|0}function se(a){a=a|0;var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;a=ca-16|0;q[a+8>>2]=q[b+12>>2];q[a+12>>2]=q[q[a+8>>2]+4>>2];a=re(q[a+12>>2]);ca=b+16|0;return a|0}function Zf(a,b,c,d){var e=0,f=0,g=0;if((d|0)>=1){while(1){g=e;e=f<<1;e=g+(w(p[e+b>>1],p[a+e>>1])>>c)|0;f=f+1|0;if((f|0)!=(d|0)){continue}break}}return e}function Wd(a,b){var c=0,d=0;c=a;d=b;a:{if(r[a+8|0]&24){a=1}else{a=0;if(!b){break a}b=xa(b,57844);if(!b){break a}a=(r[b+8|0]&24)!=0}a=qa(c,d,a)}return a}function wa(a){var b=0,c=0,d=0;b=q[a+28>>2];c=z(b);d=b>>>16-c|0;b=d>>>12|0;return((((q[a+20>>2]<<3)+(c<<3)|0)-(t[(b<<2)+24544>>2]>>0)|0)-b|0)-248|0}function Oa(a,b){var c=0,d=0;c=q[a+8>>2];if(c+q[a+24>>2]>>>0>b>>>0){ja(8768,8690,238);G()}d=q[a>>2];ra((d+b|0)-c|0,(q[a+4>>2]+d|0)-c|0,c);q[a+4>>2]=b}function zg(a){var b=x(0),c=x(0);b=x(C(a));c=x(a-b);if(!(cx(.5)){return a}c=a;a=x(b*x(.5));b=x(a-x(C(a)))==x(0)?b:c}return b}function $d(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e);return}a=q[a+8>>2];ea[q[q[a>>2]+20>>2]](a,b,c,d,e,f)}function ne(a){var b=0,c=0;b=q[a+28>>2]>>>15|0;q[a+36>>2]=b;b=t[a+32>>2]/(b>>>0)|0;c=b+1|0;a=c-32768|0;return((b^-1)+32768|0)+(a>>>0>c>>>0?0:a)|0}function Me(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=q[a>>2];a=q[a+4>>2];b=(a>>1)+b|0;f=b;if(a&1){e=q[e+q[b>>2]>>2]}return ea[e|0](f,c,d)|0}function ub(a,b,c,d,e,f){var g=0,h=0,i=0;g=q[a+4>>2];h=g>>8;a=q[a>>2];i=a;if(g&1){h=q[q[d>>2]+h>>2]}ea[q[q[a>>2]+20>>2]](i,b,c,d+h|0,g&2?e:2,f)}function jc(a,b){var c=0,d=0;c=t[a+28>>2]/(b>>>0)|0;q[a+36>>2]=c;c=t[a+32>>2]/(c>>>0)|0;d=c+1|0;a=d-b|0;return((c^-1)+b|0)+(a>>>0>d>>>0?0:a)|0}function Mf(a,b,c,d){var e=0,f=0,g=x(0);a=a+16|0;while(1){f=(e<<2)+d|0,g=x(Wa(a,b,c)),u[f>>2]=g;a=a-4|0;e=e+1|0;if((e|0)!=5){continue}break}}function bb(a,b,c,d,e){var f=0,g=0,h=0;f=q[a+4>>2];g=f>>8;a=q[a>>2];h=a;if(f&1){g=q[q[c>>2]+g>>2]}ea[q[q[a>>2]+24>>2]](h,b,c+g|0,f&2?d:2,e)}function hb(a,b){a=la(a,0,10064);q[a+5092>>2]=b;b=pa(3932160);q[a+4664>>2]=1;b=(b<<8)-524288|0;q[a+12>>2]=b;q[a+8>>2]=b;return dg(a+36|0)}function gc(a){var b=0,c=0,d=0;b=q[a>>2];while(1){c=o[b|0];if(c-48>>>0<10){b=b+1|0;q[a>>2]=b;d=(w(d,10)+c|0)-48|0;continue}break}return d}function me(a,b,c,d){if(a|b){while(1){c=c-1|0;o[c|0]=r[(a&15)+57616|0]|d;a=(b&15)<<28|a>>>4;b=b>>>4|0;if(a|b){continue}break}}return c}function Zd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(qa(a,q[b+8>>2],0)){vb(b,c,d);return}a=q[a+8>>2];ea[q[q[a>>2]+28>>2]](a,b,c,d)}function Vb(a,b){var c=0,d=0;if((b|0)>=1){while(1){d=o[a+c|0]+(d<<8)|0;c=c+1|0;if((c|0)!=(b|0)){continue}break}}return d}function le(a,b,c){if(a|b){while(1){c=c-1|0;o[c|0]=a&7|48;a=(b&7)<<29|a>>>3;b=b>>>3|0;if(a|b){continue}break}}return c}function Ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ca-16|0;ca=d;a=q[a+4>>2];q[d>>2]=c;a=af(a,b,d);ca=d+16|0;return a|0}function Le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ca-16|0;ca=d;a=q[a+8>>2];q[d>>2]=c;a=fg(a,b,d);ca=d+16|0;return a|0}function rb(a){var b=0;Db(a);b=Db(a+4264|0);q[a+8536>>2]=0;q[a+8528>>2]=0;q[a+8532>>2]=0;q[a+8548>>2]=0;return b}function De(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52553;K(58228,q[a+12>>2],4,-2147483648,2147483647);ca=a+16|0}function Be(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52570;K(58252,q[a+12>>2],4,-2147483648,2147483647);ca=a+16|0}function $c(a,b){var c=0;if((a|0)<=251){o[b|0]=a;return 1}c=a|-4;o[b|0]=c;o[b+1|0]=a-(c&255)>>>2;return 2}function ja(a,b,c){var d=0;d=ca-16|0;ca=d;q[d+8>>2]=a;q[d+4>>2]=c;q[d>>2]=b;ie(q[14408],d);P();G()}function Ge(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52532;K(58204,q[a+12>>2],2,-32768,32767);ca=a+16|0}function Qd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e)}}function sc(a){a=a|0;var b=0;if(a){Ca(q[a+4>>2]);Ca(q[a+8>>2]);b=q[a+12>>2];if(b){Ca(b)}Ca(a)}}function Je(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52501;K(58168,q[a+12>>2],1,-128,127);ca=a+16|0}function Ie(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52506;K(58192,q[a+12>>2],1,-128,127);ca=a+16|0}function Ee(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52538;K(58216,q[a+12>>2],2,0,65535);ca=a+16|0}function Pd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=ea[a|0](b,c,d,e)|0;X(da|0);return a|0}function He(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52518;K(58180,q[a+12>>2],1,0,255);ca=a+16|0}function Ag(a,b){var c=0,d=0;c=b&31;d=(-1>>>c&a)<>>a} + + + +function Ce(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52557;K(58240,q[a+12>>2],4,0,-1);ca=a+16|0}function Ae(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52575;K(58264,q[a+12>>2],4,0,-1);ca=a+16|0}function ze(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52589;S(58276,q[a+12>>2],4);ca=a+16|0}function ye(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52595;S(58288,q[a+12>>2],8);ca=a+16|0}function xe(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52706;J(53684,0,q[a+12>>2]);ca=a+16|0}function we(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52950;J(53404,4,q[a+12>>2]);ca=a+16|0}function ve(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52980;J(53364,5,q[a+12>>2]);ca=a+16|0}function ue(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=53218;J(53324,6,q[a+12>>2]);ca=a+16|0}function te(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=53249;J(53284,7,q[a+12>>2]);ca=a+16|0}function qc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53644,0,q[b+12>>2]);ca=b+16|0}function pc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53604,1,q[b+12>>2]);ca=b+16|0}function nc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53564,2,q[b+12>>2]);ca=b+16|0}function mc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53524,3,q[b+12>>2]);ca=b+16|0}function lc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53484,4,q[b+12>>2]);ca=b+16|0}function kc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53444,5,q[b+12>>2]);ca=b+16|0}function re(a){var b=0,c=0;b=We(a)+1|0;c=Ra(b);if(!c){return 0}return ka(c,a,b)}function Yd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(qa(a,q[b+8>>2],0)){vb(b,c,d)}}function jd(){var a=0;Ve();a=ca-16|0;ca=a;q[a+12>>2]=58612;rc();ca=a+16|0}function ie(a,b){var c=0;c=ca-16|0;ca=c;q[c+12>>2]=b;oe(a,b);ca=c+16|0}function Md(a){a=a|0;return(a+7>>>0<=7?q[1184-(a<<2)>>2]:1353)|0}function bc(a,b){var c=0,d=0;c=b,d=na(a,6377,8),q[c>>2]=d}function be(a,b,c){a=a|0;b=b|0;c=c|0;return qa(a,b,0)|0}function Ia(a){a=Ra(a?a:1);if(!a){P();G()}return a}function ec(a,b){if(!a){return 0}return ee(a,b)}function Ha(a,b,c){if(!(r[a|0]&32)){Xe(b,c,a)}}function yg(a,b,c,d){a=wg(a,b,c,d);return a}function ge(a){a=a|0;return _(q[a+60>>2])|0}function Ke(a,b){a=a|0;b=b|0;ea[a|0](b)}function Fc(a,b,c,d){Ic(a,b,c,d)} + + + +function xc(a){la(a+12|0,0,13992)}function Ue(a){a=a|0;return 52160}function ce(a){a=a|0;return a|0}function Xc(a,b){ma(a,b,6377,8)}function Sa(a){a=a|0;Ca(a)}function tc(a){a=a|0} +// EMSCRIPTEN_END_FUNCS +a=r;Dg(Ug);var ea=Bg([null,ff,Ue,sc,Te,Se,Re,Qe,Pe,Oe,Ne,Me,Le,Ke,sc,ge,fe,he,ce,Sa,tc,tc,ae,$d,_d,Zd,Sa,be,Sa,Qd,Sd,Yd,Sa,Rd,Td,Xd,Sa,Vd]);function Jg(){return n.byteLength/65536|0}function Kg(Vg){Vg=Vg|0;var fa=Jg()|0;var ga=fa+Vg|0;if(fa=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d} +function xa(b,a,c){var d=D;if(0=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}if(127>=f){if(a>=c)break;d[a++]=f}else{if(2047>=f){if(a+1>=c)break;d[a++]=192|f>>6}else{if(65535>=f){if(a+2>=c)break;d[a++]=224|f>>12}else{if(a+3>=c)break;d[a++]=240|f>>18;d[a++]=128|f>>12&63}d[a++]=128|f>>6&63}d[a++]=128|f&63}}d[a]=0}}var ya="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function za(b,a){var c=b>>1;for(var d=c+a/2;!(c>=d)&&Aa[c];)++c;c<<=1;if(32=a/2);++d){var e=E[b+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}function Ba(b,a,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=a;c=c<2*b.length?c/2:b.length;for(var e=0;e>1]=b.charCodeAt(e),a+=2;E[a>>1]=0;return a-d}function Ca(b){return 2*b.length} +function Da(b,a){for(var c=0,d="";!(c>=a/4);){var e=F[b+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function Ea(b,a,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=a;c=d+c-4;for(var e=0;e=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}F[a>>2]=f;a+=4;if(a+4>c)break}F[a>>2]=0;return a-d} +function Fa(b){for(var a=0,c=0;c=d&&++c;a+=4}return a}var G,H,D,E,Aa,F,I,Ga,Ha;function Ia(b){G=b;g.HEAP8=H=new Int8Array(b);g.HEAP16=E=new Int16Array(b);g.HEAP32=F=new Int32Array(b);g.HEAPU8=D=new Uint8Array(b);g.HEAPU16=Aa=new Uint16Array(b);g.HEAPU32=I=new Uint32Array(b);g.HEAPF32=Ga=new Float32Array(b);g.HEAPF64=Ha=new Float64Array(b)}var oa=g.INITIAL_MEMORY||16777216;g.wasmMemory?C=g.wasmMemory:C=new na;C&&(G=C.buffer);oa=G.byteLength;Ia(G); +var Ja,Ka=[],La=[],Ma=[],Na=[];La.push({ea:function(){Oa()}});function Qa(){var b=g.preRun.shift();Ka.unshift(b)}var J=0,Ra=null,Sa=null;g.preloadedImages={};g.preloadedAudios={};function B(b){if(g.onAbort)g.onAbort(b);la(b);ta=!0;b=new sa("abort("+b+"). Build with -s ASSERTIONS=1 for more info.");ba(b);throw b;}function Ta(b){var a=Ua;return String.prototype.startsWith?b.startsWith(a):0===b.indexOf(a)}var Ua="data:application/octet-stream;base64,",Va="opusscript_native_nasm.wasm"; +if(!Ta(Va)){var Wa=Va;Va=g.locateFile?g.locateFile(Wa,y):y+Wa} +function Xa(){var b=Va;try{try{if(b==Va&&ma)new Uint8Array(ma);else if(!A(b))if(z)z(b);else throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";}catch(d){B(d)}var a=new pa;var c=new qa}catch(d){throw b=d.toString(),la("failed to compile wasm module: "+b),(0<=b.indexOf("imported Memory")||0<=b.indexOf("memory import"))&&la("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),d; +}return[c,a]}var K,Ya;function Za(b){for(;0>2]=a};this.pa=function(a){F[this.G+0>>2]=a};this.qa=function(){F[this.G+4>>2]=0};this.oa=function(){H[this.G+12>>0]=0};this.ra=function(){H[this.G+13>>0]=0};this.ia=function(a,c){this.sa(a);this.pa(c);this.qa();this.oa();this.ra()}} +var ab=0;function bb(b){switch(b){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+b);}}var cb=void 0;function L(b){for(var a="";D[b];)a+=cb[D[b++]];return a}var M={},N={},db={};function eb(b){if(void 0===b)return"_unknown";b=b.replace(/[^a-zA-Z0-9_]/g,"$");var a=b.charCodeAt(0);return 48<=a&&57>=a?"_"+b:b} +function fb(b,a){b=eb(b);return(new Function("body","return function "+b+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(a)}function gb(b){var a=Error,c=fb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var O=void 0;function P(b){throw new O(b);}var hb=void 0;function ib(b){throw new hb(b);}function Q(b,a,c){function d(h){h=c(h);h.length!==b.length&&ib("Mismatched type converter count");for(var n=0;n>2])}function Eb(b,a,c){if(a===c)return b;if(void 0===c.M)return null;b=Eb(b,a,c.M);return null===b?null:c.da(b)}var Fb={}; +function Gb(b,a){for(void 0===a&&P("ptr should not be undefined");b.M;)a=b.V(a),b=b.M;return Fb[a]}function Hb(b,a){a.I&&a.G||ib("makeClassHandle requires ptr and ptrType");!!a.L!==!!a.K&&ib("Both smartPtrType and smartPtr must be specified");a.count={value:1};return ob(Object.create(b,{F:{value:a}}))}function U(b,a,c,d){this.name=b;this.H=a;this.Z=c;this.W=d;this.X=!1;this.P=this.ma=this.la=this.aa=this.ta=this.ja=void 0;void 0!==a.M?this.toWireType=Ab:(this.toWireType=d?zb:Cb,this.N=null)} +function Ib(b,a){g.hasOwnProperty(b)||ib("Replacing nonexistant public symbol");g[b]=a;g[b].R=void 0}function Jb(b,a){var c=[];return function(){c.length=arguments.length;for(var d=0;df&&P("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==a[1]&&null!==c,h=!1;for(c=1;c>2)+d]);return c}var Sb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; +function Bb(b){switch(b){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var a=Sb.length?Sb.pop():Y.length;Y[a]={na:1,value:b};return a}}function T(b){if(null===b)return"null";var a=typeof b;return"object"===a||"array"===a||"function"===a?b.toString():""+b}function Tb(b,a){switch(a){case 2:return function(c){return this.fromWireType(Ga[c>>2])};case 3:return function(c){return this.fromWireType(Ha[c>>3])};default:throw new TypeError("Unknown float type: "+b);}} +function Ub(b,a,c){switch(a){case 0:return c?function(d){return H[d]}:function(d){return D[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return Aa[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return I[d>>2]};default:throw new TypeError("Unknown integer type: "+b);}}for(var Vb=[null,[],[]],Wb=Array(256),Xb=0;256>Xb;++Xb)Wb[Xb]=String.fromCharCode(Xb);cb=Wb;O=g.BindingError=gb("BindingError");hb=g.InternalError=gb("InternalError"); +S.prototype.isAliasOf=function(b){if(!(this instanceof S&&b instanceof S))return!1;var a=this.F.I.H,c=this.F.G,d=b.F.I.H;for(b=b.F.G;a.M;)c=a.V(c),a=a.M;for(;d.M;)b=d.V(b),d=d.M;return a===d&&c===b};S.prototype.clone=function(){this.F.G||kb(this);if(this.F.U)return this.F.count.value+=1,this;var b=ob(Object.create(Object.getPrototypeOf(this),{F:{value:jb(this.F)}}));b.F.count.value+=1;b.F.S=!1;return b}; +S.prototype["delete"]=function(){this.F.G||kb(this);this.F.S&&!this.F.U&&P("Object already scheduled for deletion");mb(this);nb(this.F);this.F.U||(this.F.K=void 0,this.F.G=void 0)};S.prototype.isDeleted=function(){return!this.F.G};S.prototype.deleteLater=function(){this.F.G||kb(this);this.F.S&&!this.F.U&&P("Object already scheduled for deletion");qb.push(this);1===qb.length&&pb&&pb(rb);this.F.S=!0;return this};U.prototype.ga=function(b){this.aa&&(b=this.aa(b));return b}; +U.prototype.$=function(b){this.P&&this.P(b)};U.prototype.argPackAdvance=8;U.prototype.readValueFromPointer=Db;U.prototype.deleteObject=function(b){if(null!==b)b["delete"]()}; +U.prototype.fromWireType=function(b){function a(){return this.X?Hb(this.H.T,{I:this.ja,G:c,L:this,K:b}):Hb(this.H.T,{I:this,G:b})}var c=this.ga(b);if(!c)return this.$(b),null;var d=Gb(this.H,c);if(void 0!==d){if(0===d.F.count.value)return d.F.G=c,d.F.K=b,d.clone();d=d.clone();this.$(b);return d}d=this.H.fa(c);d=ub[d];if(!d)return a.call(this);d=this.W?d.ba:d.pointerType;var e=Eb(c,this.H,d.H);return null===e?a.call(this):this.X?Hb(d.H.T,{I:d,G:e,L:this,K:b}):Hb(d.H.T,{I:d,G:e})}; +g.getInheritedInstanceCount=function(){return Object.keys(Fb).length};g.getLiveInheritedInstances=function(){var b=[],a;for(a in Fb)Fb.hasOwnProperty(a)&&b.push(Fb[a]);return b};g.flushPendingDeletes=rb;g.setDelayFunction=function(b){pb=b;qb.length&&pb&&pb(rb)};Kb=g.UnboundTypeError=gb("UnboundTypeError");g.count_emval_handles=function(){for(var b=0,a=5;a>4; +e=(e&15)<<4|f>>2;var h=(f&3)<<6|l;a+=String.fromCharCode(d);64!==f&&(a+=String.fromCharCode(e));64!==l&&(a+=String.fromCharCode(h))}while(c>f])},N:null})},v:function(b,a,c,d,e,f,l,h,n,k,m,p,q){m=L(m);f=V(e,f);h&&(h=V(l,h));k&&(k= +V(n,k));q=V(p,q);var x=eb(m);wb(x,function(){Nb("Cannot construct "+m+" due to unbound types",[d])});Q([b,a,c],d?[d]:[],function(u){u=u[0];if(d){var wa=u.H;var ja=wa.T}else ja=S.prototype;u=fb(x,function(){if(Object.getPrototypeOf(this)!==Pa)throw new O("Use 'new' to construct "+m);if(void 0===W.O)throw new O(m+" has no accessible constructor");var sb=W.O[arguments.length];if(void 0===sb)throw new O("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ +Object.keys(W.O).toString()+") parameters instead!");return sb.apply(this,arguments)});var Pa=Object.create(ja,{constructor:{value:u}});u.prototype=Pa;var W=new xb(m,u,Pa,q,wa,f,h,k);wa=new U(m,W,!0,!1);ja=new U(m+"*",W,!1,!1);var tb=new U(m+" const*",W,!1,!0);ub[b]={pointerType:ja,ba:tb};Ib(x,u);return[wa,ja,tb]})},n:function(b,a,c,d,e,f,l){var h=Rb(c,d);a=L(a);f=V(e,f);Q([],[b],function(n){function k(){Nb("Cannot call "+m+" due to unbound types",h)}n=n[0];var m=n.name+"."+a,p=n.H.constructor;void 0=== +p[a]?(k.R=c-1,p[a]=k):(vb(p,a,m),p[a].J[c-1]=k);Q([],h,function(q){q=[q[0],null].concat(q.slice(1));q=Qb(m,q,null,f,l);void 0===p[a].J?(q.R=c-1,p[a]=q):p[a].J[c-1]=q;return[]});return[]})},u:function(b,a,c,d,e,f){assert(0>>h}}var n=-1!=a.indexOf("unsigned");R(b,{name:a,fromWireType:f,toWireType:function(k, +m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+T(m)+'" to '+this.name);if(me)throw new TypeError('Passing a number "'+T(m)+'" from JS side to C/C++ side to an argument of type "'+a+'", which is outside the valid range ['+d+", "+e+"]!");return n?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Ub(a,l,0!==d),N:null})},b:function(b,a,c){function d(f){f>>=2;var l=I;return new e(G,l[f+1],l[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array, +Float32Array,Float64Array][a];c=L(c);R(b,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ha:!0})},g:function(b,a){a=L(a);var c="std::string"===a;R(b,{name:a,fromWireType:function(d){var e=I[d>>2];if(c)for(var f=d+4,l=0;l<=e;++l){var h=d+4+l;if(l==e||0==D[h]){f=f?va(D,f,h-f):"";if(void 0===n)var n=f;else n+=String.fromCharCode(0),n+=f;f=h+1}}else{n=Array(e);for(l=0;l=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++k:k=2047>=p?k+2:65535>=p?k+3:k+4}return k}:function(){return e.length})(),h=$b(4+l+1);I[h>>2]=l;if(c&&f)xa(e,h+4,l+1);else if(f)for(f=0;f>2],m=l(),p,q=n+4,x=0;x<=k;++x){var u=n+4+x*a;if(x==k||0==m[u>>h])q=d(q,u-q),void 0===p? +p=q:(p+=String.fromCharCode(0),p+=q),q=u+a}X(n);return p},toWireType:function(n,k){"string"!==typeof k&&P("Cannot pass non-string to C++ string type "+c);var m=f(k),p=$b(4+m+a);I[p>>2]=m>>h;e(k,p+4,m+a);null!==n&&n.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Db,N:function(n){X(n)}})},m:function(b,a){a=L(a);R(b,{ua:!0,name:a,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},h:function(){B()},q:function(b,a,c){D.copyWithin(b,a,a+c)},d:function(b){b>>>=0;var a=D.length; +if(2147483648=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);d=Math.max(16777216,b,d);0>>16);Ia(C.buffer);var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},s:function(){return 0},o:function(){},r:function(b,a,c,d){for(var e=0,f=0;f>2],h=F[a+(8*f+4)>>2],n=0;n> +2]=e;return 0},a:C,p:function(){}},Z=function(){function b(c){g.asm=c.exports;Ja=g.asm.A;J--;g.monitorRunDependencies&&g.monitorRunDependencies(J);0==J&&(null!==Ra&&(clearInterval(Ra),Ra=null),Sa&&(c=Sa,Sa=null,c()))}var a={a:ra};J++;g.monitorRunDependencies&&g.monitorRunDependencies(J);if(g.instantiateWasm)try{return g.instantiateWasm(a,b)}catch(c){return la("Module.instantiateWasm callback failed with error: "+c),!1}a=Xa();b(a[0],a[1]);return g.asm}(),Oa=g.___wasm_call_ctors=Z.w; +g._opus_strerror=Z.x;var $b=g._malloc=Z.y,X=g._free=Z.z,Mb=g.___getTypeName=Z.B;g.___embind_register_native_and_builtin_types=Z.C;g.dynCall_jiji=Z.D; +g.setValue=function(b,a,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":H[b>>0]=a;break;case "i8":H[b>>0]=a;break;case "i16":E[b>>1]=a;break;case "i32":F[b>>2]=a;break;case "i64":Ya=[a>>>0,(K=a,1<=+Math.abs(K)?0>>0:~~+Math.ceil((K-+(~~K>>>0))/4294967296)>>>0:0)];F[b>>2]=Ya[0];F[b+4>>2]=Ya[1];break;case "float":Ga[b>>2]=a;break;case "double":Ha[b>>3]=a;break;default:B("invalid type for setValue: "+c)}}; +g.getValue=function(b,a){a=a||"i8";"*"===a.charAt(a.length-1)&&(a="i32");switch(a){case "i1":return H[b>>0];case "i8":return H[b>>0];case "i16":return E[b>>1];case "i32":return F[b>>2];case "i64":return F[b>>2];case "float":return Ga[b>>2];case "double":return Ha[b>>3];default:B("invalid type for getValue: "+a)}return null};var ac;Sa=function bc(){ac||cc();ac||(Sa=bc)}; +function cc(){function b(){if(!ac&&(ac=!0,g.calledRun=!0,!ta)){Za(La);Za(Ma);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var a=g.postRun.shift();Na.unshift(a)}Za(Na)}}if(!(0=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d} +function qa(b,a,c){var d=B;if(0=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}if(127>=f){if(a>=c)break;d[a++]=f}else{if(2047>=f){if(a+1>=c)break;d[a++]=192|f>>6}else{if(65535>=f){if(a+2>=c)break;d[a++]=224|f>>12}else{if(a+3>=c)break;d[a++]=240|f>>18;d[a++]=128|f>>12&63}d[a++]=128|f>>6&63}d[a++]=128|f&63}}d[a]=0}}var sa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function ta(b,a){var c=b>>1;for(var d=c+a/2;!(c>=d)&&ua[c];)++c;c<<=1;if(32=a/2);++d){var e=C[b+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}function va(b,a,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=a;c=c<2*b.length?c/2:b.length;for(var e=0;e>1]=b.charCodeAt(e),a+=2;C[a>>1]=0;return a-d}function wa(b){return 2*b.length} +function xa(b,a){for(var c=0,d="";!(c>=a/4);){var e=D[b+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function ya(b,a,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=a;c=d+c-4;for(var e=0;e=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}D[a>>2]=f;a+=4;if(a+4>c)break}D[a>>2]=0;return a-d} +function za(b){for(var a=0,c=0;c=d&&++c;a+=4}return a}var Aa,E,B,C,ua,D,F,Ba,Ca;function Da(){var b=ma.buffer;Aa=b;g.HEAP8=E=new Int8Array(b);g.HEAP16=C=new Int16Array(b);g.HEAP32=D=new Int32Array(b);g.HEAPU8=B=new Uint8Array(b);g.HEAPU16=ua=new Uint16Array(b);g.HEAPU32=F=new Uint32Array(b);g.HEAPF32=Ba=new Float32Array(b);g.HEAPF64=Ca=new Float64Array(b);g.HEAP64=new BigInt64Array(b)}var Ea,Fa=[],Ga=[],Ha=[],Ia=[];Ga.push({ba:function(){Ja()}}); +function Ka(){var b=g.preRun.shift();Fa.unshift(b)}var G=0,La=null,H=null;g.preloadedImages={};g.preloadedAudios={};function A(b){if(g.onAbort)g.onAbort(b);z(b);na=!0;b=new WebAssembly.RuntimeError("abort("+b+"). Build with -s ASSERTIONS=1 for more info.");ba(b);throw b;}var I="opusscript_native_wasm.wasm";if(String.prototype.startsWith?!I.startsWith("data:application/octet-stream;base64,"):0!==I.indexOf("data:application/octet-stream;base64,")){var Ma=I;I=g.locateFile?g.locateFile(Ma,w):w+Ma} +function Na(b){var a=I;try{a:{try{if(a==I&&la){var c=new Uint8Array(la);break a}if(y){c=y(a);break a}throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";}catch(f){A(f)}c=void 0}var d=new WebAssembly.Module(c);var e=new WebAssembly.Instance(d,b)}catch(f){throw b=f.toString(),z("failed to compile wasm module: "+b),(0<=b.indexOf("imported Memory")||0<=b.indexOf("memory import"))&&z("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."), +f;}return[e,d]}var J,Pa;function Qa(b){for(;0>2]=a};this.na=function(a){D[this.D+0>>2]=a};this.oa=function(){D[this.D+4>>2]=0};this.ma=function(){E[this.D+12>>0]=0};this.pa=function(){E[this.D+13>>0]=0};this.ga=function(a,c){this.qa(a);this.na(c);this.oa();this.ma();this.pa()}} +var Sa=0;function Ta(b){switch(b){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+b);}}var Ua=void 0;function K(b){for(var a="";B[b];)a+=Ua[B[b++]];return a}var L={},M={},Va={};function Wa(b){if(void 0===b)return"_unknown";b=b.replace(/[^a-zA-Z0-9_]/g,"$");var a=b.charCodeAt(0);return 48<=a&&57>=a?"_"+b:b} +function Xa(b,a){b=Wa(b);return(new Function("body","return function "+b+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(a)}function Ya(b){var a=Error,c=Xa(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var N=void 0;function O(b){throw new N(b);}var Za=void 0;function $a(b){throw new Za(b);}function P(b,a,c){function d(h){h=c(h);h.length!==b.length&&$a("Mismatched type converter count");for(var n=0;n>2])}function ub(b,a,c){if(a===c)return b;if(void 0===c.K)return null;b=ub(b,a,c.K);return null===b?null:c.aa(b)}var vb={}; +function wb(b,a){for(void 0===a&&O("ptr should not be undefined");b.K;)a=b.T(a),b=b.K;return vb[a]}function xb(b,a){a.G&&a.D||$a("makeClassHandle requires ptr and ptrType");!!a.J!==!!a.I&&$a("Both smartPtrType and smartPtr must be specified");a.count={value:1};return R(Object.create(b,{C:{value:a}}))}function V(b,a,c,d){this.name=b;this.F=a;this.X=c;this.U=d;this.V=!1;this.N=this.ka=this.ja=this.Z=this.ra=this.ha=void 0;void 0!==a.K?this.toWireType=qb:(this.toWireType=d?pb:sb,this.L=null)} +function yb(b,a){g.hasOwnProperty(b)||$a("Replacing nonexistant public symbol");g[b]=a;g[b].O=void 0}function W(b,a){b=K(b);var c=Ea.get(a);"function"!==typeof c&&O("unknown function pointer with signature "+b+": "+a);return c}var zb=void 0;function Ab(b){b=Bb(b);var a=K(b);X(b);return a}function Cb(b,a){function c(f){e[f]||M[f]||(Va[f]?Va[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};a.forEach(c);throw new zb(b+": "+d.map(Ab).join([", "]));} +function Db(b){var a=Function;if(!(a instanceof Function))throw new TypeError("new_ called with constructor type "+typeof a+" which is not a function");var c=Xa(a.name||"unknownFunctionName",function(){});c.prototype=a.prototype;c=new c;b=a.apply(c,b);return b instanceof Object?b:c}function Eb(b){for(;b.length;){var a=b.pop();b.pop()(a)}} +function Fb(b,a,c,d,e){var f=a.length;2>f&&O("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==a[1]&&null!==c,h=!1;for(c=1;c>2)+d]);return c}var Hb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; +function rb(b){switch(b){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var a=Hb.length?Hb.pop():Y.length;Y[a]={la:1,value:b};return a}}function U(b){if(null===b)return"null";var a=typeof b;return"object"===a||"array"===a||"function"===a?b.toString():""+b}function Ib(b,a){switch(a){case 2:return function(c){return this.fromWireType(Ba[c>>2])};case 3:return function(c){return this.fromWireType(Ca[c>>3])};default:throw new TypeError("Unknown float type: "+b);}} +function Jb(b,a,c){switch(a){case 0:return c?function(d){return E[d]}:function(d){return B[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ua[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return F[d>>2]};default:throw new TypeError("Unknown integer type: "+b);}}for(var Kb=[null,[],[]],Lb=Array(256),Mb=0;256>Mb;++Mb)Lb[Mb]=String.fromCharCode(Mb);Ua=Lb;N=g.BindingError=Ya("BindingError");Za=g.InternalError=Ya("InternalError"); +S.prototype.isAliasOf=function(b){if(!(this instanceof S&&b instanceof S))return!1;var a=this.C.G.F,c=this.C.D,d=b.C.G.F;for(b=b.C.D;a.K;)c=a.T(c),a=a.K;for(;d.K;)b=d.T(b),d=d.K;return a===d&&c===b};S.prototype.clone=function(){this.C.D||bb(this);if(this.C.S)return this.C.count.value+=1,this;var b=R(Object.create(Object.getPrototypeOf(this),{C:{value:ab(this.C)}}));b.C.count.value+=1;b.C.P=!1;return b}; +S.prototype["delete"]=function(){this.C.D||bb(this);this.C.P&&!this.C.S&&O("Object already scheduled for deletion");db(this);eb(this.C);this.C.S||(this.C.I=void 0,this.C.D=void 0)};S.prototype.isDeleted=function(){return!this.C.D};S.prototype.deleteLater=function(){this.C.D||bb(this);this.C.P&&!this.C.S&&O("Object already scheduled for deletion");gb.push(this);1===gb.length&&fb&&fb(hb);this.C.P=!0;return this};V.prototype.ea=function(b){this.Z&&(b=this.Z(b));return b}; +V.prototype.Y=function(b){this.N&&this.N(b)};V.prototype.argPackAdvance=8;V.prototype.readValueFromPointer=tb;V.prototype.deleteObject=function(b){if(null!==b)b["delete"]()}; +V.prototype.fromWireType=function(b){function a(){return this.V?xb(this.F.R,{G:this.ha,D:c,J:this,I:b}):xb(this.F.R,{G:this,D:b})}var c=this.ea(b);if(!c)return this.Y(b),null;var d=wb(this.F,c);if(void 0!==d){if(0===d.C.count.value)return d.C.D=c,d.C.I=b,d.clone();d=d.clone();this.Y(b);return d}d=this.F.da(c);d=ib[d];if(!d)return a.call(this);d=this.U?d.$:d.pointerType;var e=ub(c,this.F,d.F);return null===e?a.call(this):this.V?xb(d.F.R,{G:d,D:e,J:this,I:b}):xb(d.F.R,{G:d,D:e})}; +g.getInheritedInstanceCount=function(){return Object.keys(vb).length};g.getLiveInheritedInstances=function(){var b=[],a;for(a in vb)vb.hasOwnProperty(a)&&b.push(vb[a]);return b};g.flushPendingDeletes=hb;g.setDelayFunction=function(b){fb=b;gb.length&&fb&&fb(hb)};zb=g.UnboundTypeError=Ya("UnboundTypeError");g.count_emval_handles=function(){for(var b=0,a=5;a>f])},L:null})},t:function(b,a,c,d,e,f,l,h,n,k,m,p,q){m=K(m);f=W(e,f);h&&(h=W(l,h));k&&(k= +W(n,k));q=W(p,q);var x=Wa(m);kb(x,function(){Cb("Cannot construct "+m+" due to unbound types",[d])});P([b,a,c],d?[d]:[],function(u){u=u[0];if(d){var ra=u.F;var da=ra.R}else da=S.prototype;u=Xa(x,function(){if(Object.getPrototypeOf(this)!==Oa)throw new N("Use 'new' to construct "+m);if(void 0===T.M)throw new N(m+" has no accessible constructor");var mb=T.M[arguments.length];if(void 0===mb)throw new N("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ +Object.keys(T.M).toString()+") parameters instead!");return mb.apply(this,arguments)});var Oa=Object.create(da,{constructor:{value:u}});u.prototype=Oa;var T=new lb(m,u,Oa,q,ra,f,h,k);ra=new V(m,T,!0,!1);da=new V(m+"*",T,!1,!1);var nb=new V(m+" const*",T,!1,!0);ib[b]={pointerType:da,$:nb};yb(x,u);return[ra,da,nb]})},m:function(b,a,c,d,e,f,l){var h=Gb(c,d);a=K(a);f=W(e,f);P([],[b],function(n){function k(){Cb("Cannot call "+m+" due to unbound types",h)}n=n[0];var m=n.name+"."+a,p=n.F.constructor;void 0=== +p[a]?(k.O=c-1,p[a]=k):(jb(p,a,m),p[a].H[c-1]=k);P([],h,function(q){q=[q[0],null].concat(q.slice(1));q=Fb(m,q,null,f,l);void 0===p[a].H?(q.O=c-1,p[a]=q):p[a].H[c-1]=q;return[]});return[]})},s:function(b,a,c,d,e,f){assert(0>>h}}var n=-1!=a.indexOf("unsigned");Q(b,{name:a,fromWireType:f,toWireType:function(k, +m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+U(m)+'" to '+this.name);if(me)throw new TypeError('Passing a number "'+U(m)+'" from JS side to C/C++ side to an argument of type "'+a+'", which is outside the valid range ['+d+", "+e+"]!");return n?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Jb(a,l,0!==d),L:null})},a:function(b,a,c){function d(f){f>>=2;var l=F;return new e(Aa,l[f+1],l[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array, +Uint32Array,Float32Array,Float64Array][a];c=K(c);Q(b,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{fa:!0})},f:function(b,a){a=K(a);var c="std::string"===a;Q(b,{name:a,fromWireType:function(d){var e=F[d>>2];if(c)for(var f=d+4,l=0;l<=e;++l){var h=d+4+l;if(l==e||0==B[h]){f=f?pa(B,f,h-f):"";if(void 0===n)var n=f;else n+=String.fromCharCode(0),n+=f;f=h+1}}else{n=Array(e);for(l=0;l=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++k:k=2047>=p?k+2:65535>=p?k+3:k+4}return k}:function(){return e.length})(),h=Nb(4+l+1);F[h>>2]=l;if(c&&f)qa(e,h+4,l+1);else if(f)for(f=0;f>2],m=l(),p,q=n+4,x=0;x<=k;++x){var u=n+4+x*a;if(x==k||0==m[u>>h])q=d(q,u-q),void 0=== +p?p=q:(p+=String.fromCharCode(0),p+=q),q=u+a}X(n);return p},toWireType:function(n,k){"string"!==typeof k&&O("Cannot pass non-string to C++ string type "+c);var m=f(k),p=Nb(4+m+a);F[p>>2]=m>>h;e(k,p+4,m+a);null!==n&&n.push(X,p);return p},argPackAdvance:8,readValueFromPointer:tb,L:function(n){X(n)}})},l:function(b,a){a=K(a);Q(b,{sa:!0,name:a,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:function(){A()},n:function(b,a,c){B.copyWithin(b,a,a+c)},c:function(b){b>>>=0;var a=B.length; +if(2147483648=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);d=Math.max(16777216,b,d);0>>16);Da();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},p:function(){return 0},q:function(){},o:function(b,a,c,d){for(var e=0,f=0;f>2],h=D[a+(8*f+4)>>2],n=0;n>2]= +e;return 0}},Z=function(){function b(c){g.asm=c.exports;ma=g.asm.u;Da();Ea=g.asm.z;G--;g.monitorRunDependencies&&g.monitorRunDependencies(G);0==G&&(null!==La&&(clearInterval(La),La=null),H&&(c=H,H=null,c()))}var a={a:Ob};G++;g.monitorRunDependencies&&g.monitorRunDependencies(G);if(g.instantiateWasm)try{return g.instantiateWasm(a,b)}catch(c){return z("Module.instantiateWasm callback failed with error: "+c),!1}a=Na(a);b(a[0],a[1]);return g.asm}(),Ja=g.___wasm_call_ctors=Z.v;g._opus_strerror=Z.w; +var Nb=g._malloc=Z.x,X=g._free=Z.y,Bb=g.___getTypeName=Z.A;g.___embind_register_native_and_builtin_types=Z.B; +g.setValue=function(b,a,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":E[b>>0]=a;break;case "i8":E[b>>0]=a;break;case "i16":C[b>>1]=a;break;case "i32":D[b>>2]=a;break;case "i64":Pa=[a>>>0,(J=a,1<=+Math.abs(J)?0>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];D[b>>2]=Pa[0];D[b+4>>2]=Pa[1];break;case "float":Ba[b>>2]=a;break;case "double":Ca[b>>3]=a;break;default:A("invalid type for setValue: "+c)}}; +g.getValue=function(b,a){a=a||"i8";"*"===a.charAt(a.length-1)&&(a="i32");switch(a){case "i1":return E[b>>0];case "i8":return E[b>>0];case "i16":return C[b>>1];case "i32":return D[b>>2];case "i64":return D[b>>2];case "float":return Ba[b>>2];case "double":return Ca[b>>3];default:A("invalid type for getValue: "+a)}return null};var Pb;H=function Qb(){Pb||Rb();Pb||(H=Qb)}; +function Rb(){function b(){if(!Pb&&(Pb=!0,g.calledRun=!0,!na)){Qa(Ga);Qa(Ha);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var a=g.postRun.shift();Ia.unshift(a)}Qa(Ia)}}if(!(0 +* Peter Schwabe +* Sjaak Smetsers +* Tanja Lange +* Wesley Janssen + + +[Poly1305-donna](https://github.com/floodyberry/poly1305-donna) +-------------------------------------------------------------- + +* Andrew Moon (@floodyberry) diff --git a/node_modules/tweetnacl/CHANGELOG.md b/node_modules/tweetnacl/CHANGELOG.md new file mode 100644 index 0000000..d1eba8c --- /dev/null +++ b/node_modules/tweetnacl/CHANGELOG.md @@ -0,0 +1,283 @@ +TweetNaCl.js Changelog +====================== + +v1.0.3 +------ + +***IMPORTANT BUG FIX***. Due to a bug in calculating carry in +modulo reduction that used bit operations on integers larger than +32 bits, `nacl.sign` or `nacl.sign.detached` could have created +incorrect signatures. + +This only affects signing, not verification. + +Thanks to @valerini on GitHub for finding and reporting the bug. + + +v1.0.2 +------ + +Exported more internal undocumented functions for +third-party projects that rely on low-level interface, +(something users of TweetNaCl shouldn't care about). + + +v1.0.1 +------ + +Updated documentation and typings. + + +v1.0.0 +------ + +No code changes from v1.0.0-rc.1. + + +v1.0.0-rc.1 +----------- + +* **IMPORTANT!** In previous versions, `nacl.secretbox.open`, `nacl.box.open`, + and `nacl.box.after` returned `false` when opening failed (for example, when + using incorrect key, nonce, or when input was maliciously or accidentally + modified after encryption). This version instead returns `null`. + + The usual way to check for this condition: + + `if (!result) { ... }` + + is correct and will continue to work. + + However, direct comparison with `false`: + + `if (result == false) { ... }` + + it will no longer work and **will not detect failure**. Please check + your code for this condition. + + (`nacl.sign.open` always returned `null`, so it is not affected.) + + +* Arguments type check now uses `instanceof Uint8Array` instead of `Object.prototype.toString`. +* Removed deprecation checks for `nacl.util` (moved to a + [separate package](https://github.com/dchest/tweetnacl-util-js) in v0.14.0). +* Removed deprecation checks for the old signature API (changed in v0.10.0). +* Improved benchmarking. + +v0.14.5 +------- + +* Fixed incomplete return types in TypeScript typings. +* Replaced COPYING.txt with LICENSE file, which now has public domain dedication + text from The Unlicense. License fields in package.json and bower.json have + been set to "Unlicense". The project was and will be in the public domain -- + this change just makes it easier for automated tools to know about this fact by + using the widely recognized and SPDX-compatible template for public domain + dedication. + + +v0.14.4 +------- + +* Added TypeScript type definitions (contributed by @AndSDev). +* Improved benchmarking code. + + +v0.14.3 +------- + +Fixed a bug in the fast version of Poly1305 and brought it back. + +Thanks to @floodyberry for promptly responding and fixing the original C code: + +> "The issue was not properly detecting if st->h was >= 2^130 - 5, coupled with +> [testing mistake] not catching the failure. The chance of the bug affecting +> anything in the real world is essentially zero luckily, but it's good to have +> it fixed." + +https://github.com/floodyberry/poly1305-donna/issues/2#issuecomment-202698577 + + +v0.14.2 +------- + +Switched Poly1305 fast version back to original (slow) version due to a bug. + + +v0.14.1 +------- + +No code changes, just tweaked packaging and added COPYING.txt. + + +v0.14.0 +------- + +* **Breaking change!** All functions from `nacl.util` have been removed. These + functions are no longer available: + + nacl.util.decodeUTF8 + nacl.util.encodeUTF8 + nacl.util.decodeBase64 + nacl.util.encodeBase64 + + If want to continue using them, you can include + package: + + + + + or + + var nacl = require('tweetnacl'); + nacl.util = require('tweetnacl-util'); + + However it is recommended to use better packages that have wider + compatibility and better performance. Functions from `nacl.util` were never + intended to be robust solution for string conversion and were included for + convenience: cryptography library is not the right place for them. + + Currently calling these functions will throw error pointing to + `tweetnacl-util-js` (in the next version this error message will be removed). + +* Improved detection of available random number generators, making it possible + to use `nacl.randomBytes` and related functions in Web Workers without + changes. + +* Changes to testing (see README). + + +v0.13.3 +------- + +No code changes. + +* Reverted license field in package.json to "Public domain". + +* Fixed typo in README. + + +v0.13.2 +------- + +* Fixed undefined variable bug in fast version of Poly1305. No worries, this + bug was *never* triggered. + +* Specified CC0 public domain dedication. + +* Updated development dependencies. + + +v0.13.1 +------- + +* Exclude `crypto` and `buffer` modules from browserify builds. + + +v0.13.0 +------- + +* Made `nacl-fast` the default version in NPM package. Now + `require("tweetnacl")` will use fast version; to get the original version, + use `require("tweetnacl/nacl.js")`. + +* Cleanup temporary array after generating random bytes. + + +v0.12.2 +------- + +* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, + `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. + + +v0.12.1 +------- + +* Significantly improved performance of Salsa20 (~1.5x faster) and + Poly1305 (~3.5x faster) in `nacl-fast` version. + + +v0.12.0 +------- + +* Instead of using the given secret key directly, TweetNaCl.js now copies it to + a new array in `nacl.box.keyPair.fromSecretKey` and + `nacl.sign.keyPair.fromSecretKey`. + + +v0.11.2 +------- + +* Added new constant: `nacl.sign.seedLength`. + + +v0.11.1 +------- + +* Even faster hash for both short and long inputs (in `nacl-fast`). + + +v0.11.0 +------- + +* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs + deterministically from a 32-byte seed. (It behaves like + [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) + `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) + +* Fast version now has an improved hash implementation that is 2x-5x faster. + +* Fixed benchmarks, which may have produced incorrect measurements. + + +v0.10.1 +------- + +* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. + + +v0.10.0 +------- + +* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal + with signed messages, and new `nacl.sign.detached` and + `nacl.sign.detached.verify` are available. + + Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a + message and "detached" signature. This was unlike NaCl's API, which dealt with + signed messages (concatenation of signature and message). + + The new API is: + + nacl.sign(message, secretKey) -> signedMessage + nacl.sign.open(signedMessage, publicKey) -> message | null + + Since detached signatures are common, two new API functions were introduced: + + nacl.sign.detached(message, secretKey) -> signature + nacl.sign.detached.verify(message, signature, publicKey) -> true | false + + (Note that it's `verify`, not `open`, and it returns a boolean value, unlike + `open`, which returns an "unsigned" message.) + +* NPM package now comes without `test` directory to keep it small. + + +v0.9.2 +------ + +* Improved documentation. +* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 + bytes in Poly1305 (and thus, secretbox and box). However this has no impact + in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit + indexes, and most implementations won't allocate more than a gigabyte or so. + (Obviously, there are no tests for the correctness of implementation.) Also, + it's not recommended to use messages that large without splitting them into + smaller packets anyway. + + +v0.9.1 +------ + +* Initial release diff --git a/node_modules/tweetnacl/LICENSE b/node_modules/tweetnacl/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/node_modules/tweetnacl/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a8eb4a9 --- /dev/null +++ b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# Important! + +If your contribution is not trivial (not a typo fix, etc.), we can only accept +it if you dedicate your copyright for the contribution to the public domain. +Make sure you understand what it means (see http://unlicense.org/)! If you +agree, please add yourself to AUTHORS.md file, and include the following text +to your pull request description or a comment in it: + +------------------------------------------------------------------------------ + + I dedicate any and all copyright interest in this software to the + public domain. I make this dedication for the benefit of the public at + large and to the detriment of my heirs and successors. I intend this + dedication to be an overt act of relinquishment in perpetuity of all + present and future rights to this software under copyright law. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md new file mode 100644 index 0000000..022bf6b --- /dev/null +++ b/node_modules/tweetnacl/README.md @@ -0,0 +1,494 @@ +TweetNaCl.js +============ + +Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) +to JavaScript for modern browsers and Node.js. Public domain. + +[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) +](https://travis-ci.org/dchest/tweetnacl-js) + +Demo: + +Documentation +============= + +* [Overview](#overview) +* [Audits](#audits) +* [Installation](#installation) +* [Examples](#examples) +* [Usage](#usage) + * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) + * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) + * [Scalar multiplication](#scalar-multiplication) + * [Signatures](#signatures) + * [Hashing](#hashing) + * [Random bytes generation](#random-bytes-generation) + * [Constant-time comparison](#constant-time-comparison) +* [System requirements](#system-requirements) +* [Development and testing](#development-and-testing) +* [Benchmarks](#benchmarks) +* [Contributors](#contributors) +* [Who uses it](#who-uses-it) + + +Overview +-------- + +The primary goal of this project is to produce a translation of TweetNaCl to +JavaScript which is as close as possible to the original C implementation, plus +a thin layer of idiomatic high-level API on top of it. + +There are two versions, you can use either of them: + +* `nacl.js` is the port of TweetNaCl with minimum differences from the + original + high-level API. + +* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with + faster versions. (Used by default when importing NPM package.) + + +Audits +------ + +TweetNaCl.js has been audited by [Cure53](https://cure53.de/) in January-February +2017 (audit was sponsored by [Deletype](https://deletype.com)): + +> The overall outcome of this audit signals a particularly positive assessment +> for TweetNaCl-js, as the testing team was unable to find any security +> problems in the library. It has to be noted that this is an exceptionally +> rare result of a source code audit for any project and must be seen as a true +> testament to a development proceeding with security at its core. +> +> To reiterate, the TweetNaCl-js project, the source code was found to be +> bug-free at this point. +> +> [...] +> +> In sum, the testing team is happy to recommend the TweetNaCl-js project as +> likely one of the safer and more secure cryptographic tools among its +> competition. + +[Read full audit report](https://cure53.de/tweetnacl.pdf) + + +Installation +------------ + +You can install TweetNaCl.js via a package manager: + +[Yarn](https://yarnpkg.com/): + + $ yarn add tweetnacl + +[NPM](https://www.npmjs.org/): + + $ npm install tweetnacl + +or [download source code](https://github.com/dchest/tweetnacl-js/releases). + + +Examples +-------- +You can find usage examples in our [wiki](https://github.com/dchest/tweetnacl-js/wiki/Examples). + + +Usage +----- + +All API functions accept and return bytes as `Uint8Array`s. If you need to +encode or decode strings, use functions from + or one of the more robust codec +packages. + +In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you +can freely pass them to TweetNaCl.js functions as arguments. The returned +objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to +convert them manually; make sure to convert using copying: `Buffer.from(array)` +(or `new Buffer(array)` in Node.js v4 or earlier), instead of sharing: +`Buffer.from(array.buffer)` (or `new Buffer(array.buffer)` Node 4 or earlier), +because some functions return subarrays of their buffers. + + +### Public-key authenticated encryption (box) + +Implements *x25519-xsalsa20-poly1305*. + +#### nacl.box.keyPair() + +Generates a new random key pair for box and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 32-byte secret key + } + + +#### nacl.box.keyPair.fromSecretKey(secretKey) + +Returns a key pair for box with public key corresponding to the given secret +key. + +#### nacl.box(message, nonce, theirPublicKey, mySecretKey) + +Encrypts and authenticates message using peer's public key, our secret key, and +the given nonce, which must be unique for each distinct message for a key pair. + +Returns an encrypted and authenticated message, which is +`nacl.box.overheadLength` longer than the original message. + +#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) + +Authenticates and decrypts the given box with peer's public key, our secret +key, and the given nonce. + +Returns the original message, or `null` if authentication fails. + +#### nacl.box.before(theirPublicKey, mySecretKey) + +Returns a precomputed shared key which can be used in `nacl.box.after` and +`nacl.box.open.after`. + +#### nacl.box.after(message, nonce, sharedKey) + +Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.open.after(box, nonce, sharedKey) + +Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. + +#### Constants + +##### nacl.box.publicKeyLength = 32 + +Length of public key in bytes. + +##### nacl.box.secretKeyLength = 32 + +Length of secret key in bytes. + +##### nacl.box.sharedKeyLength = 32 + +Length of precomputed shared key in bytes. + +##### nacl.box.nonceLength = 24 + +Length of nonce in bytes. + +##### nacl.box.overheadLength = 16 + +Length of overhead added to box compared to original message. + + +### Secret-key authenticated encryption (secretbox) + +Implements *xsalsa20-poly1305*. + +#### nacl.secretbox(message, nonce, key) + +Encrypts and authenticates message using the key and the nonce. The nonce must +be unique for each distinct message for this key. + +Returns an encrypted and authenticated message, which is +`nacl.secretbox.overheadLength` longer than the original message. + +#### nacl.secretbox.open(box, nonce, key) + +Authenticates and decrypts the given secret box using the key and the nonce. + +Returns the original message, or `null` if authentication fails. + +#### Constants + +##### nacl.secretbox.keyLength = 32 + +Length of key in bytes. + +##### nacl.secretbox.nonceLength = 24 + +Length of nonce in bytes. + +##### nacl.secretbox.overheadLength = 16 + +Length of overhead added to secret box compared to original message. + + +### Scalar multiplication + +Implements *x25519*. + +#### nacl.scalarMult(n, p) + +Multiplies an integer `n` by a group element `p` and returns the resulting +group element. + +#### nacl.scalarMult.base(n) + +Multiplies an integer `n` by a standard group element and returns the resulting +group element. + +#### Constants + +##### nacl.scalarMult.scalarLength = 32 + +Length of scalar in bytes. + +##### nacl.scalarMult.groupElementLength = 32 + +Length of group element in bytes. + + +### Signatures + +Implements [ed25519](http://ed25519.cr.yp.to). + +#### nacl.sign.keyPair() + +Generates new random key pair for signing and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 64-byte secret key + } + +#### nacl.sign.keyPair.fromSecretKey(secretKey) + +Returns a signing key pair with public key corresponding to the given +64-byte secret key. The secret key must have been generated by +`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. + +#### nacl.sign.keyPair.fromSeed(seed) + +Returns a new signing key pair generated deterministically from a 32-byte seed. +The seed must contain enough entropy to be secure. This method is not +recommended for general use: instead, use `nacl.sign.keyPair` to generate a new +key pair from a random seed. + +#### nacl.sign(message, secretKey) + +Signs the message using the secret key and returns a signed message. + +#### nacl.sign.open(signedMessage, publicKey) + +Verifies the signed message and returns the message without signature. + +Returns `null` if verification failed. + +#### nacl.sign.detached(message, secretKey) + +Signs the message using the secret key and returns a signature. + +#### nacl.sign.detached.verify(message, signature, publicKey) + +Verifies the signature for the message and returns `true` if verification +succeeded or `false` if it failed. + +#### Constants + +##### nacl.sign.publicKeyLength = 32 + +Length of signing public key in bytes. + +##### nacl.sign.secretKeyLength = 64 + +Length of signing secret key in bytes. + +##### nacl.sign.seedLength = 32 + +Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. + +##### nacl.sign.signatureLength = 64 + +Length of signature in bytes. + + +### Hashing + +Implements *SHA-512*. + +#### nacl.hash(message) + +Returns SHA-512 hash of the message. + +#### Constants + +##### nacl.hash.hashLength = 64 + +Length of hash in bytes. + + +### Random bytes generation + +#### nacl.randomBytes(length) + +Returns a `Uint8Array` of the given length containing random bytes of +cryptographic quality. + +**Implementation note** + +TweetNaCl.js uses the following methods to generate random bytes, +depending on the platform it runs on: + +* `window.crypto.getRandomValues` (WebCrypto standard) +* `window.msCrypto.getRandomValues` (Internet Explorer 11) +* `crypto.randomBytes` (Node.js) + +If the platform doesn't provide a suitable PRNG, the following functions, +which require random numbers, will throw exception: + +* `nacl.randomBytes` +* `nacl.box.keyPair` +* `nacl.sign.keyPair` + +Other functions are deterministic and will continue working. + +If a platform you are targeting doesn't implement secure random number +generator, but you somehow have a cryptographically-strong source of entropy +(not `Math.random`!), and you know what you are doing, you can plug it into +TweetNaCl.js like this: + + nacl.setPRNG(function(x, n) { + // ... copy n random bytes into x ... + }); + +Note that `nacl.setPRNG` *completely replaces* internal random byte generator +with the one provided. + + +### Constant-time comparison + +#### nacl.verify(x, y) + +Compares `x` and `y` in constant time and returns `true` if their lengths are +non-zero and equal, and their contents are equal. + +Returns `false` if either of the arguments has zero length, or arguments have +different lengths, or their contents differ. + + +System requirements +------------------- + +TweetNaCl.js supports modern browsers that have a cryptographically secure +pseudorandom number generator and typed arrays, including the latest versions +of: + +* Chrome +* Firefox +* Safari (Mac, iOS) +* Internet Explorer 11 + +Other systems: + +* Node.js + + +Development and testing +------------------------ + +Install NPM modules needed for development: + + $ npm install + +To build minified versions: + + $ npm run build + +Tests use minified version, so make sure to rebuild it every time you change +`nacl.js` or `nacl-fast.js`. + +### Testing + +To run tests in Node.js: + + $ npm run test-node + +By default all tests described here work on `nacl.min.js`. To test other +versions, set environment variable `NACL_SRC` to the file name you want to test. +For example, the following command will test fast minified version: + + $ NACL_SRC=nacl-fast.min.js npm run test-node + +To run full suite of tests in Node.js, including comparing outputs of +JavaScript port to outputs of the original C version: + + $ npm run test-node-all + +To prepare tests for browsers: + + $ npm run build-test-browser + +and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to +run them. + +To run tests in both Node and Electron: + + $ npm test + +### Benchmarking + +To run benchmarks in Node.js: + + $ npm run bench + $ NACL_SRC=nacl-fast.min.js npm run bench + +To run benchmarks in a browser, open `test/benchmark/bench.html` (or +`test/benchmark/bench-fast.html`). + + +Benchmarks +---------- + +For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) +laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi +Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in +Chrome 52/Android: + +| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | +| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| +| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | +| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | +| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | +| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | +| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | +| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | +| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | +| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | + +(You can run benchmarks on your devices by clicking on the links at the bottom +of the [home page](https://tweetnacl.js.org)). + +In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and +authenticate more than 57000 messages per second on a typical laptop or more than +14000 messages per second on a $170 smartphone, sign about 200 and verify 100 +messages per second on a laptop or 60 and 30 messages per second on a smartphone, +per CPU core (with Web Workers you can do these operations in parallel), +which is good enough for most applications. + + +Contributors +------------ + +See AUTHORS.md file. + + +Third-party libraries based on TweetNaCl.js +------------------------------------------- + +* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation +* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption +* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) +* [tweetnacl-sealed-box](https://github.com/whs/tweetnacl-sealed-box) — implementation of [`sealed boxes`](https://download.libsodium.org/doc/public-key_cryptography/sealed_boxes.html) +* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules + + +Who uses it +----------- + +Some notable users of TweetNaCl.js: + +* [GitHub](https://github.com) +* [MEGA](https://github.com/meganz/webclient) +* [Stellar](https://www.stellar.org/) +* [miniLock](https://github.com/kaepora/miniLock) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js new file mode 100644 index 0000000..7ea5fb5 --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.js @@ -0,0 +1,2391 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js new file mode 100644 index 0000000..348ec2e --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.min.js @@ -0,0 +1 @@ +!function(i){"use strict";var v=function(r){var t,n=new Float64Array(16);if(r)for(t=0;t>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function w(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function b(r,t,n,e){return w(r,t,n,e,16)}function g(r,t,n,e){return w(r,t,n,e,32)}function A(r,t,n,e){!function(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,v=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,A=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,_=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,U=i,d=h,E=a,x=f,M=s,m=u,B=c,S=y,k=l,K=w,Y=v,L=p,T=b,z=g,R=A,P=_,N=0;N<20;N+=2)U^=(o=(T^=(o=(k^=(o=(M^=(o=U+T|0)<<7|o>>>25)+U|0)<<9|o>>>23)+M|0)<<13|o>>>19)+k|0)<<18|o>>>14,m^=(o=(d^=(o=(z^=(o=(K^=(o=m+d|0)<<7|o>>>25)+m|0)<<9|o>>>23)+K|0)<<13|o>>>19)+z|0)<<18|o>>>14,Y^=(o=(B^=(o=(E^=(o=(R^=(o=Y+B|0)<<7|o>>>25)+Y|0)<<9|o>>>23)+R|0)<<13|o>>>19)+E|0)<<18|o>>>14,P^=(o=(L^=(o=(S^=(o=(x^=(o=P+L|0)<<7|o>>>25)+P|0)<<9|o>>>23)+x|0)<<13|o>>>19)+S|0)<<18|o>>>14,U^=(o=(x^=(o=(E^=(o=(d^=(o=U+x|0)<<7|o>>>25)+U|0)<<9|o>>>23)+d|0)<<13|o>>>19)+E|0)<<18|o>>>14,m^=(o=(M^=(o=(S^=(o=(B^=(o=m+M|0)<<7|o>>>25)+m|0)<<9|o>>>23)+B|0)<<13|o>>>19)+S|0)<<18|o>>>14,Y^=(o=(K^=(o=(k^=(o=(L^=(o=Y+K|0)<<7|o>>>25)+Y|0)<<9|o>>>23)+L|0)<<13|o>>>19)+k|0)<<18|o>>>14,P^=(o=(R^=(o=(z^=(o=(T^=(o=P+R|0)<<7|o>>>25)+P|0)<<9|o>>>23)+T|0)<<13|o>>>19)+z|0)<<18|o>>>14;U=U+i|0,d=d+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+u|0,B=B+c|0,S=S+y|0,k=k+l|0,K=K+w|0,Y=Y+v|0,L=L+p|0,T=T+b|0,z=z+g|0,R=R+A|0,P=P+_|0,r[0]=U>>>0&255,r[1]=U>>>8&255,r[2]=U>>>16&255,r[3]=U>>>24&255,r[4]=d>>>0&255,r[5]=d>>>8&255,r[6]=d>>>16&255,r[7]=d>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=k>>>0&255,r[33]=k>>>8&255,r[34]=k>>>16&255,r[35]=k>>>24&255,r[36]=K>>>0&255,r[37]=K>>>8&255,r[38]=K>>>16&255,r[39]=K>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=L>>>0&255,r[45]=L>>>8&255,r[46]=L>>>16&255,r[47]=L>>>24&255,r[48]=T>>>0&255,r[49]=T>>>8&255,r[50]=T>>>16&255,r[51]=T>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}(r,t,n,e)}function _(r,t,n,e){!function(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,v=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,A=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,_=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,U=0;U<20;U+=2)i^=(o=(b^=(o=(l^=(o=(s^=(o=i+b|0)<<7|o>>>25)+i|0)<<9|o>>>23)+s|0)<<13|o>>>19)+l|0)<<18|o>>>14,u^=(o=(h^=(o=(g^=(o=(w^=(o=u+h|0)<<7|o>>>25)+u|0)<<9|o>>>23)+w|0)<<13|o>>>19)+g|0)<<18|o>>>14,v^=(o=(c^=(o=(a^=(o=(A^=(o=v+c|0)<<7|o>>>25)+v|0)<<9|o>>>23)+A|0)<<13|o>>>19)+a|0)<<18|o>>>14,_^=(o=(p^=(o=(y^=(o=(f^=(o=_+p|0)<<7|o>>>25)+_|0)<<9|o>>>23)+f|0)<<13|o>>>19)+y|0)<<18|o>>>14,i^=(o=(f^=(o=(a^=(o=(h^=(o=i+f|0)<<7|o>>>25)+i|0)<<9|o>>>23)+h|0)<<13|o>>>19)+a|0)<<18|o>>>14,u^=(o=(s^=(o=(y^=(o=(c^=(o=u+s|0)<<7|o>>>25)+u|0)<<9|o>>>23)+c|0)<<13|o>>>19)+y|0)<<18|o>>>14,v^=(o=(w^=(o=(l^=(o=(p^=(o=v+w|0)<<7|o>>>25)+v|0)<<9|o>>>23)+p|0)<<13|o>>>19)+l|0)<<18|o>>>14,_^=(o=(A^=(o=(g^=(o=(b^=(o=_+A|0)<<7|o>>>25)+_|0)<<9|o>>>23)+b|0)<<13|o>>>19)+g|0)<<18|o>>>14;r[0]=i>>>0&255,r[1]=i>>>8&255,r[2]=i>>>16&255,r[3]=i>>>24&255,r[4]=u>>>0&255,r[5]=u>>>8&255,r[6]=u>>>16&255,r[7]=u>>>24&255,r[8]=v>>>0&255,r[9]=v>>>8&255,r[10]=v>>>16&255,r[11]=v>>>24&255,r[12]=_>>>0&255,r[13]=_>>>8&255,r[14]=_>>>16&255,r[15]=_>>>24&255,r[16]=c>>>0&255,r[17]=c>>>8&255,r[18]=c>>>16&255,r[19]=c>>>24&255,r[20]=y>>>0&255,r[21]=y>>>8&255,r[22]=y>>>16&255,r[23]=y>>>24&255,r[24]=l>>>0&255,r[25]=l>>>8&255,r[26]=l>>>16&255,r[27]=l>>>24&255,r[28]=w>>>0&255,r[29]=w>>>8&255,r[30]=w>>>16&255,r[31]=w>>>24&255}(r,t,n,e)}var U=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function d(r,t,n,e,o,i,h){var a,f,s=new Uint8Array(16),u=new Uint8Array(64);for(f=0;f<16;f++)s[f]=0;for(f=0;f<8;f++)s[f]=i[f];for(;64<=o;){for(A(u,s,h,U),f=0;f<64;f++)r[t+f]=n[e+f]^u[f];for(a=1,f=8;f<16;f++)a=a+(255&s[f])|0,s[f]=255&a,a>>>=8;o-=64,t+=64,e+=64}if(0>>=8;n-=64,t+=64}if(0>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};function B(r,t,n,e,o,i){var h=new m(i);return h.update(n,e,o),h.finish(r,t),0}function S(r,t,n,e,o,i){var h=new Uint8Array(16);return B(h,0,n,e,o,i),b(r,t,h,0)}function k(r,t,n,e,o){var i;if(n<32)return-1;for(M(r,0,t,0,n,e,o),B(r,16,r,32,n-32,r),i=0;i<16;i++)r[i]=0;return 0}function K(r,t,n,e,o){var i,h=new Uint8Array(32);if(n<32)return-1;if(x(h,0,32,e,o),0!==S(t,16,t,32,n-32,h))return-1;for(M(r,0,t,0,n,e,o),i=0;i<32;i++)r[i]=0;return 0}function Y(r,t){var n;for(n=0;n<16;n++)r[n]=0|t[n]}function L(r){var t,n,e=1;for(t=0;t<16;t++)n=r[t]+e+65535,e=Math.floor(n/65536),r[t]=n-65536*e;r[0]+=e-1+37*(e-1)}function T(r,t,n){for(var e,o=~(n-1),i=0;i<16;i++)e=o&(r[i]^t[i]),r[i]^=e,t[i]^=e}function z(r,t){var n,e,o,i=v(),h=v();for(n=0;n<16;n++)h[n]=t[n];for(L(h),L(h),L(h),e=0;e<2;e++){for(i[0]=h[0]-65517,n=1;n<15;n++)i[n]=h[n]-65535-(i[n-1]>>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,T(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function R(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return z(n,r),z(e,t),g(n,0,e,0)}function P(r){var t=new Uint8Array(32);return z(t,r),1&t[0]}function N(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function O(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function C(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function F(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,u=0,c=0,y=0,l=0,w=0,v=0,p=0,b=0,g=0,A=0,_=0,U=0,d=0,E=0,x=0,M=0,m=0,B=0,S=0,k=0,K=0,Y=0,L=0,T=0,z=0,R=0,P=n[0],N=n[1],O=n[2],C=n[3],F=n[4],I=n[5],Z=n[6],G=n[7],q=n[8],D=n[9],V=n[10],X=n[11],j=n[12],H=n[13],J=n[14],Q=n[15];i+=(e=t[0])*P,h+=e*N,a+=e*O,f+=e*C,s+=e*F,u+=e*I,c+=e*Z,y+=e*G,l+=e*q,w+=e*D,v+=e*V,p+=e*X,b+=e*j,g+=e*H,A+=e*J,_+=e*Q,h+=(e=t[1])*P,a+=e*N,f+=e*O,s+=e*C,u+=e*F,c+=e*I,y+=e*Z,l+=e*G,w+=e*q,v+=e*D,p+=e*V,b+=e*X,g+=e*j,A+=e*H,_+=e*J,U+=e*Q,a+=(e=t[2])*P,f+=e*N,s+=e*O,u+=e*C,c+=e*F,y+=e*I,l+=e*Z,w+=e*G,v+=e*q,p+=e*D,b+=e*V,g+=e*X,A+=e*j,_+=e*H,U+=e*J,d+=e*Q,f+=(e=t[3])*P,s+=e*N,u+=e*O,c+=e*C,y+=e*F,l+=e*I,w+=e*Z,v+=e*G,p+=e*q,b+=e*D,g+=e*V,A+=e*X,_+=e*j,U+=e*H,d+=e*J,E+=e*Q,s+=(e=t[4])*P,u+=e*N,c+=e*O,y+=e*C,l+=e*F,w+=e*I,v+=e*Z,p+=e*G,b+=e*q,g+=e*D,A+=e*V,_+=e*X,U+=e*j,d+=e*H,E+=e*J,x+=e*Q,u+=(e=t[5])*P,c+=e*N,y+=e*O,l+=e*C,w+=e*F,v+=e*I,p+=e*Z,b+=e*G,g+=e*q,A+=e*D,_+=e*V,U+=e*X,d+=e*j,E+=e*H,x+=e*J,M+=e*Q,c+=(e=t[6])*P,y+=e*N,l+=e*O,w+=e*C,v+=e*F,p+=e*I,b+=e*Z,g+=e*G,A+=e*q,_+=e*D,U+=e*V,d+=e*X,E+=e*j,x+=e*H,M+=e*J,m+=e*Q,y+=(e=t[7])*P,l+=e*N,w+=e*O,v+=e*C,p+=e*F,b+=e*I,g+=e*Z,A+=e*G,_+=e*q,U+=e*D,d+=e*V,E+=e*X,x+=e*j,M+=e*H,m+=e*J,B+=e*Q,l+=(e=t[8])*P,w+=e*N,v+=e*O,p+=e*C,b+=e*F,g+=e*I,A+=e*Z,_+=e*G,U+=e*q,d+=e*D,E+=e*V,x+=e*X,M+=e*j,m+=e*H,B+=e*J,S+=e*Q,w+=(e=t[9])*P,v+=e*N,p+=e*O,b+=e*C,g+=e*F,A+=e*I,_+=e*Z,U+=e*G,d+=e*q,E+=e*D,x+=e*V,M+=e*X,m+=e*j,B+=e*H,S+=e*J,k+=e*Q,v+=(e=t[10])*P,p+=e*N,b+=e*O,g+=e*C,A+=e*F,_+=e*I,U+=e*Z,d+=e*G,E+=e*q,x+=e*D,M+=e*V,m+=e*X,B+=e*j,S+=e*H,k+=e*J,K+=e*Q,p+=(e=t[11])*P,b+=e*N,g+=e*O,A+=e*C,_+=e*F,U+=e*I,d+=e*Z,E+=e*G,x+=e*q,M+=e*D,m+=e*V,B+=e*X,S+=e*j,k+=e*H,K+=e*J,Y+=e*Q,b+=(e=t[12])*P,g+=e*N,A+=e*O,_+=e*C,U+=e*F,d+=e*I,E+=e*Z,x+=e*G,M+=e*q,m+=e*D,B+=e*V,S+=e*X,k+=e*j,K+=e*H,Y+=e*J,L+=e*Q,g+=(e=t[13])*P,A+=e*N,_+=e*O,U+=e*C,d+=e*F,E+=e*I,x+=e*Z,M+=e*G,m+=e*q,B+=e*D,S+=e*V,k+=e*X,K+=e*j,Y+=e*H,L+=e*J,T+=e*Q,A+=(e=t[14])*P,_+=e*N,U+=e*O,d+=e*C,E+=e*F,x+=e*I,M+=e*Z,m+=e*G,B+=e*q,S+=e*D,k+=e*V,K+=e*X,Y+=e*j,L+=e*H,T+=e*J,z+=e*Q,_+=(e=t[15])*P,h+=38*(d+=e*O),a+=38*(E+=e*C),f+=38*(x+=e*F),s+=38*(M+=e*I),u+=38*(m+=e*Z),c+=38*(B+=e*G),y+=38*(S+=e*q),l+=38*(k+=e*D),w+=38*(K+=e*V),v+=38*(Y+=e*X),p+=38*(L+=e*j),b+=38*(T+=e*H),g+=38*(z+=e*J),A+=38*(R+=e*Q),i=(e=(i+=38*(U+=e*N))+(o=1)+65535)-65536*(o=Math.floor(e/65536)),h=(e=h+o+65535)-65536*(o=Math.floor(e/65536)),a=(e=a+o+65535)-65536*(o=Math.floor(e/65536)),f=(e=f+o+65535)-65536*(o=Math.floor(e/65536)),s=(e=s+o+65535)-65536*(o=Math.floor(e/65536)),u=(e=u+o+65535)-65536*(o=Math.floor(e/65536)),c=(e=c+o+65535)-65536*(o=Math.floor(e/65536)),y=(e=y+o+65535)-65536*(o=Math.floor(e/65536)),l=(e=l+o+65535)-65536*(o=Math.floor(e/65536)),w=(e=w+o+65535)-65536*(o=Math.floor(e/65536)),v=(e=v+o+65535)-65536*(o=Math.floor(e/65536)),p=(e=p+o+65535)-65536*(o=Math.floor(e/65536)),b=(e=b+o+65535)-65536*(o=Math.floor(e/65536)),g=(e=g+o+65535)-65536*(o=Math.floor(e/65536)),A=(e=A+o+65535)-65536*(o=Math.floor(e/65536)),_=(e=_+o+65535)-65536*(o=Math.floor(e/65536)),i=(e=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(e/65536)),h=(e=h+o+65535)-65536*(o=Math.floor(e/65536)),a=(e=a+o+65535)-65536*(o=Math.floor(e/65536)),f=(e=f+o+65535)-65536*(o=Math.floor(e/65536)),s=(e=s+o+65535)-65536*(o=Math.floor(e/65536)),u=(e=u+o+65535)-65536*(o=Math.floor(e/65536)),c=(e=c+o+65535)-65536*(o=Math.floor(e/65536)),y=(e=y+o+65535)-65536*(o=Math.floor(e/65536)),l=(e=l+o+65535)-65536*(o=Math.floor(e/65536)),w=(e=w+o+65535)-65536*(o=Math.floor(e/65536)),v=(e=v+o+65535)-65536*(o=Math.floor(e/65536)),p=(e=p+o+65535)-65536*(o=Math.floor(e/65536)),b=(e=b+o+65535)-65536*(o=Math.floor(e/65536)),g=(e=g+o+65535)-65536*(o=Math.floor(e/65536)),A=(e=A+o+65535)-65536*(o=Math.floor(e/65536)),_=(e=_+o+65535)-65536*(o=Math.floor(e/65536)),i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=u,r[6]=c,r[7]=y,r[8]=l,r[9]=w,r[10]=v,r[11]=p,r[12]=b,r[13]=g,r[14]=A,r[15]=_}function I(r,t){F(r,t,t)}function Z(r,t){var n,e=v();for(n=0;n<16;n++)e[n]=t[n];for(n=253;0<=n;n--)I(e,e),2!==n&&4!==n&&F(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function G(r,t){var n,e=v();for(n=0;n<16;n++)e[n]=t[n];for(n=250;0<=n;n--)I(e,e),1!==n&&F(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function q(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=v(),f=v(),s=v(),u=v(),c=v(),y=v();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,N(h,n),o=0;o<16;o++)f[o]=h[o],u[o]=a[o]=s[o]=0;for(a[0]=u[0]=1,o=254;0<=o;--o)T(a,f,e=i[o>>>3]>>>(7&o)&1),T(s,u,e),O(c,a,s),C(a,a,s),O(s,f,u),C(f,f,u),I(u,c),I(y,a),F(a,s,a),F(s,f,c),O(c,a,s),C(a,a,s),I(f,a),C(s,u,y),F(a,s,p),O(a,a,u),F(s,s,a),F(a,u,y),F(u,f,h),I(f,c),T(a,f,e),T(s,u,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=u[o];var l=h.subarray(32),w=h.subarray(16);return Z(l,l),F(w,w,l),z(r,w),0}function D(r,t){return q(r,t,n)}function V(r,t){return h(t,32),D(r,t)}function X(r,t,n){var e=new Uint8Array(32);return q(e,n,t),_(r,o,e,U)}m.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,u,c,y,l,w,v,p,b,g,A,_,U,d=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],k=this.h[6],K=this.h[7],Y=this.h[8],L=this.h[9],T=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],N=this.r[4],O=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],Z=this.r[9];16<=n;)y=c=0,y+=(E+=8191&(e=255&r[t+0]|(255&r[t+1])<<8))*T,y+=(x+=8191&(e>>>13|(o=255&r[t+2]|(255&r[t+3])<<8)<<3))*(5*Z),y+=(M+=8191&(o>>>10|(i=255&r[t+4]|(255&r[t+5])<<8)<<6))*(5*I),y+=(m+=8191&(i>>>7|(h=255&r[t+6]|(255&r[t+7])<<8)<<9))*(5*F),c=(y+=(B+=8191&(h>>>4|(a=255&r[t+8]|(255&r[t+9])<<8)<<12))*(5*C))>>>13,y&=8191,y+=(S+=a>>>1&8191)*(5*O),y+=(k+=8191&(a>>>14|(f=255&r[t+10]|(255&r[t+11])<<8)<<2))*(5*N),y+=(K+=8191&(f>>>11|(s=255&r[t+12]|(255&r[t+13])<<8)<<5))*(5*P),y+=(Y+=8191&(s>>>8|(u=255&r[t+14]|(255&r[t+15])<<8)<<8))*(5*R),l=c+=(y+=(L+=u>>>5|d)*(5*z))>>>13,l+=E*z,l+=x*T,l+=M*(5*Z),l+=m*(5*I),c=(l+=B*(5*F))>>>13,l&=8191,l+=S*(5*C),l+=k*(5*O),l+=K*(5*N),l+=Y*(5*P),c+=(l+=L*(5*R))>>>13,l&=8191,w=c,w+=E*R,w+=x*z,w+=M*T,w+=m*(5*Z),c=(w+=B*(5*I))>>>13,w&=8191,w+=S*(5*F),w+=k*(5*C),w+=K*(5*O),w+=Y*(5*N),v=c+=(w+=L*(5*P))>>>13,v+=E*P,v+=x*R,v+=M*z,v+=m*T,c=(v+=B*(5*Z))>>>13,v&=8191,v+=S*(5*I),v+=k*(5*F),v+=K*(5*C),v+=Y*(5*O),p=c+=(v+=L*(5*N))>>>13,p+=E*N,p+=x*P,p+=M*R,p+=m*z,c=(p+=B*T)>>>13,p&=8191,p+=S*(5*Z),p+=k*(5*I),p+=K*(5*F),p+=Y*(5*C),b=c+=(p+=L*(5*O))>>>13,b+=E*O,b+=x*N,b+=M*P,b+=m*R,c=(b+=B*z)>>>13,b&=8191,b+=S*T,b+=k*(5*Z),b+=K*(5*I),b+=Y*(5*F),g=c+=(b+=L*(5*C))>>>13,g+=E*C,g+=x*O,g+=M*N,g+=m*P,c=(g+=B*R)>>>13,g&=8191,g+=S*z,g+=k*T,g+=K*(5*Z),g+=Y*(5*I),A=c+=(g+=L*(5*F))>>>13,A+=E*F,A+=x*C,A+=M*O,A+=m*N,c=(A+=B*P)>>>13,A&=8191,A+=S*R,A+=k*z,A+=K*T,A+=Y*(5*Z),_=c+=(A+=L*(5*I))>>>13,_+=E*I,_+=x*F,_+=M*C,_+=m*O,c=(_+=B*N)>>>13,_&=8191,_+=S*P,_+=k*R,_+=K*z,_+=Y*T,U=c+=(_+=L*(5*Z))>>>13,U+=E*Z,U+=x*I,U+=M*F,U+=m*C,c=(U+=B*O)>>>13,U&=8191,U+=S*N,U+=k*P,U+=K*R,U+=Y*z,E=y=8191&(c=(c=((c+=(U+=L*T)>>>13)<<2)+c|0)+(y&=8191)|0),x=l+=c>>>=13,M=w&=8191,m=v&=8191,B=p&=8191,S=b&=8191,k=g&=8191,K=A&=8191,Y=_&=8191,L=U&=8191,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=k,this.h[7]=K,this.h[8]=Y,this.h[9]=L},m.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},m.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(n<(o=16-this.leftover)&&(o=n),e=0;e>>16,m=65535&(d=N),B=d>>>16,x+=65535&(E=((w=Z)>>>14|(a=z)<<18)^(Z>>>18|z<<14)^(z>>>9|Z<<23)),M+=E>>>16,m+=65535&(d=(z>>>14|Z<<18)^(z>>>18|Z<<14)^(Z>>>9|z<<23)),B+=d>>>16,x+=65535&(E=Z&(v=G)^~Z&(p=q)),M+=E>>>16,m+=65535&(d=z&(f=R)^~z&(s=P)),B+=d>>>16,d=J[2*_],x+=65535&(E=J[2*_+1]),M+=E>>>16,m+=65535&d,B+=d>>>16,d=S[_%16],M+=(E=k[_%16])>>>16,m+=65535&d,B+=d>>>16,m+=(M+=(x+=65535&E)>>>16)>>>16,x=65535&(E=A=65535&x|M<<16),M=E>>>16,m=65535&(d=g=65535&m|(B+=m>>>16)<<16),B=d>>>16,x+=65535&(E=(O>>>28|K<<4)^(K>>>2|O<<30)^(K>>>7|O<<25)),M+=E>>>16,m+=65535&(d=(K>>>28|O<<4)^(O>>>2|K<<30)^(O>>>7|K<<25)),B+=d>>>16,M+=(E=O&C^O&F^C&F)>>>16,m+=65535&(d=K&Y^K&L^Y&L),B+=d>>>16,u=65535&(m+=(M+=(x+=65535&E)>>>16)>>>16)|(B+=m>>>16)<<16,b=65535&x|M<<16,x=65535&(E=l),M=E>>>16,m=65535&(d=h),B=d>>>16,M+=(E=A)>>>16,m+=65535&(d=g),B+=d>>>16,Y=K,L=o,T=i,z=h=65535&(m+=(M+=(x+=65535&E)>>>16)>>>16)|(B+=m>>>16)<<16,R=a,P=f,N=s,K=u,C=O,F=c,I=y,Z=l=65535&x|M<<16,G=w,q=v,D=p,O=b,_%16==15)for(U=0;U<16;U++)d=S[U],x=65535&(E=k[U]),M=E>>>16,m=65535&d,B=d>>>16,d=S[(U+9)%16],x+=65535&(E=k[(U+9)%16]),M+=E>>>16,m+=65535&d,B+=d>>>16,g=S[(U+1)%16],x+=65535&(E=((A=k[(U+1)%16])>>>1|g<<31)^(A>>>8|g<<24)^(A>>>7|g<<25)),M+=E>>>16,m+=65535&(d=(g>>>1|A<<31)^(g>>>8|A<<24)^g>>>7),B+=d>>>16,g=S[(U+14)%16],M+=(E=((A=k[(U+14)%16])>>>19|g<<13)^(g>>>29|A<<3)^(A>>>6|g<<26))>>>16,m+=65535&(d=(g>>>19|A<<13)^(A>>>29|g<<3)^g>>>6),B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,S[U]=65535&m|B<<16,k[U]=65535&x|M<<16;x=65535&(E=O),M=E>>>16,m=65535&(d=K),B=d>>>16,d=r[0],M+=(E=t[0])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[0]=K=65535&m|B<<16,t[0]=O=65535&x|M<<16,x=65535&(E=C),M=E>>>16,m=65535&(d=Y),B=d>>>16,d=r[1],M+=(E=t[1])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[1]=Y=65535&m|B<<16,t[1]=C=65535&x|M<<16,x=65535&(E=F),M=E>>>16,m=65535&(d=L),B=d>>>16,d=r[2],M+=(E=t[2])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[2]=L=65535&m|B<<16,t[2]=F=65535&x|M<<16,x=65535&(E=I),M=E>>>16,m=65535&(d=T),B=d>>>16,d=r[3],M+=(E=t[3])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[3]=T=65535&m|B<<16,t[3]=I=65535&x|M<<16,x=65535&(E=Z),M=E>>>16,m=65535&(d=z),B=d>>>16,d=r[4],M+=(E=t[4])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[4]=z=65535&m|B<<16,t[4]=Z=65535&x|M<<16,x=65535&(E=G),M=E>>>16,m=65535&(d=R),B=d>>>16,d=r[5],M+=(E=t[5])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[5]=R=65535&m|B<<16,t[5]=G=65535&x|M<<16,x=65535&(E=q),M=E>>>16,m=65535&(d=P),B=d>>>16,d=r[6],M+=(E=t[6])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[6]=P=65535&m|B<<16,t[6]=q=65535&x|M<<16,x=65535&(E=D),M=E>>>16,m=65535&(d=N),B=d>>>16,d=r[7],M+=(E=t[7])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[7]=N=65535&m|B<<16,t[7]=D=65535&x|M<<16,V+=128,e-=128}return e}function W(r,t,n){var e,o=new Int32Array(8),i=new Int32Array(8),h=new Uint8Array(256),a=n;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,Q(o,i,t,n),n%=128,e=0;e>(7&o)&1),$(t,r),$(r,r),rr(r,t,e)}function er(r,t){var n=[v(),v(),v(),v()];Y(n[0],e),Y(n[1],a),Y(n[2],u),F(n[3],e,a),nr(r,n,t)}function or(r,t,n){var e,o=new Uint8Array(64),i=[v(),v(),v(),v()];for(n||h(t,32),W(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),tr(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}var ir=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function hr(r,t){var n,e,o,i;for(e=63;32<=e;--e){for(n=0,o=e-32,i=e-12;o>4)*ir[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*ir[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function ar(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;hr(r,n)}function fr(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),u=[v(),v(),v(),v()];W(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var c=n+64;for(o=0;o>7&&C(r[0],s,r[0]),F(r[3],r[0],r[1])}(f,e))return-1;for(o=0;o void): void; +} diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js new file mode 100644 index 0000000..fd8e678 --- /dev/null +++ b/node_modules/tweetnacl/nacl.js @@ -0,0 +1,1178 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function L32(x, c) { return (x << c) | (x >>> (32 - c)); } + +function ld32(x, i) { + var u = x[i+3] & 0xff; + u = (u<<8)|(x[i+2] & 0xff); + u = (u<<8)|(x[i+1] & 0xff); + return (u<<8)|(x[i+0] & 0xff); +} + +function dl64(x, i) { + var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; + var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; + return new u64(h, l); +} + +function st32(x, j, u) { + var i; + for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } +} + +function ts64(x, i, u) { + x[i] = (u.hi >> 24) & 0xff; + x[i+1] = (u.hi >> 16) & 0xff; + x[i+2] = (u.hi >> 8) & 0xff; + x[i+3] = u.hi & 0xff; + x[i+4] = (u.lo >> 24) & 0xff; + x[i+5] = (u.lo >> 16) & 0xff; + x[i+6] = (u.lo >> 8) & 0xff; + x[i+7] = u.lo & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core(out,inp,k,c,h) { + var w = new Uint32Array(16), x = new Uint32Array(16), + y = new Uint32Array(16), t = new Uint32Array(4); + var i, j, m; + + for (i = 0; i < 4; i++) { + x[5*i] = ld32(c, 4*i); + x[1+i] = ld32(k, 4*i); + x[6+i] = ld32(inp, 4*i); + x[11+i] = ld32(k, 16+4*i); + } + + for (i = 0; i < 16; i++) y[i] = x[i]; + + for (i = 0; i < 20; i++) { + for (j = 0; j < 4; j++) { + for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; + t[1] ^= L32((t[0]+t[3])|0, 7); + t[2] ^= L32((t[1]+t[0])|0, 9); + t[3] ^= L32((t[2]+t[1])|0,13); + t[0] ^= L32((t[3]+t[2])|0,18); + for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; + } + for (m = 0; m < 16; m++) x[m] = w[m]; + } + + if (h) { + for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; + for (i = 0; i < 4; i++) { + x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; + x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; + } + for (i = 0; i < 4; i++) { + st32(out,4*i,x[5*i]); + st32(out,16+4*i,x[6+i]); + } + } else { + for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); + } +} + +function crypto_core_salsa20(out,inp,k,c) { + core(out,inp,k,c,false); + return 0; +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core(out,inp,k,c,true); + return 0; +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + if (!b) return 0; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + if (m) mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,d,n,k) { + return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); +} + +function add1305(h, c) { + var j, u = 0; + for (j = 0; j < 17; j++) { + u = (u + ((h[j] + c[j]) | 0)) | 0; + h[j] = u & 255; + u >>>= 8; + } +} + +var minusp = new Uint32Array([ + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +]); + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s, i, j, u; + var x = new Uint32Array(17), r = new Uint32Array(17), + h = new Uint32Array(17), c = new Uint32Array(17), + g = new Uint32Array(17); + for (j = 0; j < 17; j++) r[j]=h[j]=0; + for (j = 0; j < 16; j++) r[j]=k[j]; + r[3]&=15; + r[4]&=252; + r[7]&=15; + r[8]&=252; + r[11]&=15; + r[12]&=252; + r[15]&=15; + + while (n > 0) { + for (j = 0; j < 17; j++) c[j] = 0; + for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; + c[j] = 1; + mpos += j; n -= j; + add1305(h,c); + for (i = 0; i < 17; i++) { + x[i] = 0; + for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; + } + for (i = 0; i < 17; i++) h[i] = x[i]; + u = 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u & 3; + u = (5 * (u >>> 2)) | 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u; + } + + for (j = 0; j < 17; j++) g[j] = h[j]; + add1305(h,minusp); + s = (-(h[16] >>> 7) | 0); + for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); + + for (j = 0; j < 16; j++) c[j] = k[j + 16]; + c[16] = 0; + add1305(h,c); + for (j = 0; j < 16; j++) out[outpos+j] = h[j]; + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var c; + var i; + for (i = 0; i < 16; i++) { + o[i] += 65536; + c = Math.floor(o[i] / 65536); + o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); + o[i] -= (c * 65536); + } +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; +} + +function Z(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; +} + +function M(o, a, b) { + var i, j, t = new Float64Array(31); + for (i = 0; i < 31; i++) t[i] = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + t[i+j] += a[i] * b[j]; + } + } + for (i = 0; i < 15; i++) { + t[i] += 38 * t[i+16]; + } + for (i = 0; i < 16; i++) o[i] = t[i]; + car25519(o); + car25519(o); +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +function add64() { + var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; + for (i = 0; i < arguments.length; i++) { + l = arguments[i].lo; + h = arguments[i].hi; + a += (l & m16); b += (l >>> 16); + c += (h & m16); d += (h >>> 16); + } + + b += (a >>> 16); + c += (b >>> 16); + d += (c >>> 16); + + return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); +} + +function shr64(x, c) { + return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); +} + +function xor64() { + var l = 0, h = 0, i; + for (i = 0; i < arguments.length; i++) { + l ^= arguments[i].lo; + h ^= arguments[i].hi; + } + return new u64(h, l); +} + +function R(x, c) { + var h, l, c1 = 32 - c; + if (c < 32) { + h = (x.hi >>> c) | (x.lo << c1); + l = (x.lo >>> c) | (x.hi << c1); + } else if (c < 64) { + h = (x.lo >>> c) | (x.hi << c1); + l = (x.hi >>> c) | (x.lo << c1); + } + return new u64(h, l); +} + +function Ch(x, y, z) { + var h = (x.hi & y.hi) ^ (~x.hi & z.hi), + l = (x.lo & y.lo) ^ (~x.lo & z.lo); + return new u64(h, l); +} + +function Maj(x, y, z) { + var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), + l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); + return new u64(h, l); +} + +function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } +function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } +function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } +function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } + +var K = [ + new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), + new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), + new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), + new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), + new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), + new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), + new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), + new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), + new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), + new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), + new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), + new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), + new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), + new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), + new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), + new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), + new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), + new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), + new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), + new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), + new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), + new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), + new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), + new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), + new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), + new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), + new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), + new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), + new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), + new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), + new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), + new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), + new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), + new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), + new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), + new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), + new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), + new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), + new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), + new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) +]; + +function crypto_hashblocks(x, m, n) { + var z = [], b = [], a = [], w = [], t, i, j; + + for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); + for (i = 0; i < 80; i++) { + for (j = 0; j < 8; j++) b[j] = a[j]; + t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); + b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); + b[3] = add64(b[3], t); + for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); + } + } + } + + for (i = 0; i < 8; i++) { + a[i] = add64(a[i], z[i]); + z[i] = a[i]; + } + + pos += 128; + n -= 128; + } + + for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); + return n; +} + +var iv = new Uint8Array([ + 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, + 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, + 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, + 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, + 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, + 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, + 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, + 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 +]); + +function crypto_hash(out, m, n) { + var h = new Uint8Array(64), x = new Uint8Array(256); + var i, b = n; + + for (i = 0; i < 64; i++) h[i] = iv[i]; + + crypto_hashblocks(h, m, n); + n %= 128; + + for (i = 0; i < 256; i++) x[i] = 0; + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); + crypto_hashblocks(h, x, n); + + for (i = 0; i < 64; i++) out[i] = h[i]; + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js new file mode 100644 index 0000000..65340cc --- /dev/null +++ b/node_modules/tweetnacl/nacl.min.js @@ -0,0 +1 @@ +!function(i){"use strict";var m=function(r,n){this.hi=0|r,this.lo=0|n},v=function(r){var n,e=new Float64Array(16);if(r)for(n=0;n>>32-n}function b(r,n){var e=255&r[n+3];return(e=(e=e<<8|255&r[n+2])<<8|255&r[n+1])<<8|255&r[n+0]}function B(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new m(e,t)}function p(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function S(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function u(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function A(r,n,e,t){return u(r,n,e,t,16)}function _(r,n,e,t){return u(r,n,e,t,32)}function U(r,n,e,t,o){var i,a,f,u=new Uint32Array(16),c=new Uint32Array(16),w=new Uint32Array(16),y=new Uint32Array(4);for(i=0;i<4;i++)c[5*i]=b(t,4*i),c[1+i]=b(e,4*i),c[6+i]=b(n,4*i),c[11+i]=b(e,16+4*i);for(i=0;i<16;i++)w[i]=c[i];for(i=0;i<20;i++){for(a=0;a<4;a++){for(f=0;f<4;f++)y[f]=c[(5*a+4*f)%16];for(y[1]^=h(y[0]+y[3]|0,7),y[2]^=h(y[1]+y[0]|0,9),y[3]^=h(y[2]+y[1]|0,13),y[0]^=h(y[3]+y[2]|0,18),f=0;f<4;f++)u[4*a+(a+f)%4]=y[f]}for(f=0;f<16;f++)c[f]=u[f]}if(o){for(i=0;i<16;i++)c[i]=c[i]+w[i]|0;for(i=0;i<4;i++)c[5*i]=c[5*i]-b(t,4*i)|0,c[6+i]=c[6+i]-b(n,4*i)|0;for(i=0;i<4;i++)p(r,4*i,c[5*i]),p(r,16+4*i,c[6+i])}else for(i=0;i<16;i++)p(r,4*i,c[i]+w[i]|0)}function E(r,n,e,t){U(r,n,e,t,!1)}function x(r,n,e,t){return U(r,n,e,t,!0),0}var d=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function K(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),w=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;64<=o;){for(E(w,c,a,d),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^w[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(0>>=8}var z=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function R(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;0>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(k(l,z),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,k(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function P(r,n,e,t,o,i){var a=new Uint8Array(16);return R(a,0,e,t,o,i),A(r,n,a,0)}function M(r,n,e,t,o){var i;if(e<32)return-1;for(T(r,0,n,0,e,t,o),R(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function N(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(L(a,0,32,t,o),0!==P(n,16,n,32,e-32,a))return-1;for(T(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function O(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function C(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function F(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function Z(r,n){var e,t,o,i=v(),a=v();for(e=0;e<16;e++)a[e]=n[e];for(C(a),C(a),C(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,F(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function G(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return Z(e,r),Z(t,n),_(e,0,t,0)}function q(r){var n=new Uint8Array(32);return Z(n,r),1&n[0]}function D(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function I(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function V(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function X(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];C(r),C(r)}function j(r,n){X(r,n,n)}function H(r,n){var e,t=v();for(e=0;e<16;e++)t[e]=n[e];for(e=253;0<=e;e--)j(t,t),2!==e&&4!==e&&X(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function J(r,n){var e,t=v();for(e=0;e<16;e++)t[e]=n[e];for(e=250;0<=e;e--)j(t,t),1!==e&&X(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function Q(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=v(),u=v(),c=v(),w=v(),y=v(),l=v();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,D(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;0<=o;--o)F(f,u,t=i[o>>>3]>>>(7&o)&1),F(c,w,t),I(y,f,c),V(f,f,c),I(c,u,w),V(u,u,w),j(w,y),j(l,f),X(f,c,f),X(c,u,y),I(y,f,c),V(f,f,c),j(u,f),V(c,w,l),X(f,c,g),I(f,f,w),X(c,c,f),X(f,w,l),X(w,u,a),j(u,y),F(f,u,t),F(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return H(s,s),X(h,h,s),Z(r,h),0}function W(r,n){return Q(r,n,e)}function $(r,n){return a(n,32),W(r,n)}function rr(r,n,e){var t=new Uint8Array(32);return Q(t,e,n),x(r,o,t,d)}var nr=M,er=N;function tr(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=(n=arguments[e].hi)&f,a+=n>>>16;return new m((i+=(o+=t>>>16)>>>16)&f|(a+=i>>>16)<<16,t&f|o<<16)}function or(r,n){return new m(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function ir(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<>(7&o)&1),yr(n,r),yr(r,r),lr(r,n,t)}function vr(r,n){var e=[v(),v(),v(),v()];O(e[0],t),O(e[1],f),O(e[2],w),X(e[3],t,f),hr(r,e,n)}function gr(r,n,e){var t,o=new Uint8Array(64),i=[v(),v(),v(),v()];for(e||a(n,32),wr(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,vr(i,o),sr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}var br=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function pr(r,n){var e,t,o,i;for(t=63;32<=t;--t){for(e=0,o=t-32,i=t-12;o>4)*br[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*br[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function Ar(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;pr(r,e)}function _r(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[v(),v(),v(),v()];wr(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&V(r[0],c,r[0]),X(r[3],r[0],r[1])}(u,t))return-1;for(o=0;o/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", + "test": "npm run test-node-all", + "bench": "node test/benchmark/bench.js", + "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/dchest/tweetnacl-js.git" + }, + "keywords": [ + "crypto", + "cryptography", + "curve25519", + "ed25519", + "encrypt", + "hash", + "key", + "nacl", + "poly1305", + "public", + "salsa20", + "signatures" + ], + "author": "TweetNaCl-js contributors", + "license": "Unlicense", + "bugs": { + "url": "https://github.com/dchest/tweetnacl-js/issues" + }, + "homepage": "https://tweetnacl.js.org", + "devDependencies": { + "browserify": "^16.2.3", + "eslint": "^6.8.0", + "faucet": "^0.0.1", + "tap-browser-color": "^0.1.2", + "tape": "^4.13.0", + "tweetnacl-util": "^0.15.0", + "uglify-js": "^3.7.5" + }, + "browser": { + "buffer": false, + "crypto": false + } +} diff --git a/node_modules/ws/LICENSE b/node_modules/ws/LICENSE new file mode 100644 index 0000000..1da5b96 --- /dev/null +++ b/node_modules/ws/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ws/README.md b/node_modules/ws/README.md new file mode 100644 index 0000000..a550ca1 --- /dev/null +++ b/node_modules/ws/README.md @@ -0,0 +1,536 @@ +# ws: a Node.js WebSocket library + +[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws) +[![CI](https://img.shields.io/github/actions/workflow/status/websockets/ws/ci.yml?branch=master&label=CI&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster) +[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg?logo=coveralls)](https://coveralls.io/github/websockets/ws) + +ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and +server implementation. + +Passes the quite extensive Autobahn test suite: [server][server-report], +[client][client-report]. + +**Note**: This module does not work in the browser. The client in the docs is a +reference to a back end with the role of a client in the WebSocket +communication. Browser clients must use the native +[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) +object. To make the same code work seamlessly on Node.js and the browser, you +can use one of the many wrappers available on npm, like +[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws). + +## Table of Contents + +- [Protocol support](#protocol-support) +- [Installing](#installing) + - [Opt-in for performance](#opt-in-for-performance) +- [API docs](#api-docs) +- [WebSocket compression](#websocket-compression) +- [Usage examples](#usage-examples) + - [Sending and receiving text data](#sending-and-receiving-text-data) + - [Sending binary data](#sending-binary-data) + - [Simple server](#simple-server) + - [External HTTP/S server](#external-https-server) + - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server) + - [Client authentication](#client-authentication) + - [Server broadcast](#server-broadcast) + - [Round-trip time](#round-trip-time) + - [Use the Node.js streams API](#use-the-nodejs-streams-api) + - [Other examples](#other-examples) +- [FAQ](#faq) + - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) + - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) + - [How to connect via a proxy?](#how-to-connect-via-a-proxy) +- [Changelog](#changelog) +- [License](#license) + +## Protocol support + +- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +- **HyBi drafts 13-17** (Current default, alternatively option + `protocolVersion: 13`) + +## Installing + +``` +npm install ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the ws +module. These modules are binary addons that improve the performance of certain +operations. Prebuilt binaries are available for the most popular platforms so +you don't necessarily need to have a C++ compiler installed on your machine. + +- `npm install --save-optional bufferutil`: Allows to efficiently perform + operations such as masking and unmasking the data payload of the WebSocket + frames. +- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a + message contains valid UTF-8. + +To not even try to require and use these modules, use the +[`WS_NO_BUFFER_UTIL`](./doc/ws.md#ws_no_buffer_util) and +[`WS_NO_UTF_8_VALIDATE`](./doc/ws.md#ws_no_utf_8_validate) environment +variables. These might be useful to enhance security in systems where a user can +put a package in the package search path of an application of another user, due +to how the Node.js resolver algorithm works. + +The `utf-8-validate` module is not needed and is not required, even if it is +already installed, regardless of the value of the `WS_NO_UTF_8_VALIDATE` +environment variable, if [`buffer.isUtf8()`][] is available. + +## API docs + +See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and +utility functions. + +## WebSocket compression + +ws supports the [permessage-deflate extension][permessage-deflate] which enables +the client and server to negotiate a compression algorithm and its parameters, +and then selectively apply it to the data payloads of each WebSocket message. + +The extension is disabled by default on the server and enabled by default on the +client. It adds a significant overhead in terms of performance and memory +consumption so we suggest to enable it only if it is really needed. + +Note that Node.js has a variety of issues with high-performance compression, +where increased concurrency, especially on Linux, can lead to [catastrophic +memory fragmentation][node-zlib-bug] and slow performance. If you intend to use +permessage-deflate in production, it is worthwhile to set up a test +representative of your workload and ensure Node.js/zlib will handle it with +acceptable performance and memory usage. + +Tuning of permessage-deflate can be done via the options defined below. You can +also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly +into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs]. + +See [the docs][ws-server-options] for more options. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ + port: 8080, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: 1024, + memLevel: 7, + level: 3 + }, + zlibInflateOptions: { + chunkSize: 10 * 1024 + }, + // Other options settable: + clientNoContextTakeover: true, // Defaults to negotiated value. + serverNoContextTakeover: true, // Defaults to negotiated value. + serverMaxWindowBits: 10, // Defaults to negotiated value. + // Below options specified as default values. + concurrencyLimit: 10, // Limits zlib concurrency for perf. + threshold: 1024 // Size (in bytes) below which messages + // should not be compressed if context takeover is disabled. + } +}); +``` + +The client will only use the extension if it is supported and enabled on the +server. To always disable the extension on the client set the +`perMessageDeflate` option to `false`. + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path', { + perMessageDeflate: false +}); +``` + +## Usage examples + +### Sending and receiving text data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function message(data) { + console.log('received: %s', data); +}); +``` + +### Sending binary data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + const array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array); +}); +``` + +### Simple server + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); +``` + +### External HTTP/S server + +```js +import { createServer } from 'https'; +import { readFileSync } from 'fs'; +import { WebSocketServer } from 'ws'; + +const server = createServer({ + cert: readFileSync('/path/to/cert.pem'), + key: readFileSync('/path/to/key.pem') +}); +const wss = new WebSocketServer({ server }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); + +server.listen(8080); +``` + +### Multiple servers sharing a single HTTP/S server + +```js +import { createServer } from 'http'; +import { parse } from 'url'; +import { WebSocketServer } from 'ws'; + +const server = createServer(); +const wss1 = new WebSocketServer({ noServer: true }); +const wss2 = new WebSocketServer({ noServer: true }); + +wss1.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +wss2.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +server.on('upgrade', function upgrade(request, socket, head) { + const { pathname } = parse(request.url); + + if (pathname === '/foo') { + wss1.handleUpgrade(request, socket, head, function done(ws) { + wss1.emit('connection', ws, request); + }); + } else if (pathname === '/bar') { + wss2.handleUpgrade(request, socket, head, function done(ws) { + wss2.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); + +server.listen(8080); +``` + +### Client authentication + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +function onSocketError(err) { + console.error(err); +} + +const server = createServer(); +const wss = new WebSocketServer({ noServer: true }); + +wss.on('connection', function connection(ws, request, client) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log(`Received message ${data} from user ${client}`); + }); +}); + +server.on('upgrade', function upgrade(request, socket, head) { + socket.on('error', onSocketError); + + // This function is not defined on purpose. Implement it with your own logic. + authenticate(request, function next(err, client) { + if (err || !client) { + socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); + socket.destroy(); + return; + } + + socket.removeListener('error', onSocketError); + + wss.handleUpgrade(request, socket, head, function done(ws) { + wss.emit('connection', ws, request, client); + }); + }); +}); + +server.listen(8080); +``` + +Also see the provided [example][session-parse-example] using `express-session`. + +### Server broadcast + +A client WebSocket broadcasting to all connected WebSocket clients, including +itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +A client WebSocket broadcasting to every other connected WebSocket clients, +excluding itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client !== ws && client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +### Round-trip time + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +ws.on('error', console.error); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now()); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data) { + console.log(`Round-trip time: ${Date.now() - data} ms`); + + setTimeout(function timeout() { + ws.send(Date.now()); + }, 500); +}); +``` + +### Use the Node.js streams API + +```js +import WebSocket, { createWebSocketStream } from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +const duplex = createWebSocketStream(ws, { encoding: 'utf8' }); + +duplex.on('error', console.error); + +duplex.pipe(process.stdout); +process.stdin.pipe(duplex); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Otherwise, see the test cases. + +## FAQ + +### How to get the IP address of the client? + +The remote IP address can be obtained from the raw socket. + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws, req) { + const ip = req.socket.remoteAddress; + + ws.on('error', console.error); +}); +``` + +When the server runs behind a proxy like NGINX, the de-facto standard is to use +the `X-Forwarded-For` header. + +```js +wss.on('connection', function connection(ws, req) { + const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); + + ws.on('error', console.error); +}); +``` + +### How to detect and close broken connections? + +Sometimes the link between the server and the client can be interrupted in a way +that keeps both the server and the client unaware of the broken state of the +connection (e.g. when pulling the cord). + +In these cases ping messages can be used as a means to verify that the remote +endpoint is still responsive. + +```js +import { WebSocketServer } from 'ws'; + +function heartbeat() { + this.isAlive = true; +} + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.isAlive = true; + ws.on('error', console.error); + ws.on('pong', heartbeat); +}); + +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + + ws.isAlive = false; + ws.ping(); + }); +}, 30000); + +wss.on('close', function close() { + clearInterval(interval); +}); +``` + +Pong messages are automatically sent in response to ping messages as required by +the spec. + +Just like the server example above your clients might as well lose connection +without knowing it. You might want to add a ping listener on your clients to +prevent that. A simple implementation would be: + +```js +import WebSocket from 'ws'; + +function heartbeat() { + clearTimeout(this.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + this.pingTimeout = setTimeout(() => { + this.terminate(); + }, 30000 + 1000); +} + +const client = new WebSocket('wss://websocket-echo.com/'); + +client.on('error', console.error); +client.on('open', heartbeat); +client.on('ping', heartbeat); +client.on('close', function clear() { + clearTimeout(this.pingTimeout); +}); +``` + +### How to connect via a proxy? + +Use a custom `http.Agent` implementation like [https-proxy-agent][] or +[socks-proxy-agent][]. + +## Changelog + +We're using the GitHub [releases][changelog] for changelog entries. + +## License + +[MIT](LICENSE) + +[`buffer.isutf8()`]: https://nodejs.org/api/buffer.html#bufferisutf8input +[changelog]: https://github.com/websockets/ws/releases +[client-report]: http://websockets.github.io/ws/autobahn/clients/ +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[node-zlib-bug]: https://github.com/nodejs/node/issues/8871 +[node-zlib-deflaterawdocs]: + https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options +[permessage-deflate]: https://tools.ietf.org/html/rfc7692 +[server-report]: http://websockets.github.io/ws/autobahn/servers/ +[session-parse-example]: ./examples/express-session-parse +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[ws-server-options]: ./doc/ws.md#new-websocketserveroptions-callback diff --git a/node_modules/ws/browser.js b/node_modules/ws/browser.js new file mode 100644 index 0000000..ca4f628 --- /dev/null +++ b/node_modules/ws/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = function () { + throw new Error( + 'ws does not work in the browser. Browser clients must use the native ' + + 'WebSocket object' + ); +}; diff --git a/node_modules/ws/index.js b/node_modules/ws/index.js new file mode 100644 index 0000000..41edb3b --- /dev/null +++ b/node_modules/ws/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const WebSocket = require('./lib/websocket'); + +WebSocket.createWebSocketStream = require('./lib/stream'); +WebSocket.Server = require('./lib/websocket-server'); +WebSocket.Receiver = require('./lib/receiver'); +WebSocket.Sender = require('./lib/sender'); + +WebSocket.WebSocket = WebSocket; +WebSocket.WebSocketServer = WebSocket.Server; + +module.exports = WebSocket; diff --git a/node_modules/ws/lib/buffer-util.js b/node_modules/ws/lib/buffer-util.js new file mode 100644 index 0000000..f7536e2 --- /dev/null +++ b/node_modules/ws/lib/buffer-util.js @@ -0,0 +1,131 @@ +'use strict'; + +const { EMPTY_BUFFER } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; + +/** + * Merges an array of buffers into a new buffer. + * + * @param {Buffer[]} list The array of buffers to concat + * @param {Number} totalLength The total length of buffers in the list + * @return {Buffer} The resulting buffer + * @public + */ +function concat(list, totalLength) { + if (list.length === 0) return EMPTY_BUFFER; + if (list.length === 1) return list[0]; + + const target = Buffer.allocUnsafe(totalLength); + let offset = 0; + + for (let i = 0; i < list.length; i++) { + const buf = list[i]; + target.set(buf, offset); + offset += buf.length; + } + + if (offset < totalLength) { + return new FastBuffer(target.buffer, target.byteOffset, offset); + } + + return target; +} + +/** + * Masks a buffer using the given mask. + * + * @param {Buffer} source The buffer to mask + * @param {Buffer} mask The mask to use + * @param {Buffer} output The buffer where to store the result + * @param {Number} offset The offset at which to start writing + * @param {Number} length The number of bytes to mask. + * @public + */ +function _mask(source, mask, output, offset, length) { + for (let i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +} + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +function _unmask(buffer, mask) { + for (let i = 0; i < buffer.length; i++) { + buffer[i] ^= mask[i & 3]; + } +} + +/** + * Converts a buffer to an `ArrayBuffer`. + * + * @param {Buffer} buf The buffer to convert + * @return {ArrayBuffer} Converted buffer + * @public + */ +function toArrayBuffer(buf) { + if (buf.length === buf.buffer.byteLength) { + return buf.buffer; + } + + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); +} + +/** + * Converts `data` to a `Buffer`. + * + * @param {*} data The data to convert + * @return {Buffer} The buffer + * @throws {TypeError} + * @public + */ +function toBuffer(data) { + toBuffer.readOnly = true; + + if (Buffer.isBuffer(data)) return data; + + let buf; + + if (data instanceof ArrayBuffer) { + buf = new FastBuffer(data); + } else if (ArrayBuffer.isView(data)) { + buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } else { + buf = Buffer.from(data); + toBuffer.readOnly = false; + } + + return buf; +} + +module.exports = { + concat, + mask: _mask, + toArrayBuffer, + toBuffer, + unmask: _unmask +}; + +/* istanbul ignore else */ +if (!process.env.WS_NO_BUFFER_UTIL) { + try { + const bufferUtil = require('bufferutil'); + + module.exports.mask = function (source, mask, output, offset, length) { + if (length < 48) _mask(source, mask, output, offset, length); + else bufferUtil.mask(source, mask, output, offset, length); + }; + + module.exports.unmask = function (buffer, mask) { + if (buffer.length < 32) _unmask(buffer, mask); + else bufferUtil.unmask(buffer, mask); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/constants.js b/node_modules/ws/lib/constants.js new file mode 100644 index 0000000..d691b30 --- /dev/null +++ b/node_modules/ws/lib/constants.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = { + BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'], + EMPTY_BUFFER: Buffer.alloc(0), + GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', + kForOnEventAttribute: Symbol('kIsForOnEventAttribute'), + kListener: Symbol('kListener'), + kStatusCode: Symbol('status-code'), + kWebSocket: Symbol('websocket'), + NOOP: () => {} +}; diff --git a/node_modules/ws/lib/event-target.js b/node_modules/ws/lib/event-target.js new file mode 100644 index 0000000..fea4cbc --- /dev/null +++ b/node_modules/ws/lib/event-target.js @@ -0,0 +1,292 @@ +'use strict'; + +const { kForOnEventAttribute, kListener } = require('./constants'); + +const kCode = Symbol('kCode'); +const kData = Symbol('kData'); +const kError = Symbol('kError'); +const kMessage = Symbol('kMessage'); +const kReason = Symbol('kReason'); +const kTarget = Symbol('kTarget'); +const kType = Symbol('kType'); +const kWasClean = Symbol('kWasClean'); + +/** + * Class representing an event. + */ +class Event { + /** + * Create a new `Event`. + * + * @param {String} type The name of the event + * @throws {TypeError} If the `type` argument is not specified + */ + constructor(type) { + this[kTarget] = null; + this[kType] = type; + } + + /** + * @type {*} + */ + get target() { + return this[kTarget]; + } + + /** + * @type {String} + */ + get type() { + return this[kType]; + } +} + +Object.defineProperty(Event.prototype, 'target', { enumerable: true }); +Object.defineProperty(Event.prototype, 'type', { enumerable: true }); + +/** + * Class representing a close event. + * + * @extends Event + */ +class CloseEvent extends Event { + /** + * Create a new `CloseEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {Number} [options.code=0] The status code explaining why the + * connection was closed + * @param {String} [options.reason=''] A human-readable string explaining why + * the connection was closed + * @param {Boolean} [options.wasClean=false] Indicates whether or not the + * connection was cleanly closed + */ + constructor(type, options = {}) { + super(type); + + this[kCode] = options.code === undefined ? 0 : options.code; + this[kReason] = options.reason === undefined ? '' : options.reason; + this[kWasClean] = options.wasClean === undefined ? false : options.wasClean; + } + + /** + * @type {Number} + */ + get code() { + return this[kCode]; + } + + /** + * @type {String} + */ + get reason() { + return this[kReason]; + } + + /** + * @type {Boolean} + */ + get wasClean() { + return this[kWasClean]; + } +} + +Object.defineProperty(CloseEvent.prototype, 'code', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true }); + +/** + * Class representing an error event. + * + * @extends Event + */ +class ErrorEvent extends Event { + /** + * Create a new `ErrorEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.error=null] The error that generated this event + * @param {String} [options.message=''] The error message + */ + constructor(type, options = {}) { + super(type); + + this[kError] = options.error === undefined ? null : options.error; + this[kMessage] = options.message === undefined ? '' : options.message; + } + + /** + * @type {*} + */ + get error() { + return this[kError]; + } + + /** + * @type {String} + */ + get message() { + return this[kMessage]; + } +} + +Object.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true }); +Object.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true }); + +/** + * Class representing a message event. + * + * @extends Event + */ +class MessageEvent extends Event { + /** + * Create a new `MessageEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.data=null] The message content + */ + constructor(type, options = {}) { + super(type); + + this[kData] = options.data === undefined ? null : options.data; + } + + /** + * @type {*} + */ + get data() { + return this[kData]; + } +} + +Object.defineProperty(MessageEvent.prototype, 'data', { enumerable: true }); + +/** + * This provides methods for emulating the `EventTarget` interface. It's not + * meant to be used directly. + * + * @mixin + */ +const EventTarget = { + /** + * Register an event listener. + * + * @param {String} type A string representing the event type to listen for + * @param {(Function|Object)} handler The listener to add + * @param {Object} [options] An options object specifies characteristics about + * the event listener + * @param {Boolean} [options.once=false] A `Boolean` indicating that the + * listener should be invoked at most once after being added. If `true`, + * the listener would be automatically removed when invoked. + * @public + */ + addEventListener(type, handler, options = {}) { + for (const listener of this.listeners(type)) { + if ( + !options[kForOnEventAttribute] && + listener[kListener] === handler && + !listener[kForOnEventAttribute] + ) { + return; + } + } + + let wrapper; + + if (type === 'message') { + wrapper = function onMessage(data, isBinary) { + const event = new MessageEvent('message', { + data: isBinary ? data : data.toString() + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'close') { + wrapper = function onClose(code, message) { + const event = new CloseEvent('close', { + code, + reason: message.toString(), + wasClean: this._closeFrameReceived && this._closeFrameSent + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'error') { + wrapper = function onError(error) { + const event = new ErrorEvent('error', { + error, + message: error.message + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'open') { + wrapper = function onOpen() { + const event = new Event('open'); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else { + return; + } + + wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute]; + wrapper[kListener] = handler; + + if (options.once) { + this.once(type, wrapper); + } else { + this.on(type, wrapper); + } + }, + + /** + * Remove an event listener. + * + * @param {String} type A string representing the event type to remove + * @param {(Function|Object)} handler The listener to remove + * @public + */ + removeEventListener(type, handler) { + for (const listener of this.listeners(type)) { + if (listener[kListener] === handler && !listener[kForOnEventAttribute]) { + this.removeListener(type, listener); + break; + } + } + } +}; + +module.exports = { + CloseEvent, + ErrorEvent, + Event, + EventTarget, + MessageEvent +}; + +/** + * Call an event listener + * + * @param {(Function|Object)} listener The listener to call + * @param {*} thisArg The value to use as `this`` when calling the listener + * @param {Event} event The event to pass to the listener + * @private + */ +function callListener(listener, thisArg, event) { + if (typeof listener === 'object' && listener.handleEvent) { + listener.handleEvent.call(listener, event); + } else { + listener.call(thisArg, event); + } +} diff --git a/node_modules/ws/lib/extension.js b/node_modules/ws/lib/extension.js new file mode 100644 index 0000000..3d7895c --- /dev/null +++ b/node_modules/ws/lib/extension.js @@ -0,0 +1,203 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Adds an offer to the map of extension offers or a parameter to the map of + * parameters. + * + * @param {Object} dest The map of extension offers or parameters + * @param {String} name The extension or parameter name + * @param {(Object|Boolean|String)} elem The extension parameters or the + * parameter value + * @private + */ +function push(dest, name, elem) { + if (dest[name] === undefined) dest[name] = [elem]; + else dest[name].push(elem); +} + +/** + * Parses the `Sec-WebSocket-Extensions` header into an object. + * + * @param {String} header The field value of the header + * @return {Object} The parsed object + * @public + */ +function parse(header) { + const offers = Object.create(null); + let params = Object.create(null); + let mustUnescape = false; + let isEscaping = false; + let inQuotes = false; + let extensionName; + let paramName; + let start = -1; + let code = -1; + let end = -1; + let i = 0; + + for (; i < header.length; i++) { + code = header.charCodeAt(i); + + if (extensionName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + const name = header.slice(start, end); + if (code === 0x2c) { + push(offers, name, params); + params = Object.create(null); + } else { + extensionName = name; + } + + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (paramName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x20 || code === 0x09) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + push(params, header.slice(start, end), true); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + start = end = -1; + } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) { + paramName = header.slice(start, i); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else { + // + // The value of a quoted-string after unescaping must conform to the + // token ABNF, so only token characters are valid. + // Ref: https://tools.ietf.org/html/rfc6455#section-9.1 + // + if (isEscaping) { + if (tokenChars[code] !== 1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + if (start === -1) start = i; + else if (!mustUnescape) mustUnescape = true; + isEscaping = false; + } else if (inQuotes) { + if (tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x22 /* '"' */ && start !== -1) { + inQuotes = false; + end = i; + } else if (code === 0x5c /* '\' */) { + isEscaping = true; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) { + inQuotes = true; + } else if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (start !== -1 && (code === 0x20 || code === 0x09)) { + if (end === -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + let value = header.slice(start, end); + if (mustUnescape) { + value = value.replace(/\\/g, ''); + mustUnescape = false; + } + push(params, paramName, value); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + paramName = undefined; + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + } + + if (start === -1 || inQuotes || code === 0x20 || code === 0x09) { + throw new SyntaxError('Unexpected end of input'); + } + + if (end === -1) end = i; + const token = header.slice(start, end); + if (extensionName === undefined) { + push(offers, token, params); + } else { + if (paramName === undefined) { + push(params, token, true); + } else if (mustUnescape) { + push(params, paramName, token.replace(/\\/g, '')); + } else { + push(params, paramName, token); + } + push(offers, extensionName, params); + } + + return offers; +} + +/** + * Builds the `Sec-WebSocket-Extensions` header field value. + * + * @param {Object} extensions The map of extensions and parameters to format + * @return {String} A string representing the given object + * @public + */ +function format(extensions) { + return Object.keys(extensions) + .map((extension) => { + let configurations = extensions[extension]; + if (!Array.isArray(configurations)) configurations = [configurations]; + return configurations + .map((params) => { + return [extension] + .concat( + Object.keys(params).map((k) => { + let values = params[k]; + if (!Array.isArray(values)) values = [values]; + return values + .map((v) => (v === true ? k : `${k}=${v}`)) + .join('; '); + }) + ) + .join('; '); + }) + .join(', '); + }) + .join(', '); +} + +module.exports = { format, parse }; diff --git a/node_modules/ws/lib/limiter.js b/node_modules/ws/lib/limiter.js new file mode 100644 index 0000000..3fd3578 --- /dev/null +++ b/node_modules/ws/lib/limiter.js @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/node_modules/ws/lib/permessage-deflate.js b/node_modules/ws/lib/permessage-deflate.js new file mode 100644 index 0000000..77d918b --- /dev/null +++ b/node_modules/ws/lib/permessage-deflate.js @@ -0,0 +1,514 @@ +'use strict'; + +const zlib = require('zlib'); + +const bufferUtil = require('./buffer-util'); +const Limiter = require('./limiter'); +const { kStatusCode } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; +const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]); +const kPerMessageDeflate = Symbol('permessage-deflate'); +const kTotalLength = Symbol('total-length'); +const kCallback = Symbol('callback'); +const kBuffers = Symbol('buffers'); +const kError = Symbol('error'); + +// +// We limit zlib concurrency, which prevents severe memory fragmentation +// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913 +// and https://github.com/websockets/ws/issues/1202 +// +// Intentionally global; it's the global thread pool that's an issue. +// +let zlibLimiter; + +/** + * permessage-deflate implementation. + */ +class PerMessageDeflate { + /** + * Creates a PerMessageDeflate instance. + * + * @param {Object} [options] Configuration options + * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support + * for, or request, a custom client window size + * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ + * acknowledge disabling of client context takeover + * @param {Number} [options.concurrencyLimit=10] The number of concurrent + * calls to zlib + * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the + * use of a custom server window size + * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept + * disabling of server context takeover + * @param {Number} [options.threshold=1024] Size (in bytes) below which + * messages should not be compressed if context takeover is disabled + * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on + * deflate + * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on + * inflate + * @param {Boolean} [isServer=false] Create the instance in either server or + * client mode + * @param {Number} [maxPayload=0] The maximum allowed message length + */ + constructor(options, isServer, maxPayload) { + this._maxPayload = maxPayload | 0; + this._options = options || {}; + this._threshold = + this._options.threshold !== undefined ? this._options.threshold : 1024; + this._isServer = !!isServer; + this._deflate = null; + this._inflate = null; + + this.params = null; + + if (!zlibLimiter) { + const concurrency = + this._options.concurrencyLimit !== undefined + ? this._options.concurrencyLimit + : 10; + zlibLimiter = new Limiter(concurrency); + } + } + + /** + * @type {String} + */ + static get extensionName() { + return 'permessage-deflate'; + } + + /** + * Create an extension negotiation offer. + * + * @return {Object} Extension parameters + * @public + */ + offer() { + const params = {}; + + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + + return params; + } + + /** + * Accept an extension negotiation offer/response. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Object} Accepted configuration + * @public + */ + accept(configurations) { + configurations = this.normalizeParams(configurations); + + this.params = this._isServer + ? this.acceptAsServer(configurations) + : this.acceptAsClient(configurations); + + return this.params; + } + + /** + * Releases all resources used by the extension. + * + * @public + */ + cleanup() { + if (this._inflate) { + this._inflate.close(); + this._inflate = null; + } + + if (this._deflate) { + const callback = this._deflate[kCallback]; + + this._deflate.close(); + this._deflate = null; + + if (callback) { + callback( + new Error( + 'The deflate stream was closed while data was being processed' + ) + ); + } + } + } + + /** + * Accept an extension negotiation offer. + * + * @param {Array} offers The extension negotiation offers + * @return {Object} Accepted configuration + * @private + */ + acceptAsServer(offers) { + const opts = this._options; + const accepted = offers.find((params) => { + if ( + (opts.serverNoContextTakeover === false && + params.server_no_context_takeover) || + (params.server_max_window_bits && + (opts.serverMaxWindowBits === false || + (typeof opts.serverMaxWindowBits === 'number' && + opts.serverMaxWindowBits > params.server_max_window_bits))) || + (typeof opts.clientMaxWindowBits === 'number' && + !params.client_max_window_bits) + ) { + return false; + } + + return true; + }); + + if (!accepted) { + throw new Error('None of the extension offers can be accepted'); + } + + if (opts.serverNoContextTakeover) { + accepted.server_no_context_takeover = true; + } + if (opts.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (typeof opts.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = opts.serverMaxWindowBits; + } + if (typeof opts.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = opts.clientMaxWindowBits; + } else if ( + accepted.client_max_window_bits === true || + opts.clientMaxWindowBits === false + ) { + delete accepted.client_max_window_bits; + } + + return accepted; + } + + /** + * Accept the extension negotiation response. + * + * @param {Array} response The extension negotiation response + * @return {Object} Accepted configuration + * @private + */ + acceptAsClient(response) { + const params = response[0]; + + if ( + this._options.clientNoContextTakeover === false && + params.client_no_context_takeover + ) { + throw new Error('Unexpected parameter "client_no_context_takeover"'); + } + + if (!params.client_max_window_bits) { + if (typeof this._options.clientMaxWindowBits === 'number') { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } + } else if ( + this._options.clientMaxWindowBits === false || + (typeof this._options.clientMaxWindowBits === 'number' && + params.client_max_window_bits > this._options.clientMaxWindowBits) + ) { + throw new Error( + 'Unexpected or invalid parameter "client_max_window_bits"' + ); + } + + return params; + } + + /** + * Normalize parameters. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Array} The offers/response with normalized parameters + * @private + */ + normalizeParams(configurations) { + configurations.forEach((params) => { + Object.keys(params).forEach((key) => { + let value = params[key]; + + if (value.length > 1) { + throw new Error(`Parameter "${key}" must have only a single value`); + } + + value = value[0]; + + if (key === 'client_max_window_bits') { + if (value !== true) { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if (!this._isServer) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else if (key === 'server_max_window_bits') { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if ( + key === 'client_no_context_takeover' || + key === 'server_no_context_takeover' + ) { + if (value !== true) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else { + throw new Error(`Unknown parameter "${key}"`); + } + + params[key] = value; + }); + }); + + return configurations; + } + + /** + * Decompress data. Concurrency limited. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + decompress(data, fin, callback) { + zlibLimiter.add((done) => { + this._decompress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Compress data. Concurrency limited. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + compress(data, fin, callback) { + zlibLimiter.add((done) => { + this._compress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Decompress data. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _decompress(data, fin, callback) { + const endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._inflate = zlib.createInflateRaw({ + ...this._options.zlibInflateOptions, + windowBits + }); + this._inflate[kPerMessageDeflate] = this; + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + this._inflate.on('error', inflateOnError); + this._inflate.on('data', inflateOnData); + } + + this._inflate[kCallback] = callback; + + this._inflate.write(data); + if (fin) this._inflate.write(TRAILER); + + this._inflate.flush(() => { + const err = this._inflate[kError]; + + if (err) { + this._inflate.close(); + this._inflate = null; + callback(err); + return; + } + + const data = bufferUtil.concat( + this._inflate[kBuffers], + this._inflate[kTotalLength] + ); + + if (this._inflate._readableState.endEmitted) { + this._inflate.close(); + this._inflate = null; + } else { + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._inflate.reset(); + } + } + + callback(null, data); + }); + } + + /** + * Compress data. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _compress(data, fin, callback) { + const endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._deflate = zlib.createDeflateRaw({ + ...this._options.zlibDeflateOptions, + windowBits + }); + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + this._deflate.on('data', deflateOnData); + } + + this._deflate[kCallback] = callback; + + this._deflate.write(data); + this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { + if (!this._deflate) { + // + // The deflate stream was closed while data was being processed. + // + return; + } + + let data = bufferUtil.concat( + this._deflate[kBuffers], + this._deflate[kTotalLength] + ); + + if (fin) { + data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4); + } + + // + // Ensure that the callback will not be called again in + // `PerMessageDeflate#cleanup()`. + // + this._deflate[kCallback] = null; + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._deflate.reset(); + } + + callback(null, data); + }); + } +} + +module.exports = PerMessageDeflate; + +/** + * The listener of the `zlib.DeflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function deflateOnData(chunk) { + this[kBuffers].push(chunk); + this[kTotalLength] += chunk.length; +} + +/** + * The listener of the `zlib.InflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function inflateOnData(chunk) { + this[kTotalLength] += chunk.length; + + if ( + this[kPerMessageDeflate]._maxPayload < 1 || + this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload + ) { + this[kBuffers].push(chunk); + return; + } + + this[kError] = new RangeError('Max payload size exceeded'); + this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'; + this[kError][kStatusCode] = 1009; + this.removeListener('data', inflateOnData); + this.reset(); +} + +/** + * The listener of the `zlib.InflateRaw` stream `'error'` event. + * + * @param {Error} err The emitted error + * @private + */ +function inflateOnError(err) { + // + // There is no need to call `Zlib#close()` as the handle is automatically + // closed when an error is emitted. + // + this[kPerMessageDeflate]._inflate = null; + err[kStatusCode] = 1007; + this[kCallback](err); +} diff --git a/node_modules/ws/lib/receiver.js b/node_modules/ws/lib/receiver.js new file mode 100644 index 0000000..1d425ea --- /dev/null +++ b/node_modules/ws/lib/receiver.js @@ -0,0 +1,679 @@ +'use strict'; + +const { Writable } = require('stream'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + kStatusCode, + kWebSocket +} = require('./constants'); +const { concat, toArrayBuffer, unmask } = require('./buffer-util'); +const { isValidStatusCode, isValidUTF8 } = require('./validation'); + +const FastBuffer = Buffer[Symbol.species]; +const promise = Promise.resolve(); + +// +// `queueMicrotask()` is not available in Node.js < 11. +// +const queueTask = + typeof queueMicrotask === 'function' ? queueMicrotask : queueMicrotaskShim; + +const GET_INFO = 0; +const GET_PAYLOAD_LENGTH_16 = 1; +const GET_PAYLOAD_LENGTH_64 = 2; +const GET_MASK = 3; +const GET_DATA = 4; +const INFLATING = 5; +const WAIT_MICROTASK = 6; + +/** + * HyBi Receiver implementation. + * + * @extends Writable + */ +class Receiver extends Writable { + /** + * Creates a Receiver instance. + * + * @param {Object} [options] Options object + * @param {String} [options.binaryType=nodebuffer] The type for binary data + * @param {Object} [options.extensions] An object containing the negotiated + * extensions + * @param {Boolean} [options.isServer=false] Specifies whether to operate in + * client or server mode + * @param {Number} [options.maxPayload=0] The maximum allowed message length + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + */ + constructor(options = {}) { + super(); + + this._binaryType = options.binaryType || BINARY_TYPES[0]; + this._extensions = options.extensions || {}; + this._isServer = !!options.isServer; + this._maxPayload = options.maxPayload | 0; + this._skipUTF8Validation = !!options.skipUTF8Validation; + this[kWebSocket] = undefined; + + this._bufferedBytes = 0; + this._buffers = []; + + this._compressed = false; + this._payloadLength = 0; + this._mask = undefined; + this._fragmented = 0; + this._masked = false; + this._fin = false; + this._opcode = 0; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragments = []; + + this._state = GET_INFO; + this._loop = false; + } + + /** + * Implements `Writable.prototype._write()`. + * + * @param {Buffer} chunk The chunk of data to write + * @param {String} encoding The character encoding of `chunk` + * @param {Function} cb Callback + * @private + */ + _write(chunk, encoding, cb) { + if (this._opcode === 0x08 && this._state == GET_INFO) return cb(); + + this._bufferedBytes += chunk.length; + this._buffers.push(chunk); + this.startLoop(cb); + } + + /** + * Consumes `n` bytes from the buffered data. + * + * @param {Number} n The number of bytes to consume + * @return {Buffer} The consumed bytes + * @private + */ + consume(n) { + this._bufferedBytes -= n; + + if (n === this._buffers[0].length) return this._buffers.shift(); + + if (n < this._buffers[0].length) { + const buf = this._buffers[0]; + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + + return new FastBuffer(buf.buffer, buf.byteOffset, n); + } + + const dst = Buffer.allocUnsafe(n); + + do { + const buf = this._buffers[0]; + const offset = dst.length - n; + + if (n >= buf.length) { + dst.set(this._buffers.shift(), offset); + } else { + dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset); + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + } + + n -= buf.length; + } while (n > 0); + + return dst; + } + + /** + * Starts the parsing loop. + * + * @param {Function} cb Callback + * @private + */ + startLoop(cb) { + let err; + this._loop = true; + + do { + switch (this._state) { + case GET_INFO: + err = this.getInfo(); + break; + case GET_PAYLOAD_LENGTH_16: + err = this.getPayloadLength16(); + break; + case GET_PAYLOAD_LENGTH_64: + err = this.getPayloadLength64(); + break; + case GET_MASK: + this.getMask(); + break; + case GET_DATA: + err = this.getData(cb); + break; + case INFLATING: + this._loop = false; + return; + default: + // + // `WAIT_MICROTASK`. + // + this._loop = false; + + queueTask(() => { + this._state = GET_INFO; + this.startLoop(cb); + }); + return; + } + } while (this._loop); + + cb(err); + } + + /** + * Reads the first two bytes of a frame. + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getInfo() { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + const buf = this.consume(2); + + if ((buf[0] & 0x30) !== 0x00) { + this._loop = false; + return error( + RangeError, + 'RSV2 and RSV3 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_2_3' + ); + } + + const compressed = (buf[0] & 0x40) === 0x40; + + if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + this._fin = (buf[0] & 0x80) === 0x80; + this._opcode = buf[0] & 0x0f; + this._payloadLength = buf[1] & 0x7f; + + if (this._opcode === 0x00) { + if (compressed) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + if (!this._fragmented) { + this._loop = false; + return error( + RangeError, + 'invalid opcode 0', + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + this._opcode = this._fragmented; + } else if (this._opcode === 0x01 || this._opcode === 0x02) { + if (this._fragmented) { + this._loop = false; + return error( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + this._compressed = compressed; + } else if (this._opcode > 0x07 && this._opcode < 0x0b) { + if (!this._fin) { + this._loop = false; + return error( + RangeError, + 'FIN must be set', + true, + 1002, + 'WS_ERR_EXPECTED_FIN' + ); + } + + if (compressed) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + if ( + this._payloadLength > 0x7d || + (this._opcode === 0x08 && this._payloadLength === 1) + ) { + this._loop = false; + return error( + RangeError, + `invalid payload length ${this._payloadLength}`, + true, + 1002, + 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH' + ); + } + } else { + this._loop = false; + return error( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + if (!this._fin && !this._fragmented) this._fragmented = this._opcode; + this._masked = (buf[1] & 0x80) === 0x80; + + if (this._isServer) { + if (!this._masked) { + this._loop = false; + return error( + RangeError, + 'MASK must be set', + true, + 1002, + 'WS_ERR_EXPECTED_MASK' + ); + } + } else if (this._masked) { + this._loop = false; + return error( + RangeError, + 'MASK must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_MASK' + ); + } + + if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; + else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; + else return this.haveLength(); + } + + /** + * Gets extended payload length (7+16). + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getPayloadLength16() { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + this._payloadLength = this.consume(2).readUInt16BE(0); + return this.haveLength(); + } + + /** + * Gets extended payload length (7+64). + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getPayloadLength64() { + if (this._bufferedBytes < 8) { + this._loop = false; + return; + } + + const buf = this.consume(8); + const num = buf.readUInt32BE(0); + + // + // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned + // if payload length is greater than this number. + // + if (num > Math.pow(2, 53 - 32) - 1) { + this._loop = false; + return error( + RangeError, + 'Unsupported WebSocket frame: payload length > 2^53 - 1', + false, + 1009, + 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH' + ); + } + + this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); + return this.haveLength(); + } + + /** + * Payload length has been read. + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + haveLength() { + if (this._payloadLength && this._opcode < 0x08) { + this._totalPayloadLength += this._payloadLength; + if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { + this._loop = false; + return error( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + } + } + + if (this._masked) this._state = GET_MASK; + else this._state = GET_DATA; + } + + /** + * Reads mask bytes. + * + * @private + */ + getMask() { + if (this._bufferedBytes < 4) { + this._loop = false; + return; + } + + this._mask = this.consume(4); + this._state = GET_DATA; + } + + /** + * Reads data bytes. + * + * @param {Function} cb Callback + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + getData(cb) { + let data = EMPTY_BUFFER; + + if (this._payloadLength) { + if (this._bufferedBytes < this._payloadLength) { + this._loop = false; + return; + } + + data = this.consume(this._payloadLength); + + if ( + this._masked && + (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0 + ) { + unmask(data, this._mask); + } + } + + if (this._opcode > 0x07) return this.controlMessage(data); + + if (this._compressed) { + this._state = INFLATING; + this.decompress(data, cb); + return; + } + + if (data.length) { + // + // This message is not compressed so its length is the sum of the payload + // length of all fragments. + // + this._messageLength = this._totalPayloadLength; + this._fragments.push(data); + } + + return this.dataMessage(); + } + + /** + * Decompresses data. + * + * @param {Buffer} data Compressed data + * @param {Function} cb Callback + * @private + */ + decompress(data, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + perMessageDeflate.decompress(data, this._fin, (err, buf) => { + if (err) return cb(err); + + if (buf.length) { + this._messageLength += buf.length; + if (this._messageLength > this._maxPayload && this._maxPayload > 0) { + return cb( + error( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ) + ); + } + + this._fragments.push(buf); + } + + const er = this.dataMessage(); + if (er) return cb(er); + + this.startLoop(cb); + }); + } + + /** + * Handles a data message. + * + * @return {(Error|undefined)} A possible error + * @private + */ + dataMessage() { + if (this._fin) { + const messageLength = this._messageLength; + const fragments = this._fragments; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragmented = 0; + this._fragments = []; + + if (this._opcode === 2) { + let data; + + if (this._binaryType === 'nodebuffer') { + data = concat(fragments, messageLength); + } else if (this._binaryType === 'arraybuffer') { + data = toArrayBuffer(concat(fragments, messageLength)); + } else { + data = fragments; + } + + this.emit('message', data, true); + } else { + const buf = concat(fragments, messageLength); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + this._loop = false; + return error( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + } + + this.emit('message', buf, false); + } + } + + this._state = WAIT_MICROTASK; + } + + /** + * Handles a control message. + * + * @param {Buffer} data Data to handle + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + controlMessage(data) { + if (this._opcode === 0x08) { + this._loop = false; + + if (data.length === 0) { + this.emit('conclude', 1005, EMPTY_BUFFER); + this.end(); + + this._state = GET_INFO; + } else { + const code = data.readUInt16BE(0); + + if (!isValidStatusCode(code)) { + return error( + RangeError, + `invalid status code ${code}`, + true, + 1002, + 'WS_ERR_INVALID_CLOSE_CODE' + ); + } + + const buf = new FastBuffer( + data.buffer, + data.byteOffset + 2, + data.length - 2 + ); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + return error( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + } + + this.emit('conclude', code, buf); + this.end(); + + this._state = GET_INFO; + } + } else if (this._opcode === 0x09) { + this.emit('ping', data); + this._state = WAIT_MICROTASK; + } else { + this.emit('pong', data); + this._state = WAIT_MICROTASK; + } + } +} + +module.exports = Receiver; + +/** + * Builds an error object. + * + * @param {function(new:Error|RangeError)} ErrorCtor The error constructor + * @param {String} message The error message + * @param {Boolean} prefix Specifies whether or not to add a default prefix to + * `message` + * @param {Number} statusCode The status code + * @param {String} errorCode The exposed error code + * @return {(Error|RangeError)} The error + * @private + */ +function error(ErrorCtor, message, prefix, statusCode, errorCode) { + const err = new ErrorCtor( + prefix ? `Invalid WebSocket frame: ${message}` : message + ); + + Error.captureStackTrace(err, error); + err.code = errorCode; + err[kStatusCode] = statusCode; + return err; +} + +/** + * A shim for `queueMicrotask()`. + * + * @param {Function} cb Callback + */ +function queueMicrotaskShim(cb) { + promise.then(cb).catch(throwErrorNextTick); +} + +/** + * Throws an error. + * + * @param {Error} err The error to throw + * @private + */ +function throwError(err) { + throw err; +} + +/** + * Throws an error in the next tick. + * + * @param {Error} err The error to throw + * @private + */ +function throwErrorNextTick(err) { + process.nextTick(throwError, err); +} diff --git a/node_modules/ws/lib/sender.js b/node_modules/ws/lib/sender.js new file mode 100644 index 0000000..1ed04b0 --- /dev/null +++ b/node_modules/ws/lib/sender.js @@ -0,0 +1,477 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex" }] */ + +'use strict'; + +const { Duplex } = require('stream'); +const { randomFillSync } = require('crypto'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { EMPTY_BUFFER } = require('./constants'); +const { isValidStatusCode } = require('./validation'); +const { mask: applyMask, toBuffer } = require('./buffer-util'); + +const kByteLength = Symbol('kByteLength'); +const maskBuffer = Buffer.alloc(4); + +/** + * HyBi Sender implementation. + */ +class Sender { + /** + * Creates a Sender instance. + * + * @param {Duplex} socket The connection socket + * @param {Object} [extensions] An object containing the negotiated extensions + * @param {Function} [generateMask] The function used to generate the masking + * key + */ + constructor(socket, extensions, generateMask) { + this._extensions = extensions || {}; + + if (generateMask) { + this._generateMask = generateMask; + this._maskBuffer = Buffer.alloc(4); + } + + this._socket = socket; + + this._firstFragment = true; + this._compress = false; + + this._bufferedBytes = 0; + this._deflating = false; + this._queue = []; + } + + /** + * Frames a piece of data according to the HyBi WebSocket protocol. + * + * @param {(Buffer|String)} data The data to frame + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @return {(Buffer|String)[]} The framed data + * @public + */ + static frame(data, options) { + let mask; + let merge = false; + let offset = 2; + let skipMasking = false; + + if (options.mask) { + mask = options.maskBuffer || maskBuffer; + + if (options.generateMask) { + options.generateMask(mask); + } else { + randomFillSync(mask, 0, 4); + } + + skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; + offset = 6; + } + + let dataLength; + + if (typeof data === 'string') { + if ( + (!options.mask || skipMasking) && + options[kByteLength] !== undefined + ) { + dataLength = options[kByteLength]; + } else { + data = Buffer.from(data); + dataLength = data.length; + } + } else { + dataLength = data.length; + merge = options.mask && options.readOnly && !skipMasking; + } + + let payloadLength = dataLength; + + if (dataLength >= 65536) { + offset += 8; + payloadLength = 127; + } else if (dataLength > 125) { + offset += 2; + payloadLength = 126; + } + + const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset); + + target[0] = options.fin ? options.opcode | 0x80 : options.opcode; + if (options.rsv1) target[0] |= 0x40; + + target[1] = payloadLength; + + if (payloadLength === 126) { + target.writeUInt16BE(dataLength, 2); + } else if (payloadLength === 127) { + target[2] = target[3] = 0; + target.writeUIntBE(dataLength, 4, 6); + } + + if (!options.mask) return [target, data]; + + target[1] |= 0x80; + target[offset - 4] = mask[0]; + target[offset - 3] = mask[1]; + target[offset - 2] = mask[2]; + target[offset - 1] = mask[3]; + + if (skipMasking) return [target, data]; + + if (merge) { + applyMask(data, mask, target, offset, dataLength); + return [target]; + } + + applyMask(data, mask, data, 0, dataLength); + return [target, data]; + } + + /** + * Sends a close message to the other peer. + * + * @param {Number} [code] The status code component of the body + * @param {(String|Buffer)} [data] The message component of the body + * @param {Boolean} [mask=false] Specifies whether or not to mask the message + * @param {Function} [cb] Callback + * @public + */ + close(code, data, mask, cb) { + let buf; + + if (code === undefined) { + buf = EMPTY_BUFFER; + } else if (typeof code !== 'number' || !isValidStatusCode(code)) { + throw new TypeError('First argument must be a valid error code number'); + } else if (data === undefined || !data.length) { + buf = Buffer.allocUnsafe(2); + buf.writeUInt16BE(code, 0); + } else { + const length = Buffer.byteLength(data); + + if (length > 123) { + throw new RangeError('The message must not be greater than 123 bytes'); + } + + buf = Buffer.allocUnsafe(2 + length); + buf.writeUInt16BE(code, 0); + + if (typeof data === 'string') { + buf.write(data, 2); + } else { + buf.set(data, 2); + } + } + + const options = { + [kByteLength]: buf.length, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x08, + readOnly: false, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, buf, false, options, cb]); + } else { + this.sendFrame(Sender.frame(buf, options), cb); + } + } + + /** + * Sends a ping message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + ping(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x09, + readOnly, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a pong message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + pong(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x0a, + readOnly, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a data message to the other peer. + * + * @param {*} data The message to send + * @param {Object} options Options object + * @param {Boolean} [options.binary=false] Specifies whether `data` is binary + * or text + * @param {Boolean} [options.compress=false] Specifies whether or not to + * compress `data` + * @param {Boolean} [options.fin=false] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Function} [cb] Callback + * @public + */ + send(data, options, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + let opcode = options.binary ? 2 : 1; + let rsv1 = options.compress; + + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (this._firstFragment) { + this._firstFragment = false; + if ( + rsv1 && + perMessageDeflate && + perMessageDeflate.params[ + perMessageDeflate._isServer + ? 'server_no_context_takeover' + : 'client_no_context_takeover' + ] + ) { + rsv1 = byteLength >= perMessageDeflate._threshold; + } + this._compress = rsv1; + } else { + rsv1 = false; + opcode = 0; + } + + if (options.fin) this._firstFragment = true; + + if (perMessageDeflate) { + const opts = { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1 + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, this._compress, opts, cb]); + } else { + this.dispatch(data, this._compress, opts, cb); + } + } else { + this.sendFrame( + Sender.frame(data, { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1: false + }), + cb + ); + } + } + + /** + * Dispatches a message. + * + * @param {(Buffer|String)} data The message to send + * @param {Boolean} [compress=false] Specifies whether or not to compress + * `data` + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + dispatch(data, compress, options, cb) { + if (!compress) { + this.sendFrame(Sender.frame(data, options), cb); + return; + } + + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + this._bufferedBytes += options[kByteLength]; + this._deflating = true; + perMessageDeflate.compress(data, options.fin, (_, buf) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while data was being compressed' + ); + + if (typeof cb === 'function') cb(err); + + for (let i = 0; i < this._queue.length; i++) { + const params = this._queue[i]; + const callback = params[params.length - 1]; + + if (typeof callback === 'function') callback(err); + } + + return; + } + + this._bufferedBytes -= options[kByteLength]; + this._deflating = false; + options.readOnly = false; + this.sendFrame(Sender.frame(buf, options), cb); + this.dequeue(); + }); + } + + /** + * Executes queued send operations. + * + * @private + */ + dequeue() { + while (!this._deflating && this._queue.length) { + const params = this._queue.shift(); + + this._bufferedBytes -= params[3][kByteLength]; + Reflect.apply(params[0], this, params.slice(1)); + } + } + + /** + * Enqueues a send operation. + * + * @param {Array} params Send operation parameters. + * @private + */ + enqueue(params) { + this._bufferedBytes += params[3][kByteLength]; + this._queue.push(params); + } + + /** + * Sends a frame. + * + * @param {Buffer[]} list The frame to send + * @param {Function} [cb] Callback + * @private + */ + sendFrame(list, cb) { + if (list.length === 2) { + this._socket.cork(); + this._socket.write(list[0]); + this._socket.write(list[1], cb); + this._socket.uncork(); + } else { + this._socket.write(list[0], cb); + } + } +} + +module.exports = Sender; diff --git a/node_modules/ws/lib/stream.js b/node_modules/ws/lib/stream.js new file mode 100644 index 0000000..230734b --- /dev/null +++ b/node_modules/ws/lib/stream.js @@ -0,0 +1,159 @@ +'use strict'; + +const { Duplex } = require('stream'); + +/** + * Emits the `'close'` event on a stream. + * + * @param {Duplex} stream The stream. + * @private + */ +function emitClose(stream) { + stream.emit('close'); +} + +/** + * The listener of the `'end'` event. + * + * @private + */ +function duplexOnEnd() { + if (!this.destroyed && this._writableState.finished) { + this.destroy(); + } +} + +/** + * The listener of the `'error'` event. + * + * @param {Error} err The error + * @private + */ +function duplexOnError(err) { + this.removeListener('error', duplexOnError); + this.destroy(); + if (this.listenerCount('error') === 0) { + // Do not suppress the throwing behavior. + this.emit('error', err); + } +} + +/** + * Wraps a `WebSocket` in a duplex stream. + * + * @param {WebSocket} ws The `WebSocket` to wrap + * @param {Object} [options] The options for the `Duplex` constructor + * @return {Duplex} The duplex stream + * @public + */ +function createWebSocketStream(ws, options) { + let terminateOnDestroy = true; + + const duplex = new Duplex({ + ...options, + autoDestroy: false, + emitClose: false, + objectMode: false, + writableObjectMode: false + }); + + ws.on('message', function message(msg, isBinary) { + const data = + !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; + + if (!duplex.push(data)) ws.pause(); + }); + + ws.once('error', function error(err) { + if (duplex.destroyed) return; + + // Prevent `ws.terminate()` from being called by `duplex._destroy()`. + // + // - If the `'error'` event is emitted before the `'open'` event, then + // `ws.terminate()` is a noop as no socket is assigned. + // - Otherwise, the error is re-emitted by the listener of the `'error'` + // event of the `Receiver` object. The listener already closes the + // connection by calling `ws.close()`. This allows a close frame to be + // sent to the other peer. If `ws.terminate()` is called right after this, + // then the close frame might not be sent. + terminateOnDestroy = false; + duplex.destroy(err); + }); + + ws.once('close', function close() { + if (duplex.destroyed) return; + + duplex.push(null); + }); + + duplex._destroy = function (err, callback) { + if (ws.readyState === ws.CLOSED) { + callback(err); + process.nextTick(emitClose, duplex); + return; + } + + let called = false; + + ws.once('error', function error(err) { + called = true; + callback(err); + }); + + ws.once('close', function close() { + if (!called) callback(err); + process.nextTick(emitClose, duplex); + }); + + if (terminateOnDestroy) ws.terminate(); + }; + + duplex._final = function (callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._final(callback); + }); + return; + } + + // If the value of the `_socket` property is `null` it means that `ws` is a + // client websocket and the handshake failed. In fact, when this happens, a + // socket is never assigned to the websocket. Wait for the `'error'` event + // that will be emitted by the websocket. + if (ws._socket === null) return; + + if (ws._socket._writableState.finished) { + callback(); + if (duplex._readableState.endEmitted) duplex.destroy(); + } else { + ws._socket.once('finish', function finish() { + // `duplex` is not destroyed here because the `'end'` event will be + // emitted on `duplex` after this `'finish'` event. The EOF signaling + // `null` chunk is, in fact, pushed when the websocket emits `'close'`. + callback(); + }); + ws.close(); + } + }; + + duplex._read = function () { + if (ws.isPaused) ws.resume(); + }; + + duplex._write = function (chunk, encoding, callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._write(chunk, encoding, callback); + }); + return; + } + + ws.send(chunk, callback); + }; + + duplex.on('end', duplexOnEnd); + duplex.on('error', duplexOnError); + return duplex; +} + +module.exports = createWebSocketStream; diff --git a/node_modules/ws/lib/subprotocol.js b/node_modules/ws/lib/subprotocol.js new file mode 100644 index 0000000..d4381e8 --- /dev/null +++ b/node_modules/ws/lib/subprotocol.js @@ -0,0 +1,62 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. + * + * @param {String} header The field value of the header + * @return {Set} The subprotocol names + * @public + */ +function parse(header) { + const protocols = new Set(); + let start = -1; + let end = -1; + let i = 0; + + for (i; i < header.length; i++) { + const code = header.charCodeAt(i); + + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + + const protocol = header.slice(start, end); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + + if (start === -1 || end !== -1) { + throw new SyntaxError('Unexpected end of input'); + } + + const protocol = header.slice(start, i); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + return protocols; +} + +module.exports = { parse }; diff --git a/node_modules/ws/lib/validation.js b/node_modules/ws/lib/validation.js new file mode 100644 index 0000000..c352e6e --- /dev/null +++ b/node_modules/ws/lib/validation.js @@ -0,0 +1,130 @@ +'use strict'; + +const { isUtf8 } = require('buffer'); + +// +// Allowed token characters: +// +// '!', '#', '$', '%', '&', ''', '*', '+', '-', +// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~' +// +// tokenChars[32] === 0 // ' ' +// tokenChars[33] === 1 // '!' +// tokenChars[34] === 0 // '"' +// ... +// +// prettier-ignore +const tokenChars = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 +]; + +/** + * Checks if a status code is allowed in a close frame. + * + * @param {Number} code The status code + * @return {Boolean} `true` if the status code is valid, else `false` + * @public + */ +function isValidStatusCode(code) { + return ( + (code >= 1000 && + code <= 1014 && + code !== 1004 && + code !== 1005 && + code !== 1006) || + (code >= 3000 && code <= 4999) + ); +} + +/** + * Checks if a given buffer contains only correct UTF-8. + * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by + * Markus Kuhn. + * + * @param {Buffer} buf The buffer to check + * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` + * @public + */ +function _isValidUTF8(buf) { + const len = buf.length; + let i = 0; + + while (i < len) { + if ((buf[i] & 0x80) === 0) { + // 0xxxxxxx + i++; + } else if ((buf[i] & 0xe0) === 0xc0) { + // 110xxxxx 10xxxxxx + if ( + i + 1 === len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i] & 0xfe) === 0xc0 // Overlong + ) { + return false; + } + + i += 2; + } else if ((buf[i] & 0xf0) === 0xe0) { + // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong + (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF) + ) { + return false; + } + + i += 3; + } else if ((buf[i] & 0xf8) === 0xf0) { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i + 3] & 0xc0) !== 0x80 || + (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong + (buf[i] === 0xf4 && buf[i + 1] > 0x8f) || + buf[i] > 0xf4 // > U+10FFFF + ) { + return false; + } + + i += 4; + } else { + return false; + } + } + + return true; +} + +module.exports = { + isValidStatusCode, + isValidUTF8: _isValidUTF8, + tokenChars +}; + +if (isUtf8) { + module.exports.isValidUTF8 = function (buf) { + return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf); + }; +} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) { + try { + const isValidUTF8 = require('utf-8-validate'); + + module.exports.isValidUTF8 = function (buf) { + return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/websocket-server.js b/node_modules/ws/lib/websocket-server.js new file mode 100644 index 0000000..b0ed7bd --- /dev/null +++ b/node_modules/ws/lib/websocket-server.js @@ -0,0 +1,531 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const http = require('http'); +const { Duplex } = require('stream'); +const { createHash } = require('crypto'); + +const extension = require('./extension'); +const PerMessageDeflate = require('./permessage-deflate'); +const subprotocol = require('./subprotocol'); +const WebSocket = require('./websocket'); +const { GUID, kWebSocket } = require('./constants'); + +const keyRegex = /^[+/0-9A-Za-z]{22}==$/; + +const RUNNING = 0; +const CLOSING = 1; +const CLOSED = 2; + +/** + * Class representing a WebSocket server. + * + * @extends EventEmitter + */ +class WebSocketServer extends EventEmitter { + /** + * Create a `WebSocketServer` instance. + * + * @param {Object} options Configuration options + * @param {Number} [options.backlog=511] The maximum length of the queue of + * pending connections + * @param {Boolean} [options.clientTracking=true] Specifies whether or not to + * track clients + * @param {Function} [options.handleProtocols] A hook to handle protocols + * @param {String} [options.host] The hostname where to bind the server + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.noServer=false] Enable no server mode + * @param {String} [options.path] Accept only connections matching this path + * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable + * permessage-deflate + * @param {Number} [options.port] The port where to bind the server + * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S + * server to use + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @param {Function} [options.verifyClient] A hook to reject connections + * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` + * class to use. It must be the `WebSocket` class or class that extends it + * @param {Function} [callback] A listener for the `listening` event + */ + constructor(options, callback) { + super(); + + options = { + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: false, + handleProtocols: null, + clientTracking: true, + verifyClient: null, + noServer: false, + backlog: null, // use default (511 as implemented in net.js) + server: null, + host: null, + path: null, + port: null, + WebSocket, + ...options + }; + + if ( + (options.port == null && !options.server && !options.noServer) || + (options.port != null && (options.server || options.noServer)) || + (options.server && options.noServer) + ) { + throw new TypeError( + 'One and only one of the "port", "server", or "noServer" options ' + + 'must be specified' + ); + } + + if (options.port != null) { + this._server = http.createServer((req, res) => { + const body = http.STATUS_CODES[426]; + + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.listen( + options.port, + options.host, + options.backlog, + callback + ); + } else if (options.server) { + this._server = options.server; + } + + if (this._server) { + const emitConnection = this.emit.bind(this, 'connection'); + + this._removeListeners = addListeners(this._server, { + listening: this.emit.bind(this, 'listening'), + error: this.emit.bind(this, 'error'), + upgrade: (req, socket, head) => { + this.handleUpgrade(req, socket, head, emitConnection); + } + }); + } + + if (options.perMessageDeflate === true) options.perMessageDeflate = {}; + if (options.clientTracking) { + this.clients = new Set(); + this._shouldEmitClose = false; + } + + this.options = options; + this._state = RUNNING; + } + + /** + * Returns the bound address, the address family name, and port of the server + * as reported by the operating system if listening on an IP socket. + * If the server is listening on a pipe or UNIX domain socket, the name is + * returned as a string. + * + * @return {(Object|String|null)} The address of the server + * @public + */ + address() { + if (this.options.noServer) { + throw new Error('The server is operating in "noServer" mode'); + } + + if (!this._server) return null; + return this._server.address(); + } + + /** + * Stop the server from accepting new connections and emit the `'close'` event + * when all existing connections are closed. + * + * @param {Function} [cb] A one-time listener for the `'close'` event + * @public + */ + close(cb) { + if (this._state === CLOSED) { + if (cb) { + this.once('close', () => { + cb(new Error('The server is not running')); + }); + } + + process.nextTick(emitClose, this); + return; + } + + if (cb) this.once('close', cb); + + if (this._state === CLOSING) return; + this._state = CLOSING; + + if (this.options.noServer || this.options.server) { + if (this._server) { + this._removeListeners(); + this._removeListeners = this._server = null; + } + + if (this.clients) { + if (!this.clients.size) { + process.nextTick(emitClose, this); + } else { + this._shouldEmitClose = true; + } + } else { + process.nextTick(emitClose, this); + } + } else { + const server = this._server; + + this._removeListeners(); + this._removeListeners = this._server = null; + + // + // The HTTP/S server was created internally. Close it, and rely on its + // `'close'` event. + // + server.close(() => { + emitClose(this); + }); + } + } + + /** + * See if a given request should be handled by this server instance. + * + * @param {http.IncomingMessage} req Request object to inspect + * @return {Boolean} `true` if the request is valid, else `false` + * @public + */ + shouldHandle(req) { + if (this.options.path) { + const index = req.url.indexOf('?'); + const pathname = index !== -1 ? req.url.slice(0, index) : req.url; + + if (pathname !== this.options.path) return false; + } + + return true; + } + + /** + * Handle a HTTP Upgrade request. + * + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @public + */ + handleUpgrade(req, socket, head, cb) { + socket.on('error', socketOnError); + + const key = req.headers['sec-websocket-key']; + const version = +req.headers['sec-websocket-version']; + + if (req.method !== 'GET') { + const message = 'Invalid HTTP method'; + abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); + return; + } + + if (req.headers.upgrade.toLowerCase() !== 'websocket') { + const message = 'Invalid Upgrade header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!key || !keyRegex.test(key)) { + const message = 'Missing or invalid Sec-WebSocket-Key header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (version !== 8 && version !== 13) { + const message = 'Missing or invalid Sec-WebSocket-Version header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!this.shouldHandle(req)) { + abortHandshake(socket, 400); + return; + } + + const secWebSocketProtocol = req.headers['sec-websocket-protocol']; + let protocols = new Set(); + + if (secWebSocketProtocol !== undefined) { + try { + protocols = subprotocol.parse(secWebSocketProtocol); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Protocol header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + const secWebSocketExtensions = req.headers['sec-websocket-extensions']; + const extensions = {}; + + if ( + this.options.perMessageDeflate && + secWebSocketExtensions !== undefined + ) { + const perMessageDeflate = new PerMessageDeflate( + this.options.perMessageDeflate, + true, + this.options.maxPayload + ); + + try { + const offers = extension.parse(secWebSocketExtensions); + + if (offers[PerMessageDeflate.extensionName]) { + perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + } catch (err) { + const message = + 'Invalid or unacceptable Sec-WebSocket-Extensions header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + // + // Optionally call external client verification handler. + // + if (this.options.verifyClient) { + const info = { + origin: + req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], + secure: !!(req.socket.authorized || req.socket.encrypted), + req + }; + + if (this.options.verifyClient.length === 2) { + this.options.verifyClient(info, (verified, code, message, headers) => { + if (!verified) { + return abortHandshake(socket, code || 401, message, headers); + } + + this.completeUpgrade( + extensions, + key, + protocols, + req, + socket, + head, + cb + ); + }); + return; + } + + if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); + } + + this.completeUpgrade(extensions, key, protocols, req, socket, head, cb); + } + + /** + * Upgrade the connection to WebSocket. + * + * @param {Object} extensions The accepted extensions + * @param {String} key The value of the `Sec-WebSocket-Key` header + * @param {Set} protocols The subprotocols + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @throws {Error} If called more than once with the same socket + * @private + */ + completeUpgrade(extensions, key, protocols, req, socket, head, cb) { + // + // Destroy the socket if the client has already sent a FIN packet. + // + if (!socket.readable || !socket.writable) return socket.destroy(); + + if (socket[kWebSocket]) { + throw new Error( + 'server.handleUpgrade() was called more than once with the same ' + + 'socket, possibly due to a misconfiguration' + ); + } + + if (this._state > RUNNING) return abortHandshake(socket, 503); + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + const headers = [ + 'HTTP/1.1 101 Switching Protocols', + 'Upgrade: websocket', + 'Connection: Upgrade', + `Sec-WebSocket-Accept: ${digest}` + ]; + + const ws = new this.options.WebSocket(null); + + if (protocols.size) { + // + // Optionally call external protocol selection handler. + // + const protocol = this.options.handleProtocols + ? this.options.handleProtocols(protocols, req) + : protocols.values().next().value; + + if (protocol) { + headers.push(`Sec-WebSocket-Protocol: ${protocol}`); + ws._protocol = protocol; + } + } + + if (extensions[PerMessageDeflate.extensionName]) { + const params = extensions[PerMessageDeflate.extensionName].params; + const value = extension.format({ + [PerMessageDeflate.extensionName]: [params] + }); + headers.push(`Sec-WebSocket-Extensions: ${value}`); + ws._extensions = extensions; + } + + // + // Allow external modification/inspection of handshake headers. + // + this.emit('headers', headers, req); + + socket.write(headers.concat('\r\n').join('\r\n')); + socket.removeListener('error', socketOnError); + + ws.setSocket(socket, head, { + maxPayload: this.options.maxPayload, + skipUTF8Validation: this.options.skipUTF8Validation + }); + + if (this.clients) { + this.clients.add(ws); + ws.on('close', () => { + this.clients.delete(ws); + + if (this._shouldEmitClose && !this.clients.size) { + process.nextTick(emitClose, this); + } + }); + } + + cb(ws, req); + } +} + +module.exports = WebSocketServer; + +/** + * Add event listeners on an `EventEmitter` using a map of + * pairs. + * + * @param {EventEmitter} server The event emitter + * @param {Object.} map The listeners to add + * @return {Function} A function that will remove the added listeners when + * called + * @private + */ +function addListeners(server, map) { + for (const event of Object.keys(map)) server.on(event, map[event]); + + return function removeListeners() { + for (const event of Object.keys(map)) { + server.removeListener(event, map[event]); + } + }; +} + +/** + * Emit a `'close'` event on an `EventEmitter`. + * + * @param {EventEmitter} server The event emitter + * @private + */ +function emitClose(server) { + server._state = CLOSED; + server.emit('close'); +} + +/** + * Handle socket errors. + * + * @private + */ +function socketOnError() { + this.destroy(); +} + +/** + * Close the connection when preconditions are not fulfilled. + * + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} [message] The HTTP response body + * @param {Object} [headers] Additional HTTP response headers + * @private + */ +function abortHandshake(socket, code, message, headers) { + // + // The socket is writable unless the user destroyed or ended it before calling + // `server.handleUpgrade()` or in the `verifyClient` function, which is a user + // error. Handling this does not make much sense as the worst that can happen + // is that some of the data written by the user might be discarded due to the + // call to `socket.end()` below, which triggers an `'error'` event that in + // turn causes the socket to be destroyed. + // + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; + + socket.once('finish', socket.destroy); + + socket.end( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); +} + +/** + * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least + * one listener for it, otherwise call `abortHandshake()`. + * + * @param {WebSocketServer} server The WebSocket server + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} message The HTTP response body + * @private + */ +function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) { + if (server.listenerCount('wsClientError')) { + const err = new Error(message); + Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); + + server.emit('wsClientError', err, socket, req); + } else { + abortHandshake(socket, code, message); + } +} diff --git a/node_modules/ws/lib/websocket.js b/node_modules/ws/lib/websocket.js new file mode 100644 index 0000000..8685ff7 --- /dev/null +++ b/node_modules/ws/lib/websocket.js @@ -0,0 +1,1319 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex|Readable$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const https = require('https'); +const http = require('http'); +const net = require('net'); +const tls = require('tls'); +const { randomBytes, createHash } = require('crypto'); +const { Duplex, Readable } = require('stream'); +const { URL } = require('url'); + +const PerMessageDeflate = require('./permessage-deflate'); +const Receiver = require('./receiver'); +const Sender = require('./sender'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + GUID, + kForOnEventAttribute, + kListener, + kStatusCode, + kWebSocket, + NOOP +} = require('./constants'); +const { + EventTarget: { addEventListener, removeEventListener } +} = require('./event-target'); +const { format, parse } = require('./extension'); +const { toBuffer } = require('./buffer-util'); + +const closeTimeout = 30 * 1000; +const kAborted = Symbol('kAborted'); +const protocolVersions = [8, 13]; +const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; +const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; + +/** + * Class representing a WebSocket. + * + * @extends EventEmitter + */ +class WebSocket extends EventEmitter { + /** + * Create a new `WebSocket`. + * + * @param {(String|URL)} address The URL to which to connect + * @param {(String|String[])} [protocols] The subprotocols + * @param {Object} [options] Connection options + */ + constructor(address, protocols, options) { + super(); + + this._binaryType = BINARY_TYPES[0]; + this._closeCode = 1006; + this._closeFrameReceived = false; + this._closeFrameSent = false; + this._closeMessage = EMPTY_BUFFER; + this._closeTimer = null; + this._extensions = {}; + this._paused = false; + this._protocol = ''; + this._readyState = WebSocket.CONNECTING; + this._receiver = null; + this._sender = null; + this._socket = null; + + if (address !== null) { + this._bufferedAmount = 0; + this._isServer = false; + this._redirects = 0; + + if (protocols === undefined) { + protocols = []; + } else if (!Array.isArray(protocols)) { + if (typeof protocols === 'object' && protocols !== null) { + options = protocols; + protocols = []; + } else { + protocols = [protocols]; + } + } + + initAsClient(this, address, protocols, options); + } else { + this._isServer = true; + } + } + + /** + * This deviates from the WHATWG interface since ws doesn't support the + * required default "blob" type (instead we define a custom "nodebuffer" + * type). + * + * @type {String} + */ + get binaryType() { + return this._binaryType; + } + + set binaryType(type) { + if (!BINARY_TYPES.includes(type)) return; + + this._binaryType = type; + + // + // Allow to change `binaryType` on the fly. + // + if (this._receiver) this._receiver._binaryType = type; + } + + /** + * @type {Number} + */ + get bufferedAmount() { + if (!this._socket) return this._bufferedAmount; + + return this._socket._writableState.length + this._sender._bufferedBytes; + } + + /** + * @type {String} + */ + get extensions() { + return Object.keys(this._extensions).join(); + } + + /** + * @type {Boolean} + */ + get isPaused() { + return this._paused; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onclose() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onerror() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onopen() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onmessage() { + return null; + } + + /** + * @type {String} + */ + get protocol() { + return this._protocol; + } + + /** + * @type {Number} + */ + get readyState() { + return this._readyState; + } + + /** + * @type {String} + */ + get url() { + return this._url; + } + + /** + * Set up the socket and the internal resources. + * + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Object} options Options object + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.maxPayload=0] The maximum allowed message size + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ + setSocket(socket, head, options) { + const receiver = new Receiver({ + binaryType: this.binaryType, + extensions: this._extensions, + isServer: this._isServer, + maxPayload: options.maxPayload, + skipUTF8Validation: options.skipUTF8Validation + }); + + this._sender = new Sender(socket, this._extensions, options.generateMask); + this._receiver = receiver; + this._socket = socket; + + receiver[kWebSocket] = this; + socket[kWebSocket] = this; + + receiver.on('conclude', receiverOnConclude); + receiver.on('drain', receiverOnDrain); + receiver.on('error', receiverOnError); + receiver.on('message', receiverOnMessage); + receiver.on('ping', receiverOnPing); + receiver.on('pong', receiverOnPong); + + // + // These methods may not be available if `socket` is just a `Duplex`. + // + if (socket.setTimeout) socket.setTimeout(0); + if (socket.setNoDelay) socket.setNoDelay(); + + if (head.length > 0) socket.unshift(head); + + socket.on('close', socketOnClose); + socket.on('data', socketOnData); + socket.on('end', socketOnEnd); + socket.on('error', socketOnError); + + this._readyState = WebSocket.OPEN; + this.emit('open'); + } + + /** + * Emit the `'close'` event. + * + * @private + */ + emitClose() { + if (!this._socket) { + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + return; + } + + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this._receiver.removeAllListeners(); + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + } + + /** + * Start a closing handshake. + * + * +----------+ +-----------+ +----------+ + * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - + * | +----------+ +-----------+ +----------+ | + * +----------+ +-----------+ | + * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING + * +----------+ +-----------+ | + * | | | +---+ | + * +------------------------+-->|fin| - - - - + * | +---+ | +---+ + * - - - - -|fin|<---------------------+ + * +---+ + * + * @param {Number} [code] Status code explaining why the connection is closing + * @param {(String|Buffer)} [data] The reason why the connection is + * closing + * @public + */ + close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if ( + this._closeFrameSent && + (this._closeFrameReceived || this._receiver._writableState.errorEmitted) + ) { + this._socket.end(); + } + + return; + } + + this._readyState = WebSocket.CLOSING; + this._sender.close(code, data, !this._isServer, (err) => { + // + // This error is handled by the `'error'` listener on the socket. We only + // want to know if the close frame has been sent here. + // + if (err) return; + + this._closeFrameSent = true; + + if ( + this._closeFrameReceived || + this._receiver._writableState.errorEmitted + ) { + this._socket.end(); + } + }); + + // + // Specify a timeout for the closing handshake to complete. + // + this._closeTimer = setTimeout( + this._socket.destroy.bind(this._socket), + closeTimeout + ); + } + + /** + * Pause the socket. + * + * @public + */ + pause() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = true; + this._socket.pause(); + } + + /** + * Send a ping. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the ping is sent + * @public + */ + ping(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.ping(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a pong. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the pong is sent + * @public + */ + pong(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.pong(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Resume the socket. + * + * @public + */ + resume() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = false; + if (!this._receiver._writableState.needDrain) this._socket.resume(); + } + + /** + * Send a data message. + * + * @param {*} data The message to send + * @param {Object} [options] Options object + * @param {Boolean} [options.binary] Specifies whether `data` is binary or + * text + * @param {Boolean} [options.compress] Specifies whether or not to compress + * `data` + * @param {Boolean} [options.fin=true] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when data is written out + * @public + */ + send(data, options, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + const opts = { + binary: typeof data !== 'string', + mask: !this._isServer, + compress: true, + fin: true, + ...options + }; + + if (!this._extensions[PerMessageDeflate.extensionName]) { + opts.compress = false; + } + + this._sender.send(data || EMPTY_BUFFER, opts, cb); + } + + /** + * Forcibly close the connection. + * + * @public + */ + terminate() { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this._socket) { + this._readyState = WebSocket.CLOSING; + this._socket.destroy(); + } + } +} + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +[ + 'binaryType', + 'bufferedAmount', + 'extensions', + 'isPaused', + 'protocol', + 'readyState', + 'url' +].forEach((property) => { + Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); +}); + +// +// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. +// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface +// +['open', 'error', 'close', 'message'].forEach((method) => { + Object.defineProperty(WebSocket.prototype, `on${method}`, { + enumerable: true, + get() { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) return listener[kListener]; + } + + return null; + }, + set(handler) { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) { + this.removeListener(method, listener); + break; + } + } + + if (typeof handler !== 'function') return; + + this.addEventListener(method, handler, { + [kForOnEventAttribute]: true + }); + } + }); +}); + +WebSocket.prototype.addEventListener = addEventListener; +WebSocket.prototype.removeEventListener = removeEventListener; + +module.exports = WebSocket; + +/** + * Initialize a WebSocket client. + * + * @param {WebSocket} websocket The client to initialize + * @param {(String|URL)} address The URL to which to connect + * @param {Array} protocols The subprotocols + * @param {Object} [options] Connection options + * @param {Boolean} [options.followRedirects=false] Whether or not to follow + * redirects + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the + * handshake request + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Number} [options.maxRedirects=10] The maximum number of redirects + * allowed + * @param {String} [options.origin] Value of the `Origin` or + * `Sec-WebSocket-Origin` header + * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable + * permessage-deflate + * @param {Number} [options.protocolVersion=13] Value of the + * `Sec-WebSocket-Version` header + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ +function initAsClient(websocket, address, protocols, options) { + const opts = { + protocolVersion: protocolVersions[1], + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: true, + followRedirects: false, + maxRedirects: 10, + ...options, + createConnection: undefined, + socketPath: undefined, + hostname: undefined, + protocol: undefined, + timeout: undefined, + method: 'GET', + host: undefined, + path: undefined, + port: undefined + }; + + if (!protocolVersions.includes(opts.protocolVersion)) { + throw new RangeError( + `Unsupported protocol version: ${opts.protocolVersion} ` + + `(supported versions: ${protocolVersions.join(', ')})` + ); + } + + let parsedUrl; + + if (address instanceof URL) { + parsedUrl = address; + } else { + try { + parsedUrl = new URL(address); + } catch (e) { + throw new SyntaxError(`Invalid URL: ${address}`); + } + } + + if (parsedUrl.protocol === 'http:') { + parsedUrl.protocol = 'ws:'; + } else if (parsedUrl.protocol === 'https:') { + parsedUrl.protocol = 'wss:'; + } + + websocket._url = parsedUrl.href; + + const isSecure = parsedUrl.protocol === 'wss:'; + const isIpcUrl = parsedUrl.protocol === 'ws+unix:'; + let invalidUrlMessage; + + if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) { + invalidUrlMessage = + 'The URL\'s protocol must be one of "ws:", "wss:", ' + + '"http:", "https", or "ws+unix:"'; + } else if (isIpcUrl && !parsedUrl.pathname) { + invalidUrlMessage = "The URL's pathname is empty"; + } else if (parsedUrl.hash) { + invalidUrlMessage = 'The URL contains a fragment identifier'; + } + + if (invalidUrlMessage) { + const err = new SyntaxError(invalidUrlMessage); + + if (websocket._redirects === 0) { + throw err; + } else { + emitErrorAndClose(websocket, err); + return; + } + } + + const defaultPort = isSecure ? 443 : 80; + const key = randomBytes(16).toString('base64'); + const request = isSecure ? https.request : http.request; + const protocolSet = new Set(); + let perMessageDeflate; + + opts.createConnection = isSecure ? tlsConnect : netConnect; + opts.defaultPort = opts.defaultPort || defaultPort; + opts.port = parsedUrl.port || defaultPort; + opts.host = parsedUrl.hostname.startsWith('[') + ? parsedUrl.hostname.slice(1, -1) + : parsedUrl.hostname; + opts.headers = { + ...opts.headers, + 'Sec-WebSocket-Version': opts.protocolVersion, + 'Sec-WebSocket-Key': key, + Connection: 'Upgrade', + Upgrade: 'websocket' + }; + opts.path = parsedUrl.pathname + parsedUrl.search; + opts.timeout = opts.handshakeTimeout; + + if (opts.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate( + opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, + false, + opts.maxPayload + ); + opts.headers['Sec-WebSocket-Extensions'] = format({ + [PerMessageDeflate.extensionName]: perMessageDeflate.offer() + }); + } + if (protocols.length) { + for (const protocol of protocols) { + if ( + typeof protocol !== 'string' || + !subprotocolRegex.test(protocol) || + protocolSet.has(protocol) + ) { + throw new SyntaxError( + 'An invalid or duplicated subprotocol was specified' + ); + } + + protocolSet.add(protocol); + } + + opts.headers['Sec-WebSocket-Protocol'] = protocols.join(','); + } + if (opts.origin) { + if (opts.protocolVersion < 13) { + opts.headers['Sec-WebSocket-Origin'] = opts.origin; + } else { + opts.headers.Origin = opts.origin; + } + } + if (parsedUrl.username || parsedUrl.password) { + opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; + } + + if (isIpcUrl) { + const parts = opts.path.split(':'); + + opts.socketPath = parts[0]; + opts.path = parts[1]; + } + + let req; + + if (opts.followRedirects) { + if (websocket._redirects === 0) { + websocket._originalIpc = isIpcUrl; + websocket._originalSecure = isSecure; + websocket._originalHostOrSocketPath = isIpcUrl + ? opts.socketPath + : parsedUrl.host; + + const headers = options && options.headers; + + // + // Shallow copy the user provided options so that headers can be changed + // without mutating the original object. + // + options = { ...options, headers: {} }; + + if (headers) { + for (const [key, value] of Object.entries(headers)) { + options.headers[key.toLowerCase()] = value; + } + } + } else if (websocket.listenerCount('redirect') === 0) { + const isSameHost = isIpcUrl + ? websocket._originalIpc + ? opts.socketPath === websocket._originalHostOrSocketPath + : false + : websocket._originalIpc + ? false + : parsedUrl.host === websocket._originalHostOrSocketPath; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } + } + + // + // Match curl 7.77.0 behavior and make the first `Authorization` header win. + // If the `Authorization` header is set, then there is nothing to do as it + // will take precedence. + // + if (opts.auth && !options.headers.authorization) { + options.headers.authorization = + 'Basic ' + Buffer.from(opts.auth).toString('base64'); + } + + req = websocket._req = request(opts); + + if (websocket._redirects) { + // + // Unlike what is done for the `'upgrade'` event, no early exit is + // triggered here if the user calls `websocket.close()` or + // `websocket.terminate()` from a listener of the `'redirect'` event. This + // is because the user can also call `request.destroy()` with an error + // before calling `websocket.close()` or `websocket.terminate()` and this + // would result in an error being emitted on the `request` object with no + // `'error'` event listeners attached. + // + websocket.emit('redirect', websocket.url, req); + } + } else { + req = websocket._req = request(opts); + } + + if (opts.timeout) { + req.on('timeout', () => { + abortHandshake(websocket, req, 'Opening handshake has timed out'); + }); + } + + req.on('error', (err) => { + if (req === null || req[kAborted]) return; + + req = websocket._req = null; + emitErrorAndClose(websocket, err); + }); + + req.on('response', (res) => { + const location = res.headers.location; + const statusCode = res.statusCode; + + if ( + location && + opts.followRedirects && + statusCode >= 300 && + statusCode < 400 + ) { + if (++websocket._redirects > opts.maxRedirects) { + abortHandshake(websocket, req, 'Maximum redirects exceeded'); + return; + } + + req.abort(); + + let addr; + + try { + addr = new URL(location, address); + } catch (e) { + const err = new SyntaxError(`Invalid URL: ${location}`); + emitErrorAndClose(websocket, err); + return; + } + + initAsClient(websocket, addr, protocols, options); + } else if (!websocket.emit('unexpected-response', req, res)) { + abortHandshake( + websocket, + req, + `Unexpected server response: ${res.statusCode}` + ); + } + }); + + req.on('upgrade', (res, socket, head) => { + websocket.emit('upgrade', res); + + // + // The user may have closed the connection from a listener of the + // `'upgrade'` event. + // + if (websocket.readyState !== WebSocket.CONNECTING) return; + + req = websocket._req = null; + + if (res.headers.upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + if (res.headers['sec-websocket-accept'] !== digest) { + abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header'); + return; + } + + const serverProt = res.headers['sec-websocket-protocol']; + let protError; + + if (serverProt !== undefined) { + if (!protocolSet.size) { + protError = 'Server sent a subprotocol but none was requested'; + } else if (!protocolSet.has(serverProt)) { + protError = 'Server sent an invalid subprotocol'; + } + } else if (protocolSet.size) { + protError = 'Server sent no subprotocol'; + } + + if (protError) { + abortHandshake(websocket, socket, protError); + return; + } + + if (serverProt) websocket._protocol = serverProt; + + const secWebSocketExtensions = res.headers['sec-websocket-extensions']; + + if (secWebSocketExtensions !== undefined) { + if (!perMessageDeflate) { + const message = + 'Server sent a Sec-WebSocket-Extensions header but no extension ' + + 'was requested'; + abortHandshake(websocket, socket, message); + return; + } + + let extensions; + + try { + extensions = parse(secWebSocketExtensions); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + const extensionNames = Object.keys(extensions); + + if ( + extensionNames.length !== 1 || + extensionNames[0] !== PerMessageDeflate.extensionName + ) { + const message = 'Server indicated an extension that was not requested'; + abortHandshake(websocket, socket, message); + return; + } + + try { + perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + websocket._extensions[PerMessageDeflate.extensionName] = + perMessageDeflate; + } + + websocket.setSocket(socket, head, { + generateMask: opts.generateMask, + maxPayload: opts.maxPayload, + skipUTF8Validation: opts.skipUTF8Validation + }); + }); + + if (opts.finishRequest) { + opts.finishRequest(req, websocket); + } else { + req.end(); + } +} + +/** + * Emit the `'error'` and `'close'` events. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {Error} The error to emit + * @private + */ +function emitErrorAndClose(websocket, err) { + websocket._readyState = WebSocket.CLOSING; + websocket.emit('error', err); + websocket.emitClose(); +} + +/** + * Create a `net.Socket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {net.Socket} The newly created socket used to start the connection + * @private + */ +function netConnect(options) { + options.path = options.socketPath; + return net.connect(options); +} + +/** + * Create a `tls.TLSSocket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {tls.TLSSocket} The newly created socket used to start the connection + * @private + */ +function tlsConnect(options) { + options.path = undefined; + + if (!options.servername && options.servername !== '') { + options.servername = net.isIP(options.host) ? '' : options.host; + } + + return tls.connect(options); +} + +/** + * Abort the handshake and emit an error. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to + * abort or the socket to destroy + * @param {String} message The error message + * @private + */ +function abortHandshake(websocket, stream, message) { + websocket._readyState = WebSocket.CLOSING; + + const err = new Error(message); + Error.captureStackTrace(err, abortHandshake); + + if (stream.setHeader) { + stream[kAborted] = true; + stream.abort(); + + if (stream.socket && !stream.socket.destroyed) { + // + // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if + // called after the request completed. See + // https://github.com/websockets/ws/issues/1869. + // + stream.socket.destroy(); + } + + process.nextTick(emitErrorAndClose, websocket, err); + } else { + stream.destroy(err); + stream.once('error', websocket.emit.bind(websocket, 'error')); + stream.once('close', websocket.emitClose.bind(websocket)); + } +} + +/** + * Handle cases where the `ping()`, `pong()`, or `send()` methods are called + * when the `readyState` attribute is `CLOSING` or `CLOSED`. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {*} [data] The data to send + * @param {Function} [cb] Callback + * @private + */ +function sendAfterClose(websocket, data, cb) { + if (data) { + const length = toBuffer(data).length; + + // + // The `_bufferedAmount` property is used only when the peer is a client and + // the opening handshake fails. Under these circumstances, in fact, the + // `setSocket()` method is not called, so the `_socket` and `_sender` + // properties are set to `null`. + // + if (websocket._socket) websocket._sender._bufferedBytes += length; + else websocket._bufferedAmount += length; + } + + if (cb) { + const err = new Error( + `WebSocket is not open: readyState ${websocket.readyState} ` + + `(${readyStates[websocket.readyState]})` + ); + process.nextTick(cb, err); + } +} + +/** + * The listener of the `Receiver` `'conclude'` event. + * + * @param {Number} code The status code + * @param {Buffer} reason The reason for closing + * @private + */ +function receiverOnConclude(code, reason) { + const websocket = this[kWebSocket]; + + websocket._closeFrameReceived = true; + websocket._closeMessage = reason; + websocket._closeCode = code; + + if (websocket._socket[kWebSocket] === undefined) return; + + websocket._socket.removeListener('data', socketOnData); + process.nextTick(resume, websocket._socket); + + if (code === 1005) websocket.close(); + else websocket.close(code, reason); +} + +/** + * The listener of the `Receiver` `'drain'` event. + * + * @private + */ +function receiverOnDrain() { + const websocket = this[kWebSocket]; + + if (!websocket.isPaused) websocket._socket.resume(); +} + +/** + * The listener of the `Receiver` `'error'` event. + * + * @param {(RangeError|Error)} err The emitted error + * @private + */ +function receiverOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket._socket[kWebSocket] !== undefined) { + websocket._socket.removeListener('data', socketOnData); + + // + // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See + // https://github.com/websockets/ws/issues/1940. + // + process.nextTick(resume, websocket._socket); + + websocket.close(err[kStatusCode]); + } + + websocket.emit('error', err); +} + +/** + * The listener of the `Receiver` `'finish'` event. + * + * @private + */ +function receiverOnFinish() { + this[kWebSocket].emitClose(); +} + +/** + * The listener of the `Receiver` `'message'` event. + * + * @param {Buffer|ArrayBuffer|Buffer[])} data The message + * @param {Boolean} isBinary Specifies whether the message is binary or not + * @private + */ +function receiverOnMessage(data, isBinary) { + this[kWebSocket].emit('message', data, isBinary); +} + +/** + * The listener of the `Receiver` `'ping'` event. + * + * @param {Buffer} data The data included in the ping frame + * @private + */ +function receiverOnPing(data) { + const websocket = this[kWebSocket]; + + websocket.pong(data, !websocket._isServer, NOOP); + websocket.emit('ping', data); +} + +/** + * The listener of the `Receiver` `'pong'` event. + * + * @param {Buffer} data The data included in the pong frame + * @private + */ +function receiverOnPong(data) { + this[kWebSocket].emit('pong', data); +} + +/** + * Resume a readable stream + * + * @param {Readable} stream The readable stream + * @private + */ +function resume(stream) { + stream.resume(); +} + +/** + * The listener of the socket `'close'` event. + * + * @private + */ +function socketOnClose() { + const websocket = this[kWebSocket]; + + this.removeListener('close', socketOnClose); + this.removeListener('data', socketOnData); + this.removeListener('end', socketOnEnd); + + websocket._readyState = WebSocket.CLOSING; + + let chunk; + + // + // The close frame might not have been received or the `'end'` event emitted, + // for example, if the socket was destroyed due to an error. Ensure that the + // `receiver` stream is closed after writing any remaining buffered data to + // it. If the readable side of the socket is in flowing mode then there is no + // buffered data as everything has been already written and `readable.read()` + // will return `null`. If instead, the socket is paused, any possible buffered + // data will be read as a single chunk. + // + if ( + !this._readableState.endEmitted && + !websocket._closeFrameReceived && + !websocket._receiver._writableState.errorEmitted && + (chunk = websocket._socket.read()) !== null + ) { + websocket._receiver.write(chunk); + } + + websocket._receiver.end(); + + this[kWebSocket] = undefined; + + clearTimeout(websocket._closeTimer); + + if ( + websocket._receiver._writableState.finished || + websocket._receiver._writableState.errorEmitted + ) { + websocket.emitClose(); + } else { + websocket._receiver.on('error', receiverOnFinish); + websocket._receiver.on('finish', receiverOnFinish); + } +} + +/** + * The listener of the socket `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function socketOnData(chunk) { + if (!this[kWebSocket]._receiver.write(chunk)) { + this.pause(); + } +} + +/** + * The listener of the socket `'end'` event. + * + * @private + */ +function socketOnEnd() { + const websocket = this[kWebSocket]; + + websocket._readyState = WebSocket.CLOSING; + websocket._receiver.end(); + this.end(); +} + +/** + * The listener of the socket `'error'` event. + * + * @private + */ +function socketOnError() { + const websocket = this[kWebSocket]; + + this.removeListener('error', socketOnError); + this.on('error', NOOP); + + if (websocket) { + websocket._readyState = WebSocket.CLOSING; + this.destroy(); + } +} diff --git a/node_modules/ws/package.json b/node_modules/ws/package.json new file mode 100644 index 0000000..107c188 --- /dev/null +++ b/node_modules/ws/package.json @@ -0,0 +1,68 @@ +{ + "name": "ws", + "version": "8.14.2", + "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", + "keywords": [ + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "homepage": "https://github.com/websockets/ws", + "bugs": "https://github.com/websockets/ws/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/websockets/ws.git" + }, + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "main": "index.js", + "exports": { + ".": { + "browser": "./browser.js", + "import": "./wrapper.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "browser": "browser.js", + "engines": { + "node": ">=10.0.0" + }, + "files": [ + "browser.js", + "index.js", + "lib/*.js", + "wrapper.mjs" + ], + "scripts": { + "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js", + "integration": "mocha --throw-deprecation test/*.integration.js", + "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + }, + "devDependencies": { + "benchmark": "^2.1.4", + "bufferutil": "^4.0.1", + "eslint": "^8.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "mocha": "^8.4.0", + "nyc": "^15.0.0", + "prettier": "^3.0.0", + "utf-8-validate": "^6.0.0" + } +} diff --git a/node_modules/ws/wrapper.mjs b/node_modules/ws/wrapper.mjs new file mode 100644 index 0000000..7245ad1 --- /dev/null +++ b/node_modules/ws/wrapper.mjs @@ -0,0 +1,8 @@ +import createWebSocketStream from './lib/stream.js'; +import Receiver from './lib/receiver.js'; +import Sender from './lib/sender.js'; +import WebSocket from './lib/websocket.js'; +import WebSocketServer from './lib/websocket-server.js'; + +export { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer }; +export default WebSocket;