From 094f8216c5b5bea573f55c2ece752ce48c462eba Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 26 Dec 2018 14:38:46 +0100 Subject: [PATCH] Separate layout from styling --- Cargo.toml | 2 +- docs/emgui_bg.wasm | Bin 159333 -> 161262 bytes docs/frontend.js | 4 +++ docs/frontend.ts | 4 +++ src/app.rs | 2 +- src/gui.rs | 62 ++++++++++++++++++--------------------------- src/lib.rs | 4 ++- src/style.rs | 48 +++++++++++++++++++++++++++++++++++ src/types.rs | 38 ++++++++++++++++++++++++++- 9 files changed, 122 insertions(+), 42 deletions(-) create mode 100644 src/style.rs diff --git a/Cargo.toml b/Cargo.toml index f48a3445..fb7cdcc1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "emgui" version = "0.1.0" authors = ["Emil Ernerfeldt "] -# edition = "2018" // TODO: update +edition = "2018" [lib] crate-type = ["cdylib", "rlib"] diff --git a/docs/emgui_bg.wasm b/docs/emgui_bg.wasm index 1855cb8efce6273f59d5bec4188588289fb98993..da741051d1dd7f874fc4aa72aae6dbd2a47323c7 100644 GIT binary patch delta 46900 zcmd4433yaR);E5uy0dlyHwz&o0lJ$2VM*wHVa-Jm6;WJJ6cu_!!VbY5J18nTh-j%7 z7Z4RkR0LEssHj01#Tis|bVNl5cgGbSR8(}n->KWT(~02t{{QdyJYPe1Rh_Cjb?Vfq zQ>RYVz4>TQ!B?Lb6e^JgvzVeNZ1Z)61Bd6P7A;DpQp!{-ei7tQU?y2=szs)9B@|$m z0?a7GQrFFK7Uvl`1ZIn_TRkeZ)^evs$<52>%*q%mz(-LEtc)w%T3BcUh%p=f86S?1 zqSzRPJU<^`8RNXDm?A}1rMS2lwBo~U#l<#7>C(l9U!<6=kXbEM%vwy?85*>8RZ}WH zD2fc0lT&QtHXFWZMbPq`ArJp6=*P;?8)CCjKEEJ8w|jTy$}eDD z(5@97uu(^lTSyd?p{oT%1sH};Wu-NT&1FqZ;&MJb)s(;BoH^%BnYM7ca(c;>Dd$C} z&yG(^%$_nUGIQpfm@=bl7A!eGkx*t9YzIz_*`~kE{>HChLk13R7*zi(cNZ2s!%i4> zQq74yCk#FL@9dO`YuLMdA791(%+|8I*%Rz3b_aWvJ;y)if8i@EU-P%v`z-Y#`+)6b z|6uR2H`ovC6ZRQ9!2ZR)XP5Cy`D^^|{91km|C#;Beqz`075qxx!ngAq`G442eizsI zYJNMviC@mw@H_ag>=(9)KgplqTlr)BasDm;ivP*-4*v&VY*}i#%JL2WmA}c~;&1b1 zmg_9nTM9QV&b^aa^j;oT%U%`lS#D<6h>NVf*ysRQK~SVcLPQ-)ko3P8P42V#hz=o0>#ygH`#em*cH1~ zW9r#y-jW0l+y=9f8@QU2o5$NQ-to ze)l$BuPJs8u2{f?+<{yHuyOSDA)?Y=ps{&F6^2;8j8V7kMCWq_tUJ-UPt42r4!WJ$ zIkn8Sy-Jh%E~WMtuzhw+H)-X|5a0<&2iweB?vJK>j2Me~cr4P?8tl~X$Xk=KEqZF0wHgrbT zbuz>>ChjV#s}@8YQTaI7WVagq1uM{B@sFa=^;Lb@9&ti-W!WxB3-Oq1oH)+4gDv93 zs^08bF|Vqz`#a2T8DLQz7YZXoRqwLBvSuBCs5uzH+7|Isl^r#!tG#LL z`wopg^(=E>G&C1@Y*%bu6s>JB_}0VD)Gv7FWIQ9mIfkex+Mdf$nyD)=)`leH*e!Oe zS|mA}198wSB-0S9?6Qgm$yJEcB2s)3`;*vQ{1savN=gUwe_bYC>C)Hr0q{E1qFkHy zxe?2;*;Va*Wo&VQ_K5+(yim1|0m;`sx=i%zI?lO*6h4TI>CaSf^s*3H8ceu;%by!R+KKuX8 zPBK-f<^7=Qx|a7p?p01bwxpF54Ka-=O;+_9hKT}M&v$YPik!J86e||Y9gO{7Sd%l) z&W|Z(2BT^GSBOi?=jFcx{*!QspUb`Ni9okO`Cpki)4MsUO6-=jpwQGKN%_*uUfXR* z5wxD29R(rcTBZ1Bw~=nMG9v-9YF|@fj4cv!YCv_+q|BoqQebL{IKHA!b)AzJ=RmDh zHaQrn83>@JIM5yK9I>oocsohEDk{V6B&D@)h9roU;!uk6(U`q3Xvvpts%^}{ZQ#?B z!qL6%2&9xE2yDj^>XQVv+O&02{%G-N%fvdv#Io-F+FAB^_kQZTX`Y~)P><>Wv9EjY zl*uTjDP249&H#ZVX1mW~=y=x*C#Q*vQ3YQd7R0Q^5+kLT)q^FBrYq@ICo!v>vT3#8 zNE9^<;86NNP_HmBk!!=DOYc|$_7`9!LmE2iK1vo-QqgLf>{es(u|s3Ym>qnlEIw2b z-;6I$A!>!*hGq+*6|9ajVK)+$q~L*5l4~HUmHAlysPNz>5=NqrB!Qtabt_kr>ZBY; zp4l;};3cwFlU}NmlAtyd1Qtrc$WWCg1XQIvf>qV%2;|6)m66CmH*<{`XvNBSdAe*7 zkzZ$Wkhn{$4D1FdORNTv7cE74*XC3(yA)fEKe?fiZO*!&4s1eK@2f)8sZ4+q8rV1th828;G#L4?h#FK6tWRJAyq1cRNM|LhDL>}Qvrc> z07k#cGV0Aj>s_7rs%KUA_pWHeutR~6MC548u0)d7ir&3yScw?ktDf0JQ!hu~HfC4{ z7FvnXxAwUYC1F9MKxq|M_wJX!n*@p!-B53r*Y_6nXCPs3PZC>Dq%fhkkwa&%ihfg%_nsdG!P7oG-)y)6w}nu zcAI)8ZB5w~v8h*WJDGcW^=8H5V6PrSI+G;ZfvpA;i)=hQh_PGA%EC{PS}cz2?MS6t zF&bA5tFW?(bfQ9IM&=t#i-_Lfcr6A-O~&ngZR7m=)G8nVp8TYHwt? zC9R3fsHGsgpbiX09jPj$0zg_VNjHP_CCz$S)Xu?33|Sh=sm zKMY~BeT9uKpuF>)IjMW3yh6UI5b=suSc$DOF<@|7ogR_^ zB0alxE>%I=knGsJ6nm_wSdmj{I?`kug)U=lr%B3brnE841Ph4m3n7BP~aP_io}FJ-1lJl$AYsYmVdz=;V(w0H)voku@NK30&NF{t%Q zCxgUG*mY?bcyEA>P8ZQI(WZvbnoJiq$E2B^+Q6=l+8}HOdbK-{1B!~0{q53ihyW>> zoDNDxPO1({CP&f+CG)bQTZ+spM%|$eia~C68>EbX+lIAM8?w|P+hEwS^*8|(QxVy& zoisA(RccccF=xZDPO=I^lM15-G_e%a4x%C(%P?)H(@BbokpY&OPwk4aedya^AVcad zW;@xKI1G?9dv8nc7@?|2A){f+O!LLeWX2?*NrDk?60`brQNNXQ_7cMp0BcNm9PTU) zA|)nkG;boout-j0ZKcta-D=lW=)c+spV{(!rgQBrEX*(%57rFI))45WAr*mJW+#KXi?dvR| zx`y3H+Z)?Xrq3P1x{I9J8ncaJYNMiK8|em$sR1J^(?A+~F=3B)!hVve@}bER5{A4vO zuJpE#7Iue)$TR+BH%7Y|roE4*R5;4&c%_CNH^W#UUL&1Sb`E8TUJX^qHHGCpOEbxJ zMs=P_>bQLofPG_?stHD^Ddwp6G4;pLPU(7`CJiyjPTL>DuU9AB1Ikk9R=rY3<}*y0 zENq_4F+~je_Zxi8tdobR$*E?4stFs@XcSgOy;81L%Y_7p zB;T&j=9@Hth;1lBK7lj~>nLWja4@3S>ipQw3h=s)*EtWtK?mArsdg5kUKZ);dZw~S z>k9I&_M>_x*|ND`sJVQ}t3y|#MG7_hWY?4(9&DFACXppMt|J?t`c7t*lw+5;png)m zX_SamLyu{fFGXuswU`*D(!gO~PV&*d!yqxTGYn^1B-)D>06Q$Ds|ZD*odj3y0iwzb zu#lJm#x}2qIK81)hlVHo4;t196SgrK8V}X5__R|CssBL>o2Z4H|Iz}wCT(n(d$6uL znR~2=wzL2ml8vop4#o+4%RAg7=d4;lFgARz`et{sU%x{G>PjM1x)q_Ox||uexJMC0{jBu zVA+nLM1Io~x#^da&oEL&UCmj{C$6ZOT$Ti7S{r#hy5fLJZX?D1ngH{PK|P0*%3QLc z+B0YN?9B#>Wj$+CgHV(5Z14r+{{v*L@PFFn=#!E;dL@Y0FA>kxb39hl2C&V$a*bP#IM&?`04D4HX!&ZvNQEd?x3dA zCh7y}6?kvPYbV!>+r+oNd-#ew#jXB&wpqO3ujP+0@s+<4iM)V|m5NZHKf6mz4Rqsc z?iA+*0;$bpXK)-`HL0{M!{Cx@(1<)vk-f%n|29wih9>AB>^H-3CG5>O6%LrO2;*s& zKei*hQN!}8CY%=OAuybs7EPQzWoXqS5C|QI)KuCo-H>K!@z9i1Z^}L%wh^R*M#Bj; zpve6#EN(h)nJ~4s__eD+i(OlHr#xj@Jhdm2@RAO2rr7QfGd2&#sUrpg)a)VWldB1G zqZNtUH}@>tg8BhYr;j-BszGqzYLP!>K<*C0d#m{7tWZ%_o#NlClV{Yih*QsU4M!zQ zx}h$HpQTc^idJaU2RBiB6f+5sCvG(WfPiPt8W2n)Q)~r_9hRv2CNpEZneD0^!yYqu zhmnGvL!4626%T|@x8x3E;*wyXcmZ-~VKj2K1%qs!SbR*mC=LyjvBBx|1)(053or-Z zC$?ycdc7fc5EF~KN!%A2&FtdK(3$DNXNN0gtW1nLwm^t*4@QknX8+4gIuF-m@!)pJ zP#24_NA&EajeIU*3dgGFiK-*)#X~wYK4`e3LbKh)vn3e{f}zpq@RQLf(_a4* zHgu`y!uk;5dAhF-l~tO0Pi*m>jtWPN|+8Em9Dam--+UNXj6 zy_h-kiu3Ko>X8)MfXPLN{dG<1aPh<#KZyHgOm*(3k|0rfRBgZemxFqy<~s8n`9(!G z?LH%&@5sa6L`&!9i!+bvfx71&<&6B6yI3p~ZROf+inaznYMvucV~&ENJaSj!G_7M6 zo!h3{$VD4ClwC)|A)T2Ah^$-0k4L%KWn%qU_dqL1#|l19gG(g`2ytT~&t6#Vz>lVk zMH{HTLRJ@-kL@Q0jP;0j#^$kc;-j(Qk~R~s9Q!=5f5_2Jv0y}v4fBBx`=IyE6}OCt zV-yuFGm3>Ht0iFBHR*A7j~qQLj{c~aOES;_rj>Re zCev7G?ai5j}1!XSgS z@D|xVvm8##aj{A3FUAM^ijBu=oz&bf$NE5iukpk1JA2#!{H`1~n2i#Tjjs{!jSC~) z`}iK>#G?(pH31m%aLvR5MMyd(3zV zHFTrzIBH{~R`)-kbdcCMz5vtvvGEB>>G;yw&_W>?FXlh>7;(w*$v$&QoEYRtDlWqf zPR3f+S)a%|VMMNR>?e*rp+9Juf5N70buoCtV0M%^eL@Fyv3f#18zFX17{JDg?PfNeWC}yPoCJnr&Jmh_O4QCRFKlxfg3Zq@@mQm!A|m`rvIctpg(d_P3~?Q z;A6#QC(VgM7mx=dSL+_&b>OK~Gyp>QJLumYHtlbuR|-|qD>j?8va4=)g@5g)pRFfaiarA<9>oVUsRn|%g5RDSGuukG5NIK&TQo*=Q&pN zVazySBr#UEi`!1?(NSe>JFQ#y?Q~XzJq@WL1G%QCElhlIT0^%v$ilv+quvrjCRMQQ z;;2czIEp1E^@Rx`kD77FMJ9v=It!}H3KQbaNntie?3vULM63XV~j#3CB9B zsPpNrf+{aHNL5viOAjD{wk0&y*H7+KGtXfmod_stY(oOf+G5n?5xtK`0kSRB@rclh zufaA{rGAHUStxFu+$#?aQfs1Za$P3=^<)RgDLJ!l^zk@*!Z{O8sWSByst+cS1~qmI zitUqj+nTyY1D7G>qB92=>YjXK=<&ug-9Y}{nNDbiOrhelYS}{JIjf)e`_u}YH+(jA zKx!AMZn^M&YR1;*u|o4MfgzRHJfH(y-ADp}HPa%s!qL3Z{6|A0eS$Q)6;xn|xqpJ= zV2DybjFkg8SgvH)Yhl)4@NjB+k_Br!Md9&=XvwoE+|U5J8mxFmW9n&YfW}F|)j^p7 zDl#rez$+aEywRRd=ZnQ;I@}wrA^J2<*AXnZqkf<)W(6gv)Wj)r&Al*O)S~d-o(z1 zO*r9lkT;6b3WS4unHDd?=A+!$RT)#9wiTG+r;15xY` zL^M+Ay)M~xHm9+f0ZXh-+*G#Fdf3HYoy2vlM(U1L}c&*Z>Ud8Yq7oC8O zL$xQ!?+ z^*FS|pL;lR$R+WMc&T#ep<1(-R$k)F8*N{D52~o0TPBkKzqg#CmVFB70XH${$ft4^ zNvabbdU?T%vT(y0EkA^!+9u*Ysp(FY&iq4_uH~$NG&;--2r*EnFi>SsBrZw2NRrbt-w=9PEwkiw51>j?sRGe(j{iWI*tS`gBgA}^k{&>@KvIyo2ZjOzER}R43~GqZ!cat-ECrcFSGpvYX=12SDQQt7 z@*1ac^E7?ci%H{vTtG4gT~}k2os0ki+e@+45Fc>WMNW}Ux9P-`#1Sd-pW$kqT-!0X zom_g<2qI0}YzSC{3vrnONY-X0VH==L2laRYRyewgW?Pi8Qs~Ad{?T3!b`N%Nh|SO{ zXQk9BvJ)5+%7g~zU>I1#p;j^ZD3-oJhf_1;$dw2~inzQV4nD#wM#>zA26A}R3Iya0 zww;twI5hh~nR*?mKVVVR8zjr}g)aN@^ltuP)RJm*U6D#Fv9Y@LWS z1=!Ozk&sd(zOAO)J?p;hu2~jF_iqEM*spqi0^h?hr4}^p;;JuTmM7 z7xhG1UKO+YvWvv1kR3v1 zkYOO;(HIOC2nB1J)a6XduQXkV4`dh^SAQ*r;MNdKO1}8!%QDedFA=>ql#CdL=8z$0 z5oQLQ&+219B>_&D^q2%##vt6U<6K3Svdo|s)m!mUl31LqWvyc0`ThCpOuU$^uE#Ad z8iO=Rbg3(in*puuM9f`@gcd_QKoYs23J(BXd_jHn>kI~ag{+L0j1JIzhQNs*E)0sg zM>V!eG(Fl!47{*`Z@EXDaiN{Bxkp@l;h5YulJ{H1^B2|@ud$4w-H{c8g{!5OrpWY+xx@c(L0a?i+KKiov=zyeAaVWeI!|}1)u%H*}3z&uy^hpNv zSAftZrv8oFii~PVyen)QYVj15cyM2Lk+|5NhrY@VF1z?^wp?7i=ycmIv&o#>okuK$__eE{MjOOdO!*pI8z1t-;gc!9?@`FI){!Mr81UchMc&WLnn^3?a0)* z#ms?Ak3^(BXP23iOF8zeoZKajN=X5nBnQlK&{o_>BO*pE`5ePK=<)zatzS;s_~y$W zVC%)$EBXR5>k4}*s^-wDD7PVWVf`L)y9tK7cpWg>aa~sx;uX|+Nc?a`5B>vH8kI)cNkp-uUgdv^Q${m(D`VcP*97;pBX!HN3r} zZ<;yiDC@w2u2(rgzx%2()E{$|>@*$|1&Ok&@(By0)0bQ|7)9=v#b3PY`@tJ9?io?t zMIC}C)_8<(Z-!x8jF?cD*Pyb&t0VsOA3Ky7JzU^~i--)K!eii1$gx8SkW_K?UJ+e3 zfZZpSE%SoWZOi(>`}@hVk%08OX6&d}phV%}&R2Jl*|)=-Pudp5BwRjKcpwAcYsT^* z66*b8{WX)>!yPN z581}C2{afOP8NSxoBF79?4lA`vAKqY3UATBk^|{BE%2$+#GA|QEGd3kUfp}Q$!ysU zRoP0842>I49thX9XW*Gd>Gq`MBo_#{I*oP_oIL0`P*p$*VsKvto3$)69{iL#7S@?0 zO(TPYb^uhK8uFvBAR7p!g}p`Ifj)$ZT_kPneFmXo&a|3tNn4g;+{$bZS+K&02ao8d zyXLV1ky_zTeJ*z=G(*X@kehB?`9nKIHktJ!Db;$ef(d>HfQ!3No4oYPRy_!-Z zO)TF((srVvm7B>|A3-RjgDeil8>QzjAs)WI4|_zsas6o9LI<;hEHW-dt(ec3-Y-@P zXHk09fsU1YWUtKL;x?w6c=DM+uu|$#@LR)9wNNrtqV`Bw&)U>jY%7c(Q z;FY3Hs(AB8f8lD(CYgLhRNgd>x7{xiH`U|WOmWjNzUh9k>!$iH&oXiZT0jR`>msfX zuiA0Hx#sT8#16=qcwF~atyphnugk>RWK0yS^jGc90QY5LOCON>|Gay~_ilX>OV$uY z8Kz+Jz^1YW1DV*0jV6+HW^546bEetl!!U?g znzdcepbOYJLYM5sMAh14S}!)>G4bK;HL=CBvV*j2S`hnTr) z7$ECb4e$PvQ3uXW6;Y}qqvGdPr=!Hg)x+6K;`-Icv%iV=R+r=V`_=vN+w1nlxw{{s zUO#;I?dP#nn~W1{cWgF!u{RStkcq9xlv}gOEVm^S+jWT8zD$j!ncUyRQZ%NS?3M>j z)GH4WTbDt&DU-YVA+yH5Ol;}HCTvY6wj~qWm5J>DmXzVI-kU*qAQM}cLAW9lYs%JI^cK1?54ejJ%_o@61zQ7S6jSu@}Te zciqx=Wox=OSbB2dJJFOO%6l(1(satjbkg8<_~1n`bnWSZ7oZoYNDlUA*qY?4tMMc{ zgSC;{)TA|#_ZY|D$Kcf1s-nldxmsh&( za40Ui&t1CmaGCERb44Z-woQhzl*C^|12!1qLsk#hmYPLJv!E>c;Y)4Es)PK<3yrdl zeD1NmPRk#uBR3}Pbq+kXEoE@)_ZpIWmi9{fFba~xzgI`@X4>m~de}O6dW()bWRK)V zr@hkN!&b_wBey{9b$0)eI&|n~a+})U^+zgU+n%X}*p5F^hn^}h8$zt@5OpU1W?W&G zXII*Ch)TbyLz`LHNAj6&glUsita_j)`%pabKzP`lyI{{0kUiFg7XJGwX`y5Z%#JKy z&lkUed`Z3oaq@=HsNIk-jh5Y2FxN8w2TBKx_621g#E&$CoV?oDS1@e@nzB<;oc;2k zzOeP_F(WvOC?DbsftPjV-b7;#1|(v`%T*TGgks3^r{=x(6sG?YE|xtXXJ3eKp1&vb zF?vgnq)KnYFVvGE+S(^jY9)x$e)tCf?<(qTq;1x}g2X^=v&!$lF8c zZssEQAz$eivJCB-P?v66FA>K*WDj3OUIjAtY}JNii_u}zjy)QD={~Tjge!Ov68e!f zE^r^KUy9hqRdt(QZ&MtKR)XVbymo{0}_3fFs$)UHWaF?USNOea^ zT*x z%Q7s2W+oQB_PTiEK}VRB5=}-Jm1LdUHs%_S;?t#Gg-%;K|IHiG9Sv%cwqrt3x@iK{1I8G2&bUDZ=kj8CiP#A z@xc*N9`NP@ueHRY(AX7P%Q{`Cd`-L>^#u|#QC==KpE-J?g;$E{~Z90LRbmBER zU`N{(T7r(VD=BTSv)Cdod~A4^N1@ihU;Nmc)TLtkWA?tg_h`lP%`~_W zL8c+niVcrpSkrPC4>0r*oc z9(=qmwewBT5Y)afhe~3kt+_-*k)QA~wUk^hNNnYPmpV<_F?%YI?}^M991cu94f#jA$&(UU{_SwcmbyQ``)0&(D z4~({7F`6wgoX}Jdt|ildB=3I|<4oU<(>Y_x0DtZw@Z*gbK<|{Ao@3PHGJN<}j0Q0M z%Y6 zquB7!sblOp88;iY8y(ziIBcLnFx_kvrLn}wclNP~2@m%d4UhDyhF&B!_#xy|o-xu0 z%lA^f-KKB5gq4X4AL*96pQQIzF>P~@4W)bbq)mNTn2lOlSM(3QE&j22K)zAlqEIVr z7@c+ep>{gf8~%sune@H;a2*?=cUi=Gra&OB=a9`&XSby3q&pA*;CUzQ;M=5Saco6X z!cGBZvOLkEwbdlw7Qo!W5Idw^%{q;F9&R|2GqwFRW(RrZz-RR-j%v_XhpP8qPI0mf z0XmHPlG`?jP5a=^+V^n3r{KHXCk8$}ppY(-A{XyA6GOi3)^jI~jWld5bk%^_jJpN~ zSVX=(aR?MNMwpI!xC8Qno??k(wiv7ubb<(V%6>|}uewjDZ3CzrwLotiLK%rUeTgC6 zp7`OJVRV0wrDp*ndqRwUw*NqQU5k~`OKy65@jH9heDJ9PAMEH4H#~E>e(T*!ODOTe z2R|=f^2yJuVq*C-{f_#KQv=W<7N`L`Mg<2 zD=mOnr>8xXAZP1~K-f*tktU_EO5M zRQHo&|CTVR>c1(zmX=8xCa8|~M0OD{ZOzATy!*|aEuY_!f?X&sf3}wG6!$%QE(YGQ zeGq=fZ=c&|nll$V79%33wnlD9hRb%iax4#Q+%~bjp$y{Al+q~! z8H5I2kW0oBOhThG>N>e-LGPklw_BA-+Kz9eR+(RRI8NF-J zPDXi_zPXm05 zrRp$nY#iu_gX8|i-sk#KQ1e%3;a*fiuP}AR(SIG7x{1y$@iHq8M>gHR;UvOqQO4Ls ztlUdV5HRWr{!N=X(6wi zdb9BVZLqo(G^64T$j6LF@8HUR7tMJ8!a&R_%s1>Nl<~ zks*oqYHCLJjkjB>S8e%g>3ea3Z7T#3@&OOc9`VqN!*KBT z)r;exQ-{9Pv*)g~(4e@K7`d;7losItdZuPs3rI=dNG?iF9XJRs+8TFb?R>h4v~VPMIKSu6WX@2&xr zWW=l#<9FG+Q%9{}I8D9-H2I{q;}0+1g_kGX_wdE9*K>CN!}q;0h9R|Y_h*!P`|W0= z#DsTlMB?Lj@J`(a#Ha5~WA};)?++{_r9`Y#H;5(g-;8p-K3IYRcYW{|S*KDg{_u0e zW_@%!yI&N4{0;E_=i@De@IN0{id~-)c<#Sm1h$c%-H(c&eRiq)f%IWKM8R$$w?Nti zv?T$kay6|wx$`oP+4G!c(Br1Ch(;_eSf4^5&N zLb5BD$s#m0<&KVuh<%Ux3fBX!-ik%^T2b&wUnXzS)V!G<{jIVRjegpM-Sc6)2|Hn@ zS@m!>-T%-w6A$bgoBy!9g6y=2`lo(|U7qZwBF~MeaqGQ+bz_GtlnP=1PuPbI*Z!RCCQwvgXVm z6NT+nM9YC{G4^LipLUR>B6oCZqKU|AA{zQrJPXm2KOG9u*&PwJlVf6`Wspm?irG*0 z0%p(Cnd_Ntnb@{W?3qk#JAb&#!Ofh#^6<02&Sa_Eo=K|7mW=L70fdVZu|;44(%HXRx|C|eF%Ta zD)|1NnwzxuuNizy@r@hUN#gmRkG_eqW6L&!7HM1{hdo0XRw(MDI0`H|JWkK3w<#+nq z7Us)ciwyPF)^1idiPgQ0GMEsiM`}+x`5_!sZ>8g3P+Y$;ht-vRn868yf^Z)ELEn|b zj?P`Sop9>Ca#^*0aSj|5Z|O(nqQd4(1-M$M!j|v##kp)`&(|ao1&*iiC7+Z7Cx+O}whCy5Ikwo6b)#mfMO?Y) z_#Qi70ugd2)Nz0LnqH-1ZCh1es6Vf=lS(ZRJUcF`hm(e!0o4h1W&@y{B?7e76yTO&Cy@N}7R*Dj(Fe*SMmQi{; zFzU#AT-bYbv3CUk6)nw8&P+9KR4bG9;NhW4c+aoK9Qpd7Qr1g4!PNg%vb6Kbag;?_ z*WaP6yQGJ1bLAQJOya&NWiGqTsEHRRHaFpUNR*O{!qGFT9aU`8wKC=#gg<@&L$+LU zEJQby>A53EIYy+wfm?C%QAli%!1Qu`OBtKm1&2DqEzTZmJ*}Gk#I1SQ z=jx~TVn_7L!#HS)(I0v#R=Pj(kzl;af;{JV4qPv(VLf|cB=8t5(sJbRGJM%+9v*`N zS^2HM^kOR+`&qxq&Te2I=z|>WWcG}na@4?%^?@HBd2u*-Yv&~czqwXvzv6h=7NKej64K2=!ZqWu9j7%XhLG= zg?Y$~H*UkPi)Yd37>Qn5i5nCpR%~2znlE7!0Mv5`JNwA*L7x!fYPKGLyXqpBqiuN=%Z8$c! zN{AiOWcG|srHBUf&8cXg(qN-c1t1#tLcth~=>JeTrkZ3)|E@1Ps!+a}oMZar>tp&c zPelP<5Jg&+w%KrQsk;&Hq3HAMth>IpA3L4x(SPm79__mw+Egx>#x@lPR4WL8(+yk{ zArpbjMg7hGtaqjU-OYdC8VzF8d@xdQK!RtV9#`hJEqI5m&Tcy=L zkU2PeLmxeuEk*FR!R%BkSn-D5x1Ra+uBS1GHKYKl{JbU%V=o8@kqqCuUFp)hP{C`E z^jH4H%JsGZEZ2zxOwcH&6bFq*feeE*4$^4aasBIh)~y#EQGSbpHd0X>^g@wBIIsfI zu>zH;DN9@Cm{|(s4KpjpA|C8pb~f}dsXDph8OjceEWJi8&n}-?)AHt#&l6K~oIDHU zU2+tQH76HhlsB3lS-E!VWzZkL(2|EURp?2)*@7-tgJ1{OFKb`}8P_*7uwV^c3vRC@ zdFWb#y5CVjh8HR37lI@MF8jQz^|>Qi zIjgt@3Zers8q3;{RE?_HLn~q}FfosoGH*|J1JBNSA^%+OA2NAaRItG8$ zhya6*W%rNy0)?`;*&($|B9L6l#I|N)S=6;wk7KjgkgYqmk>P3>5~S9oZq(KTtl^(w zUo6WM(p!&XXBXawgCpY_?1+TL}wHi~okDP3ef{h|@cu*-2>f{yUl$WEn|H=^vcIZp6r4FqvK04Sv1?XjSq)tSf-q#2AkJGua8{@^Gwk z&J5(RRr(WWvZ@pg7UX2hm9Ai5fbp8E9^_SsZow^4Grku$vt^t_#HuaDOK~9zGc>hX zQx{Tshy;WJRw6ClvVc8L{gGE0<#F8|R!zFNlTn6jpp?!CjRdtoaXon!>%~^JUVauP zdTJ|i09V`%2K-)XzbV|>vcH;>Wo;(5H4}R+6Z^u9*^A6Up_b&+FgvN;BF%z^TTht6 zb};L*56O;^+}2e1Vv zw-x|fFOINRm`yge2aQ3oO^UH^I{+re*^k+P*3%Qr!N8k~lI#dJV#(h?V|9ArkW7-M zTj6gyW8f#fC%Z)jMC;Gf*t3j-y0+=;JW`+GCN?f5F=W_bGf@?re32qZ`RxKph1ye8 zl2RFZv>S-bDsz342s&1wnUF@%2Sp`$gdx*HTJ~R6YcEbQ`*_w@hYz^j$O9 zaS-XAGg)eERCN~B9BmWCoJ3V`naR3wg!)WY2V`wC*|ls}>x5bC z2;NB!*P=^?O5d7^y_Si6k%=vl151ow4};lQf=v&50xZX{os4t&u$``$eik>V1@Ub)yo&{|kgqDO(|8Ooljn|E99Wjp$W&OdaBHYZ* z@HsQ?RrXTDyeY-7?b27zXa6qBl2nU+`+WGdnxm{re|bI|r581`OS1)4zqz@SN`npLJKWZKo*<+EKnT0cIQx#Y55c|JS4pOj0Jb%tInF~w#*VU-4ye%tx%RNjAF z>;CiEY&PSz7m-1lS4!7Mi%Danu?E90+R!F@H^!_KnoT(M1m!h>D&PQ9y_ozK?j zOT8?B)YD!}^If{dhrdAhAN?&K>(5&(y2a0Y`LAQYrM-cQqx|f|{9TlK6RDMcHa4I3 zVzeRCKk>8Y*oXRt02@`dZ#yn)VFO%DmZwNc?Xeri2cPt(NiBAX4O64Cgi9DJGWlRapqKOT*FPlYC0+0r>DYf6u;b}w}siD zN-70gALa1(9*r%W+$idnp=^R>?}}}$rw(N~j4!t6XANVg+Ok}9`cuPL1-}A2om^H~ z@QJimx%P?vZ7v(z??doY-uKo%MGJH@hIXsuXQTV*#A-Sn)TiXJk?e2!>O6M(VSN31 zaXyS*vcY3LbT_MA5SJj>>{WNiL)Ot)Rkh7=v(Xc5Z-HoWiaM_tT@SN>o?=>4eg z0}C?u%IlhX&o1nnG5ZZ+*qdhvOuDwQgO6-OjGJiBVZsi#Dy+$1H-HyH%gPh%M*4SLwelVttXU zy@US}dcReldkOPblT(_`H22C1S!bF+*meo)o%<;=;NAY{ z64t=joqBl-yS49Idzl6Mrj|CvcGc}{=JaT6&iurX18T+}>&VImosxgepRcNx1P z&nTrB#fC0n3vDMQV$E~sELbr8!i2tY3H+w#%sDqPKM{}3oF1Ezh$m*pV~N?IVL@|b ze)H&s&CPRW9~X%xW}cEbAEX)IDUq4er_El_e8EiAj5SZE@{w5c4E$}<$&F(ALeGkKqL8(8pll8s#um*kk6|AfNuYZ7Ds^57(JI)&3#)j)BJ%n1#7IY6fE_RvBzX~YiKj8%+a?!1m5<1oYhHsTgN=k)^OeZB&(?+#vNJ&Wqs=H ziO-_)>rb*ttz({IYL0&G^Q@=-#IyKW`aJl6*zq}4c6UE9&5ulEM(KNvFFb zv?09_VM$j0n@FFIv=7sv6k!`vl^TRo5fXf0z9P$ahOfrNC_ui#RmIU>KB}xsXPkkI z{>WI2a1ug4zQy=9T8s*N0jCCbr_0X;oEkRaFQwsrtEvnFd@4dBJf=Ur3y$Lna{-scrr{+9JoTFjKcbaGRbXjEWk5zBYOoyNZj``>(iQk#i-xFS zF9`0Jl^%h#6X~vbs#1-xJHGjfS5asd69)z(qc_6o2uCBlA7KPxUwo;NV7{s}AcP8g zl}#?GLv(e4st`Q~(0H%b>c2A!>-p#ODD(oHP}7&t+VOR?4ttF~!BcyC8%%0JNa9NQ zMAKZmL4t~q;M6opfZL%eJrG`-hEv-#7%Jcn3e)g`h||dLLzxjK&nztA4|hKci?@%i_t!K z+p%Y#0Yp9P+=I{4@Xm<7I!yVW0Vnb8T;7Be{uGT(W17_m4^x2zn&i1NA}ip;F+!A$ zhu|cphbm9-tnw*2#<{3Ktn6IjaBvmnsb}_nhLARe5O;<@2^i_r&hV!s9OK_P<7s5b z9(QW^8Nd(K@Lvv7{-wi|e>uB6&Hu)9k6%UHfp2GmUQ1VKLpjPf%M-le5ar(h>`;Wh z4LEfy8&3*jpuCH3Z+ts9OmIKGr($Smh~fxIc;+Fbv1~zDgm4)`T3c2i#L}h+gs?o6 zTM<&ddl6E(M-Ubwd^#Pz&|e*?V2x7t17Jh=AB2z-MX6I2TG7q4iZoGfrhAxa{hoK& zuv7z*wAP%CkS0kCIB1qOAx&$|%1-I#bb1f+>yckDz@V=iLTcWu_g5sS*{OgNzJ&;> z|FjxVf9VVTmr`CEXjm#{cmQeYk7ba7@O6Y_Ah^LDBFH+}XxNRA7&8JPF|H9I4TM>~ z0YGZdOh1n_bnqWY~@`vFaKCND-cd(xnKih8ROL24VKlj6|Nv!cmAf;;Z31 z8s8)EJrZ9tpH_zK^cbY?1U}Lh4t!J8@SEv|tgem?jYS@PzyRfFe2>BRSbWFfOMRn8 zj>C66zQ^NB!$GhU@TIyW$CRFc?}_+k!%i~N)PJLalMxOF0W|w&BP5}`8KE8FV+hG` zIt5=sNZ*P0o{H~j_`ZsK8nT}d(vX=$Q0z83WWv7#XGt&G0VfVGrZtQzBmf|3z8)d< zVl_e%syh(+5FY6$1_xpYv&Vi-SXE#_D}P4lM7Rtg&5mBEL_Jf78Zy)mAxXcPUz^VN z0#2Mg8zJFMne)9F0Gf6wgd~JFA|%4B!wgn6U@(cW3ZzLd)gq)}s6$A+=v>}|@NwwW88KlO`r3TrUBmvu?EMWG3e#Rww>126Tf2PIF_W9 zmvZau$gBjr_ELVAe(yf^xEhGL+<{m$6pnl1QJ>GFFZhPlca8bI34bi;4Z6JUWF(?* z{04uxGLZ;HlA&lU8Vl;=x-0gOUe1TXZ;*Ta0zCbu3k!+&74C1JnE z?+JK(u7o%2_J?Bm`n(@l-;$(1%YY@$?|VmQAykv zPkQh_;!c1met)r1ClEyw;YiSvh$h^DaIi~uoj}YT_IRV9IN}eWH(m8ejNe(B2)o1R zt2+^h$30-Ex>+xo%+Jvq_p=ctojG5kFW=9qOCphA(B)4?lHjq=6^@kZkMC#wOFYqV zEaZyBJ5j=BzSZn77DmreqY=jj>en-#|p zB;DbVD~{oHheGaTDA;YRz9Pu0$9h6Q8VLpbiBLEkiv;a;4Krt+JF6iW_WAs7m)jF? z1${2?(C-^iF>6Zgai`RhSF)jDI-GkA4dWwo33QC!^Jn-XT@!e2z{sHANb?*NIVK&e z9eYac(4omWGl?9(E0OTJqrR{|m<(Wyy6aPZVi%SMli_eQ7E8o~9&|Mkth`2_`V*U~ zkNcVRD)nQGgYkI6=L+~kp~$FYfgPqOOGB=ZOcRRk!K;3iyChcn2FA zPENpYHxr)C`Jh!_@e^}-=Nr@@+sJ`$l3aXK(k?zw81Z{TZhs&IDfGl3U)4lmWZ=oN z+^L2q&_Dv;D9U@|Ax{EiCB2a3NZePWkK)`@5(&m5{$$V>g4o49(L_%JjL8>FxPl>f zG>Y=ESTB9WL3T+=&>MF}{9Zq#$sh6rgS`!KJQNPaWA3CohS?eSMeO>9U)cL4v4G3t zPbNIxP!J;Rk2t7wt(9E4`gM#q_NQ21~OC*y4u+!^{#1aE;Fgkh_<1sY}0f+FoJaKOfQ*NMMa)6C4amA7zS2zx72qViK z9%O*M$$%%|3t}E7F#W@k!FuZfHn0SRFb)0jL^S5|c|D$b156U*4n}-|fHxR-C4&w6 zwjy3r;(}m6DR`r9e=O<^M28sQusZrQgqak1}xIANJ#ugs%4oBJNYB z=wFZLRW}Xh-SxIXycD$hJuY9w7k4F~EWKfmKFGrBnOEOd47v72BHm;;7>oEL!DPf8 z^ht1O5LhD#(C70&RR%o%(R!+w57J#-cwT8d;r2x0NmnwSOh#SkKvrf+BIF7OV&DK| z+y#vj)aMQ3y)h&Fp=dlAj3(lKS3DF58Q@Sn>InzIn1I*g4h14%1DtewJwdn2(D zh|A^m2jWR@Jecr~$j%G};vvjW(x=I!KOPymEK~Cg{rEgyT!JxAxI+=Q%LTpUa|cG@ zc>+GJG~f@$ViB(ot4}zRj7A$fS1b+1f{}LB!aO-IN|lX-0nmII{gU!>jJ)_Bo^~wnEgJier``R6hBhGBZoJZ zKnJ;^VRt-`2>4=wh-ZvGq=2`SxDybX2sB?jh)#ICM-h0jns9kzkpL7e9b5@U_R zi2x`KgrW6Af_4?FvGNxkAxUBJT3UPD)R=Agq9Z&kI`t z@)Pi%OyHhs%o_;9;E05im@PryDe1zAcofounVj%o5_u--k9FY*zZ=RU5|0Jr?l`o* zH*u=dT-(o?bKVqbUY!$*$1(AIp`_2}4S1sN)AWwj)JhPRkDpe_KzNe=XjeY2 z+MfXBF>l13^us6#22RgkkVbWe{!J+#Q{sumNLWdCz;tmXCmUd2z#U0OLZN^s=Jf*W znR?`VHns$dvo9QmCI?DiG#)%lf=eSVZv=yi1GlvWc-L3Lq zX%yld^ZAmY1lDRO+Q`w;s2SpdT7x_#yqLoQtR$vU14F|T@cZ2Xw<`qggf-R|7!aMT z?+S3g{?tHTQR;zOc7=k$U^1Bm>w~d{lsQ0uvW8dbPpaHm3M<1O3PR=r7*3Zv6z^Q( zl!V6(Z5;?;l0!ry-bB%qDf1UDXvXm4JnWtW};qh(GaK3$(& z$}cZ*!yLx&VFE*qcoVTEaR={x(u|TRQ_hRxkab#O_LNx?>CCQKpyd2SV%EU(A`50s zNtc3oc+Px?5{w?OJqQg7vmfRpWe#69Nmf3wAoJ*)VK?W4rN& zQdn&;7_iy|qgW-w?zu2b-pEDaMAScmeGLgXCg1O}ipMQJ?MNZXp9F8|r zA#9{#VOK2f#X=K`doGyJUP%8_B`++&41!oBy>7ps^p@{J*_eK9cb==iQ^^ZTu_B|- z=w(8xS^q^7vrshj;9b>d)D;8^eX&S5j=fAoU(3RUivyOehu(z-EX;XGMJ}TB_WHv`g+7T8Pm6RI)5311`;$08jE1EFhtmk~HnIV&<3Eyuw9m^YljPA3qF~;kLSINSa z$uN?>NYGD%;SUF{X8)(KGmo;Oy7ut8yPw0$i_&!q5otjXL|SR6IyEaYI1n@uH6beT zNpos~78;PoXI!qlXf%Tn=ixXjjxmE{5;e~u8qMq&6Em4;MiVt?q9z)L_nmv`w!8C| z?;jUd)va5@*?a$f-`*Eiwc^nny9=`FzQr=n(Itiou^uO3Tp`p>HydZkLcS(sn}=t# zIxdPf+RY#6)LtFndLj%2WvDo#y|t!vS&>=^7zF1qQZjVN#Pt<6 z>Ax!8172VGrI%4Asn)f3Ze#Ad$4$Z+ttoJv9EfN_!}xI$5HDpMpVt_cWZfz#Rb1y~ zh(jO~l;;CN_`3P#l}WOL6C`=2!_X?S-1js80(1Rj@f^P{qBO1oa&mxq2`+4J4$*s6 zt}q&&&Qq0{_U1$t8pW3dMO=lIPA+O~ZW0D$vs@#R(N3{{al<_3NRO-WB30rClz5Ly z7+u2b-s6r;H-}6iENgb+EHT=M(=13YZJ5LCs{~X)8OX;TU0j!|7(k`T_#%oH~1k5Dr zu_%0GcR&As~QC>50cY*BUx{@*rkV`7Kw(&{x_*_wqUelOM$mXn-N~0SqjHw@a z*O^D>O4!~TnMYs&PKB^Ue0#hLQc#g!KjM%>4wJ22lpzv44*ejF$Xd}2jb-MAX+ri0 zpaDK_J4QjHDu;@A;9>3j5bYjh8R;ZVqV6v=PBojSOEslcPKKp!75hF<5C@g3NyNL(e}osE{JbaO(J0?qRd z6ADIs7r$5<5|!g@P6|+fC54G-K)nawXsoga%rZCZAw6AD+=6;gOB6gg>wiXvNaEFT z8U$V%*J)Vz@!e#qb9!W=xpq&P<#-k1J}MLP0s-Qc_t@y1*Q_x7WE@>miz@%##)pTz z^X@K29=XgywyU~K{rhmt>t@P?2?Hmr*`PmeuQ=o-;u6rw88u0L)2x{(Qyg3h`4wwu zy(Nj`esk4K>2W+i%j`le6Hux5fGwy!2-3Iauw20t3I9S=tP>U*OyOINBkkUK6AI+! z+J3%^QX8oPn}ZAnA?gRsSv_*78(~l~3?|hg&#Iz)hXSM&AxB$@nlbjHSe=bvEe*1 zs>%<{>z?f96zC|Tu&&V|sJ8ltX0|Wmd4!r0SZAczDg$diY>xD0nqyrnB?G;lKxKpA z5p#x5>dgTtfUXdapfHNzqvl>;CWcnoduU7&m!)gtd4zwu(qVbAE%69xs8Evs+RRR5auX6^YlTj!6-wpFGp%yF zvjYZ#+tg*olT@V&o;Ax8sDuh^MFiR*q9Q-~P5bC3MOed^c*NpB&@J*JU;UwB{_Ox+>I4)U z&8J}|9>z)i(Tv|qx+jJje8m^zNK-!NJ=fT_Wfa%0?f+Bzy2euA!O-APzg7^k>d%e; z7t}p(?$2Z)1qqHEQa`~!QR(L|G^Pz~VD)1CsP{xMqo}Oqg1U@9N-01-D@?y=PMiaH zX`%lb@(r$wbXfhx+&D)jk0oC0`b%;eC@N0l&5eztivZk^M63f^3LdG;SA#{sr({wC z(oB&|0}rH`X5B9}28QyvI|~d#F|BbbkR%HGdw%rgwt^z2{F>xZSCLl8!@ssShrTUk zNT(VKOLG5Pdvl~}uxgMh7z>))d!@Y@s77I<0>oT7DDc(R<}RFEgk~fk12tnmdu?#amXvk zqnKs##s~$~5?QRlsK)X^1z3H4{m&7H%>GZ=W(>E$!lp$+Qh`{TyXH&a#$lN8G)l-b zs3Z*E8j&^v2yLAxoo9d!63p8p_QoN2!%rZXh{HtX?+oADh4zVQXHoU(<6*5&l99^Q z30YNjf?9ym=iJ-LX47Ihn)VL@igX#;;>a@kl(c$$P4WoJr;JM=91mKZ!cWKM$-zx8 z1a+aCvI3MBX6313ZkZ=@5Hc1_#ql~qScnqjpB*f21i^g%bk)ih4 z_I6M%T?xJfcnVR>g3p<|79b%J4!n~hh-%hR?dPYN7Z=EM7pjXKrsz>Qf%nnpWwzP8 zfPA~pzOwBSYK>+w1U1VOdYAH#JA!-4)onJkQMPOU-xfA>#^C=Gv6da3Da~O=Z(&1c znZx&$MQ((@M=BR|94%gp&*q-@-cNeQ_pRx(cmm-?t&Yl^v{(5>d5+2U1EFz+0oDN3 zWm$e1o-1bAUbY@nSG8hog47As;yiQmeiD!t=tRb}tvoO-E8zUr<|e-r@T@qlLCA@p z#TRUOq(0yl%!b!XkbXsa;g;RAoCMJm&nXkid(1G@T-NsH7jhE8~Wo)IxGc^1WrT> zBVH~Qr7bdvN44p0X@wmQ!)H-{{gZU+I5@rBLUlvt|p z3Uk^*`M3*xCaWu}PqLh5#g+0&vvHyHnYD{#8;4g8(FIh(jtL~@>vbx}IC!rtA+F&K zF&C9@GM$U0npB6l%^HRiqGt*GtL1&IYi!-eHRilU7_T^`k%&mLBn9)Qt~Jjrl6{uL z94L@bT;GPJF0N~>77HE+?2k5jTc@~QqSjLC9XMfNLxn_KN0Yc-yPiL>z$ggq|E^4_ zU$yo~Te?O}6*tHN)A>QDL2;nCE?$K9iL=8;C*1xQWZ(AQ8xEu~M$d$Zp!!n9b(Y>J zNqgrD2g<*@ykB~mn&tvGU3<|NWxw{`=?BRUE>)knB+lbJ#rfr58r-|u?nU6B;%Sc4 zJ`S-FUzW7>SrA3*rdZ}Qo?zHu92|HM7SUH^Zu|5v9weO(6$l)Lg^M%W3eRpb+ka4Y zcM)3F$deeVkZ?|KmaKi={tBMTZ(2Ap(11cu9}T@ngDSeEy=2E??vMy5PBaEkIk;8+ z#TNAt1zEw;2~i?7XnwG);fE5CIO7fk4X1~^ci(1i`w(fw^SJ@et2r^F2lef;{@ptH zQT&c3q-d1ZK<+$yuM>V%cH8oB>V6V|eb?G1ghHhis0-qYRD-sD%`7_@X{}?-K2sW2 zz-56hzHaV5SWa=2wwgQ6ZNJ(ohC9rmi)DV(w(7aF+TMl_{l8OMjkqo>5I&TR86Mu( z(Osh|Kv$|Yfx%bd%u`VEH)JG^a|v@M9AH|RhmtHaX7Y#Ahh`iraI%%BNP6P&ZZVI| zm0&o2pxc(?J%D-zQy+N4dqy79;twT-hOSju-=Bkg#Otbkg@;~|yM_K^r?9)r5Z<xwo#yIjwHzggU52Fal4E>HlgC+F35HY51NGEvfnvxa^J|K zXeS|ZGh3n|W3~67J!-K7xCRW;PNu;Tcv1OK>%(T=5~yrkz<+c5A{2?L3cqdl%{Nyr zk?kG0eQ6tTv8LO@{d~vn+tc344(4rp05MrG;RF515$A>eZuPZt`P+7o2}Mw!mIE z{Sf9`H~|gMADU+m=Pw+??IOe2ZZ&H{wMAeyeK_>qyN@L(U)M(2&l z=a#vmC(Y8Oa-c)%qE^FFu)aA%S3fqlFJ;VyN=-e%GXi-@yxC9M$;lzM(S#9gb%>+Z z-cx3IA=ltifGNfcPt(q%PZ>r(`#-{^Na0@*G?cQAHA{a! zDlB1a&@Q@?#HMY6{bJ-ftYBrHDL@?IWN~2_sr;8R)y@==n{0wQem%28UnbLRVTUwbRx9ll)ECcDa{E9mbs~5~HZRbs(?;M;lw8$(<8N6tY)e^e2)R-WHDl!5R zm%9E7GUZJT$U0P0?iIiiGY&PevtfC@*}S3o3QZ95c4$K&BeWmBWaj5GuM2^X2B!al z>tPPXdwF!tf+CSKG=nI7C4}d%qiPoXDI^YapX3q1sPn%Wy~4JTNR4)kOy__^<|tn= zH?NSrT;{K!A5g@+Oi|9^t2l*QSIAh?xl;barneBKP|;4|euujCsjuk& zU`*-ET2e}rxBG3>a{@-^G1hQWsuHw0jo)b{Fn4qUJE>#X++`C%8qsf}SCRtClZ2nw z|Dcpv?cC61?wcx(v66sExT*xwQ1}^EqF8>a!_2K@rkgP5ij=T(IiT9KJf$Nu^C|+~ zR5HemYDgHXtYl^-N`mav4yKRTJ9SArBx;P8xeU zET#^)QKqNJZ^*-;?8a~_6DzQ~1ZIR@grRiv_W&%eWrmy52lC+5K7*qSbQPc7a$!?G z)Hh%y-{3c=jH#0E8Nez?A3^%L4)b6QLd&qe2sMOcE2g80$B}IAmu{D=ru_ z_MV?Q+w8PT4sEhhm~o1^$fyFRC+Bpukb(>Ptg*5dA=2=S^|>9xK!k(gpuW_;#Vi4( zpO^CgWHXf0Qj5P@mtSOz&zL-_>6Y4CocD{wl-9%mdd1I;tqDFEB^1M!S1f z0wE+=KETN&z0jPun${^Z2aF4m4wzNLBi6<|xfT`9X)p6j^?I* zdVm%y&?vMsTr@qR_%icQzf4|07a%H`a}9DZ6LEHV$JV&5V%-T>bZo;P`WZa9vbAZT p+Hh5SU;nyI9ozQy_8+%;Ltk*UnZ8D5chZe6u>K@mdgN%={{>rT{09I4 delta 45060 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

