From c0591ecb2411e51ad936268cc3868ac3b1cb1675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Gasi=C7=B9ski?= Date: Mon, 5 Aug 2024 17:54:40 +0200 Subject: [PATCH 1/2] Load textures --- assets/textures/test.png | Bin 0 -> 4337 bytes build.zig | 13 +- build.zig.zon | 4 + src/Mesh.zig | 5 +- src/shaders/shader.frag | 5 +- src/shaders/shader.vert | 5 +- src/utilities.zig | 160 +++++++++++++++---- src/vulkan_renderer.zig | 326 ++++++++++++++++++++++++++++++++++++--- 8 files changed, 462 insertions(+), 56 deletions(-) create mode 100644 assets/textures/test.png diff --git a/assets/textures/test.png b/assets/textures/test.png new file mode 100644 index 0000000000000000000000000000000000000000..72b5550af6ffaa8c6ac03dad473fbad63658306b GIT binary patch literal 4337 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 Date: Tue, 6 Aug 2024 15:54:44 +0200 Subject: [PATCH 2/2] Fix loading textures --- assets/textures/giraffe.png | Bin 0 -> 690194 bytes build.zig | 7 +- build.zig.zon | 9 +- libs/zstbi/LICENSE | 22 + libs/zstbi/README.md | 93 + libs/zstbi/build.zig | 52 + libs/zstbi/build.zig.zon | 11 + libs/zstbi/libs/stbi/stb_image.h | 7987 +++++++++++++++++++++++ libs/zstbi/libs/stbi/stb_image_resize.h | 2634 ++++++++ libs/zstbi/libs/stbi/stb_image_write.h | 1724 +++++ libs/zstbi/src/zstbi.c | 32 + libs/zstbi/src/zstbi.zig | 619 ++ profile.json | 1 + src/vulkan_renderer.zig | 60 +- 14 files changed, 13216 insertions(+), 35 deletions(-) create mode 100644 assets/textures/giraffe.png create mode 100644 libs/zstbi/LICENSE create mode 100644 libs/zstbi/README.md create mode 100644 libs/zstbi/build.zig create mode 100644 libs/zstbi/build.zig.zon create mode 100644 libs/zstbi/libs/stbi/stb_image.h create mode 100644 libs/zstbi/libs/stbi/stb_image_resize.h create mode 100644 libs/zstbi/libs/stbi/stb_image_write.h create mode 100644 libs/zstbi/src/zstbi.c create mode 100644 libs/zstbi/src/zstbi.zig create mode 100644 profile.json diff --git a/assets/textures/giraffe.png b/assets/textures/giraffe.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7e46e5f34016a48dd616a2165b7b5ed512a031 GIT binary patch literal 690194 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

-OP!YJJ(YuKDgTX7;|Z?@VfVR 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

EBQcym3cF}k4SU5?7RH?kM-aG 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%0A;quR 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 fp?(Jb+@{^5f+c-rDvG1r|Z`@ zUyuJU7GL{S^xQf9%>PqGmn;ymeCe4G6y09;M%ZI}Nk6Do{J;0FXAr|Yu}i_fw{JT> z=d6v^RQD;14C}1s7FfOc`0=qjXqHh+mm#Rlw>0nQo81x1OwLOvxD<47DXy*9@oedl zPv7k9fcJqXMh*_hv|Gnzs`YgWK@*{cP7uU|7EzM!Dr|KtD`fS}@ml^L_^{i_b zVp7^;8u$9{U0uK5)gh&>BDZ&22XWuaIlyxD?YdB3%jR>70!3%d%J@{BPDxIk#ivIV`3@@^TvYnWUc|4

8mZvCDIk& zn56e^PUt(&z@Vz`9@XN$CY6uD?j85SJ=0`Mlj@!vE4ZWXmVK%2@t$@$_ce15m+fv$ zJ`g)&a^QZYX;D3;YaiE6>sxuwEBw0CnWO4esKmQBn|Gsp80wcrD%ln>KJk?E?@0FabQeR)!8=qCP@J>YC{@V8& z@0-5T+Yc&imYLT7{>c`5{a|(f*|g@_yQ{Bkby_R(t$cpL=aVJx7Uh}t?zQ1=#ruzI66BwLwq}2LYF~2C#0>=t|IGhhpU158wUX0Ar&0guj;9H# z0_Uq{f1Cg3-lx|cef1^(<`!GrlfSUetfH>4cYXbD-hDrxMaS4zw_VL*K4!5)<*gb! z+Yg09CtN)GFZZ8Yo?4w;nFCt>v2~lh6!U|VFYB}RFL~O2WfG%=?CFdicjh18zKJcr zta-JD)gkafO3V@Gf>V|A=Tsb;C(FIa^`ZQs|2!eLPFPJB`KqYF^1^cQo?T}Qk|eL1 zOC_XoF>Knp$z`(p!SJmr(aa&uDJF)jMKX^&jf<&_uBd>8G|Rt;RO zHl;6=+)YAvAR1`@SOv96P(bI1F4L94Om;^z-ZV7rXe( zx6glRy;I@nx5Ohi0cNDdYbwthCdr)3IxsmwsGP5F;)*$@Vm`kXgvq)v>9&6m zn#An8bitJ;0xr!`as|iOp0TrkuX*;T(DA!DkJOy`3(BpptTxrU>R{ZqYSqKNhcnm= z9Qz8cw@*s-a%$m{JpOp%v&jqV(&jjJKB!?iKHqiX`IGGttIuh5?EJz%b&M-TB$n@cWMjax$#|ZzSFpju-w_kn%RJ9K$MEaYzE2VY zA8s(eJX0}a(v!XZ_oe^4KdgC@P_R>8Z?65$&1UQpI%k_1K6$P@u*2tp?2d*tS$FQ= zpWGZA9#GoqC>;}L-)zV>HDrf{b+eq+pAU!me|)>0e^BD^?(+8^etpe;^S%1Z;f__S zR+!9B`SEIX_>CO1iti7VZJ6u+d~`Q>_wmmwqiB7eCQl8=z+Wpo3#{fAyt03h_3yXQXAN#DsUh(Pkxk%>KmO6{~-ejK^rmC_)E2EZ2)-!#R`8&K+NE zb2{M0Ebj+fPfU5~DKd4@Unhf*sXhy)3Mk1v?>yxznr5+Nfr(oBOUt0E%ZsLW<{q(_ zGk^87(;sfl(VSrYe@o=XmS8X@!$VuEyVrTsGoMll{%n<9a#_kp34SJ^UnSh|WQ zf8kXWpOpHu+whV^=DnY#$G3?D&L}conO1RkO~RVC&s^f^&l7qU+RG-i%QYyU`pdDU z)b;BF)2HIwa=Qb+N30EdxXaU-VV>&O|J!nzd-oqwFfz2tpB#~Jd)tnkI}g4rak{-t zN^7sD! zdj6$6A*)w#H40>`l2Wg0N|9+Zop zXXUF8VnGEF&kbh@rhSQ68~mPVPD&w3@fA@mbTl>@SZS z{#`j3w#2qz+wKEZmlwUZlJRqoa26~)9_!)0VZ{=!sE3)nQSQeUD!-~KiHH%f+j7vL zzi*=kuCTolaCwHvkX z*rM+B`O))+2BDM>{~qpp!Zmkld*Jb>wq+}y27da))A2cL|NX<&{kzs(+@?F%Q%2>5 zI!DZ&-9K%*kJbJ9!a05VlQsW89Oln(nmXbA{}1}05udQ!$=^=y-fb=8FT3yOGwBnn zj{WwR&+G|l1uZ@Fz5HOg{QXD&|K0!3f9wCh`vs+?jmgy>nI?ttP8xwXO+rK!v<^J~ zJL&z|pP$!R_*YK*?e|#D&O2e-@!u1)`KK9GJa{O?v4Q2C&Roy_t@Y9j2KJLbZxp#% zd&E*y^uK!g?}dw}|2ljA0`8+d?J^i%cryn0&vmER6ciK+eXD5Xa>C+r6_-w3M8vXnU?uFz?#*?}6tg1$Z5JDR}I>Hs6h$T1oML{5e8P zMP4myU87y|^=f&=w?~$7`~OKzpFTaYe)*>3p{fRbY(X0XL{A({lX4AYUi#+$r|-v~ zEtsDvVY7Alx7XQ^-v7IP|Nr6XaTD^7#aB&v|MTRR7-a{QU& zWL+-S7I^;G5)-#i`(hV)KC`S@8a!W``={xVIe#P8>DT*a_Dt>De*T8U(v7?cVXO+} zJbT<1wI18IY8BUP-lrYA1LCyzZ(o+VU<#LC6zf`diNy=2usrzq=cnnl)uMgv%zEea zH$<97tdDy0{#|0v!CkqD#{{QO7r$};{l=)RH*&XI$bAp+dhqL))be%BX3Sx}-GTid z7~bXO8}=QEd*SC^B=>OT9C4d376}%m8ME1vXM_uKL~Yldwae{#>5kpIn z#I)2YvwIdb-v2-Sf79d6Mfavo*s*`FYL_L0abH4$L_6bRxs5k-Hb$*YSbO;E=IlFn z?=H;CDma(8rg4>s*=xV9+FwC7qtkV=+OG2iNCs%8xRhYCXE*00p^ z%J}AR`I^LW#vsoK_h0PCtmgQsb9jcFJ^Zm@*Sd?mwMp_4$pv+FjiI}j2}L+PD6nwi zm%9CyFTeg5XRUp}+4Oe{S4pLryx7fnud*bz|KF91zYN8ix+kc=3e;{rTh;2tC6Uc= z%%Eq<%nK&GDWR;tb~jJqioJh0f?JOzC04k*y|_W}!odkgR3FT3-z;+Ud*jFCwasR1 zL7Ho>OMf^Za52jHs_B-`6TBQfTrGc3bKpG3Y9W5%m{T@$vZq^sba$Q1Lk5k|#4TnQ zw()K;3rXLXndp3Ef9`bwrz8o}cm3`a$2$4m)y!b#75FBc?OC`dH@YLC=D112vdl|A z6pC5as9*5&Vm-%Ppy0ybE<5!X_b-lnidRb6-E0@hS8*sllzrQJ?pMg=yOI3a%(hln z%KWVu_+AR$o@Bi5$&cv@Yrpf)trO{Ut7DsbKe%aw_qmM9zNf#}6!HaWhOA<9NSepO zvgW~@;|4838-fRD|!>0W0Lmsgsf-B*F$c5?-`fd5V^6|H+rGUeZhquS;&IR~E?F&QNx1c)}FaG4rrYZvPA?4uOc1tW$*^EO_7l zdDWcFf(i5AdD^{b*HD_plJ@gXn#cU@0tdH0tU1AGKR+|}$a|f}?=ywxGpY)HIqCQ} z$UJ%5KAE}gANZOKIgTyheYwQKyLf@Ln}I;`sfq^f&d=T6HD7;8*Ze)3|Ixhu_x*yh z!p>!}&K|egcLp@hb<~{4v2>cOfY*1{zik0_AMan5`(^uoC-V~jAII14{(JHigPmzs zeVoA){rywfBjonRTWPFYx2~YNy4!!g-9gLgE?-+_9O+ETd;GCNB|XNXtKpjI9Azn; z7XK|@DkLT!jIm|V{4{^MSN2qmihq@=cc+O?{4P_g_i}k<_xJhQYp35A|E=>s`riJZ zpEY`z{(Hn}pJqAy==Y~z$CoC?tg3Ohioe;v^W(&LcM~z6C1K)!XP@tvxVm!o$ro#0 zONEQ4@36TqxIyvc597sc8K2PWs*0W?Q0;!A=5P_ z`k2HPxk8J3%w|S*GRF!VzSoGU_OMOxbgG(s*h8t7YxPyGss$p`ygWL*7T)7x;?1*P z{Q95$w|m(qH>#W#i(c2qBGA!uq9;T(>a2;p$F05l53}2SaR1R>v+$|L9cN~(JSVpO@YzE~LX0vpFZX@FmA!szJI|uP+WU*OyyncG@2uIn zPyV6_Z{AhgU;Er+uYb6=SW~-1;zZQx8!7Cep`symNOot5;?guhutvTwPQGBAg z`nipv9^0yQ{f8a4Wqq_}OJX>hm9!>HQ*&dCo?#ZV@Vw=<_Zbyd87K4Dg#F*!yq%4S zPtSlg>0yP5ROl8TZILTJ7I{296B8wZHtdbjOWdQZ<`6i^Gb!w0x59$0VxfU*-7XWi zKZ;;pzjCpL8b{$hja5c}OJdp8SZ9b_kzRMw%1^U()jH1_gU#!DbhQfmRIJ_-~G1bu-t0ouPVQ#@eSp z?>{Pg{HN*WXQBW5B6Jemk_!E<9gtwRZQVIxqQlCxBL>mB*DL=1(%tv}>-rDRu4bFO z73wQ4SQ+3UsuOip{dj9iN_A3&*pbwE$1eXkF73~7AY3kcEZxX z4$J?W@GmS>bV6wEn!2`S0XOd4pY&s9p2kI~a)U7EO2G@YoCiHRYiE^snMo#hYW3(} zbXqxqmECK`9`&V#f-c!bPk#lAF5A;3B-~R|IJaK!pS_ybXV#xret-11(5NGEqWbeQ zT~V9YpP$YAA$~rJ@0rP?Ikpp&AASCNcIu(e?>qKA>a>%s6PR2d!Ey2g^Nhf)YuCL_ ziF~&A_@Ye3od-<#GP;^p{Y=O>#Z?;l@K>5c^wk^hx8KM!i_ndJvy1Oq7KdBcr`r3$ zO}4CwCfNrT6x7x6F}&C|B_*_LpSa=y`{;Sj23GnyS`Vb1Ip6L(eDtaDB9?yPIU5sN zmG~>9Z4UIRD(=|j^?eCP+|gS-1@~G`^&BnpK3NzVTJf!CTXlIkbMo>74T{T|($qZ| zrcPRMn#t+PjrZRT&MjJ}HKSAGZD`>Kf3wN$2}gJ)&N-OHtS7l@Rf87Ssz*i*oUF&( zJW4sXly>aYjRk>K^tlDHq>=dstcSsk(oK z)1z0sbHqQ)JLfCHpnFHWjOia3dcG!HbJj>Yz2o44tW|IHr=^EzzOyoTw;@8O?^jZBnqN&? zaeTb&YT8`@|; ztIYpQ>G9kDzU=*3y^n?APfSCd-TP)f!hQR7V)ccy!a4$rA2Y>w1c-^rA=T7to1p}X<=1IMO`27Q^%IY&TA zWf_yC!GQ-d%D&w@{#Er^vR_sYWMCI%wK{m<(5~})y{(*C8Ujt_&mBHL=_Jd8&&j9v zF*{7PoH=L1`ZKI{pINNx)ULN4T%)SANxW!5DqopF4cDEgQ~&+k`M)K!xQTO){rjIA zKb&Ek@lH1CvHIdp#izDwKF;VlW|5WgS|PRZX;+T!{-4jJYkr^oUh(l0m+#ep(_-Qu zd>k4Wo780`_~lCGJUd@LhyUO6gnM?q%RhP_6K42evhURlcJI#<)&Eom2(3=KY_f2b zhhq%Ks!49A_s^a!eW&hE!|vU?UF7?(dUi)X?VRgZR6KD-uyTCG=LGAw|G#Jk&0G9% zXJ5m42?oozh4-${>i_fibIRY41HW%1$=FX9Ilj5pqBQmy=bt%V*6UT6`oo1Sp0B)` zx^MqR{!*FaAxF<_pUy01*s002YLU3tfv?I-Cd^pI`2G9$6nw7EOp)@2MNZ)i!(f>@8={{$<|wTlRpzxo*F8t`chz&dE_K=+ku;0PZpQovOe(5#WvvsDY|M>s^E5Ak;llbf6J++^?UOyGezhB4A*Z*C-i$Y8U^>{ro&OzveOTR?pAv))ld= zn7ID%%bO*CCjY)?$$mUjx>z8AuPb5NlH=ElZ5fY62-%-~%soe7_27c=L^?BZC$;}`kjukkkpg%xid zujuQ>T|1O^@XX4iW@5}M>c2)jaN}r9+-@Bu@VKM%%^lVUlesSOu*}du^7H2*9ff(@ z1!`8#Dt-0-^AWrI_S09|KR>wk^p)A4Uz@ML^0bjT`FN9C;qE{Oz4b9#OAqXD7u@sw zrOd8?ulkp^t=$^2MK>aa-$&}4&xd14FRJcTw{Jcwl%DRr=!d>E&t1jB`icsMWS;J$ zOpE6^O}O*;=4Ml|ZdL||*UfuV)=X2~=A2=F^5_UavW1{O7vVi%XHb~!MATx=PZjf3fgK`Nh&`)w5Y+5 zZ%$=JI)i@GgGq-LWj zZF9UXn6PL{lNnoSY;$qn@87>m<|ZFquj4JU>d3XX29nI0+8(Y=b+;lojxC(Qa%ADI znr$&M?{pb_+Mb65Tv)!AGmrgA;CtJ}OL`b@MOvJF7+G;P@B+t#XH8RNd^jw8z5d>_ z)(|_gS%Tr+MPB9`wp;Zg*bVd&Wf{~0u5+D}4}Z0VkAeS_)stk{T7W-|TDle@`X_Ra zM7>(eet^|Ia(jD2-K-U#QhC-GPvA4C>Nm`ox!`?ZXrpLKW8I7Z4e#e$HTvc`vm~T% zj7XTZ>`GhG-;I16$z}{9Tnsx6Bc3OiZr!kA5mP(+XF&#ztXnUwpPc;3tUl>qaKgjs z3=Ne+FRGQY2AhQ)_)%I*Ef{2 zJ(``L&~xzTO|JFpC>`Pt@fsp2oYiyFvE#(I*MzIhu;!=l%_p zj$^r|`h0?u(`M(@u`HdIi{^QEZn_c@%FiS8y5P-&&m9rDGM|t9utja|P`KikJ2=c&tsmSbVKXrrDxm*5OMr zVvJ1nF_q`HKTq2>>%_I3d7N*Tex9=R*-xJ}Hy&S(c(m~m<9Qc0f7O4Vr?J>Dg=}D$ zG=JB$lDUs(Iep$F_wB`RL59Oej~3hPuIRh}_uc%De~x;`#O`$oG*$6`?C?EkwSh15 z$({?a&mq-_ss=eE}}nn$FQAM~~g3H4q4I_Fno&R2#z z_wF6CRB7wFrX0G@In_hdNH*T)UCdqUCV`%b>^9$pWUUU&yl~CwesHMhp6?NQVg}b1 z2?+Tqt<1N6eqe`ta2wYjgVyZ!f*zqJO%67Lr5D0X@AjXYbTpP@M$&`xtN|RC9A@;i zne)w&ZMwE9v#_#~(^mG4WqYAQ!r`b4-&tIT4VL`Y_~v*#-8s8=o6_}`A2F)~JlX#Q zUXXt8t0)l?I_azg_xI&X_wzsIcrQ39V$#Ly#{`egGhC$EZYKIzc1GfhTz+w(33sL* zVpTl9Y~i*=fs+^gx_R^F$IUPQT(p(b^-`=@^jxm5ndQTpa>t$t5gdk{OTH~N4E-jV zyyJe}7@e)>87-lH!&e?HuJr2gOks9AG2gXs3ehU;KLT9 zWn;bnKz{vi{~zCW$3J{}`uYS{PEBs6I7i$6516hADwvf!9aR2&^m2ui|Kkc9Muzyx zKRcNx?BD({eam(mhcnez`1WSC$5o2&nR0vE(WH$I_rL%6@iBSTCdLDK+YcYU%bS;% zccE0aR-V1(N#nK^kNad)AAWB55^_L7{6poZIq(19VLF~3`i_I^NmKn#L%C3vO|9DT z37;80UpZuZ|6R@R6HH7gqOHyoK4>x+tao|hdEk%4k2TK)HXogSmZ^V{#-zRTiu;62 z6e4ClWnk|6#;WkEHgZx!*kzLyp^O>4={#b-tZT#qoDOl!tcrhJZZ3MWIJA^e(d8Cf za>G`s)mOP5C%MFKeemzX?#Pu))1oyZ9bXGNalA2?E_k*uq;sMC$yU2K{oDo1IX4_! zw>~EDL8r6O)4lGJE8ZTHSQDo0GwIvQoSh4P9}8gmd))q?;ZDVv`1r*uJRaK4J1lSi z$K&`(KCw6_4vu4iqN=~@SlFGVk1(|-Hl)Y|6-Yc&oa3OWD)25@)pAer3a(XJ+=?Dw z&h0p`O7Y>cr#C@Pt2q3z-Tn{bx!o?erz@W9_vBYqRN`a}nr|B_a@=vTru2Eo~(w{DrCyA9%W+7hHRfJsl^2%n6PWlKuJJ9F zz39O?|7H1&4RgQLsNL;<%n}|gTq18_F}XnNQY-5et%a+EPCpfzY`4Qj;{C$|p6-qu z4c>R|-D6WwOy-Z^mXGjpxMugDcF`O6jr(6%2r+Ki^Hk|v>_%S)P1iFW8~hI&1n`%w zV>r*uaaz=pVM((6JpV;`4V!;WE}ncoI-ZH+dGb64JFzSBs?qhWrekVX5lfX2c=2W#$kI=?2~@VQ;fE;>hX&gB)W*nY?M z-=1ARyF7`bUU=ii9z95aO~t>>1L+)_E(pj6h8H{O6Yo6 zmn2_~O_X*Glho9p30mt4H;Nj(3cp~hA0u*PYG&?|-!pH;T#7o8EUoxId>It&co*&9^r((7zL z|FsB>d7y66_362?(X%4A&hxi4*D9AqFVu>Oi+l9*vv|eVU%LB#KC_Oo+s|a7`kRMI zjAss~f#Sm6gID}B#6=r-F>*gSDK=O=SPHEgx$uZbbwj-O1pB;_P{c%i&$Nan_yr54uK%>rD% z>lo@Q92RQ5Dce1PBkaMPrdOWP9)7wk=Ohlao=eORTqPCN|Ds%$WjTw`xx-n_PFyQC z@pQ`HEq3DQxR4#UowsI3*<`iqqq}q-%sJToT>QuT|G)lEjBC;=+<%who|8es?*ew! z(+T!34Bl8*u&pps`FXh|cl+^GD+90a&fUI=CB0#u+a+Cw_DMo>3?D7KGB;yA6%VG|Td%V)W#+SKg))Yb z!hPMVj<0(!d|<*exokz2_R^Hl7q)lHF~8VKjzue0X%(*H5|ZU{ zxUyima#pR6+NbB1O@^9`vqH6huBoqHH`B&A2Q&1 z(I)r$t5od<{k{ACa^~JWP|@7(+rDcZL)e4k{qh^$Zj( z_}1(O2BSMY|NF0G^38hvsMwyDC#s)e`iGv00?}4xNeR6@2YaOWOmnI)g`v5CRrYsV*s@2!0CcKW2nAzU$BmwpQ{wF*t>a&9e?V=LN`(0ACC zSHP|AW8JY0$qRSYZxP$%FUz^-`-4d)4id}}R@>)uNiF*t@g03H$3_ zS)O35PT{PWb6g@>Ws>*-$@4G&xBvb8!7k&dfunBfgGSTB7@isN{LggHid;KT!OqCW z@7Tb}muIo0zL=qRQf?+g*1Xs~2lDGaOaJ+`egEO7N4ZaIYAR#2|r=%AiCA=Rt983FMyG?N?PlKNT0x-~nwT|2_nLP-TB&rSSCUuNA}m)pr~bvQV+`KW%5huBzP$bHkA-q~A4%KXyjAY;4s|WN=QncYKm7fE-`QVyiq=D!4ezVo z>}tHjxZ_aDwi(L=SLs~%F1zE2!Q{p@FDhmqW%~Yodx-6KE^+;Nj~_ndlYd|5b@1ff zH1Ffl8h31RR$SU}B2@f~xlYFo6Vp>~d%&UEh& z3EXA%)xF{Q_YcgJ^QwxlPS_f=c-_2-CuVM}*cP=Ya?OFI2m0;zxL+@2xpP%iPd_dp z!TQeMFTy>SBTRIswKj0ueh6JqHf@u_HYN$RV}>s{Z^yEq2c17(we!%~zp?_i9DXgx zd(Tq2{{3&hKF02&T)Xr7U*DDv5#8Eo;_K`*p|n}+g~W=cbN5YrS9B>cgf~2C;O~)q z%jXb$S!Cg%RS)+nEI1_D=3GwB^CdNQ*L6gNn_=QPi%2^5i7Yt123#HZ;Z^u_pEf`nRu*xpOr z8;&F?*|Js1XPO+@d7){_yS?e2d#$sUR@C#P$rUAvJ-hYzYV$p-d|j(ETb({Em@NE! z#g5!vVjERoY}9(9$?!SjtCgdny{VsS+?V_lKV+IY`IOqfo@p#*%3a~4d$85X-sgh^ zgT)Nb#SvRxlto)C7IwH{r~s%hm&p!Bztk#*w{GqOPyi7z;`a%!BC`?<(1T(${sgoqrMBF z{Ivhl*LNowv_N;q}nN@JM{ z1nwp3OPt9#u!h$`p8M~QDSM9R%B^`X!%{xskRunjo=0~BC!1=<|C!q#I5`x${{7Kb zqNgN%@?cAsC8JDKbw;hg^`4KM&xK-SxkSF`SY&vYZHy_{G@+E^P(w++hgd{|+C6Ee z7_Uuhg{S0fRxyz%VYbty3q6cXleuRl5+oZHEV1Hl zgQ17s0o9xDodWpxePsKPxUXB6kH=BKBwzZBt23kR*A2HCIQi7L4zRU}aOY;EHJOPV zx9ny%Ua7IcqPj1C|8LW}|G)2pHk2)NZD}s-+@$3pARuRV#CA?$MR`W3)yl8$nIC^X zvBU8HFokKlQb zBryHOL`H@k`}ZHedlz&D<%YX?2b;GFCHMS_*v|jrw{7GuPB9@<_UFEfRE|F}cW+A$ zTC>&Dqhj70d$A95t@iz~T^Ti>k=s7~38zKcTb7>|^D=BytXY^pullX|LCM~4{!5XB zu)T+KicX&oj5*LMFro33{QB#E_D(dCn#pezVkgPIqj%5V53+N#G*37IQwAN00v7Yi!T z&N0GtHNwpln-Hu~^xxgqhCK(-*E< zyl`vl1g6v-_FJwQ)PnAIt5a%RekkM0S*AJ08UDEnd~)5p+BC9XWVXn%N4#ZBe=w(| zf2z#+#J$ZI#TFY>?AX2ZUdB>`j9p^S#m^sDa^P@U^FH~D{=xzd+k!+V#4yMOs2)$+ z>Eq}TIc>#kqsECY>UvJ8bvBn)YIt#mie9*tv^8o$ZnVbI4fl`l^jI)~E3Ts8*+ZE= zt$(Gli}R!;-fy`3{=#?LpNFz%@3fhsX*n%uQhM28=!V(s*$(Vf*bzHKly{I%_s0ybI7x>sk8T$z}D9 z1?7R_s%I<`uZYRDf3I{aE1#sP;mD(rt~2NBhB+;6J10DdIn;itI(E|A3{BBj6K`$# zwa;CA&%^FTUOtw``o5}2I18-Uk|Hcsaj&U0j6pDxcj2sewmijCrffb@W1V*KqtDuX z8eL!BJPG~Q{H&ElydlWQR)0==#R2!k`^nE7awIK|IDFDr>F3jUv;0?Ns(reX%{R+= znQt~+C=&P@Ad#FPm(ux))2C3+=(oh4?T$Olx9Q7$|8{wAhC*ut=Yj>sY{>!#Q)8Ss zF6mypbtpspnnBy<&8BhtYC50m$36a9zTa`T&GD+eZZmJ%NV6Z9qvdz>`X-AP`PRp) zr0QEgZWaE&|I7E9wI5j+Y03%K7zTA+LWunc?5-%qq9=mSA&* zc-^867nhgRvuG~fQ(mmM#3bEx4im$tX{|puo)t0XV@o4t-?2=e_uDj<{PoLJ?(sQM>_xJDWFSYYagdgpcX=7}% zo)XkxIrYk}t=Bf3J5cHH>BKFA4GZI?C7F*~7N>}Zvp;i-tGxC8`;9Ucv-X0!?THH6 zyHcC4X0fvO-OXb^uyAE`fgaWO%GGI>;>DFyTS8b{L_f@7 z_6lm%5xy_dq!n>Y;>Sw{Cr{192b1k*o$ecQ0G@@y|`xZQuD_xwi$6fodB+Gc=`sA)w&SZeqoVgV~Ndw z%Nr%X3;1(iR%)FV@^$W<7ofUomC~*9>j#?;7$oz&d;eb3a@C7E8Q!`6&ut^FZI^z2 zox{fB`GaEtn*6p0n>;_|o9n24ZQt2+_{NRA1;I)U0ZU8HHSWATb^8AoGtO`Q{PX$7 zx6j}Iyi;Dk*5U1yvgf}ApIc7u^gVXIh%aaR?Jdt-Cup+oT%4eF`isn(tvB9(|6+HZ zPhmr;#4bjij1@N=_P;Cpy~X!fgn*Upwd#f6)->nF&x=ticFdgBw#_of^S~tT2+aektKuKs+i>?5geo(muEHFL`x)oxn7INR2K`p(eAD+V);t9<<5 zzjvPc&!6SvNua z#yMrO%QTser&oOb7G3lGZaL^m=X2MlN7z;~wm+6ooxdNnh~$n%Y5yNp?GMZMy?+04 zUo8{3=3FlJxaNtO*-mDMm?fGk7qq{6_KfZQy}jOzfnSbY6W+<>QqYj9WaTksuk(T# z(bvw(->P|7lcO|K{d#fB{c3;P%$@oLWqhCB3pvR(a(-@jSj@o6q{{bsLCUfo8~!DC z&)m!BlR9HRyFR|A-bdkc@kC~J!v$wArp3PI+Z)M=VtMSjX^4+o_g)%P82MkyQcU{nzZw_B;x@y&-vRjMSWv>ZK;f@et z-S_v~ZILO}{4pY1D@tL(<;e7*GL zAJ=a0MP8Ho9Iuy#%za++?^vPDDh64dbt{rommV?r_92*oi;4A$gtIR5!Bzb_oV$G&^a+`4^(bRWwhXa)^xd%f0OT=Ms3ccOw0$Ye|-3JKUeNRE621B zxpMREA9w^>n?zX8EIHV$eRx&gMHAkyRZ2o= z&eOB;!nK6`uLDF<{zim`E)afw=zcTt zMaAUxvaXK0!7S${R;bN6Y+&)_H(%~;Aq!4MRqrWFefdNt&J>y)JDqdavuxKn$B!2t z`I{#05Y4h-);rn9vJnYyLPA~7sJ~yxUTvWk>f|-`T6={|=R@^Q+biFXoZB>0FF?j7 z;`h_%miy-Af6wqeS(3!}z0bBw^3hf!MwMqX-{#-(t0`0J5RPxQzw^DaJ65LhlRV=M z|1Ng*f3{QaC^O$NjNbm(f1ll%>jnJY4uyJ;W)|*>JT_&{{|hxqoHd+pEw5dev(!{} zdw^=!BA3fLh1;x-Z@*vPe*e$2@`}H|OmA&t73aE}l3@G$iNybTlU6MMcwM^w?a#j( zKW^U@{~20&J>$&ji%M?0ush+bIS+H0^`fJ3@$t*Ej`Q39Y3P@?R|_pUCXtt)zwv%) z;=_wKn~yUZuw38&;g@2=S?w#u3JGzh=Z`PHD*OB7BPm7(8zaUi>(2`RJAUu`jT6FO zWn5-#4?1)Iwehi|e?Ff$^0(;ey+6N>zWpt*<*36G1wS>RTs!-6J7KoZ2h~nn%$7Z0 zm=L~_sWkNAw_j{Q0T)Wk%bUMlef{Jq-?IyE%~ni4w9R3m*oS+I1#DDm>;f+xFZ8ip zYIriy?!w`vM;2uoehYb6_x*5xgx>TB9nZ7>54ZDs?)?Afj|_jgIitb^0Vk)GOrfEN zEf*Dizsr%$=inV`%GuFzXhPuGT8Xxjd?t@KjAAnwg1p|8?G~9}=G(mP^@ApX$rDnn zC0;&n@a9zBbG&T9zQ^0vGRM}={#DT4C}DgJw8dkk$Qs?twh!hgo=+{!sYLl+M=J-|zrJJt-lP5X zzl1F$)~%cO`07>eB&{CiWApZTiwcG7zxZ0H(mQdN-o+48F<)*q3%j`cNrIE!XU;O{ zWu79EF-t6W#SL*+#tOcZu9uEzEMa)=5WW3{dKP!*0|6(ebC$=Kz2@+FEE8P7q0z;Z zo}O;dcgwzOm)Ga?MX%D&$BO(oyhis#H2dGDI*^PR}5CBI9IUhEcJDwKKd9OH@^8P6323o>lG z9M*mHcWo&zTwl9;{CbP+_lHWs>Cu>%G?6~CVyy=c5CMo+QDL0)M8 zs#OVVk8VhF57-#4k;s<>=Y(Dv&>a_L0lHX{p37yZ0Xv!6Gv zyvS;>pz*t$T0>sPRX5wjJG>8qn0*cyE(j1^ zBYj}0gXp=ldE1?XH3~u(=wyFbVDsMgz+J~;g?pEKich)arWvbC+}hU4b7&e9&-2%& zp%14z#fI&$sc+krRajlyd-kpD9xLvh|4XUxO-+SzF(jlt?QTRo@#{!p`f@y~;iOMZ*bX=XJv zPRm_p`oO9BQfAdh{X~X8?#F7*&1q&^zU}|?RcFr346(a#_;Jk5ZKk)j*={ zi4lMMi+#`ObbgOunXj}WK!o*_f>C%F>#u$7p!`RxEn`*ee0qh~Wc@D&8<)geTl!eePQ0P_@SyMp z@%8eL<(djFiJdr-^ZEW~ulhRv3;ide-u1oj{8Mx0YiUhdu*~PnKdt6&X6w7Y{c+0l zvr#Ij-gYRlJWanC3msDearC zAOA3X|1aLSy>;EISBGc3Vr6u2I&gD?f1E=$Q=6@QhW3-^e>*upnCvt87pDEDe)Vrt zd4Gljmw&8kmhF5d)66iX;lyGVBfU?Ri%fZ#&1Unyd;fl8gw7<_pf~Z;mwIqYYNq;k zMonL}-cIYbFUEYgqQg)Sf)HSj1Zv`}*swUyrs&>xgxW+_`t>4(K)?m)PJ(a*R6XRJcMHYIsO! zvV9G_X`8;}$h?Y{uISs_BIZy08op%a@o!x>@*d1-3}RY3Nn>iubfrvHi`9zVO(D;E zTaB-X?~5|oz-ZBNzFWX0Q*4 zOSKH!mfY^t%a3w)9{TX1;q_gyJgJX4wSD>b_8pae|8c|4>lc|gJ7&3Dh@BpG!JV@J=K zF2dVm`2(j!T+2;5{iX4cZ0kdMpNPlV=f~zxHjoJos6Y0t{@s25M()opy6FxRyIov=sU5tjcJBNYy+!>uia3g6 zu9wb~<6zfOcyLh0Hhs~87HI~q&?FhPo~i?N_f>s4mWs?uYpvUV+(3po;A7<1nH7rM zy0JUA9Rpn>d<=@d z1v<&TGY;TxK5de+r+C9c`@8I1b#~j;8k!9&jwLk3YMj+h^!>Kb>z&RWmowbl{H@6h z2co!-x(b{~mVEtSLHrbEhW6)AcbGCt3K;l*`Mjj&pWGY`motxhIe4DlFWh2hta6RN z`;@ci>%-33SqD27wH=c+<~85Vw<(~a@GDn%xcHoc=9CLWg1lP>#yUiK1V9H}-k!_U;7V$IuLyZfPoI0Psyz)Hx(NuQ9%ByzszR&5J z^*&l|$&>CnIhLcvZ;aR*Y;N{9rmSH)ntSZ^Sxff*<4-ANx?q$cWe7*3v zVf*@fN!x21F0<|bb#?uR_5bJYd7dx#Ze!GZRfR(muRQzr{<~}vxPQySdBsab#JFF5 z+_!V*L6e>(%7RBW75(~a;=6K@^yELgckeFo*O~4eVY@83>rjPD?9!HZ4<9PB{PJB9 zVZL&c{!*V^%o|TlTk+)blu2iwPI3`g?6Gi)(Co8pv(K`*I_|r(vo!5fT>6tL0p=f@ zLJZERFFSPfDC;|OX%pYcTHPC)Vy1u=WB%;T=6zdpsi5O}e{tXJ*|SUHJv9TTs)j0h zbBbx4N}KcG&}Yr1?J*aBN*@=zt-D|e!*{-GRvGDmT8sx(7nR0{)TK2w8_zOtVc+xo z!ez%P{EhGAwC_Y^zeqgt?VH@Qq?QLV=k@ghIlNp%l7BpW%_GD3IRRky8Py*lM$Mg9K?46~0WIiBOLu3CR; z#r4?hf!Z!>?iss(4;3(6yNatcmYIQ5{hBGyiGA9Ad)jwTc{=gH9TBZv7yWYI9P@uy zdyB38%fF7f4D1!h5;wWbFJ@~y&Uog3j_Q+*3a>W4t<~Lj@H{KSv)iYhpRFu4`!BPR z;noq4Q_sVu8SZ$LzV+ITw`C^gKEhmzi8DQKJGtHV=jmJX{Z6_r>t&Td76!ZYr$2j| zWVcUdzWDKGzO(ijy*JYh*}~+mP5<%l#2U@hLP1kA*9ki<*?C@~sxIiN`JdU>^2H+3 zA2FB+8oXt``)`Kh^#Aji8D^|Kc}?I)&zril{r3C!{rojE>h&7$lXZO4TnuXNInOU< z{#bAyU6ax0Zc>Bo{kf4cwrd(B$KfBpYI|NphWFlpgz{fPeFpGUsT|2wmP|8!w#|Jy4W9^}{F z&-`Q5qSf{KY3RQ_x8$48{t#CG5s};Rcb^!Xc&Hrw)JU(OJL8nyX~bZ<7Oa^tV(jx%6a@ZRPw;3d=;} zH(z6l6q2)dc9d-Y+~=~DW#PMPtXjJt1b9snH%tHUq2ONYJy-r?{gXfM*l>J-=6bs) zzs=om*nihK=9Tg%T5iwL1P%TT&k|U;OD_JH_q1rH%Nm~rySzMCUA$+lp;@pk=0VQR zBa2oR{JrdMQ(e}!Nh4q?tJ&=8J9pw9zd9U_DfgYzf9l3f{G<3%HXoLO` z-Pi4ct292oI;&k$+s^;~{^LJ?WJ+TbwpThtYE+~@oXgtmzWx5goUJU)?vWZ(S`XE2 zKl=GJcgb(rJ(~l99(?;I7aF?wbyd&fmd~F{!yXn#tUsT)wwdeIucp%l@l_>`k^5Jz zTD;2sxr~{C>a^3UX0v(4d}lYET9&!tZeH_?>kXSUHpJ*`yq&9{a{T9J(_;(UCuucE zE6*se`1r??p=FibR!yI@LvP>mN<7v$Ep$!LHexE*EuRf->!L%$ckJHn8W^;{Qp8l| z7oQhbk8}Uitj=YbiF2Jp&3DxAIG(qi`7zV2TPD|EWHvqEY5JIO{X{^^s|6xVAFd>? z>SYvW@)Dh}&^Kw8$(GFzVpwDa9z0BBPL~yX%d~1j#rJp2dgrcdENL;7T76YW{@(uM z-OtYlYV0}}mi_0)J9m-L#?{mH55<@))DSV7&0ca>ZhhR|Bd@QozwlkQEzu{bFFZUP zG(84dFSX{F#g`Y~tR-v{cV-lRd^6|8@87a{`S~CI{k8T`yl4h$xNW$b*Rl06V`!-7 z!#{t2e}A!?FLmLCugsx^l9q`&vshPc@~Qn9`nOoS{84ZFy9MMxS5_DHcYG}OS6caSL%}|O*E=Z$5G2!gNM%DTE zCmTFWzgBtfX!`T{ds;Q;SAX7FX7{YP(C+!U=N~Kuto<()hXwzuvTL_@JMT8F=lsDd z7U}D+r$?*}TiLoo$2)6hBG2u&W}&BJ)%HkDe!FPGLrbPro0=vG9m|NwRvsk}5;N>%iALjq! z#DrWI9(a(r_T-Vu;`5c<$6OhDR?g)yyqRjZradvhSn_ekZNHadk$p2k2_0nM<<+;+DhMAiRzshaklQ_^S9q{AIpTgmr=EAwSP|E<^S*A`{U|t2QL3` zRdzqMpGE1ZgJaGAw9Sr^tJ;45l`AhVUzz{m>ub=yMbj369lLjXi(Xik30gG4eD2Zx ze^2+TPF(2G-*d%t{?|Y90Ttz2*8kxynJY8*zsiR%GClSC?whC{i)T3f?70DdOtFHJ z{Bo_FpU?do#rl13e0H$3|5syQyR6^f{`=tDeHwLds?|=Vd+;?Z5j5}>W_i9NV*cZ! zpSg8rah=Q9v!`m_pVPi#EVL9M%*oU*<-#hfs;iOy}B-ip^&clQV8H^oTubte00WbWtFjj(&onC_#JptLW(<@?c;iO>Eei+-xS zV0XRYV0zQB;LbX`<2Aj4+HZfHk@;ac;o+6%^0%+8eEX$#{;h~dGNPJ4^n{~78^=nC zMcrHFbb$HFzhJEh>Fb>0^Gdy*O$~Z!c{S?r<--+MnC06~v#1uQ1+KZaJgbmFUpf0^ z)a(|;WYs-f_uid2Fo{FX#J9QDTqg9+XBG3j(BLP{;9O?n7#A$k@L@v&pz(Q@%ezDvSPRO zALTxWpBqI}TQB-t*vseCE+h9O>+<&_d{U(uhlRM()1U9ywd)Y*?9KP}f3@eV*ALK- zGD&59YcuD&z=MYL4f9N-l4kcaAFyrz{rl|ndB<{UIv0N2`t0rUkIyB+y<%5oeh)e6 zpG>dQlo~3ZDhBn`sxf^&%x|yK`sn%j`N5?VU*{t{Ve67NrzKV%;6B(V z7O!B$_#<$?y^CGr+*LxdT3jJFPc-kj(Eej)@#J&oId2~b?ktsAp7FEN+JSG+oK;D+ zdNYnGCpiB(`EveGJ7wm=Pw#C+9iG-3A5-ydztJqE`O!<$L+`+Y0FKVjU%6IqYZPL7 zY_M>O(Blh>*LnHeS|snT@jRjV!K^7v8`$p7TNUl+FVTGI*Ug)ei<*v~3X8mA5g$Kc z@4dsa0!Qv96=*H>(Gy;Ml`Aw=x!l_fO^?5Q6N|l`xHT$~ca@u6&Pw)wpFRnN#yVtmKP~EfeOub#*~Z(s7feLY zoj)Oa&_{WTVs3ky<86(pOU(F$g*b%!+KoN<7@mYB1amjDIj>M@mz%XqV}*RUbb-sm zbm?pTw+OR)OAz{U_9W+;pMPu5yKB58M)to`54?owJP2#ENz$~GrQfo z;{1hj*{^EaLZNr^-Wl@AiY+unB<%c-o@x+`zv&72L-c_uO1 zFiecS-pH9$!||+f!KQm5e5nf!B#SmOFeJ-Fg|;o2GiiODjDmterq_j8+x))!hidp- zmgsYDs^nj*F0uHq%;5z~mK>SKc+YFox9+Tm=MEP0y_e|u`b6uX<%~%Q=aP7)q#Zl_ zM{UBMn}P?z&#iFcY6~g#-KE*TCI0O53&HjFp{jq*_sE>F+1gjjcg4>1`@CN<|K|O) zd;k46%fBh9GiNx&UYDKpN?0K;Ya!FwM&Hnco7XfwdpvjYy^~#XPd{OAv$-Cpn-T-x z=dH^BZOd6Y7*bd^bDexRrG@YHwv3hcr~b8ey5_~>_a&3r^?&jBXn=NsGx}_qSM_i4t=bZ;4}1bWIi<2TJ(~@#P58TF z`SlsIIsY~`vZpCBXL7VS*~?frFwEc0zv#q^J*(soPOsd*|EvzrOP6^G4;hb0_?$P| z$hFthouPxF`I=4b{wb_;(qFU-*4ih`%HYis*WU70=ym$@AKzxb|9IB?{)1PqxYEy` zJ2-=(J6Evp+w{{6ziul3RH+c_Gpv5g$qm}iu-<$gL&Nfq-ENzLs$Ci_{gn)vnfH9J z`1U4p(b}Wu-9(?VHWRG>DSG`|`O!1T?swg^(62vzcX@uvtOn)W%*#u3JZ2Y%d*o zz3YfwM9J1%?)NLFTZfh0-gflpQP(6lmy0`X4)ie`FyN8+Z5P_MJku%m`itMTx0W4x zH>;|B`sq|Ijo5$(aob9hoPIcb*X?4`Ysd=H`t#+oKPN+^-t-;&_W3n+8d|P=EfpHN zbkz<4rlnd1KXZEfQ)>(mX;(?B%|GDW1jeCa;(!z_fUt&;l_@wTYGj&zpBP%t)~D z{2=?+R&C}?wyq8HjszOJO?uQ&XpzMK&@H|%4) z`}qA2A%%lXhZ#5jH2H74&i?cJliOuyX8-;xxBISMX5kMX?uPVpdhTniBUU&qj17sH zyLH2{R4Xf~$yZ;r+pb!rv}~?;XW`cS?-xo;l5>eWd9L5EF8*AAg^X~mUf0|xbCql1 zZ@QQNR(P}7*wLonv9NKKj$w~-kL8z@m;Z{i1m4YLJFw@j!T;Yj6VI(bUc-C#zWDR4 zHD`o>EH3Rg%)O`oQMudog%xW;Lzg~RXAis6dGFsGK_T}o47ECC35}XUjsH{NQ0fCx}l-w`Z!gzaGbuB|fF1$5yoS_pIXnxI@N{mFLsrZpQ?<64wLD zYBPO97q9i6;^oB2m%)8p=7H|2ZLUi-7Vg_${$P@`n9#8Zp2r;TWyDISu1XKgDA;`S zLA!jNLujZ(8)JHU`ifOt-*5Bgy?d|FqBMKQuC_-qk1d=uB{ePyADfsw%Pr)psD$&c z*~MZ(TsmU9b3O;Ga@j7Q@Zf>YCI|0BQT>1G`nN6pR~z*3+JvCS;%Sq9{y%tccFxI( zF_BH-Y;$wJ2|DzsXm8$R9$V`7_Oo@>#qNKT|LuzVvMyX@vL~A|v%?PNcX^v%syOS; z>zFa)kc?nT$UGJ6*mED5eTC_^({oV5Wdwnk_Y`^WODf%v1-a(#^eM@fl(IiF- zgT=3{K--gYv#+$v3LQMSX5mibClLn{6H56tkNbU`9VI99{i@Z$vuD$~RXh#mpFerD z!BB>eJtiiGO`y@R%|w0KffBoBL$=K~dBmp|+uXaGxc@Fgn+$(~NZD*t&Zl2>RhG*Y zS=qhf73*}-5;D*X2n$hsAH=yd$U!>e^5XZ=5=$>?^B%0cusdPe#ZqtYl**>JS&~)D zckb?+w<%79b=z;=p!CkL?Yx&<4rDd2IWs{lB~?w>?eCx3_LnJ5PcJi<-8Nmfe*MBK z=7UBadIdM$2EOOl_{^lE`p_<`@x+NL!&P4I_@mdDdmoszt*LzS48P@#qDH5T-`tX$ z{L*C4y4+|9^*Ki^kEetvPG#C!y{?I^UHH6G!AlJrt0hdw8zyZPTj|5#Eb5o7)3Y#) z>DhIrXRF%89^7&=;(I8=DT41`|M(k z&;Nh3Uh;hBo?DEUvpD$XtbX?YishW!<$rcPJ?I+$wLdbVFsPjC2}9V|6O))WpOpCg zk|ozWp{cdehegPHEyFR7C7G-Sjq9>6nE1sA=@`5bc&okf?mTv;^NknWGCN!rd1Tzp zRSxu1d}7G>{c7d$8o^H*E+>D>9b;scOW>9=K3Mo^i!Im07Y_wuq~5(e{B81&YL^8K z@2@{U_buquk@&p}bPHDfbm>v~Us|Le{cCT5k4{U<%gf21--~xoXL3)_{r7vJ#uEKG zM;d~87%I+k+^>4x==#4>N^CB3uf*c)`pVMI_51%x#n*f_-B&Xcx!nf2I{5{NX|KRug{l_m~7FL_gnU@bb1@!m#_aE<;-(PssruARSvtKJu+RvC@ zQBlp15OMG)C&TARhK9bI4eqSX78YL?Mcb$UYdiRG=c`DWnz!n%uxgJbb z{a^L}md@#>Yb-ZIRd2lKe-M*oG;>aXaqWVq>!+_@P<$?S(bUkDKkjZack!d?tP;Wx<{UW_ z;r%>&iqmS-2=xVAh?hLwY2ZYusn6?LsJ-*0s`KFGFcBrdUOYHTF zrW;aHx94YlvE9m`8p(Bz`_G5N{C*x2LVk&NcQfqsQ4_YQsrlt{Wm56G5{7RlPCt55 z`Jw*xbF=fOE?oDHVqIL|n=)xZk(Kc6x8I&@o$22f!yvyo?a}}ANXA^>9oID`q%#V9 zeAB$+m-^C{cb*kf?sYdv*54C3A%A^oh}woZJ0Ew(E zn~x+&J@#z99e#br*|Z2<^MF;(!ZSq0Vz0N=hFWLsHT&{UYWaee`0k_yi7Qg<_xLpx z8mOO|nJT&U@xv8Q^47K{taCWD^d@XAK+k=&N6*nxhOeTk>QL5Jr`y{=-PYOW`3wxJuX64G|M&gJ<@SF$ z+Yd9kWtOaMx^%qGbCtq{wQnz$#IM?3He<=W_vintJa8dO+T~Q+^K)}=@ITR|z|}tq)IVQr358NMGTmoKnlRLeA)+z~71cvevqWhJvcm@83^s z;+bo9L+({TukU4%+F)f-p;hlMl*@jyai67sG?Bb{AFIWG!d->^L@g$X!_}$r-a{bMFA3T1XT*3G5-MbY` zbJ8Ppo^7~r<@q@+nOCwx%h&CT(p|V!DUH2h+uDU8d=0CvL{4k+YMZxC3C|0*h4LkCjw?UJ&0HqC<>f>b&XyE)DTc=%C33GX zG?((6B>J zdHwrx56-oA4-1>obL`!}2?-3lwk=(7FH7cIwMlkwiHXysw2-Y^%~Z1Dv=0RzR23KS zl$xZXsrq2Pt@nc|{I4dfI8K^eu{a?l{c^Jk|FaoKCQEH!*m5byE$^Un3l71G(P^nf>y79pE_WM`4zH@?Y2$f+`r%%)KeCHvD6yFcFs}GFXOhan z9J_;8ubS@r_bPhN&rjSj@%NL=W;-sk)UnvPZbz5hbQZ6&z4qakCMo9f%S`>d_?nyS zqqRRQjSP4e9&l{-%@6s4p;LbE<3H(t*(759^+r*H z`R5Jg`ZvbtF>^mCuz2wBA#;nsk5{YL7ev@TiVaWxyMdpPhjYQi89`e8wizM;^R#}> z^Zs)_ch$#_^7Z~#r#ydlm_NHesPWFlCoVtkzC70FxIltk>G`u+{2~9(pZz-V?*rG$ z6;BUDIV*Wj2|sw?`#-C7ixnr9a#c}R*>0t-@}q{UxIAVi z?Y@2Rhsw#j?sJM4-P|ra>xsiJrgfn>=HkImemfd|MNpIHS*D;M@*@aNqhfI zjN@n0dX*+0!Q^}S!N-q+@pV7dIM|QP67ihW`mfI4vbVWDzO%ZjimS2o{`M>H?_Rr+ zw|&RneT_cCODf&Y^H{h&&dgYAu-7SYipsBN?|Kg}be#02W7)p@$u=_?yXFYr+f&(m zwyb+w?#I97^~b9A9t)4Jb(UiN%6R#u$nLvrrF)O(l{-wU^<6V}%Yw=aQjtmqv(5xe z5#`Y-+s({kK4FfcH_IB|lcEjY5~mlu787tWO>eRct>iqZdGLi)*7L@#9<42BJnS0` z+44??E?CEZgfLy?3;Zo<#y33A)T+9D06R~*bLh*%PIfQxVOil#Fx9vr@pTfQD)o2B&c=BNMP zJ3WKvuUeA4!EFAT#rtw+$VShu%WOSq|2@ZHv%K8pg5K(P>Ca~fNT?JZ{{HKfTi;n8=NZRtwf8#1irZ=pPa-EN zJ@kzD{OE|W-L)A-?;`{4Ci)05Ud>(*{=mp}UfP$O#|*LBDo%$Cc=;TP*s@u-Y;^Z+ za9mXD6UAPfuQ~Hef``YIvw8+eurYQRnPj95@CMlRa5FuEBmebr@ZgabNlaKFTeljeSUs@5%1%N%#U_#?{(+; zURcEHzIodxvDMWBxC+WfML3eLA<~pUS=0*Z;p>f7Jea{6295mAeOzn-%dS=$zTGQ7ndo zLz8iWE#Gq{&sn?vMLz56onIqYId}QFRo!;eU0P!Fw@xtlHRaHY)$L9O$ICVtgdL1p z^lO=>=A7u&3wznb4}~%~+SVSwz;jD=VekI3Im)Ml8sw+8TM9p@i{nxKdFxiey*jO4 z)vXOGQ#DpG`50`;ZT2bPIJRMiuhWN5KYn!R=oeI0cE(A@#Kk4-jBzSxd|A*@6X_44+-r&oY(%bqUCH_@6noPlZ?ApX?*mY=Gu$hV%yEHHyCETVh+;WcrPc=_xKF` zXC<}5UP;}X4&41K8@IQPb#3F-DrSSeO;QW(uAKPHbo;E_=9@foFWtD#{-m;X&54bX zYcFn-H4d zwaYzD#K0}lOIK2+vwXFj%A zDC(<3zgCaCsNJ2v9ZF{n^tfNFbDo->a7;m%Y4Ik9&9@hxDqdoAaD~=E$>Z((@(ZRq z%}c%UzN~@q>+9^+yJgL*)&z*LR$X1Zj{o59DigWK4<8CParU?;KZ)$KIenOG)7_ka zC#*{ZDk^?7{LJaQzCM3rRh83nt1o+XILu3Zv72xA z-+4K*OH1ax7K>d!L5-zktFNyQ=ev2e*`5KHqd3k@SSA!ya6oFsJeK_)>PH%k5B=;& zNj!M>*Ujy+jIA5?2}?z3YFy6(`C468kehe)%lAtJJeIIL=82j-Yqz+~>s@?v?{m+v zVYReuF688v*?Nbw|9}A-8{dbFvm2jn{&-SAqE@f0a^0cdF_-MtaPhBv`thIm>$wK* z_rG`6$30_FGG?3Uk&zs@U3Q8Y!{ZBVDh`^)(|-teC`lSfhgKAqHpbWfRgK%b>*xxd zg9koriFx$#W9O>VadQOw&YidXwa&eEg>1s~*1r`e3_gVZw=nEIFS_m(x8i{xf_FTZ zG#GN_20It`znE#UN}cC}tN$)6ct7=i!a<$(YkVRGV%HelgbSXo>shU| z`NCoO2%TeXdnfPyed2%b{qL49Vk{>gQQ9yscH*weVkxn`3%BV!W~o(7NL)Cxsj;cC zZClp?ue5`#?Ba8xX3t<1=IJrkSbL$2x95_`;teV-NjyAr3YU0tX$o=ZEtsliDgWH$ zfk<`2md01r9*P&Yn(o?GY___mq`JeSwKmpTz;Tg=S4`~wL;3$s+dta>|NH;O|9|)Y z<^S_c{-3$e^XU^jpS?-+Jb%DQUVi81r*pbkq8Q&*Nxi+TZ?eam`A*b9N&fYW9=ll+ z-o>|k{t>T@6UfDFD!wt zaY~<44)4N`lLDDmCC=G8b-B1TfA+J$lE0o4zVCeXf9L$UN6gYQK043RaJc5YcNyQA zAK&*SJ^ruvjj1nln_|Y~eMQAmJ#1R`HoX_Z|JoKDIq-C&;Q1d1&h5V!JO5m_{m%L2 z%=t-@M<(d#q<;uuf2{HRR))c0W?mZx_H|V%I~=B|H}ajFYhD=|`atPmj+yi25=YDZ ztED}T6&lWV=DL;e>aJW^X2jBsch^qz=nJ%TEnZPrT+E!zbL=X|;!RvkRf{ij`1gaZ z!g%r9?!uqzuT5txUbQ^4>unkLF^OfDGk3_v3GUM{>N&0~a;~{9>fDCgd4(1-1;xe9 zyVgxiSB*S+)ii9i=&oJOre9)m%&QmGE>|f#IcIs*tYs6Lew}ePof5r7Pvh+_J~zS8 zZSPHIEJ-Mg>fI2l%e=P4X0C$2aZZ?aNo;%fQPpFilB?N^epc;h+RlSVYr1sKCeE1~fBRa-Z7CEd5%T8O}|DtNsv&o%`jxGletZ8IzpTKjeVt)0aCDL~fN42S(3=oYh;4t(`Hj;EK z=)0N2wpP>d{A7{K7bPl{7;^(uE`3!E{u*Rzx@(!^{O2rUTCcW?DujMg@tlw@xrTAq zGG38uGuFNST{3%FW2!@-$ODCdBCEMdr%y00(%{Mx4B#?Sj6P-LfAJ0fjrZFhJec9* zc0ugKWRWuwTNEZbF!zAr@ltAKm>##IcamFI}J_w&12FLJdpF22aJ`6iF~_4Ng{)y=C{OY4YnpLt$9<*LLi&IWIThc-60 z1@8~eHGXW8`9D+9{{Q#m_3;`1^&hAHSua=5EA96$-F-vcF@5RztLGTF`+i-u*oz=5;tU+4TUof zEJ>(Y!utFC(*3@7?pLQVEZlNzGb{UbRW`u_w@S&t25I(pJ%;H|pD~p?Kj=-6;W~cA zN>r$+IK;IxFmTS7!`W;5uO6D#uwao!huGe@MH*Z>V%%${_4g%ZGz;7-au%ByIWJ-R z?T4>kae1vw;Jj|C+of}Sht$KOeGa!L=s8?3RowaYQ0C;5Dk?#XFLIQ|vLCI~@3?NR zd+oL9vB#WSl6U<`DcpTm>HLb+2X}Xu9}GIb+Aw?VLfy0J*Gmunx8BEoYL!w!gY5eM zb^F@`Z78~c~66NTE#JOagSa;6pWhe^#AKu)2>Aa`tAR5B$qvu zTlre5`>4_ujhyY#BB`CHPkYx?{OGvY@yx5-mhal5$H)6$?Bd(4ap+w*t?f$ z^MR_L9e>N3yHB$U>0OZd=5bl1a-P!ZV?W;Qem_B7lTn=Wt8VsHOT}GsziaE2oSxry znxvxWU&7$&J~d45rQD5o<%zwY&d)6u%e*bt-`~GPQ&HH));7^Zigi`pyypu)X)kRt z<=K02f}3-i<|GsMbe&tzUc@~3pIaRs%d8qbH!Q%d+44Gns*FQYNJUvvXvyOKhFhKM z*zMJ}%_&~7PxY2wOm=^VkWKc)XORnPxHbFNY0a4tGC^pLGzZ_8u4_SG*zQOftUkD= ztt2!qeSe?QX$1-A%cTNy8VzeV#YGxK_q1kpP5fi6Yhp1BF$_*}q5lrY<@YyOiW`3Y zx5GXverNxh)~#yaWfp6EY~OB>%5$em;6V7TY6HhSMzQ%>OkbjQrrf_D?QUqFE5al6 zh0j2w?Ok_~OVXxP(_>Gcn(FE4eRy_u`i^}&4_4UluC+L3Eb~+Fhjsb-{XL-Jj%~*+ z8>H=<7Zy!p{7@YK$0*Lt=FLnwYyaw$X1T)_4=iN(6cs=HyD4uk1zk;d=?fCzr zW8HSWlkZl{%9YSbf6(co=DI=2dxyic=^3xt<|-ZB^)jXH>t&(YcjdZ|GR^rs*=y!} zYt7UQ>#o{!lT|pIdh8Bvxi(2+wup*CWLU;+G5^)7YgDb>&sl!j#G}+u8tW{b#M0w6 zt9<@}!>XRSx7qr?+|6q*@jUe-G_^YAwZriQi|CUc7eUQ7}HWxe(M;?kEtc&e&O zbflimKW?GdQO-X8oA8S#WSYLTxD_7SeE!7o8d1W5fk&^ z)ho8iH$^UgfTw1m;8Kaem~%0!QpTh#)R#+6L;TD+JFCXfBhfkTicG#|Mx{bV{Kt|b$9&V zSK%i%vF!hS_x*+#y@NB4im#7L+#b6)KdQv`V#?OgzJKqlf7q9w5$g#)uU%ZZrnS^^ zA8RwK1nZK7C2~GW4rfAF)a~Q#>UF6-^ndA}C-48pux@>yQD?uWIFkzbxiO-o%dZF{aaXWXoX`BHDL zW$TD>J7mjjvknOlzfjwKt@Fs!O1{*ouN&32e#qW7^)*$k&ousTUs{d@QRz2eRTM~|}3nCmFn`!o&I zde7hgS8VlDzaBMlP85gS!Q-E$bpPEt9GX$f^i+6)@P`ZP+nGFA+6`IMxSmC= zw{X|8Si(G)MSY`Nnnt464i;FnHXd&rk!Mo)Y=%K<8dL^ zq$zEQa`3d&0>_(I&vI4>hfl9eF*ToaxPoW$rHZ^QW-mhc^ZZ&L%vj)JuU&Mdw0E0g zTQ7S`V&^`6WjE=+>#P$Gr`)`d`tZw*M=cWR-#q3g%x?6ZyI-yI$%G(_hY8X#O+6PK zRir> zCp-I||F-{KF|&F4$L~h}q&E0HGM0XRxh`$5d~tGpe*DAu|4+*kd>k~J*M;`QY0g=D_4(xD z^)9C+lm!}Ux|)2}mj10i{>r{KUss0X!yjYe`Oi7`ntH9-dhJ4Bev-@*-ql)Z3!L6H z3&!tF2&`A#`|ig7iY4Cy3w-1I^lW~-QDimv7g@u@cwmEy-wEBXd{T4RcDlDFITSU9 z1h`fk%}j_9-7(|b#~&Z%j!D?q*|lX^HY}*Q_ucl}Y}3%Fx!3<@Z9PxXa4{(5rB zO1Ec|PGYINR;kxYhd}W^D>U?48WNat{d2i}xME^sSpy!we90MK`;*Nzu%)YRTE~Ho z0NKB1j2b)}GaY}iExyPx`z+h~`2EMqwp)KYYpt~>zc*t2b;X(A)->JCW491~CSyPRuYZ}pwTGB>R8)Bd}8 z%v-CrTel>C&6P@xWDDHAYn|d!m&+zMa?BF^+!twZ+1S}Bos7wDnsVd)_ZvB8GtP+} z|Jp8l^$f4X$_cmST%&ezX|!)OO1f;J%TT=L%kj0mE0Q;C{sBp$!w-oTS(tMsq1WIcfSAGDt+tM(OkEWTaV1FFz}m` z{A*v^?bQV~_kYwb$(HK5$V0$U5fu(a|8^9rpNhsbF&&g*@6byZtOZ~cc~XQg}6gJaG-({L00q{2Ff zb<;+N``SXUp87F_{JO=~&RERHc0A%F->u}hq9#yd`5UOQT%XH*ApR4Z{$u;^9hxr- zg2-1dNnGd&h7>G zXOU<=UM-z@>%6YtW}EF`VVd--+DqzT(^nPG82-A}lPj2F{#Vah_T$ILWR48oj#Ia; zhMeVpBe--<{BF+o%je9Uzg6t)KL$p&mur5!+I1|$;(Iq#4n98Yejw=UZreA^ zy|sJe*x%>IM}7(^J1->B>z4BK`Kr@bQ@WJSZ@imhF#oL6B>R~@hivbf@O}zel*yN2 z)vCYmN0ZPJ9c~}C_jMOddS_o(QCaDwnUdPKNyoW$re*ZNAA9U-!|}&c-fj>piEJ{Sj-+ zUi3P~UXNHmy&_7lbC#6q>?sk#%*oqtCr(V2=s*7B@B2E3d1)T{;u5`XD^_uxetJoD zyG(rjU)6hmKQMn%at#y#Ezzim*_pMdXe~d_v5b;f=}CqA-Iiu{eRFtJH-|H8;)W-y z6qfQh1l*rI_kPmG18JKNrWjdX%*(hfrZn-wwT8$C7q*toMU8k7D)Ip>-oQWy%SyEXB6`^ zJS^n>{i@enpf}mBVEeM()l8dDwj6n!;K>ur+?n9P;vTtd#@S^aGN+xgc_*F-xcL2y z+WmLJ^74%*0(T#sdBoK2Ud8=K%-b1``DK1Rv(@#--*e6UawmFkGaix?`ue-N;EHk3 zt!=8;{ART+v1Ie*2w`FoXYR6(49|Khp~G;*bNMXBo^HW8N0yXUsq{s#??`W%!^{!G z`T6m?>qpM6e{iJk;Y2aMyXW1XHHkm^y6OLt>zOO=DcIKbHF7taJfD!swfNz!Q)v-8 zVmtQiIr8>x_MJO-5{%|0R_#>ii`#0Gmg1TV(+(Q(F~9r5CR4!Aox4VOQmx&) zO3#1s$4>vaE%$uh#r;oq))q2WNdDJTUMHm>*p_^tfNwM4Plagc)`I!E5{@kF7${F$5x~#A7)IBnP%etgz{eqi` zt?h@SN-qW1==}eG zo-YW$xGi^uoww%4FJD?#zs|l=+Pv;{fQTzc&g)&r^0qe{s&SN57Fyo7ud|Sm@ts?> zS=djPf1lO1yLpLgT|+14Cd^tE&^Ckf@=FoW_SeIQncuy87cfn=?(ggP!%^M*<=-1; z8q7W$(0jb1qKb?0JNO9Ym;UumvzAqSe(?BJ#^TERLT&D=IhNY{ju;5A`F@_pYk# zZoQr-G1ZlU-E21Ru4TtcY?ShUxjg#yOX_~jXWqJ!r0#2(-Dl$OJ}R)7qoVw=_*J7! zJ+FYOtCIl7gX_}gDicyC{7|^~M_*t6CD zTrk^vxz^)ixs;cr*Q%J((*5_D=QvAm>JoNZ5WY9sTVvz%J9Add`CY0X7j46Fny25y zF{R>I@&ThXg`YdWe15q4=f0`hzDi+T0vDW`wX=LJ)`>n#xw|Fm@UhM%2R2$|@%Bs% z488ufD|tuV&z6^;Uw?jn?QOA7qlIFU;A*aPq2G!t4E~&XD3P^g4#U=q^B&A!d~tuf5IM-&$1t@ciuLj1k2)&ShEJ2WCEox3aPQ;v z#(#0v6MYMf%%49~PAhJ?|9SC@v_~6$R`6Lof6&Al=&m2)k;62pcFR5Wvj#~)5n0)* zKk<0ZT704?#Ft{@#z|$nPR-I)Ven{#W*!EHceh+&ydlr;(hqf zmng=9<9ZU4RQMGR?5zHgx~FIQ$M2^9E~Q75->TRVTGf*=%3;M?z@3iEm+TE$=zONxR;b zNek&_gO)9S{Ph)dQ}M(2?bb_N`!1&R{Mx`S#F<+qQ&wFtvE`@nlX}r#F_O~-dKSL7 zQh8};@ge!fce(JYHpiqt<{bz4>(}k;zqWt*dZFWcPn-|!YP)```+(-s3uSDPk!+%+ zi~CpIjFJ}rcf4x5Udg(i36C=;2o>Ns1exYzw+`fozokl*7hB6y6xoE_pzeK=JbaTAC-?iHk{R#^KFXK z$3s7#vX=ek{k4z3hv}TJ?gsS-2K|`vTBn#&1Ul&8mu|``}_OY z`D>0;m>d$%zqjCh^`7eQe4V@3uQiQ$Z}#Kt_We$g(<0Vizma1Gx?$k+Gv06POfe}@ z3i{kBK?xzE0-Y@$!Ul?g+igScCvT2hEY%w*!usx=ox*7&m8NH3{{5SGOEzZGm$T;g z8;bkBzG8HpwrJI=0(*Hr_9vD*nJZ2ozMdb)n${%#)H^ox;_eAPYLhQyJ^5%iiAHBQ9g1E}Hk)(U%j&wx=hxy3rl=}<+z+-D2(T5mKax~&E%4BM z=F0P-PVM&FnZs@t=cawkZvRsKKFs+%zw@-GFGBi%6*Tyq_*G&hcQC8@+*<9>iOvSx z=Xlf>b8SA!!O)l&Ij!~km0vf`J#-DWeIf8V=Eo7!Z7p9KwyeLve{hq8!{>&Xrd+G8 zKdk)tUT}tL;OWWx`yaX36q_x+XWPo1)%uBtVQuC-o(FdV`euoLu`9fEwt2;(^pzKW zPx9X@u##C_cZ$`vIMs7YmFDrgZ1mCbdckO5zkHdxI=BD1&v|@poDGa#+RM2QEKE$; z!YnTA`IgnmX$e#1ByG3g67SEp<&Z_k5c1oqP9o zt$MI={ja~jzpJd9Hr0c*^91L)3vbFB84CjDR&SUuUihiD?&CB0aGrUq7btKsv@0+! zT6L*laW89m($r_g{Ofz)F#hcjF8ReH$HXsn{Qd8Ft6HyBTyx-wG4MDU>-uPgN+KUW`g1Di56GWy0_&`P~iksnuUdet1N5p zEBgk6E^7b0b=sPLJ%$y(zv;Ry7Sz+zYhsu-|M9-H%?)9%swS*lzVG1QzqTdU+y7N( z=X$J|z3gDo&Le4?IX!o>N6lKsnZxvq<8RU%&UDl;zg8qjmfF zb-6t!Idm=lk$77!I$~GY!*}oaT)i4=A01)b%dyCi?e$kFFU^>{G0FSyKL%~jx&Qsg zuh;7t)mKGMQw1F^o@_Puk^H}h@*lo@X|ezFkUzru;Gt!fEzi$Hb-#Z7y5Qd9j}np7 zb{?3WxG^GO_uaM!b8qRzXt#RTtqp8+{P^u{bj{zh>jSQv&f4d`*WN+9RqH&%!HqX% z14LM7`6X_Rdi?F1*sALl6%_|+?0DDOci$A5#C;%QiKP3qfcQUYn;Q+)80>lsLAT~S zJCwBXK#Iw+yLV-`-OjB@OUia?hZ29@ORg^Wcr~KJ`tyFf0 z&!N9gRxDzBFD4{Rm|(!RVm4bfdjN-`!sV8C?uRdA^B(i?jnDSwEMJ^3gZI2z;L@+0 zt54N0E92bfU-0L1VuJs*`6g!*&jjk;+g&sxLB8r0!y{ouxtoeXo9cJT{qkCD^l?`S zi&?9{ga;=kvG^{JNm}LU@4~Rs<8C^)SIpPI1rx4qJ|8@#y|dTf$B^U88%f`W`M>v_ z|NAZ`C^c7SMpex3y^nM{t57rngKHSaB+xw!fG$shiPGIos75;q->eHJ(N5Kuk!Z{F8gGIjl(|HHCn zbM$SqUlmvwNp$!Y+{yp@{jlx#7$xauiI27KZfbrkJa)cVM@2%M^@Xuc${|J7+Mmze zqT^p~R~I{REJ{Vkc~-haxH6N=YOd7CNowaRdN#={)Zh}SY}L`0`QUNhAf4$}Q0jcX z4%f8?7M}m!8b3O|vF+LCz>B9VB=sNLAFg0zh&!e)wQo_wibq2EhwMJAdM)++`}c!g zXQLBiVLY+@LAXVzdQfqkB|SB zu;)v>Q1m+WaFWK$CI)l}?$Rqv^>eQ~m+7UHarvc)f!JK(m%=@XAwlxLi*_DK+}>R9IeMCE&m~1h{Vt~5 z+ey3cE;_^gB5tnAxqY|XuY8o-eV6aCVCX3~*Uk_RpLNSu@LP+xHiE{^HXI25ef+WE zv(J?bc1c;Q_J6MtIwaA2mCZnGSGYi@%QV#&v!x=Z1*)2R?fdik(iE+0`#$k2T&UQ( z_{%S@85$m}ci0#ItJt;9b?;q;(?U-wyPkd$wEy#A@8uIa4y0{f>~dYI!B|IcT|iiJ z&Hwy-&XS$`T<^Y___T7t{ogE7=jw{B=04hR*U>tA*SCPj8}246U8gU;qdp=jQ{fq5j&vrF-2&dz-zR1eiK6F1#m`Gk(9U zZhf29Zgc)_;RHL5n59#yKG&XR=$xa<={_k%K&eybiAu``fkWMs4{a6qJkip4utny` zdU=&w&vM+Yr~!uQpkaD@>K|FS{GKb-;nL;t;jZoPVt*>tVA7HwN&P)eLJIi`=M1s z)!WWiCWVjLrUw!k7ISQWAQNP;VZr>ufB!yy^tLhQ_^r@BMN(q9bc{5!u;JGoA|Z1; zf|q3WsdxvbupXPtsVBzWb1XSzvgW2aGptoyW?kHTGKIzChwTkf{+ya#3(gOGMwRcs zeOj4$?0)>z&)`=4dt=BpnKp5$PcQ7Gzf4+pJ$p;8v_|9g>(?8rvgb?YDDWK8Y0 zX@9obCNL}yiVF>4{Cf4&$BM4@c6J+Eox=Kh{;Q@p-tlMLl8c(S-(m*m>=p9+vX*Xb zY;C*P(8{L6{@BIxsnbEJS6`C_&glhMiDpZ-tV(it7-NuG@3#8HhFwDYpLvMeG6^Vt z3`^S~V{}Z^O-;rl#M8awP)Q(!FjOv)D3cT{5(MwKt#p z!z_l#X^z^mx0urWJpUE`bh+XaKG#l$&)^uFT7&;1&6mrHug_ZZX;Vwc)1?BSBi>%_ zF0h;D`S|?(1B+I1z4=~k;@f;Pr|oBroX+n(33qGk__MymUVnIXb$CM0!|nV3>aJ?4 zdL_;7A`|*EcgMfdSoVfRnRC|8VBHdSW3Bm$*S1rb{d$!4|F-yP7}c!(_K0mh=Mu{+ z5pU%Vr1D90zh2F~X8yDrx!Y&N>J;2~H=&^I=vm%pn>iCq!ge*kv;MM{VKP&uTHyP+ zWzL5R>+Ab}rbsa?-?eVxFFl5sxaLH&*{p?b@vUF4TJf`0GI~CqC#{)zc2l6!^P5aM zuQt99>Hk~Tzb@F~is`R7=d`@No3AW8Y!P~q_cNy@r@kB?yGmx|oAu>qgw}7;Te{?H zCu8jL4RQI3Ej-hv{+svx{JQ%2le09e?T+&>dCk4`|E8nUS*8B6|99lIcg@*z;ce#E z8FtOB=MOGeB(sInqFD5$^4_Rw^Nu*@mwcYH4$lx-^_@?B`Rf_IE)4C5>*N0P9Dn{@ z=JBiIW7#@und4=X z9eeih%)7n&u3o^z-}`v)y}ZZQ*Cg3`HB0ox`BM=EngzAh%uB6mc2xI2y{w#jC+I-Q z+~7U-qQyqn4rK*BT>9ij=mW`iQ?^qQH{#eII-Fa(`Hu1<8DSoS1ze9AA|%3ue>f!m zG`aCBBwL{_ch)jRMw4SKUhC_7*YiYkYm|!EZt+|CJ3@Bj!gwRT6p7Ed0`B?`epGce z{=IG>!Skr;O~tGJ@1dQC zE^cO25EL>~b+kQaX=cqdGsv@elGpOJ2N-6i2IR6|Eo&(4oM&dRiaqAiLrFEcj#t0! zYV7BqzxdrYY_+J`WKOloo)^Sk{GL~JvbQNrcFU^?X+llj<#Sow77OKi?_%+sq~I&8 z;oZ5M)2vHPWs;M?+1ma0m3=t^f^#1q(2~t~-eVY&+PQI#gN0PVyona^lT;kb4{uhk z(QY?n+uY3>b=5gLD|pA=y+`x5I|hpAX}VNAyY||YubtU!Ht(yyiY!kypA>1oD>qyA z>y_z|l1*2RCN(b7IM8!c{{K_{h?uyEDZ2z5cLU z|K0?#gK5I6N-O6rvc1Bn^GT$N|ACL1aED1@l+c$wva_Um44+ueVUWMu9=GD`yA@5G zeq4{@_5?`pN`Jk}@fd@m5ChAO(kMk?&P`hyia4w82iI>goA=4zDe)TTR>@>W#wDI! z-x9Aacp0T~sO3r7j5o&*#8$K|o+h={bc^vjk#kwTm1+IO>KCsu&2hFk+c+VBn^AGc zV;xC#tyib}@@hATB`6v6>ZD(ob5oIoK1yA>e0Y z;9Hz=<3X8X>}}6I&okC49-TNU`kc{a+OdbfstVE$uylmA z&)=~*{un4<*URfO960^M_3-yEKU?gtF?XLQOjF}8UTYc}X=*U{+z0>vU;KCM-Fxi+@Bbw~?!K?)&*F$E}_@i4V z{&V;f=atF9nEt)|4YOUCX6cU}i-J#Ado6B!RB*l{B(Ry|&-3{)>C0ceSMDz06RiDr zb#?fUU)}mEm2L;-f6FmDT(_O`%cq+;V!uAsPQ5SDeEhh(&UEh+E!Mh>ZD-S(uV%I0 z|MSfJ$A+8ppt=6DCQpKK^K7pt?tyVUF*d?bp7D zu76s@xs>OU(($y-oSzqNJ$7!R;F2jnJ|34p*u(4D$u4?o6Da3Bs46YrEjyz)VMfog zE0<#?e?Ij1vGPrEtF0enYZczMs2mN?-*=#>`ap%vp?>>&iB=2$ec#RheTLuiC2tp0 zYornB!N6dGQO@6rFiqoUs-(W`CSn^-Y|>`?;G1-&Rk!cVM2K{rTeO zB7yBo_O8pG@@YlZ{8UMvHy?lPN;!7hnoql{a-RIv_pwK7sujcjqd;c=iXL2YaFrm!Z+I)pRWGkIdq%T>cV-q+B1c%#%$7>h4yb>hu2CA&5F3) z%o`Oe5E|UfAjPbre4*o-*LJncw^36~miQ#zu{~4xCGh*}GZ&S6jR%o#O^ z%eK)93}yXi?=C5l$+pyEtsNi3O@|vDg@UX(Iw7n7bnI7`Pmq5SA%12OZ@f&%W8-Nd z=X-z5NSc+n=i%`yHSrJ4XZ3Yzebo7)#ccOrsY)xi|NZg>Y{q^p9(7LddnPv~?$7aI zOkMYXav`6fp+nA;KmKaMckbM2DDGSLx+!D6c;f0ppN6hQ90wOo5xV`>Ok>t`SJtb7 z1_txbZ;a6c4XfwI`fu@>b0c1U)ys*GJ-1@bNu(be-yQQxlc3?la%fx%b-MovXpn+uxWv#9A+uzi0 z`krRHN%v;$eSM{GGpyTZtv*-qJg=-+jKjHRgW`{a8}>ExM6~^J{i4eA`{a~2;*R_x z8oyen@!ovPmNHQ&*L&ZTs5iIYytAGYynLBV`8&fy{Dx1??J3PKzkl0gc8ab-pT)%*VpWG=g+gR z;5?jTw)oWN28&gzv{c^BOM3i%WkKhjdi{0MH+M1lTrb@gu=s67xWz`>?|)nia~>Y3 z^t=7d@rv(BixQ*ShbQaI_&6`LonQOf%I0_79@cpqZ=BtK_{cGF-$ISn1?%iQV%l1{ zFNaifzB2eYotgi~Lz^w;>6YzN@5(3&N;zDfDc86)WvbGqqwO3QY!8Vl_iQ}DxmtTe zu%Y=ng@idPGFlweG?}dVRrGb7KsqXwR`>qP5h9=_l^oHSV=tgmjxrv4k2Y7*`j zg_#dJbeG(=%#zqHRveHpoxQC4-_zC*-9@iE9$zm0RO1pTQhmOy-fgehnGF>xY)%`F z{^(FS8+-ZCtMm*;ru}WVEgiq-t#w(XRQ~SM=PRt$_rg2^vU?votUe@qc>v zr_WD#^myO$R_6sWyG(5#{-6Iy^WUxG!Hf?y_l5CTpKgC>F1YxjMvg#@lK#>y0f~w? z!bD$xty&(DU$s3_*wNtZ|K7!ml?&$jo(}hmTpKnewNq$Ylf0+(8u4z{%t>$5|I`_) zf4Rr@(SY&)qO(hG26vTp-RDx8>aZlx$c-a+EAyTG$4WS2+>csttor7;<-bm&;qSXv z`)Bfh@K}CrZRzvA+wTtb1adqy-z-;@wf~dn;t9WF=N&kIO*Y8QL%(U6NY;WD8MCzJ z*9q@eFZPzmt&ca-@VU{VJgMnriI-61>MdEjA0FNO{KdM5|JFT`zF#q4$v<-Kv>dbS z1qHL6cYChMS}iocKWLK*Z%s|Mu%>f6$M&6D=65-Yi7Z~UAXn>p<#_?8 zjd$}pY*}I*W~IEi7ZC0nFh~D1YgBgHX36sM@{E**%hOUlC#h(#goYZ<^~;>qb~VfO z$-AxFr*f})xUM;MrFHbS+q#iCt+IC@i--v0ml|HDc3`4dEy{rvqU zd)@uQ6;*qKmjo^8eAc@weXnNa`@7{kckfT%98*|YDtau}aCX#RX7-8p^JEJPOBrt& z%=62vivIB9$z=ZkufnpbW9sv34!O(Mrc6}y^Smn_pf;IvdHV5#s|-AimhZFW@|=84 z>h5>Pxp(JHPqCS6RCYck_Bvx7uR;iq6Ym6PSvHMLb1HW)d2h8u#3krbw(oWGl3EuT z*BtY!42NPTFR_fAc43>vsxAfp_L%6E$uf#L+pD5O zzliEgI~}k<$cd%n?*|)G0nJXKN!LUdCMo7_TzdVBgi!J!+bidS@_%ggH)vfv(Kd|X zMU{0NfA{ZyuRT1fcxvxQ-HN@xIAo9czcvqkr^5@6+m*3-cW!UmY4Ll1#)J>Qm7+vc zmt-EQuzC39%beA#wf)YW+p(j@Z=Sg0Y*!wQ>VG$-g3M};6#C3jlUO?;aL@93mDVj8 z;xD`2yIHI{=umv@#e(0TB!mv%;&NN(*(iEs%5PSwWRp|9?uqjz{aRkpwfx6Tr@wRe z|Nj2(-}Jo)Z8kOVXs@#Op8k1b#hP9Jx<%s4YW6*LypZ=_YyEuRk{8ea|BV0sbnkQd zde@0XCs#;*xDY#a_w};JOpL!|j!x1j3oXi=(Q~}V%`#BLI(sqav4%X}N~@%w9}XP8 zt2;gY`JadT|4jemzyH7g%U#pVa`@)n?EUyCcCT*~tBY6bV@bK$|NlSSe|Y}y-)TG& zxoiS8zqj5O@OrsBSLp)Bn=~aR=DF9dExxWOxnzrsW3QWZ?|}>3uI1Z$Dlgga!GCe} zq=<IHn0T&Pqal7R-qJUz;Q6W+7tc)V*&YT824YSx?A*Nsj^&;Bbxuw2)*G{p zfg*ychE879cFWwQeP=BVDfPX3NQh~_7gr$@Wf=ggmHw12;9XOd6;WCfq|pVQB0 z%<9^8chWP>r&Vv?NSMC<+O;hAM0d}=*Al%(yY?+E=Q`&b94w;z?p>Z{tfS^xqf0uj zv*kqH&nz?Ea&gYQxgVFy*Sg%l>EsrAJMU)A#s#md{m$z(?Oo7bf9`p4+GWG-+s$jf zy;OJcGCE}}_PKhK$CDkxvAxP{<@X3 zyK1IP?sqGh`z-(8+55|Kt@r)^+rQ#lTIYUh#^cAreSPPDT>t;8|K(OSubjff*maq& z*cPfxJ~?H2{@$anujhMQYWe+hj*4&P>$&9tg-8DWWu9HsZ1AC=ynE85=jZ1Y*4N9w z;8s^xciET{of{Z*sg$>Jp3rfw%imqR0?m0ZztmCT((3Y@JjLex&b@n8{em7@EG+a` zwk&f^`}VGvThn5%aZH_%B6<4gER~ZC+8Pm|qPyOEJnESIIN9uJ+qSneL|A7R9Zn0L zq#3A*S9OQ{;j`$sa$sAmTi?2w;CS!VtY$HlCO1f%U{{0DzUeBxm-NbWgUnsaxf zhiA08N@33Av+EqoWdn6QLsIsh*t@^#LArF$ySsC4DYHI_beg7?!Be~a^RDZ=%5UjO zY1-y`?z|JDu=G$yyw6=xrkeUST zCPALx>rX#B-4%ok|nK)Rp{;)gE)k<_iQ(Qqe4&WhB)*K`Sl#>KZZaZK=8M+s(G*`iEZ4c|B|0 z`j7yDESh8syf1!_zx{IgNed$-rmS$RQ(O#jj=2?&6p^0Z%-K4F|>#Wwk z+zCkc9rD6cKqw=|mb`q^nhOSY~uIcK*1x~-c;`TIA2*|eA4d?^;< z^4P?vN8sVU8TYyczG;Xqob&A1%cI8oKKAB+{`dR-lRuwWFF)pqaamr=+h z#l9GVlgm?RZjH?fLpI_ye6_tstJ zvi+L!is?-OJ~#I+De#j%mQa!|$p7wp>xT0i1lbxLcmL;)kKa*VBgFVeTkulN**A}~ z`I?p+e)*p-^XzuKdHugmj)wRzEPplYHZIQmmiXiFf9b^CH{7c16FXdb1SSf%c^TYt za!KDTc}(KeCKmgV-U}HiFBU~aE3&hTvA^St+VOd#xu0v( z)vDg2j=pWVo{wito~*p=G3T=UlaoX^=gglUJT<$|?_5W6YgdxlY_X*}PKnXE8M`^0 z{ntlti}sDp&%A9VqPXR=`S+~9rMFwo`AkxIa#J&N7MuR>_V#whn&3&P(}V)@wF`EM zTz+X%QZhB@T76yWN~U@1l4`fF{j^hPlFCNU+ckCaU$he3&u7fp-Pjczw|8gSoM<__ zSnqjD1l)73OK%AY$>rYbYTV;)Svkw#l#YGP-Y5arZLh;aMSX(}XZlRoxag(zz1r8Y z*H%y3XB;ypUhue~xw(1H_Gr+e0_UdpGO;l+1yxmEk<Aba=t=ACuiTtLN00C^t>1b;BHY4c!5S}#Tcv;YZkX?$bTsIa zrO8Dr45Y|6SNmfr5`3U0A>?3gmiq`PzLqP(0%{S!1=7IUpASReZ03crv}`vxbE<;(Q% zRy~?6X_k5X=E*9T;}gUltWS0Dyz#2dH*BxK9Fs4;uP+3xjTdA(6U&i!JnlN{@lFfB znSRS<-BCM#ueEOH3l!5`(CWBr>rBU{gckkp(jQ{$as}Mj zUSGF0bVxkzbo+Lx!1M*#%T0wnt>wKnFS=cRDOdGPfaSMGU#-Ue5VqVL!)3?CR=MVL z3vT=UZuiSFonwKA-aMHyUH{(Go1eE^TJKjnTU_;UU8nT&c9H3alO<{r{j(eX2spKr zom;3o|M$D(`+qbapRWJ@@qBd`xOMgD$4oAUe#bZS9%=5=X{-5oxb<$HmQG9v_-tZ``wgVnvR| zf1MN44nKd~ZN_`}v;4mM)A;T7SN(2L$hp(AG4{_1=Ph@C$1Fb=^?YgL=QoP$oYUI$ zt$6xRmnEruda!d^->d~o#9i(z_x@3@{5*1Q+RoRXN`3tND(b%WL}<=hw&~9al}FR< zez4X5+WY^&$2T3@vKMTZU0~AN{B_QIn_DT{6?=tutyA_CdY$<$=ete(W}VX$W~4?Q z%duipUvS-ow{lwBxqXIhHroTv7wzQ~;ntt?^}`2;X{l?%w7Y{U{@JK33M(<rlkBxnaQb{ z4_d2VY`Z%n>R$cz(w^hVr(N@-k0qauumAc=bjOk$6RC}H>*s!5z!&iE^y$+Fs=rU0 z?K$bgP4)SkqI4~7ZB@J8Y+MtjEi|2>GOuQ<=FIcYx2$7GoTG5>=1s}HhDSV~RBQ}v zSdkWatZ1*IpYXeP?{@6msd|?CUhVhVeLv4?->ZIayKCRWr_tvti>u|g$hXZ>D4Y}+ zDykoE!!5`TY6wJ9q9}*e)xc{ygLE$D8T%S?}$iA{oo? zIp^cEck?!_)97m2lG!XVTm0qaTX~;brQb_sH{SR<%i`REmn*i5R?cfSR4Md{&67<% zelGN$U7%vdE;E(RFv0t_uOsvelTA+TjLdNKSkP;@W!Lum(iKz6`Oev2`EbBuqQigV zvJK_@{NaTnlkx=L)*P4YXyOySQ!9A#b%e&!fQh#*b6WT;sZn~9_^ADLgUGkdug)nM z)F>X`e_s6;)9?Qw8cRYJ9tdE6+jiWPf$4nwn`x9dbsrYRV^%^|i8W-rcui^Vjb#EGapXW0w5njqmKWq2J!`K37(usxon_tnIv> z72BgP*(ggto!0-(YPa*l*!BKF*G<>Q?S1t1^>v*v>69fhs}|p%eYkcZ=eO2$`RLPp z*VjEX6?Lk~n``CL#l|c7eRo~V$q0qH3QJ#>Jud%Yex~ukBAX5KryiQ7vZc^9`)=dz z{ag><#kU0s{@n54=jZ2pKA*FWiH$X!>7&^7vZ}f8=!6B{1|80GJM^sR^ljivi#&D*}2^=c}u!Li@>ox8nC#aGw={w?iy zEysHd9cxw|o#z}FG4EN`&Rd@?Qc`O+%wLmT{Aqe z^51XYEkRu`Q%+sIDmwM@a)V> zd+|B*=54y0*ZJ6@L*?A_&l^_yU7qs#b+*}T-p3y;ETnSGr2YK;U;dugZ}+R?+RD=X zm7moDly|L5j*hC{dqXpoTk*u^mXA9UwrYO2OE-~HT>A9nzX$F1TznkIBIT}qown=V zqTkc*|LBc(<~+?__wCK3t69#odYzQ^-^^jM|MTRDO3(R|6;AiR`*bxa`S0AjH+65^ z<8`I~ZQLJvQ=cjE67AHI+ae@%NrT|&(lq-cm#d^xj0 z;CZWF?V>x@wJqCnPrA>X>&9kK74P!lxZRxiwsTB%eVe|u|GoF;nQ&OY-Nv8WoK%0? z=Qley-`ksSQ2$PRZuu77`ZfCu9_QXI_+|9E$oYNcmvd}^d^#+LYYUEM`G5U%-HCtC z)5jKRMJ9<>bB*NsofocMw|z@&uB+h16wfmmDXdQ?sW`6aIC54|La=MWzqsre#jvP# zzrUW9w)^`f_?>w1Ek9*z&*i;KB}}&NJ$J15X6~nR3kr;U%Km<}jS=Q|P59{f+u>+j zwyXd{yJwAr`b1ql{)=kA9M=BdSXvp8bKzJ-was=n&*vtMo45H+>RG&4c#+D}pP#4i z`FpO~ruyHcB%{JA*>@68#n*rCUw6}9ao)Eh{vSpBKTcPi=fW`m(Row8K;`!C#X($8 zr{wnrPc@syz`>z)U38A`vV)6lyOh%0gJ*4fR$lkK{KxbEf9iQ>pWSV~e&*ac7X9zb z@;C2{XZSF?>+g~B8yo*ePSk6^%YP^B=Z5Zs1`n_O+cjeWzk-bVrGNY0u6mpEAj*OL zw98a}UD_6^A5=Uebi`_YyLlZCVjtG-GA|f+Pl?1oA$kL-jRO2^v|>We`@k|Kiw@&b95e0@&-v|sG=$Hu6`E(6KlMh*tZn&g zwH>a0_;Zx|+H79_&z6&4PFXxzdD>}FDQ6uA3HMoIei!8$g~BY>uJhXT(lB$5!}^!I z*ch)(UG(-s?D-0lMelh+Z#NwL^k?#nwVPM*oHX41Tf5CedSkHc&4ULDV{(L#wHBP? zuf4DQSmVHr$tsMRhm4i4G_Lo&I^V*l}KgxM{=G+IX?bH6B`MGiX z`K9U$CYBWV3eKOMJoVGGV%v!!M}j7<=!mmlvc+6x^V7b%sj5|n<-61&%9 z;q2S8@2kQ+?#559NtY3BRq~vcdhOIjiBE4k-j+#gxEzW--QZJr{nBm+o^B@RRa3Wb zp5xbdVw28-UYkYko^N(qXI)P*N;I2obyxaiM$Cn;yi(4A5w>$S>AdV+S{r%L-7#|d zp32W{yLYqSTE@OIL#jI{^VYOw@7C;V_AYDP#<@j8q`iG^?PhoB+o~VuSI=*MJG=Hp zjlG6Q1WT`WpG5X|>D3&PZ|9`7`7t<)97vY^(GbVHWP?(r(~a~X4p$YG$~^8Z?&`~Z zmb>ryeUE)l&1>0Z>f00+R0kaD`rJ7`_|m^AKkSbN+Z>Hw_Tv<5!}62wH0x&l*i@** zX69mT=<>Qd`*S?Ia-5##r;W`u;R`o^_y2$L{inI_|KzW^o_+4zxf?lQ3aV^ptF|WD z%nZ1G`$Ob!=?nUTCw_K4n$|z}^}}bUcyj*TF~4)ZoKk8~ zyLVfa8Yh}Lo+#eU`28s3<@Z7jA6FdU@Z5RVsBcq2Z1XXKdPSFYE6K^p$@J9w zJU2TUbfYhQV*iWXZM(J|FD@!_vh%u`w>JIn$2T0hIyN`E*576G*za%fXYW^ohgY*i z&)tn~Ev-GAWA^a;zc=S&9vMFV_N-0CQ^G%I(Yv|aLZYqbp8Wl5yM6oiZ&hX6vga(* z4Dx!NHsSf4dGn0s`u%)nzW?Om!_4z*{z!HoZAw3%)Rp8k>!^!r%>I8p&-LRz6x5&2 zG2`CwIsgBs^_$|>-^|+!^^#Tut4)lB(xEjmAN zn(FJXlTc0N|NIiSrD8WNF>oRk5ua(?Z+_LaQ z(XFp+CGJwIC;Z9ZK6|gFf_G5XWufm~=S0n0Tb8Zq46^o{!1VH1WxJ?%_aY64?~iYM zT*}Vss_3$S;pgwS^Gi)1d|95^)pO`RE>g)CiNS>?>7ybX+GwJU;eLcN5 z#ae4Mo@8z1+9flwXxbXL#VwmI{0}^qVwU~@rf(iR9Fo@>PFONVhEM0Lj4P-rJNWc!@v`G)Kh2#KlUoCXn#vA~ zuYY(r`PU+gKYMGRoD8-BvEgEZ}xBNUgW^JQ~ghAeZBvzWsP+kBK2qbs5$0rD874Zk%rT!`=zo=y}#MG z?0=hUG+%}DYMQT<=B+I6&AOc|jp6U!2hP!OD-<)~T%^I2sLA_HrkttWiNmNpWQA1q zn~h!@e&3k2>>itx!>nZ`Yn`o@7zRl!F);aRc0pCg>ZsGU?nO7Wm3}()@4p^<-ICGo zY>i#|)~JP3lFVkacGTT9*>?Kvr2b8tV*UD=C7XA`)&i{4I6diWk*k#Ym)yf;yB#%; zu0C(K__fu(|9{^vp7PZGdF8p^@An-3`c_xjz5l}(*2gZ#mR;7I|L4VVjntQ1W*>{D z^>$lcUmy4RT6DhP@vf_<`mQG#shu@`_x^d~|9=~57HDuSJ0864wr=LEN$D$vwTn-# ze5Z5#hKoXP@Y?=eQ2JKn;$jb> z)iZ3)uSxdOVEVD>u(*2SrJXYrd=~g*taYB4XCh@N6@BWW`M!_60Sq5lh5RKq&CTC@ zy!pG7*gUt1s(F4Zy-uBN%i6s#d+oelF+sO-mm>D}-;-}-DSGT$=5$mraMpsk*N$!w z*myT@=Y0DQA2uZX+py*Pl_b}1Tt*8W9AyH$(h}M$D)RZb5BJ~Qy`k+(tp-cw-@a}4 zIkl>u%+!}*UFDU1G^F-o!j5~t&VOrtf7q$9z{63I$IC(Frlm#@XQWw@m2HyIJfqoX zEo^O{K6%okbM|F#wOPy6FAi2(N0dKC1pS{Z&>R0{FKE!GqAPyOkCogE{*!M7*G#pD zG2q{yZ!J``UOC^q@Z0P5cJ_Jp^>S0r`uqF;d{@5zwEe&1|7Vz+uh*>)a(e8-w0hO1 zyEi(0WyY_hqJ ze{3sj-lIS3$VmIt)7^Y>%J%zpvv1}c zD@tVj++~w$H{V$ESWL{E!usmdZ{PAh4m@}}e}As|iHQmOb}WBeZ8rPtJdQg#W}6M( zf1UOFcQu3CV!_C1f!9l4wC%0<*mQk;{AH8gw-VE{88*G_u{ra_O~MN0S<-OuBse@`j%^-`+%eOnaBV)*vQOgi-UtwpQ=Xc+h6?@`R#r(iGcTC%p8neP zwW`;Jb>XI~Sx1vLK6vq><7CRAqMbagV&`vu^ZFYU<#H_PJ}d^x!8L$kcVbIbDb z@;#NGkEz}DJX5v#>8n>=Cg(4(UAm&AX!rL^u%6zzihqABj~_o?^Z)mK_6I+H%-EF| zsW*K|rQg;Vqxt76|NXK2ZvK5r>dEN*y+`@$J}`f>S-xu3gfC0^Sd(PxZTyqvrg1N6 zQt8y_n)Ca&uIHK)ljeBbWVw6EKS*WLKI12ue$$@bxo3MJlGQqzr)1B+uG>b)KXDTC()$0#m$SDd@Rkw-6_Uuo;jDUf0K>9&Mdp@``!O{Yxc~( zUUu}s-9LNZ2ggraYHP2qkZo!yQaFi4@PcBBEw3Ke?nSGY8*I&$F0ru5Vko=Pu}iCS ziK3tIC5uHTf@cdP*FJL9e_hAgNb};$5>6MK?G9P8m z{{tExs*iN~EB^m#{on8W3mfCVNVUat@U7l%|N6Clea+qCAGK&`Vn6LMgOP#|MvP5?e(AjPfFzsatfU) zvDkBx#LGXEqNn>Ptx=sUTZCP{Xnm`De5Z7td8W1M;YSVs_g!5X)a_Xke zC7bRZOK@IsBX7HhYUiVltldlBui3uyUA0=}LH+vQw`*QU-+%P)-@L5N55GKV*|zTD zUeUY4P7{`DuD&{H*Q(AW&)a4?)4g}CTbh~sDWiu|_RZqO%CB}kd-rYH*|fva`FmY& zZ_|+x`Sb8$Udz9hkF?j_T;udSkYIKRk<^UEaG&g?nvctfj8>D~MH zH`kc^920h1eCW`nyA^(yr+ln9bMz?d_3PKC9lvj)DCm88$|4PqNi9EX&Q-*`Dco7R zDd0)vkJ-21imASt5xsWW!P2CiF_+49eS>eO^E7uQRjs`_McQq#;OD2aOimlFQxI_N zN{ZPq=lt4M)d^{mrO9h$?^nNPR(fum-@`avX5ReypD()0FKnuaIezr0s_$I^bwke_ z)+=^De+cX8pIf=Q>uJ%!-TC{E=2#uAn9Gwmf99SU3l>QjOiNQzjlHe3biq1pv)7YM zd}rF*6ciOT33V;Y3vilnM9_;>GrbbP-*co*a_>#5E(ZSVUQb_=h! zZMrjQ3FlT}_9KxUU;VD`e{H&V+fgw|R}ayLJ{H z8^Ii7bLQ zxA}**WPp0^^+0}>$X4NnUpfpQn&!2{{{F>ywW0aZ&w}*^Iw3cIt9DK)`EIS`Tjaji zLqa^buh0MI)A*mE=g#X(`u7P0HXXA|ce3PaxR=Rb^UX@9@BfzS+4IZ)T)k~>fAqZa zzEd7Ir0>@=&i^kGZ@cfEO@T$bZ6<@w(fEv=GyYvFXy>iYdWS{=iK8vGArg$?Tw?K>kk*du1!qS zxU^)-qq*hx9-7yGHg9(Sd+}o64TkiYuJUWHXZI}=o@ZN~w(u37U3|~+8Mmr(emAwX z|NLF?@ewG~FwVQZJ@&;B&847&k-Rj!7A?q)4)dF%*O$C&9k<>6ds6E)J{9nV%~s%g zY@o7x-HU}=pB?76=ec|EY}(p(Xtm zc6Q5juItFj9ol^5yKU^{O>xt!KeyF?+oPH(bG$6>RrDf{NvWM**Y%4YQ+fFBNu}TV z=;u8OYrS1!g^zb$T~$!FV(v9-)zYOM6BJl)?^3%awRDdC-sYLyYnD4*b7Y|0a_mhkaBob`og3Wn16dPUm^^xhjK%%LR6pymX{JujE=7$GfUuf}6 z@z=&6m!jp(C+FuQ8754b*EcQ8J3Py5&VBy#!apvtl+XC``?E|IGskC(t~Vcy_i40c zubrR%*EH$E+vf`e8idc8)_PA`;^^#lsv|J&!=t0od%hnux3u1?FyCj5U6;T%K?R3j zi$s2T_r24c_egWzqxE?;xx5X_E4tPTFP!z%;^&tz&4}#Xi8t4o`{YqKp`((DG$u{RqoKM>xO=zgbN=0@Ph6EnWY z|JV6&;P|;{tNG=sGUvnj%r7yuDokQH)#-QhUETYfIb|{@@7|YnN`GB-T>Pu_bHyjc z>W4C%tKTvv?>4b6t=cWvx5UBv#B&Yr9Xo84`$Xs0d^%QjX1V0+vy(JB9r<*ar>giR z?OK=kc#@T(YGE3;MDOOuQoG+RZjbFZiWc~A>T8@&!Pcm^Hiu;AOHO~&Cr`G@fwf??{y(vLw<+>Zr>^9&^T4Hotaq(dI?j*;9nC-dQuQT$V|z#Wov69F`JMaGT#m8R9?Jdx zxORy`*BXxaNh%LxmK~L7*>+CRPgu!Q=-6fDck<6n=05!q{v4%+6TWo!h{{ z?|FY4$7Nyd#vYXf*O!Y-_~sV(x@3Fnb|}3MWB4+Exg+oMW3rzz`I^Y;&yQq79zgIhkeu4-BL+VGYbqs5CEH5YAi_)2{lF3TUd8(Z|MyE;%r zP}_Bl&;@p&(B}(kv=v0 zy6Eb&v(9dFDc`1X{oA!#mX&v+lDLiCx*V8q@=N|IYcFAlZ{f{u)Q+hU{B$-drb<_$ z@z10u|2Hr^JiOk%Zmq4$V_UJq`%`tcs1*EHf2=&uzW(Iz`#;#^Yd-K^TH~Om8RS+{ zwd0!PzDJk-g4)0SAH$XAnJ~uf zCY3)5sc2wL=>I~3GaBK zAHQ#j2G_qY{{Kx>o|tdH-XNM0y?%O$lhHg84#kR!iiF);_q_`g-x#r8;$@Eim-Fi8 z$0Xbq3x~pzi5Q@pEZ!A3jv(e)v$fsoIxUV(+wgwo``_~}KNdE-J*oF~ z(CbylX3W#+jA1-8uX>gWW2vE3Z`rDMr+#fHKW3G@;zXv@j&tuXUKHHf{I>eU#(K6> zn|OY470PUmTi<+Rk%Y#bXhw_byH(4t#O_v#TBPF>v7jj-Dmq-GvdiGyG~H`D;oAGY z?|m<*F1i1c_WnctbzhY2em)U?_Sw?QEA4S->+9u`wYLlG>m6oG%vn`;-!$Yl@6&B* zb^i}&Y-MUPH#c{DabA6*YoNh={hW`_GLBjJ-<}_U_%-3%MGf1YH9Kj=z0p88)dVM!OO|8IBwlwOqOtE($p-Wy2gTJ}0=xG8hLUc0KR{(rOlhN!haw#NT9{dfESyZsNp zrmxpd_?kJAE?wFFH(eYe(;bC4u`{hbE6z2qTF8}vF z;f&KQ-#`_Xi4z|Dm|1%}DaJ^@#lf}7qASy8OGtg);x847$@hQxM@)K|m;A=6^qSwr zmL-8ZSPqom^7r%m@yvXGr_iL=;p>}s)jn6)^!e(Yyr|#Pws^06H7hr^NyMi=EyPpg z!5Sxy0_og%j}Lp^-!?a2C~&cK?pr=9#{(x*oNkwjxC%~sdbKD|R(VP2iv4@`Joxr) z+V9!XpKPB0`7>wT>m7#qI_z~;oF#(x&upIDx$Hb^*}@at1+Bej(}WfFmflue!u5`2 zS$^l^j=*__dTtVT*)#TKh1__;S1MD}e)sUr_7_YKTf~0fyY*HyGVkFZubcOaPfpwZ zqWbHrP=Sz`wP6ps9OXVfNPHVtx+n8?Lix6+wGr#X^mYnW=W$Qmd`svJ7tgNjo3HwA z=D3+j1(xgn%s7*^`QhSzyGKv0^NnZAetft4{l*>p)xCo!sXYAlZQAM2#(H{sC%Oeo zv!`A^K3P($PxJJoqeZgwZe|)jd-iPFzV|cd&fl1u_3X3d<(E@leiZCJ%Cy$>@=MO# zV8xb)8D9Q@;d^bP+@}$S){E63H+j2XCq7QV2xa7QX6l9V3C!K+R6GUpbof_t?@KUvvu0ba_x-Z4 zmH^9;OACHWt8V-8?CrfRH#>QaJTBEJ?bl}5QhoHQ^Q%CQ2TG1l7JRW-(jeX&EHvxf z#jRG;J-jA3CAAc>Hi#+m6fQd9`%dJYc2Azcvf?XE%&)JyTU|Q5GssGXz1h#a`H9(% zREg%7g$6%rmowjR@8cDIqT(sh?|!DM$wkwzFFj{cNBdD3MV8Gsdo;R!y!opA$;MsM zcX{=!b7~s{XDRe9yEjc@f$^+kf&5#{syVlq9aGxIx9jd9+5K`V{|{#y_-y;yc=}8M z@8!RCq6s_B{WW>L^qQ37(dX}uKD;j}_Chk_uF6W$zq8NwS=#P@@a9q1<;%tGcM8vm z?$tiyaw_T#*Nfg~g*68uvm){RKRQ_(mY@3{{HLb<<^Rq9l6(BG@@T~FF&-0%0=E#a1tGmoFhWZ-kEcKd1d1y1kEW0(B-bIilSP)C&0WxsH-B$tHI zgV0%w`|EEkeK}X?d%5oR=~gfLB9F*K#|7Bn|_`DpvS*2Kx}E} z(zO8;PWWf$PQY896TkM*@>3dwP`WoK(P zKKYX2c6*!8rzwvgC;QyLWU_5W@j%g5Yi`n|Lfg*HYvMmk6f9s&R~u@b8ezRUCV?ph7S!w3w+t7w)C-`e3{3$ zWo}CJk{~Zjt`3KlVh`VV=`uMapV?RcC)se$|Emm)hBkS|JJwZYFs@K$`E}svF_yE< zin@ozzkafL{^m{3=f{%ABxbF0$v&H6lo;dFeB#;Z>H3wQpY`so@0I<2s59UjpXT;k zCR0kCZ$>m%-h2OX{l8}W2Txwiu;}~w z!(G0xsxVP_(@BjSxj)CU_Qq|VwSLa@O~J<3()1NS&6enAk*Hemf60@7&rP3wH`{mV zMoZj@y?vJjS{0VMXw87O34;Nc4kfD8%oUw<`D@kL3MrVoK)s- z|DlR;ecWEI3HAD7&)$cJhB~gb_FQu|;Vp|yb-L(_K(06jgP`4dF|(GXcv;l8bv@1U zoRf0K&%Z<1yFcSrpZNLtpC29Nw)^=b*-QPx&KNySvF|Z4F$zo=w6O0sLe>G8G#jjMbaBl z2@cNc``qsHuCh^13wTUuE8*Q+@jTPJW)V zNk{ir+LZS(oM-qZE}OC>%lp}9%hkTl%Tss!U)azn{#^K7sRMIC)rR&ft%^^N*njR9 zJyc$0+25@rw{G#H1q_Bd1^m}F__%of&8V5!oye%*dBTnL=L&_>#glYYPX-yOGyT3{ zc<`Lq$ISP?K)tZ~xsSDj8TPF(2Jtqx7`FX9tfZol8VNcQcH3>;=i$%)bk~2>|Iuv! zgZYukqi4@%?R)*B_x`W`9lQ50G?zWy>YKNuV}?)vj$Jk9wEuSPejRpWAPkrcI@80I8*Ch?f2MIXRSDTITbTr>n`g*@p($% zoS<#C(bpHw?^73XZ7jNwo|y2_V7ows>WR-xiag)T#je#^?sah${&h}mcjhdknPNH9 zY*+uBvn?~``VN)eHCjJ2QXal}{Z(qo*IVB@T5QfcZ_KcpZ!Fb&;`1HVZrRgMjW`6& z^fKq2S+?%*osDa<-6~I|gb1i}s&!RFtm}9*<7LUIze$Y(O%|R4NxhTedb}qslRPB4 zqTo?(>VDp%?H4mr9{#_~sjjZBGtGO8q0h45blq~9oMY$Com(-x?VRS3@N=w(yB}}O z?RL5lW_tRmP)pKYy_1^+AAg*pv$eH5D|k}Esfm+WsPYpguCHT* zHr%{+<+jkn43X>CujjmK+aqx?Ind(vW978XlJo06B^Q`x38k`JcPF?mEZw1qm0GzN=K8d-_vze(fLUmJKFcioD-Hv(JmS zbvEY>oTTXD`DT*l-N@4(CHZe9r!KiBE95yV-NiF!B8St3SMzR(cDBX*G&z0Yocg|- z?=qBwIDXyZnyBXKa{F7(Hr1fWE$&mO}l-?L)rOzea9Y4pARWZ0<@a;Eib)W`|!clsO)W}PoFKb zu#t~?)736!dht!?N;#*KwVU{*6hnT5TiCK>U+nTd_aXW8xkS%7yLRT)?@#o3KPhHT zcGvvux6hAu9$FA{G4J}r`>KbgO?x0{*8X|EJ%7B6Sf9CG%_FNB_kZtIdR3=>m&=ID zeW$0zymJ<|c8@Zw7D_x{VX}Fb%HKKdN1Jj?9{s2g<} zDblGskLUV~`Fp~6-(OE$cw)U``-T4xzkc)(-~BB^MM`;%UVlnQLGkg0yw4s?*s|g3 zq{B+h^(PzWzWcCa>$NatXN_Hc!PjjkcP`Q3T6S48Q0Vd%-A?Bgi8Y_>`;yu(w+Z+g zF@P7mUN^aN|EK={d-wluGOr2z^eHv;Yy6T5o`VKH`^r}B=->Zl{SUrl?|wVIF*7Y= z{IhEPdg=Io-+OP$&c7Yq_WySM{yCiAC2l4E|5yLh^2gC=zMMB@(uSU~+ht_u3#n_a z{yNM4_e1^*ZpCGF$NKI5Dc=8SzwdC`?qzvdr&c{V8lC^~&Cz1Je@}wLW}A9WDk`iz zxoy?VxpO{zFnC_KbIIH4MJ7+beCj&={JcQmnZHSVT8|#x6#aa4*5=dR|E|^lnjh%X zA30t0X<2uGpp)0GZO$AQYP+WhXt!>N3z4|H+wjBBlz#<1ybqT!VFi{wKfptxoa2^m|{tPWsuc*Q#IV?Jeg|H@V`W93;e>t-)dP zC1?WUp(Q*LHR%rV9_v|dEKp^h_LotIdy$H;(AJ(ECzrU%oGbbMcK4OFy4N?mwZyy3 z30}VGb=h~FD`!l!8(czDLsOsKe01b<{lD%>Hg=T%Jm9J0z7B(^Mm$Px;at{?#i87k+m$9nrWJ*u* zv~8wWmZe6AMJV_MnY|Vb-Kpv;{O$Yq9TxV=r)yp{T${Cewf3r2Oo}_o|F>*fwPVMg zlzrRXBY&N+m(_lxl4dn?Q_Omc{d-)F8_r&&Am18*aMx3VL9ErQJJq+ zDV=v$U?~kPF0Aa^I_+bHQ+D*W*StYqYL5-m)6+Aa&i$EtyQre1A#Bn$lP${UP7V z7b@Sr{I*Fpn;$rZ)v3byXmK#`u~$?-9(J9e##jM3FNtyI#ZJNxXd^VMGMl~=?S zXP;%u=Be!1Wa9Meg;}!mvR&n7;u=#zT&xz|5b;pSoRk#R?80K^=sYR?%G&;4S2m{a z3i0&~z3#G+J^a>zeJ>vwTVIBS1$rg-E;bcYRN2@! z(J3jaIC-74*ra16^Ykt;^K?Amys%W5qbsRi zp~L6binV-k$YAHW(PyjR6q9h_;N$;c9*vi{WL+bYe^u{b4}STAjpL6q*P-m_4cFRj ze?(qh&fw8GNoeWT_p7YA&oR4hoTkB;DOI?^{_&H0hQF(eAMG&i+ajUav3bw?6WVWW z17|IB(~MXvb|v&^g^8M{&^o>8F)?uq7th%Aani(V60?rQ+?Q_J?{|BaZ06yu)1A|e zEKG9VybG6oaMgBQqfFu9mG_zDuD|B$KD=X_xyaVWv&)t^WO^=HtZ;k6zxgdkES`UF zF8zDUtF1Irq|$!IyJAh%KZP6zW==Bn&6ez6w&&-uXq&oEYCkicoHg3&?_Ut4u;c*e z`HltbOI-A;e{Sl#eeI3C_v`QHrPtr?(?9*K_FloG_6i;?mX~&`fBpP({O*Ux?R(d~ z;V=Hf#=rA(+~KOXW;d_Cdmgg?pM7m1!-Mp~J$Xet{{1?-?fo{{m&g78%RYJb?cKk3 zn;9F<+pn~jXGpkExXV*q)JHuSG!R={P;g*%`1&6o4!{5W;i2<7vFU&Qz5j2w`fJm! zm6d;<2o_2`E{KVX-FP!EBl>WKjp{YS_}@S0FJBow&$ixiXGCE^(V-l(=O3m0Gj2`$ zm~y5jfBw;`)+>Via<)(Ee|(L9{^EyX{hzu250w}#&dWZP>lrF~W_j?m)2-L1m&uCm zZ+Y|WO!~c=xbJ@_sIA`mzU`+7ga6U1PTzhWG1}qjKGALE0|nVGiJPzM)@$}2etdI_ zn#4EOuGD&&P=@t?oKCm4X6@Ity?U*DXHJBJ+1B!1_h+Bqxobzt)~E|tbkF@fx6D6U zz$Di>@W+bXCrg~BscrFny?EU%vCCVQcs8+3o6ddz=odAP7w6twi27u5cpIB+=CjY1 z;o;$XDn2&-ta%lzFpYalSjt9!!5Ka7DjT2u`64>G@Z86XjIJA(uG8KUma~oZ*cJ}a z%Cz>rj>jEevreY%eYJab?3uXqvW%XE8eRWxlpd?9oTuEPBL94EaQUoMiR>F~B1OxY*sM;zxt;iFNfqJ}^d3o1|j+yS@EP`frW3o|7b!WiOwUkS^I6q`BnN+$zE@5Eq-*o0H8;ehqmnze zx@A7C<$87LwAL#oRaTDmmHN$&iIHJfd=FRHD4s5!bVOaY$4$9@t%dvTD$S#R68b-; zINddSqI~{A$0C;3GLKIl$v%6yborEBiK}+pow6{ZH^6JLvh1!?y0721S@_j_nO(fX zqjd|PyUfukrM}V)JEcwD1k{w@da*5Yg5tmRyes(wMIJgeu2$xcs&Y21bUuD>?seJO z=`&aodOj*Rzd6g>ekJ4a9)A{QXNSvG7Zmy)$2Hrg$dqpCITyY-**m6sRm|&)d-WZA zH=oP?*ZTUVo9tmnHc6-O1AJ$>cUyXC#Fvy8&)oX3Qgeb=!{<*^cdh(*Z`#2(R~t6w zCOq16?`mC!(Cx;>*W*R6bsqd3yP082kjqA;K9R+R=kDd4$}!`7uvE=o=#q_cS8|lN zLx05Nqn+lfva@n-3mu=eEi=H$@Kn)~Z<=!J{mxrj?_ZF|yEgN;$c#MsZ^zHvnEU&R z?*_M1*76arlUrD}e6jpH+n@>t2alWT z%q8DFmfCy}brtlD{$5g7uh+87i6Nn9;+yxfpPog(|L|;fzTy1yjwcgpUKGszqLQ=k zcI@%LU-a+SE%~^4U)}#bA9ua|y(#~DfA*cXOXbi1NIbti*6j-apMCQU>uUuK9_g_@ z$on(1Z{fch^Fzxo@3yb})bhUOxpheBQS<#jeP=Cuc(hx5O_=tv$A+JO$}DB^pJ(%s z|KEr2pgGbVoX-}n4}_xsPc|G%weWMwBF=e#iKRY&;pNvl6^-eB+wY`H$+wZ+TDUwSfsvHmWxdiwBi`8!gkYaT3%E7fZBC`8deEjnK^5x5~ zpWhZs)(xwu-I2j-h%PtoX!zthT<8Qy6O6Q}0zohz)tIT{q!`D4Itn6y}hqA5P z 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

Md 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

-H`0^%E^di&`8@ygT&aytRHVx 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 +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit (char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#if defined(_MSC_VER) || defined(__SYMBIAN32__) +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + int ch; + fseek((FILE*) user, n, SEEK_CUR); + ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user) || ferror((FILE *) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum +{ + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL +STBI_THREAD_LOCAL +#endif +const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX/b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__addsizes_valid(a*b*c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a*b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a*b*c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two signed shorts is valid, 0 on overflow. +static int stbi__mul2shorts_valid(short a, short b) +{ + if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); + #else + STBI_NOTUSED(bpc); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); + #endif + + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp, ri); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *) stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); + if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h>>1); row++) { + stbi_uc *row0 = bytes + row*bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *) result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *) result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f,x,y,comp,req_comp); + fclose(f); + return result; +} + + +#endif //!STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_mem(&s,buffer,len); + + result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s,f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; + #else + STBI_NOTUSED(f); + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; + #endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) { + for (j=0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc) (i+1); + if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); + } + } + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if(c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i=0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + while (x == 255) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) return 1; + m = stbi__get_marker(j); + } + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i=0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i=0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s],s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static const int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = +{ + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 +}; +static const stbi_uc stbi__zdefault_distance[32] = +{ + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n*bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior; + int filter = *raw++; + + if (filter > 4) + return stbi__err("invalid filter","Corrupt PNG"); + + if (depth < 8) { + if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); + cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k=0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes+1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1)*filter_bytes; + #define STBI__CASE(f) \ + case f: \ + for (k=0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: memcpy(cur, raw, nk); break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; + } + #undef STBI__CASE + raw += nk; + } else { + STBI_ASSERT(img_n+1 == out_n); + #define STBI__CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ + for (k=0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; + } + #undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + stride*j; // start at the beginning of the row again + for (i=0; i < x; ++i,cur+=output_bytes) { + cur[filter_bytes+1] = 255; + } + } + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k=x*img_n; k >= 2; k-=2, ++in) { + *cur++ = scale * ((*in >> 4) ); + *cur++ = scale * ((*in ) & 0x0f); + } + if (k > 0) *cur++ = scale * ((*in >> 4) ); + } else if (depth == 2) { + for (k=x*img_n; k >= 4; k-=4, ++in) { + *cur++ = scale * ((*in >> 6) ); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in ) & 0x03); + } + if (k > 0) *cur++ = scale * ((*in >> 6) ); + if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k=x*img_n; k >= 8; k-=8, ++in) { + *cur++ = scale * ((*in >> 7) ); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in ) & 0x01); + } + if (k > 0) *cur++ = scale * ((*in >> 7) ); + if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride*j; + if (img_n == 1) { + for (q=x-1; q >= 0; --q) { + cur[q*2+1] = 255; + cur[q*2+0] = cur[q]; + } + } else { + STBI_ASSERT(img_n == 3); + for (q=x-1; q >= 0; --q) { + cur[q*4+3] = 255; + cur[q*4+2] = cur[q*3+2]; + cur[q*4+1] = cur[q*3+1]; + cur[q*4+0] = cur[q*3+0]; + } + } + } + } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16*)cur; + + for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { + *cur16 = (cur[0] << 8) | cur[1]; + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, + a->out + (j*x+i)*out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *) 1; +} + + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256*4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind( s ); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc) init_code; + g->codes[init_code].suffix = (stbi_uc) init_code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *) stbi__malloc(4 * pcount); + g->background = (stbi_uc *) stbi__malloc(4 * pcount); + g->history = (stbi_uc *) stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy( g->background, g->out, 4 * g->w * g->h ); + } + + // clear my history; + memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind( s ); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind( s ); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained,dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind( s); + return 0; + } + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, s->img_n, req_comp, s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + } + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + if((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if(*x == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) +{ + #ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; + #endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/libs/zstbi/libs/stbi/stb_image_resize.h b/libs/zstbi/libs/stbi/stb_image_resize.h new file mode 100644 index 0000000..c8a2567 --- /dev/null +++ b/libs/zstbi/libs/stbi/stb_image_resize.h @@ -0,0 +1,2634 @@ +/* stb_image_resize - v0.97 - public domain image resizing + by Jorge L Rodriguez (@VinoBS) - 2014 + http://github.com/nothings/stb + + Written with emphasis on usability, portability, and efficiency. (No + SIMD or threads, so it be easily outperformed by libs that use those.) + Only scaling and translation is supported, no rotations or shears. + Easy API downsamples w/Mitchell filter, upsamples w/cubic interpolation. + + COMPILING & LINKING + In one C/C++ file that #includes this file, do this: + #define STB_IMAGE_RESIZE_IMPLEMENTATION + before the #include. That will create the implementation in that file. + + QUICKSTART + stbir_resize_uint8( input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, num_channels) + stbir_resize_float(...) + stbir_resize_uint8_srgb( input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, + num_channels , alpha_chan , 0) + stbir_resize_uint8_srgb_edgemode( + input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, + num_channels , alpha_chan , 0, STBIR_EDGE_CLAMP) + // WRAP/REFLECT/ZERO + + FULL API + See the "header file" section of the source for API documentation. + + ADDITIONAL DOCUMENTATION + + SRGB & FLOATING POINT REPRESENTATION + The sRGB functions presume IEEE floating point. If you do not have + IEEE floating point, define STBIR_NON_IEEE_FLOAT. This will use + a slower implementation. + + MEMORY ALLOCATION + The resize functions here perform a single memory allocation using + malloc. To control the memory allocation, before the #include that + triggers the implementation, do: + + #define STBIR_MALLOC(size,context) ... + #define STBIR_FREE(ptr,context) ... + + Each resize function makes exactly one call to malloc/free, so to use + temp memory, store the temp memory in the context and return that. + + ASSERT + Define STBIR_ASSERT(boolval) to override assert() and not use assert.h + + OPTIMIZATION + Define STBIR_SATURATE_INT to compute clamp values in-range using + integer operations instead of float operations. This may be faster + on some platforms. + + DEFAULT FILTERS + For functions which don't provide explicit control over what filters + to use, you can change the compile-time defaults with + + #define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_something + #define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_something + + See stbir_filter in the header-file section for the list of filters. + + NEW FILTERS + A number of 1D filter kernels are used. For a list of + supported filters see the stbir_filter enum. To add a new filter, + write a filter function and add it to stbir__filter_info_table. + + PROGRESS + For interactive use with slow resize operations, you can install + a progress-report callback: + + #define STBIR_PROGRESS_REPORT(val) some_func(val) + + The parameter val is a float which goes from 0 to 1 as progress is made. + + For example: + + static void my_progress_report(float progress); + #define STBIR_PROGRESS_REPORT(val) my_progress_report(val) + + #define STB_IMAGE_RESIZE_IMPLEMENTATION + #include "stb_image_resize.h" + + static void my_progress_report(float progress) + { + printf("Progress: %f%%\n", progress*100); + } + + MAX CHANNELS + If your image has more than 64 channels, define STBIR_MAX_CHANNELS + to the max you'll have. + + ALPHA CHANNEL + Most of the resizing functions provide the ability to control how + the alpha channel of an image is processed. The important things + to know about this: + + 1. The best mathematically-behaved version of alpha to use is + called "premultiplied alpha", in which the other color channels + have had the alpha value multiplied in. If you use premultiplied + alpha, linear filtering (such as image resampling done by this + library, or performed in texture units on GPUs) does the "right + thing". While premultiplied alpha is standard in the movie CGI + industry, it is still uncommon in the videogame/real-time world. + + If you linearly filter non-premultiplied alpha, strange effects + occur. (For example, the 50/50 average of 99% transparent bright green + and 1% transparent black produces 50% transparent dark green when + non-premultiplied, whereas premultiplied it produces 50% + transparent near-black. The former introduces green energy + that doesn't exist in the source image.) + + 2. Artists should not edit premultiplied-alpha images; artists + want non-premultiplied alpha images. Thus, art tools generally output + non-premultiplied alpha images. + + 3. You will get best results in most cases by converting images + to premultiplied alpha before processing them mathematically. + + 4. If you pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, the + resizer does not do anything special for the alpha channel; + it is resampled identically to other channels. This produces + the correct results for premultiplied-alpha images, but produces + less-than-ideal results for non-premultiplied-alpha images. + + 5. If you do not pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, + then the resizer weights the contribution of input pixels + based on their alpha values, or, equivalently, it multiplies + the alpha value into the color channels, resamples, then divides + by the resultant alpha value. Input pixels which have alpha=0 do + not contribute at all to output pixels unless _all_ of the input + pixels affecting that output pixel have alpha=0, in which case + the result for that pixel is the same as it would be without + STBIR_FLAG_ALPHA_PREMULTIPLIED. However, this is only true for + input images in integer formats. For input images in float format, + input pixels with alpha=0 have no effect, and output pixels + which have alpha=0 will be 0 in all channels. (For float images, + you can manually achieve the same result by adding a tiny epsilon + value to the alpha channel of every image, and then subtracting + or clamping it at the end.) + + 6. You can suppress the behavior described in #5 and make + all-0-alpha pixels have 0 in all channels by #defining + STBIR_NO_ALPHA_EPSILON. + + 7. You can separately control whether the alpha channel is + interpreted as linear or affected by the colorspace. By default + it is linear; you almost never want to apply the colorspace. + (For example, graphics hardware does not apply sRGB conversion + to the alpha channel.) + + CONTRIBUTORS + Jorge L Rodriguez: Implementation + Sean Barrett: API design, optimizations + Aras Pranckevicius: bugfix + Nathan Reed: warning fixes + + REVISIONS + 0.97 (2020-02-02) fixed warning + 0.96 (2019-03-04) fixed warnings + 0.95 (2017-07-23) fixed warnings + 0.94 (2017-03-18) fixed warnings + 0.93 (2017-03-03) fixed bug with certain combinations of heights + 0.92 (2017-01-02) fix integer overflow on large (>2GB) images + 0.91 (2016-04-02) fix warnings; fix handling of subpixel regions + 0.90 (2014-09-17) first released version + + LICENSE + See end of file for license information. + + TODO + Don't decode all of the image data when only processing a partial tile + Don't use full-width decode buffers when only processing a partial tile + When processing wide images, break processing into tiles so data fits in L1 cache + Installable filters? + Resize that respects alpha test coverage + (Reference code: FloatImage::alphaTestCoverage and FloatImage::scaleAlphaToCoverage: + https://code.google.com/p/nvidia-texture-tools/source/browse/trunk/src/nvimage/FloatImage.cpp ) +*/ + +#ifndef STBIR_INCLUDE_STB_IMAGE_RESIZE_H +#define STBIR_INCLUDE_STB_IMAGE_RESIZE_H + +#ifdef _MSC_VER +typedef unsigned char stbir_uint8; +typedef unsigned short stbir_uint16; +typedef unsigned int stbir_uint32; +#else +#include +typedef uint8_t stbir_uint8; +typedef uint16_t stbir_uint16; +typedef uint32_t stbir_uint32; +#endif + +#ifndef STBIRDEF +#ifdef STB_IMAGE_RESIZE_STATIC +#define STBIRDEF static +#else +#ifdef __cplusplus +#define STBIRDEF extern "C" +#else +#define STBIRDEF extern +#endif +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// Easy-to-use API: +// +// * "input pixels" points to an array of image data with 'num_channels' channels (e.g. RGB=3, RGBA=4) +// * input_w is input image width (x-axis), input_h is input image height (y-axis) +// * stride is the offset between successive rows of image data in memory, in bytes. you can +// specify 0 to mean packed continuously in memory +// * alpha channel is treated identically to other channels. +// * colorspace is linear or sRGB as specified by function name +// * returned result is 1 for success or 0 in case of an error. +// #define STBIR_ASSERT() to trigger an assert on parameter validation errors. +// * Memory required grows approximately linearly with input and output size, but with +// discontinuities at input_w == output_w and input_h == output_h. +// * These functions use a "default" resampling filter defined at compile time. To change the filter, +// you can change the compile-time defaults by #defining STBIR_DEFAULT_FILTER_UPSAMPLE +// and STBIR_DEFAULT_FILTER_DOWNSAMPLE, or you can use the medium-complexity API. + +STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels); + +STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels); + + +// The following functions interpret image data as gamma-corrected sRGB. +// Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel, +// or otherwise provide the index of the alpha channel. Flags value +// of 0 will probably do the right thing if you're not sure what +// the flags mean. + +#define STBIR_ALPHA_CHANNEL_NONE -1 + +// Set this flag if your texture has premultiplied alpha. Otherwise, stbir will +// use alpha-weighted resampling (effectively premultiplying, resampling, +// then unpremultiplying). +#define STBIR_FLAG_ALPHA_PREMULTIPLIED (1 << 0) +// The specified alpha channel should be handled as gamma-corrected value even +// when doing sRGB operations. +#define STBIR_FLAG_ALPHA_USES_COLORSPACE (1 << 1) + +STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags); + + +typedef enum +{ + STBIR_EDGE_CLAMP = 1, + STBIR_EDGE_REFLECT = 2, + STBIR_EDGE_WRAP = 3, + STBIR_EDGE_ZERO = 4, +} stbir_edge; + +// This function adds the ability to specify how requests to sample off the edge of the image are handled. +STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode); + +////////////////////////////////////////////////////////////////////////////// +// +// Medium-complexity API +// +// This extends the easy-to-use API as follows: +// +// * Alpha-channel can be processed separately +// * If alpha_channel is not STBIR_ALPHA_CHANNEL_NONE +// * Alpha channel will not be gamma corrected (unless flags&STBIR_FLAG_GAMMA_CORRECT) +// * Filters will be weighted by alpha channel (unless flags&STBIR_FLAG_ALPHA_PREMULTIPLIED) +// * Filter can be selected explicitly +// * uint16 image type +// * sRGB colorspace available for all types +// * context parameter for passing to STBIR_MALLOC + +typedef enum +{ + STBIR_FILTER_DEFAULT = 0, // use same filter type that easy-to-use API chooses + STBIR_FILTER_BOX = 1, // A trapezoid w/1-pixel wide ramps, same result as box for integer scale ratios + STBIR_FILTER_TRIANGLE = 2, // On upsampling, produces same results as bilinear texture filtering + STBIR_FILTER_CUBICBSPLINE = 3, // The cubic b-spline (aka Mitchell-Netrevalli with B=1,C=0), gaussian-esque + STBIR_FILTER_CATMULLROM = 4, // An interpolating cubic spline + STBIR_FILTER_MITCHELL = 5, // Mitchell-Netrevalli filter with B=1/3, C=1/3 +} stbir_filter; + +typedef enum +{ + STBIR_COLORSPACE_LINEAR, + STBIR_COLORSPACE_SRGB, + + STBIR_MAX_COLORSPACES, +} stbir_colorspace; + +// The following functions are all identical except for the type of the image data + +STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + +STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + +STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + + + +////////////////////////////////////////////////////////////////////////////// +// +// Full-complexity API +// +// This extends the medium API as follows: +// +// * uint32 image type +// * not typesafe +// * separate filter types for each axis +// * separate edge modes for each axis +// * can specify scale explicitly for subpixel correctness +// * can specify image source tile using texture coordinates + +typedef enum +{ + STBIR_TYPE_UINT8 , + STBIR_TYPE_UINT16, + STBIR_TYPE_UINT32, + STBIR_TYPE_FLOAT , + + STBIR_MAX_TYPES +} stbir_datatype; + +STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context); + +STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float x_scale, float y_scale, + float x_offset, float y_offset); + +STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float s0, float t0, float s1, float t1); +// (s0, t0) & (s1, t1) are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use. + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBIR_INCLUDE_STB_IMAGE_RESIZE_H + + + + + +#ifdef STB_IMAGE_RESIZE_IMPLEMENTATION + +#ifndef STBIR_ASSERT +#include +#define STBIR_ASSERT(x) assert(x) +#endif + +// For memset +#include + +#include + +#ifndef STBIR_MALLOC +#include +// use comma operator to evaluate c, to avoid "unused parameter" warnings +#define STBIR_MALLOC(size,c) ((void)(c), malloc(size)) +#define STBIR_FREE(ptr,c) ((void)(c), free(ptr)) +#endif + +#ifndef _MSC_VER +#ifdef __cplusplus +#define stbir__inline inline +#else +#define stbir__inline +#endif +#else +#define stbir__inline __forceinline +#endif + + +// should produce compiler error if size is wrong +typedef unsigned char stbir__validate_uint32[sizeof(stbir_uint32) == 4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBIR__NOTUSED(v) (void)(v) +#else +#define STBIR__NOTUSED(v) (void)sizeof(v) +#endif + +#define STBIR__ARRAY_SIZE(a) (sizeof((a))/sizeof((a)[0])) + +#ifndef STBIR_DEFAULT_FILTER_UPSAMPLE +#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM +#endif + +#ifndef STBIR_DEFAULT_FILTER_DOWNSAMPLE +#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL +#endif + +#ifndef STBIR_PROGRESS_REPORT +#define STBIR_PROGRESS_REPORT(float_0_to_1) +#endif + +#ifndef STBIR_MAX_CHANNELS +#define STBIR_MAX_CHANNELS 64 +#endif + +#if STBIR_MAX_CHANNELS > 65536 +#error "Too many channels; STBIR_MAX_CHANNELS must be no more than 65536." +// because we store the indices in 16-bit variables +#endif + +// This value is added to alpha just before premultiplication to avoid +// zeroing out color values. It is equivalent to 2^-80. If you don't want +// that behavior (it may interfere if you have floating point images with +// very small alpha values) then you can define STBIR_NO_ALPHA_EPSILON to +// disable it. +#ifndef STBIR_ALPHA_EPSILON +#define STBIR_ALPHA_EPSILON ((float)1 / (1 << 20) / (1 << 20) / (1 << 20) / (1 << 20)) +#endif + + + +#ifdef _MSC_VER +#define STBIR__UNUSED_PARAM(v) (void)(v) +#else +#define STBIR__UNUSED_PARAM(v) (void)sizeof(v) +#endif + +// must match stbir_datatype +static unsigned char stbir__type_size[] = { + 1, // STBIR_TYPE_UINT8 + 2, // STBIR_TYPE_UINT16 + 4, // STBIR_TYPE_UINT32 + 4, // STBIR_TYPE_FLOAT +}; + +// Kernel function centered at 0 +typedef float (stbir__kernel_fn)(float x, float scale); +typedef float (stbir__support_fn)(float scale); + +typedef struct +{ + stbir__kernel_fn* kernel; + stbir__support_fn* support; +} stbir__filter_info; + +// When upsampling, the contributors are which source pixels contribute. +// When downsampling, the contributors are which destination pixels are contributed to. +typedef struct +{ + int n0; // First contributing pixel + int n1; // Last contributing pixel +} stbir__contributors; + +typedef struct +{ + const void* input_data; + int input_w; + int input_h; + int input_stride_bytes; + + void* output_data; + int output_w; + int output_h; + int output_stride_bytes; + + float s0, t0, s1, t1; + + float horizontal_shift; // Units: output pixels + float vertical_shift; // Units: output pixels + float horizontal_scale; + float vertical_scale; + + int channels; + int alpha_channel; + stbir_uint32 flags; + stbir_datatype type; + stbir_filter horizontal_filter; + stbir_filter vertical_filter; + stbir_edge edge_horizontal; + stbir_edge edge_vertical; + stbir_colorspace colorspace; + + stbir__contributors* horizontal_contributors; + float* horizontal_coefficients; + + stbir__contributors* vertical_contributors; + float* vertical_coefficients; + + int decode_buffer_pixels; + float* decode_buffer; + + float* horizontal_buffer; + + // cache these because ceil/floor are inexplicably showing up in profile + int horizontal_coefficient_width; + int vertical_coefficient_width; + int horizontal_filter_pixel_width; + int vertical_filter_pixel_width; + int horizontal_filter_pixel_margin; + int vertical_filter_pixel_margin; + int horizontal_num_contributors; + int vertical_num_contributors; + + int ring_buffer_length_bytes; // The length of an individual entry in the ring buffer. The total number of ring buffers is stbir__get_filter_pixel_width(filter) + int ring_buffer_num_entries; // Total number of entries in the ring buffer. + int ring_buffer_first_scanline; + int ring_buffer_last_scanline; + int ring_buffer_begin_index; // first_scanline is at this index in the ring buffer + float* ring_buffer; + + float* encode_buffer; // A temporary buffer to store floats so we don't lose precision while we do multiply-adds. + + int horizontal_contributors_size; + int horizontal_coefficients_size; + int vertical_contributors_size; + int vertical_coefficients_size; + int decode_buffer_size; + int horizontal_buffer_size; + int ring_buffer_size; + int encode_buffer_size; +} stbir__info; + + +static const float stbir__max_uint8_as_float = 255.0f; +static const float stbir__max_uint16_as_float = 65535.0f; +static const double stbir__max_uint32_as_float = 4294967295.0; + + +static stbir__inline int stbir__min(int a, int b) +{ + return a < b ? a : b; +} + +static stbir__inline float stbir__saturate(float x) +{ + if (x < 0) + return 0; + + if (x > 1) + return 1; + + return x; +} + +#ifdef STBIR_SATURATE_INT +static stbir__inline stbir_uint8 stbir__saturate8(int x) +{ + if ((unsigned int) x <= 255) + return x; + + if (x < 0) + return 0; + + return 255; +} + +static stbir__inline stbir_uint16 stbir__saturate16(int x) +{ + if ((unsigned int) x <= 65535) + return x; + + if (x < 0) + return 0; + + return 65535; +} +#endif + +static float stbir__srgb_uchar_to_linear_float[256] = { + 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, 0.002428f, 0.002732f, 0.003035f, + 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f, + 0.008023f, 0.008568f, 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, 0.014444f, + 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, 0.021219f, 0.022174f, 0.023153f, 0.024158f, + 0.025187f, 0.026241f, 0.027321f, 0.028426f, 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f, + 0.038204f, 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, 0.051269f, 0.052861f, + 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f, + 0.074214f, 0.076185f, 0.078187f, 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f, + 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, 0.116971f, 0.119538f, 0.122139f, + 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f, + 0.155926f, 0.158961f, 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, 0.187821f, + 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, 0.215861f, 0.219526f, 0.223228f, 0.226966f, + 0.230740f, 0.234551f, 0.238398f, 0.242281f, 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f, + 0.274677f, 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, 0.313989f, 0.318547f, + 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f, + 0.376262f, 0.381326f, 0.386430f, 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f, + 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, 0.479320f, 0.485150f, 0.491021f, + 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f, + 0.564712f, 0.571125f, 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, 0.630757f, + 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, 0.686685f, 0.693872f, 0.701102f, 0.708376f, + 0.715694f, 0.723055f, 0.730461f, 0.737911f, 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f, + 0.799103f, 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, 0.871367f, 0.879622f, + 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, + 0.982251f, 0.991102f, 1.0f +}; + +static float stbir__srgb_to_linear(float f) +{ + if (f <= 0.04045f) + return f / 12.92f; + else + return (float)pow((f + 0.055f) / 1.055f, 2.4f); +} + +static float stbir__linear_to_srgb(float f) +{ + if (f <= 0.0031308f) + return f * 12.92f; + else + return 1.055f * (float)pow(f, 1 / 2.4f) - 0.055f; +} + +#ifndef STBIR_NON_IEEE_FLOAT +// From https://gist.github.com/rygorous/2203834 + +typedef union +{ + stbir_uint32 u; + float f; +} stbir__FP32; + +static const stbir_uint32 fp32_to_srgb8_tab4[104] = { + 0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d, 0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d, + 0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a, 0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a, + 0x010e0033, 0x01280033, 0x01410033, 0x015b0033, 0x01750033, 0x018f0033, 0x01a80033, 0x01c20033, + 0x01dc0067, 0x020f0067, 0x02430067, 0x02760067, 0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067, + 0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce, 0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5, + 0x06970158, 0x07420142, 0x07e30130, 0x087b0120, 0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2, + 0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180, 0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143, + 0x11070264, 0x1238023e, 0x1357021d, 0x14660201, 0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af, + 0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad, 0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240, + 0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392, 0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300, + 0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5, 0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401, + 0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559, + 0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723, +}; + +static stbir_uint8 stbir__linear_to_srgb_uchar(float in) +{ + static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps + static const stbir__FP32 minval = { (127-13) << 23 }; + stbir_uint32 tab,bias,scale,t; + stbir__FP32 f; + + // Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively. + // The tests are carefully written so that NaNs map to 0, same as in the reference + // implementation. + if (!(in > minval.f)) // written this way to catch NaNs + in = minval.f; + if (in > almostone.f) + in = almostone.f; + + // Do the table lookup and unpack bias, scale + f.f = in; + tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20]; + bias = (tab >> 16) << 9; + scale = tab & 0xffff; + + // Grab next-highest mantissa bits and perform linear interpolation + t = (f.u >> 12) & 0xff; + return (unsigned char) ((bias + scale*t) >> 16); +} + +#else +// sRGB transition values, scaled by 1<<28 +static int stbir__srgb_offset_to_linear_scaled[256] = +{ + 0, 40738, 122216, 203693, 285170, 366648, 448125, 529603, + 611080, 692557, 774035, 855852, 942009, 1033024, 1128971, 1229926, + 1335959, 1447142, 1563542, 1685229, 1812268, 1944725, 2082664, 2226148, + 2375238, 2529996, 2690481, 2856753, 3028870, 3206888, 3390865, 3580856, + 3776916, 3979100, 4187460, 4402049, 4622919, 4850123, 5083710, 5323731, + 5570236, 5823273, 6082892, 6349140, 6622065, 6901714, 7188133, 7481369, + 7781466, 8088471, 8402427, 8723380, 9051372, 9386448, 9728650, 10078021, + 10434603, 10798439, 11169569, 11548036, 11933879, 12327139, 12727857, 13136073, + 13551826, 13975156, 14406100, 14844697, 15290987, 15745007, 16206795, 16676389, + 17153826, 17639142, 18132374, 18633560, 19142734, 19659934, 20185196, 20718552, + 21260042, 21809696, 22367554, 22933648, 23508010, 24090680, 24681686, 25281066, + 25888850, 26505076, 27129772, 27762974, 28404716, 29055026, 29713942, 30381490, + 31057708, 31742624, 32436272, 33138682, 33849884, 34569912, 35298800, 36036568, + 36783260, 37538896, 38303512, 39077136, 39859796, 40651528, 41452360, 42262316, + 43081432, 43909732, 44747252, 45594016, 46450052, 47315392, 48190064, 49074096, + 49967516, 50870356, 51782636, 52704392, 53635648, 54576432, 55526772, 56486700, + 57456236, 58435408, 59424248, 60422780, 61431036, 62449032, 63476804, 64514376, + 65561776, 66619028, 67686160, 68763192, 69850160, 70947088, 72053992, 73170912, + 74297864, 75434880, 76581976, 77739184, 78906536, 80084040, 81271736, 82469648, + 83677792, 84896192, 86124888, 87363888, 88613232, 89872928, 91143016, 92423512, + 93714432, 95015816, 96327688, 97650056, 98982952, 100326408, 101680440, 103045072, + 104420320, 105806224, 107202800, 108610064, 110028048, 111456776, 112896264, 114346544, + 115807632, 117279552, 118762328, 120255976, 121760536, 123276016, 124802440, 126339832, + 127888216, 129447616, 131018048, 132599544, 134192112, 135795792, 137410592, 139036528, + 140673648, 142321952, 143981456, 145652208, 147334208, 149027488, 150732064, 152447968, + 154175200, 155913792, 157663776, 159425168, 161197984, 162982240, 164777968, 166585184, + 168403904, 170234160, 172075968, 173929344, 175794320, 177670896, 179559120, 181458992, + 183370528, 185293776, 187228736, 189175424, 191133888, 193104112, 195086128, 197079968, + 199085648, 201103184, 203132592, 205173888, 207227120, 209292272, 211369392, 213458480, + 215559568, 217672656, 219797792, 221934976, 224084240, 226245600, 228419056, 230604656, + 232802400, 235012320, 237234432, 239468736, 241715280, 243974080, 246245120, 248528464, + 250824112, 253132064, 255452368, 257785040, 260130080, 262487520, 264857376, 267239664, +}; + +static stbir_uint8 stbir__linear_to_srgb_uchar(float f) +{ + int x = (int) (f * (1 << 28)); // has headroom so you don't need to clamp + int v = 0; + int i; + + // Refine the guess with a short binary search. + i = v + 128; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 64; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 32; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 16; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 8; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 4; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 2; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 1; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + + return (stbir_uint8) v; +} +#endif + +static float stbir__filter_trapezoid(float x, float scale) +{ + float halfscale = scale / 2; + float t = 0.5f + halfscale; + STBIR_ASSERT(scale <= 1); + + x = (float)fabs(x); + + if (x >= t) + return 0; + else + { + float r = 0.5f - halfscale; + if (x <= r) + return 1; + else + return (t - x) / scale; + } +} + +static float stbir__support_trapezoid(float scale) +{ + STBIR_ASSERT(scale <= 1); + return 0.5f + scale / 2; +} + +static float stbir__filter_triangle(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x <= 1.0f) + return 1 - x; + else + return 0; +} + +static float stbir__filter_cubic(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return (4 + x*x*(3*x - 6))/6; + else if (x < 2.0f) + return (8 + x*(-12 + x*(6 - x)))/6; + + return (0.0f); +} + +static float stbir__filter_catmullrom(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return 1 - x*x*(2.5f - 1.5f*x); + else if (x < 2.0f) + return 2 - x*(4 + x*(0.5f*x - 2.5f)); + + return (0.0f); +} + +static float stbir__filter_mitchell(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return (16 + x*x*(21 * x - 36))/18; + else if (x < 2.0f) + return (32 + x*(-60 + x*(36 - 7*x)))/18; + + return (0.0f); +} + +static float stbir__support_zero(float s) +{ + STBIR__UNUSED_PARAM(s); + return 0; +} + +static float stbir__support_one(float s) +{ + STBIR__UNUSED_PARAM(s); + return 1; +} + +static float stbir__support_two(float s) +{ + STBIR__UNUSED_PARAM(s); + return 2; +} + +static stbir__filter_info stbir__filter_info_table[] = { + { NULL, stbir__support_zero }, + { stbir__filter_trapezoid, stbir__support_trapezoid }, + { stbir__filter_triangle, stbir__support_one }, + { stbir__filter_cubic, stbir__support_two }, + { stbir__filter_catmullrom, stbir__support_two }, + { stbir__filter_mitchell, stbir__support_two }, +}; + +stbir__inline static int stbir__use_upsampling(float ratio) +{ + return ratio > 1; +} + +stbir__inline static int stbir__use_width_upsampling(stbir__info* stbir_info) +{ + return stbir__use_upsampling(stbir_info->horizontal_scale); +} + +stbir__inline static int stbir__use_height_upsampling(stbir__info* stbir_info) +{ + return stbir__use_upsampling(stbir_info->vertical_scale); +} + +// This is the maximum number of input samples that can affect an output sample +// with the given filter +static int stbir__get_filter_pixel_width(stbir_filter filter, float scale) +{ + STBIR_ASSERT(filter != 0); + STBIR_ASSERT(filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + + if (stbir__use_upsampling(scale)) + return (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2); + else + return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2 / scale); +} + +// This is how much to expand buffers to account for filters seeking outside +// the image boundaries. +static int stbir__get_filter_pixel_margin(stbir_filter filter, float scale) +{ + return stbir__get_filter_pixel_width(filter, scale) / 2; +} + +static int stbir__get_coefficient_width(stbir_filter filter, float scale) +{ + if (stbir__use_upsampling(scale)) + return (int)ceil(stbir__filter_info_table[filter].support(1 / scale) * 2); + else + return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2); +} + +static int stbir__get_contributors(float scale, stbir_filter filter, int input_size, int output_size) +{ + if (stbir__use_upsampling(scale)) + return output_size; + else + return (input_size + stbir__get_filter_pixel_margin(filter, scale) * 2); +} + +static int stbir__get_total_horizontal_coefficients(stbir__info* info) +{ + return info->horizontal_num_contributors + * stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); +} + +static int stbir__get_total_vertical_coefficients(stbir__info* info) +{ + return info->vertical_num_contributors + * stbir__get_coefficient_width (info->vertical_filter, info->vertical_scale); +} + +static stbir__contributors* stbir__get_contributor(stbir__contributors* contributors, int n) +{ + return &contributors[n]; +} + +// For perf reasons this code is duplicated in stbir__resample_horizontal_upsample/downsample, +// if you change it here change it there too. +static float* stbir__get_coefficient(float* coefficients, stbir_filter filter, float scale, int n, int c) +{ + int width = stbir__get_coefficient_width(filter, scale); + return &coefficients[width*n + c]; +} + +static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max) +{ + switch (edge) + { + case STBIR_EDGE_ZERO: + return 0; // we'll decode the wrong pixel here, and then overwrite with 0s later + + case STBIR_EDGE_CLAMP: + if (n < 0) + return 0; + + if (n >= max) + return max - 1; + + return n; // NOTREACHED + + case STBIR_EDGE_REFLECT: + { + if (n < 0) + { + if (n < max) + return -n; + else + return max - 1; + } + + if (n >= max) + { + int max2 = max * 2; + if (n >= max2) + return 0; + else + return max2 - n - 1; + } + + return n; // NOTREACHED + } + + case STBIR_EDGE_WRAP: + if (n >= 0) + return (n % max); + else + { + int m = (-n) % max; + + if (m != 0) + m = max - m; + + return (m); + } + // NOTREACHED + + default: + STBIR_ASSERT(!"Unimplemented edge type"); + return 0; + } +} + +stbir__inline static int stbir__edge_wrap(stbir_edge edge, int n, int max) +{ + // avoid per-pixel switch + if (n >= 0 && n < max) + return n; + return stbir__edge_wrap_slow(edge, n, max); +} + +// What input pixels contribute to this output pixel? +static void stbir__calculate_sample_range_upsample(int n, float out_filter_radius, float scale_ratio, float out_shift, int* in_first_pixel, int* in_last_pixel, float* in_center_of_out) +{ + float out_pixel_center = (float)n + 0.5f; + float out_pixel_influence_lowerbound = out_pixel_center - out_filter_radius; + float out_pixel_influence_upperbound = out_pixel_center + out_filter_radius; + + float in_pixel_influence_lowerbound = (out_pixel_influence_lowerbound + out_shift) / scale_ratio; + float in_pixel_influence_upperbound = (out_pixel_influence_upperbound + out_shift) / scale_ratio; + + *in_center_of_out = (out_pixel_center + out_shift) / scale_ratio; + *in_first_pixel = (int)(floor(in_pixel_influence_lowerbound + 0.5)); + *in_last_pixel = (int)(floor(in_pixel_influence_upperbound - 0.5)); +} + +// What output pixels does this input pixel contribute to? +static void stbir__calculate_sample_range_downsample(int n, float in_pixels_radius, float scale_ratio, float out_shift, int* out_first_pixel, int* out_last_pixel, float* out_center_of_in) +{ + float in_pixel_center = (float)n + 0.5f; + float in_pixel_influence_lowerbound = in_pixel_center - in_pixels_radius; + float in_pixel_influence_upperbound = in_pixel_center + in_pixels_radius; + + float out_pixel_influence_lowerbound = in_pixel_influence_lowerbound * scale_ratio - out_shift; + float out_pixel_influence_upperbound = in_pixel_influence_upperbound * scale_ratio - out_shift; + + *out_center_of_in = in_pixel_center * scale_ratio - out_shift; + *out_first_pixel = (int)(floor(out_pixel_influence_lowerbound + 0.5)); + *out_last_pixel = (int)(floor(out_pixel_influence_upperbound - 0.5)); +} + +static void stbir__calculate_coefficients_upsample(stbir_filter filter, float scale, int in_first_pixel, int in_last_pixel, float in_center_of_out, stbir__contributors* contributor, float* coefficient_group) +{ + int i; + float total_filter = 0; + float filter_scale; + + STBIR_ASSERT(in_last_pixel - in_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. + + contributor->n0 = in_first_pixel; + contributor->n1 = in_last_pixel; + + STBIR_ASSERT(contributor->n1 >= contributor->n0); + + for (i = 0; i <= in_last_pixel - in_first_pixel; i++) + { + float in_pixel_center = (float)(i + in_first_pixel) + 0.5f; + coefficient_group[i] = stbir__filter_info_table[filter].kernel(in_center_of_out - in_pixel_center, 1 / scale); + + // If the coefficient is zero, skip it. (Don't do the <0 check here, we want the influence of those outside pixels.) + if (i == 0 && !coefficient_group[i]) + { + contributor->n0 = ++in_first_pixel; + i--; + continue; + } + + total_filter += coefficient_group[i]; + } + + // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. + // It would be true in exact math but is at best approximately true in floating-point math, + // and it would not make sense to try and put actual bounds on this here because it depends + // on the image aspect ratio which can get pretty extreme. + //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(in_last_pixel + 1) + 0.5f - in_center_of_out, 1/scale) == 0); + + STBIR_ASSERT(total_filter > 0.9); + STBIR_ASSERT(total_filter < 1.1f); // Make sure it's not way off. + + // Make sure the sum of all coefficients is 1. + filter_scale = 1 / total_filter; + + for (i = 0; i <= in_last_pixel - in_first_pixel; i++) + coefficient_group[i] *= filter_scale; + + for (i = in_last_pixel - in_first_pixel; i >= 0; i--) + { + if (coefficient_group[i]) + break; + + // This line has no weight. We can skip it. + contributor->n1 = contributor->n0 + i - 1; + } +} + +static void stbir__calculate_coefficients_downsample(stbir_filter filter, float scale_ratio, int out_first_pixel, int out_last_pixel, float out_center_of_in, stbir__contributors* contributor, float* coefficient_group) +{ + int i; + + STBIR_ASSERT(out_last_pixel - out_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(scale_ratio) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. + + contributor->n0 = out_first_pixel; + contributor->n1 = out_last_pixel; + + STBIR_ASSERT(contributor->n1 >= contributor->n0); + + for (i = 0; i <= out_last_pixel - out_first_pixel; i++) + { + float out_pixel_center = (float)(i + out_first_pixel) + 0.5f; + float x = out_pixel_center - out_center_of_in; + coefficient_group[i] = stbir__filter_info_table[filter].kernel(x, scale_ratio) * scale_ratio; + } + + // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. + // It would be true in exact math but is at best approximately true in floating-point math, + // and it would not make sense to try and put actual bounds on this here because it depends + // on the image aspect ratio which can get pretty extreme. + //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(out_last_pixel + 1) + 0.5f - out_center_of_in, scale_ratio) == 0); + + for (i = out_last_pixel - out_first_pixel; i >= 0; i--) + { + if (coefficient_group[i]) + break; + + // This line has no weight. We can skip it. + contributor->n1 = contributor->n0 + i - 1; + } +} + +static void stbir__normalize_downsample_coefficients(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, int input_size, int output_size) +{ + int num_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); + int num_coefficients = stbir__get_coefficient_width(filter, scale_ratio); + int i, j; + int skip; + + for (i = 0; i < output_size; i++) + { + float scale; + float total = 0; + + for (j = 0; j < num_contributors; j++) + { + if (i >= contributors[j].n0 && i <= contributors[j].n1) + { + float coefficient = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0); + total += coefficient; + } + else if (i < contributors[j].n0) + break; + } + + STBIR_ASSERT(total > 0.9f); + STBIR_ASSERT(total < 1.1f); + + scale = 1 / total; + + for (j = 0; j < num_contributors; j++) + { + if (i >= contributors[j].n0 && i <= contributors[j].n1) + *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0) *= scale; + else if (i < contributors[j].n0) + break; + } + } + + // Optimize: Skip zero coefficients and contributions outside of image bounds. + // Do this after normalizing because normalization depends on the n0/n1 values. + for (j = 0; j < num_contributors; j++) + { + int range, max, width; + + skip = 0; + while (*stbir__get_coefficient(coefficients, filter, scale_ratio, j, skip) == 0) + skip++; + + contributors[j].n0 += skip; + + while (contributors[j].n0 < 0) + { + contributors[j].n0++; + skip++; + } + + range = contributors[j].n1 - contributors[j].n0 + 1; + max = stbir__min(num_coefficients, range); + + width = stbir__get_coefficient_width(filter, scale_ratio); + for (i = 0; i < max; i++) + { + if (i + skip >= width) + break; + + *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i) = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i + skip); + } + + continue; + } + + // Using min to avoid writing into invalid pixels. + for (i = 0; i < num_contributors; i++) + contributors[i].n1 = stbir__min(contributors[i].n1, output_size - 1); +} + +// Each scan line uses the same kernel values so we should calculate the kernel +// values once and then we can use them for every scan line. +static void stbir__calculate_filters(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, float shift, int input_size, int output_size) +{ + int n; + int total_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); + + if (stbir__use_upsampling(scale_ratio)) + { + float out_pixels_radius = stbir__filter_info_table[filter].support(1 / scale_ratio) * scale_ratio; + + // Looping through out pixels + for (n = 0; n < total_contributors; n++) + { + float in_center_of_out; // Center of the current out pixel in the in pixel space + int in_first_pixel, in_last_pixel; + + stbir__calculate_sample_range_upsample(n, out_pixels_radius, scale_ratio, shift, &in_first_pixel, &in_last_pixel, &in_center_of_out); + + stbir__calculate_coefficients_upsample(filter, scale_ratio, in_first_pixel, in_last_pixel, in_center_of_out, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); + } + } + else + { + float in_pixels_radius = stbir__filter_info_table[filter].support(scale_ratio) / scale_ratio; + + // Looping through in pixels + for (n = 0; n < total_contributors; n++) + { + float out_center_of_in; // Center of the current out pixel in the in pixel space + int out_first_pixel, out_last_pixel; + int n_adjusted = n - stbir__get_filter_pixel_margin(filter, scale_ratio); + + stbir__calculate_sample_range_downsample(n_adjusted, in_pixels_radius, scale_ratio, shift, &out_first_pixel, &out_last_pixel, &out_center_of_in); + + stbir__calculate_coefficients_downsample(filter, scale_ratio, out_first_pixel, out_last_pixel, out_center_of_in, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); + } + + stbir__normalize_downsample_coefficients(contributors, coefficients, filter, scale_ratio, input_size, output_size); + } +} + +static float* stbir__get_decode_buffer(stbir__info* stbir_info) +{ + // The 0 index of the decode buffer starts after the margin. This makes + // it okay to use negative indexes on the decode buffer. + return &stbir_info->decode_buffer[stbir_info->horizontal_filter_pixel_margin * stbir_info->channels]; +} + +#define STBIR__DECODE(type, colorspace) ((int)(type) * (STBIR_MAX_COLORSPACES) + (int)(colorspace)) + +static void stbir__decode_scanline(stbir__info* stbir_info, int n) +{ + int c; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int input_w = stbir_info->input_w; + size_t input_stride_bytes = stbir_info->input_stride_bytes; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir_edge edge_horizontal = stbir_info->edge_horizontal; + stbir_edge edge_vertical = stbir_info->edge_vertical; + size_t in_buffer_row_offset = stbir__edge_wrap(edge_vertical, n, stbir_info->input_h) * input_stride_bytes; + const void* input_data = (char *) stbir_info->input_data + in_buffer_row_offset; + int max_x = input_w + stbir_info->horizontal_filter_pixel_margin; + int decode = STBIR__DECODE(type, colorspace); + + int x = -stbir_info->horizontal_filter_pixel_margin; + + // special handling for STBIR_EDGE_ZERO because it needs to return an item that doesn't appear in the input, + // and we want to avoid paying overhead on every pixel if not STBIR_EDGE_ZERO + if (edge_vertical == STBIR_EDGE_ZERO && (n < 0 || n >= stbir_info->input_h)) + { + for (; x < max_x; x++) + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + return; + } + + switch (decode) + { + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((float)((const unsigned char*)input_data)[input_pixel_index + c]) / stbir__max_uint8_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_uchar_to_linear_float[((const unsigned char*)input_data)[input_pixel_index + c]]; + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned char*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint8_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned short*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint16_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear((float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float)); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((const float*)input_data)[input_pixel_index + c]; + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((const float*)input_data)[input_pixel_index + c]); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((const float*)input_data)[input_pixel_index + alpha_channel]; + } + + break; + + default: + STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); + break; + } + + if (!(stbir_info->flags & STBIR_FLAG_ALPHA_PREMULTIPLIED)) + { + for (x = -stbir_info->horizontal_filter_pixel_margin; x < max_x; x++) + { + int decode_pixel_index = x * channels; + + // If the alpha value is 0 it will clobber the color values. Make sure it's not. + float alpha = decode_buffer[decode_pixel_index + alpha_channel]; +#ifndef STBIR_NO_ALPHA_EPSILON + if (stbir_info->type != STBIR_TYPE_FLOAT) { + alpha += STBIR_ALPHA_EPSILON; + decode_buffer[decode_pixel_index + alpha_channel] = alpha; + } +#endif + for (c = 0; c < channels; c++) + { + if (c == alpha_channel) + continue; + + decode_buffer[decode_pixel_index + c] *= alpha; + } + } + } + + if (edge_horizontal == STBIR_EDGE_ZERO) + { + for (x = -stbir_info->horizontal_filter_pixel_margin; x < 0; x++) + { + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + } + for (x = input_w; x < max_x; x++) + { + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + } + } +} + +static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length) +{ + return &ring_buffer[index * ring_buffer_length]; +} + +static float* stbir__add_empty_ring_buffer_entry(stbir__info* stbir_info, int n) +{ + int ring_buffer_index; + float* ring_buffer; + + stbir_info->ring_buffer_last_scanline = n; + + if (stbir_info->ring_buffer_begin_index < 0) + { + ring_buffer_index = stbir_info->ring_buffer_begin_index = 0; + stbir_info->ring_buffer_first_scanline = n; + } + else + { + ring_buffer_index = (stbir_info->ring_buffer_begin_index + (stbir_info->ring_buffer_last_scanline - stbir_info->ring_buffer_first_scanline)) % stbir_info->ring_buffer_num_entries; + STBIR_ASSERT(ring_buffer_index != stbir_info->ring_buffer_begin_index); + } + + ring_buffer = stbir__get_ring_buffer_entry(stbir_info->ring_buffer, ring_buffer_index, stbir_info->ring_buffer_length_bytes / sizeof(float)); + memset(ring_buffer, 0, stbir_info->ring_buffer_length_bytes); + + return ring_buffer; +} + + +static void stbir__resample_horizontal_upsample(stbir__info* stbir_info, float* output_buffer) +{ + int x, k; + int output_w = stbir_info->output_w; + int channels = stbir_info->channels; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; + float* horizontal_coefficients = stbir_info->horizontal_coefficients; + int coefficient_width = stbir_info->horizontal_coefficient_width; + + for (x = 0; x < output_w; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int out_pixel_index = x * channels; + int coefficient_group = coefficient_width * x; + int coefficient_counter = 0; + + STBIR_ASSERT(n1 >= n0); + STBIR_ASSERT(n0 >= -stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n1 >= -stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n0 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n1 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); + + switch (channels) { + case 1: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 1; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + } + break; + case 2: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 2; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + } + break; + case 3: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 3; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + } + break; + case 4: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 4; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; + } + break; + default: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * channels; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + int c; + STBIR_ASSERT(coefficient != 0); + for (c = 0; c < channels; c++) + output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; + } + break; + } + } +} + +static void stbir__resample_horizontal_downsample(stbir__info* stbir_info, float* output_buffer) +{ + int x, k; + int input_w = stbir_info->input_w; + int channels = stbir_info->channels; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; + float* horizontal_coefficients = stbir_info->horizontal_coefficients; + int coefficient_width = stbir_info->horizontal_coefficient_width; + int filter_pixel_margin = stbir_info->horizontal_filter_pixel_margin; + int max_x = input_w + filter_pixel_margin * 2; + + STBIR_ASSERT(!stbir__use_width_upsampling(stbir_info)); + + switch (channels) { + case 1: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 1; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 1; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + } + } + break; + + case 2: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 2; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 2; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + } + } + break; + + case 3: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 3; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 3; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + } + } + break; + + case 4: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 4; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 4; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; + } + } + break; + + default: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * channels; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int c; + int out_pixel_index = k * channels; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + for (c = 0; c < channels; c++) + output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; + } + } + break; + } +} + +static void stbir__decode_and_resample_upsample(stbir__info* stbir_info, int n) +{ + // Decode the nth scanline from the source image into the decode buffer. + stbir__decode_scanline(stbir_info, n); + + // Now resample it into the ring buffer. + if (stbir__use_width_upsampling(stbir_info)) + stbir__resample_horizontal_upsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); + else + stbir__resample_horizontal_downsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); + + // Now it's sitting in the ring buffer ready to be used as source for the vertical sampling. +} + +static void stbir__decode_and_resample_downsample(stbir__info* stbir_info, int n) +{ + // Decode the nth scanline from the source image into the decode buffer. + stbir__decode_scanline(stbir_info, n); + + memset(stbir_info->horizontal_buffer, 0, stbir_info->output_w * stbir_info->channels * sizeof(float)); + + // Now resample it into the horizontal buffer. + if (stbir__use_width_upsampling(stbir_info)) + stbir__resample_horizontal_upsample(stbir_info, stbir_info->horizontal_buffer); + else + stbir__resample_horizontal_downsample(stbir_info, stbir_info->horizontal_buffer); + + // Now it's sitting in the horizontal buffer ready to be distributed into the ring buffers. +} + +// Get the specified scan line from the ring buffer. +static float* stbir__get_ring_buffer_scanline(int get_scanline, float* ring_buffer, int begin_index, int first_scanline, int ring_buffer_num_entries, int ring_buffer_length) +{ + int ring_buffer_index = (begin_index + (get_scanline - first_scanline)) % ring_buffer_num_entries; + return stbir__get_ring_buffer_entry(ring_buffer, ring_buffer_index, ring_buffer_length); +} + + +static void stbir__encode_scanline(stbir__info* stbir_info, int num_pixels, void *output_buffer, float *encode_buffer, int channels, int alpha_channel, int decode) +{ + int x; + int n; + int num_nonalpha; + stbir_uint16 nonalpha[STBIR_MAX_CHANNELS]; + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) + { + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + float alpha = encode_buffer[pixel_index + alpha_channel]; + float reciprocal_alpha = alpha ? 1.0f / alpha : 0; + + // unrolling this produced a 1% slowdown upscaling a large RGBA linear-space image on my machine - stb + for (n = 0; n < channels; n++) + if (n != alpha_channel) + encode_buffer[pixel_index + n] *= reciprocal_alpha; + + // We added in a small epsilon to prevent the color channel from being deleted with zero alpha. + // Because we only add it for integer types, it will automatically be discarded on integer + // conversion, so we don't need to subtract it back out (which would be problematic for + // numeric precision reasons). + } + } + + // build a table of all channels that need colorspace correction, so + // we don't perform colorspace correction on channels that don't need it. + for (x = 0, num_nonalpha = 0; x < channels; ++x) + { + if (x != alpha_channel || (stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) + { + nonalpha[num_nonalpha++] = (stbir_uint16)x; + } + } + + #define STBIR__ROUND_INT(f) ((int) ((f)+0.5)) + #define STBIR__ROUND_UINT(f) ((stbir_uint32) ((f)+0.5)) + + #ifdef STBIR__SATURATE_INT + #define STBIR__ENCODE_LINEAR8(f) stbir__saturate8 (STBIR__ROUND_INT((f) * stbir__max_uint8_as_float )) + #define STBIR__ENCODE_LINEAR16(f) stbir__saturate16(STBIR__ROUND_INT((f) * stbir__max_uint16_as_float)) + #else + #define STBIR__ENCODE_LINEAR8(f) (unsigned char ) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint8_as_float ) + #define STBIR__ENCODE_LINEAR16(f) (unsigned short) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint16_as_float) + #endif + + switch (decode) + { + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned char*)output_buffer)[index] = STBIR__ENCODE_LINEAR8(encode_buffer[index]); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned char*)output_buffer)[index] = stbir__linear_to_srgb_uchar(encode_buffer[index]); + } + + if (!(stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned char *)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR8(encode_buffer[pixel_index+alpha_channel]); + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned short*)output_buffer)[index] = STBIR__ENCODE_LINEAR16(encode_buffer[index]); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned short*)output_buffer)[index] = (unsigned short)STBIR__ROUND_INT(stbir__linear_to_srgb(stbir__saturate(encode_buffer[index])) * stbir__max_uint16_as_float); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned short*)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR16(encode_buffer[pixel_index + alpha_channel]); + } + + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__saturate(encode_buffer[index])) * stbir__max_uint32_as_float); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__linear_to_srgb(stbir__saturate(encode_buffer[index]))) * stbir__max_uint32_as_float); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned int*)output_buffer)[pixel_index + alpha_channel] = (unsigned int)STBIR__ROUND_INT(((double)stbir__saturate(encode_buffer[pixel_index + alpha_channel])) * stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((float*)output_buffer)[index] = encode_buffer[index]; + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((float*)output_buffer)[index] = stbir__linear_to_srgb(encode_buffer[index]); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((float*)output_buffer)[pixel_index + alpha_channel] = encode_buffer[pixel_index + alpha_channel]; + } + break; + + default: + STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); + break; + } +} + +static void stbir__resample_vertical_upsample(stbir__info* stbir_info, int n) +{ + int x, k; + int output_w = stbir_info->output_w; + stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; + float* vertical_coefficients = stbir_info->vertical_coefficients; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int ring_buffer_entries = stbir_info->ring_buffer_num_entries; + void* output_data = stbir_info->output_data; + float* encode_buffer = stbir_info->encode_buffer; + int decode = STBIR__DECODE(type, colorspace); + int coefficient_width = stbir_info->vertical_coefficient_width; + int coefficient_counter; + int contributor = n; + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; + int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + + int n0,n1, output_row_start; + int coefficient_group = coefficient_width * contributor; + + n0 = vertical_contributors[contributor].n0; + n1 = vertical_contributors[contributor].n1; + + output_row_start = n * stbir_info->output_stride_bytes; + + STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); + + memset(encode_buffer, 0, output_w * sizeof(float) * channels); + + // I tried reblocking this for better cache usage of encode_buffer + // (using x_outer, k, x_inner), but it lost speed. -- stb + + coefficient_counter = 0; + switch (channels) { + case 1: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 1; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + } + } + break; + case 2: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 2; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + } + } + break; + case 3: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 3; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; + } + } + break; + case 4: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 4; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; + encode_buffer[in_pixel_index + 3] += ring_buffer_entry[in_pixel_index + 3] * coefficient; + } + } + break; + default: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * channels; + int c; + for (c = 0; c < channels; c++) + encode_buffer[in_pixel_index + c] += ring_buffer_entry[in_pixel_index + c] * coefficient; + } + } + break; + } + stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, encode_buffer, channels, alpha_channel, decode); +} + +static void stbir__resample_vertical_downsample(stbir__info* stbir_info, int n) +{ + int x, k; + int output_w = stbir_info->output_w; + stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; + float* vertical_coefficients = stbir_info->vertical_coefficients; + int channels = stbir_info->channels; + int ring_buffer_entries = stbir_info->ring_buffer_num_entries; + float* horizontal_buffer = stbir_info->horizontal_buffer; + int coefficient_width = stbir_info->vertical_coefficient_width; + int contributor = n + stbir_info->vertical_filter_pixel_margin; + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; + int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + int n0,n1; + + n0 = vertical_contributors[contributor].n0; + n1 = vertical_contributors[contributor].n1; + + STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); + + for (k = n0; k <= n1; k++) + { + int coefficient_index = k - n0; + int coefficient_group = coefficient_width * contributor; + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + + switch (channels) { + case 1: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 1; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + } + break; + case 2: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 2; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + } + break; + case 3: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 3; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; + } + break; + case 4: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 4; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; + ring_buffer_entry[in_pixel_index + 3] += horizontal_buffer[in_pixel_index + 3] * coefficient; + } + break; + default: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * channels; + + int c; + for (c = 0; c < channels; c++) + ring_buffer_entry[in_pixel_index + c] += horizontal_buffer[in_pixel_index + c] * coefficient; + } + break; + } + } +} + +static void stbir__buffer_loop_upsample(stbir__info* stbir_info) +{ + int y; + float scale_ratio = stbir_info->vertical_scale; + float out_scanlines_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(1/scale_ratio) * scale_ratio; + + STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); + + for (y = 0; y < stbir_info->output_h; y++) + { + float in_center_of_out = 0; // Center of the current out scanline in the in scanline space + int in_first_scanline = 0, in_last_scanline = 0; + + stbir__calculate_sample_range_upsample(y, out_scanlines_radius, scale_ratio, stbir_info->vertical_shift, &in_first_scanline, &in_last_scanline, &in_center_of_out); + + STBIR_ASSERT(in_last_scanline - in_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); + + if (stbir_info->ring_buffer_begin_index >= 0) + { + // Get rid of whatever we don't need anymore. + while (in_first_scanline > stbir_info->ring_buffer_first_scanline) + { + if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) + { + // We just popped the last scanline off the ring buffer. + // Reset it to the empty state. + stbir_info->ring_buffer_begin_index = -1; + stbir_info->ring_buffer_first_scanline = 0; + stbir_info->ring_buffer_last_scanline = 0; + break; + } + else + { + stbir_info->ring_buffer_first_scanline++; + stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; + } + } + } + + // Load in new ones. + if (stbir_info->ring_buffer_begin_index < 0) + stbir__decode_and_resample_upsample(stbir_info, in_first_scanline); + + while (in_last_scanline > stbir_info->ring_buffer_last_scanline) + stbir__decode_and_resample_upsample(stbir_info, stbir_info->ring_buffer_last_scanline + 1); + + // Now all buffers should be ready to write a row of vertical sampling. + stbir__resample_vertical_upsample(stbir_info, y); + + STBIR_PROGRESS_REPORT((float)y / stbir_info->output_h); + } +} + +static void stbir__empty_ring_buffer(stbir__info* stbir_info, int first_necessary_scanline) +{ + int output_stride_bytes = stbir_info->output_stride_bytes; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int output_w = stbir_info->output_w; + void* output_data = stbir_info->output_data; + int decode = STBIR__DECODE(type, colorspace); + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + + if (stbir_info->ring_buffer_begin_index >= 0) + { + // Get rid of whatever we don't need anymore. + while (first_necessary_scanline > stbir_info->ring_buffer_first_scanline) + { + if (stbir_info->ring_buffer_first_scanline >= 0 && stbir_info->ring_buffer_first_scanline < stbir_info->output_h) + { + int output_row_start = stbir_info->ring_buffer_first_scanline * output_stride_bytes; + float* ring_buffer_entry = stbir__get_ring_buffer_entry(ring_buffer, stbir_info->ring_buffer_begin_index, ring_buffer_length); + stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, ring_buffer_entry, channels, alpha_channel, decode); + STBIR_PROGRESS_REPORT((float)stbir_info->ring_buffer_first_scanline / stbir_info->output_h); + } + + if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) + { + // We just popped the last scanline off the ring buffer. + // Reset it to the empty state. + stbir_info->ring_buffer_begin_index = -1; + stbir_info->ring_buffer_first_scanline = 0; + stbir_info->ring_buffer_last_scanline = 0; + break; + } + else + { + stbir_info->ring_buffer_first_scanline++; + stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; + } + } + } +} + +static void stbir__buffer_loop_downsample(stbir__info* stbir_info) +{ + int y; + float scale_ratio = stbir_info->vertical_scale; + int output_h = stbir_info->output_h; + float in_pixels_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(scale_ratio) / scale_ratio; + int pixel_margin = stbir_info->vertical_filter_pixel_margin; + int max_y = stbir_info->input_h + pixel_margin; + + STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); + + for (y = -pixel_margin; y < max_y; y++) + { + float out_center_of_in; // Center of the current out scanline in the in scanline space + int out_first_scanline, out_last_scanline; + + stbir__calculate_sample_range_downsample(y, in_pixels_radius, scale_ratio, stbir_info->vertical_shift, &out_first_scanline, &out_last_scanline, &out_center_of_in); + + STBIR_ASSERT(out_last_scanline - out_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); + + if (out_last_scanline < 0 || out_first_scanline >= output_h) + continue; + + stbir__empty_ring_buffer(stbir_info, out_first_scanline); + + stbir__decode_and_resample_downsample(stbir_info, y); + + // Load in new ones. + if (stbir_info->ring_buffer_begin_index < 0) + stbir__add_empty_ring_buffer_entry(stbir_info, out_first_scanline); + + while (out_last_scanline > stbir_info->ring_buffer_last_scanline) + stbir__add_empty_ring_buffer_entry(stbir_info, stbir_info->ring_buffer_last_scanline + 1); + + // Now the horizontal buffer is ready to write to all ring buffer rows. + stbir__resample_vertical_downsample(stbir_info, y); + } + + stbir__empty_ring_buffer(stbir_info, stbir_info->output_h); +} + +static void stbir__setup(stbir__info *info, int input_w, int input_h, int output_w, int output_h, int channels) +{ + info->input_w = input_w; + info->input_h = input_h; + info->output_w = output_w; + info->output_h = output_h; + info->channels = channels; +} + +static void stbir__calculate_transform(stbir__info *info, float s0, float t0, float s1, float t1, float *transform) +{ + info->s0 = s0; + info->t0 = t0; + info->s1 = s1; + info->t1 = t1; + + if (transform) + { + info->horizontal_scale = transform[0]; + info->vertical_scale = transform[1]; + info->horizontal_shift = transform[2]; + info->vertical_shift = transform[3]; + } + else + { + info->horizontal_scale = ((float)info->output_w / info->input_w) / (s1 - s0); + info->vertical_scale = ((float)info->output_h / info->input_h) / (t1 - t0); + + info->horizontal_shift = s0 * info->output_w / (s1 - s0); + info->vertical_shift = t0 * info->output_h / (t1 - t0); + } +} + +static void stbir__choose_filter(stbir__info *info, stbir_filter h_filter, stbir_filter v_filter) +{ + if (h_filter == 0) + h_filter = stbir__use_upsampling(info->horizontal_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; + if (v_filter == 0) + v_filter = stbir__use_upsampling(info->vertical_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; + info->horizontal_filter = h_filter; + info->vertical_filter = v_filter; +} + +static stbir_uint32 stbir__calculate_memory(stbir__info *info) +{ + int pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); + int filter_height = stbir__get_filter_pixel_width(info->vertical_filter, info->vertical_scale); + + info->horizontal_num_contributors = stbir__get_contributors(info->horizontal_scale, info->horizontal_filter, info->input_w, info->output_w); + info->vertical_num_contributors = stbir__get_contributors(info->vertical_scale , info->vertical_filter , info->input_h, info->output_h); + + // One extra entry because floating point precision problems sometimes cause an extra to be necessary. + info->ring_buffer_num_entries = filter_height + 1; + + info->horizontal_contributors_size = info->horizontal_num_contributors * sizeof(stbir__contributors); + info->horizontal_coefficients_size = stbir__get_total_horizontal_coefficients(info) * sizeof(float); + info->vertical_contributors_size = info->vertical_num_contributors * sizeof(stbir__contributors); + info->vertical_coefficients_size = stbir__get_total_vertical_coefficients(info) * sizeof(float); + info->decode_buffer_size = (info->input_w + pixel_margin * 2) * info->channels * sizeof(float); + info->horizontal_buffer_size = info->output_w * info->channels * sizeof(float); + info->ring_buffer_size = info->output_w * info->channels * info->ring_buffer_num_entries * sizeof(float); + info->encode_buffer_size = info->output_w * info->channels * sizeof(float); + + STBIR_ASSERT(info->horizontal_filter != 0); + STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late + STBIR_ASSERT(info->vertical_filter != 0); + STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late + + if (stbir__use_height_upsampling(info)) + // The horizontal buffer is for when we're downsampling the height and we + // can't output the result of sampling the decode buffer directly into the + // ring buffers. + info->horizontal_buffer_size = 0; + else + // The encode buffer is to retain precision in the height upsampling method + // and isn't used when height downsampling. + info->encode_buffer_size = 0; + + return info->horizontal_contributors_size + info->horizontal_coefficients_size + + info->vertical_contributors_size + info->vertical_coefficients_size + + info->decode_buffer_size + info->horizontal_buffer_size + + info->ring_buffer_size + info->encode_buffer_size; +} + +static int stbir__resize_allocated(stbir__info *info, + const void* input_data, int input_stride_in_bytes, + void* output_data, int output_stride_in_bytes, + int alpha_channel, stbir_uint32 flags, stbir_datatype type, + stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace, + void* tempmem, size_t tempmem_size_in_bytes) +{ + size_t memory_required = stbir__calculate_memory(info); + + int width_stride_input = input_stride_in_bytes ? input_stride_in_bytes : info->channels * info->input_w * stbir__type_size[type]; + int width_stride_output = output_stride_in_bytes ? output_stride_in_bytes : info->channels * info->output_w * stbir__type_size[type]; + +#ifdef STBIR_DEBUG_OVERWRITE_TEST +#define OVERWRITE_ARRAY_SIZE 8 + unsigned char overwrite_output_before_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_tempmem_before_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_output_after_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_tempmem_after_pre[OVERWRITE_ARRAY_SIZE]; + + size_t begin_forbidden = width_stride_output * (info->output_h - 1) + info->output_w * info->channels * stbir__type_size[type]; + memcpy(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE); +#endif + + STBIR_ASSERT(info->channels >= 0); + STBIR_ASSERT(info->channels <= STBIR_MAX_CHANNELS); + + if (info->channels < 0 || info->channels > STBIR_MAX_CHANNELS) + return 0; + + STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + + if (info->horizontal_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) + return 0; + if (info->vertical_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) + return 0; + + if (alpha_channel < 0) + flags |= STBIR_FLAG_ALPHA_USES_COLORSPACE | STBIR_FLAG_ALPHA_PREMULTIPLIED; + + if (!(flags&STBIR_FLAG_ALPHA_USES_COLORSPACE) || !(flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) { + STBIR_ASSERT(alpha_channel >= 0 && alpha_channel < info->channels); + } + + if (alpha_channel >= info->channels) + return 0; + + STBIR_ASSERT(tempmem); + + if (!tempmem) + return 0; + + STBIR_ASSERT(tempmem_size_in_bytes >= memory_required); + + if (tempmem_size_in_bytes < memory_required) + return 0; + + memset(tempmem, 0, tempmem_size_in_bytes); + + info->input_data = input_data; + info->input_stride_bytes = width_stride_input; + + info->output_data = output_data; + info->output_stride_bytes = width_stride_output; + + info->alpha_channel = alpha_channel; + info->flags = flags; + info->type = type; + info->edge_horizontal = edge_horizontal; + info->edge_vertical = edge_vertical; + info->colorspace = colorspace; + + info->horizontal_coefficient_width = stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); + info->vertical_coefficient_width = stbir__get_coefficient_width (info->vertical_filter , info->vertical_scale ); + info->horizontal_filter_pixel_width = stbir__get_filter_pixel_width (info->horizontal_filter, info->horizontal_scale); + info->vertical_filter_pixel_width = stbir__get_filter_pixel_width (info->vertical_filter , info->vertical_scale ); + info->horizontal_filter_pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); + info->vertical_filter_pixel_margin = stbir__get_filter_pixel_margin(info->vertical_filter , info->vertical_scale ); + + info->ring_buffer_length_bytes = info->output_w * info->channels * sizeof(float); + info->decode_buffer_pixels = info->input_w + info->horizontal_filter_pixel_margin * 2; + +#define STBIR__NEXT_MEMPTR(current, newtype) (newtype*)(((unsigned char*)current) + current##_size) + + info->horizontal_contributors = (stbir__contributors *) tempmem; + info->horizontal_coefficients = STBIR__NEXT_MEMPTR(info->horizontal_contributors, float); + info->vertical_contributors = STBIR__NEXT_MEMPTR(info->horizontal_coefficients, stbir__contributors); + info->vertical_coefficients = STBIR__NEXT_MEMPTR(info->vertical_contributors, float); + info->decode_buffer = STBIR__NEXT_MEMPTR(info->vertical_coefficients, float); + + if (stbir__use_height_upsampling(info)) + { + info->horizontal_buffer = NULL; + info->ring_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); + info->encode_buffer = STBIR__NEXT_MEMPTR(info->ring_buffer, float); + + STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->encode_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); + } + else + { + info->horizontal_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); + info->ring_buffer = STBIR__NEXT_MEMPTR(info->horizontal_buffer, float); + info->encode_buffer = NULL; + + STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->ring_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); + } + +#undef STBIR__NEXT_MEMPTR + + // This signals that the ring buffer is empty + info->ring_buffer_begin_index = -1; + + stbir__calculate_filters(info->horizontal_contributors, info->horizontal_coefficients, info->horizontal_filter, info->horizontal_scale, info->horizontal_shift, info->input_w, info->output_w); + stbir__calculate_filters(info->vertical_contributors, info->vertical_coefficients, info->vertical_filter, info->vertical_scale, info->vertical_shift, info->input_h, info->output_h); + + STBIR_PROGRESS_REPORT(0); + + if (stbir__use_height_upsampling(info)) + stbir__buffer_loop_upsample(info); + else + stbir__buffer_loop_downsample(info); + + STBIR_PROGRESS_REPORT(1); + +#ifdef STBIR_DEBUG_OVERWRITE_TEST + STBIR_ASSERT(memcmp(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE) == 0); +#endif + + return 1; +} + + +static int stbir__resize_arbitrary( + void *alloc_context, + const void* input_data, int input_w, int input_h, int input_stride_in_bytes, + void* output_data, int output_w, int output_h, int output_stride_in_bytes, + float s0, float t0, float s1, float t1, float *transform, + int channels, int alpha_channel, stbir_uint32 flags, stbir_datatype type, + stbir_filter h_filter, stbir_filter v_filter, + stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace) +{ + stbir__info info; + int result; + size_t memory_required; + void* extra_memory; + + stbir__setup(&info, input_w, input_h, output_w, output_h, channels); + stbir__calculate_transform(&info, s0,t0,s1,t1,transform); + stbir__choose_filter(&info, h_filter, v_filter); + memory_required = stbir__calculate_memory(&info); + extra_memory = STBIR_MALLOC(memory_required, alloc_context); + + if (!extra_memory) + return 0; + + result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes, + output_data, output_stride_in_bytes, + alpha_channel, flags, type, + edge_horizontal, edge_vertical, + colorspace, extra_memory, memory_required); + + STBIR_FREE(extra_memory, alloc_context); + + return result; +} + +STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); +} + +STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_FLOAT, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); +} + +STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_SRGB); +} + +STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + edge_wrap_mode, edge_wrap_mode, STBIR_COLORSPACE_SRGB); +} + +STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + +STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT16, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + + +STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_FLOAT, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + + +STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + + +STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float x_scale, float y_scale, + float x_offset, float y_offset) +{ + float transform[4]; + transform[0] = x_scale; + transform[1] = y_scale; + transform[2] = x_offset; + transform[3] = y_offset; + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,transform,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + +STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float s0, float t0, float s1, float t1) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + s0,t0,s1,t1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + +#endif // STB_IMAGE_RESIZE_IMPLEMENTATION + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ \ No newline at end of file diff --git a/libs/zstbi/libs/stbi/stb_image_write.h b/libs/zstbi/libs/stbi/stb_image_write.h new file mode 100644 index 0000000..023d71e --- /dev/null +++ b/libs/zstbi/libs/stbi/stb_image_write.h @@ -0,0 +1,1724 @@ +/* stb_image_write - v1.16 - public domain - http://nothings.org/stb + writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 + no warranty implied; use at your own risk + + Before #including, + + #define STB_IMAGE_WRITE_IMPLEMENTATION + + in the file that you want to have the implementation. + + Will probably not work correctly with strict-aliasing optimizations. + +ABOUT: + + This header file is a library for writing images to C stdio or a callback. + + The PNG output is not optimal; it is 20-50% larger than the file + written by a decent optimizing implementation; though providing a custom + zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. + This library is designed for source code compactness and simplicity, + not optimal image file size or run-time performance. + +BUILDING: + + You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. + You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace + malloc,realloc,free. + You can #define STBIW_MEMMOVE() to replace memmove() + You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function + for PNG compression (instead of the builtin one), it must have the following signature: + unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); + The returned data will be freed with STBIW_FREE() (free() by default), + so it must be heap allocated with STBIW_MALLOC() (malloc() by default), + +UNICODE: + + If compiling for Windows and you wish to use Unicode filenames, compile + with + #define STBIW_WINDOWS_UTF8 + and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert + Windows wchar_t filenames to utf8. + +USAGE: + + There are five functions, one for each image file format: + + int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); + int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); + + void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically + + There are also five equivalent functions that use an arbitrary write function. You are + expected to open/close your file-equivalent before and after calling these: + + int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); + int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + + where the callback is: + void stbi_write_func(void *context, void *data, int size); + + You can configure it with these global variables: + int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE + int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression + int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode + + + You can define STBI_WRITE_NO_STDIO to disable the file variant of these + functions, so the library will not use stdio.h at all. However, this will + also disable HDR writing, because it requires stdio for formatted output. + + Each function returns 0 on failure and non-0 on success. + + The functions create an image file defined by the parameters. The image + is a rectangle of pixels stored from left-to-right, top-to-bottom. + Each pixel contains 'comp' channels of data stored interleaved with 8-bits + per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is + monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. + The *data pointer points to the first byte of the top-left-most pixel. + For PNG, "stride_in_bytes" is the distance in bytes from the first byte of + a row of pixels to the first byte of the next row of pixels. + + PNG creates output files with the same number of components as the input. + The BMP format expands Y to RGB in the file format and does not + output alpha. + + PNG supports writing rectangles of data even when the bytes storing rows of + data are not consecutive in memory (e.g. sub-rectangles of a larger image), + by supplying the stride between the beginning of adjacent rows. The other + formats do not. (Thus you cannot write a native-format BMP through the BMP + writer, both because it is in BGR order and because it may have padding + at the end of the line.) + + PNG allows you to set the deflate compression level by setting the global + variable 'stbi_write_png_compression_level' (it defaults to 8). + + HDR expects linear float data. Since the format is always 32-bit rgb(e) + data, alpha (if provided) is discarded, and for monochrome data it is + replicated across all three channels. + + TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed + data, set the global variable 'stbi_write_tga_with_rle' to 0. + + JPEG does ignore alpha channels in input data; quality is between 1 and 100. + Higher quality looks better but results in a bigger image. + JPEG baseline (no JPEG progressive). + +CREDITS: + + + Sean Barrett - PNG/BMP/TGA + Baldur Karlsson - HDR + Jean-Sebastien Guay - TGA monochrome + Tim Kelsey - misc enhancements + Alan Hickman - TGA RLE + Emmanuel Julien - initial file IO callback implementation + Jon Olick - original jo_jpeg.cpp code + Daniel Gibson - integrate JPEG, allow external zlib + Aarni Koskela - allow choosing PNG filter + + bugfixes: + github:Chribba + Guillaume Chereau + github:jry2 + github:romigrou + Sergio Gonzalez + Jonas Karlsson + Filip Wasil + Thatcher Ulrich + github:poppolopoppo + Patrick Boettcher + github:xeekworx + Cap Petschulat + Simon Rodriguez + Ivan Tikhonov + github:ignotion + Adam Schackart + Andrew Kensler + +LICENSE + + See end of file for license information. + +*/ + +#ifndef INCLUDE_STB_IMAGE_WRITE_H +#define INCLUDE_STB_IMAGE_WRITE_H + +#include + +// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' +#ifndef STBIWDEF +#ifdef STB_IMAGE_WRITE_STATIC +#define STBIWDEF static +#else +#ifdef __cplusplus +#define STBIWDEF extern "C" +#else +#define STBIWDEF extern +#endif +#endif +#endif + +#ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations +STBIWDEF int stbi_write_tga_with_rle; +STBIWDEF int stbi_write_png_compression_level; +STBIWDEF int stbi_write_force_png_filter; +#endif + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); + +#ifdef STBIW_WINDOWS_UTF8 +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif +#endif + +typedef void stbi_write_func(void *context, void *data, int size); + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + +STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); + +#endif//INCLUDE_STB_IMAGE_WRITE_H + +#ifdef STB_IMAGE_WRITE_IMPLEMENTATION + +#ifdef _WIN32 + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif + #ifndef _CRT_NONSTDC_NO_DEPRECATE + #define _CRT_NONSTDC_NO_DEPRECATE + #endif +#endif + +#ifndef STBI_WRITE_NO_STDIO +#include +#endif // STBI_WRITE_NO_STDIO + +#include +#include +#include +#include + +#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) +// ok +#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." +#endif + +#ifndef STBIW_MALLOC +#define STBIW_MALLOC(sz) malloc(sz) +#define STBIW_REALLOC(p,newsz) realloc(p,newsz) +#define STBIW_FREE(p) free(p) +#endif + +#ifndef STBIW_REALLOC_SIZED +#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz) +#endif + + +#ifndef STBIW_MEMMOVE +#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) +#endif + + +#ifndef STBIW_ASSERT +#include +#define STBIW_ASSERT(x) assert(x) +#endif + +#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff) + +#ifdef STB_IMAGE_WRITE_STATIC +static int stbi_write_png_compression_level = 8; +static int stbi_write_tga_with_rle = 1; +static int stbi_write_force_png_filter = -1; +#else +int stbi_write_png_compression_level = 8; +int stbi_write_tga_with_rle = 1; +int stbi_write_force_png_filter = -1; +#endif + +static int stbi__flip_vertically_on_write = 0; + +STBIWDEF void stbi_flip_vertically_on_write(int flag) +{ + stbi__flip_vertically_on_write = flag; +} + +typedef struct +{ + stbi_write_func *func; + void *context; + unsigned char buffer[64]; + int buf_used; +} stbi__write_context; + +// initialize a callback-based context +static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context) +{ + s->func = c; + s->context = context; +} + +#ifndef STBI_WRITE_NO_STDIO + +static void stbi__stdio_write(void *context, void *data, int size) +{ + fwrite(data,1,size,(FILE*) context); +} + +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) +#ifdef __cplusplus +#define STBIW_EXTERN extern "C" +#else +#define STBIW_EXTERN extern +#endif +STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbiw__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + +static int stbi__start_write_file(stbi__write_context *s, const char *filename) +{ + FILE *f = stbiw__fopen(filename, "wb"); + stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f); + return f != NULL; +} + +static void stbi__end_write_file(stbi__write_context *s) +{ + fclose((FILE *)s->context); +} + +#endif // !STBI_WRITE_NO_STDIO + +typedef unsigned int stbiw_uint32; +typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; + +static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int)); + s->func(s->context,&x,1); + break; } + case '2': { int x = va_arg(v,int); + unsigned char b[2]; + b[0] = STBIW_UCHAR(x); + b[1] = STBIW_UCHAR(x>>8); + s->func(s->context,b,2); + break; } + case '4': { stbiw_uint32 x = va_arg(v,int); + unsigned char b[4]; + b[0]=STBIW_UCHAR(x); + b[1]=STBIW_UCHAR(x>>8); + b[2]=STBIW_UCHAR(x>>16); + b[3]=STBIW_UCHAR(x>>24); + s->func(s->context,b,4); + break; } + default: + STBIW_ASSERT(0); + return; + } + } +} + +static void stbiw__writef(stbi__write_context *s, const char *fmt, ...) +{ + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); +} + +static void stbiw__write_flush(stbi__write_context *s) +{ + if (s->buf_used) { + s->func(s->context, &s->buffer, s->buf_used); + s->buf_used = 0; + } +} + +static void stbiw__putc(stbi__write_context *s, unsigned char c) +{ + s->func(s->context, &c, 1); +} + +static void stbiw__write1(stbi__write_context *s, unsigned char a) +{ + if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) + stbiw__write_flush(s); + s->buffer[s->buf_used++] = a; +} + +static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c) +{ + int n; + if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) + stbiw__write_flush(s); + n = s->buf_used; + s->buf_used = n+3; + s->buffer[n+0] = a; + s->buffer[n+1] = b; + s->buffer[n+2] = c; +} + +static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d) +{ + unsigned char bg[3] = { 255, 0, 255}, px[3]; + int k; + + if (write_alpha < 0) + stbiw__write1(s, d[comp - 1]); + + switch (comp) { + case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case + case 1: + if (expand_mono) + stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp + else + stbiw__write1(s, d[0]); // monochrome TGA + break; + case 4: + if (!write_alpha) { + // composite against pink background + for (k = 0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; + stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); + break; + } + if (write_alpha > 0) + stbiw__write1(s, d[comp - 1]); +} + +static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) +{ + stbiw_uint32 zero = 0; + int i,j, j_end; + + if (y <= 0) + return; + + if (stbi__flip_vertically_on_write) + vdir *= -1; + + if (vdir < 0) { + j_end = -1; j = y-1; + } else { + j_end = y; j = 0; + } + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + unsigned char *d = (unsigned char *) data + (j*x+i)*comp; + stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); + } + stbiw__write_flush(s); + s->func(s->context, &zero, scanline_pad); + } +} + +static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) +{ + if (y < 0 || x < 0) { + return 0; + } else { + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); + stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono); + return 1; + } +} + +static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data) +{ + if (comp != 4) { + // write RGB bitmap + int pad = (-x*3) & 3; + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header + } else { + // RGBA bitmaps need a v4 header + // use BI_BITFIELDS mode with 32bpp and alpha mask + // (straight BI_RGB with alpha mask doesn't work in most readers) + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0, + "11 4 22 4" "4 44 22 444444 4444 4 444 444 444 444", + 'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header + 108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header + } +} + +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_bmp_core(&s, x, y, comp, data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_bmp_core(&s, x, y, comp, data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif //!STBI_WRITE_NO_STDIO + +static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data) +{ + int has_alpha = (comp == 2 || comp == 4); + int colorbytes = has_alpha ? comp-1 : comp; + int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 + + if (y < 0 || x < 0) + return 0; + + if (!stbi_write_tga_with_rle) { + return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0, + "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); + } else { + int i,j,k; + int jend, jdir; + + stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8); + + if (stbi__flip_vertically_on_write) { + j = 0; + jend = y; + jdir = 1; + } else { + j = y-1; + jend = -1; + jdir = -1; + } + for (; j != jend; j += jdir) { + unsigned char *row = (unsigned char *) data + j * x * comp; + int len; + + for (i = 0; i < x; i += len) { + unsigned char *begin = row + i * comp; + int diff = 1; + len = 1; + + if (i < x - 1) { + ++len; + diff = memcmp(begin, row + (i + 1) * comp, comp); + if (diff) { + const unsigned char *prev = begin; + for (k = i + 2; k < x && len < 128; ++k) { + if (memcmp(prev, row + k * comp, comp)) { + prev += comp; + ++len; + } else { + --len; + break; + } + } + } else { + for (k = i + 2; k < x && len < 128; ++k) { + if (!memcmp(begin, row + k * comp, comp)) { + ++len; + } else { + break; + } + } + } + } + + if (diff) { + unsigned char header = STBIW_UCHAR(len - 1); + stbiw__write1(s, header); + for (k = 0; k < len; ++k) { + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); + } + } else { + unsigned char header = STBIW_UCHAR(len - 129); + stbiw__write1(s, header); + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); + } + } + } + stbiw__write_flush(s); + } + return 1; +} + +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_tga_core(&s, x, y, comp, (void *) data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_tga_core(&s, x, y, comp, (void *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR writer +// by Baldur Karlsson + +#define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) + +#ifndef STBI_WRITE_NO_STDIO + +static void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) +{ + int exponent; + float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); + + if (maxcomp < 1e-32f) { + rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; + } else { + float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; + + rgbe[0] = (unsigned char)(linear[0] * normalize); + rgbe[1] = (unsigned char)(linear[1] * normalize); + rgbe[2] = (unsigned char)(linear[2] * normalize); + rgbe[3] = (unsigned char)(exponent + 128); + } +} + +static void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte) +{ + unsigned char lengthbyte = STBIW_UCHAR(length+128); + STBIW_ASSERT(length+128 <= 255); + s->func(s->context, &lengthbyte, 1); + s->func(s->context, &databyte, 1); +} + +static void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data) +{ + unsigned char lengthbyte = STBIW_UCHAR(length); + STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code + s->func(s->context, &lengthbyte, 1); + s->func(s->context, data, length); +} + +static void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline) +{ + unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; + unsigned char rgbe[4]; + float linear[3]; + int x; + + scanlineheader[2] = (width&0xff00)>>8; + scanlineheader[3] = (width&0x00ff); + + /* skip RLE for images too small or large */ + if (width < 8 || width >= 32768) { + for (x=0; x < width; x++) { + switch (ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + s->func(s->context, rgbe, 4); + } + } else { + int c,r; + /* encode into scratch buffer */ + for (x=0; x < width; x++) { + switch(ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + scratch[x + width*0] = rgbe[0]; + scratch[x + width*1] = rgbe[1]; + scratch[x + width*2] = rgbe[2]; + scratch[x + width*3] = rgbe[3]; + } + + s->func(s->context, scanlineheader, 4); + + /* RLE each component separately */ + for (c=0; c < 4; c++) { + unsigned char *comp = &scratch[width*c]; + + x = 0; + while (x < width) { + // find first run + r = x; + while (r+2 < width) { + if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) + break; + ++r; + } + if (r+2 >= width) + r = width; + // dump up to first run + while (x < r) { + int len = r-x; + if (len > 128) len = 128; + stbiw__write_dump_data(s, len, &comp[x]); + x += len; + } + // if there's a run, output it + if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd + // find next byte after run + while (r < width && comp[r] == comp[x]) + ++r; + // output run up to r + while (x < r) { + int len = r-x; + if (len > 127) len = 127; + stbiw__write_run_data(s, len, comp[x]); + x += len; + } + } + } + } + } +} + +static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data) +{ + if (y <= 0 || x <= 0 || data == NULL) + return 0; + else { + // Each component is stored separately. Allocate scratch space for full output scanline. + unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); + int i, len; + char buffer[128]; + char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; + s->func(s->context, header, sizeof(header)-1); + +#ifdef __STDC_LIB_EXT1__ + len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#else + len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#endif + s->func(s->context, buffer, len); + + for(i=0; i < y; i++) + stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i)); + STBIW_FREE(scratch); + return 1; + } +} + +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_hdr_core(&s, x, y, comp, (float *) data); +} + +STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif // STBI_WRITE_NO_STDIO + + +////////////////////////////////////////////////////////////////////////////// +// +// PNG writer +// + +#ifndef STBIW_ZLIB_COMPRESS +// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() +#define stbiw__sbraw(a) ((int *) (void *) (a) - 2) +#define stbiw__sbm(a) stbiw__sbraw(a)[0] +#define stbiw__sbn(a) stbiw__sbraw(a)[1] + +#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) +#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) +#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) + +#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) +#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) +#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) + +static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) +{ + int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; + void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2); + STBIW_ASSERT(p); + if (p) { + if (!*arr) ((int *) p)[1] = 0; + *arr = (void *) ((int *) p + 2); + stbiw__sbm(*arr) = m; + } + return *arr; +} + +static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) +{ + while (*bitcount >= 8) { + stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); + *bitbuffer >>= 8; + *bitcount -= 8; + } + return data; +} + +static int stbiw__zlib_bitrev(int code, int codebits) +{ + int res=0; + while (codebits--) { + res = (res << 1) | (code & 1); + code >>= 1; + } + return res; +} + +static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) +{ + int i; + for (i=0; i < limit && i < 258; ++i) + if (a[i] != b[i]) break; + return i; +} + +static unsigned int stbiw__zhash(unsigned char *data) +{ + stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + return hash; +} + +#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) +#define stbiw__zlib_add(code,codebits) \ + (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) +#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) +// default huffman tables +#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) +#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) +#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) +#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) +#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) +#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) + +#define stbiw__ZHASH 16384 + +#endif // STBIW_ZLIB_COMPRESS + +STBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) +{ +#ifdef STBIW_ZLIB_COMPRESS + // user provided a zlib compress implementation, use that + return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); +#else // use builtin + static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 }; + static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 }; + static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; + unsigned int bitbuf=0; + int i,j, bitcount=0; + unsigned char *out = NULL; + unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); + if (hash_table == NULL) + return NULL; + if (quality < 5) quality = 5; + + stbiw__sbpush(out, 0x78); // DEFLATE 32K window + stbiw__sbpush(out, 0x5e); // FLEVEL = 1 + stbiw__zlib_add(1,1); // BFINAL = 1 + stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman + + for (i=0; i < stbiw__ZHASH; ++i) + hash_table[i] = NULL; + + i=0; + while (i < data_len-3) { + // hash next 3 bytes of data to be compressed + int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; + unsigned char *bestloc = 0; + unsigned char **hlist = hash_table[h]; + int n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32768) { // if entry lies within window + int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); + if (d >= best) { best=d; bestloc=hlist[j]; } + } + } + // when hash table entry is too long, delete half the entries + if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { + STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); + stbiw__sbn(hash_table[h]) = quality; + } + stbiw__sbpush(hash_table[h],data+i); + + if (bestloc) { + // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal + h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); + hlist = hash_table[h]; + n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32767) { + int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); + if (e > best) { // if next match is better, bail on current match + bestloc = NULL; + break; + } + } + } + } + + if (bestloc) { + int d = (int) (data+i - bestloc); // distance back + STBIW_ASSERT(d <= 32767 && best <= 258); + for (j=0; best > lengthc[j+1]-1; ++j); + stbiw__zlib_huff(j+257); + if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); + for (j=0; d > distc[j+1]-1; ++j); + stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); + if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); + i += best; + } else { + stbiw__zlib_huffb(data[i]); + ++i; + } + } + // write out final bytes + for (;i < data_len; ++i) + stbiw__zlib_huffb(data[i]); + stbiw__zlib_huff(256); // end of block + // pad with 0 bits to byte boundary + while (bitcount) + stbiw__zlib_add(0,1); + + for (i=0; i < stbiw__ZHASH; ++i) + (void) stbiw__sbfree(hash_table[i]); + STBIW_FREE(hash_table); + + // store uncompressed instead if compression was worse + if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) { + stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 + for (j = 0; j < data_len;) { + int blocklen = data_len - j; + if (blocklen > 32767) blocklen = 32767; + stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression + stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN + stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN + stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); + memcpy(out+stbiw__sbn(out), data+j, blocklen); + stbiw__sbn(out) += blocklen; + j += blocklen; + } + } + + { + // compute adler32 on input + unsigned int s1=1, s2=0; + int blocklen = (int) (data_len % 5552); + j=0; + while (j < data_len) { + for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; } + s1 %= 65521; s2 %= 65521; + j += blocklen; + blocklen = 5552; + } + stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s2)); + stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s1)); + } + *out_len = stbiw__sbn(out); + // make returned pointer freeable + STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); + return (unsigned char *) stbiw__sbraw(out); +#endif // STBIW_ZLIB_COMPRESS +} + +static unsigned int stbiw__crc32(unsigned char *buffer, int len) +{ +#ifdef STBIW_CRC32 + return STBIW_CRC32(buffer, len); +#else + static unsigned int crc_table[256] = + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + unsigned int crc = ~0u; + int i; + for (i=0; i < len; ++i) + crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; + return ~crc; +#endif +} + +#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4) +#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); +#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) + +static void stbiw__wpcrc(unsigned char **data, int len) +{ + unsigned int crc = stbiw__crc32(*data - len - 4, len+4); + stbiw__wp32(*data, crc); +} + +static unsigned char stbiw__paeth(int a, int b, int c) +{ + int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); + if (pa <= pb && pa <= pc) return STBIW_UCHAR(a); + if (pb <= pc) return STBIW_UCHAR(b); + return STBIW_UCHAR(c); +} + +// @OPTIMIZE: provide an option that always forces left-predict or paeth predict +static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer) +{ + static int mapping[] = { 0,1,2,3,4 }; + static int firstmap[] = { 0,1,0,5,6 }; + int *mymap = (y != 0) ? mapping : firstmap; + int i; + int type = mymap[filter_type]; + unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); + int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; + + if (type==0) { + memcpy(line_buffer, z, width*n); + return; + } + + // first loop isn't optimized since it's just one pixel + for (i = 0; i < n; ++i) { + switch (type) { + case 1: line_buffer[i] = z[i]; break; + case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; + case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break; + case 5: line_buffer[i] = z[i]; break; + case 6: line_buffer[i] = z[i]; break; + } + } + switch (type) { + case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; + case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; + case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; + case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; + case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; + } +} + +STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) +{ + int force_filter = stbi_write_force_png_filter; + int ctype[5] = { -1, 0, 4, 2, 6 }; + unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; + unsigned char *out,*o, *filt, *zlib; + signed char *line_buffer; + int j,zlen; + + if (stride_bytes == 0) + stride_bytes = x * n; + + if (force_filter >= 5) { + force_filter = -1; + } + + filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; + line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } + for (j=0; j < y; ++j) { + int filter_type; + if (force_filter > -1) { + filter_type = force_filter; + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); + } else { // Estimate the best filter by running through all of them: + int best_filter = 0, best_filter_val = 0x7fffffff, est, i; + for (filter_type = 0; filter_type < 5; filter_type++) { + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); + + // Estimate the entropy of the line using this filter; the less, the better. + est = 0; + for (i = 0; i < x*n; ++i) { + est += abs((signed char) line_buffer[i]); + } + if (est < best_filter_val) { + best_filter_val = est; + best_filter = filter_type; + } + } + if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); + filter_type = best_filter; + } + } + // when we get here, filter_type contains the filter type, and line_buffer contains the data + filt[j*(x*n+1)] = (unsigned char) filter_type; + STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); + } + STBIW_FREE(line_buffer); + zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level); + STBIW_FREE(filt); + if (!zlib) return 0; + + // each tag requires 12 bytes of overhead + out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); + if (!out) return 0; + *out_len = 8 + 12+13 + 12+zlen + 12; + + o=out; + STBIW_MEMMOVE(o,sig,8); o+= 8; + stbiw__wp32(o, 13); // header length + stbiw__wptag(o, "IHDR"); + stbiw__wp32(o, x); + stbiw__wp32(o, y); + *o++ = 8; + *o++ = STBIW_UCHAR(ctype[n]); + *o++ = 0; + *o++ = 0; + *o++ = 0; + stbiw__wpcrc(&o,13); + + stbiw__wp32(o, zlen); + stbiw__wptag(o, "IDAT"); + STBIW_MEMMOVE(o, zlib, zlen); + o += zlen; + STBIW_FREE(zlib); + stbiw__wpcrc(&o, zlen); + + stbiw__wp32(o,0); + stbiw__wptag(o, "IEND"); + stbiw__wpcrc(&o,0); + + STBIW_ASSERT(o == out + *out_len); + + return out; +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) +{ + FILE *f; + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + + f = stbiw__fopen(filename, "wb"); + if (!f) { STBIW_FREE(png); return 0; } + fwrite(png, 1, len, f); + fclose(f); + STBIW_FREE(png); + return 1; +} +#endif + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes) +{ + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + func(context, png, len); + STBIW_FREE(png); + return 1; +} + + +/* *************************************************************************** + * + * JPEG writer + * + * This is based on Jon Olick's jo_jpeg.cpp: + * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html + */ + +static const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18, + 24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 }; + +static void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) { + int bitBuf = *bitBufP, bitCnt = *bitCntP; + bitCnt += bs[1]; + bitBuf |= bs[0] << (24 - bitCnt); + while(bitCnt >= 8) { + unsigned char c = (bitBuf >> 16) & 255; + stbiw__putc(s, c); + if(c == 255) { + stbiw__putc(s, 0); + } + bitBuf <<= 8; + bitCnt -= 8; + } + *bitBufP = bitBuf; + *bitCntP = bitCnt; +} + +static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) { + float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; + float z1, z2, z3, z4, z5, z11, z13; + + float tmp0 = d0 + d7; + float tmp7 = d0 - d7; + float tmp1 = d1 + d6; + float tmp6 = d1 - d6; + float tmp2 = d2 + d5; + float tmp5 = d2 - d5; + float tmp3 = d3 + d4; + float tmp4 = d3 - d4; + + // Even part + float tmp10 = tmp0 + tmp3; // phase 2 + float tmp13 = tmp0 - tmp3; + float tmp11 = tmp1 + tmp2; + float tmp12 = tmp1 - tmp2; + + d0 = tmp10 + tmp11; // phase 3 + d4 = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781f; // c4 + d2 = tmp13 + z1; // phase 5 + d6 = tmp13 - z1; + + // Odd part + tmp10 = tmp4 + tmp5; // phase 2 + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + // The rotator is modified from fig 4-8 to avoid extra negations. + z5 = (tmp10 - tmp12) * 0.382683433f; // c6 + z2 = tmp10 * 0.541196100f + z5; // c2-c6 + z4 = tmp12 * 1.306562965f + z5; // c2+c6 + z3 = tmp11 * 0.707106781f; // c4 + + z11 = tmp7 + z3; // phase 5 + z13 = tmp7 - z3; + + *d5p = z13 + z2; // phase 6 + *d3p = z13 - z2; + *d1p = z11 + z4; + *d7p = z11 - z4; + + *d0p = d0; *d2p = d2; *d4p = d4; *d6p = d6; +} + +static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) { + int tmp1 = val < 0 ? -val : val; + val = val < 0 ? val-1 : val; + bits[1] = 1; + while(tmp1 >>= 1) { + ++bits[1]; + } + bits[0] = val & ((1<0)&&(DU[end0pos]==0); --end0pos) { + } + // end0pos = first element in reverse order !=0 + if(end0pos == 0) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + return DU[0]; + } + for(i = 1; i <= end0pos; ++i) { + int startpos = i; + int nrzeroes; + unsigned short bits[2]; + for (; DU[i]==0 && i<=end0pos; ++i) { + } + nrzeroes = i-startpos; + if ( nrzeroes >= 16 ) { + int lng = nrzeroes>>4; + int nrmarker; + for (nrmarker=1; nrmarker <= lng; ++nrmarker) + stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); + nrzeroes &= 15; + } + stbiw__jpg_calcBits(DU[i], bits); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); + } + if(end0pos != 63) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + } + return DU[0]; +} + +static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) { + // Constants that don't pollute global namespace + static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; + static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d}; + static const unsigned char std_ac_luminance_values[] = { + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; + static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; + static const unsigned char std_ac_chrominance_values[] = { + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + // Huffman tables + static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}}; + static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}}; + static const unsigned short YAC_HT[256][2] = { + {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const unsigned short UVAC_HT[256][2] = { + {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22, + 37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99}; + static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}; + static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, + 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; + + int row, col, i, k, subsample; + float fdtbl_Y[64], fdtbl_UV[64]; + unsigned char YTable[64], UVTable[64]; + + if(!data || !width || !height || comp > 4 || comp < 1) { + return 0; + } + + quality = quality ? quality : 90; + subsample = quality <= 90 ? 1 : 0; + quality = quality < 1 ? 1 : quality > 100 ? 100 : quality; + quality = quality < 50 ? 5000 / quality : 200 - quality * 2; + + for(i = 0; i < 64; ++i) { + int uvti, yti = (YQT[i]*quality+50)/100; + YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti); + uvti = (UVQT[i]*quality+50)/100; + UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti); + } + + for(row = 0, k = 0; row < 8; ++row) { + for(col = 0; col < 8; ++col, ++k) { + fdtbl_Y[k] = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + } + } + + // Write Headers + { + static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 }; + static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 }; + const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width), + 3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 }; + s->func(s->context, (void*)head0, sizeof(head0)); + s->func(s->context, (void*)YTable, sizeof(YTable)); + stbiw__putc(s, 1); + s->func(s->context, UVTable, sizeof(UVTable)); + s->func(s->context, (void*)head1, sizeof(head1)); + s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1); + s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); + stbiw__putc(s, 0x10); // HTYACinfo + s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1); + s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); + stbiw__putc(s, 1); // HTUDCinfo + s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); + stbiw__putc(s, 0x11); // HTUACinfo + s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); + s->func(s->context, (void*)head2, sizeof(head2)); + } + + // Encode 8x8 macroblocks + { + static const unsigned short fillBits[] = {0x7F, 7}; + int DCY=0, DCU=0, DCV=0; + int bitBuf=0, bitCnt=0; + // comp == 2 is grey+alpha (alpha is ignored) + int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; + const unsigned char *dataR = (const unsigned char *)data; + const unsigned char *dataG = dataR + ofsG; + const unsigned char *dataB = dataR + ofsB; + int x, y, pos; + if(subsample) { + for(y = 0; y < height; y += 16) { + for(x = 0; x < width; x += 16) { + float Y[256], U[256], V[256]; + for(row = y, pos = 0; row < y+16; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+16; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + + // subsample U,V + { + float subU[64], subV[64]; + int yy, xx; + for(yy = 0, pos = 0; yy < 8; ++yy) { + for(xx = 0; xx < 8; ++xx, ++pos) { + int j = yy*32+xx*2; + subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f; + subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f; + } + } + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + } else { + for(y = 0; y < height; y += 8) { + for(x = 0; x < width; x += 8) { + float Y[64], U[64], V[64]; + for(row = y, pos = 0; row < y+8; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+8; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + + // Do the bit alignment of the EOI marker + stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); + } + + // EOI + stbiw__putc(s, 0xFF); + stbiw__putc(s, 0xD9); + + return 1; +} + +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality); +} + + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +#endif // STB_IMAGE_WRITE_IMPLEMENTATION + +/* Revision history + 1.16 (2021-07-11) + make Deflate code emit uncompressed blocks when it would otherwise expand + support writing BMPs with alpha channel + 1.15 (2020-07-13) unknown + 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels + 1.13 + 1.12 + 1.11 (2019-08-11) + + 1.10 (2019-02-07) + support utf8 filenames in Windows; fix warnings and platform ifdefs + 1.09 (2018-02-11) + fix typo in zlib quality API, improve STB_I_W_STATIC in C++ + 1.08 (2018-01-29) + add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter + 1.07 (2017-07-24) + doc fix + 1.06 (2017-07-23) + writing JPEG (using Jon Olick's code) + 1.05 ??? + 1.04 (2017-03-03) + monochrome BMP expansion + 1.03 ??? + 1.02 (2016-04-02) + avoid allocating large structures on the stack + 1.01 (2016-01-16) + STBIW_REALLOC_SIZED: support allocators with no realloc support + avoid race-condition in crc initialization + minor compile issues + 1.00 (2015-09-14) + installable file IO function + 0.99 (2015-09-13) + warning fixes; TGA rle support + 0.98 (2015-04-08) + added STBIW_MALLOC, STBIW_ASSERT etc + 0.97 (2015-01-18) + fixed HDR asserts, rewrote HDR rle logic + 0.96 (2015-01-17) + add HDR output + fix monochrome BMP + 0.95 (2014-08-17) + add monochrome TGA output + 0.94 (2014-05-31) + rename private functions to avoid conflicts with stb_image.h + 0.93 (2014-05-27) + warning fixes + 0.92 (2010-08-01) + casts to unsigned char to fix warnings + 0.91 (2010-07-17) + first public release + 0.90 first internal release +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ \ No newline at end of file diff --git a/libs/zstbi/src/zstbi.c b/libs/zstbi/src/zstbi.c new file mode 100644 index 0000000..18ff077 --- /dev/null +++ b/libs/zstbi/src/zstbi.c @@ -0,0 +1,32 @@ +#include + +void* (*zstbiMallocPtr)(size_t size) = NULL; +void* (*zstbiReallocPtr)(void* ptr, size_t size) = NULL; +void (*zstbiFreePtr)(void* ptr) = NULL; + +#define STBI_MALLOC(size) zstbiMallocPtr(size) +#define STBI_REALLOC(ptr, size) zstbiReallocPtr(ptr, size) +#define STBI_FREE(ptr) zstbiFreePtr(ptr) + +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + +void* (*zstbirMallocPtr)(size_t size, void* context) = NULL; +void (*zstbirFreePtr)(void* ptr, void* context) = NULL; + +#define STBIR_MALLOC(size, context) zstbirMallocPtr(size, context) +#define STBIR_FREE(ptr, context) zstbirFreePtr(ptr, context) + +#define STB_IMAGE_RESIZE_IMPLEMENTATION +#include "stb_image_resize.h" + +void* (*zstbiwMallocPtr)(size_t size) = NULL; +void* (*zstbiwReallocPtr)(void* ptr, size_t size) = NULL; +void (*zstbiwFreePtr)(void* ptr) = NULL; + +#define STBIW_MALLOC(size) zstbiwMallocPtr(size) +#define STBIW_REALLOC(ptr, size) zstbiwReallocPtr(ptr, size) +#define STBIW_FREE(ptr) zstbiwFreePtr(ptr) + +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "stb_image_write.h" diff --git a/libs/zstbi/src/zstbi.zig b/libs/zstbi/src/zstbi.zig new file mode 100644 index 0000000..b0908f7 --- /dev/null +++ b/libs/zstbi/src/zstbi.zig @@ -0,0 +1,619 @@ +const std = @import("std"); +const testing = std.testing; +const assert = std.debug.assert; + +pub fn init(allocator: std.mem.Allocator) void { + assert(mem_allocator == null); + mem_allocator = allocator; + mem_allocations = std.AutoHashMap(usize, usize).init(allocator); + + // stb image + zstbiMallocPtr = zstbiMalloc; + zstbiReallocPtr = zstbiRealloc; + zstbiFreePtr = zstbiFree; + // stb image resize + zstbirMallocPtr = zstbirMalloc; + zstbirFreePtr = zstbirFree; + // stb image write + zstbiwMallocPtr = zstbiMalloc; + zstbiwReallocPtr = zstbiRealloc; + zstbiwFreePtr = zstbiFree; +} + +pub fn deinit() void { + assert(mem_allocator != null); + assert(mem_allocations.?.count() == 0); + + setFlipVerticallyOnLoad(false); + setFlipVerticallyOnWrite(false); + + mem_allocations.?.deinit(); + mem_allocations = null; + mem_allocator = null; +} + +pub const JpgWriteSettings = struct { + quality: u32, +}; + +pub const ImageWriteFormat = union(enum) { + png, + jpg: JpgWriteSettings, +}; + +pub const ImageWriteError = error{ + CouldNotWriteImage, +}; + +pub const Image = struct { + data: []u8, + width: u32, + height: u32, + num_components: u32, + bytes_per_component: u32, + bytes_per_row: u32, + is_hdr: bool, + + pub fn info(pathname: [:0]const u8) struct { + is_supported: bool, + width: u32, + height: u32, + num_components: u32, + } { + assert(mem_allocator != null); + + var w: c_int = 0; + var h: c_int = 0; + var c: c_int = 0; + const is_supported = stbi_info(pathname, &w, &h, &c); + return .{ + .is_supported = if (is_supported == 1) true else false, + .width = @as(u32, @intCast(w)), + .height = @as(u32, @intCast(h)), + .num_components = @as(u32, @intCast(c)), + }; + } + + pub fn loadFromFile(pathname: [:0]const u8, forced_num_components: u32) !Image { + assert(mem_allocator != null); + + var width: u32 = 0; + var height: u32 = 0; + var num_components: u32 = 0; + var bytes_per_component: u32 = 0; + var bytes_per_row: u32 = 0; + var is_hdr = false; + + const data = if (isHdr(pathname)) data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_loadf( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 2; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = true; + + // Convert each component from f32 to f16. + var ptr_f16 = @as([*]f16, @ptrCast(ptr.?)); + const num = width * height * num_components; + var i: u32 = 0; + while (i < num) : (i += 1) { + ptr_f16[i] = @as(f16, @floatCast(ptr.?[i])); + } + break :data @as([*]u8, @ptrCast(ptr_f16))[0 .. height * bytes_per_row]; + } else data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const is_16bit = is16bit(pathname); + const ptr = if (is_16bit) @as(?[*]u8, @ptrCast(stbi_load_16( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ))) else stbi_load( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = if (is_16bit) 2 else 1; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = false; + + break :data @as([*]u8, @ptrCast(ptr))[0 .. height * bytes_per_row]; + }; + + return Image{ + .data = data, + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = is_hdr, + }; + } + + pub fn loadFromMemory(data: []const u8, forced_num_components: u32) !Image { + assert(mem_allocator != null); + + var width: u32 = 0; + var height: u32 = 0; + var num_components: u32 = 0; + var bytes_per_component: u32 = 0; + var bytes_per_row: u32 = 0; + var is_hdr = false; + + const image_data = if (isHdrFromMem(data)) data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_loadf_from_memory( + data.ptr, + @as(c_int, @intCast(data.len)), + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 2; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = true; + + // Convert each component from f32 to f16. + var ptr_f16 = @as([*]f16, @ptrCast(ptr.?)); + const num = width * height * num_components; + var i: u32 = 0; + while (i < num) : (i += 1) { + ptr_f16[i] = @as(f16, @floatCast(ptr.?[i])); + } + break :data @as([*]u8, @ptrCast(ptr_f16))[0 .. height * bytes_per_row]; + } else data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_load_from_memory( + data.ptr, + @as(c_int, @intCast(data.len)), + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 1; + bytes_per_row = width * num_components * bytes_per_component; + + break :data @as([*]u8, @ptrCast(ptr))[0 .. height * bytes_per_row]; + }; + + return Image{ + .data = image_data, + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = is_hdr, + }; + } + + pub fn createEmpty(width: u32, height: u32, num_components: u32, args: struct { + bytes_per_component: u32 = 0, + bytes_per_row: u32 = 0, + }) !Image { + assert(mem_allocator != null); + + const bytes_per_component = if (args.bytes_per_component == 0) 1 else args.bytes_per_component; + const bytes_per_row = if (args.bytes_per_row == 0) + width * num_components * bytes_per_component + else + args.bytes_per_row; + + const size = height * bytes_per_row; + + const data = @as([*]u8, @ptrCast(zstbiMalloc(size))); + @memset(data[0..size], 0); + + return Image{ + .data = data[0..size], + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = false, + }; + } + + pub fn resize(image: *const Image, new_width: u32, new_height: u32) Image { + assert(mem_allocator != null); + + // TODO: Add support for HDR images + const new_bytes_per_row = new_width * image.num_components * image.bytes_per_component; + const new_size = new_height * new_bytes_per_row; + const new_data = @as([*]u8, @ptrCast(zstbiMalloc(new_size))); + stbir_resize_uint8( + image.data.ptr, + @as(c_int, @intCast(image.width)), + @as(c_int, @intCast(image.height)), + 0, + new_data, + @as(c_int, @intCast(new_width)), + @as(c_int, @intCast(new_height)), + 0, + @as(c_int, @intCast(image.num_components)), + ); + return .{ + .data = new_data[0..new_size], + .width = new_width, + .height = new_height, + .num_components = image.num_components, + .bytes_per_component = image.bytes_per_component, + .bytes_per_row = new_bytes_per_row, + .is_hdr = image.is_hdr, + }; + } + + pub fn writeToFile( + image: Image, + filename: [:0]const u8, + image_format: ImageWriteFormat, + ) ImageWriteError!void { + assert(mem_allocator != null); + + const w = @as(c_int, @intCast(image.width)); + const h = @as(c_int, @intCast(image.height)); + const comp = @as(c_int, @intCast(image.num_components)); + const result = switch (image_format) { + .png => stbi_write_png(filename.ptr, w, h, comp, image.data.ptr, 0), + .jpg => |settings| stbi_write_jpg( + filename.ptr, + w, + h, + comp, + image.data.ptr, + @as(c_int, @intCast(settings.quality)), + ), + }; + // if the result is 0 then it means an error occured (per stb image write docs) + if (result == 0) { + return ImageWriteError.CouldNotWriteImage; + } + } + + pub fn writeToFn( + image: Image, + write_fn: *const fn (ctx: ?*anyopaque, data: ?*anyopaque, size: c_int) callconv(.C) void, + context: ?*anyopaque, + image_format: ImageWriteFormat, + ) ImageWriteError!void { + assert(mem_allocator != null); + + const w = @as(c_int, @intCast(image.width)); + const h = @as(c_int, @intCast(image.height)); + const comp = @as(c_int, @intCast(image.num_components)); + const result = switch (image_format) { + .png => stbi_write_png_to_func(write_fn, context, w, h, comp, image.data.ptr, 0), + .jpg => |settings| stbi_write_jpg_to_func( + write_fn, + context, + w, + h, + comp, + image.data.ptr, + @as(c_int, @intCast(settings.quality)), + ), + }; + // if the result is 0 then it means an error occured (per stb image write docs) + if (result == 0) { + return ImageWriteError.CouldNotWriteImage; + } + } + + pub fn deinit(image: *Image) void { + stbi_image_free(image.data.ptr); + image.* = undefined; + } +}; + +/// `pub fn setHdrToLdrScale(scale: f32) void` +pub const setHdrToLdrScale = stbi_hdr_to_ldr_scale; + +/// `pub fn setHdrToLdrGamma(gamma: f32) void` +pub const setHdrToLdrGamma = stbi_hdr_to_ldr_gamma; + +/// `pub fn setLdrToHdrScale(scale: f32) void` +pub const setLdrToHdrScale = stbi_ldr_to_hdr_scale; + +/// `pub fn setLdrToHdrGamma(gamma: f32) void` +pub const setLdrToHdrGamma = stbi_ldr_to_hdr_gamma; + +pub fn isHdr(filename: [:0]const u8) bool { + return stbi_is_hdr(filename) != 0; +} + +pub fn isHdrFromMem(buffer: []const u8) bool { + return stbi_is_hdr_from_memory(buffer.ptr, @as(c_int, @intCast(buffer.len))) != 0; +} + +pub fn is16bit(filename: [:0]const u8) bool { + return stbi_is_16_bit(filename) != 0; +} + +pub fn setFlipVerticallyOnLoad(should_flip: bool) void { + stbi_set_flip_vertically_on_load(if (should_flip) 1 else 0); +} + +pub fn setFlipVerticallyOnWrite(should_flip: bool) void { + stbi_flip_vertically_on_write(if (should_flip) 1 else 0); +} + +var mem_allocator: ?std.mem.Allocator = null; +var mem_allocations: ?std.AutoHashMap(usize, usize) = null; +var mem_mutex: std.Thread.Mutex = .{}; +const mem_alignment = 16; + +extern var zstbiMallocPtr: ?*const fn (size: usize) callconv(.C) ?*anyopaque; +extern var zstbiwMallocPtr: ?*const fn (size: usize) callconv(.C) ?*anyopaque; + +fn zstbiMalloc(size: usize) callconv(.C) ?*anyopaque { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const mem = mem_allocator.?.alignedAlloc( + u8, + mem_alignment, + size, + ) catch @panic("zstbi: out of memory"); + + mem_allocations.?.put(@intFromPtr(mem.ptr), size) catch @panic("zstbi: out of memory"); + + return mem.ptr; +} + +extern var zstbiReallocPtr: ?*const fn (ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque; +extern var zstbiwReallocPtr: ?*const fn (ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque; + +fn zstbiRealloc(ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const old_size = if (ptr != null) mem_allocations.?.get(@intFromPtr(ptr.?)).? else 0; + const old_mem = if (old_size > 0) + @as([*]align(mem_alignment) u8, @ptrCast(@alignCast(ptr)))[0..old_size] + else + @as([*]align(mem_alignment) u8, undefined)[0..0]; + + const new_mem = mem_allocator.?.realloc(old_mem, size) catch @panic("zstbi: out of memory"); + + if (ptr != null) { + const removed = mem_allocations.?.remove(@intFromPtr(ptr.?)); + std.debug.assert(removed); + } + + mem_allocations.?.put(@intFromPtr(new_mem.ptr), size) catch @panic("zstbi: out of memory"); + + return new_mem.ptr; +} + +extern var zstbiFreePtr: ?*const fn (maybe_ptr: ?*anyopaque) callconv(.C) void; +extern var zstbiwFreePtr: ?*const fn (maybe_ptr: ?*anyopaque) callconv(.C) void; + +fn zstbiFree(maybe_ptr: ?*anyopaque) callconv(.C) void { + if (maybe_ptr) |ptr| { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const size = mem_allocations.?.fetchRemove(@intFromPtr(ptr)).?.value; + const mem = @as([*]align(mem_alignment) u8, @ptrCast(@alignCast(ptr)))[0..size]; + mem_allocator.?.free(mem); + } +} + +extern var zstbirMallocPtr: ?*const fn (size: usize, maybe_context: ?*anyopaque) callconv(.C) ?*anyopaque; + +fn zstbirMalloc(size: usize, _: ?*anyopaque) callconv(.C) ?*anyopaque { + return zstbiMalloc(size); +} + +extern var zstbirFreePtr: ?*const fn (maybe_ptr: ?*anyopaque, maybe_context: ?*anyopaque) callconv(.C) void; + +fn zstbirFree(maybe_ptr: ?*anyopaque, _: ?*anyopaque) callconv(.C) void { + zstbiFree(maybe_ptr); +} + +extern fn stbi_info(filename: [*:0]const u8, x: *c_int, y: *c_int, comp: *c_int) c_int; + +extern fn stbi_load( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u8; + +extern fn stbi_load_16( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u16; + +extern fn stbi_loadf( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]f32; + +pub extern fn stbi_load_from_memory( + buffer: [*]const u8, + len: c_int, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u8; + +pub extern fn stbi_loadf_from_memory( + buffer: [*]const u8, + len: c_int, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]f32; + +extern fn stbi_image_free(image_data: ?[*]u8) void; + +extern fn stbi_hdr_to_ldr_scale(scale: f32) void; +extern fn stbi_hdr_to_ldr_gamma(gamma: f32) void; +extern fn stbi_ldr_to_hdr_scale(scale: f32) void; +extern fn stbi_ldr_to_hdr_gamma(gamma: f32) void; + +extern fn stbi_is_16_bit(filename: [*:0]const u8) c_int; +extern fn stbi_is_hdr(filename: [*:0]const u8) c_int; +extern fn stbi_is_hdr_from_memory(buffer: [*]const u8, len: c_int) c_int; + +extern fn stbi_set_flip_vertically_on_load(flag_true_if_should_flip: c_int) void; +extern fn stbi_flip_vertically_on_write(flag: c_int) void; // flag is non-zero to flip data vertically + +extern fn stbir_resize_uint8( + input_pixels: [*]const u8, + input_w: c_int, + input_h: c_int, + input_stride_in_bytes: c_int, + output_pixels: [*]u8, + output_w: c_int, + output_h: c_int, + output_stride_in_bytes: c_int, + num_channels: c_int, +) void; + +extern fn stbi_write_jpg( + filename: [*:0]const u8, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + quality: c_int, +) c_int; + +extern fn stbi_write_png( + filename: [*:0]const u8, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + stride_in_bytes: c_int, +) c_int; + +extern fn stbi_write_png_to_func( + func: *const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.C) void, + context: ?*anyopaque, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + stride_in_bytes: c_int, +) c_int; + +extern fn stbi_write_jpg_to_func( + func: *const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.C) void, + context: ?*anyopaque, + x: c_int, + y: c_int, + comp: c_int, + data: [*]const u8, + quality: c_int, +) c_int; + +test "zstbi basic" { + init(testing.allocator); + defer deinit(); + + var im1 = try Image.createEmpty(8, 6, 4, .{}); + defer im1.deinit(); + + try testing.expect(im1.width == 8); + try testing.expect(im1.height == 6); + try testing.expect(im1.num_components == 4); +} + +test "zstbi resize" { + init(testing.allocator); + defer deinit(); + + var im1 = try Image.createEmpty(32, 32, 4, .{}); + defer im1.deinit(); + + var im2 = im1.resize(8, 6); + defer im2.deinit(); + + try testing.expect(im2.width == 8); + try testing.expect(im2.height == 6); + try testing.expect(im2.num_components == 4); +} + +test "zstbi write and load file" { + init(testing.allocator); + defer deinit(); + + const pth = try std.fs.selfExeDirPathAlloc(testing.allocator); + defer testing.allocator.free(pth); + try std.posix.chdir(pth); + + var img = try Image.createEmpty(8, 6, 4, .{}); + defer img.deinit(); + + try img.writeToFile("test_img.png", ImageWriteFormat.png); + try img.writeToFile("test_img.jpg", .{ .jpg = .{ .quality = 80 } }); + + var img_png = try Image.loadFromFile("test_img.png", 0); + defer img_png.deinit(); + + try testing.expect(img_png.width == img.width); + try testing.expect(img_png.height == img.height); + try testing.expect(img_png.num_components == img.num_components); + + var img_jpg = try Image.loadFromFile("test_img.jpg", 0); + defer img_jpg.deinit(); + + try testing.expect(img_jpg.width == img.width); + try testing.expect(img_jpg.height == img.height); + try testing.expect(img_jpg.num_components == 3); // RGB JPEG + + try std.fs.cwd().deleteFile("test_img.png"); + try std.fs.cwd().deleteFile("test_img.jpg"); +} diff --git a/profile.json b/profile.json new file mode 100644 index 0000000..ddcec6a --- /dev/null +++ b/profile.json @@ -0,0 +1 @@ +{"meta":{"categories":[{"name":"Other","color":"grey","subcategories":["Other"]},{"name":"User","color":"yellow","subcategories":["Other"]},{"name":"Kernel","color":"orange","subcategories":["Other"]}],"debug":false,"extensions":{"baseURL":[],"id":[],"length":0,"name":[]},"interval":1.0,"preprocessedProfileVersion":46,"processType":0,"product":"./zig-out/bin/vulkan-test","sampleUnits":{"eventDelay":"ms","threadCPUDelta":"µs","time":"ms"},"startTime":1722876330128.0261,"symbolicated":false,"pausedRanges":[],"version":24,"usesOnlyOneStackType":true,"doesNotUseFrameImplementation":true,"sourceCodeIsNotOnSearchfox":true,"markerSchema":[]},"libs":[{"name":"libc.so.6","path":"/usr/lib64/libc.so.6","debugName":"libc.so.6","debugPath":"/usr/lib64/libc.so.6","breakpadId":"AAAB538F45D969A6F2BDCD25F471D80E0","codeId":"8f53abaad945a669f2bdcd25f471d80e077568ef","arch":null},{"name":"ld-linux-x86-64.so.2","path":"/usr/lib64/ld-linux-x86-64.so.2","debugName":"ld-linux-x86-64.so.2","debugPath":"/usr/lib64/ld-linux-x86-64.so.2","breakpadId":"A9CCAACB213FE29BE32FD8E01FF304530","codeId":"cbaacca93f219be2e32fd8e01ff304537bba9328","arch":null},{"name":"vulkan-test","path":"/home/przmk/Projects/zig/vulkan-test/zig-out/bin/vulkan-test","debugName":"vulkan-test","debugPath":"/home/przmk/Projects/zig/vulkan-test/zig-out/bin/vulkan-test","breakpadId":"55AB59981A1EBAEF781251A5CF8253200","codeId":null,"arch":null},{"name":"libSDL2-2.0.so.0.3000.3","path":"/usr/lib64/libSDL2-2.0.so.0.3000.3","debugName":"libSDL2-2.0.so.0.3000.3","debugPath":"/usr/lib64/libSDL2-2.0.so.0.3000.3","breakpadId":"D79220417CB1B6641668E0B1279EC05A0","codeId":"412092d7b17c64b61668e0b1279ec05adfa7e03c","arch":null},{"name":"libdbus-1.so.3.32.4","path":"/usr/lib64/libdbus-1.so.3.32.4","debugName":"libdbus-1.so.3.32.4","debugPath":"/usr/lib64/libdbus-1.so.3.32.4","breakpadId":"3C0436548C1D09EB30FA411717D273D30","codeId":"5436043c1d8ceb0930fa411717d273d3c6c6bf60","arch":null},{"name":"libwayland-client.so.0.22.0","path":"/usr/lib64/libwayland-client.so.0.22.0","debugName":"libwayland-client.so.0.22.0","debugPath":"/usr/lib64/libwayland-client.so.0.22.0","breakpadId":"09FBBA8D44FDC84B5F7BDDCE949756E70","codeId":"8dbafb09fd444bc85f7bddce949756e72c7b907c","arch":null},{"name":"libvulkan.so.1.3.283","path":"/usr/lib64/libvulkan.so.1.3.283","debugName":"libvulkan.so.1.3.283","debugPath":"/usr/lib64/libvulkan.so.1.3.283","breakpadId":"5AE142D36E73D1D2A0D09EEA7CDE7D8A0","codeId":"d342e15a736ed2d1a0d09eea7cde7d8abc6fb453","arch":null},{"name":"libLLVM.so.18.1","path":"/usr/lib64/libLLVM.so.18.1","debugName":"libLLVM.so.18.1","debugPath":"/usr/lib64/libLLVM.so.18.1","breakpadId":"869E8B9172A933E515E45CFEBB0DD7DF0","codeId":"918b9e86a972e53315e45cfebb0dd7dff770b055","arch":null},{"name":"libstdc++.so.6.0.33","path":"/usr/lib64/libstdc++.so.6.0.33","debugName":"libstdc++.so.6.0.33","debugPath":"/usr/lib64/libstdc++.so.6.0.33","breakpadId":"FD3EDB79125FCA738C42ABD22D1D9FD60","codeId":"79db3efd5f1273ca8c42abd22d1d9fd63cffe57c","arch":null},{"name":"libvulkan_intel_hasvk.so","path":"/usr/lib64/libvulkan_intel_hasvk.so","debugName":"libvulkan_intel_hasvk.so","debugPath":"/usr/lib64/libvulkan_intel_hasvk.so","breakpadId":"5CBBEA03E613A6765638273BB805A2990","codeId":"03eabb5c13e676a65638273bb805a2998380ef44","arch":null},{"name":"libffi.so.8.1.2","path":"/usr/lib64/libffi.so.8.1.2","debugName":"libffi.so.8.1.2","debugPath":"/usr/lib64/libffi.so.8.1.2","breakpadId":"03BF90A144E61C18ADAB122962AB83AE0","codeId":"a190bf03e644181cadab122962ab83ae96271696","arch":null},{"name":"libxkbcommon.so.0.0.0","path":"/usr/lib64/libxkbcommon.so.0.0.0","debugName":"libxkbcommon.so.0.0.0","debugPath":"/usr/lib64/libxkbcommon.so.0.0.0","breakpadId":"95B74E5EBFACD37573F2930E5D0E84A50","codeId":"5e4eb795acbf75d373f2930e5d0e84a568225bab","arch":null},{"name":"libVkLayer_khronos_validation.so","path":"/usr/lib64/libVkLayer_khronos_validation.so","debugName":"libVkLayer_khronos_validation.so","debugPath":"/usr/lib64/libVkLayer_khronos_validation.so","breakpadId":"4EE8857AB7839D4FBAE90E7468C7360A0","codeId":"7a85e84e83b74f9dbae90e7468c7360ad9892911","arch":null},{"name":"libVkLayer_MESA_device_select.so","path":"/usr/lib64/libVkLayer_MESA_device_select.so","debugName":"libVkLayer_MESA_device_select.so","debugPath":"/usr/lib64/libVkLayer_MESA_device_select.so","breakpadId":"DE0C615CAD8E54891EB39A8494675F0F0","codeId":"5c610cde8ead89541eb39a8494675f0f01083bde","arch":null},{"name":"libvulkan_freedreno.so","path":"/usr/lib64/libvulkan_freedreno.so","debugName":"libvulkan_freedreno.so","debugPath":"/usr/lib64/libvulkan_freedreno.so","breakpadId":"B7E489218C5BB328022C95890A68D9330","codeId":"2189e4b75b8c28b3022c95890a68d933465a3012","arch":null},{"name":"libexpat.so.1.9.2","path":"/usr/lib64/libexpat.so.1.9.2","debugName":"libexpat.so.1.9.2","debugPath":"/usr/lib64/libexpat.so.1.9.2","breakpadId":"E6DE648439075D8A407040011331F73B0","codeId":"8464dee607398a5d407040011331f73b27da02b4","arch":null},{"name":"libvulkan_intel.so","path":"/usr/lib64/libvulkan_intel.so","debugName":"libvulkan_intel.so","debugPath":"/usr/lib64/libvulkan_intel.so","breakpadId":"CE56CEDC5A7361C48352CBB362D7A9260","codeId":"dcce56ce735ac4618352cbb362d7a92604e016f8","arch":null},{"name":"libvulkan_lvp.so","path":"/usr/lib64/libvulkan_lvp.so","debugName":"libvulkan_lvp.so","debugPath":"/usr/lib64/libvulkan_lvp.so","breakpadId":"24E12433CB6388821C7D88F7EF1482F10","codeId":"3324e12463cb82881c7d88f7ef1482f1f0a9b08c","arch":null},{"name":"libvulkan_nouveau.so","path":"/usr/lib64/libvulkan_nouveau.so","debugName":"libvulkan_nouveau.so","debugPath":"/usr/lib64/libvulkan_nouveau.so","breakpadId":"4AEFE422B28AA5E563407278C6BF7CDE0","codeId":"22e4ef4a8ab2e5a563407278c6bf7cde10d01ae9","arch":null},{"name":"libvulkan_radeon.so","path":"/usr/lib64/libvulkan_radeon.so","debugName":"libvulkan_radeon.so","debugPath":"/usr/lib64/libvulkan_radeon.so","breakpadId":"33A75895050143BDDD591080473B4A5D0","codeId":"9558a7330105bd43dd591080473b4a5d2723ca50","arch":null},{"name":"libdrm_amdgpu.so.1.0.0","path":"/usr/lib64/libdrm_amdgpu.so.1.0.0","debugName":"libdrm_amdgpu.so.1.0.0","debugPath":"/usr/lib64/libdrm_amdgpu.so.1.0.0","breakpadId":"F6792A7397A3736B6CFFC0E8F0F77F8C0","codeId":"732a79f6a3976b736cffc0e8f0f77f8c5897ce93","arch":null},{"name":"libdrm.so.2.4.0","path":"/usr/lib64/libdrm.so.2.4.0","debugName":"libdrm.so.2.4.0","debugPath":"/usr/lib64/libdrm.so.2.4.0","breakpadId":"667670A07184073C04D5E2052B1F82CC0","codeId":"a070766684713c0704d5e2052b1f82cc36f8466d","arch":null},{"name":"libvulkan_powervr_mesa.so","path":"/usr/lib64/libvulkan_powervr_mesa.so","debugName":"libvulkan_powervr_mesa.so","debugPath":"/usr/lib64/libvulkan_powervr_mesa.so","breakpadId":"8C3DF4459893D3CD9E6F6F37873EEA9C0","codeId":"45f43d8c9398cdd39e6f6f37873eea9cba06a02d","arch":null},{"name":"[vdso]","path":"[vdso]","debugName":"[vdso]","debugPath":"[vdso]","breakpadId":"3222DF0F102766010529E5615C813CD00","codeId":"0fdf2232271001660529e5615c813cd0d23d4158","arch":null},{"name":"libwayland-cursor.so.0.22.0","path":"/usr/lib64/libwayland-cursor.so.0.22.0","debugName":"libwayland-cursor.so.0.22.0","debugPath":"/usr/lib64/libwayland-cursor.so.0.22.0","breakpadId":"10BCAF5A3C9BFB9258F49F7507066EEC0","codeId":"5aafbc109b3c92fb58f49f7507066eec5949a735","arch":null}],"threads":[{"frameTable":{"length":1,"address":[940811],"inlineDepth":[0],"category":[1],"subcategory":[0],"func":[0],"nativeSymbol":[null],"innerWindowID":[null],"implementation":[null],"line":[null],"column":[null],"optimizations":[null]},"funcTable":{"length":1,"name":[1],"isJS":[false],"relevantForJS":[false],"resource":[0],"fileName":[null],"lineNumber":[null],"columnNumber":[null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"samply","isMainThread":true,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425","processName":"samply","processShutdownTime":7353001.849467,"processStartupTime":0.0,"processType":"default","registerTime":0.0,"resourceTable":{"length":1,"lib":[0],"name":[0],"host":[null],"type":[1]},"samples":{"length":6,"stack":[0,0,0,0,0,0],"time":[7353001.796229,7353001.814623,7353001.822117,7353001.828959,7353001.835552,7353001.843136],"weight":[1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,18,7,6,6,7]},"stackTable":{"length":1,"prefix":[null],"frame":[0],"category":[1],"subcategory":[0]},"stringArray":["libc.so.6","0xe5b0b"],"tid":"32425","unregisterTime":7353001.849467},{"frameTable":{"length":1516,"address":[-1,118855,123741,117237,130942,11559,5410,10428,37415,86388,84477,83982,991460,172362,172167,1136014,1127773,994138,991566,109326,1176307,602542,601058,5752,602355,51459,50335,53253,61318,43661,40551,1176147,107776,102535,96342,202343,201575,201019,94660,109770,827798,1123749,51466,87263,144955,52603,86603,47964,144764,827960,1144721,34586,23115,22434,19942,194251,169729,122614,40937,59544,40499,41210,39982,151006,41049,121657,43639,532884,580181,589823,40518,43443,52708,36799,30859,61116,61356,43454,41064,40577,40210,150886,40381,50427,5569,21804,21558,4350469,5336502,5429651,5429174,754885,694715,687283,684927,4637967,42215024,40468,41136,41148,39909,43796,534383,587743,582994,1104970,40509,40414,994210,993062,840787,847562,1147754,880602,169599,108215,103978,1627140,104105,1627119,841434,834518,1121701,20269,34029,22175,36949,1101359,130000,112367,86433,112386,108587,104351,100783,71964,684851,1101746,40623,15414,15215,131420,131815,84286,1570044,133125,84176,131683,131439,17483,1002164,1153460,195204,170546,126552,119962,43934,38618,38942,39122,37775,1114467,1000281,1003438,1155632,1468742,1398789,1731672,1155479,1468583,1765568,1107901,169552,43696,587883,592179,529840,1088011,1001130,1005419,200791,36473,155972,202970,139676,43667,10479326,9195892,10479531,5407331,5012514,4913063,4885415,3386431,10479651,2316906,10479806,259452,196131,195962,138879,14341,3886483,3729545,3890991,153666,650979,3208010,1803958,641272,641162,1803709,271375,1105067,3207870,3200629,3200037,60974,9550,51653,46136,17567,437482,4212542,4205269,4204677,47118,28413,70610,678794,5989950,5982709,5982117,46540,28433,27342,22211,21868,9112,155131,615726,3160449,3158796,2093930,6457598,6449397,6448805,17558,1302176,5244606,5237365,5236773,44430,34963,154834,5227698,5225700,3894832,8542951,5028045,164380,162362,2072081,2069137,2068847,1316673,1684436,31255,46811,31730,1084587,32716,29058,45950,32687,1142061,1684808,2083946,48927,48217,31545,29159,532901,581300,580862,1102741,713297,710376,276546,49199,30360,28540,1897105,1894097,1893744,616081,613160,630935,625202,876877,877036,227352,2750494,1180814,1178863,1172644,646881,1179133,1178057,1176914,1140755,4272352,630599,876314,228872,615941,3159735,3158626,1627857,1624993,1624640,8543097,164192,143465,281654,1162417,1472556,1767360,2188020,1114928,1015978,1016688,1164615,206258,17640,19388,35911,1167803,19073,29055,1016235,206802,111908,600357,9850,8228,88057,1016519,1018541,1058561,1060272,1174603,4221341,5146027,1748241,1746727,29995,1103485,1059669,1060944,1175579,4222556,5146422,1747489,1747164,1737291,1143404,1115055,1023497,1024552,1169318,207794,129683,147044,3860589,159548,1176257,576088,573931,573301,1373574,1304107,1310818,581036,1108674,576126,676013,1354131,1353680,1349268,1347093,2030009,2028390,1347839,1346385,1488152,1482650,1473459,1004139,1666386,22600,46015,679985,668518,662750,1394461,1386846,1367305,1365086,1357231,5234352,680196,671416,1386883,1376256,576220,597789,591070,1376423,2018974,3412265,2518412,576266,615743,604662,3413126,3407334,604684,2555917,2554559,688986,576281,655391,654506,1353265,1346065,3412347,3400744,576322,718243,711399,577445,2788372,2755568,576363,1580606,1550862,2786399,2754775,2754310,2555332,2555244,684951,1581456,3406180,3404107,2541262,2540135,576407,755128,754260,3403609,2540274,2539552,2555713,687479,755215,3404690,2518880,576429,769725,760807,577240,2556466,2584263,571762,414676,768517,3406579,684109,3862201,3865432,3782374,3702094,4911782,688931,1023942,1049274,183532,264924,1570071,1115182,1063199,1067904,1177416,4269764,3453962,3443487,21995,14281,1064941,1069324,1151348,1464649,1757831,1463645,1746094,2171758,2482013,2153569,2451888,2690850,1115963,1078577,1019310,1020744,1167722,1469548,1146063,1458802,1756283,1746374,2172407,1117482,1107203,1101897,1095846,1096741,1196614,1265944,1698714,2150540,1755232,2180893,1369558,1717722,1163038,3386416,1499774,1996513,2248636,2602803,2789212,2789046,2788724,2785421,2784064,2783435,2781507,1719404,1207124,1504777,1999079,1592007,1598536,2065210,2150720,1504879,1999403,2250228,2606703,2801618,2942709,2801454,2942258,2249984,2606210,2795802,2940764,3126150,3209457,2801296,2942620,2942689,3126389,3209567,3236077,3255423,2786954,2930031,3123188,2929832,3122832,3200768,3235833,2942502,2942248,2942241,2942489,2942554,2942778,2942130,2942341,2942718,2942434,3123850,2800284,2786152,2799676,2942713,2801704,3209299,2942254,3122763,2855861,2941288,3126636,3209799,2942399,2940691,3208275,2942406,3123323,2159850,2458914,1718698,2942069,2855842,2801274,3122844,3201415,3386262,2942509,2802019,2942929,2942441,3255428,3235816,2942194,2940697,2942250,2940776,2795326,2939896,3126156,3201292,2942208,2800745,2940890,3123059,2782225,3235867,3240886,2942345,2802174,2929947,2159651,2250070,2603915,3255406,3386268,2159621,2159677,2786293,2800137,2603905,2802339,2942941,3201666,3126776,2800488,2942384,2942445,3123575,1718710,2800291,2801968,3240782,3123446,2159910,3209271,2929993,2795334,2800168,3123025,2942705,2786970,3126097,2604087,2940093,3209805,3235883,3247696,3208362,2942420,2800759,3200752,2782165,3208267,2942270,2782129,2942696,3208303,1994345,2151528,1494330,1495429,3201303,2941526,3255479,3264097,3264229,2782086,3386548,2942949,2941815,2786361,2782417,2604126,2800213,2942428,-1,3235993,3248374,2942819,2603579,2159719,2942953,2942117,3127385,3123703,2942499,2942564,3123246,3201123,2942575,2782274,2802003,2942102,3386242,2942923,1141320,3386318,3235859,3208366,2942468,3236086,2799924,2800438,2794501,3201109,3123854,2855932,2941294,3386256,3201255,2802352,3209576,1141312,3122781,2942630,3201355,2942337,2940827,3209265,2930163,2782072,1718696,2786974,2800368,2801284,3240040,3247744,3126830,2940770,2941402,3386532,3208328,3200822,2801924,3201193,2802187,3122791,3126390,2942291,3209333,3208335,2929972,2458903,2159846,2942052,2782191,3264177,2799255,3127355,1141339,2800178,3201223,1718703,2800922,3201623,2801261,2802032,2782172,3247724,3123414,3235910,3240091,2782048,2930138,2800171,3247700,2799886,3209795,3126138,2942774,2930036,3209273,2942616,3248014,2800958,3386557,3264243,2782507,3386310,1495639,1984487,2786413,2782536,2794534,2604400,2942701,2782368,2458990,3255612,2855835,3247770,3201673,2782500,2942676,3240117,3263989,3240750,3386049,3208341,2942007,3123064,2800514,2941003,2604029,2942475,3123073,3203803,3264248,2942479,3240098,2942536,3201446,2942395,1985156,3255470,3386052,2942668,2604279,2942602,2802361,3255461,2603964,3123863,3200836,2942431,1718726,3123428,2942486,3209882,2801733,2604026,3123557,2800521,2800311,3247988,3123529,2942136,2782569,3126240,3125995,2941009,2782087,2942277,2942682,3247868,3208443,2941078,3240132,2782238,2942133,2801144,2800445,2159808,2802193,3201665,1141328,2942057,3123096,1096538,1097703,1231489,1616442,2071860,3386447,1103527,1099771,1098003,1081844,1187815,197178,4026118,826433,1890600,1009979,1674557,1670351,1666234,17778,1104821,1105034,1231670,3912688,5030738,1180959,1662720,19817,47136,2780401,1373686,1718506,3209809,2159912,2603426,2604425,2799696,2786159,2603911,3127039,3123560,2942412,3209459,2942609,2800235,3248130,2604046,2941194,3203944,2941513,2800495,3127022,2782361,2941804,3200977,2941565,2782402,3255415,1994148,2800541,2799863,3123793,2929856,3122912,3207921,3209705,3209505,3201484,2786983,3248199,2800379,3200907,3240239,3201754,3127054,2942140,1494336,3201562,2939968,2782324,2942415,2942047,2930176,2800994,2800715,2942543,2458919,2941874,2940705,3126024,2800538,2604214,2786914,2786211,3123654,3208396,1718713,2942034,2801063,2603960,3255430,2941887,2941952,1984885,2798736,2802200,3247824,3127123,2794688,2942634,3209807,2786206,1719446,2940701,3264259,2783130,2783096,3208411,2942039,3240543,3126972,2604156,2786114,2800392,2802045,2801721,2799350,3126367,1118014,1100104,1098945,1099460,1234173,3858072,1945833,1967876,2002666,50595,1118248,1113495,1111096,1082825,1071728,1181848,3911561,5174627,645588,1128926,1125653,1123106,1124161,1247849,4060658,1779708,1777404,971371,920035,1125014,1127060,1244406,3966133,6762747,7041520,971621,862548,5024494,1122713,1123668,1247018,4057217,1029332,395517,645378,1125755,1124415,1105266,1232186,3959018,1724568,392369,387748,387612,1122654,1123560,1246819,4010292,5193272,2679417,2752526,1125491,1127428,1245397,4273280,1703186,1703655,1713522,1084828,1126421,1099327,1233833,3870456,5029892,1976359,1944298,1941932,1939189,1429311,1678695,26619,1128325,1129802,238773,237633,1090855,1117706,34329,30708,30284,691565,684020,1942562,1090845,25053,1168971,1771925,1418602,3664327,3643662,3869835,2446147,3083998,848708,3959700,5031053,1899182,1183664,1662484,1122746,1123777,1247194,4030702,8425851,1278820,1712893,49988,1712953,50482,1713244,1122197,1123272,1246307,4046125,1956113,1952427,1091675,1076436,622986,616165,1128983,1125690,1027062,1022594,1495796,1126728,1127620,1248129,4228528,1705207,1741057,32454,689037,678652,1122415,1099174,1233405,4007656,1007795,864160,247516,1953150,1093151,1166117,3966978,8342743,8064496,7997180,1166792,1264404,974514,1662428,1166733,1090742,21058,633316,1124609,7776260,7659581,5282374,5282350,5282234,1713395,1968457,687120,8342690,8636531,7997319,924292,1122797,1123891,1247406,4094092,5910841,9343140,6762706,7029132,1703760,4228737,8581248,8229801,5114726,7776208,2345962,795903,578030,577884,1029473,924448,1151453,4045476,2635462,2634756,7890829,8003101,7986530,1095176,688297,683863,664977,663330,2480692,682151,665802,1299092,1927285,1123074,1124036,1247645,4056385,5140732,1889731,1078205,1011636,1713423,2003357,50380,1741288,21239,1122272,1123373,1246485,4012348,8459115,8600581,1122090,1098413,1232834,3869039,6763302,6735915,7198304,1740689,1125252,1127234,1244932,3931246,10041409,3869282,6765102,6736488,1244364,3386200,4030269,1051771,4045036,2681612,2677327,792952,991494,3965653,8747452,4055706,1416593,864235,3965602,5112943,5282289,3869149,827384,1096058,1889017,1013392,1888891,1964028,6762685,2444170,2431792,2049644,2041134,1069671,1013695,1090825,3958903,978436,5024336,1013428,1669709,1672548,1777432,2250619,2235523,1117645,32308,4094899,8482874,1201963,28040,1124750,1105427,1232689,3913479,5721612,4010732,8423928,585691,645392,1703784,7029201,7019159,7136308,1705809,1427723,1681262,4045859,778856,10041392,2450653,5697744,4061582,8062365,8171967,907068,613969,4273378,8542760,8540725,8196165,754667,687245,4093978,7198103,7139968,4131479,4271573,3457925,3457032,8007325,633319,1129691,1704411,1901642,8542502,1703269,1737827,1716204,51099,237812,234552,1313430,932156,2748,1777386,1681378,8454474,7755092,7752712,8163192,8159657,1117658,24494,24237,3870604,2425400,8398602,533818,2445832,3016650,3110269,687500,1166173,1942776,2002345,50985,3870340,8392228,921304,8078904,1122396,1124236,1247964,4048755,1956206,1964206,1947894,1091699,2045371,3386501,5193707,5282351,1676801,1091780,1106707,14719,1087124,1108391,14863,12779,11240,10043,9916,1104614,11084,3386047,12049,10259,13401,13567,587412,587360,534467,12001,5883652,1129085,1135071,1315390,981638,932435,664997,8163274,387401,678017,3914008,5031430,1899278,1183895,1660240,1146027,1942885,1936117,1968630,50080,1681391,1669508,26121,16521,6815672,1128160,1132790,1250040,1252060,1135039,1249338,1688998,3969852,8280064,8017338,677952,1134752,1255331,1693937,207935,110520,3842504,1165077,576876,615061,1338210,1134827,1255523,1694394,205493,13882,3841337,141614,1303312,2070829,2068650,1331322,205598,169058,169143,7608,4337,170710,273567,4914898,4885284,4885244,10323746,10323650,10323479,678230,205953,112180,172174,275117,274912,28448756,-1,-1,937645,-1,-1],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":1516,"name":[0,2,3,4,5,6,7,8,9,10,11,12,14,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,258,259,260,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[-1,0,0,0,0,0,0,0,0,0,0,0,1,2,2,1,1,1,1,3,3,2,2,0,2,0,0,0,0,0,0,3,4,4,4,4,4,4,4,3,3,3,0,0,0,0,0,0,0,3,3,5,5,5,5,6,6,6,0,0,0,0,0,0,0,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,8,2,2,2,7,7,0,0,0,0,6,2,2,2,2,0,0,1,1,3,3,3,3,6,6,6,9,6,9,3,3,3,5,10,10,10,3,11,11,11,11,11,11,11,11,2,3,11,11,11,11,11,11,2,11,11,11,11,11,1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,2,6,6,2,2,2,2,1,1,6,0,0,6,6,0,12,12,12,12,12,12,12,1,12,12,12,12,12,12,6,13,12,12,12,6,14,14,14,2,2,14,2,2,14,14,14,15,15,15,15,15,9,9,9,9,15,15,15,16,16,16,16,15,15,15,15,15,15,6,17,17,17,18,18,18,18,15,19,19,19,19,15,15,6,19,19,12,12,12,6,6,19,19,19,19,19,20,21,21,2,20,20,21,21,2,19,19,21,21,21,21,2,2,2,2,22,22,22,21,21,21,18,18,18,17,17,17,17,17,17,17,17,17,17,17,2,17,17,17,17,17,17,17,17,17,17,17,9,9,9,12,6,6,6,1,1,1,1,1,1,1,1,6,13,13,5,2,13,21,1,6,6,2,0,0,0,1,1,1,1,1,12,12,19,19,5,2,1,1,1,12,12,19,19,19,2,1,1,1,1,6,6,6,12,6,19,19,19,19,2,2,2,2,2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,21,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,2,2,19,19,2,12,12,12,12,12,2,1,1,6,6,2,1,1,1,1,12,12,12,10,10,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,12,12,19,19,19,19,19,20,1,1,1,12,12,19,19,20,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,19,19,19,21,1,1,1,1,1,1,12,12,2,1,1,1,1,1,12,12,12,12,12,1,1,1,12,12,12,12,12,12,1,1,1,12,12,12,2,1,1,1,1,12,12,12,12,12,1,1,1,12,12,12,12,1,1,1,12,19,19,19,2,1,1,1,12,12,19,19,19,19,19,19,20,1,1,3,3,3,3,5,5,5,2,2,19,3,5,2,12,12,12,12,12,12,12,8,12,12,19,19,19,1,1,1,12,12,12,19,21,19,21,19,1,1,1,12,19,19,19,19,19,19,19,19,19,19,19,1,1,1,12,19,19,5,2,2,1,1,1,12,12,12,12,19,19,19,12,12,12,12,19,19,12,19,19,3,5,2,1,12,12,12,12,12,19,19,2,12,12,12,8,1,1,1,12,12,12,12,12,19,12,12,12,12,12,12,12,12,12,12,8,2,12,12,12,12,12,12,19,19,19,19,19,19,19,19,19,19,1,1,1,12,12,19,19,19,19,19,21,19,5,1,1,1,12,12,12,1,1,1,12,12,12,12,19,1,1,1,12,12,12,12,12,1,1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,19,19,19,19,19,12,12,12,12,12,12,19,3,12,12,12,19,19,19,12,12,12,3,5,12,12,12,5,1,1,1,12,12,12,12,12,2,19,12,12,12,19,19,19,12,12,12,12,12,12,12,12,8,2,12,12,12,12,8,2,12,12,12,12,12,12,12,12,2,1,19,19,12,19,19,19,21,3,3,3,2,23,12,19,12,12,12,12,12,3,5,5,12,12,12,12,12,12,12,2,19,19,19,21,12,12,12,12,1,1,1,12,19,19,19,19,12,1,12,12,19,3,3,24,2,2,24,24,24,24,24,2,24,1,24,24,24,24,2,2,2,24,12,1,1,3,2,2,19,12,12,2,12,12,19,19,19,2,19,19,19,21,19,19,5,5,12,1,1,1,1,1,1,1,12,12,12,2,1,1,1,6,6,12,19,19,19,19,1,1,1,6,13,12,6,19,19,19,19,6,6,6,0,0,12,2,12,12,12,12,12,12,2,6,6,2,2,2,7,-1,-1,2,-1,-1],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"vulkan-test","isMainThread":true,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353001.849467,"resourceTable":{"length":25,"lib":[1,2,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"name":[1,13,15,22,36,56,61,94,99,126,134,139,198,214,220,232,245,257,261,267,287,289,308,1396,1439],"host":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"type":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]},"samples":{"length":3588,"stack":[0,11,33,41,52,52,52,52,52,52,61,67,83,84,85,88,88,88,88,88,88,89,94,95,96,103,84,84,104,104,104,104,104,104,105,106,107,108,110,111,123,125,84,126,127,128,129,134,135,136,108,149,153,168,175,180,183,185,185,185,185,185,185,186,188,207,218,226,242,255,257,259,265,267,271,273,277,281,291,299,309,322,326,335,344,347,361,366,388,396,404,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,423,429,439,455,464,477,490,502,518,538,559,568,574,585,596,598,602,611,617,627,639,654,663,671,685,686,691,696,713,725,743,760,782,790,790,796,798,804,806,807,818,819,820,821,822,823,824,825,826,796,796,827,796,828,828,829,830,831,832,796,833,834,835,834,798,831,836,796,822,830,837,838,820,839,828,796,840,834,841,842,843,822,844,845,820,846,848,804,852,853,822,854,855,856,825,857,820,796,822,836,843,858,859,860,822,796,832,861,846,862,822,866,867,834,868,869,798,822,824,870,796,871,820,823,872,822,796,822,807,834,873,874,834,853,875,876,834,846,832,861,796,834,853,877,878,804,881,853,882,836,837,883,822,842,834,826,867,884,886,887,871,872,796,796,867,837,843,867,888,867,822,834,889,890,867,830,867,820,891,836,836,892,893,822,836,866,894,895,804,896,798,796,796,796,822,877,825,899,877,877,857,836,836,796,806,878,867,876,846,834,796,820,834,796,836,892,834,900,901,836,832,846,902,834,903,862,796,834,820,796,822,905,907,804,908,910,872,804,886,895,866,895,834,842,912,796,834,872,884,857,884,914,857,916,917,852,876,826,866,820,822,918,840,828,927,830,822,867,822,822,842,831,875,820,796,836,928,929,840,836,796,833,930,872,846,804,796,861,905,842,853,931,934,891,936,937,823,834,938,895,836,940,941,824,836,822,822,796,834,820,942,943,875,840,834,944,834,891,945,842,836,887,886,861,848,867,867,905,946,796,947,796,822,877,868,830,948,807,877,798,822,836,867,822,949,835,796,836,931,950,822,861,842,931,832,882,884,854,830,831,875,882,855,846,861,867,829,796,952,853,853,953,905,956,875,831,957,796,873,836,892,958,959,960,820,961,871,796,962,872,826,854,829,836,963,964,836,796,877,830,867,867,967,796,822,968,873,834,970,930,972,822,973,842,895,974,823,975,976,822,830,887,853,825,825,970,796,822,905,820,887,977,820,796,825,875,978,943,979,980,857,981,878,982,983,821,822,822,839,825,834,988,796,840,993,994,834,829,804,819,835,995,999,829,822,798,858,846,820,1000,872,872,826,1005,1006,875,1007,798,855,798,861,1009,868,822,889,836,1010,806,796,876,824,1011,1012,823,796,1013,867,796,834,867,830,887,884,822,1015,1016,822,931,1017,1018,1019,834,796,1020,806,828,796,881,820,822,872,892,820,822,836,820,867,836,1022,1023,1024,889,796,873,836,837,820,836,843,1025,1026,855,877,820,836,834,877,1027,846,836,834,870,834,822,1028,1030,796,1031,875,867,855,872,1032,867,1033,1034,867,834,882,836,820,822,822,836,867,843,834,1035,836,852,834,866,836,822,873,1037,931,873,838,1038,1040,1041,857,873,840,867,796,796,822,820,877,959,796,1042,820,873,804,858,871,1043,824,871,1044,887,1045,834,806,1046,836,822,877,1047,822,884,895,1048,858,836,822,804,1049,828,834,903,872,907,822,796,1050,887,822,796,1051,834,798,822,1052,843,806,874,1053,855,867,1054,1022,1000,822,822,822,796,834,852,837,836,858,1055,858,887,836,895,842,1056,846,867,1058,931,822,828,1059,840,825,806,872,1026,1044,1060,820,1062,943,887,833,820,1063,834,1064,846,872,828,798,1063,822,940,846,874,877,823,842,828,796,878,853,834,836,982,877,806,981,823,867,832,878,796,824,822,1065,840,853,1066,1067,872,861,834,824,867,853,884,822,875,807,818,857,831,905,857,1068,836,895,839,852,905,798,834,959,867,871,840,1069,1070,829,1026,836,1071,796,822,796,828,1072,830,822,796,822,834,834,978,836,796,1073,826,796,818,882,796,828,1074,895,867,878,806,895,857,867,825,1075,862,823,796,1076,871,1063,861,834,834,1035,858,829,1077,857,1078,853,798,1079,826,843,943,831,796,831,895,887,796,796,825,867,1041,1080,819,858,806,1081,970,798,807,853,796,796,826,895,1082,834,848,822,836,807,1084,872,1085,905,1086,867,874,807,796,836,871,1074,871,916,821,832,884,804,798,940,825,861,824,905,857,1087,1088,872,824,1089,1049,830,843,834,796,804,892,872,829,1091,1092,831,798,858,820,1093,820,830,912,857,822,834,959,857,875,806,872,822,798,938,836,822,836,1056,867,836,1094,892,796,855,834,889,822,1095,895,1096,1049,823,1097,836,1098,834,822,846,982,853,1049,822,820,884,834,834,846,905,820,1099,1100,796,1101,1031,1102,857,877,884,822,887,796,834,796,853,855,804,806,796,807,1044,806,822,1103,840,820,1104,1105,822,854,1066,834,1049,822,875,822,1000,857,1011,1106,796,892,822,873,1107,1105,1108,1109,867,822,1086,1110,834,852,822,1059,857,840,1112,836,846,871,796,871,836,871,834,822,826,806,796,798,883,848,884,853,822,825,895,867,855,796,836,796,837,820,914,964,862,870,895,867,1113,840,836,821,1114,822,825,796,830,823,834,882,796,798,931,1105,828,1017,931,905,895,1115,861,853,796,846,798,822,905,871,822,822,798,804,828,823,832,1116,832,807,796,1000,1050,1117,798,834,796,871,798,1113,887,999,901,867,796,1118,822,1119,796,1120,846,796,1121,832,820,895,1122,1123,796,822,952,858,834,840,862,857,822,895,822,1124,858,826,848,929,875,822,798,836,843,1125,878,843,838,834,846,892,822,822,873,848,876,834,834,826,1118,834,846,1041,852,834,796,835,798,867,806,1050,796,882,1074,861,830,1126,820,820,861,822,796,872,828,830,867,822,834,1127,1030,821,836,852,834,1128,1129,873,1104,846,895,1056,853,796,826,822,1130,877,862,822,1131,1026,1063,950,796,1132,1056,1133,858,1134,907,1074,959,853,796,867,857,832,968,874,848,1135,882,822,796,881,828,804,836,834,874,796,834,867,796,822,1136,1137,857,883,838,830,1006,887,848,884,825,1138,820,870,843,994,868,1139,875,1140,842,1058,881,872,796,822,798,840,1131,796,822,931,796,820,804,1141,840,858,1052,867,834,823,867,834,901,1044,798,807,882,968,980,834,830,828,1143,836,884,868,1058,832,834,1144,806,916,828,1145,1146,822,1000,855,1148,796,820,804,887,824,1150,820,822,843,1152,834,822,882,820,895,822,804,836,806,830,1108,835,796,983,870,834,820,929,861,840,894,825,1153,882,834,1154,871,821,1136,862,1155,887,871,900,828,884,846,867,806,830,931,796,1049,970,821,929,1156,1157,959,824,798,1158,834,1160,807,796,1108,834,796,831,874,855,877,884,1085,1161,843,834,823,831,878,855,1032,867,866,836,822,1162,1163,822,1138,855,820,822,852,1131,836,871,804,834,796,887,822,892,878,822,1054,820,852,807,836,1030,1164,843,1166,807,1168,842,875,824,884,806,796,1075,876,858,836,875,1105,866,1169,870,796,1170,834,843,836,871,867,882,830,1171,796,842,859,836,836,828,882,804,834,1172,1058,873,1032,1032,807,828,796,834,1173,1128,859,853,867,843,829,1056,848,804,822,823,842,798,1049,875,872,831,832,1174,855,1175,870,834,1176,1177,973,807,834,892,1178,830,1012,931,832,1179,854,822,1180,1181,848,834,1182,887,828,843,1063,1183,1056,858,833,930,833,1012,834,873,822,830,1184,1153,804,824,959,1185,832,1186,1173,853,945,853,1164,829,974,855,1172,853,1075,828,830,843,825,1187,843,1172,1153,1187,853,853,930,828,853,820,1153,872,853,1164,840,1188,884,1187,807,823,834,827,798,882,798,1153,1178,872,834,1189,798,804,1190,856,1191,964,1188,1193,796,964,825,1194,872,1196,1173,1197,1198,1199,822,884,999,1200,1189,1060,1201,1189,1185,1184,833,1202,1203,835,834,796,1153,974,974,1189,1153,995,1204,848,1205,825,822,1206,872,828,834,830,1207,1138,830,835,974,1188,895,905,1012,1153,1173,826,822,1173,796,848,891,908,1208,824,828,867,1185,848,873,848,804,881,872,807,1189,1049,824,1178,1209,1210,1051,822,1211,1049,875,853,843,1212,822,834,1213,1214,886,1189,1178,834,875,872,895,1178,848,1215,804,1164,1188,999,1200,1203,1216,931,796,1017,895,822,830,796,974,1010,822,942,1189,901,820,1012,796,835,892,822,826,822,1075,867,974,1217,1178,835,834,974,827,1189,1012,1108,931,1108,796,1218,825,830,822,1188,842,1203,1219,1220,835,1203,1216,887,832,872,1221,836,889,1222,1056,807,830,905,1203,1153,830,829,892,895,1188,1178,836,1222,1204,1223,1173,871,1198,1188,834,1224,1184,807,848,796,895,824,829,834,1225,1131,1226,855,1138,1204,823,878,854,842,853,895,867,871,1203,1227,1189,1216,892,835,1056,1173,884,873,828,833,974,1228,830,1178,820,807,931,1199,796,1189,830,1000,1199,869,974,1012,822,834,887,1229,796,1010,830,892,1012,1187,1184,862,1075,834,825,1092,1135,867,873,806,1017,1178,853,824,796,871,1230,1164,931,1188,872,828,1216,1201,1063,828,832,1172,1188,1193,804,970,1231,825,1216,806,830,834,1232,1164,1172,1222,1064,1233,796,1234,1235,873,892,798,796,834,1219,1049,861,1236,871,825,1153,1237,1216,843,830,796,1216,974,931,1172,882,1238,857,1121,1164,1187,1200,822,1219,843,1118,878,858,853,1153,1239,1185,1056,1240,857,1222,944,1188,826,1189,855,884,1153,843,825,882,807,1204,796,828,855,892,798,830,974,855,1153,861,1063,1241,1188,823,1189,1222,931,875,828,884,881,1242,878,1153,1243,1189,1243,1012,866,882,842,887,822,974,1075,892,1012,828,820,853,1178,1178,1116,798,1056,1200,1216,1244,1245,1058,895,828,1066,853,882,873,831,1216,1012,973,974,822,822,858,843,1153,875,1138,1247,1153,1228,1248,1249,842,1250,796,823,854,1216,1012,892,796,1251,1252,1012,1189,834,822,1255,1256,1242,1257,872,1085,1204,1216,822,1188,1164,892,974,834,1258,804,1260,1189,854,804,1153,798,868,1266,1283,1294,1310,790,1012,967,1164,1311,872,1312,798,834,834,1208,872,883,1216,1197,834,1233,830,1184,1153,1153,959,843,873,974,832,1178,1153,1189,1153,878,1313,829,1314,796,836,829,1316,873,858,804,1085,834,826,881,1178,826,824,796,1317,931,867,878,1257,1318,1319,834,1318,1188,855,806,1026,1320,834,1321,888,796,1322,807,855,930,974,964,1108,822,1188,1323,822,974,855,1321,1324,974,974,895,1224,1325,974,1012,1153,1081,1012,882,1153,822,804,798,1186,825,869,834,1201,1326,807,1248,828,824,1327,999,1116,942,1325,829,1193,1056,848,826,855,1056,941,1188,1010,853,960,1153,1203,804,892,846,1049,857,828,853,1122,884,829,822,843,1328,882,1200,830,974,1329,821,878,1330,1056,832,832,1153,974,1216,1248,1216,905,1204,1188,945,1200,826,873,1248,1331,1188,824,834,931,881,839,931,1332,882,1187,822,974,931,856,1228,1056,873,830,1188,834,796,1319,1328,820,868,796,1333,857,1184,853,1178,1329,1136,822,1108,826,1334,796,1201,878,1201,1189,1049,1335,828,1336,831,1333,1337,822,806,959,1338,1188,848,905,804,834,798,1328,887,1185,1012,1191,1138,1197,1339,905,981,1340,1189,1060,854,834,855,1341,848,881,1342,884,796,1138,1187,796,1343,1056,822,804,866,1344,1188,834,1328,848,892,942,1252,834,1345,1346,866,842,853,1012,1188,1085,871,1178,840,1166,804,1203,1347,824,1030,1153,821,806,1056,796,1216,1348,829,1193,1100,1319,1248,1178,843,830,1342,1164,1350,884,1172,1017,858,931,1178,1153,1185,1173,1351,884,1030,846,1188,1352,1356,995,974,1178,1357,873,1116,1358,1232,1359,1118,842,853,843,1313,1178,1242,829,1154,931,833,872,825,1056,1173,1223,829,959,798,1360,1203,871,1189,995,1221,981,804,1178,1188,1361,823,1154,824,1056,974,842,822,1218,905,1190,895,796,853,1362,806,873,979,796,796,857,1363,1105,978,875,1218,1056,895,834,796,1364,1049,832,829,807,974,1216,832,824,884,1185,1228,875,807,828,905,931,1106,974,828,846,828,825,1313,1216,1187,843,1365,930,1066,959,974,881,1366,1216,1188,798,822,826,1206,1346,1199,1216,1153,823,931,895,1367,889,1178,1113,824,895,1056,848,1131,873,1346,796,804,1188,1138,804,822,832,1153,848,1211,1216,1085,1124,1368,855,796,1369,1178,974,1370,804,905,1372,1228,853,1184,1153,853,1185,843,1373,1374,1173,853,870,1026,1368,832,945,833,1216,834,1375,848,967,1376,1138,1216,884,806,892,974,974,1178,835,1216,940,1178,1377,796,836,1173,995,848,1378,903,1184,1056,830,1153,832,1379,887,978,943,1056,1118,806,892,836,1216,796,884,1178,852,836,1348,855,1059,1240,804,1248,974,1153,834,1200,881,1362,1204,852,830,1236,1380,875,855,884,1189,1189,804,826,892,804,855,1172,884,820,843,1216,887,1198,829,974,1197,1153,1187,1381,1153,796,1153,1382,1230,796,829,1203,1097,1153,1383,1049,1189,839,1384,825,1153,1385,1189,1210,1200,1386,1216,1024,1199,1216,1177,833,1216,825,1178,828,1199,823,1164,1199,1311,1164,867,855,1173,822,1153,857,833,901,1314,796,970,1256,1153,1216,1173,861,1188,829,1189,846,1053,822,822,930,804,974,887,1185,867,1153,872,931,848,1050,892,1216,1387,842,873,796,1153,1388,877,822,1188,892,822,1321,853,892,1390,1085,848,1049,1108,931,872,830,1188,873,830,828,1185,974,1359,824,804,1056,960,798,807,796,901,1391,804,1060,858,1199,1189,1065,1248,853,1385,884,974,1011,822,1216,1153,1216,1392,855,821,1153,830,999,798,853,1108,825,798,830,1219,1012,857,942,830,1393,895,1257,945,1187,981,836,1394,974,826,1206,830,1216,1395,931,1166,857,828,914,1026,1388,1377,1396,1058,826,905,833,1049,862,871,832,1178,1184,905,1397,826,822,1203,1200,884,1102,887,834,1153,1189,1228,836,1049,941,798,1199,1189,895,931,822,1075,974,1153,1399,804,1216,1379,1121,855,804,820,945,878,855,1012,854,1172,822,1131,931,1400,1216,1172,1063,1401,1203,842,853,823,832,1402,1248,836,857,839,1403,881,895,1228,1203,1012,1404,1017,884,1216,931,858,1405,1406,826,1049,1153,974,796,824,798,1407,1408,1222,1236,834,872,895,829,1189,843,848,1058,1173,1409,873,1172,1185,1049,796,974,1012,1325,1184,959,1204,1012,834,995,862,862,853,1188,1410,1187,1392,826,1411,1403,796,1108,1189,1243,804,974,1412,870,798,842,873,1178,796,855,804,1103,1121,973,1188,828,1012,1413,1184,881,822,855,892,1414,1188,830,1184,1219,834,1333,1060,1049,804,882,1415,1388,1200,862,1216,1328,1416,828,1108,892,1012,1212,858,1188,1228,1188,796,1012,842,852,892,883,1172,1012,1184,1012,833,1012,1058,1204,828,1060,858,796,1248,804,834,834,853,861,1422,1328,798,878,824,1178,1423,1241,829,796,1178,1056,796,1200,822,1164,1153,884,931,1424,1392,1216,834,857,1425,872,872,855,1049,822,895,836,1178,1426,798,1184,830,977,822,831,1216,1427,828,905,834,1428,804,1010,873,796,1429,981,1430,1184,836,826,1093,1431,1433,798,968,1434,1178,1153,884,905,1178,796,828,1138,1248,855,974,1063,1108,858,1436,867,873,1172,873,1056,853,830,853,895,1012,836,1199,832,807,1153,829,796,872,1248,1189,1203,1153,1058,857,1401,895,823,901,1188,973,853,1056,1210,867,1200,833,940,842,1425,834,1189,884,981,1437,1189,798,1188,1138,798,834,834,1012,1438,843,796,872,892,828,1189,1153,1188,832,892,882,1439,974,1429,1189,1153,1178,1328,1056,855,1184,1210,895,866,872,826,1441,857,964,1075,1442,1433,872,1200,1173,1443,1394,822,834,829,834,822,1010,1189,1444,1378,825,859,1445,1178,798,825,834,1216,822,878,822,1178,858,1172,1049,1392,1216,1216,931,821,867,830,1108,1233,1164,1446,1189,807,1232,822,823,826,853,798,1447,1010,868,1173,1448,869,1027,1248,942,1449,1219,1026,826,1450,895,830,1451,1173,941,1452,1248,1189,832,1216,1444,796,1216,826,843,1153,959,873,878,822,1173,878,1153,804,853,798,1173,1453,1454,822,836,1189,1056,872,1185,882,884,852,974,1153,822,1204,843,855,1216,1056,796,1385,854,1236,892,873,823,807,1455,1189,884,872,1464,1476,1485,1495,1501,1504,1511,1520,1527,1535,1550,1567,1568,1571,1575,1579,1585,1591,1595,1599,1601,1616,1626,1633,1636,1640,1642,1643,1647,1648,1651,1652,1657,1660,1585,1585,1662,1664,1599,1670,1672,1673,1676,1678,1682,1684,1686,1652,1692,1585,1698,1702,1710,1715,1717,1550,1723,1730,1732,1585,1737,1741,1743,1550,1746,1750,1751,1753,1756,1762,1769,1770,1775,1776,1778,1550,1779,1782,1785,1788,1791,1794,1795,1800,1804,1805,1808,1816,1550,1818,1819,1820,1821,1822,1672,1652,1826,1832,1833,1769,1835,1837,1842,1844,1851,1585,1852,1858,1863,1864,1868,1652,1873,1876,1880,1885,1886,1892,1585,1894,1550,1896,1904,1906,1585,1911,1912,1917,1923,1925,1931,1934,1923,1938,1939,1940,1945,1945,1652,1946,1550,1686,1951,1952,1956,1571,1962,1550,1968,1686,1550,1970,1599,1971,1770,1973,1974,1550,1988,1998,2008,2020,2020,2034,2049,2054,2057,2067,2071,2074,2077],"time":[7353001.884843,7353002.546294,7353004.048839,7353005.341767,7353007.1034,7353007.11424,7353007.121223,7353007.128196,7353007.134718,7353007.14107,7353007.181043,7353014.829157,7353023.55973,7353025.903489,7353027.92915,7353029.129967,7353029.147289,7353029.156967,7353029.165844,7353029.176103,7353029.187644,7353029.210556,7353029.398413,7353030.526817,7353031.511375,7353032.458985,7353033.415241,7353034.382637,7353035.137582,7353035.154784,7353035.164241,7353035.173067,7353035.182665,7353035.191712,7353035.215325,7353035.467631,7353036.796515,7353037.956588,7353039.042072,7353040.095277,7353041.130259,7353042.156604,7353043.175566,7353044.190119,7353045.198311,7353046.213967,7353047.231927,7353048.234278,7353049.235237,7353050.234151,7353051.233887,7353052.230027,7353053.22832,7353054.226504,7353055.232862,7353056.25484,7353057.264144,7353058.06356,7353058.074039,7353058.082585,7353058.089969,7353058.096812,7353058.112841,7353058.148727,7353058.410621,7353060.559359,7353061.993628,7353063.376512,7353064.627722,7353065.811779,7353066.94395,7353068.015048,7353070.39867,7353071.273686,7353072.157879,7353073.077427,7353074.10261,7353075.047966,7353075.99813,7353076.948616,7353078.052094,7353079.015903,7353079.971017,7353080.927985,7353081.898727,7353082.877034,7353083.85505,7353086.070792,7353087.268304,7353088.141156,7353088.962652,7353089.688273,7353089.71931,7353089.74639,7353089.768922,7353089.789239,7353089.81153,7353089.835364,7353089.857585,7353089.900474,7353090.00107,7353090.025966,7353090.047877,7353090.063856,7353090.088101,7353090.108338,7353090.12558,7353090.150606,7353090.317785,7353090.332072,7353090.340788,7353090.350706,7353090.365714,7353090.383637,7353090.41243,7353090.562968,7353090.573678,7353090.581923,7353090.590579,7353090.599465,7353090.608642,7353090.73704,7353090.751957,7353090.763028,7353090.776272,7353090.786691,7353090.797982,7353090.815845,7353090.888619,7353090.956194,7353090.969569,7353090.978135,7353090.986881,7353090.994525,7353091.002159,7353091.02995,7353091.073842,7353091.084331,7353091.091995,7353091.099409,7353091.106522,7353091.113705,7353091.190066,7353091.202168,7353091.214742,7353091.225752,7353091.235199,7353091.244847,7353091.269132,7353091.314065,7353091.32743,7353091.336216,7353091.344682,7353091.352887,7353091.361262,7353091.400515,7353091.409481,7353091.417757,7353091.42503,7353091.433335,7353091.440539,7353091.528932,7353091.543298,7353091.554218,7353091.564948,7353091.575638,7353091.585476,7353091.607046,7353091.767502,7353092.502299,7353093.673031,7353094.838714,7353106.698396,7353108.486247,7353109.997829,7353112.741536,7353113.747373,7353114.761757,7353115.742237,7353116.719061,7353117.705212,7353118.695121,7353119.682795,7353120.67681,7353121.168218,7353121.672449,7353122.210663,7353122.811052,7353123.362139,7353123.86592,7353124.698016,7353125.695649,7353126.695245,7353127.690994,7353128.690139,7353131.014742,7353132.51348,7353133.538142,7353134.513393,7353135.496038,7353136.474044,7353137.461227,7353138.451085,7353139.43927,7353140.435149,7353141.439624,7353142.433018,7353143.427154,7353144.422222,7353145.419533,7353146.415733,7353147.414898,7353148.411058,7353149.408029,7353150.40505,7353151.405368,7353152.404052,7353153.402536,7353154.401351,7353155.415283,7353156.458349,7353157.461893,7353158.448996,7353159.438503,7353160.4281,7353161.420573,7353162.41526,7353163.411861,7353164.409303,7353165.407206,7353166.404668,7353167.402871,7353168.40382,7353169.404728,7353170.403162,7353171.400774,7353172.419275,7353173.457953,7353174.449214,7353175.435345,7353176.424492,7353177.416884,7353178.412232,7353179.410646,7353180.406485,7353181.403086,7353182.400147,7353183.39788,7353184.413104,7353185.441223,7353186.463231,7353187.499264,7353188.5152,7353189.536636,7353190.541582,7353191.510121,7353192.480262,7353193.457357,7353194.440663,7353195.429729,7353196.42105,7353197.414545,7353198.408981,7353199.405341,7353200.404877,7353201.403581,7353202.416762,7353203.444681,7353204.465486,7353205.492202,7353206.51434,7353207.519426,7353208.521556,7353209.522295,7353210.523163,7353211.52351,7353212.524359,7353213.524726,7353214.524492,7353215.525291,7353216.525007,7353217.525013,7353218.526012,7353219.528553,7353220.527949,7353221.526653,7353222.534314,7353223.540663,7353224.538896,7353225.536659,7353226.5339,7353227.531453,7353228.530047,7353229.528851,7353230.528417,7353231.527452,7353232.526347,7353233.526814,7353234.527573,7353235.526618,7353236.526404,7353237.525549,7353238.524805,7353239.530091,7353240.53139,7353241.530726,7353242.530191,7353243.529276,7353244.52775,7353245.528188,7353246.527123,7353247.526438,7353248.525794,7353249.52573,7353250.540865,7353251.540601,7353252.53633,7353253.535305,7353254.532507,7353255.548132,7353256.569689,7353257.561891,7353258.55218,7353259.544272,7353260.538969,7353261.534938,7353262.532661,7353263.530443,7353264.528987,7353265.527662,7353266.527137,7353267.526593,7353268.525508,7353269.525505,7353270.525051,7353271.524406,7353272.529783,7353273.531473,7353274.529967,7353275.529663,7353276.528237,7353277.527883,7353278.52837,7353279.527696,7353280.526971,7353281.526036,7353282.526173,7353283.525399,7353284.525215,7353285.525242,7353286.524788,7353287.524103,7353288.530622,7353289.532262,7353290.537999,7353291.538316,7353292.540167,7353293.541155,7353294.538737,7353295.535829,7353296.53303,7353297.530823,7353298.529588,7353299.528593,7353300.528098,7353301.528045,7353302.526729,7353303.526215,7353304.527694,7353305.534514,7353306.535873,7353307.534477,7353308.534775,7353309.532908,7353310.53057,7353311.528533,7353312.5284,7353313.527835,7353314.52677,7353315.526837,7353316.526233,7353317.525648,7353318.524994,7353319.525331,7353320.524296,7353321.534031,7353322.541481,7353323.539234,7353324.53916,7353325.537063,7353326.533944,7353327.532869,7353328.53499,7353329.534055,7353330.531817,7353331.530692,7353332.529086,7353333.52799,7353334.528067,7353335.527102,7353336.526257,7353337.526144,7353338.530789,7353339.533771,7353340.535201,7353341.535548,7353342.53301,7353343.530773,7353344.529137,7353345.528512,7353346.527657,7353347.527514,7353348.526469,7353349.525754,7353350.524959,7353351.524696,7353352.524292,7353353.523908,7353354.529545,7353355.542525,7353356.542492,7353357.538051,7353358.53414,7353359.531522,7353360.530036,7353361.529943,7353362.529539,7353363.528363,7353364.527719,7353365.527114,7353366.525999,7353367.525355,7353368.525091,7353369.524336,7353370.533249,7353371.538005,7353372.536068,7353373.538269,7353374.53504,7353375.532101,7353376.529784,7353377.530071,7353378.53126,7353379.529804,7353380.52973,7353381.528174,7353382.526748,7353383.525893,7353384.525189,7353385.524154,7353386.52412,7353387.534216,7353388.537238,7353389.53471,7353390.531481,7353391.529764,7353392.527637,7353393.526241,7353394.526038,7353395.526566,7353396.527003,7353397.526228,7353398.525604,7353399.525691,7353400.525096,7353401.524282,7353402.523858,7353403.52682,7353404.536915,7353405.536171,7353406.532911,7353407.536986,7353408.533937,7353409.530728,7353410.52867,7353411.527225,7353412.527151,7353413.52829,7353414.527165,7353415.525719,7353416.524954,7353417.523719,7353418.523645,7353419.523251,7353420.522557,7353421.533614,7353422.537057,7353423.534679,7353424.531751,7353425.529864,7353426.528338,7353427.528675,7353428.529674,7353429.529229,7353430.528204,7353431.526388,7353432.525182,7353433.202122,7353433.709049,7353434.218319,7353434.820781,7353435.288886,7353435.747303,7353436.271982,7353436.919888,7353437.651129,7353438.471474,7353439.326683,7353440.220534,7353441.141605,7353442.083885,7353443.042515,7353444.012486,7353444.991574,7353445.971765,7353446.959589,7353447.949026,7353448.94216,7353449.936627,7353450.932676,7353451.929988,7353452.924775,7353453.922618,7353454.932853,7353455.934343,7353456.935362,7353457.948673,7353458.944001,7353459.937716,7353460.933535,7353461.93238,7353462.925884,7353463.922895,7353464.920147,7353465.918241,7353466.916925,7353467.91634,7353468.915115,7353469.915062,7353470.916641,7353471.924302,7353472.924579,7353473.923474,7353474.920195,7353475.918248,7353476.916201,7353477.915276,7353478.915984,7353479.915299,7353480.913954,7353481.91387,7353482.912975,7353483.91212,7353484.911135,7353485.910441,7353486.910227,7353487.917127,7353488.926431,7353489.924113,7353490.936573,7353491.932632,7353492.929132,7353493.922707,7353494.919348,7353495.91664,7353496.915765,7353497.91499,7353498.914666,7353499.914432,7353500.913217,7353501.912142,7353502.911537,7353503.911063,7353504.923483,7353505.926074,7353506.924658,7353507.928232,7353508.928479,7353509.158594,7353509.713609,7353510.270497,7353510.793463,7353512.141433,7353513.459567,7353514.390747,7353515.305466,7353516.238138,7353517.189275,7353518.156321,7353519.129738,7353520.11087,7353521.103974,7353522.097919,7353523.092436,7353524.084298,7353525.077953,7353526.07278,7353527.068509,7353528.068085,7353529.068051,7353530.065804,7353531.064198,7353532.063744,7353533.064221,7353534.062675,7353535.061309,7353536.060525,7353537.065511,7353538.070376,7353539.070764,7353540.075259,7353541.073592,7353542.072016,7353543.071783,7353544.070187,7353545.06831,7353546.067265,7353547.067632,7353548.06817,7353549.070711,7353550.068594,7353551.070143,7353552.070711,7353553.069486,7353554.069342,7353555.082133,7353556.081909,7353557.077227,7353558.074298,7353559.070789,7353560.06755,7353561.065863,7353562.064828,7353563.065917,7353564.065432,7353565.084575,7353566.08365,7353567.077785,7353568.072603,7353569.069013,7353570.083536,7353571.085757,7353572.08342,7353573.08,7353574.079436,7353575.076968,7353576.071535,7353577.068275,7353578.069044,7353579.070403,7353580.07086,7353581.069444,7353582.06855,7353583.068296,7353584.069685,7353585.068239,7353586.065691,7353587.064345,7353588.069251,7353589.080519,7353590.079223,7353591.0793,7353592.077634,7353593.076588,7353594.076585,7353595.077995,7353596.077049,7353597.076155,7353598.076011,7353599.074425,7353600.073841,7353601.074288,7353602.073353,7353603.071216,7353604.069389,7353605.071751,7353606.075995,7353607.079368,7353608.077401,7353609.075224,7353610.072786,7353611.07145,7353612.072168,7353613.071484,7353614.072392,7353615.072619,7353616.074029,7353617.072713,7353618.071237,7353619.06918,7353620.067333,7353621.069955,7353622.082845,7353623.082161,7353624.078792,7353625.081954,7353626.082331,7353627.078451,7353628.076414,7353629.073666,7353630.071729,7353631.072026,7353632.069819,7353633.068313,7353634.100659,7353635.101517,7353636.094902,7353637.087696,7353638.094475,7353639.102066,7353640.094118,7353641.088273,7353642.08262,7353643.077507,7353644.07544,7353645.073944,7353646.071787,7353647.071122,7353648.070368,7353649.071557,7353650.071824,7353651.074485,7353651.603432,7353652.198311,7353652.778412,7353653.415178,7353654.142271,7353654.943851,7353655.869851,7353656.727435,7353657.597522,7353658.498576,7353659.436197,7353660.411148,7353661.396688,7353662.488164,7353663.555855,7353664.519395,7353665.482002,7353666.456422,7353667.756944,7353669.258226,7353670.173887,7353671.067788,7353671.998567,7353672.934525,7353673.878108,7353674.833662,7353675.800748,7353676.776761,7353677.760728,7353678.749314,7353679.741115,7353680.734319,7353681.729127,7353682.724775,7353683.722297,7353684.72008,7353685.797419,7353686.796995,7353687.77931,7353688.792491,7353689.790684,7353690.776364,7353691.764369,7353692.752233,7353693.742552,7353694.735526,7353695.731515,7353696.728186,7353697.725508,7353698.739049,7353699.737643,7353700.73181,7353701.726045,7353702.721784,7353703.718645,7353704.72322,7353705.729549,7353706.727762,7353707.723441,7353708.719621,7353709.717203,7353710.715417,7353711.714321,7353712.714528,7353713.714104,7353714.71378,7353715.713176,7353716.712482,7353717.711456,7353718.710712,7353719.709837,7353720.712418,7353721.719929,7353722.720908,7353723.719642,7353724.722754,7353725.721068,7353726.718841,7353727.716543,7353728.719505,7353729.721326,7353730.719479,7353731.717602,7353732.716587,7353733.714971,7353734.713164,7353735.711578,7353736.710593,7353737.715308,7353738.725844,7353739.728126,7353740.724135,7353741.719783,7353742.716875,7353743.714557,7353744.713763,7353745.714771,7353746.714067,7353747.71255,7353748.711896,7353749.71071,7353750.709715,7353751.709512,7353752.709358,7353753.708844,7353754.714682,7353755.717684,7353756.716769,7353757.714952,7353758.71519,7353759.713463,7353760.711797,7353761.712495,7353762.72824,7353763.728488,7353764.724497,7353765.721989,7353766.719211,7353767.717114,7353768.715137,7353769.713791,7353770.716473,7353771.742007,7353772.748355,7353773.740668,7353774.734122,7353775.727827,7353776.724458,7353777.72186,7353778.719131,7353779.716093,7353780.713945,7353781.712319,7353782.711084,7353783.710089,7353784.709494,7353785.70889,7353786.708816,7353787.716417,7353788.719329,7353789.721069,7353790.721417,7353791.718658,7353792.71612,7353793.714584,7353794.71397,7353795.713435,7353796.712701,7353797.712217,7353798.711192,7353799.710627,7353800.710073,7353801.709358,7353802.708604,7353803.70832,7353804.713897,7353805.718863,7353806.718088,7353807.716031,7353808.714435,7353809.651626,7353810.592834,7353811.158739,7353811.750412,7353812.399621,7353813.140589,7353813.955323,7353814.808058,7353815.698302,7353816.618983,7353817.561623,7353818.520654,7353819.387916,7353820.225112,7353820.749951,7353821.297553,7353821.942323,7353822.649309,7353823.433046,7353824.280652,7353825.16772,7353826.084914,7353826.447323,7353827.787748,7353828.717235,7353829.607028,7353830.530003,7353831.458287,7353832.403673,7353833.364377,7353834.336031,7353835.31563,7353836.300459,7353837.289776,7353838.311733,7353839.318543,7353840.307148,7353841.296766,7353842.287876,7353843.280439,7353844.308688,7353845.303015,7353846.29155,7353847.28269,7353848.276887,7353849.272355,7353850.268985,7353851.266908,7353852.265402,7353853.263435,7353854.26754,7353855.301209,7353856.297067,7353857.290372,7353858.283446,7353859.276359,7353860.270255,7353861.295048,7353862.290576,7353863.28363,7353864.276113,7353865.269838,7353866.266528,7353867.263059,7353868.260962,7353869.258774,7353870.262558,7353871.285968,7353872.300051,7353873.291562,7353874.284035,7353875.276368,7353876.270383,7353877.300666,7353878.298549,7353879.287886,7353880.280479,7353881.273623,7353882.26836,7353883.265231,7353884.261691,7353885.259934,7353886.257907,7353887.257043,7353888.280342,7353889.281772,7353890.275958,7353891.272548,7353892.267766,7353893.276068,7353894.305499,7353895.29682,7353896.285396,7353897.277327,7353898.271012,7353899.26596,7353900.263001,7353901.260593,7353902.258586,7353903.257231,7353904.259682,7353905.277482,7353906.274022,7353907.271354,7353908.267093,7353909.263853,7353910.261115,7353911.288061,7353912.28374,7353913.277986,7353914.27095,7353915.266619,7353916.265995,7353917.268245,7353918.266008,7353919.263179,7353920.260521,7353921.753829,7353922.757262,7353923.75243,7353924.749682,7353925.743126,7353926.739156,7353927.736367,7353928.734731,7353929.732634,7353930.731809,7353931.730413,7353932.729568,7353933.730447,7353934.730363,7353935.730531,7353936.730788,7353937.73386,7353938.742813,7353939.741267,7353940.740533,7353941.738135,7353942.736569,7353943.734241,7353944.733246,7353945.732561,7353946.732558,7353947.732886,7353948.733093,7353949.732949,7353950.732275,7353951.73124,7353952.730755,7353953.72959,7353954.75844,7353955.767864,7353956.761208,7353957.754523,7353958.7494,7353959.741693,7353960.739505,7353961.741395,7353962.738086,7353963.735087,7353964.73296,7353965.731083,7353966.730539,7353967.729695,7353968.730062,7353969.729237,7353970.731829,7353971.753696,7353972.755135,7353973.749532,7353974.7451,7353975.740448,7353976.73787,7353977.735001,7353978.733435,7353979.73197,7353980.731015,7353981.729739,7353982.728954,7353983.727879,7353984.727385,7353985.727051,7353986.726877,7353987.733226,7353988.744413,7353989.743308,7353990.741561,7353991.738713,7353992.735744,7353993.733006,7353994.73152,7353995.730615,7353996.729249,7353997.728324,7353998.72778,7353999.727346,7354000.727523,7354001.72798,7354002.728208,7354003.728966,7354004.741015,7354005.750319,7354006.746268,7354007.741706,7354008.738958,7354009.735929,7354010.733721,7354011.732306,7354012.731411,7354013.730556,7354014.72938,7354015.728736,7354016.728663,7354017.72879,7354018.748803,7354019.747337,7354020.743607,7354021.749976,7354022.747367,7354023.742465,7354024.738014,7354025.734794,7354026.732317,7354027.730791,7354028.730517,7354029.729812,7354030.729088,7354031.728173,7354032.728129,7354033.728938,7354034.728464,7354035.727919,7354036.727876,7354037.732581,7354038.741925,7354039.739828,7354040.736759,7354041.733821,7354042.731794,7354043.730087,7354044.728952,7354045.728949,7354046.728424,7354047.727479,7354048.726755,7354049.72623,7354050.726327,7354051.726164,7354052.72615,7354053.727029,7354054.743296,7354055.755825,7354056.750883,7354057.746712,7354058.739756,7354059.735916,7354060.735933,7354061.73651,7354062.734223,7354063.732046,7354064.73072,7354065.729324,7354066.728499,7354067.727815,7354068.72716,7354069.727137,7354070.727705,7354071.739012,7354072.740011,7354073.737243,7354074.735266,7354075.732958,7354076.731112,7354077.729896,7354078.729692,7354079.728737,7354080.728173,7354081.727318,7354082.741491,7354083.742299,7354084.738339,7354085.735821,7354086.733293,7354087.735744,7354088.739658,7354089.739044,7354090.736065,7354091.733266,7354092.731139,7354093.729533,7354094.728768,7354095.728475,7354096.728281,7354097.727586,7354098.727002,7354099.726578,7354100.726144,7354101.72602,7354102.726408,7354103.726134,7354104.73126,7354105.740725,7354106.740601,7354107.738935,7354108.735555,7354109.732807,7354110.732934,7354111.734343,7354112.732256,7354113.7307,7354114.729334,7354115.728129,7354116.727785,7354117.727241,7354118.727478,7354119.727284,7354120.727281,7354121.732537,7354122.733646,7354123.731839,7354124.731415,7354125.729929,7354126.728594,7354127.72823,7354128.728707,7354129.729495,7354130.72841,7354131.727645,7354132.727362,7354133.726858,7354134.727215,7354135.726951,7354136.726197,7354137.727305,7354138.73724,7354139.739181,7354140.736392,7354141.733424,7354142.731206,7354143.72972,7354144.729066,7354145.728632,7354146.727977,7354147.726992,7354148.726107,7354149.727276,7354150.727113,7354151.72734,7354152.726996,7354153.726181,7354154.737919,7354155.744879,7354156.74143,7354157.7434,7354158.737616,7354159.734036,7354160.734203,7354161.735773,7354162.733786,7354163.731358,7354164.729471,7354165.728246,7354166.727301,7354167.727207,7354168.726873,7354169.726049,7354170.727217,7354171.739627,7354172.740165,7354173.737006,7354174.734017,7354175.731519,7354176.729562,7354177.728196,7354178.728504,7354179.727449,7354180.726894,7354181.72656,7354182.725896,7354183.726353,7354184.72606,7354185.725906,7354186.725412,7354187.730578,7354188.73855,7354189.736993,7354190.734185,7354191.731707,7354192.730692,7354193.729366,7354194.728612,7354195.728398,7354196.727744,7354197.727259,7354198.726806,7354199.726662,7354200.726759,7354201.726265,7354202.726361,7354203.727831,7354204.738538,7354205.749975,7354206.745704,7354207.742395,7354208.738785,7354209.735185,7354210.744659,7354211.745598,7354212.741737,7354213.736935,7354214.733395,7354215.730727,7354216.729782,7354217.728737,7354218.727822,7354219.727097,7354220.727104,7354221.736859,7354222.73949,7354223.736672,7354224.733814,7354225.731336,7354226.729569,7354227.728574,7354228.727859,7354229.727566,7354230.728244,7354231.727519,7354232.727245,7354233.726811,7354234.726437,7354235.725873,7354236.725389,7354237.728832,7354238.738236,7354239.740427,7354240.737057,7354241.733608,7354242.73134,7354243.729594,7354244.728368,7354245.728736,7354246.727811,7354247.726916,7354248.726171,7354249.726569,7354250.726385,7354251.725881,7354252.725166,7354253.724592,7354254.73091,7354255.736417,7354256.736404,7354257.734677,7354258.7323,7354259.730063,7354260.729228,7354261.73208,7354262.732567,7354263.732904,7354264.731469,7354265.732828,7354266.74125,7354267.740115,7354268.739871,7354269.738756,7354270.738161,7354271.73897,7354272.736843,7354273.735126,7354274.735183,7354275.73507,7354276.734295,7354278.554196,7354279.557819,7354280.530786,7354281.505286,7354282.486858,7354283.472639,7354284.462777,7354285.4551,7354286.449536,7354287.445505,7354288.453317,7354289.449877,7354290.44807,7354291.444942,7354292.441752,7354293.439455,7354294.439131,7354295.440059,7354296.439795,7354297.437929,7354298.436373,7354299.435748,7354300.434873,7354301.434109,7354302.433464,7354303.43298,7354304.43441,7354305.439055,7354306.439843,7354307.439489,7354308.437562,7354309.435786,7354310.435602,7354311.43593,7354312.437188,7354313.436314,7354314.435629,7354315.43753,7354316.436524,7354317.435169,7354318.434204,7354319.433138,7354320.43561,7354321.449392,7354322.453987,7354323.449526,7354324.446697,7354325.442977,7354326.439828,7354327.43725,7354328.438649,7354329.436362,7354330.436589,7354331.436355,7354332.43525,7354333.436449,7354334.435824,7354335.434639,7354336.433624,7354337.442387,7354338.470776,7354339.467466,7354340.461382,7354341.454245,7354342.448321,7354343.443649,7354344.44031,7354345.439766,7354346.438931,7354347.437305,7354348.43658,7354349.435805,7354350.435051,7354351.433945,7354352.433211,7354353.433127,7354354.439726,7354355.450453,7354356.450189,7354357.446459,7354358.442528,7354359.440111,7354360.437703,7354361.437519,7354362.437286,7354363.436,7354364.435917,7354365.434892,7354366.434297,7354367.434975,7354368.43421,7354369.434478,7354370.433623,7354371.443478,7354372.448524,7354373.445355,7354374.442787,7354375.439638,7354376.43727,7354377.435223,7354378.436151,7354379.435357,7354380.435604,7354381.434629,7354382.435217,7354383.434472,7354384.434779,7354385.433734,7354386.43323,7354387.433126,7354388.437651,7354389.438099,7354390.436894,7354391.436019,7354392.436176,7354393.43471,7354394.435678,7354395.436346,7354396.436463,7354397.435729,7354398.435044,7354399.4347,7354400.435368,7354401.434353,7354402.434279,7354403.433645,7354404.438361,7354405.446943,7354406.446379,7354407.442819,7354408.440171,7354409.437773,7354410.435706,7354411.434801,7354412.435329,7354413.436949,7354414.435903,7354415.434898,7354416.434254,7354417.433489,7354418.432614,7354419.432331,7354420.431396,7354421.442793,7354422.449573,7354423.445873,7354424.445749,7354425.442369,7354426.440773,7354427.438436,7354428.43707,7354429.436516,7354430.435631,7354431.434345,7354432.4334,7354433.432906,7354434.432301,7354435.431687,7354436.431003,7354437.431801,7354438.440113,7354439.44571,7354440.443012,7354441.439953,7354442.437525,7354443.435759,7354444.435004,7354445.43484,7354446.436009,7354447.435585,7354448.435141,7354449.434296,7354450.433331,7354451.432396,7354452.432083,7354453.431498,7354454.438568,7354455.450427,7354456.448961,7354457.445421,7354458.44152,7354459.439593,7354460.437266,7354461.43558,7354462.436889,7354463.435763,7354464.434227,7354465.433383,7354466.432638,7354467.431973,7354468.43185,7354469.431947,7354470.434608,7354471.445996,7354472.446634,7354473.443234,7354474.440356,7354475.438108,7354476.436161,7354477.434666,7354478.435213,7354479.434258,7354480.434035,7354481.43332,7354482.433577,7354483.432843,7354484.431978,7354485.431283,7354486.430839,7354487.432188,7354488.444718,7354489.445576,7354490.4437,7354491.435011,7354492.421933,7354493.401071,7354494.38594,7354495.364808,7354496.340399,7354497.312675,7354498.294418,7354499.271452,7354500.249238,7354501.225912,7354502.205871,7354503.180171,7354504.154881,7354505.130072,7354506.105493,7354507.076757,7354508.049212,7354509.018633,7354509.994074,7354510.974084,7354511.951609,7354512.931409,7354513.907061,7354514.874407,7354515.847113,7354516.81968,7354517.792476,7354518.766715,7354519.735534,7354520.709994,7354521.688871,7354522.663622,7354523.637781,7354524.611589,7354525.579657,7354526.552964,7354527.528225,7354528.502054,7354529.471093,7354530.436176,7354531.411456,7354532.384183,7354533.364393,7354534.34295,7354535.315787,7354536.290627,7354537.265056,7354538.239516,7354539.214807,7354540.187263,7354541.156253,7354542.129891,7354543.104972,7354544.085232,7354545.065332,7354546.043739,7354547.01956,7354547.993299,7354548.965915,7354549.939673,7354550.906749,7354551.876851,7354552.849847,7354553.824197,7354554.799538,7354555.777023,7354556.743458,7354557.717347,7354558.692658,7354559.668259,7354560.642008,7354561.611859,7354562.583463,7354563.555969,7354564.53092,7354565.506832,7354566.478075,7354567.453106,7354568.427245,7354569.402306,7354570.37943,7354571.352698,7354572.331866,7354573.30893,7354574.286205,7354575.26367,7354576.241786,7354577.213371,7354578.190425,7354579.170044,7354580.147339,7354581.125365,7354582.099754,7354583.071409,7354584.044746,7354585.020178,7354585.995739,7354586.966873,7354587.941583,7354588.916814,7354589.892856,7354590.870472,7354591.847316,7354592.819782,7354593.794161,7354594.766456,7354595.741928,7354596.718011,7354597.688924,7354598.665607,7354599.643593,7354600.619385,7354601.593434,7354602.564808,7354603.542604,7354604.52085,7354605.501311,7354606.481852,7354607.459427,7354608.429198,7354609.402956,7354610.37945,7354611.357716,7354612.336875,7354613.306425,7354614.281516,7354615.259301,7354616.23877,7354617.219081,7354618.196005,7354619.177267,7354620.158349,7354621.144179,7354622.136973,7354623.129576,7354624.124794,7354625.120152,7354626.117844,7354627.114765,7354628.112588,7354629.111283,7354630.110057,7354631.109262,7354632.108888,7354633.107092,7354634.106557,7354635.106364,7354636.161172,7354636.643222,7354637.126735,7354637.740168,7354638.426575,7354639.182141,7354640.005201,7354640.861592,7354641.754722,7354642.676955,7354643.620717,7354644.599165,7354645.567593,7354646.543846,7354647.525178,7354648.51143,7354649.501318,7354650.494421,7354651.488467,7354652.485018,7354653.48275,7354654.491383,7354655.497972,7354656.494392,7354657.48991,7354658.484707,7354659.481869,7354660.479321,7354661.500857,7354662.497308,7354663.491724,7354664.487002,7354665.483873,7354666.480534,7354667.475231,7354668.474015,7354669.472379,7354670.471193,7354671.469467,7354672.477007,7354673.475602,7354674.473665,7354675.470315,7354676.469531,7354677.483664,7354678.48342,7354679.4798,7354680.475278,7354681.472229,7354682.470493,7354683.469197,7354684.469184,7354685.468429,7354686.467615,7354687.467701,7354688.471475,7354689.47048,7354690.469254,7354691.467949,7354692.466874,7354693.4664,7354694.480793,7354695.478325,7354696.474395,7354697.471466,7354698.469339,7354699.466701,7354700.466457,7354701.466073,7354702.465078,7354703.464764,7354704.46479,7354705.470738,7354706.470895,7354707.4697,7354708.466771,7354709.465786,7354710.463769,7354711.477982,7354712.476306,7354713.473297,7354714.470899,7354715.469463,7354716.466755,7354717.464598,7354718.464234,7354719.46382,7354720.462704,7354721.462441,7354722.467607,7354723.467814,7354724.46737,7354725.466565,7354726.46536,7354727.479523,7354728.480572,7354729.475399,7354730.472851,7354731.470162,7354732.468045,7354733.467591,7354734.466957,7354735.465811,7354736.465407,7354737.464923,7354738.463207,7354739.469084,7354740.469311,7354741.468106,7354742.466971,7354743.464984,7354744.479437,7354745.47744,7354746.474732,7354747.472054,7354748.470167,7354749.468691,7354750.466394,7354751.465328,7354752.464563,7354753.46445,7354754.464357,7354755.472579,7354756.478987,7354757.47662,7354758.474983,7354759.471634,7354760.469817,7354761.482347,7354762.478777,7354763.475388,7354764.472319,7354765.470091,7354766.468806,7354767.465797,7354768.465002,7354769.464588,7354770.463824,7354771.46393,7354772.468486,7354773.467891,7354774.465273,7354775.464629,7354776.464666,7354777.479049,7354778.480278,7354779.476668,7354780.473479,7354781.471091,7354782.469645,7354783.468009,7354784.467364,7354785.465237,7354786.472898,7354787.472975,7354788.469155,7354789.474271,7354790.472925,7354791.470457,7354792.468561,7354793.465882,7354794.479714,7354795.477728,7354796.474588,7354797.472141,7354798.470675,7354799.468498,7354800.467723,7354801.466818,7354802.466454,7354803.465569,7354804.464684,7354805.470492,7354806.468825,7354807.46783,7354808.466745,7354809.465459,7354810.463382,7354811.478156,7354812.476019,7354813.473331,7354814.471103,7354815.468225,7354816.465296,7354817.464551,7354818.464388,7354819.462732,7354820.461035,7354821.461222,7354822.467611,7354823.467908,7354824.466763,7354825.465938,7354826.465043,7354827.478725,7354828.480345,7354829.476364,7354830.471762,7354831.470116,7354832.468179,7354833.466894,7354834.465658,7354835.465134,7354836.46475,7354837.464075,7354838.466837,7354839.471833,7354840.470307,7354841.468861,7354842.465532,7354843.464857,7354844.477167,7354845.474609,7354846.472411,7354847.469032,7354848.467145,7354849.46598,7354850.465566,7354851.465282,7354852.463034,7354853.462681,7354854.462587,7354855.469987,7354856.471106,7354857.469901,7354858.468274,7354859.466578,7354860.466054,7354861.480007,7354862.479923,7354863.476243,7354864.472954,7354865.470125,7354866.468609,7354867.467123,7354868.465938,7354869.464662,7354870.464158,7354871.463744,7354872.468289,7354873.468286,7354874.467561,7354875.466406,7354876.46501,7354877.477971,7354878.477867,7354879.474538,7354880.486316,7354881.482295,7354882.477343,7354883.473513,7354884.470604,7354885.468186,7354886.46674,7354887.464333,7354888.466914,7354889.466911,7354890.466046,7354891.465392,7354892.464437,7354893.464323,7354894.478927,7354895.476179,7354896.473861,7354897.47004,7354898.467623,7354899.466808,7354900.466133,7354901.464207,7354902.463432,7354903.463038,7354904.462764,7354905.468081,7354906.46942,7354907.468806,7354908.467971,7354909.466836,7354910.466001,7354911.477489,7354912.475231,7354913.472573,7354914.490623,7354915.491792,7354916.48717,7354917.482859,7354918.478778,7354919.475148,7354920.47227,7354921.470012,7354922.489766,7354923.48842,7354924.483838,7354925.479316,7354926.475436,7354927.489899,7354928.488944,7354929.484403,7354930.480362,7354931.476592,7354932.474034,7354933.471346,7354934.469208,7354935.467923,7354936.467318,7354937.466484,7354938.465719,7354939.478098,7354940.477154,7354941.474365,7354942.470685,7354943.46974,7354944.482781,7354945.479451,7354946.4751,7354947.472161,7354948.469683,7354949.468428,7354950.466992,7354951.465957,7354952.464942,7354953.464037,7354954.463392,7354955.469891,7354956.477722,7354957.475705,7354958.474269,7354959.471782,7354960.468993,7354961.482415,7354962.479847,7354963.476227,7354964.472927,7354965.4706,7354966.468092,7354967.466636,7354968.46529,7354969.464746,7354970.464683,7354971.463818,7354972.469255,7354973.469301,7354974.468016,7354975.46671,7354976.465985,7354977.479357,7354978.480916,7354979.476685,7354980.473386,7354981.470227,7354982.469172,7354983.465572,7354984.464316,7354985.463371,7354986.463158,7354987.462874,7354988.468311,7354989.470411,7354990.469175,7354991.466397,7354992.465252,7354993.463074,7354994.478249,7354995.476122,7354996.473504,7354997.470445,7354998.468859,7354999.467323,7355000.465967,7355001.464982,7355002.464337,7355003.463603,7355004.461676,7355005.466983,7355006.468492,7355007.467747,7355008.467073,7355009.466168,7355010.465003,7355011.479516,7355012.478631,7355013.475061,7355014.471782,7355015.468282,7355016.464863,7355017.463898,7355018.463544,7355019.46309,7355020.462806,7355021.46137,7355022.46869,7355023.468016,7355024.46654,7355025.465524,7355026.464379,7355027.479003,7355028.480132,7355029.476101,7355030.472471,7355031.469783,7355032.467856,7355033.465939,7355034.464954,7355035.464109,7355036.463555,7355037.463161,7355038.466604,7355039.47665,7355040.475003,7355041.472265,7355042.480587,7355043.479542,7355044.490639,7355045.485466,7355046.482187,7355047.477755,7355048.473785,7355049.470646,7355050.468168,7355051.466461,7355052.465136,7355053.46395,7355054.462234,7355055.467981,7355056.469521,7355057.467564,7355058.465858,7355059.465173,7355060.464228,7355061.478511,7355062.476635,7355063.474117,7355064.47222,7355065.468399,7355066.466312,7355067.463764,7355068.464352,7355069.462666,7355070.4612,7355071.461357,7355072.466453,7355073.467542,7355074.471365,7355075.472184,7355076.473433,7355077.496402,7355078.49715,7355079.488922,7355080.482236,7355081.477063,7355082.474004,7355083.470845,7355084.468989,7355085.467522,7355086.466698,7355087.466444,7355088.470939,7355089.484902,7355090.482554,7355091.477872,7355092.473621,7355093.471183,7355094.484214,7355095.481055,7355096.477465,7355097.473905,7355098.471257,7355099.469671,7355100.467584,7355101.46708,7355102.465594,7355103.466883,7355104.465126,7355105.46917,7355106.481981,7355107.480946,7355108.47991,7355109.476761,7355110.473191,7355111.486352,7355112.487501,7355114.354169,7355115.468296,7355116.313246,7355117.258683,7355118.229195,7355119.208102,7355120.191929,7355121.181778,7355122.199176,7355123.195126,7355124.185134,7355125.176695,7355126.171753,7355127.167962,7355128.191001,7355129.184356,7355130.177119,7355131.170894,7355132.167134,7355133.162763,7355134.160846,7355135.158769,7355136.158135,7355137.157771,7355138.156726,7355139.163615,7355140.163321,7355141.161875,7355142.16049,7355143.159204,7355144.173898,7355145.170548,7355146.166257,7355147.162627,7355148.159759,7355149.156449,7355150.154823,7355151.153808,7355152.153163,7355153.151998,7355154.152025,7355155.157361,7355156.157859,7355157.155561,7355158.154947,7355159.154193,7355160.153738,7355161.169214,7355162.167237,7355163.162926,7355164.159386,7355165.155355,7355166.153889,7355167.152984,7355168.152139,7355169.151505,7355170.15094,7355171.150537,7355172.156544,7355173.158314,7355174.155356,7355175.154902,7355176.153926,7355177.152721,7355178.166423,7355179.164887,7355180.172628,7355181.168247,7355182.162032,7355183.158532,7355184.156265,7355185.154589,7355186.153132,7355187.150965,7355188.15543,7355189.156639,7355190.154883,7355191.155471,7355192.154555,7355193.15341,7355194.167533,7355195.164645,7355196.160684,7355197.157655,7355198.155287,7355199.153561,7355200.152526,7355201.15093,7355202.150345,7355203.150101,7355204.150138,7355205.161806,7355206.167524,7355207.164054,7355208.159102,7355209.156383,7355210.154627,7355211.16884,7355212.165621,7355213.16174,7355214.158491,7355215.155933,7355216.154257,7355217.152861,7355218.152126,7355219.151442,7355220.151218,7355221.149491,7355222.155469,7355223.154965,7355224.154732,7355225.155039,7355226.153653,7355227.153019,7355228.167712,7355229.165024,7355230.161394,7355231.158055,7355232.155757,7355233.152628,7355234.151633,7355235.151029,7355236.150334,7355237.14988,7355238.150468,7355239.157808,7355240.158246,7355241.156679,7355242.154753,7355243.153267,7355244.167329,7355245.165092,7355246.161392,7355247.158253,7355248.155905,7355249.154159,7355250.152773,7355251.150626,7355252.150092,7355253.149908,7355254.149714,7355255.155482,7355256.156831,7355257.155715,7355258.154129,7355259.153044,7355260.15265,7355261.166092,7355262.164566,7355263.161456,7355264.156985,7355265.153586,7355266.152119,7355267.150073,7355268.149548,7355269.149375,7355270.149391,7355271.149418,7355272.153192,7355273.156505,7355274.154378,7355275.153102,7355276.152177,7355277.151392,7355278.164934,7355279.164079,7355280.161852,7355281.159975,7355282.157217,7355283.154939,7355284.152001,7355285.151096,7355286.149389,7355287.149035,7355288.14807,7355289.156903,7355290.157802,7355291.156236,7355292.154519,7355293.153614,7355294.16939,7355295.167002,7355296.162721,7355297.159262,7355298.156373,7355299.154276,7355300.1528,7355301.151755,7355302.151,7355303.150796,7355304.150423,7355305.156881,7355306.16358,7355307.161413,7355308.158434,7355309.156207,7355310.152877,7355311.166319,7355312.164402,7355313.163598,7355314.160188,7355315.15757,7355316.155332,7355317.153536,7355318.15223,7355319.151265,7355320.150511,7355321.148664,7355322.152878,7355323.152434,7355324.15228,7355325.150985,7355326.149198,7355327.149005,7355328.163779,7355329.162924,7355330.160246,7355331.157307,7355332.15493,7355333.152111,7355334.149693,7355335.149299,7355336.148164,7355337.148261,7355338.14942,7355339.157411,7355340.160233,7355341.156824,7355342.153725,7355343.152168,7355344.16578,7355345.163443,7355346.160033,7355347.155822,7355348.154016,7355349.15276,7355350.151855,7355351.151161,7355352.150616,7355353.148809,7355354.149167,7355355.157349,7355356.157977,7355357.156471,7355358.153923,7355359.151224,7355360.150279,7355361.164773,7355362.162566,7355363.159266,7355364.156518,7355365.153078,7355366.151522,7355367.150647,7355368.150354,7355369.15023,7355370.148844,7355371.149382,7355372.1556,7355373.156959,7355374.155864,7355375.154108,7355376.152581,7355377.150615,7355378.164377,7355379.16232,7355380.159612,7355381.156853,7355382.154826,7355383.15306,7355384.151974,7355385.151049,7355386.150475,7355387.150772,7355388.150669,7355389.158911,7355390.157976,7355391.15659,7355392.154723,7355393.153087,7355394.166629,7355395.163439,7355396.16013,7355397.157031,7355398.154754,7355399.153158,7355400.151952,7355401.151277,7355402.149531,7355403.149858,7355404.149765,7355405.155542,7355406.157423,7355407.158251,7355408.156434,7355409.154477,7355410.152751,7355411.165691,7355412.164636,7355413.160856,7355414.157937,7355415.15554,7355416.153863,7355417.152497,7355418.151312,7355419.149125,7355420.149362,7355421.147796,7355422.153002,7355423.156145,7355424.155049,7355425.153433,7355426.152538,7355427.150792,7355428.16758,7355429.166735,7355430.164086,7355431.160166,7355432.156947,7355433.154609,7355434.153243,7355435.152198,7355436.151985,7355437.1511,7355438.150345,7355439.158617,7355440.158213,7355441.155946,7355442.15437,7355443.152913,7355444.168188,7355445.1654,7355446.161119,7355447.158501,7355448.155873,7355449.154106,7355450.15252,7355451.151274,7355452.151291,7355453.150807,7355454.150183,7355455.154287,7355456.156067,7355457.155172,7355458.153516,7355459.151098,7355460.150263,7355461.164005,7355462.162068,7355463.15945,7355464.156482,7355465.154164,7355466.152808,7355467.151903,7355468.151109,7355469.151125,7355470.149289,7355471.149065,7355472.154171,7355473.15526,7355474.152922,7355475.151536,7355476.150722,7355477.148765,7355478.161745,7355479.161943,7355480.159335,7355481.155114,7355482.153026,7355483.150238,7355484.148171,7355485.147647,7355486.147774,7355487.146588,7355488.145613,7355489.152733,7355490.156106,7355491.155181,7355492.153705,7355493.152369,7355494.166652,7355495.163493,7355496.159783,7355497.156694,7355498.154266,7355499.151759,7355500.150844,7355501.151111,7355502.150617,7355503.149982,7355504.149728,7355505.154394,7355506.153088,7355507.151011,7355508.149645,7355509.149241,7355510.149028,7355511.16274,7355512.160462,7355513.157704,7355514.155046,7355515.153179,7355516.151753,7355517.150708,7355518.150685,7355519.15006,7355520.149506,7355521.149673,7355522.154389,7355523.153303,7355524.152609,7355525.151524,7355526.150949,7355527.150144,7355528.163967,7355529.164164,7355530.160824,7355531.157325,7355532.153615,7355533.151948,7355534.152015,7355535.15124,7355536.150405,7355537.149721,7355538.149948,7355539.156837,7355540.156985,7355541.155649,7355542.153742,7355543.152196,7355544.164175,7355545.161837,7355546.158428,7355547.155719,7355548.153602,7355549.151976,7355550.151642,7355551.150707,7355552.149932,7355553.149819,7355554.162519,7355555.168527,7355556.169175,7355557.165114,7355558.160803,7355559.157443,7355560.154775,7355561.171112,7355562.169075,7355563.165986,7355564.161615,7355565.158005,7355566.155297,7355567.154141,7355568.152585,7355569.150167,7355570.149663,7355571.149129,7355572.154516,7355573.155815,7355574.1551,7355575.152021,7355576.149403,7355577.148819,7355578.161719,7355579.160614,7355580.157886,7355581.155197,7355582.153241,7355583.152636,7355584.151511,7355585.150486,7355586.149641,7355587.150029,7355588.149504,7355589.156063,7355590.154407,7355591.152951,7355592.151565,7355593.15086,7355594.165514,7355595.162495,7355596.159086,7355597.155556,7355598.153689,7355599.152935,7355600.15228,7355601.149832,7355602.149198,7355603.149155,7355604.14875,7355605.155099,7355606.158131,7355607.156896,7355608.155009,7355609.153193,7355610.150875,7355611.16625,7355612.163502,7355613.159531,7355614.15517,7355615.153043,7355616.152468,7355617.150261,7355618.163372,7355619.162878,7355620.159358,7355621.15657,7355622.161626,7355623.161772,7355624.159245,7355625.156046,7355626.154018,7355627.152613,7355628.166796,7355629.1654,7355630.1618,7355631.15812,7355632.156143,7355633.154246,7355634.151317,7355635.150663,7355636.150409,7355637.149605,7355638.149371,7355639.15635,7355640.156377,7355641.154681,7355642.152954,7355643.151789,7355644.165221,7355645.162121,7355646.158732,7355647.155894,7355648.154197,7355649.152691,7355650.151275,7355651.15039,7355652.150176,7355653.149662,7355654.149198,7355655.154074,7355656.154692,7355657.153687,7355658.152671,7355659.151707,7355660.150772,7355661.164233,7355662.162597,7355663.160189,7355664.1571,7355665.155614,7355666.153768,7355667.152512,7355668.151777,7355669.1494,7355670.147433,7355671.147419,7355672.152506,7355673.153284,7355674.152589,7355675.151704,7355676.149517,7355677.148822,7355678.162895,7355679.160488,7355680.157719,7355681.155672,7355682.153655,7355683.152119,7355684.151234,7355685.151131,7355686.150546,7355687.149832,7355688.149197,7355689.154544,7355690.15408,7355691.152764,7355692.15199,7355693.150624,7355694.163965,7355695.161728,7355696.158779,7355697.159587,7355698.15742,7355699.154872,7355700.151633,7355701.150587,7355702.149623,7355703.148958,7355704.148614,7355705.157698,7355706.163224,7355707.159675,7355708.157007,7355709.154529,7355710.152852,7355711.165362,7355712.162153,7355713.160386,7355714.157899,7355715.155331,7355716.153173,7355717.152359,7355718.151133,7355719.150308,7355720.149634,7355721.149029,7355722.153634,7355723.155525,7355724.154239,7355725.152894,7355726.152269,7355727.151044,7355728.163974,7355729.163169,7355730.160331,7355731.156901,7355732.154554,7355733.152707,7355734.151461,7355735.150556,7355736.148299,7355737.147705,7355738.147551,7355739.155563,7355740.157172,7355741.156097,7355742.15406,7355743.152785,7355744.164974,7355745.161835,7355746.165929,7355747.163131,7355748.15915,7355749.156071,7355750.154695,7355751.155002,7355752.153336,7355753.152001,7355754.151206,7355755.158917,7355756.161979,7355757.159231,7355758.154949,7355759.152572,7355760.150234,7355761.164748,7355762.162961,7355763.162898,7355764.159558,7355765.156389,7355766.154152,7355767.152195,7355768.149427,7355769.149153,7355770.14943,7355771.152422,7355772.171094,7355773.171862,7355774.16734,7355775.162688,7355776.159209,7355777.177349,7355778.175071,7355779.169438,7355780.164425,7355781.160314,7355782.155953,7355783.154136,7355784.15235,7355785.151195,7355786.149158,7355787.148804,7355788.148309,7355789.15577,7355790.156227,7355791.154521,7355792.153085,7355793.151188,7355794.166363,7355795.164476,7355796.161047,7355797.157557,7355798.15567,7355799.152762,7355800.151216,7355801.15001,7355802.149095,7355803.148781,7355804.148508,7355805.154566,7355806.154702,7355807.153627,7355808.152422,7355809.149944,7355810.148969,7355811.164003,7355812.163379,7355813.161412,7355814.157882,7355815.155525,7355816.153427,7355817.151781,7355818.150566,7355819.149631,7355820.147664,7355821.14732,7355822.155391,7355823.155509,7355824.154564,7355825.152827,7355826.151662,7355827.165213,7355828.165701,7355829.160488,7355830.157159,7355831.153248,7355832.151622,7355833.149044,7355834.148269,7355835.147705,7355836.147511,7355837.147338,7355838.147314,7355839.152611,7355840.151416,7355841.149408,7355842.148584,7355843.14806,7355844.163635,7355845.160937,7355846.157577,7355847.154979,7355848.153343,7355849.151987,7355850.149499,7355851.148724,7355852.14819,7355853.147676,7355854.147322,7355855.152679,7355856.152656,7355857.15172,7355858.149603,7355859.149129,7355860.148505,7355861.16366,7355862.163636,7355863.160598,7355864.155955,7355865.153307,7355866.151321,7355867.149975,7355868.14911,7355869.148596,7355870.148121,7355871.148008,7355872.154657,7355873.155084,7355874.163797,7355875.163834,7355876.159012,7355877.171702,7355878.169725,7355879.16297,7355880.158819,7355881.156231,7355882.154073,7355883.152227,7355884.149799,7355885.148804,7355886.147388,7355887.145792,7355888.146089,7355889.151716,7355890.151843,7355891.152321,7355892.151767,7355893.15006,7355894.165345,7355895.162637,7355896.158916,7355897.155928,7355898.15351,7355899.151954,7355900.150728,7355901.148411,7355902.148007,7355903.147803,7355904.14773,7355905.153598,7355906.155237,7355907.154913,7355908.153207,7355909.15143,7355910.150936,7355911.164358,7355912.161319,7355913.1584,7355914.155532,7355915.153274,7355916.151528,7355917.150372,7355918.149297,7355919.148542,7355920.147988,7355921.147745,7355922.152981,7355923.152126,7355924.151782,7355925.150907,7355926.150754,7355927.164275,7355928.162759,7355929.158889,7355930.15591,7355931.153392,7355932.151535,7355933.15009,7355934.149475,7355935.148881,7355936.148246,7355937.148063,7355938.147889,7355939.15533,7355940.156919,7355941.155193,7355942.153897,7355943.152231,7355944.165161,7355945.162794,7355946.159044,7355947.156115,7355948.153537,7355949.15168,7355950.150365,7355951.149189,7355952.148615,7355953.148431,7355954.147967,7355955.153765,7355956.15323,7355957.152265,7355958.15095,7355959.150936,7355960.150071,7355961.170275,7355962.166555,7355963.16011,7355964.156069,7355965.153451,7355966.151675,7355967.150289,7355968.149244,7355969.147267,7355970.145671,7355971.145798,7355972.151415,7355973.151582,7355974.150707,7355975.151756,7355976.15082,7355977.164262,7355978.164349,7355979.160649,7355980.156959,7355981.154221,7355982.152104,7355983.149165,7355984.14814,7355985.147686,7355986.147271,7355987.146978,7355988.146864,7355989.153162,7355990.151797,7355991.150261,7355992.149646,7355993.148912,7355994.163004,7355995.159805,7355996.156185,7355997.153567,7355998.15149,7355999.150014,7356000.148889,7356001.147984,7356002.156346,7356003.156152,7356004.153805,7356005.156857,7356006.155551,7356007.153565,7356008.152589,7356009.151494,7356010.150239,7356011.173048,7356012.169858,7356013.168382,7356014.169822,7356015.164699,7356016.160528,7356017.158451,7356018.155452,7356019.152954,7356020.151498,7356021.150072,7356022.155279,7356023.15251,7356024.151926,7356025.150731,7356026.149405,7356027.162716,7356028.162322,7356029.158542,7356030.155543,7356031.153065,7356032.151149,7356033.149713,7356034.148697,7356035.148053,7356036.147559,7356037.147365,7356038.146951,7356039.155063,7356040.154859,7356041.153013,7356042.151176,7356043.150031,7356044.161979,7356045.158941,7356046.155701,7356047.153053,7356048.151176,7356049.149731,7356050.148695,7356051.146598,7356052.146254,7356053.146131,7356054.146308,7356055.152135,7356056.152353,7356057.151638,7356058.150593,7356059.149628,7356060.147791,7356061.161643,7356062.184542,7356063.156477,7356064.144893,7356065.139359,7356066.13617,7356067.133822,7356068.131936,7356069.130319,7356070.129294,7356071.12842,7356072.136662,7356073.135997,7356074.13422,7356075.132785,7356076.133142,7356077.132167,7356078.148714,7356079.144623,7356080.139841,7356081.136191,7356082.133393,7356083.131346,7356084.130761,7356085.129786,7356086.128971,7356087.128698,7356088.127092,7356089.13362,7356090.133637,7356091.130789,7356092.128371,7356093.126634,7356094.141218,7356095.138439,7356096.134138,7356097.132091,7356098.130525,7356099.12934,7356100.128635,7356101.128001,7356102.127667,7356103.127183,7356104.126769,7356105.131945,7356106.132823,7356107.130606,7356108.129701,7356109.127694,7356110.12713,7356111.141252,7356112.139125,7356113.140575,7356114.137345,7356115.134347,7356116.132019,7356117.130373,7356118.127825,7356119.127,7356120.126907,7356121.12533,7356122.134214,7356123.13412,7356124.132394,7356125.130858,7356126.129803,7356127.128697,7356128.143421,7356129.141234,7356130.137413,7356131.134294,7356132.130915,7356133.12991,7356134.128825,7356135.128421,7356136.127696,7356137.127061,7356138.128381,7356139.13491,7356140.132241,7356141.130475,7356142.12972,7356143.128545,7356144.142056,7356145.138717,7356146.135327,7356147.132679,7356148.130763,7356149.129697,7356150.128862,7356151.126695,7356152.126341,7356153.126107,7356154.126054,7356155.138073,7356156.13812,7356157.135282,7356158.133114,7356159.131378,7356160.129842,7356161.143283,7356162.140655,7356163.141594,7356164.137994,7356165.134715,7356166.132196,7356167.13039,7356168.129335,7356169.12865,7356170.128066,7356171.128273,7356172.136094,7356173.134608,7356174.132822,7356175.132768,7356176.131072,7356177.129836,7356178.143048,7356179.139377,7356180.135838,7356181.131737,7356182.12987,7356183.128835,7356184.12796,7356185.127646,7356186.127022,7356187.127169,7356188.126233,7356189.132953,7356190.132128,7356191.130882,7356192.128194,7356193.127179,7356194.140901,7356195.137712,7356196.134533,7356197.130903,7356198.129136,7356199.128091,7356200.127958,7356201.127914,7356202.12724,7356203.127357,7356204.127794,7356205.133281,7356206.132987,7356207.130579,7356208.129023,7356209.128109,7356210.126152,7356211.140876,7356212.138578,7356213.147141,7356214.141717,7356215.137476,7356216.134137,7356217.131979,7356218.130644,7356219.129378,7356220.127762,7356221.127178,7356222.132645,7356223.13188,7356224.130674,7356225.129369,7356226.128264,7356227.127499,7356228.142393,7356229.140436,7356230.136906,7356231.134949,7356232.132422,7356233.130775,7356234.12955,7356235.128865,7356236.128962,7356237.128598,7356238.128034,7356239.135004,7356240.136403,7356241.133945,7356242.131577,7356243.130011,7356244.142802,7356245.138761,7356246.135421,7356247.131751,7356248.128592,7356249.127847,7356250.127644,7356251.1273,7356252.127176,7356253.126272,7356254.124645,7356255.133028,7356256.137182,7356257.137069,7356258.13437,7356259.131942,7356260.130206,7356261.143217,7356262.140068,7356263.140485,7356264.137517,7356265.134337,7356266.133773,7356267.133579,7356268.133716,7356269.133463,7356270.132618,7356271.133436,7356272.141888,7356273.20408,7356274.197124,7356275.185509,7356276.172843,7356277.197174,7356278.190779,7356279.17677,7356280.165977,7356281.157137,7356282.151834,7356283.148024,7356284.145356,7356285.143499,7356286.141713,7356287.140738,7356288.137969,7356289.157612,7356290.16355,7356291.157806,7356292.151751,7356293.14714,7356294.161523,7356295.155659,7356296.150025,7356297.145734,7356298.142385,7356299.139456,7356300.138211,7356301.136624,7356302.13606,7356303.135476,7356304.13455,7356305.134798,7356306.146516,7356307.147074,7356308.144326,7356309.141387,7356310.139269,7356311.152972,7356312.149863,7356313.146132,7356314.142052,7356315.138742,7356316.135854,7356317.134017,7356318.133393,7356319.132608,7356320.131713,7356321.129606,7356322.138209,7356323.138716,7356324.136609,7356325.135684,7356326.1353,7356327.151046,7356328.150331,7356329.14597,7356330.14221,7356331.138901,7356332.136273,7356333.134015,7356334.133471,7356335.13462,7356336.141399,7356338.026671,7356339.163209,7356371.710536,7356388.843175,7356405.368463,7356421.79616,7356438.436751,7356454.439303,7356455.166446,7356470.681208,7356488.126104,7356520.096645,7356537.479957,7356554.591878,7356570.990351,7356587.414392,7356603.558055,7356619.982196,7356636.762966,7356653.373311,7356653.891608,7356670.282508,7356686.822203,7356703.068917,7356719.851961,7356736.775865,7356753.546686,7356769.97812,7356785.804768,7356786.946737,7356803.412485,7356819.459249,7356820.468733,7356837.068088,7356869.755212,7356886.562371,7356902.981142,7356903.756113,7356919.553597,7356920.065552,7356920.931281,7356937.027687,7356953.281764,7356953.709344,7356969.375966,7356970.562798,7356986.713694,7356987.522438,7357003.88756,7357020.127381,7357036.803928,7357052.913348,7357054.211786,7357070.956839,7357087.260859,7357103.699065,7357104.704743,7357121.16478,7357137.387028,7357137.590293,7357153.664729,7357154.813289,7357171.066145,7357187.339988,7357187.796781,7357203.389687,7357204.427725,7357220.340501,7357220.927896,7357237.278813,7357238.099779,7357254.318049,7357270.229554,7357271.638265,7357287.872595,7357304.070469,7357320.391429,7357320.890992,7357336.459653,7357337.552551,7357353.376384,7357354.385397,7357370.846957,7357387.030874,7357403.177323,7357404.635165,7357421.421845,7357437.610231,7357454.180021,7357454.832657,7357470.563628,7357471.406414,7357487.256906,7357488.159453,7357504.122462,7357521.035506,7357537.870135,7357554.072737,7357570.681388,7357587.027295,7357603.768071,7357620.310881,7357621.670712,7357638.285586,7357654.572273,7357670.811863,7357686.965715,7357687.92175,7357688.307723,7357704.474349,7357720.743785,7357736.943902,7357738.174284,7357754.451645,7357770.809864,7357771.247151,7357787.587768,7357788.13559,7357804.951384,7357821.058399,7357837.264888,7357854.097324,7357870.77345,7357886.924516,7357887.508675,7357907.796812,7357908.374118,7357909.028918,7357909.778362,7357910.579681,7357911.43418,7357912.331497,7357913.253369,7357914.197372,7357915.158918,7357916.130783,7357935.645551,7357968.886038,7357985.940162,7358017.771657,7358035.933878,7358068.499178,7358085.204768,7358101.181904,7358101.908786,7358118.346763,7358134.689213,7358166.504538,7358167.265252,7358183.653657,7358216.071064,7358232.810126,7358248.740836,7358265.763022,7358266.868213,7358283.53388,7358299.750559,7358300.729527,7358301.912311,7358303.327304,7358304.379297,7358305.411813,7358306.492399,7358307.568947,7358308.632341,7358309.691296,7358317.031382,7358318.220758,7358319.47798],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,661,1502,1292,1213,10,6,6,6,6,39,772,3458,2343,2025,1124,17,9,8,10,11,22,187,1128,984,947,956,967,684,17,9,8,9,9,23,252,1328,1160,1085,1053,1034,1026,1018,1014,1008,1015,1017,1002,1000,998,999,996,998,998,1006,1021,1009,762,10,8,7,6,16,35,261,1119,1434,1382,1251,1184,1132,1071,2383,875,884,919,951,945,950,950,965,963,955,956,970,978,978,2215,1197,872,821,645,31,27,22,20,22,23,22,42,27,24,21,15,24,20,17,25,87,14,8,9,15,17,28,45,10,8,8,8,9,41,14,11,13,10,11,17,42,19,13,8,8,7,7,27,19,10,7,7,7,7,33,12,12,11,9,9,24,13,13,8,8,8,8,18,8,8,7,8,7,22,14,10,10,10,9,21,160,734,1100,1165,2115,1717,1511,915,896,1014,980,976,986,989,987,994,418,504,538,600,551,503,794,997,999,995,999,985,1075,1024,975,982,978,987,989,988,995,1004,993,994,995,997,996,999,996,996,997,1000,998,998,998,1013,1043,1003,987,989,989,992,994,996,997,997,997,998,1000,1000,998,997,1018,1038,991,986,989,992,995,998,995,996,997,997,1015,1028,1022,1014,1015,1021,1004,968,970,977,983,989,991,993,994,996,999,998,1013,1027,1020,1026,1022,1005,1002,1000,1000,1000,1000,1000,999,1000,999,1000,1000,1002,999,998,1007,1006,998,997,997,997,998,998,999,999,998,1000,1000,999,999,999,999,1005,1001,999,999,999,998,1000,998,999,999,999,998,999,995,998,997,1015,1021,992,990,992,994,995,997,997,998,998,999,999,998,999,999,999,1005,1001,998,999,998,999,1000,999,999,999,1000,999,999,1000,999,999,1006,1001,1005,1000,1001,1000,997,997,997,997,998,999,999,999,998,999,1001,1006,1001,998,1000,998,997,997,999,999,998,1000,999,999,999,1000,998,1009,1007,997,999,997,996,998,1002,999,997,998,998,998,1000,999,999,999,1004,1002,1001,1000,997,997,998,999,999,999,998,999,999,999,999,999,1005,1012,999,995,996,997,998,999,999,998,999,999,998,999,999,999,1008,1004,998,1002,996,997,997,1000,1001,998,999,998,998,999,999,998,999,1010,1003,997,996,998,997,998,999,1000,1000,999,999,1000,999,999,999,1002,1010,999,996,1004,996,996,997,998,999,1001,998,998,999,998,999,999,999,1011,1003,997,997,998,998,1000,1000,999,998,998,998,629,506,509,602,468,458,524,647,731,820,855,893,921,942,958,969,979,980,987,989,993,994,996,997,994,997,1010,1001,1001,1013,995,993,995,998,993,997,997,998,998,999,998,999,1001,1007,1000,998,996,998,997,999,1000,999,998,999,999,999,999,999,999,1006,1009,997,1012,996,996,993,996,997,999,999,999,999,998,998,999,999,1012,1002,998,1003,1000,169,555,556,522,1292,1318,931,914,932,951,967,973,981,993,993,994,991,993,994,995,999,999,997,998,999,1000,998,998,999,1004,1004,1000,1004,998,998,999,998,998,998,1000,1000,1002,997,1001,1000,998,999,1012,999,995,997,996,996,998,998,1001,999,1019,999,994,994,996,997,1002,997,996,999,997,994,996,1000,1001,1000,998,999,999,1001,998,997,998,1004,1011,998,1000,998,998,999,1001,999,999,999,998,999,1000,999,997,998,1002,1004,1003,998,997,997,998,1000,999,1000,1000,1001,998,998,997,998,1002,1012,999,996,1003,1000,996,997,997,998,1000,997,998,998,1000,993,992,1006,1007,992,994,994,994,997,998,997,999,999,1001,1000,1002,467,594,580,636,727,801,828,857,870,901,937,974,985,1091,1067,963,962,974,1235,1501,915,893,930,935,943,955,967,976,983,988,991,993,994,995,997,997,1007,999,982,1013,998,985,988,987,990,992,995,996,997,996,998,994,994,995,996,1004,1006,998,995,996,997,998,998,1000,999,999,999,999,998,999,999,1002,1007,1000,998,1003,998,997,997,1002,1001,998,998,998,998,998,998,999,1004,1010,1002,996,995,997,997,999,1001,999,998,999,998,999,999,999,999,1005,1003,999,998,1000,998,998,1000,998,1000,996,997,997,997,998,998,1002,1025,1006,992,993,993,996,997,997,996,997,998,998,999,999,999,999,1007,1002,1001,1000,997,997,998,999,999,999,999,998,999,999,999,999,999,1005,1004,999,997,998,870,941,565,591,649,740,814,852,890,920,942,959,802,837,524,547,644,706,783,847,887,917,327,1240,929,889,922,928,945,960,971,979,984,989,997,1006,988,989,991,992,993,994,988,991,994,995,996,997,998,998,1004,1020,995,993,993,992,993,994,995,993,992,993,996,996,997,997,1003,1003,1014,991,992,992,994,993,997,989,992,993,994,996,996,998,997,999,1011,1001,994,996,995,994,997,991,988,991,993,994,997,997,997,998,1002,1004,996,997,995,996,997,997,995,994,992,995,999,1002,997,997,997,1451,1003,995,997,993,996,997,998,997,999,998,999,1000,999,1000,1000,1003,1008,998,999,997,998,997,999,999,999,1000,1000,999,999,998,999,998,1013,1009,993,993,994,992,997,1001,996,997,997,998,999,999,1000,999,1002,1021,1001,994,995,995,997,997,998,998,999,998,999,998,999,999,999,1006,1011,998,998,997,997,997,998,999,998,999,999,999,1000,1000,1000,1000,1012,1009,995,995,997,996,997,998,999,999,998,999,999,1000,1004,998,996,1006,997,995,995,996,997,998,999,999,999,999,999,1000,999,999,999,1004,1009,997,996,997,997,998,998,999,999,999,999,999,1000,999,999,1000,1016,1012,995,995,993,996,1000,1000,997,997,998,998,999,999,999,999,1000,1011,1000,997,998,997,998,998,999,999,999,999,998,1000,996,997,997,1002,1003,999,997,997,997,998,999,999,999,999,999,999,999,999,1000,999,1005,1009,999,998,996,997,1000,1001,997,998,998,998,999,999,1000,999,999,1005,1001,998,999,998,998,999,1000,1000,998,999,999,999,1000,999,999,1001,1009,1001,997,997,997,998,999,999,999,999,999,1001,999,1000,999,999,1011,1006,996,1001,994,996,1000,1001,998,997,998,998,999,999,999,999,1001,1012,1000,996,997,997,998,998,1000,998,999,999,999,1000,999,999,999,1005,1007,998,997,997,998,998,999,999,999,999,999,999,1000,999,1000,1001,1010,1011,995,996,996,996,996,1000,996,995,996,997,999,998,999,999,1000,1009,1002,997,997,997,998,999,999,999,1000,999,999,999,999,999,999,1003,1009,1002,996,996,997,998,998,1000,999,999,999,1000,999,999,999,999,1006,1005,999,998,997,997,999,1002,1000,1000,998,1001,1008,998,999,998,999,1000,997,998,1000,999,999,1722,1003,972,974,981,985,990,992,994,995,1007,996,998,996,996,997,999,1000,999,998,998,999,999,999,999,999,1001,1004,1000,999,998,998,999,1000,1001,999,999,1001,998,998,999,998,1002,1013,1004,995,997,996,996,997,1001,997,1000,999,998,1001,999,998,998,1008,1028,996,993,992,994,995,996,999,999,998,999,999,999,998,999,999,1006,1010,999,996,996,997,997,999,999,998,999,998,999,1000,999,1000,999,1009,1005,996,997,996,997,997,1000,999,1000,999,1000,999,1000,998,999,999,1004,1000,998,999,1000,998,1000,1000,1000,999,999,999,1000,998,999,999,1004,1008,999,996,997,997,997,999,1000,1001,998,998,999,999,999,999,999,1011,1006,996,999,996,998,997,998,999,999,998,999,999,999,999,999,1000,1008,1005,997,996,997,998,999,999,1001,999,999,999,999,999,999,999,1007,1011,998,996,996,998,997,998,1001,998,998,999,999,999,999,1000,1002,1011,1000,996,997,997,998,998,1000,999,999,999,1000,999,999,999,999,1001,1012,1000,998,991,986,979,984,978,975,972,981,977,977,976,979,974,974,975,975,971,972,969,975,980,977,979,975,967,972,972,972,974,968,974,978,974,974,973,968,973,975,973,969,965,975,972,980,978,972,974,974,974,975,972,968,973,975,980,980,978,975,973,972,973,967,970,972,974,975,977,966,973,975,975,973,969,971,972,974,975,971,975,974,975,977,973,979,977,977,977,978,971,977,979,977,978,974,971,973,975,975,971,974,975,976,977,976,972,974,972,975,976,970,976,977,975,974,971,977,978,980,980,977,969,973,976,978,979,969,975,977,979,980,976,981,981,985,992,992,995,995,997,996,997,998,998,999,999,998,999,999,1038,482,483,600,686,755,823,856,893,922,943,958,968,976,981,986,989,993,994,996,997,998,1006,996,995,994,997,997,996,996,994,995,996,996,994,998,998,998,998,998,998,998,996,999,999,999,996,995,996,998,998,999,999,999,1000,998,999,998,998,998,999,999,997,996,997,997,997,999,999,999,999,1000,998,1000,998,997,999,997,999,998,996,997,998,997,997,999,999,998,999,999,1000,999,999,998,999,1001,994,997,997,997,999,999,998,999,999,998,999,1000,998,998,998,999,998,997,997,998,998,997,998,999,999,999,1000,1006,997,998,996,998,998,996,996,996,997,998,996,999,999,999,1000,999,999,997,999,1000,999,1001,996,996,997,998,998,999,997,999,1000,996,997,998,997,998,997,998,998,996,997,998,997,999,999,999,999,999,998,998,999,998,998,997,999,997,997,997,997,997,999,999,998,998,1000,999,1000,998,999,999,999,1001,996,995,998,998,998,998,999,999,999,1002,995,998,998,996,999,997,997,997,996,998,998,999,999,997,999,999,999,1001,998,998,998,999,998,999,996,996,997,998,998,998,998,999,999,999,999,999,998,998,998,999,996,1011,995,995,996,997,997,998,997,997,999,999,999,999,999,1000,997,997,996,997,999,999,998,999,999,999,999,1001,999,999,998,999,997,997,997,996,1001,995,995,995,996,997,997,999,998,995,995,996,997,999,995,995,996,997,997,997,998,999,999,999,1005,999,997,996,999,998,996,995,997,997,998,998,998,998,999,999,999,1007,997,998,997,997,998,997,996,996,997,997,998,998,999,999,999,999,1000,998,998,999,998,1001,995,996,996,998,996,998,999,999,999,999,1002,998,997,998,997,999,997,997,996,998,998,998,999,999,999,998,999,1001,999,999,999,998,1000,999,996,996,996,996,999,999,999,999,998,999,999,998,998,998,999,1001,995,996,997,998,998,999,999,999,999,997,1010,998,997,997,998,996,994,996,995,996,996,997,998,998,998,998,999,1001,998,998,999,999,998,998,997,998,996,997,997,1000,998,998,1000,999,1001,1003,1000,1001,997,1000,991,993,994,996,996,998,998,999,999,1004,1004,997,995,995,997,997,996,996,996,997,998,997,999,998,1001,998,998,1004,998,998,996,996,997,1001,1121,897,844,945,970,978,983,989,991,995,990,991,995,996,996,993,992,993,996,995,998,997,999,999,998,999,999,998,998,998,997,996,995,996,997,996,998,998,999,998,1000,996,1000,997,999,999,999,999,998,995,996,995,998,999,999,999,999,999,999,1001,997,999,999,998,999,998,1007,995,993,996,997,998,998,997,999,1001,998,1000,999,998,998,997,996,996,997,998,998,998,999,999,1000,999,1005,996,995,997,998,998,996,996,996,997,998,998,999,999,999,998,999,999,999,1000,998,999,998,997,996,996,997,996,999,999,999,999,1000,1002,1000,998,998,998,998,997,996,996,997,998,998,997,999,999,999,999,1001,998,998,998,999,998,998,996,995,996,998,997,999,999,1000,1000,998,1003,997,998,999,999,998,999,997,998,997,997,997,999,998,999,999,1000,1000,998,998,999,998,997,995,996,997,997,998,998,999,999,999,1000,1006,997,997,997,996,998,998,999,996,997,997,998,998,999,999,998,998,999,999,998,998,999,999,999,997,997,997,997,997,999,998,1000,1001,1002,1002,996,996,998,998,997,996,995,998,998,999,999,999,998,1000,1000,1000,998,997,997,999,999,997,996,997,996,998,999,999,999,998,1000,999,1001,998,998,998,998,998,997,997,997,997,998,998,999,999,1000,999,1000,999,998,998,998,998,996,996,996,997,998,998,999,998,1000,999,999,1001,1000,998,998,998,998,998,996,997,997,998,998,998,997,1000,998,999,1003,998,998,999,998,999,999,997,996,996,997,998,998,999,999,999,999,999,997,998,998,998,997,995,997,997,998,998,998,1000,999,999,998,1001,999,998,997,999,999,998,997,997,997,998,999,999,1000,998,999,999,1001,997,998,999,998,998,1000,997,995,997,997,997,999,1000,998,999,1001,1003,999,998,998,998,996,996,996,997,997,999,1000,999,999,999,999,998,997,998,999,999,999,997,997,997,998,998,998,999,999,999,1000,999,998,999,998,999,999,999,1000,996,996,996,998,1000,999,999,999,1000,1000,1000,998,998,998,997,997,996,997,997,998,999,999,999,999,999,1000,1000,995,995,996,997,997,997,996,995,996,997,998,998,997,999,999,999,1001,999,996,997,999,998,998,997,997,998,999,998,998,999,1000,999,999,998,998,998,999,999,996,996,996,998,999,999,997,999,999,999,997,1003,998,998,998,997,998,997,996,995,997,999,997,999,999,996,997,997,1000,997,996,997,998,998,998,996,996,998,998,997,999,999,999,999,999,1000,998,998,998,998,996,996,997,998,998,998,999,999,999,999,999,1000,998,998,999,999,998,998,997,996,998,998,998,999,997,998,999,999,1000,999,999,997,999,999,997,997,997,997,998,999,999,999,999,999,999,999,998,999,998,998,997,997,1000,997,997,996,998,999,999,999,1000,1005,996,997,997,998,998,996,998,997,997,997,999,998,999,999,999,999,1001,998,998,999,998,998,999,997,996,997,998,998,999,997,999,999,1000,1001,998,997,998,998,996,996,997,996,996,998,1000,998,998,999,1000,1003,997,995,997,997,999,998,999,996,996,997,998,997,999,1000,1002,999,1000,995,995,996,996,997,994,994,995,995,998,998,998,997,999,999,1001,1000,998,998,998,998,998,996,996,998,997,998,998,999,999,999,998,1000,998,998,997,999,999,999,998,996,997,997,998,998,999,998,999,999,1000,999,998,998,998,1000,994,996,996,998,997,999,999,999,999,999,1000,998,997,999,999,1000,997,996,997,998,998,997,999,999,999,999,999,999,999,997,999,999,1000,999,996,995,997,998,998,999,999,999,999,1000,1000,999,1000,995,996,998,993,995,997,997,998,997,999,998,998,1000,999,1000,1000,999,998,999,997,996,997,997,998,998,997,999,999,999,999,1001,999,998,998,999,998,996,997,997,997,998,998,998,999,999,999,998,999,999,999,999,998,998,996,997,997,998,998,999,999,999,999,999,1001,1001,998,998,998,998,997,996,997,997,998,998,998,999,999,999,999,999,999,998,999,999,1005,996,993,995,997,998,998,998,998,998,1000,1000,1000,999,1001,999,998,1000,996,996,997,997,997,998,999,999,999,999,999,998,998,999,999,998,996,996,997,997,998,998,999,998,999,997,997,998,998,999,998,998,999,996,998,1001,994,995,997,997,997,998,998,998,997,999,998,998,998,999,996,997,997,998,998,998,999,999,999,999,999,999,998,998,998,997,996,996,997,998,998,998,997,999,999,1000,999,1000,999,998,999,998,998,1022,971,988,994,996,997,998,998,998,999,1000,999,998,998,1000,999,998,995,995,996,997,997,999,999,999,999,998,1000,1000,997,997,998,999,997,995,997,998,998,999,999,999,999,999,999,1000,997,999,997,999,999,997,1001,996,997,997,998,997,999,999,998,1001,999,998,998,998,998,998,997,996,996,996,998,998,999,999,999,1001,1000,997,998,999,998,998,996,996,997,998,998,999,997,999,999,999,999,1000,997,997,998,998,998,997,1000,996,996,997,998,998,999,999,1000,999,998,998,999,998,998,998,996,996,995,998,998,999,999,999,1000,999,999,999,998,997,998,999,996,996,996,998,998,999,999,999,1000,1000,999,999,997,998,999,998,999,997,1001,994,995,996,997,998,998,998,999,999,999,998,998,998,999,998,998,996,998,997,998,998,999,1000,999,999,999,1001,997,997,998,998,995,996,996,996,999,999,999,999,999,998,999,1004,999,997,997,998,998,996,1000,997,996,999,999,1000,999,999,1000,1008,1013,993,988,987,988,993,985,989,991,994,996,997,998,998,999,997,1000,1005,994,993,995,996,994,994,995,996,997,998,998,999,999,999,1000,1005,1000,997,997,997,997,996,996,995,996,997,998,999,999,999,997,999,1000,997,999,999,998,999,995,996,996,997,997,999,1001,1006,1000,1015,1398,1831,1344,1184,1258,821,727,277,2001,1539,1944,1706,1063,1075,864,1203,1430,1324,518,998,1261,1052,1520,1682,1537,1089,634,948,1010,796,1009,1298,2061,1368,1203,728,712,357,865,843,1019,427,539,1085,861,808,1087,1027,1463,968,1298,1538,1129,1215,1005,1233,789,187,889,1072,1011,1109,456,487,890,695,386,1144,709,914,737,1155,981,975,1093,499,460,921,609,862,1064,873,1051,1240,1489,853,1080,652,545,734,672,789,776,1557,1553,981,1319,1173,1379,1313,1244,1126,970,983,995,762,385,908,862,987,1057,970,1108,437,1068,547,1371,822,1000,1351,1263,922,584,715,577,654,749,801,854,897,921,944,961,971,1736,2115,1354,1453,2547,17012,1003,681,631,1218,1078,1321,678,1162,1550,1356,760,1072,965,1056,952,978,1078,1246,1051,1032,1080,1076,1063,1058,1739,1189,1162]},"stackTable":{"length":2078,"prefix":[null,null,1,2,3,4,5,6,7,8,9,10,null,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,19,34,35,36,37,38,39,40,18,42,43,44,45,46,47,48,49,50,51,49,53,54,55,56,57,58,59,60,42,62,63,64,65,66,null,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,80,82,82,86,87,82,69,90,91,92,93,82,81,79,97,98,99,100,101,102,80,80,81,82,82,86,109,82,77,112,113,114,115,116,117,118,119,120,121,122,115,124,82,82,82,86,90,130,131,132,133,82,82,null,137,138,139,140,141,142,143,144,145,146,147,148,68,150,151,152,16,154,155,156,157,158,159,160,161,162,163,164,165,166,167,166,169,170,171,172,173,174,164,176,177,178,179,179,181,182,179,184,179,179,187,null,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,null,208,209,210,211,212,213,214,215,216,217,68,219,220,221,222,223,224,225,208,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,228,243,244,245,246,247,248,249,250,251,252,253,254,254,256,256,258,251,260,261,262,263,264,263,266,null,268,269,270,263,272,263,274,275,276,243,278,279,280,279,282,283,284,285,286,287,288,289,290,284,292,293,294,295,296,297,298,283,300,301,302,303,304,305,306,307,308,283,310,311,312,313,314,315,316,317,318,319,320,321,282,323,324,325,283,327,328,329,330,331,332,333,334,283,336,337,338,339,340,341,342,343,282,345,346,279,348,349,350,351,352,353,354,355,356,357,358,359,360,357,362,363,364,365,null,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,374,389,390,391,392,393,394,395,374,397,398,399,400,401,402,403,352,405,406,407,408,409,410,411,412,413,414,415,416,417,415,419,420,421,422,407,424,425,426,427,428,374,430,431,432,433,434,435,436,437,438,348,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,null,456,457,458,459,460,461,462,463,null,465,466,467,468,469,470,471,472,473,474,475,476,456,478,479,480,481,482,483,484,485,486,487,488,489,456,491,492,493,494,495,496,497,498,499,500,501,492,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,null,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,528,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,539,560,561,562,563,564,565,566,567,539,569,570,571,572,573,528,575,576,577,578,579,580,581,582,583,584,528,586,587,588,589,590,591,592,593,594,595,592,597,587,599,600,601,528,603,604,605,606,607,608,609,610,528,612,613,614,615,616,528,618,619,620,621,622,623,624,625,626,618,628,629,630,631,632,633,634,635,636,637,638,528,640,641,642,643,644,645,646,647,648,649,650,651,652,653,640,655,656,657,658,659,660,661,662,528,664,665,666,667,668,669,670,664,672,673,674,675,676,677,678,679,680,681,682,683,684,525,525,687,688,689,690,519,692,693,694,695,null,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,697,714,715,716,717,718,719,720,721,722,723,724,null,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,null,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,null,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,null,783,784,785,786,787,788,789,null,791,792,793,794,795,794,797,792,799,800,801,802,803,794,805,797,802,808,809,810,811,812,813,814,815,816,817,805,805,797,805,795,795,797,805,795,795,797,797,797,805,795,797,813,797,805,794,811,795,794,805,797,794,803,795,815,847,801,849,850,851,795,795,797,801,797,795,797,803,797,795,813,863,864,865,795,805,795,847,805,805,795,794,805,797,805,805,815,879,880,795,797,805,794,885,797,795,810,817,797,797,801,795,795,801,800,897,898,879,797,794,801,813,904,817,906,805,794,909,812,911,792,913,810,915,911,911,898,919,920,921,922,923,924,925,926,794,797,913,805,924,932,933,794,935,879,849,898,939,794,795,797,813,865,794,794,906,795,915,813,951,939,922,954,955,800,794,813,795,811,898,913,805,897,965,966,805,924,969,817,971,803,797,794,816,904,803,805,904,805,805,805,803,984,985,986,987,954,989,990,991,992,801,797,810,996,997,998,797,921,1001,1002,1003,1004,909,801,922,1008,913,794,795,955,null,1014,971,797,913,911,885,797,1021,813,795,921,795,805,813,879,1029,797,904,794,797,880,909,1036,915,805,1039,817,851,797,809,794,794,800,879,805,813,850,847,851,801,880,795,879,1057,794,808,885,1061,815,805,879,805,801,803,812,998,935,865,811,794,795,794,906,971,849,801,795,801,904,1083,797,803,879,794,879,989,1090,794,991,802,805,939,851,812,803,864,863,805,998,805,1083,879,997,802,922,794,1039,1111,805,794,879,865,794,805,879,794,794,904,971,813,817,906,904,812,794,971,794,850,898,797,795,812,803,797,971,795,794,998,1142,997,998,915,987,1147,922,1149,800,1151,805,904,1003,864,810,847,933,1159,971,879,904,795,906,1165,906,1167,851,1083,805,805,797,813,797,794,801,795,913,795,813,925,997,805,797,906,795,797,805,879,795,812,1192,1147,810,1195,805,913,797,795,794,810,805,795,913,813,879,805,865,805,813,797,850,794,913,795,939,813,795,794,794,797,971,813,795,1149,802,805,898,801,998,795,797,971,851,795,801,906,1008,795,805,795,797,794,794,989,1246,797,805,797,863,794,null,1253,1254,1192,795,797,813,1259,746,1261,1262,1263,1264,1265,745,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,745,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,770,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,850,951,797,922,913,1315,794,811,885,913,805,849,813,797,805,797,803,805,797,794,971,913,801,797,805,879,801,794,849,1008,991,880,797,801,879,801,904,810,851,1349,794,794,813,1353,1354,1355,850,808,879,811,971,794,1142,992,906,925,849,797,797,986,1008,1371,879,897,904,805,805,812,794,794,795,1195,885,864,805,795,795,797,966,1389,797,879,801,805,955,801,1192,989,1398,898,794,913,795,811,811,813,803,865,797,805,805,794,913,810,801,801,939,1417,1418,1419,1420,1421,794,1192,797,794,971,849,800,797,966,811,1432,801,997,1435,851,795,795,1002,1440,851,797,797,906,879,849,913,811,794,794,803,794,794,802,null,1456,1457,1458,1459,1460,1461,1462,1463,1457,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,null,1477,1478,1479,1480,1481,1482,1483,1484,15,1486,1487,1488,1489,1490,1491,1492,1493,1494,1486,1496,1497,1498,1499,1500,1493,1502,1503,1487,1505,1506,1507,1508,1509,1510,1486,1512,1513,1514,1515,1516,1517,1518,1519,1487,1521,1522,1523,1524,1525,1526,1486,1528,1529,1530,1531,1532,1533,1534,1486,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,15,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1542,1554,1569,1570,1492,1572,1573,1574,1538,1576,1577,1578,1515,1580,1581,1582,1583,1584,1487,1586,1587,1588,1589,1590,1533,1592,1593,1594,1533,1596,1597,1598,1533,1600,1487,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1486,1617,1618,1619,1620,1621,1622,1623,1624,1625,1487,1627,1628,1629,1630,1631,1632,1606,1634,1635,1498,1637,1638,1639,1635,1641,1493,1583,1644,1645,1646,1635,1554,1649,1650,1512,1525,1653,1654,1655,1656,1533,1658,1659,1637,1661,1639,1663,1487,1665,1666,1667,1668,1669,1499,1671,1532,1619,1674,1675,1576,1677,1524,1679,1680,1681,1508,1683,1663,1685,1604,1687,1688,1689,1690,1691,1634,1693,1694,1695,1696,1697,1694,1699,1700,1701,1487,1703,1704,1705,1706,1707,1708,1709,1533,1711,1712,1713,1714,1621,1716,1487,1718,1719,1720,1721,1722,1487,1724,1725,1726,1727,1728,1729,1621,1731,1486,1733,1734,1735,1736,1726,1738,1739,1740,1497,1742,1588,1744,1745,1604,1747,1748,1749,1493,1498,1752,1705,1754,1755,1498,1757,1758,1759,1760,1761,1726,1763,1764,1765,1766,1767,1768,1499,1576,1771,1772,1773,1774,1766,1554,1777,1515,1493,1780,1781,1766,1783,1784,1492,1786,1787,1561,1789,1790,1667,1792,1793,1569,1512,1796,1797,1798,1799,1523,1801,1802,1803,1532,1671,1806,1807,1620,1809,1810,1811,1812,1813,1814,1815,1604,1817,1736,1576,1757,1490,1638,1823,1824,1825,1530,1827,1828,1829,1830,1831,1667,1729,1834,null,1836,1530,1838,1839,1840,1841,1551,1843,1620,1845,1846,1847,1848,1849,1850,1828,1532,1853,1854,1855,1856,1857,1553,1859,1860,1861,1862,1492,1814,1865,1866,1867,1727,1869,1870,1871,1872,1561,1874,1875,1538,1877,1878,1879,1576,1881,1882,1883,1884,1635,1542,1887,1888,1889,1890,1891,1538,1893,1494,1895,1487,1897,1898,1899,1900,1901,1902,1903,1772,1905,1744,1907,1908,1909,1910,1545,1561,1913,1914,1915,1916,1914,1918,1919,1920,1921,1922,1919,1924,1918,1926,1927,1928,1929,1930,1918,1932,1933,1918,1935,1936,1937,1937,1936,1918,1941,1942,1943,1944,1754,15,1947,1948,1949,1950,1695,1871,1953,1954,1955,1798,1957,1958,1959,1960,1961,1542,1963,1964,1965,1966,1967,1814,1969,1783,1569,1972,1877,15,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1975,1989,1990,1991,1992,1993,1994,1995,1996,1997,1975,1999,2000,2001,2002,2003,2004,2005,2006,2007,1975,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2011,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2021,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2045,2050,2051,2052,2053,2040,2055,2056,2011,2058,2059,2060,2061,2062,2063,2064,2065,2066,13,2068,2069,2070,null,2072,2073,null,2075,2076],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,6,24,25,6,26,6,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,21,22,23,6,24,42,43,44,25,6,26,6,45,8,46,47,48,49,50,51,52,53,54,55,56,57,21,22,23,6,24,25,6,26,6,27,28,29,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,5,6,7,73,74,48,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,15,16,108,109,110,111,112,113,55,114,115,116,117,114,115,118,119,108,109,120,121,122,52,53,123,124,125,126,127,128,129,130,131,132,133,134,135,93,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,157,157,158,157,159,157,159,157,157,158,160,161,162,163,164,165,166,167,168,169,170,171,172,65,173,102,174,175,176,177,178,179,180,57,21,22,23,6,24,25,6,26,6,45,181,182,183,184,21,22,23,6,24,25,6,26,6,27,59,28,185,29,98,83,84,85,86,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,217,218,219,226,227,228,229,230,231,232,217,218,219,233,234,235,236,237,238,239,240,241,242,243,244,245,246,217,218,219,220,247,248,249,250,251,217,218,252,253,247,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,183,200,201,257,258,259,260,261,262,263,264,265,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,212,213,292,293,294,289,290,291,212,213,295,296,297,298,299,300,301,302,209,210,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,289,280,281,282,283,284,285,321,259,260,322,323,324,325,326,327,328,166,167,168,169,170,171,329,330,331,332,333,334,335,336,337,53,123,124,125,126,338,278,279,280,339,291,212,213,340,331,332,341,342,343,22,23,6,344,345,346,44,347,348,349,350,351,352,353,354,355,51,356,357,358,359,360,361,362,363,364,51,52,53,123,124,125,126,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,282,283,383,384,385,386,387,388,389,390,391,392,393,391,392,394,395,396,397,398,399,400,401,274,275,402,403,404,405,406,407,408,409,410,411,412,404,405,413,414,415,416,417,405,413,418,419,420,421,93,136,422,423,424,405,413,418,419,420,421,93,136,425,426,427,428,429,430,431,432,433,387,434,435,419,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,93,452,453,387,434,435,419,425,454,454,454,455,456,457,458,459,460,387,434,435,419,425,461,456,462,463,464,451,465,466,460,387,434,435,419,425,467,468,469,470,471,472,473,474,475,476,477,405,413,418,419,425,478,456,462,463,464,451,93,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,353,354,355,51,52,53,123,124,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,503,504,505,521,522,508,509,510,511,523,524,525,526,527,528,529,530,531,518,519,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,502,503,504,505,506,522,508,509,510,511,550,551,552,553,554,555,556,537,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,562,588,589,589,590,591,592,593,592,594,573,572,562,595,586,591,596,597,594,598,589,599,600,601,602,603,604,605,606,607,570,608,587,608,609,572,573,585,610,602,611,612,613,614,615,586,587,616,617,588,564,590,618,602,591,594,593,619,620,621,599,622,592,623,624,588,625,626,627,628,590,629,630,564,631,632,633,634,635,636,637,638,639,640,641,642,643,644,624,645,646,647,648,649,650,651,652,574,575,576,577,653,581,619,620,621,654,630,655,608,582,583,627,656,657,658,659,569,570,660,661,662,663,664,665,666,667,628,621,668,669,670,578,671,650,672,673,674,675,676,677,678,611,679,606,680,662,603,604,681,682,683,684,685,686,687,688,689,690,636,675,691,692,693,694,695,696,579,580,581,619,697,698,689,699,700,701,640,675,699,700,701,702,703,704,705,706,707,708,709,710,621,711,712,713,714,715,716,717,718,719,720,721,626,689,722,723,724,703,725,726,727,728,729,730,731,732,718,719,733,734,735,736,737,738,739,740,599,741,680,742,688,743,744,593,745,703,746,747,730,748,749,750,751,752,753,754,755,756,704,757,758,759,714,760,761,762,763,764,662,765,702,766,611,767,768,769,770,668,669,771,772,773,774,775,776,777,776,778,779,780,781,630,703,697,782,634,758,783,784,785,622,786,787,788,789,714,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,780,805,806,807,808,809,774,810,702,811,812,813,814,815,816,817,818,819,820,821,822,640,823,824,825,641,797,826,827,828,829,830,831,832,833,834,811,835,710,829,836,643,837,838,821,839,840,841,842,843,829,844,845,846,821,684,847,848,671,621,849,850,851,852,853,854,854,855,856,844,844,857,858,859,860,861,628,862,863,864,865,866,684,767,867,808,868,869,852,870,871,872,873,874,808,875,876,877,878,879,880,881,636,882,883,884,852,885,879,860,886,887,639,884,710,840,840,888,889,619,890,891,732,892,721,893,873,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,401,274,275,914,915,916,917,918,919,920,921,922,274,275,923,924,925,517,518,519,520,503,504,505,506,507,508,509,510,511,926,927,846,597,928,929,930,931,657,932,661,933,934,935,854,774,936,846,937,938,939,940,941,885,863,942,943,944,945,946,749,650,616,947,948,949,950,951,692,952,953,954,955,956,957,958,959,960,961,962,963,964,703,965,966,967,968,969,892,970,702,703,971,972,973,974,975,976,977,978,979,814,704,980,879,863,750,872,607,570,722,842,981,872,814,982,650,893,873,983,984,985,722,986,987,988,989,990,750,616,991,992,993,994,995,996,692,693,694,695,815,997,998,814,661,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,683,974,585,1008,1010,1011,1012,805,1013,965,1014,1015,1016,1017,1018,734,1019,1020,1021,1022,524,525,894,895,896,897,898,899,900,1023,1024,1025,1026,1027,1028,1029,1030,1031,274,275,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,401,274,275,1103,1104,1105,1106,1107,52,53,123,124,125,126,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,366,1131,1132,1133,1134,1135,1136,1137,1138,274,275,1139,1140,274,275,1141,1090,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1109,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,401,274,275,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1066,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,274,275,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1250,1265,1266,1267,1268,1269,1270,1271,1272,1263,1273,1274,1275,1276,1066,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1189,1190,1191,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,357,1305,1306,1058,1307,1308,1309,1310,1311,1312,1313,1314,1109,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1096,1097,1098,1099,1334,1335,275,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1117,1356,1357,1358,1359,1360,1361,703,1362,1363,1029,1030,1031,274,275,1364,1365,1366,1367,1368,274,275,1369,1370,1371,1372,1373,1374,1375,1248,274,275,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1350,1391,1392,1393,1029,1394,1395,274,275,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1189,1190,1191,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,102,103,104,105,1428,93,136,1429,1427,102,1430,1431,1432,1433,282,283,284,285,1434,1435,1436,1437,1438,1439,1440,1441,1442,1164,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,274,275,1454,1090,1455,1456,1457,1458,1459,1460,1461,1462,502,503,504,505,521,522,508,509,510,511,1463,1464,1465,1466,1467,1468,1441,1442,1164,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1090,1491,1492,323,324,325,326,327,328,166,167,168,169,170,171,1493,343,22,23,6,344,1494,84,1495,1496,1497,1498,1499,1500,485,1501,1502,1503,1164,1504,345,346,44,1505,1506,343,22,23,6,344,345,346,44,1507,1508,1509,1510,1511,1512,1513,1514,1515,1513],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["0x7fa1ca74fb0b","ld-linux-x86-64.so.2","0x1d047","0x1e35d","0x1c9f5","0x1ff7e","0x2d27","0x1522","0x28bc","0x9227","0x15174","0x149fd","0x1480e","vulkan-test","0xf20e4","libc.so.6","0x2a14a","0x2a087","0x11558e","0x11355d","0xf2b5a","0xf214e","libSDL2-2.0.so.0.3000.3","0x1ab0e","0x11f2f3","0x931ae","0x92be2","0x1678","0x930f3","0xc903","0xc49f","0xd005","0xef86","0xaa8d","0x9e67","0x11f253","libdbus-1.so.3.32.4","0x1a500","0x19087","0x17856","0x31667","0x31367","0x3113b","0x171c4","0x1acca","0xca196","0x1125a5","0xc90a","0x154df","0x2363b","0xcd7b","0x1524b","0xbb5c","0x2357c","0xca238","0x117791","libwayland-client.so.0.22.0","0x871a","0x5a4b","0x57a2","0x4de6","libvulkan.so.1.3.283","0x2f6cb","0x29701","0x1def6","0x9fe9","0xe898","0x9e33","0xa0fa","0x9c2e","0x24dde","0xa059","0x1db39","0xaa77","0x82194","0x8da55","0x8ffff","0x9e46","0xa9b3","0xcde4","0x8fbf","0x788b","0xeebc","0xefac","0xa9be","0xa068","0x9e81","0x9d12","0x24d66","0x9dbd","0xc4fb","0x15c1","0x552c","0x5436","libLLVM.so.18.1","0x426205","0x516db6","0x52d993","0x52d7b6","libstdc++.so.6.0.33","0xb84c5","0xa99bb","0xa7cb3","0xa737f","0x46c50f","0x2842670","0x9e14","0xa0b0","0xa0bc","0x9be5","0xab14","0x8276f","0x8f7df","0x8e552","0x10dc4a","0x9e3d","0x9dde","0xf2ba2","0xf2726","0xcd453","0xceeca","0x11836a","0xd6fda","0x2967f","0x1a6b7","0x1962a","libvulkan_intel_hasvk.so","0x18d404","0x196a9","0x18d3ef","0xcd6da","0xcbbd6","0x111da5","0x4f2d","libffi.so.8.1.2","0x84ed","0x569f","0x9055","0x10ce2f","libxkbcommon.so.0.0.0","0x1fbd0","0x1b6ef","0x151a1","0x1b702","0x1a82b","0x1979f","0x189af","0x1191c","0xa7333","0x10cfb2","0x9eaf","0x3c36","0x3b6f","0x2015c","0x202e7","0x1493e","0x17f4fc","0x20805","0x148d0","0x20263","0x2016f","0x444b","0xf4ab4","0x1199b4","0x2fa84","0x29a32","0x1ee58","0x1d49a","0xab9e","0x96da","0x981e","0x98d2","0x938f","0x110163","0xf4359","0xf4fae","0x11a230","0x166946","0x155805","0x1a6c58","0x11a197","0x1668a7","0x1af0c0","0x10e7bd","0x29650","0xaab0","0x8f86b","0x90933","0x815b0","0x109a0b","0xf46aa","0xf576b","0x31057","0x8e79","0x26144","0x318da","0x2219c","0xaa93","libVkLayer_khronos_validation.so","0x9fe6de","0x8c5174","0x9fe7ab","0x528263","0x4c7c22","0x4af7a7","0x4a8ba7","0x33ac3f","0x9fe823","0x235a6a","0x9fe8be","0x3f57c","0x2fe23","0x2fd7a","0x21e7f","libVkLayer_MESA_device_select.so","0x3805","0x3b4d93","0x38e889","0x3b5f2f","0x25842","libvulkan_freedreno.so","0x9eee3","0x30f34a","0x1b86b6","0x9c8f8","0x9c88a","0x1b85bd","0x4240f","0x10dcab","0x30f2be","0x30d675","0x30d425","libexpat.so.1.9.2","0xee2e","0x254e","0xc9c5","0xb438","0x449f","0x6acea","0x40473e","0x402ad5","0x402885","0xb80e","0x6efd","0x113d2","libvulkan_intel.so","0xa5b8a","0x5b663e","0x5b49f5","0x5b47a5","0xb5cc","0x6f11","0x6ace","0x56c3","0x556c","0x2398","0x25dfb","libvulkan_lvp.so","0x9652e","0x303981","0x30330c","libvulkan_nouveau.so","0x1ff36a","0x6288fe","0x6268f5","0x6266a5","0x4496","libvulkan_radeon.so","0x13dea0","0x5006be","0x4fea75","0x4fe825","0xad8e","0x8893","0x25cd2","0x4fc4b2","0x4fbce4","0x3b6e30","0x825ae7","0x4cb8cd","0x2821c","0x27a3a","0x1f9e11","0x1f9291","0x1f916f","0x141741","0x19b3d4","libdrm_amdgpu.so.1.0.0","0x7a17","libdrm.so.2.4.0","0xb6db","0x7bf2","0x108cab","0x7fcc","0x7182","0xb37e","0x7faf","0x116d2d","0x19b548","0x1fcc6a","0xbf1f","0xbc59","0x7b39","0x71e7","0x821a5","0x8deb4","0x8dcfe","0x10d395","libvulkan_powervr_mesa.so","0xae251","0xad6e8","0x43842","0xc02f","0x7698","0x6f7c","0x1cf291","0x1ce6d1","0x1ce570","0x96691","0x95b28","0x9a097","0x98a32","0xd614d","0xd61ec","0x37818","0x29f81e","0x12048e","0x11fcef","0x11e4a4","0x9dee1","0x11fdfd","0x11f9c9","0x11f552","0x116813","0x4130e0","0x99f47","0xd5f1a","0x37e08","0x96605","0x3036b7","0x303262","0x18d6d1","0x18cba1","0x18ca40","0x825b79","0x28160","0x23069","0x44c36","0x11bcb1","0x16782c","0x1af7c0","0x2162f4","0x110330","0xf80aa","0xf8370","0x11c547","0x325b2","0x44e8","0x4bbc","0x8c47","0x11d1bb","0x4a81","0x717f","0xf81ab","0x327d2","0x1b524","0x92925","0x267a","0x2024","0x157f9","0xf82c7","0xf8aad","0x102701","0x102db0","0x11ec4b","0x40699d","0x4e85ab","0x1aad11","0x1aa727","0x752b","0x10d67d","0x102b55","0x103050","0x11f01b","0x406e5c","0x4e8736","0x1aaa21","0x1aa8dc","0x1a824b","0x11726c","0x1103af","0xf9e09","0xfa228","0x11d7a6","0x32bb2","0x1fa93","0x23e64","0x3ae86d","0x26f3c","0x11f2c1","0x8ca58","0x8c1eb","0x8bf75","0x14f586","0x13e62b","0x140062","0x8ddac","0x10eac2","0x8ca7e","0xa50ad","0x14a993","0x14a7d0","0x149694","0x148e15","0x1ef9b9","0x1ef366","0x1490ff","0x148b51","0x16b518","0x169f9a","0x167bb3","0xf526b","0x196d52","0x5848","0xb3bf","0xa6031","0xa3366","0xa1cde","0x15471d","0x15295e","0x14dd09","0x14d45e","0x14b5af","0x4fdeb0","0xa6104","0xa3eb8","0x152983","0x150000","0x8cadc","0x91f1d","0x904de","0x1500a7","0x1ece9e","0x341129","0x266d8c","0x8cb0a","0x9653f","0x939f6","0x341486","0x33fde6","0x93a0c","0x27000d","0x26fabf","0xa835a","0x8cb19","0xa001f","0x9fcaa","0x14a631","0x148a11","0x34117b","0x33e428","0x8cb42","0xaf5a3","0xadae7","0x8cfa5","0x2a8c14","0x2a0bf0","0x8cb6b","0x181e3e","0x17aa0e","0x2a845f","0x2a08d7","0x2a0706","0x26fdc4","0x26fd6c","0xa7397","0x182190","0x33f964","0x33f14b","0x26c6ce","0x26c267","0x8cb97","0xb85b8","0xb8254","0x33ef59","0x26c2f2","0x26c020","0x26ff41","0xa7d77","0xb860f","0x33f392","0x266f60","0x8cbad","0xbbebd","0xb9be7","0x8ced8","0x270232","0x276ec7","0x8b972","0x653d4","0xbba05","0x33faf3","0xa704d","0x3aeeb9","0x3afb58","0x39b6e6","0x387d4e","0x4af2a6","0xa8323","0xf9fc6","0x1002ba","0x2ccec","0x40adc","0x17f517","0x11042e","0x10391f","0x104b80","0x11f748","0x4126c4","0x34b40a","0x348b1f","0x55eb","0x37c9","0x103fed","0x10510c","0x119174","0x165949","0x1ad287","0x16555d","0x1aa4ae","0x21236e","0x25df5d","0x20dc61","0x2569b0","0x290f22","0x11073b","0x107531","0xf8dae","0xf9348","0x11d16a","0x166c6c","0x117ccf","0x164272","0x1acc7b","0x1aa5c6","0x2125f7","0x110d2a","0x10e503","0x10d049","0x10b8a6","0x10bc25","0x124246","0x135118","0x19eb9a","0x20d08c","0x1ac860","0x21471d","0x14e5d6","0x1a35da","0x11bf1e","0x33ac30","0x16e27e","0x1e76e1","0x224fbc","0x27b733","0x2a8f5c","0x2a8eb6","0x2a8d74","0x2a808d","0x2a7b40","0x2a78cb","0x2a7143","0x1a3c6c","0x126b54","0x16f609","0x1e80e7","0x184ac7","0x186448","0x1f833a","0x20d140","0x16f66f","0x1e822b","0x2255f4","0x27c66f","0x2abfd2","0x2ce6f5","0x2abf2e","0x2ce532","0x225500","0x27c482","0x2aa91a","0x2cdf5c","0x2fb386","0x30f8f1","0x2abe90","0x2ce69c","0x2ce6e1","0x2fb475","0x30f95f","0x3160ed","0x31ac7f","0x2a868a","0x2cb56f","0x2fa7f4","0x2cb4a8","0x2fa690","0x30d700","0x315ff9","0x2ce626","0x2ce528","0x2ce521","0x2ce619","0x2ce65a","0x2ce73a","0x2ce4b2","0x2ce585","0x2ce6fe","0x2ce5e2","0x2faa8a","0x2aba9c","0x2a8368","0x2ab83c","0x2ce6f9","0x2ac028","0x30f853","0x2ce52e","0x2fa64b","0x2b93b5","0x2ce168","0x2fb56c","0x30fa47","0x2ce5bf","0x2cdf13","0x30f453","0x2ce5c6","0x2fa87b","0x20f4ea","0x258522","0x1a39aa","0x2ce475","0x2b93a2","0x2abe7a","0x2fa69c","0x30d987","0x33ab96","0x2ce62d","0x2ac163","0x2ce7d1","0x2ce5e9","0x31ac84","0x315fe8","0x2ce4f2","0x2cdf19","0x2ce52a","0x2cdf68","0x2aa73e","0x2cdbf8","0x2fb38c","0x30d90c","0x2ce500","0x2abc69","0x2cdfda","0x2fa773","0x2a7411","0x31601b","0x3173b6","0x2ce589","0x2ac1fe","0x2cb51b","0x20f423","0x225556","0x27bb8b","0x31ac6e","0x33ab9c","0x20f405","0x20f43d","0x2a83f5","0x2aba09","0x27bb81","0x2ac2a3","0x2ce7dd","0x30da82","0x2fb5f8","0x2abb68","0x2ce5b0","0x2ce5ed","0x2fa977","0x1a39b6","0x2abaa3","0x2ac130","0x31734e","0x2fa8f6","0x20f526","0x30f837","0x2cb549","0x2aa746","0x2aba28","0x2fa751","0x2ce6f1","0x2a869a","0x2fb351","0x27bc37","0x2cdcbd","0x30fa4d","0x31602b","0x318e50","0x30f4aa","0x2ce5d4","0x2abc77","0x30d6f0","0x2a73d5","0x30f44b","0x2ce53e","0x2a73b1","0x2ce6e8","0x30f46f","0x1e6e69","0x20d468","0x16cd3a","0x16d185","0x30d917","0x2ce256","0x31acb7","0x31ce61","0x31cee5","0x2a7386","0x33acb4","0x2ce7e5","0x2ce377","0x2a8439","0x2a74d1","0x27bc5e","0x2aba55","0x2ce5dc","0x130f2ef00007ffe","0x316099","0x3190f6","0x2ce763","0x27ba3b","0x20f467","0x2ce7e9","0x2ce4a5","0x2fb859","0x2fa9f7","0x2ce623","0x2ce664","0x2fa82e","0x30d863","0x2ce66f","0x2a7442","0x2ac153","0x2ce496","0x33ab82","0x2ce7cb","0x116a48","0x33abce","0x316013","0x30f4ae","0x2ce604","0x3160f6","0x2ab934","0x2abb36","0x2aa405","0x30d855","0x2faa8e","0x2b93fc","0x2ce16e","0x33ab90","0x30d8e7","0x2ac2b0","0x30f968","0x116a40","0x2fa65d","0x2ce6a6","0x30d94b","0x2ce581","0x2cdf9b","0x30f831","0x2cb5f3","0x2a7378","0x1a39a8","0x2a869e","0x2abaf0","0x2abe84","0x317068","0x318e80","0x2fb62e","0x2cdf62","0x2ce1da","0x33aca4","0x30f488","0x30d736","0x2ac104","0x30d8a9","0x2ac20b","0x2fa667","0x2fb476","0x2ce553","0x30f875","0x30f48f","0x2cb534","0x258517","0x20f4e6","0x2ce464","0x2a73ef","0x31ceb1","0x2ab697","0x2fb83b","0x116a5b","0x2aba32","0x30d8c7","0x1a39af","0x2abd1a","0x30da57","0x2abe6d","0x2ac170","0x2a73dc","0x318e6c","0x2fa8d6","0x316046","0x31709b","0x2a7360","0x2cb5da","0x2aba2b","0x318e54","0x2ab90e","0x30fa43","0x2fb37a","0x2ce736","0x2cb574","0x30f839","0x2ce698","0x318f8e","0x2abd3e","0x33acbd","0x31cef3","0x2a752b","0x33abc6","0x16d257","0x1e47e7","0x2a846d","0x2a7548","0x2aa426","0x27bd70","0x2ce6ed","0x2a74a0","0x25856e","0x31ad3c","0x2b939b","0x318e9a","0x30da89","0x2a7524","0x2ce6d4","0x3170b5","0x31cdf5","0x31732e","0x33aac1","0x30f495","0x2ce437","0x2fa778","0x2abb82","0x2ce04b","0x27bbfd","0x2ce60b","0x2fa781","0x30e2db","0x31cef8","0x2ce60f","0x3170a2","0x2ce648","0x30d9a6","0x2ce5bb","0x1e4a84","0x31acae","0x33aac4","0x2ce6cc","0x27bcf7","0x2ce68a","0x2ac2b9","0x31aca5","0x27bbbc","0x2faa97","0x30d744","0x2ce5df","0x1a39c6","0x2fa8e4","0x2ce616","0x30fa9a","0x2ac045","0x27bbfa","0x2fa965","0x2abb89","0x2abab7","0x318f74","0x2fa949","0x2ce4b8","0x2a7569","0x2fb3e0","0x2fb2eb","0x2ce051","0x2a7387","0x2ce545","0x2ce6da","0x318efc","0x30f4fb","0x2ce096","0x3170c4","0x2a741e","0x2ce4b5","0x2abdf8","0x2abb3d","0x20f4c0","0x2ac211","0x30da81","0x116a50","0x2ce469","0x2fa798","0x10bb5a","0x10bfe7","0x12ca81","0x18aa3a","0x1f9d34","0x33ac4f","0x10d6a7","0x10c7fb","0x10c113","0x1081f4","0x121fe7","0x3023a","0x3d6f06","0xc9c41","0x1cd928","0xf693b","0x198d3d","0x197ccf","0x196cba","0x4572","0x10dbb5","0x10dc8a","0x12cb36","0x3bb3f0","0x4cc352","0x12051f","0x195f00","0x4d69","0xb820","0x2a6cf1","0x14f5f6","0x1a38ea","0x30fa51","0x20f528","0x27b9a2","0x27bd89","0x2ab850","0x2a836f","0x27bb87","0x2fb6ff","0x2fa968","0x2ce5cc","0x30f8f3","0x2ce691","0x2aba6b","0x319002","0x27bc0e","0x2ce10a","0x30e368","0x2ce249","0x2abb6f","0x2fb6ee","0x2a7499","0x2ce36c","0x30d7d1","0x2ce27d","0x2a74c2","0x31ac77","0x1e6da4","0x2abb9d","0x2ab8f7","0x2faa51","0x2cb4c0","0x2fa6e0","0x30f2f1","0x30f9e9","0x30f921","0x30d9cc","0x2a86a7","0x319047","0x2abafb","0x30d78b","0x31712f","0x30dada","0x2fb70e","0x2ce4bc","0x16cd40","0x30da1a","0x2cdc40","0x2a7474","0x2ce5cf","0x2ce45f","0x2cb600","0x2abd62","0x2abc4b","0x2ce64f","0x258527","0x2ce3b2","0x2cdf21","0x2fb308","0x2abb9a","0x27bcb6","0x2a8662","0x2a83a3","0x2fa9c6","0x30f4cc","0x1a39b9","0x2ce452","0x2abda7","0x27bbb8","0x31ac86","0x2ce3bf","0x2ce400","0x1e4975","0x2ab490","0x2ac218","0x318ed0","0x2fb753","0x2aa4c0","0x2ce6aa","0x30fa4f","0x2a839e","0x1a3c96","0x2cdf1d","0x31cf03","0x2a779a","0x2a7778","0x30f4db","0x2ce457","0x31725f","0x2fb6bc","0x27bc7c","0x2a8342","0x2abb08","0x2ac17d","0x2ac039","0x2ab6f6","0x2fb45f","0x110f3e","0x10c948","0x10c4c1","0x10c6c4","0x12d4fd","0x3ade98","0x1db0e9","0x1e0704","0x1e8eea","0xc5a3","0x111028","0x10fd97","0x10f438","0x1085c9","0x105a70","0x120898","0x3baf89","0x4ef563","0x9d9d4","0x1139de","0x112d15","0x112322","0x112741","0x130a69","0x3df5f2","0x1b27fc","0x1b1efc","0xed26b","0xe09e3","0x112a96","0x113294","0x12fcf6","0x3c84b5","0x6730fb","0x6b71f0","0xed365","0xd2954","0x4caaee","0x112199","0x112554","0x13072a","0x3de881","0xfb4d4","0x608fd","0x9d902","0x112d7b","0x11283f","0x10dd72","0x12cd3a","0x3c68ea","0x1a5098","0x5fcb1","0x5eaa4","0x5ea1c","0x11215e","0x1124e8","0x130663","0x3d3134","0x4f3e38","0x28e279","0x2a000e","0x112c73","0x113404","0x1300d5","0x413480","0x19fd12","0x19fee7","0x1a2572","0x108d9c","0x113015","0x10c63f","0x12d3a9","0x3b0ef8","0x4cc004","0x1e2827","0x1daaea","0x1da1ac","0x1d96f5","0x15cf3f","0x199d67","0x67fb","0x113785","0x113d4a","0x3a4b5","0x3a041","0x10a527","0x110e0a","0x8619","0x77f4","0x764c","0xa8d6d","0xa6ff4","0x1da422","0x10a51d","0x61dd","0x11d64b","0x1b0995","0x15a56a","0x37e9c7","0x37990e","0x3b0c8b","0x255343","0x2f0ede","0xcf344","0x3c6b94","0x4cc48d","0x1cfaae","0x120fb0","0x195e14","0x1121ba","0x1125c1","0x1307da","0x3d80ee","0x80917b","0x138364","0x1a22fd","0xc344","0x1a2339","0xc532","0x1a245c","0x111f95","0x1123c8","0x130463","0x3dbd2d","0x1dd911","0x1dcaab","0x10a85b","0x106cd4","0x9818a","0x966e5","0x113a17","0x112d3a","0xfabf6","0xf9a82","0x16d2f4","0x113148","0x1134c4","0x130b81","0x4085b0","0x1a04f7","0x1a9101","0x7ec6","0xa838d","0xa5afc","0x11206f","0x10c5a6","0x12d1fd","0x3d26e8","0xf60b3","0xd2fa0","0x3c6dc","0x1dcd7e","0x10ae1f","0x11cb25","0x3c8802","0x7f4cd7","0x7b0df0","0x7a06fc","0x11cdc8","0x134b14","0xedeb2","0x195ddc","0x11cd8d","0x10a4b6","0x5242","0x9a9e4","0x112901","0x76a804","0x74e03d","0x509a46","0x509a2e","0x5099ba","0x1a24f3","0x1e0949","0xa7c10","0x7f4ca2","0x83c873","0x7a0787","0xe1a84","0x1121ed","0x112633","0x1308ae","0x3e788c","0x5a3139","0x8e90a4","0x6730d2","0x6b418c","0x19ff50","0x408681","0x82f080","0x7d93a9","0x4e0b66","0x76a7d0","0x23cbea","0xc24ff","0x8d1ee","0x8d15c","0xfb561","0xe1b20","0x1191dd","0x3dbaa4","0x2836c6","0x283404","0x78678d","0x7a1e1d","0x79dd62","0x10b608","0xa80a9","0xa6f57","0xa2591","0xa1f22","0x25da34","0xa68a7","0xa28ca","0x13d294","0x1d6875","0x112302","0x1126c4","0x13099d","0x3de541","0x4e70fc","0x1cd5c3","0x1073bd","0xf6fb4","0x1a250f","0x1e919d","0xc4cc","0x1a91e8","0x52f7","0x111fe0","0x11242d","0x130515","0x3d393c","0x81136b","0x833c05","0x111f2a","0x10c2ad","0x12cfc2","0x3b096f","0x673326","0x66c82b","0x6dd660","0x1a8f91","0x112b84","0x113342","0x12ff04","0x3bfc6e","0x993841","0x3b0a62","0x673a2e","0x66ca68","0x12fccc","0x33ab58","0x3d7f3d","0x100c7b","0x3db8ec","0x28eb0c","0x28da4f","0xc1978","0xf2106","0x3c82d5","0x8579bc","0x3de29a","0x159d91","0xd2feb","0x3c82a2","0x4e046f","0x5099f1","0x3b09dd","0xc9ff8","0x10b97a","0x1cd2f9","0xf7690","0x1cd27b","0x1df7fc","0x6730bd","0x254b8a","0x251b30","0x1f466c","0x1f252e","0x105267","0xf77bf","0x10a509","0x3c6877","0xeee04","0x4caa50","0xf76b4","0x197a4d","0x198564","0x1b1f18","0x22577b","0x221c83","0x110dcd","0x7e34","0x3e7bb3","0x81703a","0x12572b","0x6d88","0x11298e","0x10de13","0x12cf31","0x3bb707","0x574e0c","0x3d32ec","0x8089f8","0x8efdb","0x9d910","0x19ff68","0x6b41d1","0x6b1a97","0x6ce434","0x1a0751","0x15c90b","0x19a76e","0x3dbc23","0xbe268","0x993830","0x2564dd","0x56f0d0","0x3df98e","0x7b059d","0x7cb1bf","0xdd73c","0x95e51","0x4134e2","0x825a28","0x825235","0x7d1045","0xb83eb","0xa7c8d","0x3e781a","0x6dd597","0x6cf280","0x3f0a97","0x412dd5","0x34c385","0x34c008","0x7a2e9d","0x9a9e7","0x113cdb","0x1a01db","0x1d044a","0x825926","0x19fd65","0x1a8463","0x1a2fec","0xc79b","0x3a0f4","0x39438","0x140a96","0xe393c","[vdso]","0xabc","0x1b1eea","0x19a7e2","0x81014a","0x765554","0x764c08","0x7c8f78","0x7c81a9","0x110dda","0x5fae","0x5ead","0x3b0f8c","0x250238","0x80270a","0x8253a","0x255208","0x2e07ca","0x2f757d","0xa7d8c","0x11cb5d","0x1da4f8","0x1e8da9","0xc729","0x3b0e84","0x800e24","0xe0ed8","0x7b4638","0x11205c","0x11278c","0x130adc","0x3dc773","0x1dd96e","0x1df8ae","0x1db8f6","0x10a873","0x1f35bb","0x33ac85","0x4f3feb","0x509a2f","0x199601","0x10a8c4","0x10e313","libwayland-cursor.so.0.22.0","0x397f","0x109694","0x10e9a7","0x3a0f","0x31eb","0x2be8","0x273b","0x26bc","0x10dae6","0x2b4c","0x33aabf","0x2f11","0x2813","0x3459","0x34ff","0x8f694","0x8f660","0x827c3","0x2ee1","0x59c704","0x113a7d","0x1151df","0x14123e","0xefa86","0xe3a53","0xa25a5","0x7c8fca","0x5e949","0xa5881","0x3bb918","0x4cc606","0x1cfb0e","0x121097","0x195550","0x117cab","0x1da565","0x1d8af5","0x1e09f6","0xc3a0","0x19a7ef","0x197984","0x6609","0x4089","0x67ffb8","0x1136e0","0x1148f6","0x1312f8","0x131adc","0x1151bf","0x13103a","0x19c5a6","0x3c933c","0x7e5800","0x7a55ba","0xa5840","0x1150a0","0x1327a3","0x19d8f1","0x32c3f","0x1afb8","0x3aa1c8","0x11c715","0x8cd6c","0x96295","0x146b62","0x1150eb","0x132863","0x19daba","0x322b5","0x363a","0x3a9d39","0x2292e","0x13e310","0x1f992d","0x1f90aa","0x14507a","0x3231e","0x29462","0x294b7","0x1db8","0x10f1","0x29ad6","0x42c9f","0x4afed2","0x4a8b24","0x4a8afc","0x9d8722","0x9d86c2","0x9d8617","0xa5956","0x32481","0x1b634","0x2a08e","0x432ad","0x431e0","0x1b217f4","0x3a30393b30303d73","0x65722e2a3a30393a","0xe4ead","0x50444c4f006b6d79","0x3b30303d7077732d"],"tid":"32425.1","unregisterTime":7358320.435097},{"frameTable":{"length":8,"address":[1160189,1160203,619782,1305973,510293,1307869,653255,605161],"inlineDepth":[0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7],"nativeSymbol":[null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null]},"funcTable":{"length":8,"name":[1,2,3,5,6,7,8,9],"isJS":[false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false],"resource":[0,0,0,1,1,1,0,0],"fileName":[null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"SDLTimer","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353006.382599,"resourceTable":{"length":2,"lib":[0,3],"name":[0,4],"host":[null,null],"type":[1,1]},"samples":{"length":7,"stack":[0,0,0,0,0,0,7],"time":[7353006.442259,7353006.453911,7353006.461174,7353006.467886,7353006.474378,7353006.48086,7353006.543737],"weight":[1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,11,7,6,6,6,62]},"stackTable":{"length":8,"prefix":[null,null,1,2,3,4,5,6],"frame":[0,1,2,3,4,5,6,7],"category":[1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b3fd","0x11b40b","0x97506","libSDL2-2.0.so.0.3000.3","0x13ed75","0x7c955","0x13f4dd","0x9f7c7","0x93be9"],"tid":"32427","unregisterTime":7358316.33167},{"frameTable":{"length":21,"address":[1160189,1160203,619782,2735323,2574815,641272,641162,2581268,1063093,1121587,1120865,1108674,2582318,2580367,2578148,646881,2580637,2579561,2579090,2547150,2536450],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":21,"name":[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"vulkan-:disk$0","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353087.884652,"resourceTable":{"length":2,"lib":[0,19],"name":[0,4],"host":[null,null],"type":[1,1]},"samples":{"length":74,"stack":[0,0,0,0,0,0,11,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,20],"time":[7353087.93761,7353087.950243,7353087.955373,7353087.960201,7353087.96478,7353087.970501,7353088.077678,7353088.221614,7353088.23577,7353088.243274,7353088.250377,7353088.257711,7353088.265776,7353088.367584,7353088.382131,7353088.392089,7353088.401927,7353088.411044,7353088.41984,7353088.44659,7353088.670202,7353088.68525,7353088.695149,7353088.704255,7353088.713172,7353088.721718,7353088.747645,7353088.841599,7353088.856136,7353088.865844,7353088.876323,7353088.886462,7353088.89641,7353088.919393,7353089.109834,7353089.126465,7353089.138197,7353089.147624,7353089.15652,7353089.165217,7353089.18861,7353089.404078,7353089.424165,7353089.436457,7353089.450223,7353089.463377,7353089.475089,7353089.49181,7353090.346949,7353090.364672,7353090.373979,7353090.394497,7353090.40703,7353090.41763,7353090.438759,7353090.527563,7353090.538453,7353090.546728,7353090.554843,7353090.562477,7353090.571083,7353090.662081,7353090.674103,7353090.683631,7353090.691906,7353090.700161,7353090.708136,7353090.772044,7353090.785729,7353090.796479,7353090.807209,7353090.817809,7353090.82946,7353090.85106],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,12,5,4,4,5,107,80,14,7,7,7,8,27,14,9,9,9,8,26,76,15,9,9,8,8,25,20,14,9,10,10,9,22,56,16,11,9,8,8,23,60,20,12,13,13,11,16,95,17,9,20,12,10,21,45,10,8,8,7,8,26,12,9,8,8,7,21,13,10,10,10,11,21]},"stackTable":{"length":21,"prefix":[null,null,1,2,3,4,5,6,7,8,9,10,6,12,13,14,12,16,17,18,19],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b3fd","0x11b40b","0x97506","libvulkan_radeon.so","0x29bcdb","0x2749df","0x9c8f8","0x9c88a","0x276314","0x1038b5","0x111d33","0x111a61","0x10eac2","0x27672e","0x275f8f","0x2756e4","0x9dee1","0x27609d","0x275c69","0x275a92","0x26ddce","0x26b402"],"tid":"32428","unregisterTime":7358303.109732},{"frameTable":{"length":28,"address":[1160203,619782,947555,8159828,8231598,907007,615992,605161,8232732,639969,605863,8232591,8169438,8169442,8169810,7869442,8231542,8169645,8158404,7996956,641272,641162,941928,-1,8170306,8157711,8079871,640160],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":28,"name":[1,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[0,0,1,2,2,1,0,0,2,0,0,2,2,2,2,2,2,2,2,2,0,0,1,-1,2,2,2,0],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"Thread <32431>","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7355112.772217,"resourceTable":{"length":3,"lib":[0,8,12],"name":[0,3,5],"host":[null,null,null],"type":[1,1,1]},"samples":{"length":13,"stack":[7,7,10,7,12,13,10,15,16,22,23,26,27],"time":[7356520.303988,7356786.269276,7357437.271536,7357637.213375,7357654.214242,7357670.671755,7357720.522005,7357753.701209,7357820.60906,7357934.983238,7358034.611676,7358117.492686,7358215.792579],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[878,1128,3363,1003,199,141,264,185,364,345,404,371,300]},"stackTable":{"length":28,"prefix":[null,0,1,2,3,4,5,6,3,8,9,3,11,11,11,14,3,11,17,18,19,20,21,null,11,24,25,8],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b40b","0x97506","libstdc++.so.6.0.33","0xe7563","libVkLayer_khronos_validation.so","0x7c8254","0x7d9aae","0xdd6ff","0x96638","0x93be9","0x7d9f1c","0x9c3e1","0x93ea7","0x7d9e8f","0x7ca7de","0x7ca7e2","0x7ca952","0x781402","0x7d9a76","0x7ca8ad","0x7c7cc4","0x7a061c","0x9c8f8","0x9c88a","0xe5f68","0xffffffff912000ad","0x7cab42","0x7c7a0f","0x7b49ff","0x9c4a0"],"tid":"32431","unregisterTime":7358301.200997}],"pages":[],"profilerOverhead":[],"counters":[]} \ No newline at end of file diff --git a/src/vulkan_renderer.zig b/src/vulkan_renderer.zig index 205662e..f1336ec 100644 --- a/src/vulkan_renderer.zig +++ b/src/vulkan_renderer.zig @@ -4,7 +4,8 @@ const vk = @import("vulkan"); const builtin = @import("builtin"); const shaders = @import("shaders"); const zm = @import("zmath"); -const img = @import("zigimg"); +// const img = @import("zigimg"); +const img = @import("zstbi"); const Utilities = @import("utilities.zig"); const QueueFamilyIndices = Utilities.QueueFamilyIndices; @@ -99,6 +100,7 @@ pub const VulkanRenderer = struct { vp_uniform_buffer_memory: []vk.DeviceMemory, // Assets + image_files: std.ArrayList(img.Image), texture_images: std.ArrayList(vk.Image), texture_image_memory: std.ArrayList(vk.DeviceMemory), texture_image_views: std.ArrayList(vk.ImageView), @@ -131,6 +133,8 @@ pub const VulkanRenderer = struct { self.allocator = allocator; self.vkb = try BaseDispatch.load(try sdl.vulkan.getVkGetInstanceProcAddr()); + img.init(allocator); + try self.createInstance(); try self.createSurface(); @@ -157,6 +161,7 @@ pub const VulkanRenderer = struct { try self.createSynchronisation(); + self.image_files = std.ArrayList(img.Image).init(self.allocator); self.texture_images = std.ArrayList(vk.Image).init(self.allocator); self.texture_image_memory = std.ArrayList(vk.DeviceMemory).init(self.allocator); self.texture_image_views = std.ArrayList(vk.ImageView).init(self.allocator); @@ -186,7 +191,6 @@ pub const VulkanRenderer = struct { .{ .pos = .{ 0.4, -0.4, 0.0 }, .col = .{ 1.0, 0.0, 0.0 }, .tex = .{ 0.0, 0.0 } }, // 2 .{ .pos = .{ 0.4, 0.4, 0.0 }, .col = .{ 1.0, 0.0, 0.0 }, .tex = .{ 0.0, 1.0 } }, // 3 }; - var mesh_vertices2 = [_]Vertex{ .{ .pos = .{ -0.25, 0.6, 0.0 }, .col = .{ 0.0, 0.0, 1.0 }, .tex = .{ 1.0, 1.0 } }, // 0 .{ .pos = .{ -0.25, -0.6, 0.0 }, .col = .{ 0.0, 0.0, 1.0 }, .tex = .{ 1.0, 0.0 } }, // 1 @@ -220,7 +224,7 @@ pub const VulkanRenderer = struct { self.graphics_command_pool, &mesh_vertices2, &mesh_indices, - try self.createTexture("test.png"), + try self.createTexture("giraffe.png"), self.allocator, ); @@ -298,6 +302,11 @@ pub const VulkanRenderer = struct { self.instance.destroyDebugUtilsMessengerEXT(self.debug_utils.?, null); } + for (0..self.image_files.items.len) |i| { + self.image_files.items[i].deinit(); + } + self.image_files.deinit(); + self.device.destroySampler(self.texture_sampler, null); for ( @@ -367,6 +376,8 @@ pub const VulkanRenderer = struct { self.allocator.destroy(self.device.wrapper); self.allocator.destroy(self.instance.wrapper); + + img.deinit(); } fn createInstance(self: *Self) !void { @@ -607,14 +618,14 @@ pub const VulkanRenderer = struct { // But must happen before... .dst_subpass = 0, .dst_stage_mask = .{ .color_attachment_output_bit = true }, - .dst_access_mask = .{ .memory_read_bit = true, .memory_write_bit = true }, + .dst_access_mask = .{ .color_attachment_read_bit = true, .color_attachment_write_bit = true }, }, // Conversion from VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR vk.SubpassDependency{ // Transition must happen after... .src_subpass = 0, .src_stage_mask = .{ .color_attachment_output_bit = true }, - .src_access_mask = .{ .memory_read_bit = true, .memory_write_bit = true }, + .src_access_mask = .{ .color_attachment_read_bit = true, .color_attachment_write_bit = true }, // But must happen before... .dst_subpass = vk.SUBPASS_EXTERNAL, .dst_stage_mask = .{ .bottom_of_pipe_bit = true }, @@ -1170,10 +1181,9 @@ pub const VulkanRenderer = struct { }, .p_clear_values = &clear_values, // List of clear values .clear_value_count = @intCast(clear_values.len), - .framebuffer = undefined, + .framebuffer = self.swapchain_framebuffers[current_image], }; - render_pass_begin_info.framebuffer = self.swapchain_framebuffers[current_image]; const command_buffer = self.command_buffers[current_image]; // Start recording commands to command buffer @@ -1506,8 +1516,8 @@ pub const VulkanRenderer = struct { // Create staging buffer to hold loaded data, ready to copy to device var image_staging_buffer: vk.Buffer = undefined; - defer self.device.destroyBuffer(image_staging_buffer, null); var image_staging_buffer_memory: vk.DeviceMemory = undefined; + defer self.device.destroyBuffer(image_staging_buffer, null); defer self.device.freeMemory(image_staging_buffer_memory, null); try Utilities.createBuffer( @@ -1521,10 +1531,16 @@ pub const VulkanRenderer = struct { &image_staging_buffer_memory, ); + std.debug.print("Image size: {d}\n", .{image_size}); + // Copy data to staging buffer const data = try self.device.mapMemory(image_staging_buffer_memory, 0, image_size, .{}); - const image_data: *[]const u8 = @ptrCast(@alignCast(data)); - image_data.* = image; + const image_data: [*]u8 = @ptrCast(@alignCast(data)); + + // std.debug.print("Data len: {d}\tImage len:{d}\n", .{ image_data., image.len }); + // image_data.* = image; + // std.mem.copyForwards(u8, image_data, image); + @memcpy(image_data, image[0..]); self.device.unmapMemory(image_staging_buffer_memory); // Create image to hold final texture @@ -1532,7 +1548,7 @@ pub const VulkanRenderer = struct { const tex_image: vk.Image = try self.createImage( width, height, - .r8g8b8a8_unorm, + .r8g8b8a8_srgb, .optimal, .{ .transfer_dst_bit = true, .sampled_bit = true }, .{ .device_local_bit = true }, @@ -1585,7 +1601,7 @@ pub const VulkanRenderer = struct { // Create image view and add to list const image_view = try self.createImageView( self.texture_images.items[texture_image_loc], - .r8g8b8a8_unorm, + .r8g8b8a8_srgb, .{ .color_bit = true }, ); @@ -1640,23 +1656,19 @@ pub const VulkanRenderer = struct { fn loadTextureFile(self: *Self, file_name: []const u8, width: *u32, height: *u32, image_size: *vk.DeviceSize) ![]const u8 { const path_concat = [2][]const u8{ "./assets/textures/", file_name }; - const path = try std.mem.concat(self.allocator, u8, &path_concat); + const path = try std.mem.concatWithSentinel(self.allocator, u8, &path_concat, 0); defer self.allocator.free(path); - var image = try img.Image.fromFilePath(self.allocator, path); - defer image.deinit(); + const image = try img.Image.loadFromFile(path, 0); + try self.image_files.append(image); - if (!image.pixelFormat().isRgba()) { - try image.convert(.rgba32); - } - - width.* = @intCast(image.width); - height.* = @intCast(image.height); + width.* = image.width; + height.* = image.height; // Calculate image size using given and known data image_size.* = width.* * height.* * 4; - return image.rawBytes(); + return image.data; } }; @@ -1666,13 +1678,13 @@ fn chooseBestSurfaceFormat(formats: []vk.SurfaceFormatKHR) vk.SurfaceFormatKHR { // If only one format available and is undefined, then this means all formats are available if (formats.len == 1 and formats[0].format == vk.Format.undefined) { return .{ - .format = vk.Format.r8g8b8a8_unorm, + .format = vk.Format.r8g8b8a8_srgb, .color_space = vk.ColorSpaceKHR.srgb_nonlinear_khr, }; } for (formats) |format| { - if ((format.format == vk.Format.r8g8b8a8_unorm or format.format == vk.Format.b8g8r8a8_unorm) and format.color_space == vk.ColorSpaceKHR.srgb_nonlinear_khr) { + if ((format.format == vk.Format.r8g8b8a8_srgb or format.format == vk.Format.b8g8r8a8_srgb) and format.color_space == vk.ColorSpaceKHR.srgb_nonlinear_khr) { return format; } }