From 54c680d767a0631f1b422eb8b7e16f9f0ffbd173 Mon Sep 17 00:00:00 2001 From: N0NameN0 Date: Sun, 18 Jan 2009 22:38:58 +0000 Subject: [PATCH] [CHG][NEW] add jpeg support (GRRLIB_LoadTextureJPG) and renamed old GRRLIB_LoadTexture to GRRLIB_LoadTexturePNG --- template/Makefile | 2 +- template/lib/libjpeg.a | Bin 0 -> 184618 bytes template/source/GRRLIB/GRRLIB.c | 128 +++- template/source/GRRLIB/GRRLIB.h | 14 +- template/source/gfx/test_jpg.c | 846 +++++++++++++++++++++ template/source/gfx/test_jpg.h | 14 + template/source/gfx/test_jpg.jpg | Bin 0 -> 13406 bytes template/source/libjpeg/jconfig.h | 45 ++ template/source/libjpeg/jmorecfg.h | 363 +++++++++ template/source/libjpeg/jpeglib.h | 1097 ++++++++++++++++++++++++++++ template/source/libjpeg/jpgogc.h | 29 + template/source/main.c | 28 +- 12 files changed, 2526 insertions(+), 40 deletions(-) create mode 100644 template/lib/libjpeg.a create mode 100644 template/source/gfx/test_jpg.c create mode 100644 template/source/gfx/test_jpg.h create mode 100644 template/source/gfx/test_jpg.jpg create mode 100644 template/source/libjpeg/jconfig.h create mode 100644 template/source/libjpeg/jmorecfg.h create mode 100644 template/source/libjpeg/jpeglib.h create mode 100644 template/source/libjpeg/jpgogc.h diff --git a/template/Makefile b/template/Makefile index 9cecde2..3566953 100644 --- a/template/Makefile +++ b/template/Makefile @@ -33,7 +33,7 @@ LDFLAGS = -g $(MACHDEP) -mrvl -Wl,-Map,$(notdir $@).map #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lpng -lz -lfat -lwiiuse -lbte -logc -lm +LIBS := -lpng -ljpeg -lz -lfat -lwiiuse -lbte -logc -lm #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing diff --git a/template/lib/libjpeg.a b/template/lib/libjpeg.a new file mode 100644 index 0000000000000000000000000000000000000000..7a4fc0ddb1c0efd40eb02601f05e6ee139c639dc GIT binary patch literal 184618 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¬8Qk{Me4el$|1`_c{rG1Id-0cEn#%vu;#5ADvNqh$=Tc~b zn~zXuCAi=_qDlIp38$@wF12C1Cc5nEYpxF2>ulCUkLt3p^VdX=!p@&*_jkz-BA>b? z*dZmq$ychmDZ#u6e#wYK&KWpPxX=r~Mp$Vxh(AnNd+U_u`Swf9VdkZ@|5NYeCv`qy z$#J_0@Akqw32SaI13!FQ3D8wo$=g%i}L0y&}3-7A->Q~NB_7QY9%L3J8wo|pXP zo~Jg@t2%q~#!=*=JS!9LK!$Qm0rixhVfkQqmNpi7>+gbAcE7}v-CY?u>H8R2RcEA^ z%?;&;@!b(&t<&zgA#`dRHV5a1u;`U8@16W01|eu~prJ+wqmbR%)YMF8Z7H^b~3Rp~@po*rp-9(#SuD>Z`Kj)S0q&0pk+n zy=>Y!b83jaSM0BnEPC2`d~Tbx9!+fu3~7^WDy_7=BsS}oHu9{dkL*5C@I$sMofYTl z04INr?B@AgwEY#PPZJ67%B~X>t|2oa_a=SH(iXup!z)|xONXc6OWFOqDF<87KqtTG z0s~Q%tNuvJ`pDPmdU3~7&Q9uT_gG^$Zvd~W!D+^W6GBhzk^J2*Sa`Z{nm?g{9|zoL zxZhBxF}`mR)-p|V_7DA@w0{0G6Trp3pXTf??WD4u9p zT@!00wFXnq0m9njkVl_rUwS|~i26kO{Y}sX;Iz)B-P?bJu;`NVh3=UqFOO~HS?9$I z#zFM;=jkK#D!W(L(C2~E+5{}Twq^{0yAOk8Jb9g@9nUMhV40qtcdT=D4p{i6^&jy~ z)Foed0X}jLyseX6w;IL|qtc_B4cf1do$y2we}IGZL*WT~z;}9WEo`3#Z6Tg<<1nXf zVdd*>f|uG%{gOEILFtp_4Z&B+4GL!|_kRKJv!c87L$%uF^@Z@D!K=6SHA|10IJC`Y z?Dw&5zq9`00JxUF3HZ~lTpw4-%l7M;zW4bF{qCU4X?>FAC++Ck;xXz&@fF#v{5+?I zT)kU)V;i-4GWxXLcP_mfJ=vgJ?^GK_A81pSn}2pf`6=GdOZYbB0S6nWW48RrnGuc+ z7)w)(gU-oWVU!h{I_pvOBX-vlI3oDZ$a!>(0LIHz7A<)x7iTl}Fx%qd7B}e$FV5Kv&~VWYbK>FffWO zopp$C*0_*shu|lZHRO5Vd+w$NXrsnBVQ~D6{7U#Yv`xrZrHT_AgctB7Yu|Ch{k_yl zeQCcNIv$~0mKQ0lpD%H3)YsBs+BZYrl811hLG+(>nR(DIXr#^e3VnBazNhx^zL305 zl9x}%gUUzw36H4fV?KV7-y?t{z`d3G-a)^AhJC#MHD|cuU@didx`eryC_hXvkG41s z1V(a8Pu06zZgdX&j5@4Ky7!<|>;cbqXDx{A#Yy-Al%m+yw{f4@$$i}+!J=bhvq z-EZrc?Y&d|uI2XYK+yV`LUm4F{yX$+IYGMni1RN$KmXbPO~(J{>?h_$Dw)hnnNu0TB}8Z&O^A5!!$cn;zImAR zvTfbS{UYfPSbKxrH%ttd8p*Yay}EPwJ?y>zTkJE1l(FA?9%>(X$bQ8?@B8Grw%+qo zL*D;<$n){R&rV>-GrF{Ux%oL0hdira?d83{W61O040(o9xR*_zRGJr=Rh;FutiELl zK6Y0%udLPXXZA|hH`lh*FIc>yWxhSgcE|EA38hYh-EsA|@X9 zFtSO*#tvzYpSaHM-cH}Jefo)JZcOtaAHi;19Us;&KK<*{w}HFqhsnY=e9(EiZc-oa zEp88G1R1v)hg=!pU@{y{3wNi5pHA&L&tN~f?_W6MXj&S^t)EY3U0S#`70$UGoF8F} zH96puZ)?#x(7w$k=T6dyHgM&1LN2^|=Ip^%d=3`2s&aY)rl%ro9*X;U;4)^1^CE2IEY8 zPBhqtw-V;rhN-W3Lo%MBlZ>ZaH=d!S(c_z+*mLil|8@rZ)1+(4utw=R8~anvJnAsW zPZ>U6_R~1+zbizZZe?D!=R@8|xgh z$X~KlZW#R~L61td)_NA@6E$xKId9A$V-%_!$tuw?rV3f31X(bzy~4`)&L(~nswZ{E zF5u2hQb+Wv@Mha%_=sk%C(`*A%ZG8)@ zd`MXOvi6I}reXI|DBOtKwm*K*c_ zvGTXH9;~;1l%6yb=LYD%`S^L`Y@cZ0p!_pE8Z|cuV}ZjHqd8w`zVA}ncX{|xex2y3 z$fH|Fn2fL1u@8Xs*eD#OzyDH`866eYJDwv-o57i0ndndJ&>xzcM;i7Nm^rG4>M*GM zb11)*}N03MAhdNelSx?t=a{7zl=m1goZL-Xzc9v#5L#|!KegKz@49;|*iKP4Z!&!lhrX2x&KX*m52iGM&Qj_3Hl;meLy=8t`W?^Z>>>XKZak{U#*9_SeSpq zgZb@(Ip^a9dVqPzgZY6o!@Nl_zbL5wQ~EQ(e0`k$Qof@?k8VX8vVAw+>pP~Lz8ZJ) z(Vjk=&v>uzvh_^gji>J(w0);NHh$kVsXc1Tpmx~4qyCf^yGVT(^7`(;8T;;o>bI7@ z(!9UcBGAw8JKyh*RoM{2-FB~})>Ar+f4f&18kn>x`1+%CJ?7v8Q$vhZbZEw^{K_@U zf355Y(TANw*b?^Rr=$qIISf5y4TUp9>8IAXwg=fDNUL>`@<$tjj(PTmENg3kE~MED zp@llvih3zN-0i0E>!WXZZ|nU&??Gnwd#gW^hyQ)pV7I`>M@7PvRCJp!OpOeTuIL?@ z({T!Xq+HS6cI?+RonJMqgDcgz<$x4Tz_RjloRNDkg?WI@y#3z7BsN+Y@e)Q6ve>wB!BMzI?1vRnP5Iypo zQer!~KVaTG2TC~T@^zUKVv#cp)Kb?O(@8({zwy(dk|Zzx-4MMmhf#bs^X7pb(jDYh zT}E-My~sIcB)3;LLS|$a|B^ZoVZU6xOuv%xf1=)}I_S#x^f)+^$)`Af-n*Re4C0!+ z_j7pO%{|Y1uBFE^d3NkzDI&@^PiNdY&)L4R#+jL_6}-i%EB-6ecg~ z%CxA4Nq1d&nqo!dq|+krT(qKj^#WJ*!Xfb8C{9-8IZchBx=v|IUe87+^!@2(V{h<% z=w{ymKEY9SWiO;_{qSPqJ$%l-lXx#Y;#(>GVZ=l9wU>UxcT&2<7A{NVFJ(Rb*7MMCGEzQVj7cI0s(_M1Gz zdRh3y#7`hsIq>*#$ikKQY^a6Lv-chzQUbp(-GqF`Ui~L3H)qTvk9(p2vd;#{*TF`( z)wRWD)L>iO79KS);I5m@s78i8S83QUQRS^;v}a-1`Os-j7jr3gEh9YTUgYxv=sx_% z?hgxTjU(Z0R&FPL5dVmCHV5@rxyaT}Ozt)-r!3%X)5*vcx0@`!?e1W&*{zL{iSZ4y zgOSb9{82L}+InwuPC!GuRHpSovW@dvjahl?USwI?61%q7&Ua`%BeMO8sOfKxO+aMc zFjH+VQXRK6y7ktX&350jTffx0X6h|DCpzYpiS5%UXFcTxU0_1&gYtuERXf3!T`F<_9hs<);{sWLd=?ma{ zKXdl$4SP9U+)^EABR1hv_fpn2;Zx<4r}o(Sy}hSS%I->gg6=uGwB>2HE%3+V>~Wgo z!;|OT!Y3CN0|Q&wTcUp4{ICgben#teXQmZZs4-ivxujYAvi9A+XKkc=zQ;hH z@+2>8(oS&Gwa8_0)-reSE#s286#3oIn$cnBDZMr%pb_(+5A&n{aEWx^PR6$MxK_!1 zst0Xs+uY9CpF5bBaZC;Lp$_`c0DWkJJ~Ts1qRhKJvGyrv8)GAnwimfLnW4GYfNjfm zXB~bx^QX|B#Awdd8DV|bn8a^@3H2jgu$^|Y2BLuZ_fTT5U6)+CX&io?YrV5R$3TyE zus+nm@AWH`vt4I@niJ}msWmX}Z*y+|$M0vZx&Rn*MxpS%`og@)w?@#V%HIseFEA6^ z8=(=b%Xa-rydC81+7i}V)Pzqv0~Ei=$umHm{8$J*aPS$RGvf9PP^Y>)#5m{N$Jm4u zrMLdZJBOC@He-u-;oEm+I5wR#XE#)-PjjOqx+g|!Zg%JK#yyLF8`eEcz{m1P`gI^f z>y_Elw7XPr`bRq0^XXP9_$6p}JMh{B{JMYa|iv5KG}?}-r4~!U}K1) zrzd1T3HNgLWGy~mSev1J{-Po9752cJ)V`nF+o$S)8tQ*B5}Z^T63U z>A9OLO=-IQ`@4A1RT(qK*)m^ZDZ+_jWxVNSWgzXE#6er4OsAMz1^?e@r2XWE+0bo_sAX-68^A`NjyHtn8{oFE5_P4pvyl*XZ(VxfUdrl z94n+#c=C$$tF&8J5A9Dnj{_WwE+$unfXeWEmW=hoC2vSW0v?Qs)-?sxKe#Tl|) z_`!ZVcxyNNP~mr~PpnKj{2tC0=N#F_@28z3YaTm&oc%OyoH553Vy~coj%*tXB@}jUEvUz<;|QgE>6;Br{#KyNh-U{@`DNJy)Mg;ftR8=UCi*1>8li zk`JRa+^tFB+Q6C48Lc=ScL%g@Y&hJ_OXb)9h>NGEPHJ!Mnjai5g=U80U&e>!Hd7Ma zTU1pJ-sl|RsNh`ww)K-DT=LsU83pz%Q}1llRJ%^?N|iIP#~TOotyH>2xb_W8-{(M5 z9C&RIJ|$i%+zEr{714|4m4fRL(S63p4F3%0M1ha%rjPS*>ZbIB6-? zVdZMaiQto@3V$S>TK|v^SNxGwNAu>D3f}lCnHLStE5$#_{ODbRFUNsFcQ);F!kb>f zZ^<}k#^y?A=H^;w4*pBvu?{@efyX-VSf?2uCaw4|X_NnwwGY5+Uv=)ay!PXM-(+k{ zeB7r)8KL&8S;s>^LCXfwg|%~C+AtBttz#PZTx?4J3awZLeE!+#ifrc0fcxdcAAWJN9=(zpFb zkTuu2urpEBb;>4ipM0(Whhr5(>&w}E_!8D3S8M}Mw)YqEEBtVxAL}g@e#&=Ne0wi_ z<%Hu$j#rgWa{Dz}Ff+X7=3fVGn(qyWzHb~v%RRWRS^N!`rhm!GBR$ZBd}sjj$f>%a zuur1}Thr3*VQ+t)pVsOPJ?{Dxk8U(6KgxFWjmAmk{U?t=Bcf5WmU^AqnU-%Pm2ZE6 zpQqpVY3cG)=}w*ye$u|s75|^r2a4v3mSRJXjmrp1PmtW$Idb5nJ+B>{#MbzZOQ-rv z(#wc{=uzSH?-norT*trO^0c8yZvN2&7*svnF@^zE|==9O4;+nuKGl$3`C2FNEO z+pO~U^HN&rKc3#xD;$TG586{n@larUo#Oxhe|ELWdq*(wE^CJ(d@;8lCiw9e8FD8G z1h{2~)H~T^vp&KLD?A#9c$= z8$!?WuZm?FPJfX!Q#dijujXj*HX{Pa`owvmBS;>fnUoPjzggyMvC`+yV5IXwnKr%lnW#`U%J7vSp`hCjIo%LRt4ZDs0JI7YjjM&C_^uq^I z;lM?yJOfBO{+Zl?Pp0w=T*@%^>JunVQy&)h?)_;Z!UE9=~~Y4Kl4#eX!As>4T_H}Kp0QN~O%ye=)gI~C3griFpI zKZlTahd*xs`g0b>Fz54yhu?QKsqE7qVjf^bwe2UM$dx>cg1x;N%=;gYF131{U8B$X zmfgs?J1^%QI@nCouwL36$1WxrEGxF?3#YAzC0^$(u~z|IY#9Da9tQvEJqd502>Cq$ z-_D&HvT};GX>LL$V6E?-cH|0V43qdKHp*Ufxe2C#v!3w7>#l`CF3>s^?DMWpLtdqR zKFZ^R>O%gu9mv0f_AB^#khkh)?Kb3H=*KH>>3HaI`xDp_XsezBXOZ6lPmbzEC${T` z(53Us(HoGX3bBvw*7_don|WF*gwCDETtWmryC8aUN}J|lBJz{e_=Ps+2lm_c@vZF9 zobi>L^zp!+g2a=q4I7wc*)=lQ_M#8|+WMqOV2}3K619(GEePev4>)pazSb4dZ-wZ> zlAY|{YjokzO$p=gWwYy`)F0Rk0ZPUl+1zx--j9G|c8#V=_+P*!va=U?%?d>yEt+ozGw=uA7Ot$c5Nn7Ihv=}f;k zd(wm-l3TG`wPKskL-vbcBazKM==DEq-)|4nXY#R8h)f&kP(8IjiaOeMQa82LZ>R81 zIA`(gM|_utbE<=fcQdH}^Q6nQ_3peq>F)!dB-kZ>9qi&)>A?+uE}&O%5Zt2gO>yBy zp9^lWDK}~lj)hySV0xRziG`c`09y+%>thcW`|q$_JVBdZGgZ;-!&UKbnh0Yv5FMM@ z2JW=n;fcXG}oYk8s_pA@cVMIZcWP-hm)ChL!KG@4x0T&X# z)ZQu9z-^}wfCW0wJKlJ5&r;TYn0?e4JYzg*zZ*6z*08+d?uVh>$#oy}OZC(cG^fU$ zN6}oGaPtcAUpj@>Q=q@>=2z#U&u300?9Gok(Gi)PBaYv$ubUe1xK-zh&xApPb6Mou zEF1=B+LWF$?b?-S&y|OSs}`sE)~?ZD?gf~fdCiBHAG(q93Fz#xWMA=}U;wOLT&CUN zaB{!jU(TA3>=#Yy^7!gd{X*+e%{J~2So1LgzB}mht^KmYdXMgr-`^HJUJfO zC9{q=e~rgY^2ef1->M0 zmz)odvg^$UN7=RVELwNP<6+jACy#ixwLm`eWlD2TN_I5=GbMMLpQdC@hbH)IIh;?V z#TTb!GVKlU*K#-u)8ZGW;w1+s*NTiF?BRI!4CHL#0AO)fp!f?rK4=~DRaZ|!($jS| z>pDgrv8_*&=d_MFk?Dk44>2G5r*+IVHzkt%+xm6d{0emAUCV>Yu;JVE*yHCj7nT>@ zdI|H8@Skz+dd}E|)7#)t1v;x2`dTDj1#c>}Yin8G3BPSlupfU)H@4ze*^8Y(#)CJD zS0^5a=3S25abwTK1U`Gh&sct0CO`Sn2c1JcpVyvh*-0&r`cAR+-3Pzntg553?e8hC zfhJQw?LTj?Fg5Yt!sFJTuzvny)8L&yhbJx;Kjb_I_+dPbJaMgaK&BTl7JG9K>sO|l=Gd3a zMEQk{UC2Bf`AF78zARb?_2SG~HuSN#@r}%fwvOT%yPE8EN`s&1-pa4CW@I!x@s~dh zGJlTEjkzi9g?HE+t+Hu@g$H$twYP^lXb zXDWnQ?;Cz^U|=RR2H9y_JMFjfz|-*RbsR#25AAAfoZxnIY%z8J%%J+0#x9>(1wY5P z+KDydm+KgX_>^+gj&1Da_S({C^JV>Jd|g;|-<{SEy^_hIKLp>~fhn*?o+wm5NG3~L z^I*>i5X?J%V{txeVM}{raSyg%pl(G;*q(je1QXyPSlGG8e`nugFLPqQG#P@6V4nu} zjljJS7{9L!ruvuD7Ok_^7!@4ns{gZDd;A+SaXlH|cY`sbi%sT6`d{-Hz%e5>;Sz57_T1lW_i*c*`z~X>a|7dlDRG>+99v30 zOXyqj0GAG^JgvuG7Z?~&nUw99$*=pp>KsqhsDI|Ef3)V`_Jd^TFM4ZFXt&ijn7dT} zglQXNB46~#>P~wvZ|nGq`o{^~`T+AZ#K&KKJ7~}Md+PW^_S_b=e{e(U+M_t>2B^m=Tn(tLonZH`=N-_q0uWT61DcFJ=ALrOo%z z=KG7Vk^go|TY@zJTIa8JYD@`su^Vn_1Af&Oew3-a*Uv#0C4ZG0YrI|X3fQ&k5z4Un z-W*iEDo6RM9Oa{OlrQkyqjQx7N7@DaZV%4A(fXkXkXMdPPd?<~+*brFo*cjjBRHfv z@Ju88NU6S(sTQdcrtg7rB$`=*-pS*>&9nDM`c_}Z|~mB*pbY=nLg1t z+)STregzrbNjvMQoq6XSri}gyL$h)v7hAf>{`9FK=yBXBq0L5Tb4V`NT=CQz;IP!r zFYHG?$5xOr1G#%nIq8Mh$m@B?>lK9M$67jAp~i5>uadm!@WheiLwe!VD2(OeT%fGi8i)w ze%X{Ugu}oaT>QeJ=sC9?ivKORh0n#<;^~K?qbd)@HSV^X&RE4Sf}2m7vilm%*Y2BT zHnPvZ4Be@j@2%bxt-qN0Uc%@(qIVWf;EdIiVpiANx@EK}gC882YyHZUlJCGq>eP@{ zr}^NHv-wF=#<|u3@eXhT9@1~xr&(LirOJD#y@zzI-unxOe}8J{=KF2gbN+Jls*&?e z>hfgHp?cN1$oFUCgU+r&Pvr&-y$7hF)nyR>b)7NY5WUK#I}5#PuC+JfeN0Fc<=8*?;`)?{L4K&AL08>?>(>F%hS`g z`_EP{GdibwL=9z}^z^o#LGP0a${@YX-#cqo);Fit<1b#-)U=X)!l{_$D^{ev$9r7r zm0hWy%*QU#Pk*{{!Q$HGi&hUxKWS*(nbz?88LkRF(EAZfc1$hkH(my&Z`YECBS z`jk(%oY|@QnVg$a{@rqJPR-Tid_Fb*qdml<{BrL|%>@M>@#hontZU^Y?UlZo`GNao zue|ER?3c};9IiAyGkr~f_&)q!etqNH;D5n{_7jp` z{11MHosG3knWneA#_o}_>5=y$#93b^gzcJk@gC9snG7oGadv)F7BDw(kCiuA1MmAr zF(>)n^^L;01;`;0%GMePosF6sHI;|h%b@d5b!Kybw!EOW027;+>Hxo7M|*rfElGHk zFt{5UjT0IPj6$=54K*fn9C=4aIqX-wv5j>b8CQ&=KHus;z`B?texAT*SLNf(R}`D9 z_B*Yt>crR2Gt?ui@`-_ss$+B%XMIy2wMTWpKT(1`X2>3HU%(?RuZEW%M!qwwpByx2 zLVS))sQ-aEn(cT`u>f-m}LK zGirEFzkI%;G6LKmlx_&$wE01zlb4_0d8xegE~ABi(3|Atr_(Pi!N0PCgu1y^7tu1c zLo5Ld^6N&(WWkF}twP@A=jT8BzsdMNk#G9>sBqa6!B$-vB{W)jf6_kk&*NL49`X#| zbT9kfCwPn8DS7L3RIVfzH!fC%N-yjj2aGm+ zXMIb{ilmoJ=4d~_PeC|b`XTIl7aX=_`*b&#Gke{03+3EXwjLLay$SkS0#>E-0`URtfTl8Gq?a{Fzr?Pj`JdC)V|5H5@4u0v_d{tt zw6w{t#k4w|^}8nBL$p62{aJiMX~L`lg^o52SB76V)vLXOx^`UB);J(%!3nhS%8hNzi|qRHph` z`mgkB>C@7$6(^l~NW9g>H791{$;bbOJioLl(oK)F>GEb!=RY(;&*j)6dH0+C`M$ z)_r!>XKol2?Zvz9kAdm(C9MtSRzWCa(>66OY^iNo9l8sL&E!8hYI*pX#$Sd{+zHsUH7Y8k<`~^eL6ocP=dLd`(&_Q~9NTMJCA)XW?LJ zMYC`Rr~#D0AO=%#h284myM=zT5xi+xwWu|;ta0VC+SWx4seWi}Xk5N@rHd@;lU1kp z3BI-bI^WgU(z=RaQ`^!~yE;_6Xp#Iqnd@APmNO^1LZkT-Bfh*t^=rME-k2X60myQ_E`G zTtrImdyC5?UG8BbBmZw!G5Aw$n^8F()T*m@KX&^_ag57V^`X+X@oi~oXI7t{_H*fR zpIO%2y4vla#$_T!MKf-iGk7dQ5jh+YALXINEi0CVKJ(dIK={Tc1}WFA5Tbg)GA(*W zW8L!0zy~{6ARJJ!)&>v^df^TPzMEx7F6#m7X(3r#v4Qx%vVOoISG>5}=561EKJ}?j z`Lv|2aV1nk!yO&z`WD6>1BA|g-|p}!i5+j2NO2ZDdR_oCl?KlUdxh zX=>XVm#tcsqEvLez?Sq!CaOAqRj9eKt-cAIbK&dKDK$!YRJGKD-Kzjg{qj0d$F$ee zYnKa~tnzB>T1Te>-es$rS{uQz5RTOJiRYrMR&Dplqa{kWq>bdd74<7^SK8c`HMWK{ z9z|GEW7x&FLAi<2hZfOcqS!YLgW5N{C<&r3u6NsUcP(6r0)+ff0%5v3uoWk5wD-E& zMN0+Ol@Q7L!MJ67Si4{bdrK#^g_ND3UQ=>QIRK+GQFct+kCX!{sa79-y4h z$v1xE7t>*K#thZ2S{LutEt5r)TA=KA!&fzkR1Nn>uv!V_aOG%Nwk6(0i^NsO*J*Hg zedYnNJ`Ll?i&4UyEJQ531SL*OPxmgazZ-gKM~VN<%Hh(b22(0olCM}8*^%RtQ7~+B zsP*m@aOUeFMDA$>l<)JAVbeo;?I3`gd*7IJ`sC8n+vMXjlXei0sruQ7zxLtsW0>T{`6^)W{f=g8JQ3U%%8NUy`Fv zd+*XSm%g2z;EZI*R5l|DEb>rKmM3JV7Dj_a0y@{yJ!FM?^?y1%J&9xx5I;YNdwBww z#1Dy!K$aFx6Pi(HvvL$)eDJVdwW4NtezqNn2^q@{65Lu;sL`h?Jx z<>ld$P<6u!4n7FoFflZzmUZIh>V=`uq-#F)+1i#*DFHaTN+f9VFa&9(m0wlGMJsAs zB!g1Pg$x_P!45rOQCYWQVST8ws_M!z4=pD9LYQTei<@efth6Js%pH(rZAix!z<77` z`RCH*EAC#dTuQx6LPeq)}FRigjngSqO6-m7q0$ zwNNDRv}p4gxXNEG4p|hT$tL7oVNqmoxZ0rfB(Wk_%ah&a$7h9k8>umhgFu0$9f+yGPp2`v(9E%SH#;O1MZUH-pp z#R|#FO9t~<7iP=R9$P`5+7>htUwLU!K_W}$7O_BK4nozk6q-X|T2UvExEtz49c(Zq z%vu%0s9&c00xlqsh}!^;+!gv8o50N*!NtSMWLXkelz1?U945cIMN(;M^`E+iTy>`; zWc8gASK;Bu)p+2sO)IRBKZyQ^#37I|k?iZioZ;S`0UyQoKBYEG@6xw}F?|qPx#Q?` zoNlgdsz*ZllfJ$AhU?z{ySdAS7fY6-Os9bo@1=(3N zMGRmVnld;Vp5@U^ORrs_CPjvQEmpDx{Ay(*zIHJUBo$6L?Mexa%NMy^Ac;M0$EVB% zwr{6n16hS8YGn<{eBj3_)CrYmhxEeLtw^?>WH4xWm|?!9&jyRzR<&MPzeL)a@L`y5 z7NU~)^jwWg(YRF}AS|M^)ZgW*=gT2{FzE4hmQIrAX)=CN*c!IH#Vb}pvtpF%e z4+f1px_!A#Vo_3MUTJBD3*FX6xP=OWufC5wVs%m}@18(1e&sm=gRXq;YHq=08}}aW z!`vq@cZRql-1E4RK%7qQ{oL=Mfxnvs981Kyw6(4y_@?0H{WI(?tE_2WK&-Dz1(}ak8+>HgwMMXTu2;?gNjpCb8w0RU|j5^BHNRXTIb7yeR=WgQWyIkI%%QreU@m%81 z?d0y}KEU1Qo`Lm|B7Up5=W+ARN2td~j=R(R9}V$KT|QdF9p&E2eT3P8d~UwUBfmW2 z@^*6{W*)SFdmi^jZsN}C!eqneaT z_pvTFZ2zlV<@p)!*PDO(c+?#yHjV!I?TDm>2^P?Q*#`-z9sV4Z+M&4~zpex?Xy)Hp z%#B^JmUPUUCoew_{d#rNy9~%-d(ZTnQ_7v?Jx6H1();Hk5_B)}7aml( zPtH3`HmW>pUss%f!qw{jB%fCgdH(W{=dTWV{(H)wNnEp?>+>ef*y5|nvjz2SjjhJ> ze(%i?n0l-$xOBAB1qMY5j+T5xCgCta_uFMlSOcQt0#~-;GTu$Uz#3QF=sHa#tXOSq z84EC4VkB75+}dImH@9H0UTju+zsXE&zN)@xlMi=b>F={OtiSNj1T+f?`?$RrTn2U@ z+sL^=(XU^m2nej=!b76-pfBj>p}c5b@11xWKgcZ z?>FO4;{7z#!QTU%aTloW=eY*@>xaKWyr2Fa;=Qoyk?rF&aW9_nDd>e6W8$wi{xIPJFMNV<$PGLEYOY;r?05v`Haw4b;A6whgn_>ecM>l1!utt_ zz3@APE8MVnvx#_N(wZ4wxQQ@0sC>k;%^WZM1mP+#e1ved8x}9uo)@JTPdD?ua4X>& zFWgPI&I>D_1~2>?Van6D;{DnyW5cQs-`g;CF>PMBhH%siEB}NSUPrjo3-2b(v;Fn} z;f-Ecb?$P*k|E5!UO1odRxhlwws~RdV!FLBX+__Zr(_MY%L^YR{D>DmNtm*gMly(b z%nQ#W%r`bZLHG$TOdh7k3lnGdd*MF92i&k^7W2FpE+u@>3s)0<(F-RCANIo3#T@a% zd}n&SuHYnn7TW8UYIY(e2w|S}tz;`F4mvE66-b1*=3m+g{ z>V_qQv5efNmn`Oly>J`h3NO5qaKsBgPk4qGK1z6|8RIE3m4BTZmaOMAcwy@0@Qu<-_H&xOa3|qbFWgO-dfPMy2uHneA7S94 z_>W`}<{KL>BD~HEQ(tGJ7p9I*mlsyuxNZ7_gtvO(&y%aD?zK zFI+?T5id-=Q!;*QOJ}+Ez=i<6Wt&5vl{l$SF zv_|F1va%1cMn$?07bS8PA*tl(41uX3cYVQ2`%LJmXWX>~FV&)m)Lh*55^L0-V&A&f z6Fjw^HEAIecxi`wPT5lro7|UPF-1ME8nbVaDd@>G`TH(0fxa8&74Lh%1pAiEE83T7 za`#O)S$*ppiuZMxyuM;n+_$Ty_}FYy)VD8G)HkxB=&fHD6&+hxRD5h)sQB2rnxbP5 zoha`6?aZRSXY-4Xjhb0}tjQD~eAVO~3sn^#`)Xv1SU*K%|7g!_l zLWjvZ$l3?|5{1~8QQ^ZuFoHIr{iH`t&*a|2g`T^)971B}{1A zr?Y-{?Ne`keA+o1UYz#drmp%k>ST*nwxW??YVqwH;N#g|Ardmqtn90Az~+ns1-vWE z`yHZ(Wij5w>#Pi|@0Bi>`%-Q_gH^gRpb3L6z0*~~9pL_;biN+u=|DEWJZ0crDp&Wl z+0Od>oafx+$Nu{GF@4^tmpL zUwJx>FCX4-%#~MO^&$MmWOP$@ipB>_wrCf0{;+75-LqQBdbZX0kEvzfa67&%*z3u@ zu8{VlCZ1wlA+$X4fXU*l>-_lBw+GwV;}u_8T9trS#vi;{e&q7v_Y_qnUS)so(Trd$ z5~+&CIM?QHX9uI-JX#f>bG#}#W??Y;Mz|{aF#a!k@VSwNAJ`oHByamgFm~s!gQE+b zo4P1#bi{0kW*K}fU*F7GBzf%R`={9K>zhXh_+4^+Gl;n`{@)K*#j>tvAME5{)Lh>j ze}giMxkpmYz`Uy1jDuCti#{2QT|1jSc=*MjzMNN*zv&XYt}U1KZdqNg;%CC8^C7__ ze#vuff``}MUfLU?y**xgBVK#Ez4j)&_SXEF+ne|^wKqb0duVSrYxrttZ;1BxdNf{p z$#OgB^A7s^OnZAj9BpsK;B6+#x@IOWWckvcM9D>;MN|B7EIM8&)b%cnRbAt_mCmQT z^AwqO>7B02xYOzLnbMVz&i{sBhSHr4-My1^pXT;2KM(z;(cR2mo}0NvbJaGrV>r57 zMf{(e?xxkl0?dOMC2{efx`^&^WfZ2-S%^_Ooo!sqS{7sJ6o!}6WYIIxsjDWHhU|4V z{tzuj4C-R!3jwdG_tWuIEi)?6%TTU46*cvD4RlFA*`^(>TMi>1Q z+IA7=m0c9nUjA}SN3jXiY4+Q}^4VFe3+A3cTtInoFXf(aNAsp!e8;nfdQ%fVl}k8_ zXrpA^{uf09*F67ymj=49>jgF;;MXJA0mF!32MoIfD_~e7I046m;3&8WR)VGACRkb+ z0x!W%Fckbg2zC~3z%QCOTqU?gf0z+ue{_c6#(r$hSBqGfgKE0+{a08wZ3%l3XGz)&fwP!F4$ukMV2r%THpmO+rHuqBQ32Owy zUSQY_3~PX42pHlMwg36G;OJU#v;+Kv#(tnbiN6pU+iS<2`%m;h*Env`F^^tk1{Ilh z`Lu2bjXh(!62A4nA!yT`1&z%_b~+mxo3)K}XF+4L8FBwlX>4zb#)^;*qOmKrwDZo! zGwAzgps|y#`Y?M^vJcSylq@((a$tYM)Q~a1c*UubPXFUKTz&r+?fCA1Cj1y3SMS@W zJ2SL*;1@gCa|S*B@x!hS;1~OxnJ+ocyhI&7-P%pwkDoKS&!JIlsdWnFlOF%(MbRTy z;ore2iJqDw-{@uGH%;QDaZb&&-sz<;;a~ctTBrG?cBk#79ZuqK;E&zOka53)V;weFvosw=)?3sqTh+$#-u(Y~DVJ?f$K0PRm;xok@L( zjF!Fz({k)i^S!se&|CD@)KJl}2j&&^J)QHtz8iAh?z`wf@msIXEAIPEUeU2gc1z!P zPn~${8@BYhGUao_ zZzWznaqN2Xz2tDwTRVD-k7e{0y)eV{_KgS?zffp;`hI(qG7lHOkY&1$t?ey72$eau z^l0%5J5A_?P7`^d&Lj@LW@@1CqNCQQq;T;m@JP4^PFZ`?kH78On|}OT{O(QQ%)Gjn z+Ss>f_SJFT3p}+ai}ObDsj+W{$=cUx3f|gaihEu&=B*n|(Y`E`_tvvD#rt-ez+1&N zMf(a(e&1!0Vzn#AIiPPHn^{cxp<~~jS#<1+2a0XmzS|!@c4PMU)Q-N_BiNy6vtR*C zP9@A3;PKwi+ns#DqkWuHAefv=G>l=KWC549xf71A%(v#yV*9e`r2F`n z%GG@>xAOL6f^6wv%HO{f)_o(lUk8HOHT*jZIU>7-bk*Gc<>#T_G#x1?!E+ZkHY8h~ z>ZbY%PM$18$OIHuppbX@`T5WOZ!-SB$VTRuqsmFYR3CC>2VFVC7bZM8LyyDT%zXQn z+RLZDP0OU)%w*Hjd-Vf&lJwb!O>2bWb+NbErqMHf>f61{&0ak9%lMiXPm+wUdtuUN z!0G*RGrr};Q&z@9UcAzL$BS1!k9zS+^Uq#5*Oi|>ge~pr@Q2V*v-Ycz$@vm=ROF{U zl9Spmajajh&HJ3ty#lkg^`&mplLI9+<_c)kCkf@-D8l05;oknLq3Ss z*>H3B8swl38*b?CM-KX18?M=LEpiZY6LQe}?q71=_T8MnU~px zkG|`hqbKH7#XDX(6#wgIgQF)nKaWPyyLbLNSTN$$qWItDSH&*H?l;@HGybY;=NsMR zd_3AaDH#7^xGFXs``=d1WFw#W5A&;{Uq)wq2;1LhDDxun`A$t$^p7X1qA&MWMX@!; zreSA{@@~$}!7i|R(`3&2ypk`iCzEW=J4-q`Vb`skZB+}ZvK_9)waG10^)I6K7l7e0PJZwlOg zG)?4VfTKfMp}7-YhWGD!G&*X>qg%(A9Bzj@gFBNui#wZp#B~uTlDNxceZChTW*FJj z-|^?Z6~s@3@(ZXws)x!~xhgO5d-`oZ_Sk#S%|~W%_7=8^2W}3=i?EN@aIQVD7wptO z>LMs>SKLx`?(RA<=$+|juqEb-M7YM+jpzXqk=8ZS%NFDlU#COEn|_hZi1Y3lh0W< z1#20roOM&kSvN(TbyLDwH=HZwlp(utrj)~(QVwTIIh-lw*fXUx_B7@+)-=X6wva_0 z(YUgD$KI1W+pn?xnj9ZdGwTre)+?Oj4sl1gYq%5K-Q1Enx;~t2@n2P9F3>z%G4wtzFHlkDJsL(ry!=Oi!x9n0DLGW9O&@A!8X_EyV_nn^2u zI6@zC55vPpv=aa4=HY3wgsr>>GfLv(L3QzXbk@u?9-XqcS|07$TNVB=_SSIu)n{*S z&E94!Rc8Me!PT=}e+&J);8lf_YvEzY@M{_}A3~m%f3_r#Tia=>HtlorqW|-%woR|V z*WQAkp$|+RX%g_i(&#^5-o}|{1@OKQe69puSO$L!!`~|4ZxQ(04EWnj_}d)#UllyA z`hg_<%&O>SoVYYItE~HL@VHLV)vS{4L-4q-*l=O@UGO;QAMph{?(%j0to-hOhR2n; zJg&W3_Pw04IAbvJ4mON3boQQ{vTrjMqYuK%TH$e>ynpU4m}A z&ClZJGt0;xEgP}y)3O(bALJJsa=24=!wn{0#nS`=36h4mw+vvO?&lc`gr4z(ZF*x-}af znhg)lhKFXuL$l$b+3?V8%R@Umws3BA1RlB^9?B?)KKw=T&<52_by8ha2bHZdqhm7L z7#l&AS%4iop2<8w0K4`Kd<{?dWN`GF{lA)f4gH^>|DQ(2$o#d71N6W8Hu`T@wZ(rs zIjH`PzWZzD0Djjw_qK*Y;fVU#;s<>_8r!wn6U}k)LG6oe%z&pZw0JNTpRRK!tlB&F z)WYi6ti+?jlUUO(i-S|~(|X@$kOw$pcJ9(ud!wTg@Y?r+`ey7UmEWiBIr>)L#o~wg z=DMKwjU(LAH?c{`0(|F}Bb*b=VynBV^j$RPZTrodcQb;Nm60sx%ExUvvAfq*3C=1f zI+A>-lhP2EseJjBeWx=4J!yx2w2OAg-zBtTE%XBZ9D+X=!k;;3+9`oQm%^XR;LlR*#>JmCAJcU{Jo zPTA|(JbkuvqLZ%tblKVS=n-|ae~7+0Fq3mgx}m9-AIE30hNIT(oC3dQ4s=%syqUSu zuJ~OqwJ~3MuYARCam?1}VQlc@%(f{L&^cc*k41lk&bh-p!a9%LS9~3Ra`^k}=DZY_ zzB_xY~#;ttNwXs_`2?tG8$!Y>m~nBGLxbjLWO zGf@C-gLig30iT8M#x{KJkaWz%Nn^gfK=%0wJUfR*ubDEgAoumP@dFngiaree>x6IK zQ+}vmDqGob%bnfG;<+EDf6g)ld57B=o z-Go0}8>=g3o)n%sX5y;yr2%+f0Nej!c-&&<^D=^)z61|gH#^w%M|9vB`Bkw?J_(Nu zz!yn3fi$xhH*cC^{%?EdA0Jh9Cj4_JBN-sIsf;?60frJan7lD!RwqA@iBR8wv~O&~ z4}a7I6Ob4xS)lD;@6F6)a1BUzL&93rpke*7P~E)LrMqlJ8Va>w*?notX3@HB5Gq04 zma1)Oh0K1RbMKuD5tQ2Q`|cm_{d^|5=iYPAkLNt+InQ~X=R8kn-R&xZzk3gUgT3Wn z<#$^u1wGrtI_GWqiLE=8wJ!b>XMKsXzOY`!-u$+o{bGMYVoBR;-=XABSo@H8@ccmX zdDc679o(BJXT7ucm%Z`#Snu>cUTx>OqRx!9ZZB)yKlN;w!1^|UwQd6KV!gm_aaAkh zj~;S8ddLmvA-j^`OA;Kx)?+h1z@AMq=1Fh>yT0urW0kR%F_y8FF~#p+iHxUi>(0SK z##L>e0E}E(ITqT8M3G;JUxfT`N#CST(iiE2w0)efd}5q@((ZASkG0l#n?I$;Z8JLJ z>|bt`ag;F}H)wuwZKTeHAn81HOVV^1ZI+tw(rFjs-3yeP~Pp#sV&T@ zU21XpF80!^h!buQv*6G>GJk5!mzhVEYQDq)V&2_R-pG7Ps5<7<68M{d$e~3ajBLbP z{sQ2N-(~{KwuW?q~jW2~HTf-3ys> zng=p`-9NYI9COr*{JS{;br!x>1 z<}w%VMF)Ow^ST?5pR}lu^bvf^i;dqM1$HWNCwSitUqxI3k#m>>KN7qro&&gU<8(9r zwf&-(Te`vb@`um-Orvwff1}~m9BW{XEoP1_ zVU9J+981hl)mtuyHjDyJ^~MZqveB2g34d%&Dn6uJncriMD(#W{|4n#}0X1};gVz|5 zxjswobMPAH%r}hJ(D}}T*BF7^`Fwbd>?g_B&W{oNAbEgKcEZ>3b1%0aZrc5yetsS@ z{Xak+kX5634Gu2C#=*aN8k}@KvhD3uUOdE$2*Z&n(=UmZ*hl6xXEG%^B_nlB^cr;! zo`5)Q=Q1fno-WT}RdD@ve~5+Y#jk462>cYM2(T&;Ndi`*3d(x2-M|YlkZpeuiR5&K zVl*qnEGQV9i+F*I%lnD)jqR1vmO`WsSaBk%7@DgINklrzDXCE9kJPDsC!p4OvHMj7 zs#_>lU``a3fJ9w~DvR}M{<;LKQ5KxdM#Efwzsjy`MQeO{e|0$)4F!)&gaM;s-tThD zWW}~hzw5_)rg+5<#A!d#0Enn!R9pAm9wkbj67Rf`M^Xbtj7>RF=qo#n8B;^d-pNWy zn_|DKDyqYQxjB}VB5p^wk;rbbpNO=TXl+CUp==`@he|h%T`A8Zt*T^R>SPOTxrQhJ zhoD;jtn*7W71s-BM*hmy)WLYbj+RhLn@#n$zn!!hB-%{@?dwoGq#x^U#=4b0;OVzS z`jQ}R2356n6_M>ohnw*DSirM-thj(_Lf{0P1^!~SB#{T8W`QJdgqnq*W_eJve5hF= z7=e`=&5-^)Nq_O;fBM(l$0OfPt#IKN=@{JO!jE^o z>+Z8XVLD^q&lu*|)+0I!TNY!VmofH!J@&hlj^ZNP6B++xQpQ@XU*4;-3y4ZDZL>lr zsu_1*`97k-ZB+3v-bgcG>&5%E9t-lc!R5@J*Tm}8^qN0RL_%O!A=Y3bT_Bp!Y`m08 zpH=72fG=K5fn8qbo2mjhePC2VB*gR|3B3ce&c<`WE7d^WedHBs!_#7+4Swf=-#O;P zIx=2i8U~g0qrc!G;G`|KC87#*A}CQD!Tpf=0+CaIht^1JR9j<@o>Z|xyhBTbrIw#W zJ6{D)r~fz_%lkoe-a_U;zrg?0YSSDW)sdLGz^e&pa2``SDwCFg>^$D*e#4mE8tZ*$ zW#!+b4vJ)F9vTTaW5YC!BD4MtKU~2HDTjzdJAhMREO{gfZsmYiHlES$b6FlICTTd| zbe3oj6=}F6RG?-@xLDu=ZVbW2pnv^G9ukIyG0X40={E_+> zUJ}pI(AszU^v-spq5I_2zlSx~kiPIu#X6z2-(lVoNz7g^-n$^qdPTHW9g!G%8{ik@ zm*@6}KE%^~*qM5ZK6u0IV0o4!<&+krQr4o|qgaVO1pUTq{s11MQyZinvlnT?Gn4z; zk#uY>jrJLE~7ijur@Ah&}jnpU?%tK}{2cw_!~5`{Qu6<}E}(QwavjyCtqXIeT!#6l!kD)#-C`-o88oYAJ@KeSEoVa-CX z&UdZ)Ah-e}Z7Cpdtr^Q&1-;YsR-!QiR}Eiit%fgf72fs#!*(dTU>ddptEbR($bJAA z3f_wJ1^5cR^h>lqi7G9y)oU0$jK){ivULfSQwbd+Z%!;;EIhp*K2P|#ON1vG&SS(| z!22Y8i+HLZ5C4z_u2MF%tb(*eM1g)95+N+lroUKZjOUv;(JQ;uiBA3f5qCY*JQY%i zpzyu12X#4nVh|%VQL+cfD|;#fX@|50%bY{iHT6VRq`zj}Wy05E%|HZ4;pGKJ!rKEMc=`85aRfH@ zT0+zhXvNXUb4V*b1V+%xc;W_$=#C{%sOqGt2Ai!(DokW!iJC3ZI0eR^J}ZnJ*i}9@ zxL4jgyaROVy)OuVEq$UL&r-gcN3_1!sv}X&TQ*e{34Ie7M0TV^!gJ2|@SS^T$NUfK zhrpbA*8UgaS>S`}K2JQ$XKYL`v8H$Kx7O!1KekJ!j(D?`LM<+U5_!r9UCA>2>6DD`-{p>-JG{Wz^JMVcSU@||f^0)m&j;MfkRfxu%cNMbMNdFRf%A0(WJZLq_ zkF(YieN^)VmB1(DYaWAs+w?MZlxN}2n97&^mdKXe{Pgu8v>HD9w zT&K(`@VU;RB_|k1pA%&{r@S9JZE*6C$jK7Ln0?{t>r<&zq&syY{urkZC9-k1s*!PW z%F@sDxbYpb7ay{hGa_R-_4Etg2)`|OBlQU`=`ymES9oy2BPpkyF$u?2jnpM+k$Y6O za^fe%2@7B=ax5K51b$AQNgBS~yKWkiaNg@@P3h-3JkLGLb3e}m!=HD42fp0kv|&sI z(85X~a(#fe)0xzD|R7l; z)v7bnohWcZl-caO|64%S&iC`3^fo{_K>7|Ry$dv(LH@-~8aQ6~ENM4V=P^7p0e7R{ zdH*Yh_aybX`MI?(;NjxDen2{#o0Rj~K_2lCVqZ2g8RLefi-)BJzx3tg|J<$^k{_$byr_V^c3L)G$imT#UiSJX3K})k*)VOT+++`=6m@u^x=B9S}S)Qfy5vz&tq&lC@wp=wV zb-t)=Tq+4Wt0e3&IcF4_`N%1A5l*9ZR|ti=WKpg5CrQX2TRC<&ekkpZX!ntlwELoy z^tX1wmvIj-Ui9q`2orQKP0;Z{a9K&D2X)VV3zsb=@Tud+QrDMJh)!qJA%)^6|BIaR zB{q};)7rEfOnEIY6m3~}@0Zo`<@h~b{{kIwzx~mW_slVUJa@l+WypKxnAf2bZvHp$GUwj^g6D4jw|VZ~4?;JbJmR2r zjC;@ji<~@u`ZvbCXV>p{^L&bR#l63R=Wd>>c<$aqCoggHEaKjMzJj2Olq;9N)yV^W z_OEgB$UX3!fA7+}(&1*)9_7xV3+8<|q_6Yw;vrrKxfpG(d{(m&4zGGr zqW8g{=0Nx)8sXV=zW;afJW&w+Y#e!;tz$bW`w?kZSgC8?Cl4Cd&TyTrkC5;GFbfUs zZ2C`eY$F6*q4()ENg#cQpL;p@q1S8oo_F3l{>U06YnOa4?{fHocRJ0oCYK@4GB3$1 zS0O)e%H>VYneQ6%xZlXFl*ba4zT9`8;E7YGyfeo0r%djg%grbMnOE-R>2->iw#dAY ze#jC!jBm>7iVOQb<tXICRgL$*~c2jzfACP*`4-N>8Vh@iOwMi@4 z>*u&pW7+TLA|DDw5~_mzrZ=|wq{xzkV%rcqeo`#uzTiGb7W!74*=0?us$NH4Q{f4R zwA3wivbVK$^3=oLR@XhepN?!QHyqcrGAK3|*zyFBTZDA`&=-rvAN%Kqsi9#qg{y22 zA|g|eI@b|Rduknfc%o@b-p-eR4cx!H@B9XEaN8qobK1l=e)8+K0cUT5ye@prdyspe zN21Sd|9xn((XECqp;2-T+Z%hg@hr;k!)UV1-^|OUS%o~zq{-*XH=HI*KFC4(a?2Y| zlV2ytdC=snHuClIleUcFcMh7YPZtU;b1%1EH|_pUKmUj{+1^#w)@`UKsI=Nj+$R4W}f@V`(eC4max4w48(pv5$-VxOrSJ0#p zcKyaxEP?KQ5ziewGp6v|y=VN~eSmQT_wMsqL;SMwIfl+H=e8l<*|?MEI{!V*cQ3tr zh|GSd{ou9NUH1pjS)ai63_1(#J5U;d9&EDpqxCN&7K!)a1+#XGHFj<+`*x^DlpQ0`szrJwn6?EYK&#?|e-B)0gL zKFgZVsp8kfdVF{6fgkpjHdU+G)4ace_dC$D&G=!T6_(RouZR`-ZYy$2U+Ls(Wku0* zT|d}7;rD$mW+UQoMBXH~1}bg?C^q5sbykmjmOJn*7a4@=4tY&tMD>+ zqrX-9_5y8an&mg|;rTJXn>E;Mo(@+-%k$Xw1$qb=Y6`=~Yb_kMHS$)43Sm4P17Bd5LQ%)-uZu`05z ziWJT3CEcXPV;yeHne4s6YPvaUVaJxZ5?HT3i7q(ROWFDqKkHji%9{5BJor(Lh123W zlht^u;BZm=lk_!!elp%G-;}V{RkQ-XR$wNw<5pnC`1u**0AmmYcS7I@o^r6Q1a7Q* zc*;>Fj7|8napcQq_Gd=R^Uv6QvFOW4bpd@D(Y6}5>RXhjZJ)|&JFd{*p4un<5j#BT zPog~ChrQ`O>`cwqFrggz78oljN8l`kkTULf%V13{wD(D;7k4H+ZKAL0*yU+%H#}X8 zt?D@JSphz%PQ%0L2#?uW>4|qP@T}_G5 z+SQ*+dNFCOL*>2f@kAF>F-?JclwE#^wr}UR6I+6vTK}HI|6G24egS?#ej!~a-_Zwj zaan~j2lyYLJP*87kl>O^=7;X%V`@e6cC`xFw_W{+q3v4ABZkIRzNv|iC1QMBWmP`r zc~|f?_V@we-6F|-ww{F(TFPtz$4)yol?`K~=0bjp_}$HK@mO?7zdtPBnby7{_`8FY zX-Z$Hv)O7i`u@C*lcNi7k8(;Qr?S?U0N9T(UFc79c%rl?Nvv&F~ zFmd^+1Sg!PhUnK%u`k1B7~C*8)w4pr5gXt3M)VwvlYAq(Hp*QApP7pd06ZqADzkhQ z8g65G4ovw@@h)UOW%SiNWxq>Qs#VOBxRe3EnrkXfs*neJ+uU^~dYwBIHfX+z_Mj~{ zNN}2o{HtQCu}kez+ogTw{rrGke1qK<+9aV84B8^&!8oZn-}$8u(YHxoHEro95993i zSMt*azl>obs`*hPUJswjGqG!i#tcYX~THqsiCAi4f)j`Y1Vlb%JtSTH$;2 z2<v~T$TICDz&0BBFdvu{H8&T4_rE=E$UC2WpKSoq8$>+_} zxAq^m-eG$NT^{Uj`f|$~wrB7?M~?H@GmNUCA9duFwv6N_^`1qJGkP2OKE^xua_e=| z?*H`jkGN+TWfx?uaP|b!FS+t4SlSkld%1Pe@=jj>QuYYQbtF29CjgM7EhT`Maq{*% z=^1uzXV0J%e71c#a-qgy>6OFMYlfwt9+v*QVQJuIUrzZi4NL!YSo+szq#cI8UQPe< z3gUUHhUF_nO(C%~zeGH*W+mF{S_#5jv-Cy+jxSthKbb*bPdo6ay@i>sgI^DSD)GMT zP+jNP_bh0rT}(JhO4S+a7c8l-b%KnggV!%tj>t-6KnoqEj@~Ar=sB|$G@_walqq%) zNnPe5Hfzflzb~s3b1d_@28_{?vDf;GjQ!PX8T+f(hxS)lZ?TVZa4PFvM6J%fm*M!B zdmlun;NIUgRKE9~q4K@=X56=@D2{O;Q~&xxp^*F!@aY|y8zrt zKi>;RI%QsP6rHGZKf;fQz`eg}=-UxfhQ1wo)hRe zocrvzhuWY0o1ymm*weauS08oRd)Iq(%;9T>$^5Px`$O~>pYZD8X7+OF zh&aKgjKP}Sz6ui?R8HBZ;Klkr8&B&G^f@)zbIN|yvF9p*-<>b}RMtU5_Moy)?PNbF z`&sr!`RtDh*U8@Ch_Ro2QcY0- zwcP6~Hm`yAHa~l-1M^0+Cn@;0KfaICzF)nz4?EFZtDw4wyk!Qo1cnp3<%$vFKeiqUu?;A{-3_$$JXgTBoF(X{@BaM^{H6w zwoz;}q?~jf&IrsiW}cQD@&Ib><}I zX<1$vK0?l>X^+}AFXY&>0#Ei%A9y~kw9Xi8zf^dS!L1@k6&a=Q2(ibDRbrB{pRw}U zUWwV8*>-oiBGUwJf%p^H-6mBt{N<9X!3H_oB)Ti>G4_jJP(_uGV0%PavR8^dkT1M@ zzPTmqY4Je2`YOg~ktz}|w57A?|LCe7^O#4@`W!8(Po*|M6*z%yaO%5P!}jrh1y9(` z9?<8?VqKZ1;8KJzu*Uo<6^>$GSPcCwz=&oW$3s>RH?zzV={7d$)Z+d(-DO1z%QDUYlG5as`bN((6?xjuN zc*So%SXBg`R>T}Q)Uao^76PARcuc~hPa9l`HFJJX=@rNXuE@SY!-8iru8idYfr-@1 z*sT}b4d;;FuwB*UWZ$rkw(xxZAA`S)doM5xmi4nYUBLOduNSK%BE5B!;g z>?NLC_BCK({*1XX`6d6?rh`XKKk}P{!14v2&H66qIKn*wFKcvhPiX`HugdS4(;zU# zGZJ{VA;+E*z;&y5?F%DBi+#Ntcdg_JW<~KZA@HngrSHg7a*?O_k);HXr38_sNHh~U zvy-0$PT*xR^QZ(_N|qs zdoVi;91Y-D2^dnIr@CmT)DNVyiP0njM$^S&=A9q+@nUk6q%pgTx8w4waDy! z#m_$T=)A??=B#h~t^C)J0d~kauG}%FvU~VYV{;~)jq9Q%w z6=8#=Fk4j!E??$|;fEURd{ojO^=x6n}N6nv?3BBu*{^0q; z*!lo-RQC}Z%VGWFyiT6z9D*2H!L9UbGDn1nYJV9R*pY0QULR@M{ftJvJidcwL@fxYz% z*Abt^;4&u z(M;RcjRqH!%(TWS-E6T>2o9kJ^X=vf6L-Q#bVJ)(fXN!3y^sn^d&(bGCFL{u zek1QrrQQ-=i}A{fH6jlhiN_J-7%_sOb8a8Gj3{(_jvLT+TA;{(@WWWQwgB zP~w#cd3;Bc zMjSlWXLD#nmD2Jyk-4~dee}HBfsMEA=_XYIzqS^c%u43}DxupB?q}NQ6rBZM&t^+> zh&drLM*|w}V|?Z_mkZ?_IC$@6jm(kpWUgrWAM-_cDSZZ-d6uXBQe0-^_tZL#dtQMP zbIG=aj{vtO8+Jt6D&d^6k9Rrk_Zj<1&xpLh*~&6Kzr1p0o;HiD`1-_s(3D}e;K}>& zqV=c&zN%vT8$)G$Q+lp%l4ZvJa{8D2Hska%GVhJ{+9_)$`0X#9${EBg(24eWZJfK|-pYT;kGwJzTXjO2 zufNj=yc)`PvIakee(fn^z3Ig>C^W?S^qcaoMCc3=lQdk-)i<+o* z#}oCPpa0)WAFuW84WIPxDS3DF56a)m{{Hp9ZL8WIT{UCdiU)6g{;LoC&wu<%{y^YR z-ckR-f;Y$hu&kGFK+z8sF%uqKjOvfelv1k>F+N1-k<$?&8%A{l-0y-1hXMhvsf+eE8O<7XG!^7Kr>%F3+DrHf^8%_(<_3 zLbO5J;>e9erup$^((Yx;O5SJJaxpS41No7b?aKF(4=#VWt>MR?mPSLpHz($!9SE!FJdn>;7|II_C|zTe=a zpJRCAyg%urzef|Jym#$yUM4N|l{oKzN!cV-j?;d**BAX0+JHmV9ZUs@Fp6S`l_HYrMB% zVN}b#m(^;)BWDzbC9hTPi`u2j8l3Xe&#pb&!`em5-F)^b3esO$x~yq=^Md+?$`)cb zFIc|3_8PlVtckR=`iy7yF8qq!M*7m6&WW^MYFxOis5tX@f;LUMMt|?Nc9}peYeR-i z_KuH4Hb3gJ^Lw5Efk;%Gt`6Iy_*A{=|B8JDI6C>~8-kEzNzsy*;&smj6yU%wr zbnf#Pxp$tA`st93{;1c6?D9wF4Yh6bAT+`GHU|{Rb?@1&x_0?F4E-nE=d574PWd_X z%aQS_kMZ2K-TxTRZF_wiU8bD3eEIs~DdCX5&c~+oQeezgqW^09c-cG19x`@6vPooK z?0*BZyWrkO4eT{#PuB=vu!{X>7jo!?I?*!f1boov zqm}Da^Su8267%tZwtH&v)~T9tzKYl}d{N!6s-%ChXWopOKS5ShFvV}SO_Fay-B41I zwZ(jOvOn?IZO^KSJe(R3`6T>PB=$f+_}Tq-KTgQ~v(&vJvp&WyYQqP)MCsicjSucH*I;8LPZLx00syf~8n$e7h4UdTQS^8;}OP^=?$$O6e zdRFMV^*HJN?H$(lt@L+EO&#!c>Jj^pk5-rQ>ig?TrAnJpy|D-AUsr0Yxi+LC_p3uO zsY}LbqiQfG1k}9O^Glq*Rhc7h^h^DET!BTpj}CmL{juzTjA_IkQ=@r!y?Wf+>g@3Z zjsjP!tv-5Q^*FFROFc8*Uk_v0MxSI1C*bw>suR^g2-lp+q3f)MI&A-D_RVPugr#q? z_c4{xXEoj0Cui%e$+!8jQ3-&nXW(1R#Wx$*W)H{j%7;0#j;z@9s%nu9XgmkMS?mtf zsE-d?v$U?@tzqN5Hv`8vClc&6??7h6{$Bg{IEP$C@KE@7^GJEL{gj+h9*mf4Bg*nl zkFE=ft;XP!=J7Loeo+#`a9w453ZkhvUqAd zmg=a?-mqY8D%Cn&t?JyBy|=tqYzDKtV~@2f^WY`T9h z2Z?fbDfDP8URuju^II#w>+dkK+dCFycbOwDZ0?wtz23U~!sgCR*?X)8{vXcXUuGaL zUaSJ_#|DUW)YdXH>*?~tMtkd2_H(zK=!va4gwMw6YOyi0CRJBgcHv`VjnEa(0W+(* z+A6o-nf*rJoDg}y0rUu7Yo>gQ{ncgFf-_lGh5K#4e7oHY@@<*(uFk-7waPM&;bm5E z2$?Bm`0O(FBJU+{$mlZzZW+B&Mp)ANIq&5=^B8+azHLv*KAic{MH!5V*!hXv1)5%5 z&axt75Zll$?+c~Br4x;IEPOC(Ztd?W?^appS-c7Ins4OySc~&} zNc+rV2dXE0ANVv8abOg3|3+Xq{#VQ^WMuKZ)irBE*Ok9%D6?^9U&~A)EqN#6f%ry$ zc#Vn#kEts0LR|iR)h;$~u^-?kp;u+I$MjmGrblJ|h+UBMEf$9s(=Ya(YQwXP?W{79 zYkQeTanZNY_E$?@L>}V1&0pGNgpjfAxE}AwX8rH|e`~+E(ZJnB)yR5t4WPOH~ zd8qp>X#+Zt2oVdjS*H##UIzPp@z0n=dRr@a+zS4-GM`$(=T_!WD|4rnxzox#Nis*0 z%#S2Tg}V1}`n&Eav>_YSBrFJWg~>f@i`jh;9$L+6>_nI)q19Kgrfd z{VO^ZkyT417?E2~v~^P2590##e2Fu4Q}7cx=%oU--b8hY&SaiKS2Bog@IR=c*t@DI z@|^Z%vEurla*k#sy3}#tIcq~P)!6BF=a5_7J+?D5In4SrO5V5o!W};p=+dEd6ro=dfLr0PhuN33tlwGrLVLV9fLkI z(+cmS^$zs4m42SDKFX16E(Uir9M?@mPO@6VvMVtOnf)$RE%PU_8+l@-3McMW0n%#S zVO3);#RfN_7I$n?OMu(#4s2dKCaOC+Dpg&_0@VQAn}PWX#!2+8*yQ4&d;#=1q1xcp zu*+50<*N1VyRg+{EotAxyg?Qtyk~3Dn9Y|o?@TiX&CxSU@1Z@qCD^yuBPlO-k%+qPn4O(;W@|QQM5$)(> zO5tOf$EtjC>U7yl`1x3XoqsQ~QR;w}h~JV>S)KkLEDP!XfwBnYeZ3w(S;l_akw2$d z+mP;%@w)D};DhKf!86)c+|mcFyh`)IuqW@rXL7lYi-IGL#!58GVfu7hw)~uuBn`1;vr@ele8?hJ1H_QBp&8*gQL*Q!9 zjUN@oN^kSq^JB0ZJc}Tk`8c|u`NnVn1moZ#dWRD>@l<$mT z$Qi?+j3Hwika5HZa0TO4NLzBD)y8w!8^=~xE6OT-?slb~D_5S%uG1nz?4r)u3Fd^z z5EIM+J?FstR`9+Ryl(~XnUjl|k4sv?f9B$fB>0~M|C8W<68uNji0!Pxc2;3KtFWC_ z+IH5Ni_UpI=yG@VDR4B%JoJkF0rMcO_W@^f!}VFGWbMJHX}-|XQpGyZG&U;sAJ&!X zfO!PDIeQm;EE8!$_A04Uvc~dlh`hE=D0_Oebb6{+zLC6*BheAwtq#nYoINPtbKVWl z{TPX zCfJcsA!t!v$1ar*-6@3b6hn8!z9ZbZ03G=ze3|Z2RgC*=k-vj83VvgP**rE1Os1hX z$)&uU7H=|&9>q^u@!!jTU(57PY<_>$82hV!cn%|fPCs)p-VYDs83@O1*vD2yRm+&qu9>+oQ~>kcR0hC3f5g=N!u~!AD~b`(9t{ zSgW74-J8gx4Ke6qE%b2$^YY3>5&Pksen6E)Uw-z_@1RSJ(JL z*P%o6^KEXdty=NiPk)X09^Q|b&-xn(>$bqZ2pnv_#Z$w*hq;DNa?cWb&S77E!DU2< zxRA3x#`@9%@TtLWhrp!tmts$S;ug6Vzf#ncG zf2>*+wf+D;x>u=I)>?sI?2)Z1i9hym9k3+b`X>5=0{Zz3KF&9)XXo~_xBNOhs(J(6 ze6Ok*gAK#Gtjj-tUiRURE1eT zOK(S4KF;3rY;yP_=_l|HnWNARL8GkL%sw6M>dKjY<|=q)B2fsf)=W%3!USwZGn4fM$e zZL;kVm@CjGe=G9^+7yH~g`iD&(58H7ljv!Rp-m;wrf`xu0&R*wn`S_ps-R7?nX}b0 zUp01dmn)Y~hb5Funu8S)Y$?=d2H~w(TXT zSL>9hTWFlXi}rY=E~!J>;oc_))hek^(&AH2-jnt*7q?ygxFLI@3iREsF0CQK{#x4* z5EU+6AAQ&LQ7>bZu9NdB;0roiYy|MHAE2$J=*;an2h=0`0>Krxe0A>iWXchT(c;^5&Cw$Q}h9 zr|@)cd)jFOdD?ATij$|g-ynRvlucQ|jP;@)I-V1bqf1Y){&nNe+d!YkSuj~Mpz}Ui zFTf33m%a;K`eFH=K4aS{FrQkdb?8~85gYb0{^IA_q4hcF%=6n#tve41O-NMeK3*-h zr@CJmaOB;Pjchk(dw3@_&Fz=?E^q&;J~QS^z6alYM*du}srAnLcWjQ>`?}xY(|Uqw z{Z7t=9MJtA3!VkB|BP!q+MGOvj{b4kyQzZ?zKGw+bUQ?UOu2H7D$6aC@8{DFu>n?{ z?C4d}))w7dn@d{vH^EXFN`pD5vL2W2&q^uynHkwuFq_5;2*k`@#q+yeNo5?!cNzX*j z^e*q$I_X={3&knpEhl{s=O~s?MzNDdA9+z1?_GW3D$?DQ=jQ)9x}>$d&vo*1YhMhU z=tqa2rTItlQ=TWnAi4U)DFonY=3G9fN`@4JUux!L|H9h4mPXz4|6g9X44q@W9GMa2 z+mzaSm%5riJ3XWc)G9iCET(oz;}>xQmZ9{!CNnW5Q$sk#(GZ@g4RoJoI4IM_PkFxv z5ZJs5G?F`paK2acILqz@c(Cu8W8Ip!|z topQ!-p2gJ@jzKr*>Iwber(34~wILm#pSHRFxcs!|V@^4K+GG3U`cJWzRD%Ej literal 0 HcmV?d00001 diff --git a/template/source/GRRLIB/GRRLIB.c b/template/source/GRRLIB/GRRLIB.c index ac72d4a..f6a34f2 100644 --- a/template/source/GRRLIB/GRRLIB.c +++ b/template/source/GRRLIB/GRRLIB.c @@ -1,9 +1,17 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade ===========================================*/ - +#include +#include +#include +#include +#include +#include +#include "../libpng/pngu/pngu.h" +#include "../libjpeg/jpeglib.h" #include "GRRLIB.h" #define DEFAULT_FIFO_SIZE (256 * 1024) @@ -94,7 +102,7 @@ void GRRLIB_InitTileSet(struct GRRLIB_texImg *tex, unsigned int tilew, unsigned * @param my_png the PNG buffer to load. * @return A GRRLIB_texImg structure filled with PNG informations. */ -GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]) { +GRRLIB_texImg GRRLIB_LoadTexturePNG(const unsigned char my_png[]) { PNGUPROP imgProp; IMGCTX ctx; GRRLIB_texImg my_texture; @@ -111,24 +119,112 @@ GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]) { } /** - * Load a texture from a file. - * @author GRILLO - * @param filename the PNG file to load. +* Convert a raw bmp (RGB, no alpha) to 4x4RGBA + * @author DrTwox +*/ +static void RawTo4x4RGBA(const unsigned char *src, void *dst, const unsigned int width, const unsigned int height) { + unsigned int block = 0; + unsigned int i = 0; + unsigned int c = 0; + unsigned int ar = 0; + unsigned int gb = 0; + unsigned char *p = (unsigned char*)dst; + + for (block = 0; block < height; block += 4) { + for (i = 0; i < width; i += 4) { + /* Alpha and Red */ + for (c = 0; c < 4; ++c) { + for (ar = 0; ar < 4; ++ar) { + /* Alpha pixels */ + *p++ = 255; + /* Red pixels */ + *p++ = src[((i + ar) + ((block + c) * width)) * 3]; + } + } + + /* Green and Blue */ + for (c = 0; c < 4; ++c) { + for (gb = 0; gb < 4; ++gb) { + /* Green pixels */ + *p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 1]; + /* Blue pixels */ + *p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 2]; + } + } + } /* i */ + } /* block */ +} + +/** + * Load a texture from a buffer. + * Take Care to have a JPG Finnishing by 0xFF 0xD9 !!!! + * @author DrTwox + * @param my_jpg the JPG buffer to load. * @return A GRRLIB_texImg structure filled with PNG informations. */ -GRRLIB_texImg GRRLIB_LoadTextureFromFile(const char *filename) { - PNGUPROP imgProp; - IMGCTX ctx; +GRRLIB_texImg GRRLIB_LoadTextureJPG(const unsigned char my_jpg[]) { + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; GRRLIB_texImg my_texture; + int n=0; + + if((my_jpg[0]==0xff) && (my_jpg[1]==0xd8) && (my_jpg[2]==0xff)){ + while(1){ + if((my_jpg[n]==0xff) && (my_jpg[n+1]==0xd9)) + break; + n++; + } + n+=2; + } + + /* Init the JPEG decompressor */ + jpeg_create_decompress(&cinfo); + + /* Use the standard error handler */ + cinfo.err = jpeg_std_error(&jerr); + + /* Don't use a progress handler */ + cinfo.progress = NULL; + + /* Set the source buffer */ + jpeg_memory_src(&cinfo, my_jpg, n); + + /* Read the default header information */ + jpeg_read_header(&cinfo, TRUE); + + /* Get ready to decompress */ + jpeg_start_decompress(&cinfo); + + /* Create a buffer to hold the final image */ + unsigned char *tempBuffer = (unsigned char*) malloc(cinfo.output_width * cinfo.output_height * cinfo.num_components); + + /* Decompress the JPEG into tempBuffer, one row at a time */ + JSAMPROW row_pointer[1]; + row_pointer[0] = (unsigned char*) malloc(cinfo.output_width * cinfo.num_components); + unsigned int i = 0; + size_t location = 0; + while (cinfo.output_scanline < cinfo.output_height) { + jpeg_read_scanlines(&cinfo, row_pointer, 1); + for (i = 0; i < cinfo.image_width * cinfo.num_components; i++) { + /* Put the decoded scanline into the tempBuffer */ + tempBuffer[ location++ ] = row_pointer[0][i]; + } + } + + /* Create a buffer to hold the final texture */ + my_texture.data = memalign(32, cinfo.output_width * cinfo.output_height * 4); + RawTo4x4RGBA(tempBuffer, my_texture.data, cinfo.output_width, cinfo.output_height); + DCFlushRange(my_texture.data, cinfo.output_width * cinfo.output_height * 4); + + /* Done - do cleanup and release memory */ + jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + free(row_pointer[0]); + free(tempBuffer); + + my_texture.w = cinfo.output_width; + my_texture.h = cinfo.output_height; - ctx = PNGU_SelectImageFromDevice(filename); - PNGU_GetImageProperties (ctx, &imgProp); - my_texture.data = memalign (32, imgProp.imgWidth * imgProp.imgHeight * 4); - PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, my_texture.data, 255); - PNGU_ReleaseImageContext (ctx); - DCFlushRange (my_texture.data, imgProp.imgWidth * imgProp.imgHeight * 4); - my_texture.w = imgProp.imgWidth; - my_texture.h = imgProp.imgHeight; return my_texture; } diff --git a/template/source/GRRLIB/GRRLIB.h b/template/source/GRRLIB/GRRLIB.h index c12f0b9..c6ed29d 100644 --- a/template/source/GRRLIB/GRRLIB.h +++ b/template/source/GRRLIB/GRRLIB.h @@ -1,20 +1,15 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade ===========================================*/ #ifndef __GXHDR__ #define __GXHDR__ -#include -#include -#include -#include -#include -#include + #include -#include "../libpng/pngu/pngu.h" /** * @struct GRRLIB_texImg @@ -53,8 +48,9 @@ void GRRLIB_NGone(Vector v[],u32 color,long n); void GRRLIB_NGoneFilled(Vector v[],u32 color,long n); -GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]); -GRRLIB_texImg GRRLIB_LoadTextureFromFile(const char *filename); +GRRLIB_texImg GRRLIB_LoadTexturePNG(const unsigned char my_png[]); +GRRLIB_texImg GRRLIB_LoadTextureJPG(const unsigned char my_jpg[]); + void GRRLIB_InitTileSet(struct GRRLIB_texImg *tex, unsigned int tilew, unsigned int tileh, unsigned int tilestart); diff --git a/template/source/gfx/test_jpg.c b/template/source/gfx/test_jpg.c new file mode 100644 index 0000000..e69878b --- /dev/null +++ b/template/source/gfx/test_jpg.c @@ -0,0 +1,846 @@ +/* + This file was autogenerated by raw2c. +Visit http://www.devkitpro.org +*/ + +const unsigned char test_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03, + 0x04, 0x04, 0x04, 0x03, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08, 0x07, + 0x07, 0x07, 0x07, 0x0f, 0x0b, 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, + 0x13, 0x16, 0x1c, 0x17, 0x13, 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d, + 0x1f, 0x1f, 0x1f, 0x13, 0x17, 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e, 0xff, 0xdb, + 0x00, 0x43, 0x01, 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, + 0x14, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x01, 0x2c, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, + 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x03, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x09, 0x06, + 0x05, 0x03, 0x04, 0xff, 0xc4, 0x00, 0x4b, 0x10, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, + 0x05, 0x08, 0x05, 0x09, 0x06, 0x07, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0x05, 0x11, 0x06, + 0x07, 0x12, 0x08, 0x13, 0x21, 0x14, 0x22, 0x31, 0x09, 0x15, 0x32, 0x41, 0x51, 0x16, 0x17, 0x18, + 0x23, 0x37, 0x76, 0xa5, 0xb4, 0x56, 0x57, 0x95, 0xd2, 0xd3, 0x33, 0x38, 0x42, 0x52, 0x55, 0x67, + 0x84, 0x94, 0xd4, 0x24, 0x25, 0x34, 0x71, 0x93, 0xe4, 0x35, 0x47, 0x53, 0x72, 0x81, 0x85, 0xc4, + 0xff, 0xc4, 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, + 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb9, 0x74, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x73, 0x3b, 0x9d, 0xae, + 0xb4, 0xde, 0xdc, 0xe9, 0x09, 0x5a, 0xa3, 0x54, 0x4d, 0xf4, 0xf0, 0x98, 0xf6, 0xb6, 0xda, 0x00, + 0x53, 0xb2, 0x5d, 0x20, 0xf1, 0x69, 0xa4, 0xe4, 0x72, 0x5a, 0xb0, 0x7c, 0x78, 0x00, 0x02, 0xa2, + 0x42, 0x41, 0x20, 0x3a, 0x6a, 0x55, 0x3a, 0x81, 0xd7, 0x2c, 0x55, 0xce, 0x8e, 0x89, 0xdb, 0x68, + 0xf3, 0x11, 0x14, 0xea, 0x43, 0xee, 0xb3, 0x7a, 0x0e, 0xb8, 0x84, 0x67, 0xdc, 0xa4, 0xa0, 0xb2, + 0x90, 0xa5, 0x01, 0x92, 0x12, 0x54, 0x90, 0x4f, 0x8c, 0x8f, 0x9a, 0xb7, 0x16, 0x2b, 0xa4, 0x0b, + 0xe5, 0x8e, 0x05, 0xee, 0xd6, 0xff, 0x00, 0xa8, 0x81, 0x70, 0x8c, 0xdc, 0xa8, 0xae, 0xf0, 0x52, + 0x7b, 0x8d, 0x38, 0x90, 0xa4, 0x2b, 0x0a, 0x00, 0x8c, 0xa4, 0x83, 0x82, 0x01, 0xfc, 0x68, 0x3f, + 0x6d, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x2a, 0x33, 0xd6, 0x5b, 0xf9, 0xb4, 0x3a, 0x42, 0xf8, + 0xe5, 0x92, 0xfb, 0xad, 0xe1, 0x35, 0x3d, 0x9c, 0x87, 0x9a, 0x8c, 0xc3, 0xd2, 0xbb, 0x4a, 0x0a, + 0x52, 0x54, 0x85, 0x96, 0x50, 0xb0, 0x85, 0x85, 0x24, 0x82, 0x85, 0x10, 0xa1, 0xe3, 0x20, 0x64, + 0x57, 0xe2, 0xb2, 0x75, 0x23, 0xb2, 0x57, 0x8b, 0xa3, 0x36, 0xe8, 0x9a, 0xfa, 0x13, 0x4f, 0x3d, + 0xcb, 0x8a, 0xa6, 0x46, 0x7e, 0x2b, 0x43, 0x09, 0x2a, 0x3c, 0x9d, 0x79, 0xb4, 0xa1, 0x3e, 0x01, + 0xc6, 0x54, 0x32, 0x70, 0x06, 0x49, 0x02, 0x82, 0x59, 0xa5, 0x79, 0x9a, 0x6f, 0x50, 0xd8, 0x35, + 0x2c, 0x15, 0xce, 0xd3, 0x97, 0xcb, 0x65, 0xe6, 0x23, 0x6e, 0x96, 0x56, 0xfc, 0x09, 0x68, 0x90, + 0xda, 0x56, 0x00, 0x25, 0x05, 0x48, 0x24, 0x05, 0x61, 0x49, 0x38, 0xf9, 0xc1, 0x1f, 0x8d, 0x7a, + 0x74, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, + 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0xe7, 0xf5, 0x26, 0xb7, 0xd1, 0x7a, + 0x6a, 0x72, 0x20, 0xea, 0x3d, 0x5f, 0xa7, 0xec, 0xd2, 0xdc, 0x68, 0x3c, 0x86, 0x27, 0xdc, 0x99, + 0x8e, 0xe2, 0x90, 0x49, 0x01, 0x61, 0x2b, 0x50, 0x25, 0x39, 0x4a, 0x86, 0x7e, 0x32, 0x0f, 0xe1, + 0x5c, 0x67, 0x56, 0x57, 0xfb, 0xce, 0x98, 0xe9, 0xef, 0x55, 0x5e, 0xb4, 0xfd, 0xc5, 0xeb, 0x75, + 0xc5, 0xa6, 0x98, 0x69, 0xa9, 0x2c, 0x9c, 0x38, 0xd8, 0x76, 0x4b, 0x4d, 0x2c, 0xa4, 0xff, 0x00, + 0xa2, 0xae, 0x0b, 0x50, 0x0a, 0x18, 0x20, 0x9c, 0x82, 0x08, 0x04, 0x65, 0xd5, 0x06, 0xb2, 0xfe, + 0x76, 0x36, 0xb3, 0xfa, 0xcb, 0xd1, 0x9f, 0xdb, 0xb1, 0xbf, 0xbf, 0x51, 0x9e, 0xb2, 0xea, 0xe3, + 0x68, 0x6c, 0xf6, 0x37, 0x25, 0xd8, 0xae, 0x53, 0x75, 0x2c, 0xff, 0x00, 0x29, 0x66, 0x14, 0x68, + 0x4f, 0x31, 0x95, 0x71, 0x51, 0x49, 0x5b, 0x8f, 0x21, 0x21, 0x28, 0xe4, 0x02, 0x49, 0x4f, 0x25, + 0x0e, 0x40, 0x84, 0xab, 0x06, 0xb3, 0x9a, 0x94, 0x16, 0x33, 0x70, 0xba, 0xc1, 0xdd, 0x0b, 0xe5, + 0xd1, 0x2e, 0x69, 0x53, 0x0b, 0x49, 0x40, 0x6f, 0x3c, 0x58, 0x69, 0x96, 0xe6, 0x3a, 0xe6, 0x52, + 0x9c, 0xf7, 0x1c, 0x79, 0x04, 0x1c, 0x28, 0x28, 0x8e, 0x08, 0x47, 0x85, 0x60, 0xf2, 0xc0, 0x35, + 0x16, 0xc0, 0xde, 0x2d, 0xd8, 0x85, 0x3a, 0x3c, 0xc6, 0x77, 0x27, 0x56, 0xa9, 0xd6, 0x1d, 0x4b, + 0xa8, 0x4b, 0xd7, 0x67, 0x9e, 0x6c, 0x94, 0x9c, 0x80, 0xa4, 0x2d, 0x45, 0x2b, 0x4f, 0x8f, 0x29, + 0x50, 0x20, 0x8f, 0x04, 0x11, 0x5c, 0xfe, 0x98, 0xd2, 0x7a, 0xab, 0x54, 0x7a, 0x8f, 0xc9, 0x9d, + 0x35, 0x7a, 0xbd, 0xfa, 0x6e, 0x3e, 0xa3, 0xea, 0xe8, 0x2e, 0xc8, 0xed, 0x72, 0xcf, 0x1e, 0x5c, + 0x12, 0x78, 0xe7, 0x8a, 0xb1, 0x9f, 0x9c, 0x1f, 0xc2, 0xac, 0x96, 0xdf, 0x74, 0x57, 0xab, 0xa6, + 0xce, 0x87, 0x23, 0x5b, 0xea, 0x1b, 0x65, 0xa6, 0xdc, 0xa6, 0x90, 0xeb, 0xf1, 0xe0, 0x29, 0x52, + 0x25, 0x82, 0x4a, 0x4a, 0x99, 0x24, 0xa4, 0x36, 0x85, 0x71, 0x2b, 0x1c, 0xc2, 0x9c, 0x01, 0x40, + 0x61, 0x2b, 0x07, 0x34, 0x17, 0x33, 0x6d, 0x6f, 0x72, 0xb5, 0x2e, 0xdd, 0x69, 0xad, 0x47, 0x39, + 0xb6, 0x5b, 0x97, 0x75, 0xb4, 0x45, 0x9a, 0xfa, 0x19, 0x04, 0x36, 0x95, 0xba, 0xca, 0x56, 0xa0, + 0x90, 0x49, 0x21, 0x39, 0x51, 0xc6, 0x49, 0x38, 0xfb, 0xcd, 0x71, 0x9d, 0x46, 0x6f, 0x4d, 0x9b, + 0x66, 0xb4, 0xec, 0x19, 0x93, 0x2d, 0xcf, 0x5d, 0xae, 0x97, 0x27, 0x54, 0x88, 0x10, 0x1b, 0x73, + 0xb4, 0x97, 0x02, 0x38, 0xf7, 0x56, 0xb7, 0x78, 0xa8, 0x21, 0x29, 0x0b, 0x4f, 0xdc, 0x49, 0x2a, + 0x48, 0x03, 0x1c, 0x94, 0x99, 0x1a, 0xc5, 0x6b, 0x81, 0x63, 0xb1, 0xc0, 0xb2, 0x5a, 0xd8, 0xf4, + 0xf0, 0x2d, 0xf1, 0x9b, 0x8b, 0x15, 0xae, 0x6a, 0x57, 0x6d, 0xa6, 0xd2, 0x12, 0x84, 0xe5, 0x44, + 0x93, 0x84, 0x80, 0x32, 0x49, 0x3f, 0x8d, 0x54, 0xdf, 0xa4, 0xba, 0xd7, 0x3d, 0xeb, 0x1e, 0x88, + 0xbd, 0xb6, 0xc7, 0x28, 0x11, 0x24, 0xcc, 0x8a, 0xfb, 0xbc, 0xd3, 0xec, 0x75, 0xe4, 0xb4, 0xa6, + 0xd3, 0x8c, 0xe4, 0xe5, 0x2c, 0x3a, 0x72, 0x06, 0x07, 0x1f, 0x38, 0xc8, 0xc8, 0x74, 0x1b, 0x47, + 0xd6, 0x05, 0x9b, 0x5a, 0x6b, 0xdb, 0x6e, 0x96, 0xbd, 0x69, 0x07, 0xac, 0x09, 0xb9, 0xba, 0x98, + 0xd1, 0x25, 0xb7, 0x3f, 0xd5, 0xa4, 0xc8, 0x5a, 0x82, 0x5b, 0x6d, 0x69, 0x0d, 0x20, 0xa5, 0x2a, + 0x27, 0x1c, 0x86, 0x70, 0x4a, 0x72, 0x02, 0x49, 0x52, 0x6c, 0xfd, 0x63, 0xa5, 0x8a, 0xe9, 0x3e, + 0xc7, 0x7c, 0x81, 0x7b, 0xb5, 0xbf, 0xe9, 0xe7, 0xdb, 0xe4, 0xb7, 0x2a, 0x2b, 0xbc, 0x12, 0xae, + 0xdb, 0xad, 0xa8, 0x29, 0x0a, 0xc2, 0x81, 0x07, 0x0a, 0x00, 0xe0, 0x82, 0x3f, 0x1a, 0xd7, 0xeb, + 0x15, 0xd2, 0x05, 0xf2, 0xc7, 0x02, 0xf7, 0x6b, 0x7f, 0xd4, 0x40, 0xb8, 0x46, 0x6e, 0x54, 0x57, + 0x78, 0x29, 0x3d, 0xc6, 0x9c, 0x48, 0x52, 0x15, 0x85, 0x00, 0x46, 0x52, 0x41, 0xc1, 0x00, 0xfe, + 0x34, 0x1f, 0xb6, 0xab, 0x37, 0xd2, 0x3b, 0xfb, 0x10, 0xb3, 0x7e, 0xf2, 0x31, 0xfc, 0xb4, 0x9a, + 0xb3, 0x35, 0x54, 0xfe, 0x92, 0x5b, 0xdc, 0x56, 0x36, 0xeb, 0x4b, 0xe9, 0xc5, 0xb6, 0xf1, 0x97, + 0x3a, 0xee, 0xa9, 0xad, 0x2c, 0x01, 0xdb, 0x08, 0x61, 0x95, 0x21, 0x60, 0x9c, 0xe7, 0x91, 0x32, + 0x51, 0x8c, 0x02, 0x30, 0x15, 0x92, 0x30, 0x32, 0x14, 0x4e, 0xb5, 0xe3, 0x6d, 0x6c, 0x92, 0xb4, + 0xd6, 0xdd, 0x69, 0xad, 0x39, 0x39, 0xc6, 0x5c, 0x97, 0x6a, 0xb4, 0x45, 0x84, 0xfa, 0xd9, 0x24, + 0xb6, 0xa5, 0xb4, 0xca, 0x50, 0xa2, 0x92, 0x40, 0x25, 0x39, 0x49, 0xc6, 0x40, 0x38, 0xfb, 0x85, + 0x64, 0x3d, 0x6c, 0xc5, 0x04, 0x41, 0xd5, 0xc6, 0xe6, 0x5e, 0x76, 0xb7, 0x69, 0x8d, 0xeb, 0x4f, + 0x30, 0xca, 0xae, 0x97, 0x09, 0xc8, 0xb6, 0xc7, 0x7d, 0xdf, 0x72, 0x62, 0x95, 0xb6, 0xe2, 0xcb, + 0xc1, 0x04, 0x10, 0xb5, 0x00, 0xd9, 0x00, 0x1f, 0x19, 0x20, 0x9e, 0x40, 0x14, 0xaa, 0x9f, 0xe9, + 0x5e, 0xac, 0xb7, 0x8e, 0xd9, 0xa8, 0xa1, 0x4e, 0xbd, 0x5f, 0x59, 0xbf, 0x5b, 0x9a, 0x77, 0x32, + 0x6d, 0xee, 0xc1, 0x8c, 0xc2, 0x64, 0x23, 0xe0, 0xa4, 0x38, 0xdb, 0x41, 0x48, 0x57, 0x9c, 0x85, + 0x0c, 0x80, 0x40, 0xc8, 0x50, 0xca, 0x4d, 0x86, 0xfa, 0x47, 0x7f, 0x62, 0x16, 0x6f, 0xde, 0x46, + 0x3f, 0x96, 0x93, 0x54, 0x02, 0x83, 0x66, 0x2a, 0x0c, 0xeb, 0x73, 0x5d, 0x6a, 0x4d, 0x07, 0xb3, + 0x09, 0x97, 0xa5, 0xe6, 0xfa, 0x09, 0xb7, 0x4b, 0x93, 0x76, 0xd7, 0x25, 0x20, 0x1e, 0xeb, 0x2d, + 0x2d, 0xa7, 0x56, 0xa5, 0x34, 0xac, 0xfb, 0x16, 0x7b, 0x61, 0x3c, 0xbc, 0x90, 0x14, 0x48, 0xc2, + 0xb0, 0xa1, 0x39, 0xd5, 0x6d, 0xfa, 0x45, 0x22, 0x4a, 0x93, 0xb1, 0x56, 0xf7, 0xa3, 0xc6, 0x79, + 0xe6, 0xa2, 0xea, 0x08, 0xef, 0x48, 0x5b, 0x6d, 0x95, 0x25, 0x94, 0x16, 0x5f, 0x40, 0x5a, 0xc8, + 0xfb, 0x29, 0xe6, 0xb4, 0x27, 0x27, 0xc6, 0x54, 0x91, 0xf2, 0x45, 0x06, 0x7c, 0xd2, 0x95, 0x6b, + 0x3a, 0x7a, 0xd1, 0x1b, 0x4b, 0xbe, 0xfa, 0x2a, 0xfd, 0x65, 0x9b, 0xa7, 0x99, 0xd3, 0x5a, 0xfe, + 0x23, 0x41, 0xd5, 0x5c, 0xa0, 0x49, 0x58, 0x6d, 0xe0, 0xb5, 0x1c, 0x48, 0x6e, 0x21, 0x73, 0xb6, + 0x94, 0x85, 0x00, 0x97, 0x1b, 0x42, 0x12, 0x80, 0x16, 0x9e, 0x05, 0xbe, 0x69, 0x08, 0x0a, 0xcd, + 0xa6, 0xf5, 0x0d, 0xff, 0x00, 0x4d, 0x4e, 0x5c, 0xed, 0x39, 0x7c, 0xb9, 0xd9, 0xa5, 0xb8, 0xd1, + 0x65, 0x6f, 0xc0, 0x96, 0xb8, 0xee, 0x29, 0x04, 0x82, 0x50, 0x54, 0x82, 0x09, 0x4e, 0x52, 0x93, + 0x8f, 0x8c, 0x81, 0xf8, 0x56, 0x89, 0x74, 0x47, 0xae, 0xb5, 0x26, 0xbc, 0xd9, 0x85, 0x4b, 0xd5, + 0x13, 0x7d, 0x7c, 0xdb, 0x5d, 0xc9, 0xcb, 0x6b, 0x72, 0x96, 0x0f, 0x75, 0xe6, 0x90, 0xd3, 0x4b, + 0x4a, 0x9d, 0x56, 0x7d, 0xeb, 0x1d, 0xc2, 0x9e, 0x5e, 0x09, 0x09, 0x04, 0xe5, 0x59, 0x51, 0x89, + 0xbf, 0x41, 0x8f, 0xf7, 0xa3, 0xfc, 0x03, 0xff, 0x00, 0x71, 0x56, 0x4f, 0x63, 0xb6, 0xce, 0xcd, + 0xb4, 0xfa, 0x09, 0x8d, 0x2d, 0x67, 0x7d, 0xe9, 0x4a, 0x2e, 0x99, 0x33, 0x65, 0xbb, 0xe1, 0x52, + 0x64, 0x29, 0x29, 0x4a, 0x9c, 0x09, 0xc9, 0x08, 0x4e, 0x10, 0x90, 0x12, 0x3e, 0x02, 0x46, 0x4a, + 0x95, 0x95, 0x10, 0xee, 0x69, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, + 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x79, 0x9a, 0xaa, 0xc1, + 0x66, 0xd5, 0x3a, 0x76, 0x6e, 0x9e, 0xd4, 0x36, 0xe6, 0x6e, 0x36, 0xb9, 0xcd, 0x76, 0xa4, 0x47, + 0x74, 0x7b, 0x56, 0x3e, 0x41, 0x04, 0x79, 0x4a, 0x81, 0x00, 0x85, 0x02, 0x0a, 0x48, 0x04, 0x10, + 0x40, 0x35, 0x5e, 0x7f, 0x42, 0xad, 0xac, 0xff, 0x00, 0x6f, 0xeb, 0x3f, 0xf9, 0xc8, 0xdf, 0xf4, + 0xf5, 0x66, 0x69, 0x41, 0x44, 0xfa, 0xcd, 0xd8, 0xad, 0x11, 0xb6, 0x9b, 0x75, 0xa6, 0xef, 0xda, + 0x42, 0x3b, 0xd1, 0x1d, 0x44, 0xe1, 0x6d, 0x9c, 0x5e, 0x79, 0xc7, 0x9c, 0x9a, 0x56, 0xca, 0x96, + 0x97, 0x94, 0x54, 0xae, 0x28, 0x50, 0xec, 0xaf, 0x21, 0x08, 0x48, 0x25, 0xdf, 0xb8, 0x24, 0x0a, + 0xaa, 0x75, 0x7f, 0xfe, 0x91, 0xdf, 0xd8, 0x85, 0x9b, 0xf7, 0x91, 0x8f, 0xe5, 0xa4, 0xd5, 0x00, + 0xa0, 0xd9, 0x28, 0x11, 0x22, 0xc0, 0x83, 0x1e, 0x0c, 0x18, 0xcc, 0xc5, 0x89, 0x19, 0xa4, 0xb2, + 0xc3, 0x0c, 0xb6, 0x10, 0xdb, 0x48, 0x48, 0xc2, 0x50, 0x94, 0x8f, 0x09, 0x48, 0x00, 0x00, 0x07, + 0x80, 0x05, 0x7d, 0xa9, 0x4a, 0x05, 0x43, 0x3d, 0x69, 0x69, 0x6f, 0xca, 0x8e, 0x9e, 0x75, 0x07, + 0x66, 0x0f, 0xab, 0x9b, 0x68, 0xed, 0xdd, 0x23, 0x7e, 0xb7, 0x87, 0x6b, 0xb4, 0xaf, 0xd7, 0x39, + 0xe4, 0x80, 0xac, 0x30, 0xa7, 0xfd, 0xa7, 0x39, 0xcf, 0x80, 0x55, 0xc6, 0xa6, 0x6a, 0xe3, 0x37, + 0xdb, 0xf6, 0x21, 0xaf, 0x3f, 0x76, 0xee, 0x3f, 0xcb, 0x39, 0x41, 0x93, 0x55, 0x2c, 0xd8, 0xba, + 0x8f, 0xde, 0x7b, 0x1d, 0x8e, 0x05, 0x92, 0xd7, 0xac, 0xbd, 0x3c, 0x0b, 0x7c, 0x66, 0xe2, 0xc5, + 0x6b, 0xea, 0xc8, 0x8a, 0xed, 0xb4, 0xda, 0x42, 0x50, 0x9c, 0xa9, 0xa2, 0x4e, 0x12, 0x00, 0xc9, + 0x24, 0xfe, 0x35, 0x13, 0x54, 0xe7, 0xb5, 0xbd, 0x2f, 0xeb, 0xed, 0xc4, 0xd0, 0x96, 0xed, 0x63, + 0x64, 0xbb, 0xe9, 0x98, 0xf0, 0x2e, 0x1d, 0xde, 0xd3, 0x73, 0x24, 0xbe, 0x97, 0x53, 0xdb, 0x75, + 0x6d, 0x1e, 0x41, 0x2c, 0xa8, 0x7d, 0xa4, 0x1c, 0x60, 0x9f, 0x18, 0xff, 0x00, 0xca, 0x83, 0xf1, + 0x7e, 0x94, 0x7b, 0xed, 0xfd, 0x39, 0xfe, 0x13, 0x0b, 0xfc, 0x1a, 0xe3, 0x37, 0x37, 0x74, 0xb5, + 0xde, 0xe5, 0x7d, 0x5f, 0xf9, 0x6b, 0x7d, 0xfa, 0xd7, 0xea, 0xee, 0xef, 0xa4, 0xff, 0x00, 0xb2, + 0x30, 0xcf, 0x6f, 0xb9, 0xc3, 0x9f, 0xf9, 0x24, 0x27, 0x39, 0xe0, 0x8f, 0x9c, 0xe3, 0x1e, 0x3e, + 0xfa, 0x99, 0xbf, 0x42, 0xad, 0xd3, 0xff, 0x00, 0x6f, 0xe8, 0xcf, 0xf9, 0xc9, 0x3f, 0xf4, 0xf5, + 0x19, 0xef, 0xa6, 0xca, 0x6a, 0xad, 0x9e, 0xfa, 0x9f, 0xf2, 0x9a, 0xe1, 0x65, 0x97, 0xf5, 0xbf, + 0x7f, 0xd3, 0xfd, 0x5c, 0xf3, 0xab, 0xe3, 0xda, 0xed, 0xf2, 0xe5, 0xcd, 0xb4, 0x63, 0x3d, 0xd4, + 0xe3, 0x19, 0xf8, 0x3f, 0x1f, 0x78, 0x73, 0xfb, 0x31, 0x12, 0x2c, 0xfd, 0xe1, 0xd1, 0x70, 0x67, + 0x46, 0x66, 0x54, 0x49, 0x3a, 0x82, 0x03, 0x2f, 0xb0, 0xf3, 0x61, 0x6d, 0xba, 0x85, 0x48, 0x40, + 0x52, 0x14, 0x93, 0xe1, 0x49, 0x20, 0x90, 0x41, 0xf0, 0x41, 0xad, 0x6b, 0xac, 0x8d, 0xda, 0x7b, + 0xa4, 0x0b, 0x1e, 0xe9, 0xe9, 0x2b, 0xdd, 0xd1, 0xff, 0x00, 0x4f, 0x02, 0xdf, 0x7b, 0x85, 0x2a, + 0x53, 0xbc, 0x14, 0xae, 0xdb, 0x4d, 0xbe, 0x85, 0x2d, 0x58, 0x48, 0x24, 0xe1, 0x20, 0x9c, 0x00, + 0x4f, 0xe1, 0x5a, 0xe5, 0x41, 0x59, 0xbe, 0x91, 0xdf, 0xd8, 0x85, 0x9b, 0xf7, 0x91, 0x8f, 0xe5, + 0xa4, 0xd5, 0x00, 0xab, 0xff, 0x00, 0xf4, 0x8e, 0xfe, 0xc4, 0x2c, 0xdf, 0xbc, 0x8c, 0x7f, 0x2d, + 0x26, 0xa8, 0x05, 0x06, 0xcc, 0x57, 0x99, 0xaa, 0xac, 0x16, 0x6d, 0x53, 0xa7, 0x66, 0xe9, 0xed, + 0x43, 0x6e, 0x66, 0xe3, 0x6b, 0x9c, 0xd7, 0x6a, 0x44, 0x77, 0x47, 0xb5, 0x63, 0xe4, 0x10, 0x47, + 0x94, 0xa8, 0x10, 0x08, 0x50, 0x20, 0xa4, 0x80, 0x41, 0x04, 0x03, 0x5e, 0x9d, 0x28, 0x32, 0xd3, + 0xa8, 0xfd, 0xa8, 0x9f, 0xb4, 0xbb, 0x87, 0x22, 0xcd, 0xc2, 0x6b, 0xf6, 0x39, 0x3f, 0xae, 0xb4, + 0x4f, 0x90, 0x84, 0x8f, 0x50, 0xd6, 0x01, 0x52, 0x49, 0x4f, 0x82, 0xb6, 0xd4, 0xae, 0x0a, 0xfb, + 0x24, 0xfb, 0x55, 0xc5, 0x21, 0x69, 0x15, 0xc2, 0xe9, 0x5b, 0xfd, 0xe7, 0x4b, 0x6a, 0x28, 0x5a, + 0x87, 0x4f, 0x5c, 0x5e, 0xb7, 0x5d, 0x20, 0xbb, 0xdd, 0x8f, 0x21, 0xa3, 0xee, 0x41, 0xf8, 0x20, + 0x83, 0xe1, 0x49, 0x20, 0x90, 0x52, 0x41, 0x0a, 0x04, 0x82, 0x08, 0x24, 0x56, 0xaf, 0xee, 0x76, + 0x85, 0xd3, 0x7b, 0x8d, 0xa4, 0x25, 0x69, 0x7d, 0x51, 0x0b, 0xd4, 0x42, 0x7f, 0xdc, 0xdb, 0x88, + 0x21, 0x2e, 0xc6, 0x74, 0x03, 0xc5, 0xd6, 0x95, 0x83, 0xc5, 0x69, 0xc9, 0xf3, 0xe4, 0x10, 0x4a, + 0x48, 0x29, 0x24, 0x1c, 0xe0, 0xde, 0xcd, 0x88, 0xd7, 0xbb, 0x5d, 0x3a, 0x5b, 0xd7, 0x1b, 0x63, + 0xd7, 0x1d, 0x3c, 0xdb, 0xa4, 0x31, 0x7a, 0x8a, 0xdf, 0x26, 0x16, 0x8c, 0xa0, 0x25, 0x4e, 0x80, + 0x49, 0x61, 0x44, 0xb8, 0x94, 0xf1, 0x5e, 0x01, 0x56, 0x42, 0x4a, 0xc0, 0xc9, 0x0b, 0x33, 0xb7, + 0xdd, 0x6a, 0x69, 0x19, 0xb0, 0x61, 0xc7, 0xd6, 0xfa, 0x7a, 0xe7, 0x69, 0xb8, 0xa9, 0xd4, 0x34, + 0xfc, 0x88, 0x09, 0x4c, 0x88, 0x80, 0x10, 0x90, 0xa7, 0x88, 0x2a, 0x0e, 0x21, 0x3c, 0x8a, 0xcf, + 0x00, 0x97, 0x08, 0x48, 0x18, 0x52, 0xc9, 0xc5, 0x4c, 0x1a, 0x37, 0x7f, 0x36, 0x87, 0x57, 0xdf, + 0x1b, 0xb2, 0x58, 0xb5, 0xbc, 0x27, 0x67, 0xbd, 0x80, 0xcb, 0x52, 0x58, 0x7a, 0x2f, 0x75, 0x45, + 0x49, 0x4a, 0x50, 0x82, 0xf2, 0x10, 0x16, 0xb2, 0xa5, 0x00, 0x10, 0x92, 0x54, 0x7c, 0xe0, 0x1c, + 0x1a, 0xcb, 0x3a, 0x50, 0x6c, 0xc5, 0x2a, 0xa0, 0x74, 0x73, 0xd4, 0x66, 0xa4, 0xd4, 0xfa, 0x9e, + 0xd9, 0xb6, 0x7a, 0xcd, 0xaf, 0xac, 0xde, 0x7a, 0x32, 0xdb, 0xb7, 0x5d, 0x93, 0x9f, 0x50, 0xa5, + 0x34, 0x85, 0xb8, 0x44, 0x92, 0x55, 0x85, 0xe5, 0xb4, 0xe0, 0x2c, 0x00, 0xac, 0xa4, 0x72, 0x0b, + 0x2b, 0x2b, 0x4d, 0xbf, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, + 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0xac, 0xdf, 0x48, + 0xef, 0xec, 0x42, 0xcd, 0xfb, 0xc8, 0xc7, 0xf2, 0xd2, 0x6a, 0x80, 0x55, 0xff, 0x00, 0xfa, 0x47, + 0x7f, 0x62, 0x16, 0x6f, 0xde, 0x46, 0x3f, 0x96, 0x93, 0x54, 0x02, 0x83, 0x66, 0x29, 0x4a, 0x50, + 0x2b, 0x8c, 0xdf, 0x6f, 0xd8, 0x86, 0xbc, 0xfd, 0xdb, 0xb8, 0xff, 0x00, 0x2c, 0xe5, 0x76, 0x75, + 0xc9, 0xef, 0x3c, 0x49, 0x53, 0xf6, 0x7b, 0x5a, 0x41, 0x83, 0x19, 0xe9, 0x52, 0xe4, 0xe9, 0xf9, + 0xec, 0xb0, 0xc3, 0x2d, 0x95, 0xb8, 0xea, 0xd5, 0x1d, 0x61, 0x28, 0x4a, 0x47, 0x95, 0x28, 0x92, + 0x00, 0x03, 0xc9, 0x26, 0x83, 0x24, 0xeb, 0x4c, 0xba, 0x25, 0xff, 0x00, 0x36, 0x2d, 0x23, 0xff, + 0x00, 0x1b, 0xfc, 0xeb, 0xf5, 0x99, 0xb5, 0xa7, 0x3d, 0x19, 0x44, 0x95, 0x0b, 0xa6, 0x8d, 0x1e, + 0xcc, 0xc8, 0xcf, 0x46, 0x75, 0x4d, 0x49, 0x79, 0x28, 0x75, 0xb2, 0x85, 0x14, 0x39, 0x29, 0xe5, + 0xa1, 0x60, 0x1f, 0xf4, 0x54, 0x85, 0x25, 0x40, 0xfc, 0x10, 0xa0, 0x47, 0x83, 0x41, 0x2f, 0xd5, + 0x53, 0xfa, 0x49, 0x6c, 0x91, 0x5f, 0xdb, 0xad, 0x2f, 0xa8, 0xd6, 0xe3, 0xc2, 0x5c, 0x1b, 0xba, + 0xa1, 0x34, 0x80, 0x47, 0x6c, 0xa1, 0xf6, 0x54, 0xb5, 0x92, 0x31, 0x9e, 0x40, 0xc6, 0x46, 0x30, + 0x40, 0xc1, 0x56, 0x41, 0xc8, 0xc5, 0xac, 0xa8, 0xcf, 0xa9, 0xfd, 0x0b, 0x3f, 0x71, 0x36, 0x56, + 0xf7, 0xa7, 0x2c, 0xf0, 0xa1, 0x4a, 0xbc, 0x1e, 0xd4, 0x9b, 0x70, 0x92, 0x52, 0x9e, 0x2e, 0xb6, + 0xe2, 0x54, 0x78, 0x2c, 0x8c, 0x21, 0x6a, 0x6c, 0x38, 0xd8, 0x39, 0x03, 0xde, 0x41, 0x21, 0x24, + 0x9a, 0x0c, 0xb3, 0xad, 0x7f, 0xd0, 0x97, 0xdf, 0xca, 0x8d, 0x0f, 0x61, 0xd4, 0xde, 0x97, 0xd2, + 0x7d, 0x6f, 0x6d, 0x8f, 0x3b, 0xd3, 0xf7, 0x39, 0xf6, 0xbb, 0xad, 0x25, 0x7c, 0x39, 0x60, 0x72, + 0xc7, 0x2c, 0x67, 0x03, 0x38, 0xf8, 0x15, 0x97, 0x50, 0x36, 0x77, 0x76, 0x26, 0xce, 0x8f, 0x0d, + 0x9d, 0xb6, 0xd5, 0xa9, 0x75, 0xf7, 0x52, 0xd2, 0x14, 0xf5, 0xa5, 0xe6, 0x5b, 0x05, 0x47, 0x00, + 0xa9, 0x6b, 0x48, 0x4a, 0x13, 0xe7, 0xca, 0x94, 0x40, 0x03, 0xc9, 0x20, 0x56, 0x9f, 0x6d, 0xad, + 0x92, 0x56, 0x9a, 0xdb, 0xad, 0x35, 0xa7, 0x27, 0x38, 0xcb, 0x92, 0xed, 0x56, 0x88, 0xb0, 0x9f, + 0x5b, 0x24, 0x96, 0xd4, 0xb6, 0x99, 0x4a, 0x14, 0x52, 0x48, 0x04, 0xa7, 0x29, 0x38, 0xc8, 0x07, + 0x1f, 0x70, 0xa0, 0x86, 0x7e, 0x90, 0x4b, 0x24, 0xab, 0xaf, 0x4f, 0xea, 0x9d, 0x1d, 0xc6, 0x52, + 0xd5, 0x9a, 0xef, 0x1a, 0x6c, 0x80, 0xe1, 0x21, 0x4a, 0x42, 0x82, 0xe3, 0x80, 0x8c, 0x03, 0x95, + 0x73, 0x7d, 0x07, 0xce, 0x06, 0x02, 0xbc, 0xe7, 0x00, 0xe7, 0x6d, 0x6c, 0x2e, 0xaa, 0xb0, 0x59, + 0xb5, 0x4e, 0x9d, 0x9b, 0xa7, 0xb5, 0x0d, 0xb9, 0x9b, 0x8d, 0xae, 0x73, 0x5d, 0xa9, 0x11, 0xdd, + 0x1e, 0xd5, 0x8f, 0x90, 0x41, 0x1e, 0x52, 0xa0, 0x40, 0x21, 0x40, 0x82, 0x92, 0x01, 0x04, 0x10, + 0x0d, 0x40, 0x10, 0x3a, 0x30, 0xda, 0x78, 0xd3, 0xa3, 0xc8, 0x7a, 0xe9, 0xab, 0x66, 0x34, 0xd3, + 0xa9, 0x5a, 0xe3, 0xbd, 0x35, 0x90, 0xdb, 0xc0, 0x1c, 0x94, 0x28, 0xa1, 0x94, 0xa8, 0x24, 0xfc, + 0x1e, 0x2a, 0x49, 0xc1, 0xf0, 0x41, 0xf3, 0x41, 0x2f, 0xec, 0x4f, 0xec, 0x43, 0x41, 0xfe, 0xed, + 0xdb, 0xbf, 0x96, 0x6e, 0xbd, 0xad, 0x77, 0x7d, 0xfc, 0x97, 0xd0, 0xf7, 0xed, 0x4d, 0xe9, 0x7d, + 0x5f, 0xd5, 0x16, 0xd9, 0x13, 0xbd, 0x3f, 0x73, 0x87, 0x77, 0xb4, 0xd2, 0x97, 0xc3, 0x96, 0x0f, + 0x1c, 0xf1, 0xc6, 0x70, 0x71, 0x9f, 0x83, 0x5e, 0x9c, 0x08, 0x91, 0x60, 0x41, 0x8f, 0x06, 0x0c, + 0x66, 0x62, 0xc4, 0x8c, 0xd2, 0x59, 0x61, 0x86, 0x5b, 0x08, 0x6d, 0xa4, 0x24, 0x61, 0x28, 0x4a, + 0x47, 0x84, 0xa4, 0x00, 0x00, 0x03, 0xc0, 0x02, 0xbf, 0x16, 0xac, 0xb2, 0x45, 0xd4, 0xba, 0x56, + 0xed, 0xa7, 0x27, 0x38, 0xf3, 0x71, 0x2e, 0xb0, 0x5e, 0x84, 0xfa, 0xd9, 0x20, 0x38, 0x94, 0x3a, + 0x82, 0x85, 0x14, 0x92, 0x08, 0x0a, 0xc2, 0x8e, 0x32, 0x08, 0xcf, 0xdc, 0x68, 0x33, 0x9e, 0x7f, + 0x55, 0x5b, 0xe3, 0x26, 0x74, 0x89, 0x0c, 0xea, 0xe6, 0x61, 0xb4, 0xeb, 0xaa, 0x5a, 0x23, 0xb3, + 0x6a, 0x8a, 0x5b, 0x64, 0x13, 0x90, 0x84, 0x95, 0xb6, 0xa5, 0x14, 0x8f, 0x81, 0xc9, 0x4a, 0x38, + 0x1e, 0x49, 0x3e, 0x6a, 0x46, 0xda, 0x2e, 0xb3, 0x6f, 0xb6, 0xde, 0x16, 0xfd, 0xcb, 0xb5, 0x7d, + 0x79, 0x18, 0x67, 0xfe, 0xf2, 0xb7, 0x36, 0x86, 0x65, 0xa7, 0xed, 0x9f, 0x73, 0x5e, 0xd6, 0x9c, + 0xf2, 0x5b, 0x48, 0xe3, 0xdb, 0xe2, 0x90, 0x49, 0xe6, 0x6b, 0x92, 0xdc, 0x1e, 0x90, 0xf7, 0x4b, + 0x4d, 0x41, 0x99, 0x72, 0xb4, 0x2a, 0xd9, 0xa9, 0xe2, 0x30, 0xea, 0xf8, 0x35, 0x01, 0xc5, 0xa6, + 0x5a, 0x99, 0x48, 0x52, 0x83, 0x85, 0x95, 0xa4, 0x02, 0xac, 0x24, 0x0e, 0xda, 0x16, 0xb5, 0x72, + 0x50, 0x09, 0x0a, 0xf9, 0xa8, 0x02, 0x7c, 0x49, 0x50, 0x27, 0x48, 0x83, 0x3a, 0x33, 0xd1, 0x65, + 0xc6, 0x75, 0x4c, 0xbe, 0xc3, 0xcd, 0x94, 0x38, 0xd2, 0xd2, 0x70, 0xa4, 0x29, 0x27, 0xca, 0x54, + 0x08, 0x20, 0x83, 0xe4, 0x11, 0x41, 0xa0, 0xb7, 0xbd, 0xe1, 0xe9, 0x2e, 0xf9, 0x74, 0x7a, 0xe9, + 0x7b, 0x3a, 0x66, 0xe7, 0x3d, 0xfe, 0x3d, 0xd9, 0x53, 0x34, 0xa3, 0xcf, 0x3a, 0xe7, 0x14, 0x84, + 0x8e, 0x4b, 0x54, 0x72, 0x4e, 0x12, 0x00, 0x19, 0x3f, 0x00, 0x0a, 0xa5, 0xbb, 0xe3, 0x03, 0x6e, + 0xa0, 0xeb, 0xd7, 0xce, 0xd6, 0xdf, 0x1e, 0xba, 0xe9, 0xc9, 0x2d, 0x07, 0xdb, 0x4b, 0xb1, 0xdd, + 0x6d, 0x50, 0xd6, 0x54, 0xa0, 0xa8, 0xe0, 0xba, 0x02, 0x9c, 0x4a, 0x70, 0x08, 0x51, 0x19, 0xc2, + 0x80, 0x25, 0x45, 0x25, 0x47, 0x85, 0xa5, 0x07, 0x75, 0xd3, 0xec, 0xb9, 0x50, 0xb7, 0xd7, 0x42, + 0xbd, 0x0e, 0x4b, 0xd1, 0x9d, 0x56, 0xa0, 0x84, 0xca, 0x96, 0xd3, 0x85, 0x0a, 0x28, 0x71, 0xe4, + 0x21, 0x68, 0x24, 0x7f, 0xa2, 0xa4, 0x29, 0x49, 0x23, 0xe0, 0x85, 0x10, 0x7c, 0x1a, 0xd5, 0xea, + 0xcd, 0xae, 0x8e, 0xf6, 0xa3, 0x52, 0x6b, 0xad, 0xcb, 0xb5, 0x6a, 0x88, 0xc8, 0xf4, 0x76, 0x0d, + 0x39, 0x72, 0x62, 0x64, 0xa9, 0xce, 0xa0, 0x94, 0xb8, 0xeb, 0x4b, 0x4b, 0x89, 0x8e, 0xd8, 0xf1, + 0xc9, 0x6a, 0xc0, 0xcf, 0xdc, 0x84, 0x9e, 0x47, 0xc9, 0x42, 0x57, 0xa4, 0xb4, 0x0a, 0x52, 0x94, + 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, + 0x52, 0x94, 0x0a, 0x52, 0x94, 0x1c, 0x36, 0xf8, 0xed, 0x9d, 0x9b, 0x76, 0x34, 0x13, 0xfa, 0x5a, + 0xf0, 0xfb, 0xd1, 0x54, 0x1d, 0x12, 0x61, 0x4b, 0x6b, 0xca, 0xa3, 0x48, 0x4a, 0x54, 0x94, 0xb8, + 0x53, 0x90, 0x16, 0x9c, 0x2d, 0x40, 0xa4, 0xfc, 0x85, 0x1c, 0x14, 0xab, 0x0a, 0x15, 0xff, 0x00, + 0x4a, 0xf4, 0x47, 0x66, 0x83, 0xa8, 0xa1, 0x4c, 0xd4, 0x3a, 0xe9, 0xeb, 0xcd, 0xad, 0x97, 0x79, + 0xc8, 0x80, 0xd5, 0xb3, 0xd2, 0xaa, 0x40, 0x1f, 0x08, 0x2e, 0x87, 0x94, 0x52, 0x92, 0x71, 0x9c, + 0x0c, 0x91, 0x90, 0x0a, 0x49, 0x0a, 0x16, 0xe6, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x1c, + 0x9c, 0xfd, 0xb2, 0xdb, 0x69, 0xf3, 0xa4, 0x4e, 0x9d, 0xb7, 0xba, 0x4a, 0x54, 0xb9, 0x2e, 0xa9, + 0xe7, 0xdf, 0x7a, 0xcd, 0x1d, 0x6e, 0x3a, 0xb5, 0x1c, 0xa9, 0x6a, 0x51, 0x46, 0x54, 0xa2, 0x49, + 0x24, 0x9f, 0x24, 0x9a, 0xeb, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, + 0x05, 0x29, 0x4a, 0x05, 0x73, 0xfa, 0x93, 0x44, 0x68, 0xbd, 0x4b, 0x39, 0x13, 0xb5, 0x1e, 0x90, + 0xd3, 0xf7, 0x99, 0x6d, 0xb4, 0x19, 0x43, 0xf3, 0xed, 0xac, 0xc8, 0x71, 0x28, 0x04, 0x90, 0x80, + 0xa5, 0xa4, 0x90, 0x9c, 0xa9, 0x47, 0x1f, 0x19, 0x27, 0xf1, 0xae, 0x82, 0x94, 0x1c, 0x67, 0xe6, + 0x9f, 0x6b, 0x3f, 0xab, 0x4d, 0x19, 0xfd, 0x85, 0x1b, 0xfb, 0x94, 0xfc, 0xd3, 0xed, 0x67, 0xf5, + 0x69, 0xa3, 0x3f, 0xb0, 0xa3, 0x7f, 0x72, 0xbb, 0x3a, 0x50, 0x7c, 0x60, 0x44, 0x8b, 0x02, 0x0c, + 0x78, 0x30, 0x63, 0x33, 0x16, 0x24, 0x66, 0x92, 0xcb, 0x0c, 0x32, 0xd8, 0x43, 0x6d, 0x21, 0x23, + 0x09, 0x42, 0x52, 0x3c, 0x25, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x15, 0xf6, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0xf1, 0x9f, 0x2e, 0x2c, 0x08, 0x32, 0x27, + 0x4e, 0x92, 0xcc, 0x58, 0x91, 0x9a, 0x53, 0xcf, 0xbe, 0xf3, 0x81, 0x0d, 0xb4, 0x84, 0x8c, 0xa9, + 0x6a, 0x51, 0xf0, 0x94, 0x80, 0x09, 0x24, 0xf8, 0x00, 0x57, 0xda, 0xab, 0x6f, 0xd2, 0x29, 0x2e, + 0x54, 0x6d, 0x8a, 0xb7, 0xb3, 0x1e, 0x4b, 0xcc, 0xb5, 0x2b, 0x50, 0x47, 0x66, 0x42, 0x1b, 0x70, + 0xa5, 0x2f, 0x20, 0x32, 0xfa, 0xc2, 0x16, 0x07, 0xda, 0x4f, 0x34, 0x21, 0x58, 0x3e, 0x32, 0x94, + 0x9f, 0x90, 0x28, 0x25, 0xff, 0x00, 0xce, 0xc6, 0xd6, 0x7f, 0x59, 0x7a, 0x33, 0xfb, 0x76, 0x37, + 0xf7, 0xe9, 0xf9, 0xd8, 0xda, 0xcf, 0xeb, 0x2f, 0x46, 0x7f, 0x6e, 0xc6, 0xfe, 0xfd, 0x64, 0xd5, + 0x28, 0x36, 0x4a, 0x04, 0xb8, 0xb3, 0xe0, 0xc7, 0x9d, 0x06, 0x4b, 0x32, 0xa2, 0x49, 0x69, 0x2f, + 0x30, 0xfb, 0x2e, 0x05, 0xb6, 0xea, 0x14, 0x32, 0x95, 0xa5, 0x43, 0xc2, 0x92, 0x41, 0x04, 0x11, + 0xe0, 0x83, 0x5f, 0x6a, 0xcb, 0x4e, 0x9f, 0xf7, 0x83, 0x52, 0x6d, 0x5e, 0xaf, 0x81, 0x26, 0x35, + 0xca, 0x6a, 0xf4, 0xe2, 0xe4, 0x83, 0x74, 0xb5, 0x82, 0x5c, 0x69, 0xe6, 0x94, 0x52, 0x1c, 0x5a, + 0x1b, 0x2a, 0x09, 0x0f, 0x04, 0xa4, 0x71, 0x5e, 0x41, 0xca, 0x40, 0x24, 0xa4, 0xa9, 0x27, 0x52, + 0xe8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x28, 0x3e, + 0xfd, 0x75, 0x3d, 0xba, 0x90, 0xb7, 0x67, 0x50, 0xd9, 0x74, 0xb5, 0xd9, 0x9b, 0x05, 0xae, 0xd1, + 0x39, 0xeb, 0x6b, 0x6c, 0x37, 0x11, 0x89, 0x0a, 0x74, 0xb2, 0xe2, 0x90, 0xa7, 0x96, 0xb7, 0x5b, + 0x51, 0xe4, 0xa2, 0x09, 0xc0, 0xc0, 0x48, 0xe2, 0x3c, 0x90, 0x54, 0xa9, 0x7f, 0xa2, 0xfd, 0xfb, + 0xbe, 0xee, 0x54, 0x89, 0xfa, 0x3b, 0x58, 0xb7, 0xea, 0xef, 0x90, 0x63, 0x2e, 0x73, 0x57, 0x36, + 0x9a, 0x43, 0x69, 0x7d, 0x80, 0xe2, 0x12, 0x50, 0xe2, 0x12, 0x00, 0x4a, 0xd2, 0xa7, 0x13, 0x82, + 0x91, 0x85, 0x27, 0xe4, 0x02, 0x9c, 0xae, 0xb0, 0x75, 0x8b, 0xa4, 0x1c, 0xd2, 0x1d, 0x40, 0x6a, + 0x14, 0x04, 0x3c, 0x22, 0x5e, 0x1d, 0xfa, 0xe2, 0x2a, 0xdd, 0x71, 0x0a, 0x53, 0x81, 0xf2, 0x54, + 0xe1, 0x1c, 0x7e, 0xca, 0x43, 0xc1, 0xe4, 0x80, 0x40, 0x38, 0x48, 0xf9, 0xc8, 0x51, 0x74, 0x6d, + 0x7f, 0x6f, 0x4f, 0x75, 0x19, 0xa5, 0x9d, 0x93, 0x71, 0x7a, 0x14, 0x49, 0xce, 0xbb, 0x6f, 0x78, + 0x36, 0x57, 0xc5, 0xf2, 0xf3, 0x4a, 0x43, 0x4d, 0xac, 0x27, 0xed, 0x24, 0xbc, 0x59, 0xf9, 0xf0, + 0x08, 0x4a, 0x8e, 0x38, 0xe4, 0x06, 0x9c, 0x55, 0x66, 0xfa, 0x47, 0x7f, 0x62, 0x16, 0x6f, 0xde, + 0x46, 0x3f, 0x96, 0x93, 0x56, 0x66, 0xb9, 0x3d, 0xe3, 0xd2, 0x0d, 0xeb, 0xdd, 0xae, 0xd4, 0x5a, + 0x45, 0x68, 0x65, 0x4e, 0xdc, 0x60, 0xad, 0x11, 0x8b, 0xce, 0x2d, 0x0d, 0xa2, 0x42, 0x7d, 0xec, + 0x2d, 0x45, 0x1e, 0xee, 0x29, 0x75, 0x28, 0x51, 0xc0, 0x39, 0x03, 0x04, 0x11, 0xe0, 0x86, 0x49, + 0xd5, 0xb9, 0x46, 0xc3, 0xe8, 0x8d, 0xdd, 0xe9, 0xfe, 0xd5, 0xad, 0x76, 0x9a, 0xde, 0xcd, 0x97, + 0x55, 0x32, 0xd2, 0x84, 0xfb, 0x77, 0xad, 0x71, 0xc6, 0x64, 0xc8, 0x40, 0x01, 0xd6, 0x0f, 0x75, + 0xd7, 0x0b, 0x2a, 0xc8, 0xe6, 0xd1, 0x2a, 0x19, 0x4b, 0x89, 0xe7, 0x8e, 0x61, 0x48, 0xab, 0x3a, + 0xaa, 0xc1, 0x79, 0xd2, 0xda, 0x8a, 0x6e, 0x9e, 0xd4, 0x36, 0xe7, 0xad, 0xd7, 0x48, 0x2e, 0xf6, + 0xa4, 0x47, 0x74, 0x7b, 0x90, 0x7e, 0x41, 0x04, 0x78, 0x52, 0x48, 0x20, 0x85, 0x02, 0x42, 0x81, + 0x04, 0x12, 0x08, 0x35, 0x26, 0xf4, 0xad, 0xbc, 0x12, 0xb6, 0x9b, 0x5e, 0x83, 0x23, 0xb2, 0xad, + 0x39, 0x79, 0x75, 0x96, 0x2f, 0x29, 0x71, 0x04, 0xa9, 0xa4, 0x25, 0x44, 0x26, 0x42, 0x0a, 0x52, + 0x55, 0xc9, 0xbe, 0x6b, 0x3c, 0x40, 0x21, 0x60, 0xa8, 0x63, 0x3c, 0x54, 0x90, 0xf6, 0x74, 0xaf, + 0x49, 0xbb, 0xc7, 0x73, 0xd4, 0x50, 0xa0, 0xde, 0xac, 0x4c, 0xd8, 0x6d, 0xce, 0xbb, 0x89, 0x37, + 0x07, 0x67, 0x46, 0x7d, 0x31, 0xd1, 0xf2, 0x54, 0x1b, 0x6d, 0xd2, 0xa5, 0xab, 0xc6, 0x02, 0x46, + 0x01, 0x24, 0x64, 0xa4, 0x65, 0x43, 0x47, 0xeb, 0x99, 0xdb, 0xdd, 0x7f, 0xa3, 0x77, 0x02, 0xd6, + 0xab, 0x8e, 0x8e, 0xd4, 0x30, 0xae, 0xec, 0xb7, 0x8e, 0xea, 0x5a, 0x51, 0x4b, 0xac, 0xe5, 0x4a, + 0x48, 0xee, 0x34, 0xa0, 0x16, 0xde, 0x4a, 0x15, 0x8e, 0x49, 0x1c, 0x80, 0xc8, 0xc8, 0xf3, 0x5d, + 0x35, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, + 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, + 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x05, 0x26, + 0xfa, 0x4a, 0x34, 0xcf, 0x6e, 0xf9, 0xa4, 0xb5, 0x8b, 0x2c, 0xcd, 0x5f, 0xa8, 0x8c, 0xf5, 0xb2, + 0x4b, 0x9c, 0x73, 0x1d, 0xae, 0xda, 0xbb, 0xac, 0x8c, 0x81, 0xe1, 0x6a, 0xee, 0xbf, 0xe0, 0x9f, + 0x21, 0xbf, 0x03, 0xda, 0xa2, 0x6a, 0x6d, 0x8a, 0xe9, 0x3e, 0xc7, 0x7c, 0x81, 0x7b, 0xb5, 0xbf, + 0xe9, 0xe7, 0xdb, 0xe4, 0xb7, 0x2a, 0x2b, 0xbc, 0x12, 0xae, 0xdb, 0xad, 0xa8, 0x29, 0x0a, 0xc2, + 0x81, 0x07, 0x0a, 0x00, 0xe0, 0x82, 0x3f, 0x1a, 0xd1, 0x8e, 0xb9, 0xb4, 0xcf, 0xe5, 0x17, 0x4f, + 0x37, 0x59, 0x0d, 0xb3, 0x35, 0xe9, 0x36, 0x49, 0x2c, 0x5c, 0xd8, 0x6e, 0x32, 0x79, 0x67, 0x8a, + 0xbb, 0x4e, 0x15, 0x8c, 0x13, 0xc1, 0x2d, 0x3a, 0xea, 0xc9, 0x18, 0xc7, 0x00, 0x49, 0xc0, 0x20, + 0xe6, 0xd5, 0x06, 0xc5, 0xd8, 0xae, 0x90, 0x2f, 0x96, 0x38, 0x17, 0xbb, 0x5b, 0xfe, 0xa2, 0x05, + 0xc2, 0x33, 0x72, 0xa2, 0xbb, 0xc1, 0x49, 0xee, 0x34, 0xe2, 0x42, 0x90, 0xac, 0x28, 0x02, 0x32, + 0x92, 0x0e, 0x08, 0x07, 0xf1, 0xaf, 0xdb, 0x50, 0x67, 0x43, 0xba, 0xc6, 0x7e, 0xaf, 0xd8, 0x48, + 0x2d, 0x5c, 0x51, 0xfa, 0xeb, 0x0c, 0x95, 0x59, 0x92, 0xee, 0x53, 0xfa, 0xd6, 0x9a, 0x6d, 0xb5, + 0x34, 0x70, 0x94, 0x80, 0x9e, 0x2d, 0xb8, 0x86, 0xfe, 0xf2, 0x7b, 0x7c, 0x89, 0x25, 0x46, 0xa7, + 0x3a, 0x0a, 0xb3, 0xd6, 0xb6, 0xc1, 0x4f, 0xd6, 0x9c, 0xb7, 0x13, 0x46, 0x47, 0xef, 0xdf, 0x22, + 0x46, 0x0d, 0xdc, 0x6d, 0xad, 0x34, 0x9e, 0x73, 0x9a, 0x46, 0x70, 0xeb, 0x78, 0x19, 0x5b, 0xc9, + 0x49, 0xe3, 0xc4, 0xe4, 0xad, 0x09, 0x48, 0x4e, 0x0a, 0x02, 0x57, 0x43, 0x6b, 0x66, 0x2a, 0x39, + 0xdc, 0x1d, 0x8f, 0xda, 0xdd, 0x6f, 0x06, 0x63, 0x37, 0x7d, 0x1f, 0x6c, 0x8f, 0x2e, 0x5b, 0xab, + 0x7d, 0x77, 0x18, 0x0c, 0x22, 0x34, 0xbe, 0xf2, 0x82, 0x81, 0x74, 0xba, 0x80, 0x0a, 0xd5, 0x95, + 0x95, 0x61, 0x7c, 0x92, 0x55, 0x82, 0xa4, 0x9c, 0x50, 0x65, 0xd5, 0x92, 0xed, 0x75, 0xb1, 0xdd, + 0x19, 0xba, 0x59, 0x2e, 0x73, 0x6d, 0x93, 0xd8, 0xe5, 0xda, 0x95, 0x0d, 0xf5, 0x32, 0xeb, 0x7c, + 0x92, 0x52, 0x78, 0xad, 0x24, 0x11, 0x94, 0x92, 0x0e, 0x0f, 0xc1, 0x22, 0xa5, 0x9d, 0x13, 0xd4, + 0xee, 0xf2, 0xe9, 0x7f, 0x48, 0xcf, 0xe5, 0x47, 0xd7, 0x70, 0xa3, 0x73, 0xff, 0x00, 0xb3, 0x5d, + 0xd8, 0x4c, 0x8e, 0xef, 0x2e, 0x47, 0xde, 0xf7, 0x87, 0xd5, 0x82, 0xac, 0x8f, 0xd6, 0x78, 0xc0, + 0x1f, 0x64, 0x71, 0xa9, 0x67, 0x59, 0x74, 0x43, 0x75, 0x6f, 0xb8, 0xf6, 0x8e, 0xd7, 0x10, 0xa5, + 0x72, 0x92, 0x7b, 0x71, 0xae, 0xd1, 0x54, 0xc7, 0x69, 0x83, 0xc8, 0x8c, 0xbc, 0xdf, 0x3e, 0x6b, + 0x1e, 0xd1, 0xfe, 0x4d, 0x00, 0xe4, 0x9f, 0x6e, 0x02, 0x4d, 0x73, 0xdd, 0x9d, 0xb0, 0xd6, 0x5b, + 0x5f, 0x7c, 0x6e, 0xd7, 0xab, 0xad, 0x7e, 0x9b, 0xd4, 0x73, 0x54, 0x39, 0x4d, 0x2c, 0x39, 0x1e, + 0x5a, 0x10, 0xae, 0x25, 0x4d, 0xac, 0x7f, 0xf8, 0x3c, 0x54, 0x12, 0xb0, 0x14, 0x92, 0xa4, 0xa7, + 0x90, 0xa0, 0xbf, 0x3b, 0x1d, 0xd4, 0x9e, 0x82, 0xdc, 0x96, 0x58, 0x83, 0x32, 0x4b, 0x3a, 0x67, + 0x51, 0xba, 0xe9, 0x6d, 0x36, 0xb9, 0xb2, 0x32, 0x97, 0x49, 0x5a, 0x52, 0x8e, 0xcb, 0xc5, 0x29, + 0x4b, 0x8a, 0x57, 0x34, 0x80, 0x8f, 0x0b, 0xc8, 0x56, 0x12, 0x40, 0xe4, 0x66, 0xca, 0xc6, 0x7a, + 0xbc, 0xdf, 0x47, 0xee, 0xeb, 0xcf, 0xbf, 0x5a, 0xe5, 0x6d, 0x8d, 0xed, 0x73, 0x66, 0x49, 0xb4, + 0xc6, 0x54, 0xcb, 0x6c, 0xb7, 0x16, 0x95, 0x25, 0x10, 0xd2, 0xa6, 0xdb, 0xf4, 0xe7, 0xe1, 0x43, + 0x82, 0x96, 0x0a, 0x72, 0x55, 0xed, 0x51, 0x4f, 0xb4, 0x21, 0x20, 0x85, 0xb2, 0xa5, 0x29, 0x40, + 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, + 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x41, 0xf1, 0x9f, 0x12, 0x2c, 0xf8, 0x32, 0x20, 0xce, 0x8c, + 0xcc, 0xa8, 0x92, 0x5a, 0x53, 0x2f, 0xb0, 0xf3, 0x61, 0x6d, 0xba, 0x85, 0x0c, 0x29, 0x0a, 0x49, + 0xf0, 0xa4, 0x90, 0x48, 0x20, 0xf8, 0x20, 0xd6, 0x43, 0xeb, 0x9d, 0x33, 0x75, 0xd1, 0xba, 0xbe, + 0xeb, 0xa5, 0xaf, 0x6c, 0xf6, 0xa7, 0xdb, 0x24, 0xae, 0x3b, 0xb8, 0x4a, 0x82, 0x57, 0x83, 0xe1, + 0xc4, 0x72, 0x00, 0x94, 0x29, 0x38, 0x52, 0x49, 0x03, 0x29, 0x50, 0x3f, 0x7d, 0x6b, 0xf5, 0x53, + 0x3f, 0xa4, 0x4b, 0x6d, 0x3f, 0xf8, 0x76, 0xe9, 0x5a, 0x62, 0x7f, 0xab, 0x6f, 0xbd, 0x76, 0x9b, + 0xff, 0x00, 0xd0, 0x7d, 0x5c, 0x51, 0xff, 0x00, 0x9b, 0x4a, 0x5a, 0xd5, 0xff, 0x00, 0xd0, 0x48, + 0x14, 0x10, 0x9f, 0x4b, 0x9b, 0xd2, 0xe6, 0xce, 0x6a, 0xa9, 0xf2, 0x25, 0x5b, 0x9e, 0xb9, 0xd9, + 0x6e, 0xcd, 0x34, 0xd4, 0xe8, 0xec, 0xb8, 0x84, 0x38, 0x82, 0x85, 0xe5, 0x2f, 0x24, 0xa9, 0x27, + 0x92, 0x90, 0x85, 0x3a, 0x02, 0x39, 0x20, 0x28, 0xaf, 0xca, 0x86, 0x01, 0x1a, 0x57, 0x62, 0xba, + 0x40, 0xbe, 0x58, 0xe0, 0x5e, 0xed, 0x6f, 0xfa, 0x88, 0x17, 0x08, 0xcd, 0xca, 0x8a, 0xef, 0x05, + 0x27, 0xb8, 0xd3, 0x89, 0x0a, 0x42, 0xb0, 0xa0, 0x08, 0xca, 0x48, 0x38, 0x20, 0x1f, 0xc6, 0xb1, + 0xee, 0x04, 0x49, 0x53, 0xe7, 0x47, 0x83, 0x06, 0x33, 0xd2, 0xa5, 0xc9, 0x75, 0x2c, 0xb0, 0xc3, + 0x2d, 0x95, 0xb8, 0xea, 0xd4, 0x70, 0x94, 0x25, 0x23, 0xca, 0x94, 0x49, 0x00, 0x01, 0xe4, 0x93, + 0x5a, 0xe3, 0xb6, 0xb6, 0x49, 0x5a, 0x6b, 0x6e, 0xb4, 0xd6, 0x9c, 0x9c, 0xe3, 0x2e, 0x4b, 0xb5, + 0x5a, 0x22, 0xc2, 0x7d, 0x6c, 0x92, 0x5b, 0x52, 0xda, 0x65, 0x28, 0x51, 0x49, 0x20, 0x12, 0x9c, + 0xa4, 0xe3, 0x20, 0x1c, 0x7d, 0xc2, 0x82, 0x19, 0xea, 0x07, 0xaa, 0x3b, 0x36, 0xd7, 0x6b, 0x5f, + 0xc9, 0x18, 0x3a, 0x69, 0xed, 0x43, 0x71, 0x8e, 0xd2, 0x57, 0x70, 0x26, 0x5f, 0xa4, 0x6e, 0x31, + 0x5a, 0x52, 0xb6, 0xd0, 0x09, 0x6d, 0x7d, 0xc5, 0x14, 0x28, 0x28, 0xe0, 0x00, 0x01, 0x48, 0xc9, + 0x3c, 0x82, 0x63, 0x9f, 0xd3, 0x9f, 0xfd, 0xd7, 0x7f, 0x1f, 0xff, 0x00, 0xdb, 0xd7, 0x27, 0xd6, + 0x96, 0xd2, 0x6e, 0x1c, 0xdd, 0xf0, 0xb8, 0xea, 0x9b, 0x2e, 0x96, 0xb9, 0xdf, 0x2d, 0x77, 0xa6, + 0x98, 0x5b, 0x0e, 0x5a, 0xe2, 0xb9, 0x25, 0x4d, 0x16, 0x98, 0x69, 0xa5, 0xa1, 0xd4, 0xa1, 0x24, + 0xa1, 0x59, 0x46, 0x46, 0x7c, 0x28, 0x28, 0x60, 0x92, 0x14, 0x13, 0x09, 0x7e, 0x69, 0xf7, 0x4f, + 0xfa, 0xb4, 0xd6, 0x7f, 0xd8, 0x52, 0x7f, 0xb9, 0x41, 0x66, 0x7f, 0x4e, 0x7f, 0xf7, 0x5d, 0xfc, + 0x7f, 0xff, 0x00, 0x6f, 0x51, 0x66, 0xf6, 0x75, 0x43, 0xad, 0xf7, 0x1a, 0x0c, 0xbb, 0x14, 0x5b, + 0x7d, 0xb2, 0xc7, 0xa7, 0x25, 0x34, 0x5a, 0x7a, 0x01, 0x61, 0xb9, 0x8e, 0x3c, 0x08, 0x47, 0x97, + 0x1d, 0x75, 0x1f, 0x69, 0x2b, 0x49, 0x52, 0x14, 0xda, 0x5b, 0x29, 0x24, 0x79, 0x25, 0x21, 0x42, + 0x39, 0xfc, 0xd3, 0xee, 0x9f, 0xf5, 0x69, 0xac, 0xff, 0x00, 0xb0, 0xa4, 0xff, 0x00, 0x72, 0xbf, + 0x6d, 0x93, 0x65, 0x37, 0x72, 0xf1, 0x74, 0x66, 0xdd, 0x13, 0x6e, 0x35, 0x33, 0x4f, 0x3d, 0xcb, + 0x8a, 0xa6, 0x5b, 0xdc, 0x8a, 0xd0, 0xc2, 0x4a, 0x8f, 0x27, 0x5e, 0x09, 0x42, 0x7c, 0x03, 0x8c, + 0xa8, 0x64, 0xe0, 0x0c, 0x92, 0x05, 0x04, 0x7f, 0x56, 0xb3, 0xe8, 0xdf, 0xb0, 0x5e, 0x57, 0xb8, + 0xb7, 0xed, 0x52, 0x2d, 0xcf, 0x7d, 0x4a, 0xd5, 0xa1, 0xcb, 0x7a, 0xa6, 0x11, 0x86, 0xcc, 0x85, + 0xbc, 0xc3, 0x81, 0xb1, 0x9f, 0xb4, 0xae, 0x08, 0x24, 0xe3, 0x3c, 0x41, 0x4e, 0x71, 0xc9, 0x39, + 0xfd, 0xbb, 0x5f, 0xd1, 0x5d, 0xe6, 0x5b, 0xcd, 0x4c, 0xdc, 0x6d, 0x42, 0xcd, 0xb6, 0x22, 0x9a, + 0x42, 0xcc, 0x0b, 0x4a, 0xbb, 0xb2, 0x72, 0xa4, 0x2b, 0x28, 0x5b, 0xab, 0x4f, 0x6d, 0xb5, 0x21, + 0x5c, 0x33, 0xc4, 0x3a, 0x15, 0xee, 0x00, 0x8f, 0x0a, 0x37, 0x33, 0x4a, 0xd8, 0x2c, 0xda, 0x5b, + 0x4e, 0xc2, 0xd3, 0xda, 0x7a, 0xdc, 0xcd, 0xba, 0xd7, 0x05, 0xae, 0xd4, 0x78, 0xed, 0x0f, 0x6a, + 0x07, 0xc9, 0x24, 0x9f, 0x2a, 0x51, 0x24, 0x92, 0xa2, 0x49, 0x51, 0x24, 0x92, 0x49, 0x26, 0x83, + 0xd3, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, + 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x44, 0xd7, 0xbe, 0xa4, 0x76, 0x4a, 0xcf, 0x74, 0x7a, 0xdd, 0x2f, 0x5f, 0x42, + 0x75, 0xe6, 0x78, 0xf2, 0x54, 0x38, 0xcf, 0xca, 0x68, 0xe5, 0x21, 0x43, 0x8b, 0xac, 0xb6, 0xa4, + 0x2b, 0xc1, 0x19, 0xc2, 0x8e, 0x0e, 0x41, 0xc1, 0x04, 0x54, 0x81, 0xa3, 0x75, 0x5e, 0x9b, 0xd6, + 0x56, 0x36, 0xef, 0x7a, 0x5a, 0xf5, 0x0a, 0xef, 0x01, 0xcc, 0x0e, 0xec, 0x67, 0x02, 0xb8, 0x28, + 0xa5, 0x2a, 0xe0, 0xb1, 0xf2, 0x85, 0x84, 0xa9, 0x24, 0xa1, 0x40, 0x28, 0x64, 0x64, 0x0a, 0x0f, + 0x66, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0xbe, 0x33, 0xe2, 0x45, 0x9f, 0x06, 0x44, 0x19, 0xd1, + 0x99, 0x95, 0x12, 0x4b, 0x4a, 0x65, 0xf6, 0x1e, 0x6c, 0x2d, 0xb7, 0x50, 0xa1, 0x85, 0x21, 0x49, + 0x3e, 0x14, 0x92, 0x09, 0x04, 0x1f, 0x04, 0x1a, 0xfb, 0x52, 0x83, 0x99, 0xb2, 0x6d, 0xee, 0x81, + 0xb1, 0xdd, 0x19, 0xba, 0x59, 0x34, 0x3e, 0x99, 0xb6, 0x4f, 0x63, 0x97, 0x6a, 0x54, 0x3b, 0x53, + 0x0c, 0xba, 0xdf, 0x24, 0x94, 0x9e, 0x2b, 0x4a, 0x41, 0x19, 0x49, 0x20, 0xe0, 0xfc, 0x12, 0x2b, + 0xa6, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0x58, 0x3e, 0x90, 0x0d, 0xce, + 0x95, 0xa6, 0x34, 0x54, 0x3d, 0x05, 0x68, 0x75, 0x94, 0xcb, 0xd4, 0x8d, 0x38, 0x67, 0xba, 0x89, + 0x45, 0x2f, 0xc7, 0x8a, 0x85, 0x23, 0xda, 0x10, 0x92, 0x0f, 0x17, 0x8f, 0x24, 0x72, 0x57, 0xb4, + 0xa5, 0x0e, 0xa7, 0x07, 0x24, 0xa6, 0xcf, 0xd6, 0x53, 0xf5, 0x15, 0xac, 0x60, 0x6b, 0xed, 0xea, + 0xd4, 0xda, 0xaa, 0xd6, 0x8e, 0x30, 0x25, 0xc9, 0x4b, 0x71, 0x55, 0x95, 0x7e, 0xb5, 0xa6, 0x5b, + 0x43, 0x28, 0x77, 0x0a, 0x4a, 0x4a, 0x79, 0xa5, 0xb0, 0xbe, 0x24, 0x65, 0x3c, 0xb0, 0x73, 0x8c, + 0xd0, 0x47, 0xf5, 0x20, 0x6c, 0x5e, 0xeb, 0xea, 0x4d, 0xa4, 0xd5, 0xe9, 0xbd, 0xd9, 0x17, 0xea, + 0x21, 0x3f, 0xc5, 0xbb, 0x95, 0xb5, 0xc5, 0x94, 0xb5, 0x35, 0xa0, 0x4f, 0x83, 0xf3, 0xc5, 0x69, + 0xc9, 0x29, 0x58, 0x04, 0xa4, 0x93, 0xe0, 0xa4, 0xa9, 0x2a, 0xe7, 0xf4, 0x4e, 0x90, 0xbc, 0xea, + 0xf7, 0xae, 0xe8, 0xb3, 0xa1, 0x92, 0x9b, 0x3d, 0xa2, 0x55, 0xe2, 0x6a, 0xdd, 0x73, 0x8a, 0x5b, + 0x8e, 0xc2, 0x39, 0x28, 0x8f, 0xbd, 0x4a, 0x24, 0xa5, 0x20, 0x00, 0x7c, 0xa8, 0x67, 0x09, 0x05, + 0x43, 0x9f, 0xa0, 0xd7, 0xfd, 0x0d, 0xa9, 0xad, 0x5a, 0xcb, 0x48, 0x5a, 0xb5, 0x4d, 0x91, 0xee, + 0xec, 0x0b, 0x9c, 0x64, 0x48, 0x6b, 0x2a, 0x49, 0x52, 0x32, 0x3c, 0xb6, 0xbe, 0x24, 0x80, 0xb4, + 0xab, 0x29, 0x50, 0x04, 0xe1, 0x49, 0x23, 0xee, 0xaf, 0x66, 0xaa, 0x6f, 0xd1, 0xb9, 0xa9, 0xae, + 0xb7, 0x0d, 0x21, 0xaa, 0x74, 0xb4, 0xb7, 0xbb, 0xb0, 0x2c, 0xf2, 0x63, 0xc8, 0x85, 0xc9, 0x4a, + 0x52, 0x9b, 0xf5, 0x01, 0xde, 0xe3, 0x63, 0x27, 0x01, 0x1c, 0x99, 0x0a, 0x00, 0x01, 0xee, 0x5b, + 0x84, 0xe7, 0x97, 0x8b, 0x65, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, + 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x45, 0x9a, 0xab, 0xa8, 0x6d, 0x9c, 0xd3, 0x1a, 0x8a, 0x6e, 0x9f, + 0xbd, 0x6b, 0x46, 0x59, 0xb8, 0xc1, 0x77, 0xb3, 0x25, 0xa6, 0xa1, 0x49, 0x7d, 0x2d, 0xac, 0x7c, + 0xa0, 0xad, 0xb6, 0xd4, 0x92, 0xa1, 0xf0, 0x40, 0x39, 0x04, 0x10, 0x70, 0x41, 0x03, 0xcc, 0xfd, + 0x28, 0xf6, 0x27, 0xfa, 0x73, 0xfc, 0x26, 0x6f, 0xf8, 0x34, 0x13, 0x35, 0x2a, 0x19, 0xfd, 0x28, + 0xf6, 0x27, 0xfa, 0x73, 0xfc, 0x26, 0x6f, 0xf8, 0x35, 0x2c, 0xd9, 0x2e, 0xd6, 0xab, 0xe5, 0xad, + 0x9b, 0xa5, 0x92, 0xe7, 0x0a, 0xe7, 0x01, 0xfe, 0x5d, 0xa9, 0x50, 0xdf, 0x4b, 0xcd, 0x39, 0xc5, + 0x45, 0x27, 0x8a, 0xd2, 0x48, 0x38, 0x50, 0x20, 0xe0, 0xfc, 0x82, 0x28, 0x3f, 0x6d, 0x29, 0x4a, + 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x63, 0x3d, 0x6c, 0xc5, 0x63, 0x3d, + 0x05, 0xb9, 0xe8, 0xbe, 0xd7, 0xb6, 0xcc, 0x6c, 0xf6, 0xb1, 0x9d, 0xad, 0x35, 0x25, 0xb2, 0xc5, + 0x2f, 0x53, 0x3b, 0x27, 0x4f, 0x87, 0xe6, 0xce, 0x8f, 0x19, 0xc1, 0x15, 0x31, 0xdb, 0x2e, 0x7a, + 0x75, 0x3a, 0x33, 0xc8, 0x99, 0x20, 0xab, 0xed, 0x27, 0x28, 0x6b, 0x29, 0xf1, 0xe6, 0xa9, 0xdf, + 0xad, 0xff, 0x00, 0x54, 0xdf, 0x27, 0xda, 0xfd, 0x6c, 0x29, 0xfe, 0x8e, 0x4b, 0x91, 0xfd, 0x54, + 0x27, 0x7b, 0x91, 0xdf, 0xe0, 0xa2, 0x9e, 0xe3, 0x6b, 0xc0, 0xe4, 0x85, 0x63, 0x29, 0x38, 0x19, + 0x04, 0x1a, 0xfc, 0x54, 0xa0, 0x9e, 0x7a, 0x23, 0xdc, 0xc7, 0x34, 0x1e, 0xec, 0xb3, 0x63, 0x90, + 0xc3, 0xd2, 0x2d, 0x7a, 0xa9, 0xd6, 0x2d, 0xae, 0xa1, 0xae, 0x1c, 0x9b, 0x90, 0x5c, 0xe2, 0xc3, + 0xc7, 0x23, 0x25, 0x29, 0x2e, 0x2d, 0x24, 0x05, 0x0f, 0x0e, 0x15, 0x7b, 0x8a, 0x52, 0x93, 0xa3, + 0xf5, 0x8e, 0x96, 0x2b, 0xa4, 0xfb, 0x1d, 0xf2, 0x05, 0xee, 0xd6, 0xff, 0x00, 0xa7, 0x9f, 0x6f, + 0x92, 0xdc, 0xa8, 0xae, 0xf0, 0x4a, 0xbb, 0x6e, 0xb6, 0xa0, 0xa4, 0x2b, 0x0a, 0x04, 0x1c, 0x28, + 0x03, 0x82, 0x08, 0xfc, 0x6b, 0x62, 0xe8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x71, 0x9b, 0x8f, 0xba, 0x7b, + 0x7d, 0xb7, 0x7d, 0x94, 0xeb, 0x1d, 0x51, 0x0a, 0xd8, 0xf3, 0xfc, 0x4b, 0x71, 0xb0, 0xb7, 0xa4, + 0x29, 0x2a, 0xe5, 0x85, 0xf6, 0x9b, 0x0a, 0x5f, 0x0c, 0xa1, 0x43, 0x9f, 0x1e, 0x39, 0x18, 0xce, + 0x70, 0x28, 0x3b, 0x3a, 0x57, 0x0d, 0xb6, 0xbb, 0xbb, 0xb7, 0x5b, 0x8f, 0x3a, 0x5c, 0x1d, 0x19, + 0xa9, 0x99, 0xb9, 0xcb, 0x86, 0xd0, 0x79, 0xe6, 0x0b, 0x0e, 0xb0, 0xe0, 0x41, 0x38, 0xe6, 0x12, + 0xea, 0x12, 0x54, 0x90, 0x70, 0x09, 0x4e, 0x40, 0x2a, 0x4e, 0x71, 0xc8, 0x67, 0xb9, 0xa0, 0x52, + 0x94, 0xa0, 0x55, 0x0d, 0xea, 0x3f, 0xaa, 0xeb, 0xae, 0xa7, 0xf5, 0x1a, 0x67, 0x6d, 0x5d, 0x9b, + 0x64, 0xb4, 0xb5, 0x27, 0xdf, 0x79, 0x69, 0xe5, 0x35, 0x2e, 0x6a, 0x13, 0x8e, 0x3d, 0xb0, 0x00, + 0x53, 0x08, 0x2a, 0x0a, 0x3f, 0x3c, 0xd4, 0x9e, 0x39, 0xe0, 0x0a, 0xd0, 0x7b, 0x9f, 0xa4, 0x17, + 0x75, 0x6f, 0x36, 0x26, 0x60, 0x6d, 0xa5, 0x86, 0x4b, 0xd0, 0x93, 0x75, 0x82, 0xa9, 0x77, 0x77, + 0x90, 0x9c, 0x29, 0xe8, 0xea, 0x5a, 0x9b, 0x43, 0x29, 0x58, 0x56, 0x42, 0x54, 0x5b, 0x77, 0xb8, + 0x30, 0x32, 0x38, 0x0c, 0x94, 0xa9, 0x69, 0x34, 0x82, 0x81, 0x4a, 0xb4, 0xdd, 0x2c, 0xf4, 0xbd, + 0xf9, 0x69, 0x6b, 0x67, 0x59, 0xee, 0x22, 0x66, 0xc2, 0xb1, 0xbd, 0xc1, 0xcb, 0x6d, 0xb9, 0xa5, + 0x76, 0x9d, 0x9c, 0x8e, 0x41, 0x5d, 0xc7, 0x0e, 0x32, 0x86, 0x54, 0x90, 0x40, 0x09, 0xc2, 0xd6, + 0x15, 0xc8, 0x29, 0x20, 0x24, 0xae, 0xdf, 0xfe, 0x69, 0xf6, 0xb3, 0xfa, 0xb4, 0xd1, 0x9f, 0xd8, + 0x51, 0xbf, 0xb9, 0x41, 0x93, 0x55, 0x74, 0xfe, 0x8c, 0xe9, 0x72, 0x97, 0x07, 0x5e, 0x41, 0x5c, + 0x97, 0x95, 0x11, 0x97, 0x60, 0x3c, 0xd3, 0x05, 0xc2, 0x5b, 0x42, 0xd6, 0x24, 0x05, 0xac, 0x27, + 0xe0, 0x29, 0x41, 0xb4, 0x02, 0x47, 0x92, 0x10, 0x9c, 0xfc, 0x0a, 0x9c, 0xb5, 0x27, 0x4f, 0x1b, + 0x2d, 0x7f, 0x9c, 0x89, 0x93, 0xb6, 0xfe, 0xd8, 0xcb, 0xa8, 0x68, 0x34, 0x13, 0x01, 0x6e, 0xc2, + 0x6f, 0x00, 0x93, 0x92, 0x86, 0x14, 0x84, 0x95, 0x79, 0x3e, 0xe2, 0x33, 0x8c, 0x0c, 0xe0, 0x0c, + 0x76, 0x7a, 0x03, 0x45, 0xe9, 0x7d, 0x05, 0xa7, 0x51, 0xa7, 0xf4, 0x8d, 0x9d, 0x9b, 0x55, 0xb9, + 0x2e, 0xa9, 0xe2, 0xd3, 0x6a, 0x52, 0xd4, 0xb5, 0xab, 0xe5, 0x6b, 0x5a, 0xc9, 0x52, 0xd5, 0xe0, + 0x0c, 0xa8, 0x92, 0x02, 0x52, 0x07, 0x80, 0x00, 0x0e, 0x82, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, + 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0xb1, 0x9e, 0xb6, 0x17, 0x56, 0x5e, 0xe2, 0xe9, 0xad, 0x2b, + 0x76, 0xd4, 0x73, 0x9b, 0x79, 0xc8, 0x96, 0xa8, 0x2f, 0x4d, 0x7d, 0x0c, 0x80, 0x5c, 0x52, 0x1a, + 0x41, 0x5a, 0x82, 0x41, 0x20, 0x15, 0x61, 0x27, 0x19, 0x20, 0x67, 0xef, 0x15, 0x8f, 0x54, 0x16, + 0x83, 0xa4, 0xde, 0x9e, 0xb4, 0x5e, 0xec, 0xed, 0xd5, 0xc3, 0x51, 0xea, 0x3b, 0x9e, 0xa0, 0x8b, + 0x2e, 0x35, 0xdd, 0xc8, 0x48, 0x44, 0x07, 0xd9, 0x43, 0x65, 0x09, 0x65, 0x95, 0x82, 0x42, 0xda, + 0x59, 0xe5, 0x97, 0x15, 0xf7, 0xe3, 0x00, 0x78, 0xaf, 0x67, 0xab, 0x2d, 0x81, 0xd1, 0x1b, 0x67, + 0xb2, 0x56, 0xfb, 0xae, 0x91, 0xb4, 0x5c, 0xe4, 0xdc, 0x58, 0xbb, 0xb6, 0xd4, 0xfb, 0xa4, 0x89, + 0x0e, 0x3c, 0xe7, 0xa7, 0x5a, 0x5e, 0xf2, 0xe2, 0x53, 0x86, 0x90, 0x9e, 0x65, 0x94, 0x05, 0x04, + 0x27, 0xcf, 0x11, 0x92, 0x54, 0x73, 0x23, 0x7d, 0x1c, 0x5f, 0xb1, 0x0b, 0xcf, 0xef, 0x23, 0xff, + 0x00, 0xcb, 0x46, 0xa9, 0x9b, 0x7b, 0xf4, 0x57, 0xe7, 0x13, 0x6a, 0x35, 0x06, 0x8e, 0x4c, 0x8f, + 0x4e, 0xf5, 0xc2, 0x30, 0xf4, 0xce, 0x15, 0xf1, 0x4a, 0x5f, 0x6d, 0x69, 0x75, 0xae, 0x67, 0x8a, + 0x8f, 0x0e, 0xe2, 0x11, 0xcb, 0x00, 0x9e, 0x39, 0xc7, 0x9c, 0x1a, 0x0c, 0x9a, 0xad, 0x65, 0xd8, + 0xed, 0x53, 0xf9, 0x69, 0xb4, 0x1a, 0x5b, 0x53, 0x2e, 0x77, 0xaf, 0x93, 0x32, 0xda, 0xd7, 0xac, + 0x91, 0xda, 0xed, 0xf3, 0x94, 0x81, 0xc2, 0x47, 0xb7, 0x00, 0x0c, 0x3a, 0x97, 0x07, 0x80, 0x13, + 0xe3, 0xc7, 0x8c, 0x56, 0x6a, 0x4f, 0xd9, 0xdd, 0xd8, 0x85, 0x3a, 0x44, 0x37, 0xb6, 0xdb, 0x56, + 0xa9, 0xd6, 0x1d, 0x53, 0x4b, 0x53, 0x36, 0x97, 0x9e, 0x6c, 0x94, 0x9c, 0x12, 0x95, 0xa1, 0x25, + 0x2b, 0x4f, 0x8f, 0x0a, 0x49, 0x20, 0x8f, 0x20, 0x91, 0x5a, 0x31, 0xd3, 0x46, 0x90, 0xbc, 0xe8, + 0x3d, 0x8f, 0xd3, 0x7a, 0x5b, 0x50, 0xa1, 0x96, 0xee, 0x91, 0x1a, 0x79, 0x72, 0x1b, 0x69, 0xce, + 0xe2, 0x5b, 0x2e, 0xbe, 0xe3, 0xa1, 0x05, 0x43, 0xc1, 0x52, 0x43, 0x80, 0x1c, 0x64, 0x64, 0x1c, + 0x12, 0x30, 0x48, 0x48, 0xd4, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x72, + 0x70, 0x37, 0x37, 0x6d, 0xa7, 0xce, 0x8f, 0x06, 0x0e, 0xe1, 0x69, 0x29, 0x52, 0xe4, 0xba, 0x96, + 0x58, 0x61, 0x9b, 0xcc, 0x75, 0xb8, 0xea, 0xd4, 0x70, 0x94, 0x25, 0x21, 0x79, 0x52, 0x89, 0x20, + 0x00, 0x3c, 0x92, 0x68, 0x3a, 0xca, 0x52, 0x94, 0x0a, 0x81, 0xb7, 0x73, 0xaa, 0x7d, 0xbc, 0xd0, + 0x1a, 0x8a, 0xe5, 0xa6, 0x91, 0x1a, 0xe7, 0x7f, 0xbc, 0x41, 0x69, 0x41, 0x62, 0x08, 0x6f, 0xd3, + 0x22, 0x40, 0xcf, 0xea, 0x1c, 0x75, 0x4a, 0xca, 0x54, 0x08, 0x01, 0x45, 0x29, 0x5f, 0x1c, 0x91, + 0xe5, 0x49, 0x52, 0x44, 0xf3, 0x59, 0x5b, 0xd4, 0xbd, 0x82, 0xf3, 0xa7, 0xb7, 0xd7, 0x58, 0x35, + 0x7a, 0xb7, 0x3d, 0x09, 0x53, 0xae, 0xf2, 0xae, 0x11, 0x0b, 0x83, 0xda, 0xfc, 0x77, 0x9e, 0x5a, + 0xdb, 0x71, 0x04, 0x78, 0x52, 0x48, 0x3f, 0x77, 0xc1, 0x0a, 0x49, 0xc2, 0x92, 0x40, 0x0f, 0xdb, + 0xb8, 0x3d, 0x41, 0xee, 0xd6, 0xb7, 0x83, 0x32, 0xd9, 0x77, 0xd5, 0x8f, 0x47, 0xb5, 0xcb, 0x75, + 0x6a, 0x5c, 0x18, 0x0d, 0x22, 0x33, 0x7c, 0x14, 0x14, 0x92, 0xc9, 0x52, 0x00, 0x71, 0x6d, 0x71, + 0x59, 0x4f, 0x05, 0xa9, 0x40, 0x8c, 0x72, 0xc9, 0x19, 0xa8, 0xb2, 0xbd, 0x3d, 0x27, 0x64, 0x95, + 0xa9, 0x75, 0x55, 0xa7, 0x4e, 0x41, 0x71, 0x96, 0xe5, 0xdd, 0x67, 0x33, 0x09, 0x85, 0xbc, 0x48, + 0x6d, 0x2b, 0x75, 0x61, 0x09, 0x2a, 0x20, 0x12, 0x13, 0x95, 0x0c, 0xe0, 0x13, 0x8f, 0xb8, 0xd5, + 0xc6, 0xdb, 0xde, 0x89, 0x6d, 0x49, 0xb5, 0xa9, 0xcd, 0xc0, 0xd5, 0x93, 0x5d, 0x9e, 0xbc, 0x71, + 0x62, 0xc6, 0x52, 0xdb, 0x4c, 0xe1, 0x4a, 0xce, 0x5c, 0x79, 0xb5, 0x17, 0x32, 0x9e, 0x07, 0xec, + 0x23, 0x89, 0xe4, 0x3d, 0xde, 0x0d, 0x04, 0x27, 0xd0, 0xec, 0x49, 0x52, 0x7a, 0x97, 0xd3, 0x4f, + 0x47, 0x8c, 0xf3, 0xcd, 0x45, 0x6a, 0x63, 0xd2, 0x16, 0xdb, 0x65, 0x49, 0x65, 0x06, 0x2b, 0xa8, + 0x0b, 0x59, 0x1f, 0x65, 0x3c, 0xd6, 0x84, 0xe4, 0xf8, 0xca, 0x92, 0x3e, 0x48, 0xad, 0x2b, 0xae, + 0x67, 0x6f, 0x74, 0x06, 0x8d, 0xdb, 0xfb, 0x5a, 0xad, 0xda, 0x3b, 0x4f, 0x42, 0xb4, 0x32, 0xe6, + 0x3b, 0xaa, 0x69, 0x25, 0x4e, 0xbd, 0x85, 0x29, 0x43, 0xb8, 0xea, 0x89, 0x5b, 0x98, 0x2b, 0x56, + 0x39, 0x28, 0xf1, 0x07, 0x03, 0x03, 0xc5, 0x74, 0xd4, 0x0a, 0xf8, 0xcf, 0x97, 0x16, 0x04, 0x19, + 0x13, 0xa7, 0x49, 0x66, 0x2c, 0x48, 0xcd, 0x29, 0xe7, 0xdf, 0x79, 0xc0, 0x86, 0xda, 0x42, 0x46, + 0x54, 0xb5, 0x28, 0xf8, 0x4a, 0x40, 0x04, 0x92, 0x7c, 0x00, 0x2b, 0xed, 0x55, 0xcf, 0xe9, 0x0c, + 0xba, 0x4f, 0xb7, 0xec, 0x23, 0x11, 0x21, 0xbf, 0xda, 0x66, 0xe7, 0x7b, 0x8f, 0x16, 0x62, 0x78, + 0x24, 0xf7, 0x1a, 0x0d, 0xba, 0xf0, 0x4e, 0x48, 0xc8, 0xfd, 0x63, 0x2d, 0xab, 0x23, 0x07, 0xdb, + 0x8f, 0x82, 0x41, 0x0a, 0x5b, 0xbf, 0x1b, 0x81, 0x2b, 0x73, 0x77, 0x46, 0xef, 0xaa, 0xde, 0x53, + 0xc9, 0x88, 0xf3, 0xbd, 0x9b, 0x73, 0x0e, 0x92, 0x0b, 0x11, 0x51, 0xe1, 0xa4, 0x71, 0x2a, 0x50, + 0x4a, 0x88, 0xf7, 0xa8, 0x24, 0xf1, 0xe6, 0xb5, 0x91, 0xf3, 0x5d, 0x37, 0x47, 0x9a, 0x2e, 0x2e, + 0xb7, 0xdf, 0x8b, 0x3c, 0x1b, 0xa5, 0x9d, 0x9b, 0xb5, 0x9e, 0x0b, 0x4f, 0x4f, 0xb8, 0x30, 0xf2, + 0x87, 0x6f, 0x82, 0x10, 0x43, 0x65, 0x49, 0x24, 0x73, 0x4f, 0x79, 0x6c, 0x82, 0x8f, 0x20, 0x83, + 0xee, 0x05, 0x3c, 0xaa, 0x1f, 0xad, 0x1f, 0xe8, 0x9b, 0x6b, 0xa5, 0x6d, 0xde, 0xd7, 0x2e, 0xe3, + 0x7c, 0x82, 0xf4, 0x3d, 0x43, 0xa8, 0x5d, 0x4c, 0x99, 0x6c, 0x3c, 0x92, 0x87, 0x23, 0xb2, 0x8e, + 0x41, 0x86, 0x94, 0x9e, 0x44, 0x05, 0x61, 0x4b, 0x70, 0xf8, 0x4a, 0x81, 0x77, 0x8a, 0x86, 0x51, + 0x41, 0x3c, 0xd2, 0xab, 0x9f, 0x50, 0x1d, 0x54, 0xe9, 0xbd, 0xbe, 0xba, 0x4f, 0xd2, 0xfa, 0x66, + 0x07, 0xe5, 0x16, 0xa3, 0x8b, 0x96, 0x9e, 0x70, 0xb8, 0x13, 0x0a, 0x23, 0xbc, 0x55, 0x94, 0xad, + 0x43, 0xdc, 0xe2, 0xd0, 0xa0, 0x8e, 0x4d, 0xa7, 0x03, 0xc9, 0x4f, 0x34, 0xa9, 0x24, 0x0a, 0xd9, + 0xa9, 0x3a, 0xb6, 0xde, 0x9b, 0xac, 0xe4, 0x48, 0x83, 0x78, 0xb6, 0x58, 0x5a, 0x4b, 0x41, 0x06, + 0x3c, 0x0b, 0x6b, 0x4b, 0x6d, 0x47, 0x24, 0xf3, 0x25, 0xf0, 0xe2, 0xb9, 0x1c, 0x81, 0xe1, 0x40, + 0x61, 0x23, 0xc6, 0x72, 0x48, 0x68, 0xfd, 0x2b, 0x33, 0x7f, 0x4a, 0x3d, 0xf6, 0xfe, 0x9c, 0xff, + 0x00, 0x09, 0x85, 0xfe, 0x0d, 0x58, 0x6e, 0x89, 0xf7, 0xd7, 0x5b, 0xee, 0x26, 0xaa, 0xbc, 0x69, + 0x1d, 0x69, 0x21, 0x9b, 0xab, 0xad, 0x41, 0x55, 0xca, 0x35, 0xc0, 0x32, 0xdb, 0x0e, 0x36, 0x12, + 0xb6, 0x9b, 0x53, 0x25, 0x0d, 0xa5, 0x29, 0x52, 0x4f, 0x70, 0x28, 0x1c, 0x02, 0x08, 0x50, 0x3c, + 0x81, 0x1c, 0x42, 0xd6, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, + 0xf1, 0xb5, 0xdd, 0x8b, 0xf2, 0xa3, 0x43, 0xdf, 0xb4, 0xcf, 0xaa, 0xf4, 0x9f, 0x5b, 0xdb, 0x64, + 0x41, 0xf5, 0x1d, 0xbe, 0x7d, 0xae, 0xeb, 0x4a, 0x47, 0x3e, 0x39, 0x1c, 0xb1, 0xcb, 0x38, 0xc8, + 0xce, 0x3e, 0x45, 0x67, 0x6c, 0xfe, 0x95, 0x77, 0xc6, 0x34, 0xe9, 0x11, 0xd9, 0xd2, 0x2c, 0xcc, + 0x69, 0xa7, 0x54, 0x84, 0x48, 0x66, 0xeb, 0x14, 0x36, 0xf0, 0x07, 0x01, 0x69, 0x0b, 0x71, 0x2a, + 0x09, 0x3f, 0x23, 0x92, 0x52, 0x70, 0x7c, 0x80, 0x7c, 0x56, 0x95, 0xd2, 0x82, 0x39, 0xe9, 0xcf, + 0x6c, 0xdb, 0xda, 0x8d, 0xae, 0x85, 0xa6, 0x16, 0xfb, 0x32, 0x6e, 0x2b, 0x75, 0x72, 0xee, 0x72, + 0x19, 0xe7, 0xdb, 0x76, 0x42, 0xf0, 0x0f, 0x10, 0xa3, 0xf6, 0x52, 0x84, 0xa1, 0x00, 0x80, 0x9e, + 0x41, 0x1c, 0x8a, 0x41, 0x51, 0x15, 0x23, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, + 0x57, 0x8d, 0xac, 0xb5, 0x5e, 0x9b, 0xd1, 0xb6, 0x37, 0x2f, 0x7a, 0xa6, 0xf5, 0x0a, 0xd1, 0x01, + 0xbc, 0x8e, 0xec, 0x97, 0x02, 0x79, 0xa8, 0x25, 0x4a, 0xe0, 0x81, 0xf2, 0xb5, 0x94, 0xa5, 0x44, + 0x21, 0x20, 0xa8, 0xe0, 0xe0, 0x1a, 0xa9, 0x9b, 0xcb, 0xd6, 0x6f, 0xfe, 0x26, 0xd3, 0xb5, 0xb6, + 0xaf, 0xf5, 0x9b, 0xfa, 0xea, 0xe4, 0xdf, 0xff, 0x00, 0x7a, 0x79, 0xb2, 0xc7, 0xfe, 0x9a, 0xd2, + 0xa7, 0x0f, 0xe2, 0x14, 0xd5, 0x05, 0xc6, 0x9f, 0x2e, 0x2c, 0x08, 0x32, 0x27, 0x4e, 0x92, 0xcc, + 0x58, 0x91, 0x9a, 0x53, 0xcf, 0xbe, 0xf3, 0x81, 0x0d, 0xb4, 0x84, 0x8c, 0xa9, 0x6a, 0x51, 0xf0, + 0x94, 0x80, 0x09, 0x24, 0xf8, 0x00, 0x55, 0x73, 0xdd, 0x6e, 0xb0, 0x34, 0x16, 0x96, 0x9c, 0x6d, + 0xba, 0x52, 0x0b, 0xda, 0xc6, 0x5b, 0x4e, 0xf0, 0x7d, 0xd6, 0x5f, 0xf4, 0xd1, 0x10, 0x01, 0x5a, + 0x54, 0x12, 0xf1, 0x4a, 0x8b, 0x8a, 0x05, 0x29, 0x20, 0xa5, 0x05, 0x0a, 0x4a, 0xf2, 0x16, 0x71, + 0x8a, 0xa5, 0x9b, 0x8f, 0xba, 0x7b, 0x83, 0xb8, 0x9d, 0x94, 0xeb, 0x1d, 0x51, 0x36, 0xe6, 0xcb, + 0x1c, 0x4b, 0x71, 0xb0, 0x86, 0x63, 0xa5, 0x49, 0xe5, 0x85, 0xf6, 0x9b, 0x09, 0x47, 0x3c, 0x2d, + 0x43, 0x9f, 0x1e, 0x58, 0x38, 0xce, 0x30, 0x2b, 0x8c, 0xa0, 0x99, 0xb7, 0x97, 0xa9, 0x1d, 0xc7, + 0xdc, 0x7f, 0x53, 0x6f, 0xf5, 0xff, 0x00, 0x93, 0xf6, 0x07, 0x79, 0x23, 0xea, 0xdb, 0x6a, 0xca, + 0x3b, 0xad, 0x9e, 0x63, 0x8b, 0xce, 0xfd, 0xb7, 0x72, 0x85, 0xf1, 0x52, 0x7d, 0xad, 0xab, 0x88, + 0x3c, 0x01, 0xa8, 0x66, 0xba, 0xdd, 0x2f, 0xb6, 0xba, 0xf7, 0x52, 0xc1, 0x6e, 0xe5, 0x68, 0xd2, + 0xb7, 0x37, 0x2d, 0x6e, 0x34, 0xeb, 0xc2, 0xe6, 0xf3, 0x5e, 0x9e, 0x0a, 0x50, 0xd0, 0x51, 0x71, + 0x6a, 0x92, 0xef, 0x16, 0x52, 0x94, 0xf0, 0x50, 0x25, 0x4b, 0x03, 0x23, 0x1f, 0x3e, 0x2b, 0xa0, + 0xb2, 0x39, 0xb7, 0x1b, 0x77, 0xab, 0xd9, 0x72, 0xf7, 0x0b, 0xf3, 0x95, 0x32, 0xdd, 0x25, 0x5d, + 0xd6, 0x21, 0xcb, 0x11, 0xac, 0xea, 0x5a, 0x09, 0xc7, 0x17, 0x14, 0xda, 0xd7, 0x2d, 0x04, 0x90, + 0x4e, 0x50, 0xca, 0x32, 0x82, 0x3f, 0x5c, 0x85, 0x66, 0x83, 0x47, 0xf6, 0x62, 0x5c, 0xa9, 0xfb, + 0x3d, 0xa2, 0xe7, 0x4e, 0x92, 0xf4, 0xa9, 0x72, 0x74, 0xfc, 0x07, 0x9f, 0x7d, 0xe7, 0x0a, 0xdc, + 0x75, 0x6a, 0x8e, 0x82, 0xa5, 0xa9, 0x47, 0xca, 0x94, 0x49, 0x24, 0x93, 0xe4, 0x93, 0x5d, 0x65, + 0x50, 0x0f, 0xd3, 0x57, 0x74, 0xff, 0x00, 0xd8, 0x1a, 0x33, 0xfe, 0x4e, 0x4f, 0xfd, 0x45, 0x7e, + 0xdb, 0x27, 0x5b, 0x5a, 0xf9, 0x9b, 0xa3, 0x2e, 0x5e, 0xf4, 0x9e, 0x99, 0x9b, 0x00, 0x72, 0xee, + 0xb1, 0x0c, 0x3f, 0x19, 0xd5, 0xfb, 0x4e, 0x38, 0xb8, 0xa7, 0x1c, 0x09, 0xc2, 0xb0, 0x4e, 0x50, + 0x72, 0x01, 0x1e, 0x33, 0x90, 0x17, 0xca, 0xaa, 0x37, 0xd2, 0x41, 0xa3, 0xa5, 0x4d, 0xd3, 0xba, + 0x6f, 0x5b, 0xc1, 0x80, 0xca, 0xda, 0xb6, 0xba, 0xec, 0x2b, 0x93, 0xed, 0xb2, 0x4b, 0xc1, 0x0e, + 0xf1, 0x2c, 0x95, 0xa8, 0x27, 0xfc, 0x92, 0x56, 0x97, 0x13, 0xee, 0x50, 0x01, 0x4f, 0x24, 0x00, + 0x4a, 0xcd, 0x4f, 0x3b, 0x17, 0xba, 0xfa, 0x6f, 0x76, 0xf4, 0x82, 0x6f, 0x76, 0x45, 0xfa, 0x79, + 0xac, 0x71, 0x6e, 0xe5, 0x6d, 0x71, 0x61, 0x4e, 0xc2, 0x74, 0x83, 0xe0, 0xfc, 0x72, 0x42, 0xb0, + 0x4a, 0x56, 0x00, 0x0a, 0x00, 0xf8, 0x0a, 0x0a, 0x4a, 0x7e, 0x3d, 0x4d, 0xd9, 0x22, 0xdf, 0xfa, + 0x7f, 0xd6, 0xf0, 0x66, 0x38, 0xf3, 0x6d, 0x35, 0x68, 0x7a, 0x6a, 0x4b, 0x44, 0x05, 0x73, 0x8c, + 0x3d, 0x42, 0x01, 0xc8, 0x3e, 0xd2, 0xb6, 0x92, 0x0f, 0xdf, 0x82, 0x70, 0x41, 0xf2, 0x03, 0x2b, + 0x6b, 0x59, 0x76, 0x3b, 0x54, 0xfe, 0x5a, 0x6d, 0x06, 0x96, 0xd4, 0xcb, 0x9d, 0xeb, 0xe4, 0xcc, + 0xb6, 0xb5, 0xeb, 0x24, 0x76, 0xbb, 0x7c, 0xe5, 0x20, 0x70, 0x91, 0xed, 0xc0, 0x03, 0x0e, 0xa5, + 0xc1, 0xe0, 0x04, 0xf8, 0xf1, 0xe3, 0x15, 0x93, 0x55, 0x61, 0xb6, 0xdb, 0xaa, 0x7b, 0xfe, 0xde, + 0x6d, 0x1d, 0x97, 0x43, 0xe9, 0xcd, 0x2b, 0x6c, 0x72, 0x5d, 0xb5, 0xd7, 0x8a, 0xe7, 0xcf, 0x7d, + 0x6e, 0xb6, 0xea, 0x1c, 0x75, 0xd7, 0x4a, 0x43, 0x28, 0xe0, 0x52, 0xa0, 0x5c, 0x48, 0xe5, 0xcc, + 0x8c, 0x24, 0xf8, 0xf3, 0xe0, 0x34, 0x4a, 0x95, 0x94, 0x33, 0xf7, 0x8b, 0x76, 0x26, 0xce, 0x91, + 0x31, 0xed, 0xc9, 0xd5, 0xa9, 0x75, 0xf7, 0x54, 0xea, 0xd2, 0xcd, 0xd9, 0xe6, 0x5b, 0x05, 0x47, + 0x24, 0x25, 0x08, 0x50, 0x4a, 0x13, 0xe7, 0xc2, 0x52, 0x00, 0x03, 0xc0, 0x00, 0x55, 0xeb, 0xe8, + 0x8f, 0x5d, 0x6a, 0x4d, 0x79, 0xb3, 0x0a, 0x97, 0xaa, 0x26, 0xfa, 0xf9, 0xb6, 0xbb, 0x93, 0x96, + 0xd6, 0xe5, 0x2c, 0x1e, 0xeb, 0xcd, 0x21, 0xa6, 0x96, 0x95, 0x3a, 0xac, 0xfb, 0xd6, 0x3b, 0x85, + 0x3c, 0xbc, 0x12, 0x12, 0x09, 0xca, 0xb2, 0xa2, 0x13, 0x9d, 0x53, 0xaf, 0xa4, 0xc6, 0x5c, 0xa4, + 0x41, 0xd0, 0x70, 0x51, 0x25, 0xe4, 0xc4, 0x79, 0xd9, 0xef, 0x3a, 0xc0, 0x70, 0x86, 0xd6, 0xb4, + 0x08, 0xe1, 0x0b, 0x29, 0xf8, 0x2a, 0x48, 0x71, 0x60, 0x13, 0xe4, 0x05, 0xab, 0x1f, 0x26, 0xae, + 0x2d, 0x53, 0x3f, 0xa4, 0xd3, 0xff, 0x00, 0x97, 0xdf, 0xfe, 0xcb, 0xff, 0x00, 0xe5, 0xa0, 0xa8, + 0x16, 0x2b, 0x5c, 0xfb, 0xe5, 0xf2, 0x05, 0x92, 0xd6, 0xc7, 0xa8, 0x9f, 0x70, 0x92, 0xdc, 0x58, + 0xad, 0x73, 0x4a, 0x7b, 0x8e, 0xb8, 0xa0, 0x94, 0x27, 0x2a, 0x20, 0x0c, 0xa8, 0x81, 0x92, 0x40, + 0xfc, 0x6b, 0x62, 0xeb, 0x1e, 0xb4, 0x9d, 0xee, 0x56, 0x9a, 0xd5, 0x56, 0x9d, 0x47, 0x05, 0xb6, + 0x5c, 0x97, 0x6a, 0x9c, 0xcc, 0xd6, 0x10, 0xf0, 0x25, 0xb5, 0x2d, 0xa5, 0x85, 0xa4, 0x28, 0x02, + 0x09, 0x4e, 0x52, 0x33, 0x82, 0x0e, 0x3e, 0xf1, 0x5a, 0xd9, 0xa1, 0xb5, 0x35, 0xab, 0x59, 0x69, + 0x0b, 0x56, 0xa9, 0xb2, 0x3d, 0xdd, 0x81, 0x73, 0x8c, 0x89, 0x0d, 0x65, 0x49, 0x2a, 0x46, 0x47, + 0x96, 0xd7, 0xc4, 0x90, 0x16, 0x95, 0x65, 0x2a, 0x00, 0x9c, 0x29, 0x24, 0x7d, 0xd4, 0x19, 0x8d, + 0xd4, 0xbd, 0x82, 0xf3, 0xa7, 0xb7, 0xd7, 0x58, 0x35, 0x7a, 0xb7, 0x3d, 0x09, 0x53, 0xae, 0xf2, + 0xae, 0x11, 0x0b, 0x83, 0xda, 0xfc, 0x77, 0x9e, 0x5a, 0xdb, 0x71, 0x04, 0x78, 0x52, 0x48, 0x3f, + 0x77, 0xc1, 0x0a, 0x49, 0xc2, 0x92, 0x40, 0xf8, 0xed, 0xee, 0xcb, 0xee, 0x86, 0xbe, 0xb5, 0xaa, + 0xe9, 0xa5, 0x74, 0x84, 0xd9, 0xb0, 0x06, 0x38, 0xca, 0x75, 0xc6, 0xe3, 0x34, 0xef, 0xb9, 0x49, + 0x3d, 0xb5, 0xbc, 0xa4, 0x87, 0x30, 0xa4, 0x28, 0x1e, 0x04, 0xf1, 0x23, 0x07, 0x19, 0x15, 0xab, + 0x14, 0xa0, 0xc9, 0x4d, 0xda, 0xdb, 0xfb, 0xfe, 0xd9, 0x6b, 0x59, 0x1a, 0x53, 0x51, 0xa5, 0x95, + 0x4b, 0x65, 0xa6, 0xde, 0x43, 0xf1, 0xc2, 0xcb, 0x0f, 0xa1, 0x69, 0x04, 0x2d, 0xb5, 0x2d, 0x29, + 0x2a, 0x48, 0x3c, 0x90, 0x4e, 0x31, 0xc9, 0x0a, 0x1f, 0x75, 0x48, 0xdd, 0x0a, 0x5d, 0x27, 0xdb, + 0xfa, 0x92, 0xb1, 0xc4, 0x86, 0xff, 0x00, 0x69, 0x9b, 0x9c, 0x69, 0x71, 0x66, 0x27, 0x82, 0x4f, + 0x71, 0xa0, 0xc2, 0xde, 0x09, 0xc9, 0x19, 0x1f, 0xac, 0x65, 0xb5, 0x64, 0x60, 0xfb, 0x71, 0xf0, + 0x48, 0x3d, 0x37, 0xd2, 0x3b, 0xfb, 0x6f, 0xb3, 0x7e, 0xed, 0xb1, 0xfc, 0xcc, 0x9a, 0xe3, 0x3a, + 0x25, 0xff, 0x00, 0x39, 0xdd, 0x23, 0xff, 0x00, 0x1b, 0xfc, 0x93, 0xf4, 0x1a, 0x65, 0x4a, 0x52, + 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, + 0x5c, 0x36, 0xfe, 0x6b, 0x89, 0x5b, 0x71, 0xb4, 0x77, 0xed, 0x67, 0x06, 0x0b, 0x33, 0xa5, 0xdb, + 0xda, 0x6c, 0x30, 0xcb, 0xca, 0x29, 0x6c, 0xad, 0xc7, 0x50, 0xd2, 0x54, 0xac, 0x79, 0x29, 0x49, + 0x70, 0x28, 0xa4, 0x10, 0x48, 0x18, 0xca, 0x73, 0x91, 0xe2, 0xef, 0xe6, 0xf9, 0x69, 0x1d, 0xa0, + 0x82, 0xc2, 0x2e, 0xc1, 0xeb, 0x95, 0xea, 0x63, 0x4b, 0x72, 0x1d, 0xae, 0x2a, 0x93, 0xdc, 0x50, + 0x01, 0x5c, 0x5c, 0x75, 0x44, 0xfe, 0xad, 0xa2, 0xb1, 0xc7, 0x96, 0x09, 0x27, 0x3c, 0x52, 0xae, + 0x2a, 0xc5, 0x3a, 0xdf, 0xee, 0xa8, 0x35, 0x26, 0xe8, 0xe9, 0x87, 0x74, 0xa4, 0x3b, 0x04, 0x2d, + 0x3f, 0x63, 0x95, 0xda, 0x54, 0xc6, 0xfb, 0xc6, 0x54, 0x87, 0xd4, 0xda, 0xca, 0xc0, 0xee, 0x14, + 0xa4, 0x25, 0x1c, 0x83, 0x67, 0x01, 0x1c, 0xb2, 0x8f, 0xb5, 0x82, 0x53, 0x41, 0xe2, 0xfe, 0x94, + 0x7b, 0xed, 0xfd, 0x39, 0xfe, 0x13, 0x0b, 0xfc, 0x1a, 0xeb, 0x61, 0x75, 0x8f, 0xb9, 0x6c, 0x68, + 0x25, 0x59, 0x5d, 0x8b, 0x6c, 0x95, 0xa8, 0x4b, 0xae, 0x01, 0x7d, 0x75, 0xa0, 0x14, 0x19, 0x52, + 0x4e, 0x30, 0xc2, 0x02, 0x5b, 0xee, 0xa5, 0x44, 0x10, 0xbf, 0xb3, 0x84, 0x80, 0xa6, 0xd4, 0x72, + 0xa3, 0x5b, 0x29, 0x41, 0xed, 0x6b, 0x2d, 0x57, 0xa9, 0x35, 0x95, 0xf1, 0xcb, 0xde, 0xa9, 0xbd, + 0x4d, 0xbb, 0xcf, 0x73, 0x23, 0xbb, 0x25, 0xc2, 0xae, 0x09, 0x2a, 0x52, 0xb8, 0x20, 0x7c, 0x21, + 0x01, 0x4a, 0x51, 0x08, 0x48, 0x09, 0x19, 0x38, 0x02, 0xbc, 0x5a, 0x9c, 0xf6, 0x1f, 0xa6, 0x7d, + 0x65, 0xba, 0x36, 0xb8, 0xda, 0x89, 0xd9, 0xd0, 0xac, 0x3a, 0x6a, 0x47, 0x3e, 0xd4, 0xe7, 0x48, + 0x7d, 0xd7, 0xf8, 0xa9, 0xc4, 0x1e, 0xdb, 0x29, 0x50, 0x3e, 0xd7, 0x1b, 0xe2, 0x79, 0xa9, 0xbf, + 0x0a, 0xca, 0x79, 0x63, 0x15, 0x76, 0x76, 0x8b, 0x62, 0xf6, 0xe3, 0x6c, 0x78, 0x49, 0xb0, 0x59, + 0xbd, 0x55, 0xd9, 0x39, 0xff, 0x00, 0xbd, 0xae, 0x24, 0x3f, 0x2c, 0x67, 0x98, 0xf6, 0xab, 0x01, + 0x2d, 0x7b, 0x5c, 0x28, 0x3d, 0xb4, 0xa3, 0x92, 0x40, 0xe5, 0xc8, 0x8c, 0xd0, 0x52, 0x6d, 0xbd, + 0xe9, 0x57, 0x77, 0x35, 0x7d, 0xad, 0x57, 0x17, 0x6d, 0xb0, 0xb4, 0xd3, 0x3e, 0x3b, 0x49, 0xbe, + 0x38, 0xe3, 0x0e, 0xbb, 0xee, 0x52, 0x4e, 0x1a, 0x4a, 0x16, 0xb4, 0x60, 0xa7, 0xfd, 0x34, 0xa7, + 0x21, 0x49, 0x29, 0xe4, 0x0e, 0x6a, 0xc3, 0x59, 0xf6, 0x03, 0x67, 0xf6, 0x3b, 0x45, 0x5c, 0x35, + 0xde, 0xbf, 0x4b, 0xda, 0xbd, 0xdb, 0x63, 0x5c, 0xdd, 0x72, 0x54, 0x40, 0xa6, 0x32, 0xa5, 0x29, + 0xb4, 0x21, 0xa8, 0xb9, 0x29, 0x2a, 0x5f, 0x71, 0xb4, 0xfe, 0xb5, 0x4b, 0x01, 0x40, 0x28, 0x16, + 0xc6, 0x48, 0xb3, 0xf5, 0x4b, 0x7a, 0xc9, 0xea, 0x1a, 0xcd, 0x76, 0xb7, 0x6a, 0x9d, 0xa0, 0xb2, + 0xd9, 0x1e, 0x96, 0x94, 0xba, 0xd4, 0x69, 0x77, 0x67, 0x1f, 0xed, 0x25, 0xa9, 0x0c, 0x48, 0x4a, + 0xdc, 0x6d, 0x0d, 0x14, 0x12, 0xb4, 0x82, 0xdf, 0x0e, 0x45, 0x49, 0xc9, 0xe4, 0x40, 0x29, 0x00, + 0xa8, 0x20, 0x6d, 0xf4, 0xde, 0xbd, 0x65, 0xbb, 0x57, 0x45, 0x7d, 0x73, 0x2b, 0xd2, 0x58, 0xd9, + 0x92, 0xa7, 0xe0, 0x5a, 0x18, 0x23, 0xb5, 0x1f, 0x29, 0x09, 0x05, 0x4a, 0x00, 0x17, 0x57, 0xc7, + 0x3e, 0xf5, 0x7c, 0x15, 0x2f, 0x88, 0x40, 0x51, 0x4d, 0x46, 0x54, 0xab, 0xe5, 0xd3, 0x87, 0x4d, + 0xda, 0x37, 0x4a, 0xe8, 0x78, 0xfa, 0xd7, 0x74, 0x60, 0x42, 0x9f, 0x76, 0x76, 0x37, 0xae, 0x71, + 0x8b, 0xa2, 0x0a, 0x22, 0x5a, 0x98, 0x2d, 0x12, 0x50, 0xeb, 0x6e, 0x61, 0x2a, 0x58, 0x4a, 0x89, + 0x59, 0x74, 0x61, 0x0a, 0x48, 0x09, 0x00, 0xa0, 0xad, 0x41, 0x53, 0x74, 0x6e, 0xca, 0xee, 0xb6, + 0xaf, 0xed, 0xaa, 0xc5, 0xa1, 0x2f, 0x4e, 0xb2, 0xf4, 0x61, 0x29, 0x99, 0x32, 0x59, 0xf4, 0xb1, + 0xdd, 0x68, 0xf1, 0xe2, 0xa4, 0x3a, 0xf1, 0x42, 0x17, 0x90, 0xa0, 0x40, 0x4a, 0x89, 0x23, 0x24, + 0x64, 0x02, 0x6b, 0x99, 0xd6, 0x5a, 0x53, 0x52, 0x68, 0xdb, 0xe3, 0x96, 0x4d, 0x53, 0x65, 0x9b, + 0x68, 0x9e, 0xde, 0x4f, 0x6a, 0x4b, 0x65, 0x3c, 0xd2, 0x14, 0xa4, 0xf3, 0x41, 0xf8, 0x5a, 0x0a, + 0x92, 0xa0, 0x16, 0x92, 0x52, 0x70, 0x70, 0x4d, 0x5f, 0x2d, 0xce, 0xea, 0xfb, 0x6e, 0x34, 0xbc, + 0x89, 0x56, 0xfd, 0x39, 0x1e, 0x6e, 0xad, 0x9e, 0xc7, 0xb4, 0x2e, 0x29, 0x0c, 0xc2, 0x2b, 0x0e, + 0x14, 0xad, 0x3d, 0xf5, 0x64, 0x9c, 0x24, 0x15, 0x05, 0x21, 0x0b, 0x42, 0xb2, 0x9c, 0x2b, 0xc9, + 0x22, 0x93, 0x6f, 0x16, 0xe5, 0x6a, 0x4d, 0xd4, 0xd5, 0xff, 0x00, 0x94, 0xda, 0x98, 0x42, 0x44, + 0x94, 0x46, 0x44, 0x56, 0x59, 0x86, 0xc9, 0x6d, 0xa6, 0x5a, 0x49, 0x24, 0x25, 0x20, 0x92, 0xa3, + 0x95, 0x29, 0x6a, 0x25, 0x4a, 0x27, 0x2a, 0x23, 0xc0, 0x00, 0x00, 0xe9, 0xba, 0x46, 0xd6, 0x33, + 0xf4, 0x6e, 0xfd, 0xe9, 0xc7, 0x61, 0xa3, 0xba, 0xcd, 0xe2, 0x4a, 0x2c, 0xd3, 0x1a, 0xca, 0x53, + 0xcd, 0xa9, 0x0e, 0x21, 0x20, 0xe4, 0xa4, 0x91, 0xc5, 0xce, 0xdb, 0x9e, 0x30, 0x4f, 0x0e, 0x39, + 0x01, 0x46, 0xb4, 0xe6, 0x7c, 0x48, 0xb3, 0xe0, 0xc8, 0x83, 0x3a, 0x33, 0x32, 0xa2, 0x49, 0x69, + 0x4c, 0xbe, 0xc3, 0xcd, 0x85, 0xb6, 0xea, 0x14, 0x30, 0xa4, 0x29, 0x27, 0xc2, 0x92, 0x41, 0x20, + 0x83, 0xe0, 0x83, 0x59, 0x5b, 0xd3, 0x85, 0xae, 0x7d, 0xe3, 0x7e, 0xf4, 0x3c, 0x4b, 0x73, 0x1d, + 0xf7, 0x9b, 0xbd, 0xc6, 0x94, 0xa4, 0xf3, 0x4a, 0x70, 0xd3, 0x0e, 0x07, 0x9d, 0x56, 0x54, 0x40, + 0xf6, 0xb6, 0xda, 0xd5, 0x8f, 0x93, 0x8c, 0x0c, 0x92, 0x05, 0x6a, 0xc5, 0x06, 0x33, 0xd7, 0x41, + 0xa6, 0xf4, 0x46, 0xb4, 0xd4, 0xb0, 0x57, 0x3b, 0x4e, 0x69, 0x0d, 0x41, 0x79, 0x88, 0xdb, 0xa5, + 0x95, 0xbf, 0x02, 0xda, 0xf4, 0x86, 0xd2, 0xb0, 0x01, 0x28, 0x2a, 0x42, 0x48, 0x0a, 0xc2, 0x92, + 0x71, 0xf3, 0x82, 0x3f, 0x1a, 0xe7, 0xea, 0xff, 0x00, 0xfd, 0x1c, 0x5f, 0xb1, 0x0b, 0xcf, 0xef, + 0x23, 0xff, 0x00, 0xcb, 0x46, 0xa0, 0xad, 0xbb, 0x75, 0xd3, 0x06, 0xed, 0x6a, 0xb9, 0xd6, 0xc5, + 0xce, 0xd3, 0xcf, 0x69, 0xdb, 0x3c, 0xb7, 0x48, 0x7e, 0x75, 0xc4, 0xa1, 0xb7, 0x23, 0x21, 0x24, + 0x85, 0x28, 0xc6, 0x2a, 0x0f, 0x15, 0x7b, 0x48, 0x4a, 0x4a, 0x40, 0x51, 0x29, 0x39, 0x09, 0x3c, + 0x85, 0xf2, 0xd8, 0xed, 0xb3, 0xb3, 0x6d, 0x3e, 0x82, 0x63, 0x4b, 0x59, 0xdf, 0x7a, 0x52, 0x8b, + 0xa6, 0x4c, 0xd9, 0x6e, 0xf8, 0x54, 0x99, 0x0a, 0x4a, 0x52, 0xa7, 0x02, 0x72, 0x42, 0x13, 0x84, + 0x24, 0x04, 0x8f, 0x80, 0x91, 0x92, 0xa5, 0x65, 0x47, 0xb9, 0xae, 0x66, 0xf7, 0xb8, 0x5a, 0x06, + 0xc7, 0x74, 0x7a, 0xd7, 0x7b, 0xd7, 0x1a, 0x66, 0xd9, 0x3d, 0x8e, 0x3d, 0xd8, 0xb3, 0x2e, 0xac, + 0x32, 0xeb, 0x7c, 0x92, 0x14, 0x39, 0x21, 0x4a, 0x04, 0x65, 0x24, 0x11, 0x91, 0xf0, 0x41, 0xa0, + 0xe9, 0xaa, 0x33, 0xea, 0x6f, 0x6e, 0x7f, 0x39, 0xdb, 0x41, 0x74, 0xb0, 0x46, 0x6f, 0x9d, 0xda, + 0x3e, 0x27, 0x5a, 0x7d, 0xd8, 0xcc, 0xa6, 0xc2, 0xb8, 0xa3, 0xca, 0xd2, 0x9f, 0x7a, 0x54, 0xb6, + 0xf2, 0xa3, 0xc5, 0x3d, 0xce, 0x58, 0xca, 0x45, 0x48, 0xd0, 0x25, 0xc5, 0x9f, 0x06, 0x3c, 0xe8, + 0x32, 0x59, 0x95, 0x12, 0x4b, 0x49, 0x79, 0x87, 0xd9, 0x70, 0x2d, 0xb7, 0x50, 0xa1, 0x94, 0xad, + 0x2a, 0x1e, 0x14, 0x92, 0x08, 0x20, 0x8f, 0x04, 0x1a, 0xfb, 0x50, 0x63, 0x3d, 0x48, 0xdb, 0x35, + 0xbd, 0x3a, 0xf7, 0x6a, 0x1e, 0x75, 0x1a, 0x62, 0xe0, 0xcb, 0x96, 0xe9, 0x0e, 0xf7, 0xa4, 0x5b, + 0x26, 0xb5, 0xdd, 0x8c, 0xea, 0xf8, 0x14, 0x85, 0xe0, 0x10, 0xa4, 0x2b, 0xc8, 0x24, 0xa1, 0x49, + 0x2a, 0xe0, 0x80, 0xae, 0x41, 0x20, 0x55, 0xcc, 0xea, 0x0f, 0xa5, 0xcd, 0x2f, 0xb8, 0x4f, 0x4a, + 0xd4, 0x1a, 0x61, 0xc6, 0x74, 0xde, 0xa7, 0x7d, 0xd7, 0x24, 0x48, 0x77, 0x82, 0x95, 0x1a, 0x7a, + 0xca, 0x3c, 0x07, 0x10, 0x0f, 0xea, 0xd4, 0x56, 0x01, 0x2e, 0x20, 0x67, 0xdc, 0xb2, 0xa4, 0xad, + 0x44, 0x11, 0x50, 0x37, 0x07, 0xa7, 0xcd, 0xda, 0xd1, 0x10, 0x66, 0x5c, 0xee, 0xfa, 0x4d, 0xe9, + 0x16, 0xb8, 0x8e, 0xad, 0x2b, 0x9d, 0x01, 0xd4, 0x49, 0x6f, 0x82, 0x42, 0x94, 0x5e, 0x29, 0x41, + 0x2e, 0x21, 0xae, 0x28, 0x2a, 0xe6, 0xb4, 0xa4, 0x01, 0x8e, 0x58, 0x27, 0x14, 0x16, 0x4f, 0x6e, + 0xfa, 0xd6, 0xd3, 0x73, 0xbb, 0x11, 0x35, 0xd6, 0x98, 0x9b, 0x68, 0x78, 0xf6, 0x5b, 0x54, 0xdb, + 0x72, 0xc4, 0x98, 0xe5, 0x47, 0xc3, 0xae, 0xa9, 0xb5, 0x71, 0x5b, 0x68, 0x07, 0x0a, 0x09, 0x4f, + 0x75, 0x58, 0x24, 0x79, 0x20, 0x72, 0x94, 0xe7, 0xf5, 0x2f, 0xb2, 0xd1, 0xb4, 0xac, 0x8d, 0x42, + 0xce, 0xb3, 0x66, 0x63, 0x4d, 0x3a, 0xa6, 0x51, 0x0d, 0x98, 0xee, 0x89, 0x6f, 0x38, 0x11, 0xcc, + 0x25, 0x2c, 0xad, 0x29, 0x50, 0x49, 0xf8, 0x0e, 0x28, 0x25, 0xbe, 0x47, 0x05, 0x60, 0xd6, 0x63, + 0x52, 0x82, 0x46, 0xea, 0x1b, 0x75, 0x25, 0x6e, 0xfe, 0xbd, 0x6f, 0x53, 0xc8, 0xb3, 0xb3, 0x68, + 0x69, 0x88, 0x2d, 0xc2, 0x8f, 0x15, 0xb7, 0x8b, 0xca, 0x4a, 0x12, 0xa5, 0xac, 0x95, 0xac, 0x84, + 0xf2, 0x51, 0x5b, 0x8b, 0xf8, 0x4a, 0x40, 0x1c, 0x46, 0x09, 0x04, 0x9e, 0x83, 0xa2, 0x5f, 0xf3, + 0x9d, 0xd2, 0x3f, 0xf1, 0xbf, 0xc9, 0x3f, 0x51, 0x66, 0x95, 0xb0, 0x5e, 0x75, 0x4e, 0xa2, 0x85, + 0xa7, 0xb4, 0xf5, 0xb9, 0xeb, 0x8d, 0xd2, 0x73, 0xbd, 0xa8, 0xf1, 0xda, 0x1e, 0xe5, 0x9f, 0x92, + 0x49, 0x3e, 0x12, 0x90, 0x01, 0x25, 0x44, 0x80, 0x90, 0x09, 0x24, 0x00, 0x4d, 0x68, 0x37, 0x48, + 0x9b, 0x09, 0xf9, 0xab, 0xb5, 0xb9, 0xa9, 0x35, 0x13, 0x9d, 0xdd, 0x5d, 0x73, 0x8d, 0xd9, 0x79, + 0xa6, 0xdd, 0xcb, 0x50, 0x58, 0x2a, 0x4a, 0xcb, 0x03, 0x07, 0x0b, 0x59, 0x52, 0x52, 0x54, 0xbf, + 0x20, 0x14, 0x84, 0xa3, 0xc0, 0x2a, 0x58, 0x4f, 0xf4, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x28, 0x9f, 0xd2, 0x41, 0x60, 0xbc, + 0xa3, 0x71, 0x6c, 0x3a, 0xa4, 0xdb, 0x9e, 0xfa, 0x95, 0xdb, 0x43, 0x76, 0xf4, 0xcc, 0x03, 0x2d, + 0x89, 0x08, 0x79, 0xf7, 0x0b, 0x67, 0x1f, 0x65, 0x5c, 0x16, 0x08, 0xce, 0x39, 0x00, 0xac, 0x67, + 0x8a, 0xb1, 0x5b, 0x74, 0xc6, 0x93, 0xd5, 0x5a, 0xa3, 0xd4, 0x7e, 0x4c, 0xe9, 0xab, 0xd5, 0xef, + 0xd3, 0x71, 0xf5, 0x1f, 0x57, 0x41, 0x76, 0x47, 0x6b, 0x96, 0x78, 0xf2, 0xe0, 0x93, 0xc7, 0x3c, + 0x55, 0x8c, 0xfc, 0xe0, 0xfe, 0x15, 0xaf, 0xd4, 0xa0, 0xcf, 0x3b, 0x37, 0x47, 0x5b, 0xad, 0x2a, + 0xc6, 0xe5, 0xce, 0xe2, 0xe5, 0x96, 0xde, 0xf2, 0x63, 0x3e, 0xe2, 0x6d, 0xbe, 0xab, 0xbb, 0x2d, + 0x4e, 0xa1, 0x2b, 0xed, 0x35, 0xed, 0x1d, 0x91, 0xdc, 0x52, 0x50, 0x39, 0x77, 0x70, 0x94, 0xaf, + 0x27, 0xc8, 0x29, 0xaa, 0xe7, 0x5b, 0x31, 0x59, 0x69, 0xd4, 0xde, 0xdc, 0xfe, 0x6c, 0x77, 0x7e, + 0xe9, 0x60, 0x8c, 0xdf, 0x0b, 0x4c, 0x8c, 0x4e, 0xb4, 0xfb, 0xb3, 0x88, 0xae, 0x15, 0x71, 0x47, + 0x95, 0xa9, 0x5e, 0xc5, 0x25, 0x6d, 0xe5, 0x47, 0x92, 0xbb, 0x7c, 0xb1, 0x85, 0x0a, 0x0b, 0x3f, + 0xf4, 0x72, 0xeb, 0x18, 0xb3, 0x74, 0x15, 0xeb, 0x44, 0x48, 0x9e, 0xf2, 0xee, 0x36, 0xd9, 0xc6, + 0x6c, 0x76, 0x1e, 0x78, 0x14, 0x88, 0xae, 0xa5, 0x20, 0x86, 0x52, 0x55, 0xcb, 0x8a, 0x5d, 0x4a, + 0xd4, 0xbc, 0x24, 0x24, 0x17, 0x92, 0x72, 0x4a, 0xcd, 0x5a, 0xca, 0xcb, 0xae, 0x94, 0x75, 0x8c, + 0x5d, 0x11, 0xbf, 0x1a, 0x72, 0xef, 0x73, 0x9e, 0xf4, 0x2b, 0x5b, 0xce, 0xae, 0x14, 0xe5, 0xa1, + 0xe0, 0xdb, 0x7c, 0x1e, 0x41, 0x42, 0x4b, 0xa5, 0x4a, 0x4a, 0x7b, 0x49, 0x70, 0xb6, 0xe2, 0xb9, + 0x1c, 0x00, 0xdf, 0x2c, 0x12, 0x91, 0x5a, 0x8b, 0x40, 0xac, 0xcd, 0xea, 0x93, 0x6b, 0xf5, 0xc6, + 0x98, 0xdd, 0x3d, 0x5d, 0x7f, 0xb8, 0x58, 0x26, 0xbb, 0x63, 0x9d, 0x72, 0x7a, 0xe4, 0xd5, 0xd2, + 0x33, 0x0b, 0x72, 0x22, 0x5a, 0x90, 0xfa, 0x8a, 0x12, 0xb7, 0x00, 0xc2, 0x16, 0x14, 0xa0, 0x82, + 0x95, 0x60, 0xf2, 0xc6, 0x32, 0x14, 0x95, 0x2b, 0x4c, 0xab, 0xc6, 0xd7, 0x76, 0x2f, 0xca, 0x8d, + 0x0f, 0x7e, 0xd3, 0x3e, 0xab, 0xd2, 0x7d, 0x6f, 0x6d, 0x91, 0x07, 0xd4, 0x76, 0xf9, 0xf6, 0xbb, + 0xad, 0x29, 0x1c, 0xf8, 0xe4, 0x72, 0xc7, 0x2c, 0xe3, 0x23, 0x38, 0xf9, 0x14, 0x19, 0x01, 0x56, + 0x9b, 0x76, 0xf7, 0x41, 0xed, 0x73, 0xd1, 0x36, 0x9a, 0x43, 0x97, 0xfe, 0xfd, 0xf2, 0x25, 0xee, + 0x3d, 0xb6, 0xfc, 0xcb, 0x6f, 0xb9, 0xdc, 0x5a, 0x50, 0xd4, 0x92, 0xca, 0x9f, 0x0a, 0x24, 0xb9, + 0xdc, 0x4b, 0x4d, 0x38, 0x54, 0x49, 0x4a, 0x9c, 0x4a, 0x88, 0xc1, 0x41, 0x09, 0xaf, 0x3b, 0x8b, + 0xa4, 0x2f, 0x3a, 0x0b, 0x5a, 0xdc, 0xf4, 0x8e, 0xa0, 0x43, 0x29, 0xb8, 0xdb, 0x9d, 0x08, 0x74, + 0xb2, 0xe7, 0x36, 0xd6, 0x14, 0x90, 0xb4, 0x2d, 0x27, 0xfd, 0x55, 0x21, 0x49, 0x50, 0xc8, 0x04, + 0x03, 0x82, 0x01, 0xc8, 0x12, 0x07, 0x49, 0x97, 0xbb, 0x63, 0x1b, 0xa2, 0xd6, 0x8c, 0xd4, 0xed, + 0xb3, 0x2b, 0x4a, 0xeb, 0x06, 0x8d, 0xa2, 0xe7, 0x0e, 0x40, 0x71, 0x4d, 0xb8, 0xb5, 0x79, 0x8c, + 0xa4, 0xa5, 0x07, 0xda, 0xe8, 0x78, 0x21, 0x29, 0x73, 0x19, 0x40, 0x71, 0x44, 0x14, 0xfd, 0xa0, + 0x10, 0xfd, 0x77, 0x5b, 0x53, 0xb4, 0xba, 0xf7, 0x73, 0x67, 0x06, 0x74, 0xa5, 0x89, 0xe7, 0xe2, + 0x25, 0xde, 0xdb, 0xf7, 0x17, 0xbf, 0x55, 0x11, 0x83, 0x94, 0x05, 0x72, 0x74, 0xf8, 0x2a, 0x48, + 0x71, 0x2a, 0x28, 0x4f, 0x25, 0xf1, 0xf2, 0x12, 0x6b, 0x41, 0x6c, 0x9d, 0x37, 0x6c, 0x95, 0x9e, + 0xe8, 0xcd, 0xc6, 0x26, 0x81, 0x84, 0xeb, 0xcc, 0xf2, 0xe2, 0x99, 0x92, 0x5f, 0x94, 0xd1, 0xca, + 0x4a, 0x4f, 0x26, 0x9e, 0x71, 0x48, 0x57, 0x82, 0x71, 0x94, 0x9c, 0x1c, 0x11, 0x82, 0x01, 0xa9, + 0x66, 0x82, 0x20, 0xe9, 0x9f, 0x63, 0x6c, 0xdb, 0x41, 0xa7, 0x4b, 0xae, 0x96, 0x6e, 0x3a, 0xaa, + 0x73, 0x40, 0x5c, 0x6e, 0x21, 0x3e, 0xd4, 0x8f, 0x07, 0xb0, 0xce, 0x46, 0x52, 0xd0, 0x20, 0x64, + 0xf8, 0x2b, 0x20, 0x29, 0x58, 0xc2, 0x52, 0x89, 0x7e, 0x94, 0xa0, 0xc6, 0xe9, 0xf1, 0x25, 0x40, + 0x9d, 0x22, 0x0c, 0xe8, 0xcf, 0x45, 0x97, 0x19, 0xd5, 0x32, 0xfb, 0x0f, 0x36, 0x50, 0xe3, 0x4b, + 0x49, 0xc2, 0x90, 0xa4, 0x9f, 0x29, 0x50, 0x20, 0x82, 0x0f, 0x90, 0x45, 0x4b, 0xfb, 0x0d, 0xd4, + 0x26, 0xa4, 0xda, 0x2d, 0x21, 0x7c, 0xb0, 0x5a, 0x2d, 0x50, 0xae, 0x5e, 0xbe, 0x4b, 0x72, 0xa1, + 0x99, 0x8a, 0x21, 0xa8, 0x8e, 0xe0, 0x25, 0xe5, 0x29, 0x08, 0x01, 0x6e, 0x73, 0x42, 0x5b, 0x00, + 0x77, 0x12, 0x12, 0x50, 0x08, 0xce, 0x48, 0x3d, 0xd7, 0x5d, 0x3b, 0x3b, 0x79, 0xb1, 0x6b, 0x5b, + 0x86, 0xe6, 0xda, 0x61, 0xb2, 0xf6, 0x9c, 0xbb, 0x3a, 0xda, 0xa6, 0x08, 0xac, 0x70, 0x30, 0x24, + 0x14, 0xa5, 0x0a, 0x2e, 0x81, 0xf2, 0x97, 0x56, 0x39, 0xf7, 0x3e, 0xf5, 0xac, 0xa5, 0x58, 0x25, + 0x25, 0x75, 0x7e, 0x82, 0x4d, 0xd4, 0xfb, 0xfd, 0xbc, 0xba, 0x8b, 0xd3, 0xfd, 0x61, 0xb8, 0x57, + 0xa6, 0x7d, 0x3f, 0x2e, 0x1f, 0x57, 0x2d, 0x30, 0x33, 0xcb, 0x19, 0xe5, 0xe9, 0xc2, 0x39, 0xfd, + 0x91, 0x8e, 0x59, 0xc7, 0x9c, 0x63, 0x27, 0x31, 0x95, 0x4c, 0x1b, 0x53, 0xd3, 0x86, 0xe9, 0x6e, + 0x24, 0x11, 0x73, 0x83, 0x6a, 0x66, 0xcd, 0x6b, 0x71, 0xae, 0xe3, 0x13, 0xaf, 0x0b, 0x5c, 0x76, + 0xe4, 0x02, 0x10, 0xa4, 0xf6, 0xd2, 0x12, 0xa7, 0x14, 0x95, 0x25, 0x61, 0x41, 0x61, 0x3c, 0x08, + 0x07, 0xdd, 0x91, 0x8a, 0x9e, 0x74, 0x37, 0x44, 0xb0, 0x22, 0x5d, 0x2d, 0x53, 0xf5, 0x7e, 0xb3, + 0xfa, 0xca, 0x33, 0x5c, 0x1c, 0x9f, 0x6b, 0x87, 0x05, 0x4d, 0x25, 0xd5, 0x71, 0xc9, 0x69, 0x32, + 0x0b, 0x9c, 0xb8, 0x72, 0xf0, 0x54, 0x10, 0x95, 0x14, 0xe7, 0x1c, 0x09, 0x05, 0x21, 0xd6, 0xfd, + 0x1d, 0x72, 0xe5, 0x49, 0xd8, 0xab, 0x83, 0x32, 0x24, 0xbc, 0xf3, 0x51, 0x75, 0x04, 0x86, 0x63, + 0xa1, 0xc7, 0x0a, 0x92, 0xca, 0x0b, 0x2c, 0x2c, 0xa1, 0x00, 0xfd, 0x94, 0xf3, 0x5a, 0xd5, 0x81, + 0xe3, 0x2a, 0x51, 0xf9, 0x26, 0xac, 0x95, 0x79, 0x9a, 0x56, 0xc1, 0x66, 0xd2, 0xda, 0x76, 0x16, + 0x9e, 0xd3, 0xd6, 0xe6, 0x6d, 0xd6, 0xb8, 0x2d, 0x76, 0xa3, 0xc7, 0x68, 0x7b, 0x50, 0x3e, 0x49, + 0x24, 0xf9, 0x52, 0x89, 0x24, 0x95, 0x12, 0x4a, 0x89, 0x24, 0x92, 0x49, 0x35, 0xe9, 0xd0, 0x29, + 0x4a, 0x50, 0x73, 0x3a, 0xcb, 0x6f, 0xb4, 0x3e, 0xb2, 0xee, 0x2b, 0x54, 0xe9, 0x2b, 0x2d, 0xdd, + 0xe7, 0x23, 0x18, 0xbe, 0xa6, 0x4c, 0x34, 0x2a, 0x42, 0x1a, 0x3c, 0xbd, 0xa8, 0x77, 0x1c, 0xd1, + 0x82, 0xa5, 0x10, 0x52, 0xa0, 0x41, 0x24, 0x8c, 0x1f, 0x35, 0x1f, 0xfe, 0x8b, 0x9b, 0x13, 0xfd, + 0x06, 0xfe, 0x2d, 0x37, 0xfc, 0x6a, 0x99, 0xa9, 0x41, 0xcc, 0xed, 0xee, 0x80, 0xd1, 0xbb, 0x7f, + 0x6b, 0x55, 0xbb, 0x47, 0x69, 0xe8, 0x56, 0x86, 0x5c, 0xc7, 0x75, 0x4d, 0x24, 0xa9, 0xd7, 0xb0, + 0xa5, 0x28, 0x77, 0x1d, 0x51, 0x2b, 0x73, 0x05, 0x6a, 0xc7, 0x25, 0x1e, 0x20, 0xe0, 0x60, 0x78, + 0xae, 0x9a, 0xab, 0x9f, 0x56, 0xbd, 0x44, 0x5d, 0x76, 0x96, 0xf9, 0x6a, 0xd3, 0x3a, 0x66, 0xcb, + 0x0a, 0x65, 0xda, 0x54, 0x61, 0x3a, 0x44, 0x8b, 0x8a, 0x54, 0xa8, 0xe8, 0x60, 0xa9, 0x68, 0x4a, + 0x12, 0x94, 0x2d, 0x2a, 0x2b, 0x2a, 0x42, 0x89, 0x24, 0x80, 0x90, 0x07, 0x85, 0x15, 0x7b, 0x39, + 0x9e, 0x9c, 0x3a, 0xad, 0xba, 0xeb, 0x7d, 0xc3, 0x8f, 0xa4, 0x75, 0xd5, 0xae, 0xcb, 0x03, 0xeb, + 0x3f, 0xd5, 0xdb, 0xa6, 0x40, 0xe4, 0xca, 0x10, 0xf8, 0x04, 0x86, 0xdc, 0x0e, 0xb8, 0xac, 0xf3, + 0xf0, 0x94, 0x94, 0x9c, 0xf3, 0xe2, 0x9e, 0x2a, 0xe7, 0x94, 0x85, 0xb2, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x79, + 0x9a, 0xaa, 0xff, 0x00, 0x66, 0xd2, 0xda, 0x76, 0x6e, 0xa1, 0xd4, 0x37, 0x16, 0x6d, 0xd6, 0xb8, + 0x2d, 0x77, 0x64, 0x48, 0x74, 0xfb, 0x50, 0x3e, 0x00, 0x00, 0x79, 0x52, 0x89, 0x20, 0x04, 0x80, + 0x4a, 0x89, 0x00, 0x02, 0x48, 0x15, 0x1c, 0xd9, 0x3a, 0x91, 0xd9, 0x2b, 0xc5, 0xd1, 0x9b, 0x74, + 0x4d, 0x7d, 0x09, 0xa7, 0x9e, 0xe5, 0xc5, 0x53, 0x23, 0x3f, 0x15, 0xa1, 0x84, 0x95, 0x1e, 0x4e, + 0xbc, 0xda, 0x50, 0x9f, 0x00, 0xe3, 0x2a, 0x19, 0x38, 0x03, 0x24, 0x81, 0x41, 0x2c, 0xd5, 0x4d, + 0xfa, 0x44, 0xb6, 0xe7, 0xeb, 0x2d, 0x31, 0x6e, 0xdc, 0xcb, 0x7b, 0x79, 0x93, 0x68, 0xe3, 0x06, + 0xe5, 0xee, 0xfb, 0x51, 0x5c, 0x5f, 0xea, 0x97, 0xe5, 0x60, 0x0e, 0x0e, 0xac, 0xa7, 0x09, 0x49, + 0x52, 0xbb, 0xf9, 0x27, 0x08, 0xab, 0x65, 0x5e, 0x36, 0xbb, 0xb1, 0x7e, 0x54, 0x68, 0x7b, 0xf6, + 0x99, 0xf5, 0x5e, 0x93, 0xeb, 0x7b, 0x6c, 0x88, 0x3e, 0xa3, 0xb7, 0xcf, 0xb5, 0xdd, 0x69, 0x48, + 0xe7, 0xc7, 0x23, 0x96, 0x39, 0x67, 0x19, 0x19, 0xc7, 0xc8, 0xa0, 0xc8, 0x0a, 0xd4, 0x5e, 0x94, + 0x75, 0x8c, 0xad, 0x6f, 0xb0, 0xfa, 0x72, 0xef, 0x73, 0x9e, 0xcc, 0xdb, 0xa3, 0x2d, 0x2e, 0x14, + 0xe5, 0xa1, 0xe2, 0xe3, 0x9c, 0xd9, 0x59, 0x42, 0x4b, 0xa5, 0x4a, 0x52, 0xbb, 0xaa, 0x6c, 0x36, + 0xe2, 0xb9, 0x1c, 0x92, 0xe7, 0x2c, 0x00, 0xa1, 0x59, 0x8f, 0x7e, 0xb5, 0xcf, 0xb1, 0xdf, 0x27, + 0xd9, 0x2e, 0x8c, 0x7a, 0x79, 0xf6, 0xf9, 0x2e, 0x45, 0x94, 0xd7, 0x34, 0xab, 0xb6, 0xeb, 0x6a, + 0x29, 0x5a, 0x72, 0x92, 0x41, 0xc2, 0x81, 0x19, 0x04, 0x8f, 0xc2, 0xae, 0x37, 0xd1, 0x9d, 0x2e, + 0x52, 0xe0, 0xeb, 0xc8, 0x2b, 0x92, 0xf2, 0xa2, 0x32, 0xec, 0x07, 0x9a, 0x60, 0xb8, 0x4b, 0x68, + 0x5a, 0xc4, 0x80, 0xb5, 0x84, 0xfc, 0x05, 0x28, 0x36, 0x80, 0x48, 0xf2, 0x42, 0x13, 0x9f, 0x81, + 0x41, 0x71, 0x69, 0x4a, 0x50, 0x52, 0xdf, 0xa4, 0x83, 0x43, 0xca, 0x13, 0xac, 0x3b, 0x92, 0x89, + 0xcc, 0x98, 0x85, 0xa6, 0xec, 0x6e, 0xc5, 0x29, 0x21, 0xc4, 0xac, 0x17, 0xdf, 0x43, 0x80, 0xfc, + 0x29, 0x24, 0x15, 0x82, 0x0e, 0x08, 0x29, 0x4e, 0x39, 0x72, 0x3c, 0x6a, 0x04, 0x09, 0x72, 0xa0, + 0x4e, 0x8f, 0x3a, 0x0c, 0x97, 0xa2, 0xcb, 0x8c, 0xea, 0x5e, 0x61, 0xf6, 0x5c, 0x28, 0x71, 0xa5, + 0xa4, 0xe5, 0x2b, 0x4a, 0x87, 0x94, 0xa8, 0x10, 0x08, 0x23, 0xc8, 0x22, 0xb5, 0xfb, 0x55, 0x58, + 0x2c, 0xda, 0xa7, 0x4e, 0xcd, 0xd3, 0xda, 0x86, 0xdc, 0xcd, 0xc6, 0xd7, 0x39, 0xae, 0xd4, 0x88, + 0xee, 0x8f, 0x6a, 0xc7, 0xc8, 0x20, 0x8f, 0x29, 0x50, 0x20, 0x10, 0xa0, 0x41, 0x49, 0x00, 0x82, + 0x08, 0x06, 0xa0, 0x08, 0x1d, 0x18, 0x6d, 0x3c, 0x69, 0xd1, 0xe4, 0x3d, 0x74, 0xd5, 0xb3, 0x1a, + 0x69, 0xd4, 0xad, 0x71, 0xde, 0x9a, 0xc8, 0x6d, 0xe0, 0x0e, 0x4a, 0x14, 0x50, 0xca, 0x54, 0x12, + 0x7e, 0x0f, 0x15, 0x24, 0xe0, 0xf8, 0x20, 0xf9, 0xa0, 0x9b, 0x36, 0x9e, 0xe9, 0x3e, 0xf9, 0xb5, + 0x9a, 0x4a, 0xf7, 0x74, 0x7f, 0xd4, 0x4f, 0xb8, 0x59, 0x21, 0x4a, 0x94, 0xef, 0x04, 0xa7, 0xb8, + 0xeb, 0x8c, 0x21, 0x4b, 0x56, 0x12, 0x00, 0x19, 0x51, 0x27, 0x00, 0x01, 0xf8, 0x57, 0x4d, 0x5f, + 0x18, 0x11, 0x22, 0xc0, 0x83, 0x1e, 0x0c, 0x18, 0xcc, 0xc5, 0x89, 0x19, 0xa4, 0xb2, 0xc3, 0x0c, + 0xb6, 0x10, 0xdb, 0x48, 0x48, 0xc2, 0x50, 0x94, 0x8f, 0x09, 0x48, 0x00, 0x00, 0x07, 0x80, 0x05, + 0x7d, 0xa8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0xc9, + 0xef, 0x06, 0xb8, 0x8b, 0xb7, 0x1b, 0x6d, 0x79, 0xd6, 0x93, 0x20, 0xbd, 0x3d, 0xab, 0x6b, 0x48, + 0x29, 0x8c, 0xd2, 0x82, 0x54, 0xea, 0xd6, 0xe2, 0x5b, 0x42, 0x4a, 0x8f, 0xd9, 0x4f, 0x35, 0xa7, + 0x2a, 0xc1, 0x20, 0x64, 0x80, 0xa2, 0x30, 0x7a, 0xca, 0xe1, 0xb7, 0xf3, 0x43, 0xca, 0xdc, 0x7d, + 0xa3, 0xbf, 0x68, 0xc8, 0x33, 0x99, 0x83, 0x2e, 0xe0, 0xd3, 0x65, 0x87, 0x9e, 0x49, 0x53, 0x61, + 0x6d, 0xba, 0x87, 0x52, 0x95, 0x63, 0xc8, 0x4a, 0x8b, 0x61, 0x25, 0x40, 0x12, 0x01, 0xce, 0x15, + 0x8c, 0x10, 0xa8, 0x10, 0x3a, 0xd8, 0xdc, 0x94, 0x4e, 0x8e, 0xb9, 0xda, 0x6b, 0x49, 0x3f, 0x11, + 0x2e, 0xa4, 0xbe, 0xd3, 0x2c, 0x48, 0x69, 0xc5, 0xa3, 0x3e, 0xe4, 0xa5, 0x65, 0xe5, 0x04, 0xa8, + 0x8c, 0x80, 0xa2, 0x95, 0x00, 0x7c, 0xe0, 0xfc, 0x55, 0xe5, 0xd2, 0x77, 0xb8, 0xba, 0x97, 0x4a, + 0xda, 0x75, 0x1c, 0x16, 0xde, 0x6e, 0x25, 0xd6, 0x0b, 0x33, 0x58, 0x43, 0xc0, 0x07, 0x12, 0x87, + 0x50, 0x16, 0x90, 0xa0, 0x09, 0x01, 0x58, 0x50, 0xce, 0x09, 0x19, 0xfb, 0xcd, 0x67, 0x3c, 0x0e, + 0x95, 0x77, 0xc6, 0x4c, 0xe8, 0xf1, 0xde, 0xd2, 0x2c, 0xc3, 0x69, 0xd7, 0x52, 0x85, 0xc8, 0x7a, + 0xeb, 0x14, 0xb6, 0xc8, 0x27, 0x05, 0x6a, 0x08, 0x71, 0x4a, 0x29, 0x1f, 0x27, 0x8a, 0x54, 0x70, + 0x3c, 0x02, 0x7c, 0x56, 0x89, 0x68, 0x4b, 0x17, 0xe4, 0xbe, 0x87, 0xb0, 0xe9, 0x9f, 0x55, 0xea, + 0xfe, 0xa8, 0xb6, 0xc7, 0x83, 0xea, 0x3b, 0x7c, 0x3b, 0xbd, 0xa6, 0x92, 0x8e, 0x7c, 0x72, 0x78, + 0xe7, 0x8e, 0x71, 0x93, 0x8c, 0xfc, 0x9a, 0x0a, 0x7f, 0xf4, 0x8b, 0xe8, 0x5d, 0x48, 0xfe, 0xa4, + 0xb5, 0x6e, 0x24, 0x68, 0x5e, 0xa2, 0xc0, 0xc5, 0xb5, 0xab, 0x6c, 0xa7, 0x5a, 0x25, 0x4a, 0x8a, + 0xe8, 0x79, 0xd5, 0x25, 0x4e, 0x0c, 0x78, 0x42, 0xbb, 0xa1, 0x21, 0x5e, 0x47, 0x21, 0x83, 0x82, + 0x51, 0xca, 0xa0, 0x56, 0xb9, 0x6e, 0xb5, 0xbb, 0x4d, 0xdd, 0xb6, 0xd3, 0x52, 0x41, 0xd5, 0xea, + 0xe1, 0x60, 0x5d, 0xb5, 0xf5, 0x4f, 0x74, 0x34, 0x1c, 0x53, 0x0d, 0x25, 0x05, 0x45, 0xd4, 0x02, + 0x95, 0x7b, 0xd1, 0xc7, 0x9a, 0x48, 0x49, 0x21, 0x49, 0x04, 0x02, 0x40, 0xac, 0x8d, 0xa0, 0xd4, + 0xce, 0x99, 0x37, 0x1b, 0xf3, 0x9d, 0xb4, 0x16, 0xbb, 0xfc, 0x97, 0x39, 0xdd, 0xa3, 0xe6, 0x0d, + 0xdb, 0xdb, 0x8c, 0xca, 0x6c, 0x27, 0x92, 0xfc, 0x21, 0x29, 0xf7, 0xa5, 0x48, 0x73, 0x09, 0x1c, + 0x53, 0xdc, 0xe3, 0x9c, 0xa4, 0xd4, 0x99, 0x55, 0x9b, 0xe8, 0xe2, 0xfd, 0x88, 0x5e, 0x7f, 0x79, + 0x1f, 0xfe, 0x5a, 0x35, 0x59, 0x9a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, + 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x0a, 0xdb, 0xf4, 0x8a, 0x44, 0x95, 0x27, 0x62, 0xad, 0xef, 0x47, + 0x8c, 0xf3, 0xcd, 0x45, 0xd4, 0x11, 0xde, 0x90, 0xb6, 0xdb, 0x2a, 0x4b, 0x28, 0x2c, 0xbe, 0x80, + 0xb5, 0x91, 0xf6, 0x53, 0xcd, 0x68, 0x4e, 0x4f, 0x8c, 0xa9, 0x23, 0xe4, 0x8a, 0xcf, 0x9a, 0xd9, + 0x29, 0xf1, 0x22, 0xcf, 0x83, 0x22, 0x0c, 0xe8, 0xcc, 0xca, 0x89, 0x25, 0xa5, 0x32, 0xfb, 0x0f, + 0x36, 0x16, 0xdb, 0xa8, 0x50, 0xc2, 0x90, 0xa4, 0x9f, 0x0a, 0x49, 0x04, 0x82, 0x0f, 0x82, 0x0d, + 0x56, 0x6d, 0xd1, 0xe8, 0xdf, 0x48, 0xea, 0x5d, 0x44, 0xed, 0xe3, 0x4a, 0x6a, 0x07, 0xb4, 0xa2, + 0x64, 0xba, 0xb7, 0x64, 0x42, 0x10, 0x93, 0x26, 0x32, 0x49, 0xe3, 0x80, 0xca, 0x42, 0xdb, 0x2d, + 0x27, 0x21, 0x64, 0xa7, 0x2a, 0x1e, 0xe0, 0x12, 0x10, 0x94, 0x81, 0x41, 0x4c, 0xe0, 0x6e, 0x6e, + 0xe4, 0xc0, 0x83, 0x1e, 0x0c, 0x1d, 0xc2, 0xd5, 0xb1, 0x62, 0x46, 0x69, 0x2c, 0xb0, 0xc3, 0x37, + 0x99, 0x08, 0x6d, 0xa4, 0x24, 0x61, 0x28, 0x4a, 0x42, 0xf0, 0x94, 0x80, 0x00, 0x00, 0x78, 0x00, + 0x54, 0xa7, 0xa6, 0x3a, 0xbc, 0xde, 0x5b, 0x47, 0xa8, 0xfa, 0xc2, 0x6d, 0x97, 0x50, 0x77, 0x78, + 0xf0, 0xfa, 0xc6, 0xdc, 0x94, 0x76, 0x71, 0x9c, 0xf1, 0xf4, 0xe5, 0xac, 0xe7, 0x23, 0x3c, 0xb9, + 0x7d, 0x91, 0x8c, 0x79, 0xcf, 0x4d, 0xac, 0xba, 0x29, 0xd7, 0x16, 0xfe, 0xe3, 0xba, 0x5b, 0x53, + 0xd9, 0x6f, 0xac, 0xb7, 0x18, 0xb9, 0xdb, 0x92, 0x85, 0xc2, 0x90, 0xe3, 0xa3, 0x97, 0xea, 0x90, + 0x9f, 0x7a, 0x3c, 0x80, 0x9c, 0x29, 0x4e, 0x24, 0x65, 0x47, 0x38, 0x03, 0x26, 0x3f, 0xfd, 0x17, + 0x37, 0xdb, 0xfa, 0x0d, 0xfc, 0x5a, 0x17, 0xf8, 0xd4, 0x11, 0x04, 0xf9, 0x72, 0xa7, 0xce, 0x91, + 0x3a, 0x74, 0x97, 0xa5, 0x4b, 0x92, 0xea, 0x9e, 0x7d, 0xf7, 0x9c, 0x2b, 0x71, 0xd5, 0xa8, 0xe5, + 0x4b, 0x52, 0x8f, 0x95, 0x28, 0x92, 0x49, 0x27, 0xc9, 0x26, 0xae, 0x97, 0xd1, 0xa3, 0x6b, 0x9e, + 0xcd, 0x8f, 0x5b, 0xde, 0xdc, 0x63, 0x8c, 0x09, 0x72, 0x61, 0xc5, 0x61, 0xde, 0x69, 0xf7, 0xba, + 0xca, 0x5d, 0x53, 0x89, 0xc6, 0x72, 0x30, 0x97, 0xda, 0x39, 0x23, 0x07, 0x97, 0x8c, 0xe0, 0xe2, + 0x1f, 0xd2, 0xbd, 0x26, 0xef, 0x1d, 0xcf, 0x51, 0x42, 0x83, 0x7a, 0xb1, 0x33, 0x61, 0xb7, 0x3a, + 0xee, 0x24, 0xdc, 0x1d, 0x9d, 0x19, 0xf4, 0xc7, 0x47, 0xc9, 0x50, 0x6d, 0xb7, 0x4a, 0x96, 0xaf, + 0x18, 0x09, 0x18, 0x04, 0x91, 0x92, 0x91, 0x95, 0x0b, 0xff, 0x00, 0xb7, 0x5a, 0x42, 0xcd, 0xa0, + 0xb4, 0x55, 0xb3, 0x48, 0xe9, 0xf4, 0x3c, 0x9b, 0x75, 0xb9, 0xa2, 0x86, 0x8b, 0xce, 0x73, 0x71, + 0x65, 0x4a, 0x2b, 0x5a, 0xd4, 0x7f, 0xd6, 0x52, 0xd4, 0xa5, 0x1c, 0x00, 0x01, 0x38, 0x00, 0x0c, + 0x00, 0x1d, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, + 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x42, 0x7d, 0x59, 0x6f, 0x6c, 0xad, 0x9d, 0xd3, + 0xb6, 0x91, 0x67, 0xb4, 0xb3, 0x3e, 0xf5, 0x79, 0x75, 0xc1, 0x15, 0x52, 0x81, 0x31, 0x99, 0x43, + 0x5d, 0xb2, 0xe2, 0x96, 0x12, 0xa4, 0xa9, 0x4a, 0x3d, 0xc4, 0x84, 0xa4, 0x10, 0x3c, 0x92, 0x4f, + 0xb4, 0x25, 0x53, 0x65, 0x57, 0x9e, 0xb6, 0x76, 0x7f, 0x54, 0x6e, 0x8e, 0x9d, 0xb0, 0xce, 0xd2, + 0x3d, 0x99, 0x57, 0x1b, 0x1b, 0xaf, 0x83, 0x6f, 0x71, 0x69, 0x69, 0x52, 0x50, 0xff, 0x00, 0x68, + 0x15, 0x21, 0xc5, 0xa8, 0x24, 0x29, 0x1d, 0xb0, 0x78, 0xab, 0x00, 0x82, 0xac, 0x1c, 0x80, 0x95, + 0x04, 0x73, 0xb2, 0x9d, 0x5e, 0xea, 0xad, 0x47, 0xb9, 0x76, 0x6d, 0x37, 0xab, 0xf4, 0xf5, 0x97, + 0xd0, 0x5d, 0xe4, 0xb7, 0x05, 0xa7, 0x6d, 0x4d, 0x3a, 0xdb, 0xac, 0xbe, 0xea, 0xd2, 0x86, 0xd6, + 0x7b, 0x8e, 0xa8, 0x29, 0x1c, 0x8e, 0x14, 0x06, 0x08, 0x07, 0x90, 0x27, 0x8f, 0x15, 0x5c, 0xca, + 0xa0, 0xfb, 0x0b, 0xd3, 0x0e, 0xea, 0x42, 0xdd, 0x9d, 0x3d, 0x7a, 0xd5, 0x36, 0x96, 0x6c, 0x16, + 0xbb, 0x44, 0xe6, 0x6e, 0x4e, 0x3e, 0xe4, 0xb6, 0x24, 0x29, 0xd2, 0xcb, 0x89, 0x5a, 0x59, 0x42, + 0x1a, 0x71, 0x47, 0x92, 0x88, 0x03, 0x27, 0x01, 0x23, 0x91, 0xf2, 0x40, 0x4a, 0xaf, 0xc5, 0x05, + 0x3a, 0xfa, 0x42, 0x77, 0x55, 0xc6, 0x19, 0x8f, 0xb5, 0x16, 0x59, 0x2c, 0x94, 0xc9, 0x69, 0x12, + 0xef, 0xa4, 0x25, 0x0b, 0x50, 0x01, 0x69, 0x5b, 0x0c, 0xe7, 0x91, 0x28, 0x56, 0x51, 0xdc, 0x50, + 0x29, 0x07, 0x05, 0xa2, 0x0f, 0x15, 0x28, 0x1a, 0x59, 0x5f, 0x79, 0xf2, 0xe5, 0x4f, 0x9d, 0x22, + 0x74, 0xe9, 0x2f, 0x4a, 0x97, 0x25, 0xd5, 0x3c, 0xfb, 0xef, 0x38, 0x56, 0xe3, 0xab, 0x51, 0xca, + 0x96, 0xa5, 0x1f, 0x2a, 0x51, 0x24, 0x92, 0x4f, 0x92, 0x4d, 0x4f, 0x3d, 0x14, 0xed, 0x1f, 0xe7, + 0x07, 0x70, 0xd3, 0x7f, 0xbf, 0xda, 0x3d, 0x56, 0x93, 0xb2, 0x65, 0x6f, 0xfa, 0x86, 0x79, 0x47, + 0x97, 0x2b, 0x03, 0xb7, 0x1c, 0xfb, 0x87, 0x2c, 0x72, 0x0e, 0x28, 0x61, 0x49, 0xc2, 0x12, 0x95, + 0x8c, 0x38, 0x32, 0x16, 0xe7, 0xa4, 0x0d, 0xbf, 0x95, 0xb7, 0x7b, 0x25, 0x6e, 0x83, 0x73, 0x4b, + 0xcd, 0xdd, 0x2e, 0xae, 0xaa, 0xeb, 0x39, 0x87, 0x41, 0x06, 0x3a, 0xdd, 0x4a, 0x02, 0x5a, 0xe2, + 0xa4, 0xa5, 0x49, 0x52, 0x5b, 0x43, 0x61, 0x49, 0x56, 0x48, 0x5f, 0x3f, 0x24, 0x62, 0xa5, 0xfa, + 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, + 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, + 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, + 0x52, 0x81, 0x4a, 0x52, 0x82, 0x2c, 0xd5, 0x5d, 0x3c, 0xec, 0xe6, 0xa7, 0xd4, 0x53, 0x75, 0x05, + 0xeb, 0x45, 0xb2, 0xf5, 0xc6, 0x73, 0xbd, 0xe9, 0x2e, 0xb5, 0x36, 0x4b, 0x09, 0x71, 0x67, 0xe5, + 0x65, 0x0d, 0xb8, 0x94, 0x85, 0x1f, 0x92, 0x40, 0xc9, 0x24, 0x93, 0x92, 0x49, 0x32, 0x06, 0x95, + 0xb0, 0x59, 0xb4, 0xb6, 0x9d, 0x85, 0xa7, 0xb4, 0xf5, 0xb9, 0x9b, 0x75, 0xae, 0x0b, 0x5d, 0xa8, + 0xf1, 0xda, 0x1e, 0xd4, 0x0f, 0x92, 0x49, 0x3e, 0x54, 0xa2, 0x49, 0x25, 0x44, 0x92, 0xa2, 0x49, + 0x24, 0x92, 0x4d, 0x7a, 0x74, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0xff, 0xd9 +}; +const int test_jpg_size = sizeof(test_jpg); diff --git a/template/source/gfx/test_jpg.h b/template/source/gfx/test_jpg.h new file mode 100644 index 0000000..7d70acd --- /dev/null +++ b/template/source/gfx/test_jpg.h @@ -0,0 +1,14 @@ +/* + This file was autogenerated by raw2c. +Visit http://www.devkitpro.org +*/ + +//--------------------------------------------------------------------------------- +#ifndef _test_jpg_h_ +#define _test_jpg_h_ +//--------------------------------------------------------------------------------- +extern const unsigned char test_jpg[]; +extern const int test_jpg_size; +//--------------------------------------------------------------------------------- +#endif //_test_jpg_h_ +//--------------------------------------------------------------------------------- diff --git a/template/source/gfx/test_jpg.jpg b/template/source/gfx/test_jpg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..968ef5c7678486add3496a9a8f13e1906c955e14 GIT binary patch literal 13406 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 literal 0 HcmV?d00001 diff --git a/template/source/libjpeg/jconfig.h b/template/source/libjpeg/jconfig.h new file mode 100644 index 0000000..9594ec5 --- /dev/null +++ b/template/source/libjpeg/jconfig.h @@ -0,0 +1,45 @@ +/* jconfig.h. Generated automatically by configure. */ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#define INLINE __inline__ +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/template/source/libjpeg/jmorecfg.h b/template/source/libjpeg/jmorecfg.h new file mode 100644 index 0000000..54a7d1c --- /dev/null +++ b/template/source/libjpeg/jmorecfg.h @@ -0,0 +1,363 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/template/source/libjpeg/jpeglib.h b/template/source/libjpeg/jpeglib.h new file mode 100644 index 0000000..6febf78 --- /dev/null +++ b/template/source/libjpeg/jpeglib.h @@ -0,0 +1,1097 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); +EXTERN(void) jpeg_memory_src JPP((j_decompress_ptr cinfo, const JOCTET *buffer, size_t bufsize)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/template/source/libjpeg/jpgogc.h b/template/source/libjpeg/jpgogc.h new file mode 100644 index 0000000..33380eb --- /dev/null +++ b/template/source/libjpeg/jpgogc.h @@ -0,0 +1,29 @@ +/**************************************************************************** +* libjpeg - 6b wrapper +* +* The version of libjpeg used in libOGC has been modified to include a memory +* source data manager (jmemsrc.c). +* +* softdev November 2006 +****************************************************************************/ +#ifndef __JPGLIB__ +#define __JPGLIB__ + +#include + +typedef struct { + char *inbuffer; + char *outbuffer; + int inbufferlength; + int outbufferlength; + int width; + int height; + int num_colours; + int dct_method; + int dither_mode; + int greyscale; +} JPEGIMG; + +int JPEG_Decompress(JPEGIMG * jpgimg); + +#endif diff --git a/template/source/main.c b/template/source/main.c index 972c282..c3e8d9b 100644 --- a/template/source/main.c +++ b/template/source/main.c @@ -1,27 +1,23 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade Template Code (Minimum Requirement) ============================================*/ -#include +#include "GRRLIB/GRRLIB.h" + #include -#include -#include -#include -#include -#include + #include #include - -#include "GRRLIB/GRRLIB.h" - #include "gfx/BMfont1.h" #include "gfx/BMfont2.h" #include "gfx/BMfont3.h" #include "gfx/BMfont4.h" +#include "gfx/test_jpg.h" Mtx GXmodelView2D; @@ -35,17 +31,18 @@ int main(){ WPAD_Init(); WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR); + GRRLIB_texImg tex_test_jpg=GRRLIB_LoadTextureJPG(test_jpg); - GRRLIB_texImg tex_BMfont1=GRRLIB_LoadTexture(BMfont1); + GRRLIB_texImg tex_BMfont1=GRRLIB_LoadTexturePNG(BMfont1); GRRLIB_InitTileSet(&tex_BMfont1,32,32,32); - GRRLIB_texImg tex_BMfont2=GRRLIB_LoadTexture(BMfont2); + GRRLIB_texImg tex_BMfont2=GRRLIB_LoadTexturePNG(BMfont2); GRRLIB_InitTileSet(&tex_BMfont2,16,16,32); - GRRLIB_texImg tex_BMfont3=GRRLIB_LoadTexture(BMfont3); + GRRLIB_texImg tex_BMfont3=GRRLIB_LoadTexturePNG(BMfont3); GRRLIB_InitTileSet(&tex_BMfont3,32,32,32); - GRRLIB_texImg tex_BMfont4=GRRLIB_LoadTexture(BMfont4); + GRRLIB_texImg tex_BMfont4=GRRLIB_LoadTexturePNG(BMfont4); GRRLIB_InitTileSet(&tex_BMfont4,16,16,32); @@ -59,9 +56,12 @@ int main(){ WPAD_IR(WPAD_CHAN_0, &ir1); GRRLIB_FillScreen(0x000000FF); + + GRRLIB_DrawImg(10, 10, tex_test_jpg, 0, 1, 1, 0xFFFFFFFF); + GRRLIB_Printf(rot, 200, tex_BMfont1, 0xFFFFFFFF, 1, "X VALUE:%d",(int)ir1.sx); GRRLIB_Printf(rot, 250, tex_BMfont4, 0xFFFFFFFF, 1, "X VALUE:%d",(int)ir1.sx); - GRRLIB_Printf(rot, 300, tex_BMfont3, 0xFFFFFFFF, 1 , "X VALUE : 1"); + GRRLIB_Printf(rot, 300, tex_BMfont3, 0xFFFFFFFF, 1 , "X VALUE : %d",tex_test_jpg.w); GRRLIB_Printf(rot, 350, tex_BMfont2, 0xFFFFFFFF, 1 , "X VALUE : 1"); GRRLIB_Render();