D) z{+c64uGbcsM5EFAS< zOky!#Xp;6xcezyCP$^exFLal?7bX&r^LQZWa{FRo==QL{R}=|Fqmg97lZaw$ykYmy zbF(TA?Izo6<~LtBXU5!1=0p?C=(N`pk9napT;U|@B?H5BvXcH-A{ux51OBMjlT7%B zYdZ_&6@}5LFB-v!2VBW`z~%Ozps_-^rO@s2h5b<0=vXKk^e0Z#v%!W~z!QnPBmS5d z!a71^H-^HHDNi^NNrt^4h)3ffY_-P|Gny96n>%!9JTY`=vU%Q|84H^u7t*lA0&%E( zj|=kb4f&HnRghAY057BAgdeKN7lH*FIW?=Jyhtu74Ex=l5XLGHfuadSlcPvMR2M?i z`9slU%omA39lKAOl2s3!&DE-l<@_R#H<3h_A^}grg+50|9|Ja@!2Co*G#H71JXbW9 z7;{=DY*jeym^T+E7bJ>_M9>p=Cn6vnBIzEhYb;+h=t_D$?l^`L@*WzeXZw?(NH`Qu z!r(wNg+k-g`Yq^l$9gBv2ahDHTClHSK-GK>ub`r`a=q6Yw%S0r0 zinjD5xu(zsIgP@I_@c?AFBC2iuPun?1jLD{BB4@Eb0z; zLV@sUdN#xv*+G9a5b^sxF7N5-PDEo~%mwJ`Kp+v0xuFOd`ekUN=h#UTfnC@|yR zGiuW+V8I3RE}J2ImnNQsw4wvYB!Y1r;!|k<~WX&T+m$}*IC*ZrSgQT z80M7U1!d-T$6{e$=xnQj>YQoXC;eo<_K!xn41*5Kkc>lF!W;4gJm+4b?d&6u(z;d1 zwP$$ZUZ{rzc;SVk;0jE$&zRAC$pSi+nmsQzy<0jJPl)t+M!H!~pI@8}J>$wm^E{kk zjUoKKG)F%!lc21MrWR`y8!2SWu-9Yi^78XT`=D0b~qH#PHB(_ z6~>aG7?>JNM4&K0TU6WJTdvi543I08FtEftz96&^ri(wOEvb;ND|7|mK){!CN0NSY z#TD0`lXw(vUDOu}c#_F*03$G7G~Q$WLQ*ImOoJo{@W(+QbIgsr{`d?j$;T$`)<1UoO-N8{}R!bz`U2>52hu zgc6W9IB0$s41Ln=X*z)__U##qED#z4ZiE*W-Q@~FEMtL-Mu=kVaJ`&Y=!X>uK$AfH z{Lx4tJX<>-I<+w12dkhY;sL1Vu+KF|E3A^;X(>(yBMJBw!C*WIS@Ol^YHwA_g9~8^ z;N)V?1p^@;#AY7V2^P6RfmqNTjlx0m1zqvz{E1mQ;if9NpeP=9$CDvfA`$VzG}#%@eY4^sk1o@kC-C5BxU2*OQ1vU9JV~`mb8MqFOF0 zf;Z|(ddZjY1QYRSaN)Qt9IsW&)}pX4>5jt1fG&iy7YnFOUo8F#kmGg_k zQGX0>WegJKgFOgclMPahBX-Qp`5@l!4u%u1NDK>&U?l4CUdse80@}Z8@dk`2sWqrQ zDDI>OoYipMx?Fq1hM7y{h2c;v6n7^>m;>=-Fci5C7xd-z#R0F^9rq;Q19{0J_^xN2 z)mpI+=G5;=x?ytTF-*D}*w`%1_hDZc^@!W$hB#uem2ic_(ZJH%`^iHJ{YkIi3+F53 z^T+(5c<4s0v7hWJOvIC5ek9<=Vk4P!g>TXp_md|U!cFr8V{jS+J}<17=VtBWe)3tx zQD}5GM%U#IK))nh%h;(}O@H`X^Ujoe7h;*>jz!>#1QH?4%*ZWTb$@wQVK9jK6@-d( zCEX$TT+6lm2DD5vHfX^KbV@VSXah9d%ieSh>@MeSlAha-+ zldG9-O(S4%+!c1m;NrNjCvck<=`Ej7i1j4aUoKxVlz={qMsBC<-eevsU^?On_^m+~ zmVQv}E={|E`~o=EE-bk{em^AK6%DV^ULQct1y&NCus;wYRf=`R9U{9pi9zrNV-UTB z#}6XbvWeQx0_;Vs8X))7Uih9V#o&t9>w!k}hazsw=sVe@49Ea1DzGSsM`4=bX}Xe$ zbxez#g*AAfuiRaGV~pIdJa$2ZOc43texE0dWg)CoC~=qOhNs>Rr#%*vErnqp7O+83 z8jAR%Sj?^O2sNk}Lj>^;2Ho(JBGFLdZg!q_u}d!2em_X=H3W{QFA3?vT!Pqn{l=;u zKAg|z$67ZG)NU+W1Kx%WY>D>o!E!>oaxm;OR__svxG(JW1juK;N4s+{1T2hc4R15y z3&WqnaNn!FF&N9-cmy6d7S?fpFap&YzE3+kSYB9&Rx!50WFU%VBCN?qZSfGfPmvFs zG2vt!+a@l!+_C#{3q&+r?V`C8_d<6>;nzmtlDm8lPz%*cJQ#-$ghe5FH2&a&+B}!s zyBIqo*z5>JJl<+>c^Ms?(DAa~O<_r9m zr81Cb6$aqDhhdOmLVZ|ICLY!vaLcv-r>`>)v!g20_;XJ`4?2pZZ&#Wu&`B5*Op8fs zJGHb?5@uK=kWCnk!E~zXoJ!iH7t-BA<{2MR2KNn>92Fdi<1#ZK2;z!Fa7Pe>E6O5* z;tJw|;0E*i>UKAs$us-|r0!DpR-N;G@B4ed8`@L|kVFBZsL;e!aYg6b>JrgWYTA2> zS+n7l?ubx5*VCG|5t@`8l7do-k1<)(@D~w09!57S(J$=Hu%P-~)tZG%ya>-#pov70 zWr&5VS$EBAg_n5Hj4CO!w2bR2U}1f{wM!md>0ZAP>CwHM9w?fxZ8TRdq~wMPt~8CV zX?BgrPKtf>LWJ)DnN-)#Ua?+8_cxK)5S^tq4nEP^>Rz3wKKE#>R?ejWm8daa7cma2 z&aP{1e$sHx>+A@V)8;EAOOaD{ir|y2$h8x-aN+pgk%{7bu6}GI3KwOc4+8qJpK@~& zbzB?Q&e|>`Z7OVM8h_fYP1K4xQ646BlCwSQJgYzBUX{=}v`zE8N^ME0kk#|q)=TAM z_U}vC%`ELAL;+|vHG($!obyw)5l=va^V#-LF(8k*zEeeL*uK??jiLxKUB;j99L}TK zM`rV2RQN?^ZgAbp)T!N4+H{%KrU+^%!2vmXO54B_*uQemXmF+fh32qlO$41Z7 z<?N2x>3K0L`B+s>g{r=bZI)nl7wX*Wt?&0UFq@B~Nq-DV+GEBGmPIK53r9;Uy zm2V)Ge)!$ix$dgfz_yL6)#+_oP)1ed!xdJF!1vr0tJQ&ak>Cd7kot>0p;vr=s&P>P zLMay|@&lRi1NZm|YDo`fF+iVbtGP73zT@z|MTO%k6cMK0+N9DyoV_%?8k?~J6=^mJP3o>r2k!}e zyuR?sG!H8l#NAWJfnh%Wjm5)?M?c-u9PjJFNl255;uMtRM?Y?jyGlTNfFargWdAdF^jg*52Z_e;M+I_Ic24|2>*sq3x$sNcdS6 z`awwR=>KI$)}%!or;uYLrZII{|EhBsPz?jo6wo-N1DIcT4ztlgHYuS za|}&lLQo}&@4@DaXtu`0QKw*y+9oWxB&*}!ww8`huvI5^f(Q6F zU3Zrh2-IajNv)I26ezog-L{idpGR{GQa%Z{x`dP^zhfzFKS}i-J2^7-LR5?n;a-*o zfTT=*fA~_)4K@PTO05lmD&-#ze+rj6#bn6MuW5bdA7`(2e5r=K6KCLnePrn)|DQ^e zSR{o7vTIYAL;j~j_1AMcDveDlrlI29pq(at^w4Lm=rJ@%8m#YE&=9D`V=Z^ei`1Dt zBuIs&UNGZ}5%J?cx7>$cq*nJ7#75kg0GcQiGW|=di2@MYd}vT7x~wWeY=1rMi+8ig zNzA|`MWs<|p*!+a6?G#bkpS$s5|u=gavM%n8Mv79B4MIPK4ATLvo**LNKgWcQD$Kn zoj)<9$>H3g=&!g&@<&y5fxF~%Bq6&9_Ktu`h;wL`uW>h@u8wa967N)W7cwmTT=Cj{ z>!jl&+wtL|K1n#D;zBpMPMvmQMy1dI4+vToM5gBdDhFaRyE{DUBK54!pQd=!>!$xa z#iL&Dwy#rjQIWT;Q;8=+FeNB4#9cli%^TIp?%+DLLW)SkYDqn)_CZ+SeW;+>o7~-J zfcsGW;9_n9StEKvzqxZb$1-7MiNK1ev|&P$aVCJ)PuXeIOq&_tO^wrP4x=10PVAR; zfj~6H+nU4cz$h?~i2G7%-ll%LN}4@`K&l1?Mn@`m@`mQ0L*s+A{juGa(Q|2kST49p ziF)LAM&=#LO|Frvi@rmW0XtdZX?d}7SFTZ8JQHKh4Vx1o7=onViAIz{J(st#0YOn! zQ=!Pq;?Ta!-E}4%J47CE<#Ta>I@Qs;U3fAQ9f!ks*$aI`YC+~B&Z&16us?PDpG}nMkm0EVGn$;YZcA5jX zPRw6SCR&G~$uCpSXg={+F)~!W-yPhjR=3IP;Ma}pA;*l8|8RYq)C-o|9BUC`RDj&n z!TJNLX9{pObNqwNTU@UAh3+N*=N+4r*B0#&m>^+;3T=w^yT5Hxx;x|y74{j6f?UZy z=+2lWS%5MxjMqyfapG=Uf4Y4*=A^*9~s!eYUkvLRAML=9Wz6$QZKb{ zJ_;h1Z?aHuCXf5%7DCNK7MmEu|5AD9o8I|iKuHy`1^_MG7cK4oznc|37k-TqL&OPPmt&#Sd^`YGOi8H3(RHXE7T!5G+`r=M@DU+!f@K@RtQSP zlKQxUP)?oax$eKxU3Zo`-YYBqTn8z6DEWV3Kc;5)R!lgh2;4?SnGmBs)f-;r-f*^B zhRG%Pq{(5H;Hkd3+HF5u&1+LEQLq`pfrX8R`nWrAwz|+OiI^mWO-W&K5cV21i^%kd znz2+^!bCy6#kI-0Nst7Sb+_6>jFUb?uG>>^1`;z*e5{E)V^7zYYP%d7-T%ca}_m``-hqsmp zM@T&QK1#ka{ghj0o|0CPkG!+lI7$iBZ2fh&cpHDWPz9$ia;9ITB;aFjW^HZWrv7my);iZBE!ab}yBUcZG#L)2 z6MhLfOG7kz|2N$JZFtN$1!mJti88S)skz1V4YFTJ+nE{x3;`-3#ObXnaf=7RYomiK z8IshJQWZobZoF&pP50J8@i)0ZN76Yz#p+b$ZOR=O!{UQ}g%ab5QYoPRw>sB<$;lGT zoJ*soLNo9|ON8b7=+1-gz@R$Ch~n(C(f(MWJo=9@E!F6cj_KuE07MjkXRd4MhZ}Tw<(eyp*6HgCwNQkQ_{bu zW{m=Qs4G6OAl8gLKS{r@uI&s8JyNLW^SN=2RQQ@Qm;qUTaOlok+08wNy9l77v*+O* z|7V}io8pWqLK)A*ry>+!h{mlcssA%Lvf1XH`wE<4GqOqI;z#P)^3yr8tYM7Td3%N? zq)}kw1ecPN6V90|yHjm+2TxG*2ATkJQhvZD?M4uSP8qTR^+YC}F1YOfgh46tFnj|O zE%e9!yWELJEp^LR(JlO!5~#h}&|IajuXBCxw{!h#LJcS5HC zk*Z(2hjysgBdkYm5uMQ7ki7A45J!7=lC3l^stEm|PBdwF9g}eny7P7_-NulGX-u_Z z<}NGzb#a0y4Lb@1E6J6=ScqV53B&>~FjJbXyU1NtM73C+-;L7>g= zWb-ZR38{LapjHG0soU?La_{|N_TD4!`` zKcd{FBkFk`7oHhJ^b)v}lqmZXit4fvhIIT<^$!c|Zc+A3@5rqQ2R&pK4v(riKGaG4FT(+rOKp?sEyjESi!%dku#iG#1A`>S$G#^?^%n2pg6RX5HoQ5-&x|#*XB)+IA;3P6l^vZ4je(DnQePqt#kWd zLBqa!NIl1sfgu*Z>;o9O@t;tq%{)4Pu|2=2CI&~xga-MdrU9Yk{BeS9yP#`T^UOuf zk7@@eB_kAx>4RLzfC#6e{54%!=iUC56B22Xy``*unS3M%d2N@w{1to#wm6;$rbF_f z<0`$dE0`|$MLYOXB39K~J>NGZq-W|oPR-&kXHNZ1giA!CgFZ|vIU zE;v_(tH4vtMnW`VhAPn~)2||n!8?JZXqpl0o_T`)H+2>AqUX9J_o!#CU=U33oMC`7 zKo&($^~yK95AIPL$>gbtP$b|X!!9OzOIIiVV=e?xM$m&qPMPO?s|&{Q_T)^+NjN9d zKbrZ)w{<0M$)uXMq?8|0W1V-}N-U4hkZul_WFE61$c^6at{JC%(+KI5RC=@!)w+0x zdth8G^AJ0LF~fveW>D$b#a%CSH%*`gH2?5~L}|u`_%vwpqj_G&iT~m+G-#s)UkEbOQ##Cj5jj7@agZ+gG##B)S-1C53Ol(E$U((etU*%}A z>Ur7BeIYe`Dt=n;bBiWvY+!6eMnWORYh+R7-1, + commands: Vec, input: GuiInput, cursor: Vec2, @@ -19,9 +13,7 @@ pub struct Gui { impl Gui { pub fn new(input: GuiInput) -> Self { Gui { - commands: vec![PaintCmd::Clear { - fill_style: "#44444400".to_string(), - }], + commands: vec![], input, cursor: Vec2 { x: 32.0, y: 32.0 }, } @@ -31,32 +23,30 @@ impl Gui { &self.input } - pub fn into_commands(self) -> Vec { + pub fn into_commands(self) -> Vec { self.commands } - pub fn paint_commands(&self) -> &[PaintCmd] { + pub fn paint_commands(&self) -> &[GuiCmd] { &self.commands } - fn rect(&mut self, rect: Rect, fill_style: String) -> InteractInfo { - let hovering = rect.contains(self.input.mouse_pos); - let clicked = hovering && self.input.mouse_clicked; - let ii = InteractInfo { hovering, clicked }; - self.commands.push(PaintCmd::RoundedRect { - fill_style, - pos: rect.pos, - corner_radius: 5.0, - size: rect.size, + fn rect(&mut self, rect: Rect, style: RectStyle) -> InteractInfo { + let hovered = rect.contains(self.input.mouse_pos); + let clicked = hovered && self.input.mouse_clicked; + let interact = InteractInfo { hovered, clicked }; + self.commands.push(GuiCmd::Rect { + interact, + rect, + style, }); - ii + interact } - fn text>(&mut self, pos: Vec2, text: S) { - self.commands.push(PaintCmd::Text { - fill_style: "#ffffffbb".to_string(), - font: "14px Palatino".to_string(), + fn text>(&mut self, pos: Vec2, style: TextStyle, text: S) { + self.commands.push(GuiCmd::Text { pos, + style, text: text.into(), text_align: TextAlign::Start, }); @@ -69,28 +59,24 @@ impl Gui { pos: self.cursor, size: Vec2 { x: 200.0, y: 32.0 }, // TODO: get from some settings }; - let hovering = rect.contains(self.input.mouse_pos); - let fill_style = if hovering { - "#444444ff".to_string() - } else { - "#222222ff".to_string() - }; - let ii = self.rect(rect, fill_style); + let interact = self.rect(rect, RectStyle::Button); + + // TODO: clip-rect of text self.text( Vec2 { - x: rect.pos.x + 4.0, + x: rect.pos.x + 8.0, y: rect.center().y + 14.0 / 2.0, }, + TextStyle::Button, text, ); self.cursor.y += rect.size.y + 16.0; - ii + interact } pub fn label>(&mut self, text: S) { for line in text.into().split("\n") { - let pos = self.cursor; - self.text(pos, line); + self.text(self.cursor, TextStyle::Label, line); self.cursor.y += 16.0; } self.cursor.y += 16.0; // Padding diff --git a/src/lib.rs b/src/lib.rs index 34140abb..f6b6b930 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,10 +11,11 @@ use std::sync::Mutex; use wasm_bindgen::prelude::*; -use types::*; +use crate::types::*; pub mod app; pub mod gui; +pub mod style; pub mod types; /* @@ -48,5 +49,6 @@ pub fn show_gui(raw_input_json: &str) -> String { let mut gui = gui::Gui::new(gui_input); APP.lock().unwrap().show_gui(&mut gui); let commands = gui.into_commands(); + let commands = style::into_paint_commands(commands); serde_json::to_string(&commands).unwrap() } diff --git a/src/style.rs b/src/style.rs new file mode 100644 index 00000000..a4a004a3 --- /dev/null +++ b/src/style.rs @@ -0,0 +1,48 @@ +use crate::types::*; + +/// TODO: a Style struct which defines colors etc +fn translate_cmd(cmd: GuiCmd) -> PaintCmd { + match cmd { + GuiCmd::Rect { + rect, + style, + interact, + } => match style { + RectStyle::Button => { + let fill_style = if interact.hovered { + "#444444ff".to_string() + } else { + "#222222ff".to_string() + }; + PaintCmd::RoundedRect { + corner_radius: 5.0, + fill_style, + pos: rect.pos, + size: rect.size, + } + } + }, + GuiCmd::Text { + pos, + text, + text_align, + style, + } => { + let fill_style = match style { + TextStyle::Button => "#ffffffbb".to_string(), + TextStyle::Label => "#ffffffbb".to_string(), + }; + PaintCmd::Text { + fill_style, + font: "14px Palatino".to_string(), + pos, + text, + text_align, + } + } + } +} + +pub fn into_paint_commands(gui_commands: Vec) -> Vec { + gui_commands.into_iter().map(translate_cmd).collect() +} diff --git a/src/types.rs b/src/types.rs index d25efe8a..f0f1cbdf 100644 --- a/src/types.rs +++ b/src/types.rs @@ -74,6 +74,12 @@ impl GuiInput { // ---------------------------------------------------------------------------- +#[derive(Clone, Copy, Debug, Default, Serialize)] +pub struct InteractInfo { + pub hovered: bool, + pub clicked: bool, +} + #[derive(Clone, Copy, Debug, Serialize)] #[serde(rename_all = "snake_case")] pub enum TextAlign { @@ -82,7 +88,37 @@ pub enum TextAlign { End, } -#[derive(Clone, Debug, Serialize)] // TODOcopy +#[derive(Clone, Copy, Debug, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum RectStyle { + Button, +} + +#[derive(Clone, Copy, Debug, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum TextStyle { + Button, + Label, +} + +#[derive(Clone, Debug, Serialize)] +pub enum GuiCmd { + Rect { + rect: Rect, + style: RectStyle, + interact: InteractInfo, + }, + Text { + pos: Vec2, + text: String, + text_align: TextAlign, + style: TextStyle, + }, +} + +// ---------------------------------------------------------------------------- + +#[derive(Clone, Debug, Serialize)] // TODO: copy #[serde(rename_all = "snake_case", tag = "kind")] pub enum PaintCmd { Clear {