From 3e182aaab39b1b31ad4382c7cf9049732a21cfdf Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Wed, 31 Jul 2019 13:59:08 +0200 Subject: [PATCH] Docs: Improve styleguide for Windows --- doc/21-development.md | 22 +++++++++++++++++- .../windows_visual_studio_tabs_c++.png | Bin 0 -> 15837 bytes 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 doc/images/development/windows_visual_studio_tabs_c++.png diff --git a/doc/21-development.md b/doc/21-development.md index f73041c4b..7a8ea2ced 100644 --- a/doc/21-development.md +++ b/doc/21-development.md @@ -9,7 +9,7 @@ development, package builds and tests. * [Test Icinga 2](21-development.md#development-tests) * [Snapshot Packages (Nightly Builds)](21-development.md#development-tests-snapshot-packages) * [Develop Icinga 2](21-development.md#development-develop) - * [Preparations](21-development.md#development-develop-styleguide) + * [Preparations](21-development.md#development-develop-prepare) * [Design Patterns](21-development.md#development-develop-design-patterns) * [Build Tools](21-development.md#development-develop-builds-tools) * [Unit Tests](21-development.md#development-develop-tests) @@ -749,6 +749,9 @@ Depending on the file type, this must be a comment. #### Code Formatting +**Tabs instead of spaces.** Inside Visual Studio, choose to keep tabs instead of +spaces. Tabs should use 4 spaces indent by default, depending on your likings. + We follow the clang format, with some exceptions. - Curly braces for functions and classes always start at a new line. @@ -1614,6 +1617,23 @@ In addition also choose these individual components on Visual Studio 2017: After a while, Visual Studio will be ready. +##### Style Guide for Visual Studio + +Navigate into `Tools > Options > Text Editor` and repeat the following for + +- C++ +- C# + +Navigate into `Tabs` and set: + +- Indenting: Smart (default) +- Tab size: 4 +- Indent size: 4 +- Keep tabs (instead of spaces) + +![Visual Studio Tabs](images/development/windows_visual_studio_tabs_c++.png) + + #### Flex and Bison Install it using [chocolatey](https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html): diff --git a/doc/images/development/windows_visual_studio_tabs_c++.png b/doc/images/development/windows_visual_studio_tabs_c++.png new file mode 100644 index 0000000000000000000000000000000000000000..d511469be183d84f31dca7ed1f486ac8b74fa104 GIT binary patch literal 15837 zcmbVT2|Sc-*B@<2NQ$zyQVEr0Y(tAANhM_0tFkj0jA6zoTP5_Q2xEzC*|KM^@njMP zS;nr(a@!}yHrDT&q33zt_4~f}_v?Aa+;iRcbzSE==lsw4pL0LCeod2myU=zR492Z> z`Ql9&Y!d{7vE_1X16MRN?D)V38|tR!c~}-%WCVQKVtr2M91NBd%C&rFEBMZdyljMm z!FZ~e|FMyrQ}4oHsxDd=&)xDcpXjlu6QP)`O_ei7NJom;Ms>QDZNHu0%-i#pXL(UF zq(`UujN^+{t**N{I!7Ncbe{ihB;|^eAGdMMCE~a3=RR-c`>`!^XR3{(eCF=sF21+K zEHXWRJNSKDO?c)|@~+&waedf^x=2OTP~Bu5eSC7+3!h{dXFWtvEN$RF%TNiVP41Y) z4+(#T*!t;x*Lk1*Tw+&SyXhh`^^AbZ5HiuQI7F#2d8*-~Mbrl7*hQ z$EegO)w&8=x}|~_A#*}2#tU*PGsW2&^lA$OUc~IZ*|7$1Gu3JT?DVCXVr2QxF&vc= zSOv{ek(0huxB1#)Wc?C?es5y)8(!~ALwJqQC%m}1+EIln(sDtAw+3ziWuZ?~TYa?H z+7K}22dOPG1gjJ+Zi;hLybdq-tW-ml$%sYQ4^9gUp=t^@=Hoohsm?^ors_$|wSCJUs`7It-eC>?$G{|0Rd?Nd< z{HHa1`ib>Su?08e{ar84P<&w~Z*;YBGbvV&H$aWFnOeZB#?WxAb4@5c9}P_CZX5g*al0pfqg~r%zi_Ye=16nQPuxIc=gl0!<_K z@#6NI&VO-M74_z(to{zYpwqaZ9&xhrw8sK&xB}Um?Pnp*5mzfahSE*rRh@G1m`wZ9 z^q3GqsxWNh2*opoZ2imQ1gY~b~#1Hi};VAQ;-DN)VvGu>-9Z0Gw zo-xte7^Uz0mtQpCDXifMsR6sGg!Nk!gl_)jF&flmy6oq`Kc>+C^_yMFtoYiL_-L;e zP2cyE`qF@;TAKG$;9xBS>%jE2Q_}s{z4dA?Dr+VyU-j z<_4PVnyu$#H>U42a;{t{^z08-aNWNah+kljIkq<5uzEtw(Lifq)naW)u#64Y+I}wG z7*6@r&C^1ASF2gOZANNz4-vk;`N5V$p(+Vgo_e){#3H`Bq~m_{qmL_Hjv&q?p+8!1 zCeD`}By5PFHT*}w%qNwNA&Hj-2c0Ep`tv+=gC)m&kBZ zlCrh6Hz_F(uTL>?jNuoaOe17(r*?4+KY-&E5hretA%ZnJJ@NbUSE;6Jg~~Fe)WtHy zh~M}JjUy#a`g@B)jlu)=3xOVZi+6$)M-KWm6jk}>@dzxqRV_54b0<#JF73c98u zq>m>u0;<4hO|i=wdE?cItE>Bjeb>K^4I)!wlyKeTc(`xOI>z&yhTrm zo3?a>_G}Cds~LwM%Pjg4=@v+bpVXDKJGs{;aiqXC%SrVVl+uB84CZdjl7#BJ8}G)F zTgOCyU|_KKhro{PY_+6<{E(bO?kh``Yo!SM)Q`^#b@!_ny7>S{fzHB@D2a81QOmt&TtD`gw_7do4YHTZz zui6;Q{Nkp?wdIDj-}9nH$QMfHmF-N7RstGNJ4(~i7;kMR55xlX*s~MNq&c_^W$Vmn zR$I|qDbLUS5>hN$m*g%^HpzOQv<>Dn3v{(L%*B_Xw%V^&eJDK$X&&5*YnX}O47)A{ ze6QzqcJ85@ess62w2`Auflcl5>@X1#)(^X?d3V(%F|~7?hk4=VuCM9aP{0mgu+j^_ zgWKI>>Rx+HC(|+}joxyL!BF+uf5-FqtIu+w4Y~D zmVoZXXqK-oj*b5Qgnu-LB-U&(c$>U51oYa#gcpKY-dYhPXPOkXFz8TgnqEpvYr0|U z>=>nWqN`}uP%)f-+M7P4Lz{)c^0}!ZAIZ$&#VDxdbC6(bPbs=zBHE#bp&cPJf?1xu{Bb}Oy3o$GK{FJE&6cr0QQVfYK;m$7Rdv% zIk+*1kZ0ZSPRcOr_bD&88kLcA4Ox7FKN)9s4C@upVwr{@^ccxwY5i`Q3u@1?DuK$b z_I!A7K~&AV+vpHCm0qJBoV-*_U-VGhL95A}pD>&A=yiSZEXn=@lWhkkS2`-X<3CbhcqctMf{Gb8E%?-Jr#8xBC>8aIgMjFjy-e z`C-V5>2itm=We6hp>G#t#3ODe-!;F}fZ3Hb-+HT3(N&L1Fc5%!9Qyl_(<4&TibLqh z?j|+u8#N#5q!#nT&zJ_j5OqeG4}EZy-kK=|&_>DF2nLJ31ZP*e@^wBc<9u716d{O9 zP-eK{l*POvbXpc)E=dTSOF1M(2s|x)T;onRicl?5>i}WH-t05U5!=c-h4K8(mvo zI0Z^PyH}xQX$aPpbDW@kQUTi^kZ}RHY)iB!AGwD{3A^sN^(Qf0KnknOhENb=r%ySI z)Ug#N9wl^r!kVc^Y&_qYSWNryIp z5o|vmrzA>#h#0#GS3q;9KKS8RaUm6Jh7Pf?ui*%tbO1-*PplQ;6u&@+UqdCg^%xC}mJ4G$BW85eT$DGcR= zU_SQ&+KL_-^wKdnFxIk%94e}u>_x6^2^Lmpnd&FS$P-|yajBo~PKq~|j#kVG=42-y zLf3IGQg7#;g~8a-!^qwNWxq{0i9en&KQ}kia6NfICt>=SOo#lBM#4#H>H8;yv%=J~ zd`tEPJ!06Dh+9~{9!s2Zc+C#`{+&mZJc!5oZlj8%2Cgr-ITD=5aAEc7^5NeYhk3eV zb1u8Cd=c(ugTdiM#+8vC_1PG;ddH>U!K+(`&aQkqsLFfB=a0Qch`BI6{C@ffy=|V* zRoWfR0o^$%9&BUH26Na=ExWw8j8t`JPGE^z9O+g@2u_?j{5Hi(z2_}9yXN@am=a$D90E6zB`8dBlu>?joA|3WD!xOgtM2S8!+%yB|QWeh&wDwcDo zP~-V{a+izpn0oM^Px^qQK3Wx_yTzeo=+hLVEHnlxyEBRc4iHaP{wznIbQX;VCX5>L7q1- zADK}NcoDh?*RQyXOqqNXji8@-y9BY#4xfiByuGL4`E^hyZaVG6w0;OZ^F*2}Nu@zS z9Off2jD;8ZVv>;NA5gKlu++@=+}l#mMKCcA*EE8h26B5AbGItPh&oOlDEaCgr+FIZKQZSLsMEdjNxU6SGrl% zRVQbERboV*0k(fj6W({W+`i&|M7JGgp9HEOrpoog;PsS)(P-5Ey^@f?!`3VOCw`1^ z{&nUf*ytAq0t&CW6lIS%?|Ma}kBz5~9Nk{O>tiD7hK;U!Yk$Se;pbyk7Wk5K<;iV$ zuN^@74-uTB{cO@Jv5LZ^hn;>_l1F79!To9(cZ5=_=*8d7kvbB;OOD$U#+tM?!~{@6 zx@4_;i>t!rY(;WeS_==9-Ufqxx8#7jhI$l>h&ctDV|%FXn`h2tar%E!jSPFnM_y9@ z1Glw#i?OB&Exg`8H#@`ER_80TN%zdNpzb$a2ClVQ{>WI2UfMV@8p8~E-FK3U$bx=7 z@e=`PYx245n!2!FwA_%_wPB%SefGKAjZ(6ZGI13LFd2Gp7uig;HU zWhv8tT6W%6nx3{NJaH~Ol{@J?yr}QiJKvH>O#mql>{KlK+gC>%wfNlO;WS+4Q70e7 zNBM8tt&HtluNP$(Q7#GoiW~e<52(bgD~dy72*`A3FgxO-L+6e2hp-vS(AE`#?H zzx=Uo#iCyLSK;$)ut0Tq-=6gHi+3LtG$-d4W+u(ZH%WdTo_Y|!$(`(_u^|dMLT!xN zgtFfi=i)MkUWE$)Gj%~`bTs-;9t4$nBK$6?n;OjpQ`ckK^yp0{D1xL~U6Ylki4zqY zZ!kf&GZ28!ZkES50MJE)g`NM)Fxn$GbmO?=GH-1~vvrf1+91|b@&@0DZbc9q0c8Y! zqVFs&8YlHUkdznf-=9nER-z%qT?IB~aqc>Jy=v;JG|no}-3Mt7=QV3?0bT`WKwnYF z-$BG2+Z7OKr()t+9d38_n#r{U_pqZX?4RI{51UGRCd*u%l8`d^6I+7rV)@>VB||;X zcduBR5{Uq?nfI!G^l#sg(c8L)O%eIpCkq=iNi}XtsY{!R`H3;JFJR{F-+pA>Q)QQI zOcZ50w;3*K**gz*Q}zjBue0P`ub~ z*sT=ZyNs{K7eb4h-6qQ_5QxIQ47)g4Q>pF4`qXhQ1QNhZHE03LXGFv^?X#UEpBRJF7e66CPZvbG9|xq9=_qoE5V^} zV+I$EvcQpl`frEH-r;+ThVnBjwt6@9ARbP$o)g3a>Bf3|RknGLa=OLY?S~Q(V=cdl zYPw2Nu-QolDVKYCCKZd=m-=bH^O^FYn6+Lnl>EMDEi+Nhz=^CjQkPq3YZkQlb8v;_ zhh0uy`?dv*cYnSb9N6U1xh?Nj-UCma_g}Ku_d0SzX}NErfp+-pCm7~BDRhfP&;sq? zv1v)qq>sEMSp|LEKBazYWAE8-_Y(r|D0e6}_|eBrJMK_Q2b5BIDP?bV58sD3cG&`gfbl;vccj(O8ClySj^M;(0JI&*6`SN=!R5K4>6YzY-|7Nip~y5ZDmB4YY@ur zCOss6PdOZ)=NocR zha0M(d&eRXac`BONMvk`r1E$e#&ZWu-DD>jUCmFF;b>BJ{daAhd0=BO>^4n+i{uS^K<6lZGV|IgfAKNnT5OkA5@$$+V|AU`DQ`Tni~ zu!f`O;eBs3PTs1rq>5@YCJ%RR(ZQJ?J-7~LJIOZ`K&py3K%jkfNv@7GnGrldu##Jk zu|$cAqaYt^l=P#E8j-7keM?y2PzU``4gu>i(*?L@57_FWAF_g9TV76i$detH96tAf zAk5SH+aXQjcSO*I_oi~UJ`tmeI9g6t7#QEZTXEUs-VY|!<&2AOYKppl!l=u0nR@a% zmt5ac*^g6aHo~#LJen&~-D#^E?!-eSZfb5G;>>~D#1E~BG7nYw+vL48m5rr}FJ{P>nwX;AvN`IS_Y zAvj;2{RHR8nJ18Mc5~<73Q`C9Jofq9mCkn)nw5V>hFY8MA=f`B35uJ^9`lKdm7OnZ zblnI9^r|q)gZEB1kfXJOzP=N9ZEvS^B|EMz)4q!I;jCzqJy%|Z6YdlwX(s~>@yqYk zX)UN*Y=8R$xtdjiok=Y@@q_@De`q5GxkN*gA4XkX&(rJs6j?S3kA833qABxGiE}1^ zc51*>gxE8MQ=7x4X4Ks64CRjr?JYM;7PEXJu z^GZkUv+BpANG@#RUEg`3sc3aGY0hDQm>Pe*bqAz$G+NZr_6E~^EM1WykghI0?P^OP z_4LfvS^X{IsXJNjGg;9m1dyq}GPg6Q30;|oBbjDA@i>B`WmjV&W6tW!{G=PXbDN{I z35Yd-l>pP-NKP&Vpq98}HjGa(0g(Z1US7B`l)xm#fVusVdsdNundl#r|HW!!v}mJgG-70F z5`N#LsG9cs$!SHAZFbaXyMT> z`TRaZoU(nO#wy$_5ZQZwT`d5q;0Azdn4gHzxNYs;v5#Kmv zKU7OFI6GYq=t!icxng{2DFrb_E@5o`*mFn0s=woeaCqh^eC<=eu{$0;r_p4Uwv(?1 z*E}wtFXtyy5Mogm*W;)IghZ!ZcT2y_=WT*f%MNqCt)Nj}sF&tes%)>-g151?Z}~Ca z?sAsrLXPVFt<9dEgj;D0Klo7*}f5VMI5Fss(#sa^Om4k`;>EI8+-eA!KJ3*f)lQ9Yen21*m{iFvf) znrn|A$}5Ctw9P7jBsaO-p}gUe%Bk2a3Bbg7kqmwtyJY8CuTZ#^l5Ce>OB&m^4rR_} z+*B-I>H+l9xax)h#Zj>&s+iO(PKaiXc(+YcHXYsHpDYN}o{z|A>!7OeH0R|H-c>QF zh5~Jcue^Vp)vElxiIFd#bd*rq$J<{p*q&=w-%Wp!Gt84Pgtc`4UOpDD^(RagA_x{Y zvUh9)Qi%bHff8qhJBL^@)x`Zn`I|132wBG$dt-l5w(bSDU8#myMnB62yikZ6`5~(8 zZoiyAKe_*-N=)j*Ejf)gp3*VtCfaoj+q0%7R=x#eH5fUCGm$BwZ_M0s7i7hH8r+&DNow7jQuK{|qoOTY7v0P^g&9VIlNHi_6&%A}UQDM`{w=h|8|t)&YKpIXm-)G83=JIdal4}X9Ox1 zQa8~)wu%(1P}Z^ieoeeo2r2=#P{ zxkD_XDFR1)tW&XJw=xJG0PFJy&*%(iXS#p?zg)5g^i({qe>m_awd@}7Jb#_)KVrkb zfQ$e768%+zNuMP8lL+93WAZo%rB>k|wzaeU8H}vMS=nW**P`WbstS3bZaa&dyevkA zEEWDVA&GN^L0B~@7@+-XuNBg;=J`u8oE?Z=)nR7z7ZjNCx^MI3C+kE%aXz6*^I^B6 z3g?}$?mzP^qD*4@RQgb+F#A`K5W^Y~NwwEUT%1L|7wuoV@h(LHv3?+zfcSZD!Qyh@vdKX?3Q;BMIp1 z3?UB{(!;E=HX>p`u3#yHMU@LYjE&>$s$B>(yc?lRpL&v`PdQBIfZ9Pq1%mzNkr?^~ zl(9~ob+~me$LR47)yjhH>oYK`T?0>204JYb#jH+jamt6WTr(i+*LnA0b2xkFxlv{T zmFKE?0W)DxC6%DP4z$+j>`AtPm^r6hG@ zThwYxUSJpk5oUfU%rj6qTdD>X?0|n5>peGaq1%w{ui&(f_9Dj+>lFcAFfR7yptSU<}#crT9Z*H;(fdX>F*&)94G82Q{c zN@^DFwP8JuoNYB$oed4kBH;a&$B`mq^MIOexO&5*w|nlZn1q)| za8%b6YgiV1+Y+>}9-IBSrC(LN-qBe4>>E$KP{F(5c+=gFwKMv^W<*DePdtUh^~fZ; zK>(@`_3W;=AgpnlAKfu*r{ipdtaU&9dNgu;%b>>2K%}DD)y-}m2*GZytQx-sKU^?M zRY~isU`g!@N_K`GVApjmerq^YiGo5_F;A~l-|HRKwLd2K?nvV$W%6nBgja7ZMGdJX z?jOU=P|l^b?+U|Pl?O)p7fEcedXT}MrICyGgk*~T9Oo$#j^}mJIl5!AhH&>8i`xA| zD~kWVB%tjf%}18YJlu9IpXbZ9+RIL&V>$$_U}!RKIvK16%#?u+)W+~^|$=(nd~Fio|&>G5o`m$4y6FON>-+&QY`RhG4KcH zRp;8R7Sly)F@0E8g|LF(_JfYEqpOT~=aIc#P-6dpl4uL=VK*n0?5PElb+COv$&K~p zA8z6?%F0*%YD(APR}} zqh|&Y-M%Tk80jI045F*7l;E25Z*BZ&ryKF^Vrp`di<{5IiL)O+3c{HDiUs$jri=gN zyNh3rzg!{~6C(a_;g>{wQdlH{_x%(3z-xa}=gxl;m8~M4Ew4+OF8z6$WGeV{ZSQkY zulerL*&lP!3(I$%)V9ImYXQL!r!w`D$?doa zgL@Vf1{cXz63@DKzJljxTNwx{sqIf^i6nnD zM*=;zQCj(j{e{Zs?_)Bos|_*))dDBxNt;^5vl>GG zr)r3EPfEe?`{W6IcWSy-1Bqt4vmw}!e)&6ByS z=h;CQTDrRc8DF+0<0JZFUG`mmNE!5MK5ggm^1C>mxo^MqKq`I9t;`T$Lb(nvRmrF~4q+@uMVP~bP(5r3(FRNTWW zYSGBHOD*W$IdbT7uqVdjYRr;k-`?x2jt7w6(yqSxr~@ZaH_}@Mc_%psG@G)@Clzw5 zA03OzcSz#HVwQT;4B~_?_1g;9b&YnXG~1i6I=QQUTo3d7=rKk`!cL*J^B3foXT;NK zHSKCzmqSSvOQi;n*`NOL?A?C!lMa&Wtg)2xxMzeZ`z$p|;pHaQgpZLGawf--);CE@jfMFR!OU^d?m{o?Ty#NS4&fVG$!Q6wGkEpyX1NxG< z*GnfrReYIy92Nw!w`8sZpp$vi!M*S9y#E=JByfChNUOt$aJrseoZwR?q=12#J++ZS zp_}(Sqii)LDxPJn3zRmbZvP#F4B8Rat0#rG_gc9dVYp=)K}hKHJ9F zuHRKC@T-vI%&}GI>Mu48s2k6VT3}rl{^@ji&g|Vdn$6rG#DK+H{0k+xw_L}vP1fBJ zyld6YfUc|UeWiC8J=7ggH?bT|EY~~c{*a|mAe|j?IVruA$44FmwF%Y}lXil)5N266 zChJGPiT&i7cEA6PP(ygr)Ow+@zS}=P`C{hD8j&|91_|`4JMjXGSXZ5$&-zhw{ezUS z@TfrtLVo*8GyGXDg8cxtGfQrVfM>AAb2Vs9)Uu0p9-vUTTk`k&=d(GR=Zf!$v{dz9 zUHia~tWtLl95{2gi%ys&+7BomMh%8;Qt%VZh}$xuPr3V{A<;&x5aigv6u`=j_^$T9 zCsdp}qh{!yF#Dk(J!T6|^mUKDf&Y&^Bw-`9-D_7D7xn4y-PYwDdh^6Rjgw}=+V(;&Zk@5q@f^}8bSauRoo~R3YN~E?YyO=-9VAzq3q>o3wAA5GB zdv>B<->RZG(A2`%{A>PzrR1-@ygWJ+Wx#tXR{FFv$14S!PUip7QN<%!o|oCp=eZ-C zeinop24g~`vg0b)&O`}M%#8K3s?qkpj9FOo@#mopGi6lsk#j(ID$ArR9)O|_%W;B& z=6^VMAeIgFU|jmS1pG(Zy5cK50u23`JuJn!1C{M&cwC(4c{3?JExaF9igRUS{V<{r zkGMXeTxqU{DDB3HVUs;6>-y8{PxsyG3W`mv1l_{37-g;+pUv^9n2~cCs_h0RZ)#uk^~59B`aAC*Q}PNc+$~xE%Pg$9hN5&c8bO5Zo(u(%0k+kAGoRj%Hn2-;0>E=)m8mRf3Gz)5y_qS z7~?mrPnzl)& zskzrN$LJ>MQ{zzztb+glRSEvom5RgEx9kYY(ztY@9`kuz_-a2)_EpXu@eqa{~s^i!_k6iRjO;!MX*kG|HMoA9c?>ad;g7Q)Jka;vS z<F31P@kf-b8;6(>JrlK)+5cL*ZNSA*I#xXvt9I2l*Uv^YtKLnfZ;@P#3_kj@7GqQk zYG@kZl^}rk5pA=C2;Sjc$O#3%&O1utFPky$`{!{qWp_+==@YTeq6o3L zvGU`DE>OWa{@vJ0=}h!@8ApjBp(RgrrW>_GE*2xgP8Hd@ZY80fWUlJB8lUq^?;;RQ z6}@KmW*&3FwTkJLDyY~(fra(?4gBb%pG-5hf0(;HlYABPj0(U0snDJ5-`sh6$NfmK zDBRSL&O2a=eOM~?bmRazQ%RQ9_-YdfmcAJWLcyN>lgid#Snac&Z>B)iFHfJ^?e}25 zeZ520hMgIERUl=?)hmv_<}w1!KQMJ=riw^yhZ3%y6kO*8-2s?#7ak`BxqUL-co=}+ zGwmfv^Y!lHc+frbFQU0$4t)d(k0^CbM)&UqbX4{ZC?qauzY*$nw~LyZL~hYoXsq69 zR-6V}q-UVP=j?i@1R8f$-`5~lhoYS~!F=}cnjL0V8N#r@M@m~7Q880m1|3tB<5e~Obk@FT6lDX zr(wR-UF-RB_S&MX1G5PemLJ6#RuS(z$^p$Xcj;pQy5|I_WvnQy(aw)ve~>_7Ixm=U zFtWnPkIw8RfT^eRkrlw(5wc86vnjX~Kv%H1<@;%W&U|%f#*{*9kgw`&b!gpGXp68H zwM?)tf2bv;n5wd>8re72D?F;%i|P8lD%T~petWe)O0!i+yAm3hL*~t&`iG*r@IaNv(v&CWTD(}0Q#R+DV=3`)Q3ZLKRjD3+f?`0a1hvKjGH?vF$84H6k+?uYmb z6Y*jU_k)stfs~6VrUk*0&d3lVdKB?`Lz5Ce^_#vREAB%oOWRDLdBU=HW`BbGEGF;T z)j%)irqz!HZ-*j9U9=^37@w2Pi|*PH%mryw>K&q&&Mx!aQY0*`Vwi^pyJBkq=N;Ts zw59Ziu6>j9cE{^944sHM+Pkk|%go8kW4iXgouV%_Q%f$wEjrq6CiL73VlF1WRY;Jm zkz7ygnXPA6T?wcT*fIl(^lyC8i^@89iyMt0t6RQ|ip(>N2Tfmq1 z%Ig~c_wRiPm95NmMd3nNrqTjJF);GXYaR&u@*wjb+?*4JN@nynNy|