From e989e32fe80ce614d2ace0777d17dfdf2d5cf156 Mon Sep 17 00:00:00 2001 From: Serge Pilipchuk <112853396+sergepilipchuk@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:10:08 +0400 Subject: [PATCH 1/2] Update Readme file (new template) --- Images/app-bar.jpg | Bin 0 -> 48198 bytes Readme.md | 78 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 Images/app-bar.jpg diff --git a/Images/app-bar.jpg b/Images/app-bar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f962052d95d42005dd97f64e810aee7cf3ad4afa GIT binary patch literal 48198 zcmeFa2UOEb)Gr!DL_kGUl#WLbkSe_s8z3Mcy%QCYCS5uq7K&1(OIHFSHPSng-a&fr zy@Vbh2}xc&dd?A!?`!wIweGslxHM+|vuAdGyUd%7+i_z{3NfP{qPB+1EBq@<@#k&%&|I(>@pI{n{x5s{oc zNlr@st%1|0$p2fU-+RH=5hVivL?lFiz5qX7M8}Aalbj$uNk&dV1R(zYjPURGr$0SB z3phqZOnmG(F$u}>8`S|b6n#T5*85^6PLJsM^;Y$u7aY5rk1vjuAaWhW78*Q<`$NY&zziH zT;1GXdHeYKy?)~#79J5975y$IHW`|d`Z4WOdPZJ;L19sGNoiS4ZC!msV^ecWcTaC$ z|G?nT@YM9o?A-jq;?nZw*7go^cW)nsrXsL>?D%owJ=Db|sF)_e zhN^+~Hpw`qHX}vUn(Fk(ox4H?0RCNb;Ce6QKv{O^(jz?J(IBL=5ROHK-~n%vS9xnO z7i)3gY&>ASjZo#%Lucl}BIa#`Egs-yf(J~Sms1Zy{<|a;pKN2xglZ4>&J7 zXymuc<9C2Dzyl`U;Q{-xI{)s6A{UtZ6u2-vfjel#1M0e*FFnKtJj4TJ`tg9hc_5B0 z;Bz_UssSZxw-^tA^Wy=VLPkFSId6Qs!asM+TeAwx%{tT#_y`2xn)MQhiSAD*t(O?> z9qBp;<1=B0YdG{RC+y1Cj-p3VHFe}$R80{e?mqj_LTptuYWc3r$~OH`G1kT)ltbG645Ge z-BF!8BGw205>3Dn$$Tz3s_BPGEXI5ex5@RNQJ9xA9;UeT(C#psDyzg8x}Od30s9e! z{c=QKj~y}LnIqygBtC4>fWsZi652ZiHqlWOj)>6-6&LPIC zYMU`b4N`;WUB<*m;_c%fn~Gj7KajKCSC##&)5~(Pf9f3a)+gWV7wGBP{*W65=*7Hd zuB$_`RkSI2cHse(xG@%8>um`<;E-<;u6Mlg9|Lc91n2*r+`b+W+w&u>9hUOZ+5v}U znsTJEcVvfk;`yaRDg|IaZ1u+vn~6EiA%%H=^RPa=B|S{-LInBQA$J1~d(|69s`DP< z^~hIAo;<=#$x-^t|6huw>witEU3TXWdjkr;Bi`VMaRs~v9a1}?oJ&U(!RUz3`j-ci z9W*@R5&qYkush;Or;d2N|4N_#^5>REhs}RSCP#;(qu(Uw+vtDD`~B|;GXBk3(vc|Y zzcdU!=)O_}k!Zx8Q+w%Ib;a`pk*W9DU^ss>(PQT7D-3j&%BMvFq7tv<$6g;eS8sit zJMT7Ym#@4WM~jz@+?=EVvBT77LI1(Q?BqaQ0~4I9EFSQl=W(0y{FCe)-Y7hvDwe{v z^{J|exMA+e;L!#<{t74J&Fl{fz55!@6SloEir01GKF50HpfmD^M)g}*zC5}T|Decz zFUB#RDMB%cElk<->*S2&mgHcr>8E>pL1sd4Thw%mBN;xa`9*y>&+_>}GY63Gmbld9 zy$>xB<%o>ayxs2E%}7SC+Pfu%`4thjMW8IQPg4z1VVvt+rJ5Oxm7;mRVp>;UQ@^Ij zvg(&ORx|9KOyp!woh7dGXuEC1ph-~*jAHj>fC5$T1?821ehPAZ`baxvGTC;+nTEkO@2=Oi0Mwy+_jQxvbMaUre|8q zEhwU=pkXKq2r|5rwAS$$;yX)bLJ8>>iBd^I_p4w2qF{S{}I-Cl*H?WEf`qn)4(}1eWRKoI2faV`oE*Rb_z&J_?i1Z00bBrle>?T9?mLppOb)pA{Qe0_{|{j^a&TX23)ZlfIkgKHpFHuY$@tX#{_7KuI;MRcUP3)d@Im;u2$#sl4YH=+>oByv~4V zaP6?W9zTuig=}!(0fcVN)TS6acb5Vk>cWkELppqQX(ROX8gyBkLWe{{S2g5zG5R=M{0qGwApZO9<##FE{0Zs9l}=s*+`oKSN-6)y<(T+sllqm^ z35e;)5Xe&J%JI@r>x&aq^{ip?w9X}^#k4N|H;&n|Jmh&Ur*x*Ca$oh-xti!bg~tW#+Z^u5l(& zVpIO@nQq~$eF&DyyYnyDNJ80Fd6nZ{Yd>!0WWCR-^;AsGXgQ?x!r*Dn;}@Q9tY5s+ zn4xl(g!cAx{#Lob#%0|wRR;yB{>{Omr|!E!cmUJI3FJB@E^=2l6wcQ==12ONBS_cNIsMp&&5dGGKPMxlhW3hp2v3<6S z&T9H6g+Wpb*ko}7ng)>o%|`gWUd7!38$TCzt_aws5SBa39z^vFguq}0>UCwg0`^|s z#sj!>uK0>u&n-gw+FmaZvmTS|<)P4LP$|qP4oWWWe;kw?aIdlpp)E2hvV7jsndj3f zCi>OtM@0%m_N6(RR2>UNFLE=dr5&cFZwf1&h!soj&)OMqD-;iX>?ozZC$eF2H%woN z>P?ERh>QQCSeTP~=$#JI=uqLY_PK+%!}R5!)NQE^hnpTH-f^@nx)etLV0k2rje~zK z(md{5O;=lJQyPlmz}NB`PikV;ONE?EHR$YAWTq;2@p*1CYf}$Lswf?|RHl0a_8(l# z$S&Wv%iy5wtt;#8c#*_#N2#g+otkG|OD6E#eDL8H9c6K9i5yIAhhdl-Wz(Xtu8kDe z@mS@Qtz-+_`Em|*d9{V=+>4U{IkpbnyE67Alm5Uq(7b{@&$>@aQEbcf+OE~uCAE?$ z$@KXW1slYpf+$*(H=~Wjf(loJw3{#7%K-#Fy+?#Ibs{8C`YQPBPh;Cxi?@ta#=*Ve zsb3_tM(E#7hsH`eX-AtY$-ZQ`M-8=pi?S+lp^%K}2uj+sO`Rl>tyoau4|}fsE#^?Q!fd$?wI?>IEVVj4%3keU(NW!2pS)V~ z^UpmFde&MxFWG#;>h5cHk_gIPB=C5v@OV`8-kB|t53B=kD&MWXoYn~&7CNO;uVg}w zprL;yBG8Z;){*!2hw=XD3;*_{4-c90^>3#8;F}vDc*dF^F877c54U>#PZ#_*#kc1K z&-ssef2(%v>oG#fpQJ?QfcH0VkR9sapUV6M=M3N=GCvyuC;&tp_9B0NI!1ou!pWaq zzPLdMB}kR4DYhf^Sb09TT7Bw;z;k!+2v~&O)gl`HsKB^!V&O^i<B_kC!)Iz$R=rYw zsZ?Hi@#JOot-G_F$)B286Q4uSrSB<8a80G#c)%13h84aM42B{=L(HOa<+Qjyj0k_i zL=~>H!5$Z0i~yBqZmmr0a5e2^axDsTu#^{sK6zHd^ac-*W+!BWI&ngdz@t zry>op*F?sr*~9v2A1fpZSv(w@E9c;2+VmT&Gj%ybZ$a-zdL`u!-$#9^Cl_B{3~XWN zFuC>d;pGUWf3@TyI(5kR)MY=1Hk%75i%>}}7L_xjZ(?ZQHpw_-wHO@tKd!J#@o>Rw znQy1c40UO*@licy9O#Bg)x~)p_^0pPxIjcxI=k%&%{{eu$@~xMOhRnx z_|Kj)y)pEnnC3m1jnIn0N3%qlREsO-3>D_}AH0k&a+C3kW4hv@E+?Kd?{a}RTj%8G zZ)Ana)Q{20d|jb8;mD#A<$OzTIm-wI&_;RDb_*>j*QW-hRy5qc7RKdj;`oQ&*(SZS zB3ofCKHDW(VZ3&$Ck5^vNT=4i4yQOfr+cEto_)Tj z0M`MNXGkuy9vW%?iEsWgxte!JBBE~={iE8Kzf9}T&&1!Y{x3oTnJ*7N*>^hzeEi31 ze|Un+7hez_zI*x20{}DtKMnEx-+R1ELNI+2z||l1|9MkCdpJHI#0x)Kzx@7`kxs3? zN?8j!H8OQu?&NJp+Y9wXvpxbW)W^4OG?)*PI~$X2;Nk?v^p;}56`Kqxxq2gwSD0dS z?$%yww3EHW*b)1elOx{~`8?h@JK7K~rUVQk3NeS(h9B@6K@+uan zCi_m$FASITDYd2Mdj%P7UhN+><{o|{<;XwtUo8mMX2|-{OG|AtM739a?&0_UsI}Ba z{@D*S(vR!Uj^(+2H2XIZLzcL%8{ZPzUtD+fPinQlcw)%n{_hsZ{Kd-Ov`;Sn_&OBV zw?I9}3wpu-F(S!rM>^%zzW9UlA1ye1{*Iw)WN`I&q$o(gVM(C;f#ByqzYllK|KKt7 zz&xMv)i)3|KI{Gf^}%<>pMP)l%lFa;Kl=J1&cht=5B>+0zI>x3^z->onzRSsTX_DR z0`O;Fy2Rf&Q2P%aJ^WLw$$z$$902&v8quF{d~Y|o=6}@ggCE%a2TlEj_IDnie6N}R zopC*%Ke1DL@?B=KFTac6FDQSI)_m_o`{55{j}W~(0=&<=AM*S!YR=y(NBt)=>iK`E z-v79vzZ&>Ytoa|^{b6>0oA=-5@Ne7t+d>2WQ&Z*r$GXJzrmFbW%L*ou*a_U5;6i;a zx@;;$?4^TO*^rfCX6(hn+roc2^uJ@fW8d8U|NWmRk8Q#Ze0hP0XaX|NrPFTV0dJjP zSP#PNC%OOmZ&-fA^0OKI)|Owoh2OCJhUJ$C{Ic-3w)}?Wmk9i_@VB=7hUJ$C{Ic-3 zw)}?Wmk9i_@VB=7hUJ$C{Ic-3w)}?Wmk9i_@VB=7hUJ$C{Ic-3w)}?Wmk9i_@VB=7 zhUJ$C{Ic-3w)}?Wmk9i_@VB=7hUJ$C{Ic-3w)}?Wmk9i_@VB=7hUJ$C{Ic-3w)}?W zmk9i_@UXUscXh)l8X=X_z!fA2%PYU)s=8+hL@p=c-ul4A5I?W!|FX6JI}3fv23BL( zF+R)~!uH*?CtfD8griAXctA05XOv7{@gScOxAz(kfb~IkN}1nJ0mnY!0RtHj^sS2( zGX?)Y*bMXwsUN$z0?K=wv~~fq#*RyfK?PgkP&&9#JfO$!DkIlcn+s-~1qUZ!*gfm@ z${P=GhT;Ln>3G1>N&W5Muiv-W5@&TwF?wWhM7*%2niYCJ=a&Ifr+j2b`N(R?&W)Fy zCQ>ev)7C;+5-!X*ygC-X*hz6d_I^#3ET%cT*V=T22R55Cpy9a>R4hQ*tiLQ-7Oki4 z#AN9X6l^^`&FpeMKvBu5UF8fe%)u-w|DKVN`NOyn`Brf+uE>*~lxD7!yWr`j+IUk| z<~O%aq9?H&xSHAl)n(mOwld@MAkh=qD^Hk*k)PnZS(5%c5fCzVNX4wME#PV0=osvHpxEwiA|s0&Y$pIz;QoDPBpg36*R`zaOpqP6C80u{F? z@BT|w$g&ZshaU>!8vIW5M-Ay>ItU9EXxxX0K-0H=g!)uGiC{DN>oM%QbIO73Yo^a$^ z+5#Q`fVoW4intY>zgm-cLrmQ(kW2#)2==cjrc{j{ez4q-<)Sboy2LsPnzU9D4?^*4 z&M70U4BYEe2Bz(zMe>H49wyL<8fVm!;sL!LRMiL&y>`T+LU;Bhvh3c-qytg2{6(;^ z#M?}2^@xb%U5hb@@g3?npZ?mp{P*@~dVRSUE?LEBiHAhhp(QsF@eW{LW%ofTI8_Lw zB!840yUh^=XR92Cs@&39}+P zX_Z_0cvZQ-nr-R~$(ExHu1LNU53uUbzypTt))XNAAaC{JagGh&aHlPO(6NR06X)ac zfUSZ9hIXTxO)IaXR*XU6nkhv@#;wY>A-Es}r}w zVKLG_jN_**h5#}#hHzEzS?f$mBfc*K#VxGy0h-dpFG0*}_96RJq{CJD6mO^bsWh_s zXeuMZ9r1uK&x+gAW5WrjjWOigJCd(q zN*EU2w6*?*t9)pbq6Atp-w&fiFKzKK0bZ?!bJ zDfy2OH^$!;uGA#0^Hb9wMRK8??r7w8I zlP`bp%k+;;^?MajQKVGvadp1Ky)S)g2EnBuCj<5j8-ugD+;=^GEAhz(hqo}hk}ono zqc6~O7&=dx^u}QmtA^O+$gHIO+3o|%m_)}m)b$8c(e6FM$nYrcKmj;K-Nihov{{ZT ztAYH{xSb8ma~N1_q$!23%(3rVphB_G;NZNPa>&c%1IXkB+XE8EW3*3a4I-B>(d&lT zC>Br3d63W4*YWu#gB-6_xWU0xIpoPm-P_enOi!D_^^rb}7SROnCNd%gdLCcKe>@ zxiT&p7s9Jn>X|-5%M$TYUZa}S_dfW{bq4{iuhl(4mKBlIGpj3#16I0S@yRs$~lA3iYKXX@1xw5ww2a5V=?Y8jXh_54QWt0KS-8`Kq6bvQ>xaTfHM<;c( zPDvYT_Hj!wq|W6TjSTULIQD0&QZifUEAnrz%tj$lEM>30T)D6WGlU@l3Yp}3ced5+$|&r9$#9*A zgBJXl;Ghl@i{FYyK)O%7mHe|RTH(3O08Ag6We2<)>h2m+kN)44I7@M!=g&!xu{&^#n zhwdA1>(bAFIGIt4C;-7V^G6+sA%)i_^RncC6EA1e4z|lw54hYs3$~>KwIALlU2EP} zMX@{?fXQwTG%ZuU+*#p^LhrEb(L+PF&gc@3ccp?a?XsQoeb=TRSe99nG@3Hoc?qL) zUdK>`wq(bd;QeM4tvgW6}14h(%cv$zum}+uy z9ZpWBczPsT%U`a6!t2F_$autn9jNfn&)j42O776C|8sv`kv>3 z`Y38BI*HC(E&JFp9`P+Q0l?``0&2U>7?9>2z@rWs^HVMOIifPfACCrk{2*Nk#NaCq=b2Y^oB@?d3k9q!j6S+yE(ak6^C?dhan!4n)SzP2B&K zrle2JJBe|c^GaaWns=vl7F~Heml*jlB^t60iCyf_ud>^%IphP#5Y{Obk(a$~+-NvM z9I=u~mcxd?c+~6x3oRKVY=Q2gj>x~jW2<=vp7E#^G6yAZ(n;eXk+;G)m zNKEU8-$_tpkd)O(iM(gnpN+H4cYebWHKtCA^$JN@Ebtym{zxC3LwGaoKJGHKQ)S4!O@ z9P!+e<|IRS+FL$+$1U2$*HVjuIe2fhxG~CSgOL&uV!i>XTAZ$*_?&Q=nE~#KeAWYw zGil_dJX-2;j8S1Sz+lQad$N}z?YD_^0$1Uxy0i6LsMpt3 zB)oCU3;R`@QnO}BI?VA7kleYbG)1O$DXqBTyUsc*o6>7#sC}vYIBX{KdT&%kULO}S z+GQ?pa3)%%vi!uu3*E1p!NEg&Jg-2Up9fbhd5U(4@vbTpEsP^ybiZ zYTL+`Q$e)DU(y+G(p)JSw)f0a7VcW?Na>B7UaJU(-rh9r536Q15r*Fibhv@MFdYd3o3%(@B&elz*YnpCe z0tYL1Mdx;H`wVp9p$m~4js5?eV*Gwu(A_!cqk*eU55_=^=;MP^YMYUrW8{>Zi7A9p zVh{H9v#!3l3NuED0j8C*RI8MUc#InvgXdLr2G&2~oTsjWdOLqCh%b}bD;_esG;GG6 z;rbF|^!B5!oNDVSw~_r9t;~)|54h%Y-GbTq!-Hnu@1|0W%tz&U!MT{`nMrOFQ**Ij ztyIv*1Gtu`m$pkIMPgi@me2X>4)ldSKWKtUxa#jj3oB}|Fl~8;S<&`fc_D63u8+1C(Y`T&? zm>6)_ooUTVF5@j)XWE3Y1P$!yd|kW8?IJfJWR0EM+he3$7_ZW~{-u>SYf1V6(!0E| zv;8R^Fqw4wWql*Pf~LNL1;?(JvFfu&I&a;-9pn6GNITI`j4R?pBMb3>E~@l*M6Mzs5 z?~}R-&S}!%W?`T6l|mfcmT&i$>E?dL z@z1s^r5^Tk{c1*+3|vB7;h_yHXs$&Uwu_Qb+gK68P=X2e+g=B8y?bC9t^F+VvwMxv z%))#TWJC2s^`n`flnfr$f(Q>FAA1=;SCjPRLx+NiZ!7hf_Su~4XRcTXbLR}s@_Mx` zrQ>|*w3M~^)RHaF#NE_#ucVDLhO(|x7A=L!QLUM_k1JL0^dhYwCu@Wd!nX~nFwG}P zNohvMVWWIwY9oc<4z5e`tRFv%olMh%d0DfYSD|Luhm;P zfuqg$Jm7VcbH%-dCJSY%cB-4!&dh!^#DfoX8afgM>97S;`k6QzJq6E#JY%KXOEXfu z)E*oy2|%uTFnSEG!K?fDMUi4wpyc(-IJt_Y8qEnF!d*CBACsn?8|-7}Un#q&tZWDs zRNAcHwd?P=wQ!Y^V?t}G^HcSX@PtpJ&X;CI@8O`eNn`*Ll##zJ&QGH#R%qF!QxvAJ z;129snsp~>yErbKFDf!A3qFhTa}1ecFDu?CzV9l%g0Sp?*3q~azr0^xZCO?hjvnV* zZGE<5)}oPM7@G&xDt$P=1BUfETOoK77a|2BuIfHWzZ`N)>>g39qy{_9yh28RdU7xCmBloHwl>( z%Q&8B?eS*!#5d{7{WvOb3$$hC4@ok+Rf0-DWzb?vOuV*0u)ONB*ztrXm8gOO=W(OC zJ|5^k^HslE&2}?ng^6XD*Q$;d7&h+!`TmW^vjjvNE#X6 zN-186suPNuY`wNFq*+zrpvWuJLi0PDYW`VR;xB4PYlwaGV1Zmvwe|t*{zhKP=r@z zKFH$fo>Y3o2hLg&h2!p2)zqj~6`lsgc1htO=-PR8g=~#JcQW-qZ@&2Zv?OuSMv@=2 zatz|}!s?6)r97vA3*<92eA#s=7QG7P^<{~p56G+SsS2?W%2~$_BG-1-JjYFgA}Jo) z4ea(5Wx9S`&BiYD6iwyqH(1qJuaXrPfg-F?dVVU}tlK&naCg>DmfrGJ z6QY2bru}gZ#k37i9Jz~U+pDzW*tte6@tHJu{~W6Qo}{LIP~ZC<&*2s>>xsJTGM65c z`OO$ZE_R($krJ6&))x}7BH-ASk}9r^1LvDg6b$rwxivet+)c1ih(*^OsA%g4zamjm zGrx4}i(R%>5N9JvX~`1?L6KHd_M%!Jz{Xoj9(aJ87njCsSg6d~KNE(3*c4*e6mV1W zxM|4JP|~}3_@J;7TOpgVXtms?V-jSo~LVJrEXwp;d1R?ftDGG<;s zezSVkYl|5t4!V_R=%J(e46?IDxVDMSwNt1%n-O#nmWBshQR{t1fw+3S*dArxUck6n zEXGcwZSs|AFo#)FIl)+1RN^`M-pGkqm1fV`^)0b66)aLRhBsw} zzj3Pk!aIhon}4e+kQ|6VGcFlE^RN{OjLPZ%Js^+fKw)p zP1Tx@PvtWZg+CWiRlkAEF~6l{MyJ^~#|EWNF1Kkm8sY&NonE-A!kaP%y)Xg})3H@{ zUVV1X^|tmKrNYvhz<8;rt~*)|jf+IWh*q}7YH>FsC zhslZgYe1z_vKP_7@O(*Crr|$ag=yql?cTAvTt4Qvc{?Q8AKh^odWlna8FX5As0zV4 zjk9;&k?)x8dkobelU{0Ba#k+9x)la*+aBI`Ts}P0qP!1>?8_INM9iR`lr!@)dfAtD zPL`XXbrxOyu+fnkA5L=)?8i=w8}>jrhMD~8)j*&&c5Qva{L{lDhj0&OGYqH^w~^{C zSWz6!@=U~{0`|zQ0bIgX!JS5_l9KT#mwabYJ|QP)#R}WDE6CZCM(66z+mp?!iQ(b1 zt)#z}WhL=a$;JBJBX2HNE2=9u+KVZ+wu93cGkb$Y`Rf`!viU6ad`zAqQ7#m|<}fT_ zWj$8LyI(gomZ7J=(rydh8~SKOKezwx;S{eWb>x(b2atV)pn2QN`>&QeZ*4Gc zSX}L4LnS9Dkw^=iV1RrHhhYl$7=W);v;@#)J?R&FjRzFFLAyIHcmUa!TRXiRO^drq ze3-R!Cko`8fmNOdKywc$x=MOFS1AaK@;^Fxc-2$p)x-IOs;F0W(w>ADkVv` zQM<~+vr~{+Z|d`QI^$IvU6i;5gmB{@i$McArlLw@8RGI(glNQVu5$~tf7)Gd?b<-S z1eMnubxX90Sys{4|H0o-yo*EU2@?gSp-ZKdj~{f-0eNh-8`*w)=H0Q0XQo9|-*vfDZORSAn@g^_K za%5d?wz%mG>+6ikc&A~&N`uFyVehsSnAUN6O1ukRm8P8f1Oew%YQZWmJg@FEEU}Oi z_G%4WTZ`N+M-8@bYR6Ig)U-b3Kixuh*4>PjcqG)2wup|#vMc?zqE>Pm^)M!NE`2Ck zC&Asp$H-D6+&jsGp+sy6B%O<3`jB3Hz)E+_ShQU_9TftJCMN_c-3Z4WYV^fxc!0&6 zTD`Po*M5=_4=rKxpx9$pKQ+)RNcONlVtKX9D$8rZ723M8U5hxJ9X}mpi+u`0u2>OH z=d-|c7&m+HfX|*lT+EAwDH$@tVkO~5JhZc%w440<|06^xaNx-2Q?U5tjTVgW#N?`A zu0){MaWA%V6S3Jr2`!6yDP^a&ls=S6S#dM0V$RMjku6oc=#!dfMW%{{8;;F1DR3S7 z7M$w6$zKcQXrMHF0FfF2Px92XH$#i42<#dC_5}~!&L5PW-B__g|C}L zlQMEG6iGvSg+&P3_v(gH11hZ$$iKcd1;U|?a=c!`Z`A`4QW;`t+4{iqE2&W60h#{O z{R#=f*upK*onREL>=ZJ(e!&gwZdDkDU@xylC}CbxRCXW$r> zlq&PLVS1&*tBxhXgyeb^gy>BwgHCZ{V^TuVEOIW~W!?(5=poiZebsMQOtiTrOu@o6 zbtA0@DIIHV*)U=rWIL)^8N5mWA0N#@<91jE0|a-`Zm-!hur0ry#=Pr z1IQL~vTtXg+s1eZHS8*r;ZAp8OY0LwUhsK)DSs`o4J&!tSS&*=`!rwKDmr<=w@@$@ z)W~ZW>{%);!Vg%$_V^xfWpdX`F>xj+4WIK2N3^nAgBeq|#5eby-qdzn+zXoz*@xmR zSLQ8UXH+lhzlc0>Zpvj7yB30q=ijs35ge8H5a4trn=Ug6H$DvV=tJcPaAYk{p;*_J zsz4YQR~(&Zut=3A`s~jWy}_@LnRVPCVO4ucsBn3XkVeM?N_0c8{F>XFN!5h^M?iLv zg1?xT^Hpztj7}R}-U8eu(HI~X46$C*WZshn#*S6JH){&bFzw=1HCdE762bZXrc#E?*ae|r<}Sfkyo$z@>#^y zBfm`nppX zKjFGVte*UywEPC7e9yi;&(GWTypPU%WQ04x$siQpEzh{k4xk>mq?kBU_Mh zg8o&yEJz8bCvf7#9lagrnwN54lLFV`MW>AA^!#0=v?QVnSW)aFQ7Xe|Nu^o$!2^l9 zsRas;W=Hu0H9SDrXkQQOh*4CP@ za`|AWK0@2c?jX$N*#sZ9yaIAsMxGwT2|oF=sYwV4T$f$0BSNwt%iwpkq#7%T&ioqH zs}VlLHqo@xdFh@ISZ3nxtGUtlP4ae?ko8i5#-()-BwqP}U4%o6gz>eGF-^jN`enfl zs46&<*95ku(qYyx5P^CHgAM|pMyD^7Jv%!(DoH_CRb(VG>yc$p<=`@5 zaid~i7VZUdbgYK7Yxm0%T5TIW3WA39i!{0v(LhE~tmP34x@ z$$A#CB}izcsZs(hRCv3hozNpz*;lQyY1hBTFRKTx$cI@QH5Q{l9@5&Kn(m~p=IIK3 z8bX0>$HHP(vzKtQ?;fu8?G6d`i&B8Nvoq9eE-j{x90(Rf$I0jjy{ehMX0l}A9Fg4z z!zqfYHZxhVK4Ie+6$nf5c=ZZI%u%9HWAL#DsnUj_DP&D$j8%5$k0c??=7}hrU_%0` zd*r~q^8^>wcF;(O$UO;HzS=;RO3npGqMk@%*Qp2#TNwmz0-tp#f zYcwY)3?s9*JvP&}{Nwz=L2=`X|6ZO4*xd)yx;`5Tr)QEggJftGo8kefggXJB;{h~l zxc(#;3=P`N!oPwr!h*8fv90bNVuSHH6Pl^E>!5)|9r0My%#bAWaY*B85)#3;t&h$M zz|N;(UDHu@sDqLHvjh$ZKiM!6EJ1KSfcKON`{0D=xT^WVZIl955CpD;pW(yMMx#0q3tzgIb%JvF?~v7*6(GhibrH zl1mu3j{_p$E7Qzan!?2g@Noh+NOUwV`g{mA zZruP^Nx-LDZ!vVyWy4Cql9dMG9rTB(Wb7T>Vz59*eI`XDg_I;3|jwP3xEk;P6mZ$ZRdJ2l zVwLwyT}8+Pldso11d*cwjg7aYMV=#-bSrAvy@!ip8Kk#0@v|mB8u*Wh=Keb{#YeAXtWd@yEG? zgM!YL*ud!tW0=h*2E_ttm@|z=r*iE=(3;u%40EpRIX`P9Bm6l(HpOwE*%R!-zS9nN zp)^<_#3$R!+Q@moCCB;gOst*(&Wm7C&)^0O{e|U-JxSbN5-()E2u4Z|$<~>l819AR zPIQ`(*=BaljSSV|0SfY#uhF<9+p7VH%Fpy7zQZFo0Mt^>#LTZ@S!z*c-XEkGvi)mv zj5QHlS07Jf&mDv$*od7{)}1!-ly+%%hS9I}7-vUZ?k*ftt7?DNlf^B!Ehy4xIwZU5;s?{@x>!ADp1)U6%M!lHS?Ri9uHT76}MONs16KE}f@KQ6PP+^&@7^c5S} z!rtNmjJH_@Z!&fN;d}Y@SnzequYqScw-;3s6opXwspOW|qvfr!OaZqX+~n-iWlRz5 zqStscFkVlmxMoz-q}gkS2$7}x9%QVo1WmAddk~l)g{HJi?HjnQ@v07Bc1TDgq^a?A zE4&n<;^q}CHC%NZ^V9wy!lD4N3E_uq3@%~ahw*^L*DHOEp3ewB|G-RGMf>=`ZC~{z z1c`>@5<)|a)fRtVc_6i&JO!~}KyHDUjhYGW#;CR*Jp(^LM^?IhKpUdIIW=u zd~EQQ)8leF0XxM>fczxs7VJ|bAHtKG+RtL3Hb?%%>gY2<22Q>+BWdVeMsS{GkXc)* z_4x@<Be%lQ(^VKAJRnqsFK!Au zR|$@X7%(#v)HgJkJ{sbHi{HZX{?e;_giKwqP8vtSH!ef&=}gGu?x=>ND%TH~;7ZI) zgr5VkDJ>^BtCvX!=i4(URX?)^-OKr;%R7C^@%)SMz{E7-^qEu(>dvbdyUP{VO~Jf- zT~1e2!*~^po6C77!nVyy_H`7>x~5!hSQV&Vo9|u}Ym%(mf|1U#(5{1Eb7B(vbPlP; zcJcJ;ek|dIJ@e!IU6`Wc7*vkQo78}KOSM2KYizWDBDToZ+7`khSYJgKtrcpM?3%1Q z^GBPH-|hH=j8P(EXZt8sdg0e;5_W-?QSqZu!xMK~?*xzLGc#}-(Ka|Zgw3fbtfv-+ zExYcX6l1(OLyhw4X!S^f^k{V9u7FnzvDh%PZPk@nOcl!nB_tq<5I{8p4U+x{MHo*| z3K38Z_llAluR3{HmH)>v_fnp77TS=c$R(RNuTBr>^pz1UnSaf5lo_?@VXs+Qj z9Um8=iJAfTgn4Egu~VD&OBPfCMRa5NRxV_;t9Lmxs7S%)Y#vYOI2R2!CL5{Re$W>x zcfNgciUp+c9KdiYciB$7S$buapL)r(#6_#2cPRx*le5<4znC+uW7gc`bI;oJj8$*k zehP-iz&6i-$DP%+0Xp4&`@R6*yGOn%QUza#z@jGhO_AB%hE8yp*r`=)tzMv)US zi+BK)3^K$XxcN^LAUB!n)PD2Qnt~TNLMJavZ|~!o0vHt?7kD}u91xE z)khVkO*`YHa!+kq+8uPMyiht5L(Bo0RCFb5$*wAY&B4y;=EFnSn;KwcHM|Mg-Ek(Q z4Y%Edt>j!KVpYyrvsc0__#%ptQd?Ct=-S*3`2(+J!bWbwz9nH;MiYG85;EYQ6t9}p z4u3(3#!zBQW-{kg-;)E7r}=?X%wJ8*AYoRyTV}8}kp|$E&K;nSm!D6_?h_r2^FZfR zr?tJkXl@`yXV*bUKphY^fA$08L#1g1v;q&Hm+##|A8cT5{5&7$ApYt};+*(+*t2BB zE(Wl7`Ro_4X84W<$hH;xu2;$Hi>flC&4sk(QQG-00h zp8tt2H^qqp90aa^A@2IjwaOlCa`7Rzp|xUk;er$6-PER7nyJI#_)Bcl z8&4B{P8)q0+S)Juc=`M2+W z0h4M2W$!DXb=c^o;TefJFa(z)2j+e?A*Nt12} zPjTdnL%SSEKUoqokz^-cP}f0(`d`fx!q$vE$IWkg&dv=wre?h zu!9plJ2Jel2uU;vfo|%mOFiQ*Av3P%L{K+jh34y^UmcxKnVWs*W#e}p5Op$`Hf=C( z1UQ~cS-x-`wd}T4{cs*Nr^tgg*b*+Fq*ndd=GEOUB#;!(-%Qv}akg_=f^H}8U^wR- zba%_?nlh%jyZ{e~0c{$oFxVKWQjx5x``m>&w=|<9y$I7i>cygFy5%VDaALKKzLRaUJLFlSntj_Idp87rqSMGZtsf%I7vfUu)veG0MfHhh@ZqA>C zGt1qEg%>h;Z2-I6wj9ZJlW(+&fajEu1Tps~kqY zP9r62Ax=C5i;D_wlZipePhRJm-PB5Ct5jS^G#4&`W#&v4Kkr16-%qY;Q%4~WY}9fD zQ+{5)67>}J5*oWj8$U(y)WMwu5)r;CKsjaHq4!$%o)KrBa}eq=MowRJs}d(46Oz11 z;~p^$<8qXBYc%lOMa5Q$_9#c9N{IJdSX`xx14)^U38ruirX*ccA#<%?X*8=e9Jkf2 zG++T4X*{E5q+Oe#I-R;!h#klR%~#2@+dA@Oe%s{X=OiY)t+}icSh}Rppp@ZkRxV+m zQOYT+;A}Y`h{k=eD`!o-RTa~?RqvvDy}r*dJX@sF8l^kqOF^l;eJes^2fpA~_7zzo zybsJn-lIKPBaY)!@espWtzH*f)=S`9J*erh))xSKSamCH%2-|UPJf<`9K9Giu4W{; zbO75BleSWlknPc5J7+yhwdj6KQuGrnsA0;OyyEjgi}p}X=VOe_BHELUWknOJ-yu3C zv*O|AmN1@@v=QP8=AoZUTs)|)GB`y@)VKKDUI&@H0S&on+QAeHlPbzE{SkykN19=7 zR4nBRDljwKqI+nk=Pq__OFnvF!EgBIX#3kPg$eW^e5HQ?54a<5oFh3ySO9&n55Wo& zch-0kk`}N&LNa1C(0wc9#&0S9A1g(s=*c~0Rn^jN!{>DuRiS}qIKY$w9^k4oG20z1 zNcOswt=n2$zFUzX<>JTTDCkW7osB_%vBhlOh)NSe(s!|_NYAc-pFrY zb&89-;VMn}lvd2?+Fl1bB@?=M0AI$^+@j}2>zBLg=)S9K&6uTUU@S8TsGbxod;qB{ zBVND8Oh|=j7{;s-vi8@7Kv++!jgaMzcqj=T!0)89e`y6LPdin4eK~rwJ}^09%l)`I zStq8E0x7&z`hHibR2EWuE`1y*CYKvu)dj_3ogw)yYh0iz0}cYNpkqqGA@r&>9h#DuQZ61fhl?#+oapnrj|oj(Mo@Ub)}rUEA~A@3X#dTid&>U+epRUh*Sy zoyU1z$FWaW06BEyPli=?0lF;CROQHdJ#L%h@V?yz z;qGSoT)^N?S20%6X%(0@S6HKCJnS9@yC_6w%SMWHj=DF7zWTk;c z+78lA|KjCSKhqoyP4hAC-N>+eDE&3v9DO_#0WYPdH0$}}TAkf-`Q~R>q)17M;^R>a zEvL_X^qb4Qim9?WJ0+%h=sSr)ksUcnKsQk}6EtXeODqU*3zef#J}oLs5Nk`yL6zuM z44jyi*}pCLsP=hmef+bJ?(gYlL-4-pAEIaGk7wQSNBC&nx^lLPtNcsnKk|INvoNmAKd$Q)-r4 zAqov$*Hfsy7vyRo9M)+1-K1xAqZYz{0=gISerrtaIbu~Hj;iv@^p$s~w0geM z!o^u)4Fj^yXolaNh55@u0Q=&eSLM={)s&sUj@5OS=pC z{7XI04z*-E7PF*2?v_`PKeARFBso3tP4d@TD?I2K|JjJpqWi5P0W7$H;E9T&yqTr8 zrSj%6p1`7FSN<`$+000u?}+nf$F#9yduAeprtK&x*R5L{YW@2d^c)Cui0fDRZ1Ley z*Mnne|6yqkgSlrOZP`|Nj3Dg= zR$DCavAl$t$#c_tZ4rRR^)X1k`glCE>flBJsTG#T&RydSeKg%C*-rD*y-zN0)<3Ur$3&5z41|nQ{gzA#Dh2#* zPW^<|#mXM}gPRL>=KFz{AKNWt!99L_(t6An z!+0~+3bD7Mf(bFS{bTe?DoB}tD>~V<#Lt%{FHCL$%rmifG9a#Iba*Z}SYFX(zhQ*U zgv|UU&X2)U|EHuBhRjO18Pcy+7T9U753tOl(vRfF&(6GDrh1|P)rCVSUD-U|s7;BQj;lVP`g zTEVY0{I*mt(r(tbYdxl66unt&)v&z7Dhks`?PDKY>~Kw5s1W$s_RZEfTu#rW%fdet zc{E|>N!ki8{nw3lmO&rxC4?cU2*aD}5)NY*e;u0j2fv%!TETMtGb#oMYm! zcJ@HV*=GGi{IRl5<4@hK7aB}ltLfvmZdI2#Z+a}vaVaMqI$8W>c_9lp^&hlU1(iXe zW$AC)_d|yY$ElBD9TJkRaVtl=&gp*%XW0Z^pRZ#ag*28-k2;{?-rMlmU?W&=)0isy z7wA)}(}$^)F=yxG8nFkRbBk+*`bNPXWqrE^S>LICQK6FRvUitloXgS$ZD@O>%HsN_ zIo7*DqnILM8Q@3}Jp>#i7fuJeTu}DF!pb-M5UB7%s?2DdH0^i5ARcW`Fvu**J4?Pz zG}3Kd=Gj5ywjNcch1iA>%&_fJN%H}9>gpudh+)m3F6DxEYX8+hf4X_J%^&*1nv~RS z!VSCQP}IJ%ztzD-pi+zkP)A7ZTY%i+SU^xa_lCYf;`!M`&BqUA!=f`DNTk2;vh0nT z7vk0-m#t=x?`;-hsGOPbXek*E0Wq2md=}MDHjG)3TId+`3iZ+QU+!Yt z`^8(TAh;zyZ06Cg1>SXYmRJLJLk5Gr)zmp+{E~Kf$=0g8Ux_~b+Hmd4P=Uz79sI!R z6FPQMD-K_%IhiLMRYF?lI2WDRQX!e_A7h{I?^jP8onH86{&G``+;GSIVPGRUEvEbx=OtlrVMgOF3ovsLSVoVSFElg*8=qK;u5a$k+?{8Qi>#4;9 zAPzCDtG|-^=xy@-tLnbr_d)ST@TjXt4>#zR5CybiDgU87FU?et(3V@&oqLSy55{e& zNpgheCYc@VUbRUX@K`9QpdX$5L(Vty{5;pR?B_)N9!#5Z8Sk7d?!NHq6+rI?xk7DE z3Da&GlxwluV)toN*;j?wmc73;!toZiq7GKV7r)6?& z1y*HeKH_kN1EMAIhl8Wj-@J<}LT$dw z<_fLV4OtH#714x>0(EPRXWf6JlTA(tQF=YKl|ag2{>IY4^14drQYV~4%1YqTO!37K zfxf^Pu}MHTAv_*$!*b1QFNnRT;3SW{CmJ%b_d@EteU;F5)%E^>c?L zE{i$=b){PEbks6;NP_hiEG`Gf)WjvXtO9XoR+W+fB&dl($XGhdKC9EQR?ba+`6h0?C``Dju z9Ju2L=x#I`SI&=C?cJd>Jf71c+H7DGmlwOi#tVZP3+Sv*ZqvWCuvs6042_>K7ctK8 z0EGpf)o*L#HS=t5aH+iqyQgp#k|8XV)j?_!Od@{R`XF5(ys?jh-+5x^iaH+hg^VF% z&B|0L+i&n;M?Gv$nMFTQNmW{Rk6Y-kof<^{JOubWvsBs6#PKcC zxx9VUGUiubuPl^ky$ikd^!&y7FsnUrzrF9R+iZ)^+)X!%s10=_Z%k=aF!YGNP7Uvy z4C{d|Jvt+g*Mt{pt*g2olF=h|_nd}DKS<)Zgv&ca?3C&H1m=0c&A`Et{!~8xh6+~h zG$0((Z*#ImW7{>OEsySl+;cGlrY?A16~4%SB^&*Up7ztb~j8GCWt=ecq#)I!rO$M#xjhppbx_+{C*4g@<(yeTX{Lf}(M2d@@bCY6~FUhw&RsKbHvOtVU(Mk=fm%E}y8 zlOFjgU~=9Gkz4k>g6)fUVkUf2E`^w(yM+~@>^)SnCv(_-qoRS)4Ls(NK|X3g5CA1>p!ss_NqLE4!2gVYC$ zpZeeL*y(49%}FK42=L=zmK+sf-Vr<2ma8M1sz>+E#ay;D+^gtVmi&F8)x4pAcl-6< zyuN?o3TeYjP|-63tKC1UxxjQj-HLB=J#e5er>~*I6f4X`#8{^v$tOy_A_q9n zD$+Mi)mLB4;1!T{{qgs%{_}v)OJ8d!u~&3jhU~MO^8!eYq2?vie==+u z&jDt;jppl3Q1ac%l>s_(LcbH$r-Xj0?fnXI)4y{ubiwve!tEH33bHlcs|*Ct8Tp>t zhmzS&{FevlZB7A7az7-KBSh6fUl{yKqR(5Hk^hkaYlw0<=^6CB5a*%zCC;8$trgnh znFL7ZTuG4wwJVYUh|PgOcH&+2*A;Yg$psEFR?0d8K2D12`cIWleW%&pFe5#AG-lc3 zl`>X_T%4^G`nnLTs^pGk11Ff+RS3B)?pK3$Ui~lPS_1UnyUE%|BHJBin@2NtW`67J z7+od?{8nkX`qDQ;(ko9W&$bP_rKdKZ@}bVKS#rE(d{HPfsVip_seJjj-V4e5CqIi> z8lqmtg+S{+ZMPl__Jz7W^I!@NWX1{gi|DV;>lDx*Zr@K@8x2EOK8LdnZ-!4$hC`7* z7$dgfwrK+`EK1jTAA6mw1GT3#IyRTocKMmsBvRfgRQ}2EK~YvXamMA4RH(K*CfXNw zh>mb#C(bC-9&`STd>(t&Ahj`oWAga^@MRAhHA&^h>E1B@qO3iGkS!apiGcxq!qT&% z98M>^ugWihA3e5s z)zl~Ix{l6YU$ce2?JDH-CJcf~%+j_>XeVNHT6CnfR%YIVOOv}REz%n|Tfl$Bs2hZ~ z(IRYUh0Axy#dh>fi-7gXqnRhStNCeGMfhq6DuA- z-St4rt8`qU^`QC$>d)o#pL6>^oW=h!ivBmDZ)S%7|4#mmM*B;@X8oOr-W6N!i%ADvz-BbqSN*(%bGg=t5v;Y>axhYejCF2Vn(Gp z;hyC;=~OiDReI|a!nVu0^}8>&xMga_5NQUZmtVYI=L z{|;(ZpSttYcuto;Wt`LFcTmf|S^99YRq(>(@tTqeadR(yR(m((>2{*9K7f8GNw(uc zXGT6iD234o<1Z>Q_P?G2PPA`Cd)g_y&YM|TcaP>=NsB{Op%U!(l#xo$XZxo2H)MQ- zs!JhT{bhRv58ow1QrqJSk@j)zI)Vpr{&E{zm>iu>tYXDgaMQyX&b@w?^z<+^Q7m2$;4Pv(glX?N5*OH7i|mOE5? zx3s+&W3PE{lEfT7BgI}{J~~y$|9fxB_L;tV^y5R75I#8$AE)$Vvh3iA-lm$9zbv6G zozc=DIJK8<*0Br?Z;wB@hB&L{P`F<`70w^t9*Tk;6HqPVF_*`;aG(iE|C2|d&U2S_ z?7TM#Ms!T>hypoLEk_0Aat`z>oo=|N`tFZ{S&v_XcLd%8I@P)u&v(bPE{Z~1Ewt3V z%Dl2-^uUto*X50%BaWe}(9nQw1(>7%XsZ~9ucCNkoIXJ~-j-jHl8IT87nS!NsdVco zUbN?|6L}!S_EpD1@{zVh;@<%!`W2&greD^c_8+p(1O-kkY98~irsZxka?xydFW+mN zGz#NamD?50v7HKR>4wevbLLgNlN^turf+F$9h-H{7bN%bb1oul<#s+guWGd1I-)yh z4umn2g?zg*O#VJDvU4Y3tGo^Mq7Coh(R;VM7s&X_^(sFYqhxa>(amk}n6Ny<^ut9Y zn%(PF!{M(dLb&eoUiyN6$F?^dN^(HQ8mHa(a?xJ4UQ}%{WqOKe;-=^cd!22JMOPT?ceI_|KX2U$}ErL1^;Alr|(}6 z_3f3eb}!pKO6~6aNy;mcMcYLC+VKtkor8jtB!O*S;X@Mt!H)i)439MiF}`pA@g+Pb zJn`~{&S zDPet-7lhF8u@`Ojh>4NG1Q7e^>|T}{)C4V8S@Q|e19?7ej+kjZAA)pz$o$smepfqf z@ue8QJ#)gMT_MR-65(?e6eiKes| zSuu{w9)ZatZdZ;KZqgZOBY$AluhJgDP{F{q4;-GTvol-*XI^Wa1A8(kbxFqXVV0(s z%9VUl`OF`twr&y#n&dhQe6W9Te=zNuK(vn|m{oMFFATq?i_%WCB7(Y;pt+elrHM!j zOH}x7P(()K2XVMKB03WrBTZJ;KXWyHM{aJ~eeHtr(3WUZcIS0VQ4Kg+y14&d8e!#t zKK=u z(!T_zV?**$nf;jTCeM11XHl%!TX~^-=^-u(;h<~3@d2HwA|U-#TSs{@ikQ}*(wt#w z>?4^c-9%^f_(OpXgzUT97Xx`8pYy$I0cJ~BWr=AiwCb&!d~QP2FiOZV$jQmXC<^8n zN4m<;b1h8K7)P$QlqnBOl6jP=rF-sK&iay@S?F|Ge?CmND>F^UqS;WF_~Tu=-GDJA zT1KEJjX;y@fNlL&z)*Lje54eRhLtOGct92Z!$S1i%G$YYOw%{qwI$D zI=pn$eKd)BH(Zvgl{^g$y{V!=-+>r;)NveAXQ2eVO0&2a|KQOl+L@uM4;MZk)sDsG zR)2DwC@+8V>GSKj^JC*#ew>;ESmu1wYz-q!aB2qdQR?H~bmat$4`_R)gF?ea#7Kjs z@)w80X20UP)-or=9Ys8cG$|u`C8@NZg&g6xym+1F9eSaWFE47_<;!2` zrmXWvMQE`ozExaX9CdzLD8Oa~HVm}cOmX#yLe;Ntaw3x{ zyLy_<1C@{}Q~_?KJ@Qyh**v5C^+Rz8&-c+Z=xH8?@7YMs*((pd((d1`%G2VL6#$V$ z$-PAO=}~_{jKhow1z>C`hc$v7k=C%5rou+3$0Fc#2^#P@NzS{M8oAJGwqFda+WH%~ zEcnj&bhtrg!F@`84JP-U@$Waw10`W&qM|J*(ouKRK+bTpi(%jnxXU!>5eNWl8t*E> z*tRxh)jU~tMYUg9r173R*g$=_@{sG@JpsEpg}!&8HM5(9S26Gst!8iHOtbBgh%)PNVSm(6J4CF_se# zrS-VwuS?`L!-((4->JTOM~mt%-4$nhf4IyAK(c%;kY6&$5zlkDbdx>@p zH5<5Ou42%?$=rJK2*cq*qsXk~UW2!f_8su;y=BtIR)xhL`cq#0(DpbzW?6rPk=>wy zR%a`9TH3(XTSq=o9IMa{VmjmC4r@EB7Z~8Z>}A@}Y?MuwU~F|X)d-@seHshwo9b}t zzS^wQ%!UK^x#(y~&sX)tm(VLCGv0R?k-6q%q0gexBp|OW6zD^)3tKU{Df35N>nMi@ zrv?wFkk0ode@6w1_gEk(m2)t4QO#5@n><7yD>h44M8t|$_jj>V+u~dFMD+}-*dW>< zdSTG+e4R$66d_UlyD)fcC?1#RKKk%hqS(tOUE##5fNgM;!L$rGUckhtGR`0L@p;Eg%&*w&(Rh`O@yNjv?DL zNRqD1yDZ6HpfYhGVeW(sx94M{0~o@X#^8{Ju5WizFkaj3BE;aaV}#vuqP_&`W7O-@ z9|HZUi?ycg9^MR;DiSE$KLcJ5v!uSBCty*>eX}Jh+^$loPwZ0l zb9?jzmrT$Ep%9p*7Yw)Ff(@8>D6#D~YoUoD%9hSDYQ;W%YTG8k;~!hjD3-d+HS9&R zajDZN5mI5(Hm(1wkaLi`akF7x_UF)^MSEoK3WNa34##*o&zN4vqYn5ECu|2S-+ZVX zzfN``&Z+6K$oUg{5PSE2bT0l?$ER;+rnIperdMBkZL+C=7iX2QWX<*JZ)l=qTFZ0F zF}kF626eQ>SqAw6tVP9uD#1tqJ*7wpDi)-FGo0*E5M1(Dt zppEE-Y}JZy<0x=uvl~@XxqrV*hSQ<)6xK90;H^E0TWdT8S?bQ_aLZqzQ>>Je(*^|~ z`HMlK9Kiq<0}y=ArYESisnas>8-bEHVe%~z5L)F8Bh*K_Ai7YcsM!oY3tJR)+M}}D z)>Ao^jd<-2avz5_x41v`psvP)gr*)vZnGp*29y2*8xjqWW(T4>NS8fjv z1}5pV=Tt;U^{`GEDj$J7JV66J1FLO&+O^Ujyz;Dij{sB8z)_YpoxE7$(*OmrckMIR$Yml=zh47VU(#-LNGQm zF=v$nxr?lF?SX)xWgHo8kS@Mo|Ef}d0S{faqa$Nb+vBS@0?OB7(vROv(WQ0mm(`ip z^-pRcbWp!YYMG+S@Xw7UFRMV0eX34ne~h^9p>+y1*7>9FO&ynV?WEkQ<5H?5EV{AI z1gEL#DVr{v(}oHx>fUTg3jvGfuK0g$1%WtSj66~;EOe9=n$@<4;jPe_n9Bh~5;9P}!aPW{`n?eoreW|RXtn^ytGgbvmM zg@O;{=j|}MRs=81=hBl@M6Is%=OI{+Xs(h~Z^T> z^-zn8UXKvCv+qyKRMb*`R> zFo6zv_G+w)&V%Y>)N~asFxRqkmMO!nqKvd9wfmVJF`~9Q>pT)YI^!zyX;6V?9{g}` zqrvOQB)Ci-I6?ODM|4oz0{2HUu+5ez%hB|P?8T9kKpm~U(v6v$eK}hUmh8yW^I=OpVrr+*{Qm+hFSW%5NbN_Aii8`x7cjCVLs`Q z1{QU?5-m@UuZdnS5nPF@!dTDJDubc@J7P?tx+7cnXz#O8BfdIXt+oyoLK!$ESCWP7 z!ervu%@L)~Gq4%YOqCdmpvluWek_bz(oVlTuevjHSO9zVmTM{)t-t4va?xwr0+kSH z_COzDt}KFurX*6kmC+@ilWg)9VzfP>f(3i%kA)e9bSw}>TD>ZF5OS8*5`yUSLcWqJ zS4!-7=)(J0b+J?8_fc!N+U~Z#uq#Srk&|Lw-?_8DWQ-Fz6jznw0rPexYvE+c*9UwN znN%_J0flf*)79>m$iGCb;Yb zt}$E&!XhH$Q|P|5)*xs|wO& zdgjt~*?2mP=u^Bhm{Y7OuIl&!$Gu@@1oefL^bZ{13#=(}6z~5WyXYg{sZfw++~yf~ zF3aby&Ny7LesG5Gyuj;A0h}U)>2K?3FpwnJ3(-?-lI`uzDuJzfPD7)aiy~n;UN9oJ z3$Q~i`i987exI5DwvUy&+==o;eaF%t3FJ}SF6x}yJY?%0{Rw_BYZ@IsH%^k?Y zhNDD!A+Li-R@4Wc3Yz7TBqPb>lCORVa1n}3SdM3Xe5#L;Dc=SdD3!Aon6-8Wi;&FG zl37?k*}wg{RRS*~i7G){WY_vo)lh4HwIL6h^l8z?>RSoI%mfayX*S&b(4$kXcqnfa zXX@A)@8O$N+@n)U((N`UoX|SaQGi9pE@bg}*D()vCnFJ0?v*~1kKkSWk-onM_YeIA&Y;MRr|34A=9$wS>mP=GYDnAnU80`w8D zq7)HoZh~7Im$b$Lwf$OE9iLNFuiq?QZy3vTz4+aVeKTUD_=^E3_sP@-`=*j)GAYE) z!=i`cY<9Oe8)pXerfE{p(J6SE3&AoawKRh817k%DlmN^zC*XM=?)lDxbD~mQHch5y z{5SD~achtAy{>6>OKEdD3O(MwIT_no13wtl-s9`Dj5CTMWcF?bUi|XqpNBOw!++N& zMu%8Vmwzk$I6S1nzCnrEJkA(DKYHfcsbnFCJ9jyd%7YBJvR?aIr?Mx;byXBl= zFB%nyn)(I&G(f*bm+bdO`Xcx2ozh|ktI0~+9p&BNGj&w+{%xKMwsVVChRVkR*U zate25B#+N;({RXA`&68~(+{cnIe@X(AK?s6#3=y~=lcpmb5yn#Hd;hytE0vT>-#n=?R{4=c=)}D-$IN#s<-SI5r+R<>%-mz#eL((72I3aR8zvX8rxF zhH26%q*io;e+<-DNAW^QD%O4OTYGkQgPpVXrFJZP0eeZzhhb^2_&8+saCBNC+&G90 zM9L-%l15PIfJ(5gX&Woi0af6WTl}-3fb)NnkLRJpkk+`+a=P-MJpI7ec}}t5kZOBK z7bxg`Pw*~ilbTrbi#<4|_b|Gj4p^=q562z{(0v4%x8R-18vo!gFH|7rcYWHC%E*1a zN>|_c5e0>#Xyh{~eq$o9wxqnId}Ro9OT%!y%N0(W^|BKUwo6!;NJ_Tct*(LCCVQ%a zh2J7pr(s6I&QY1K?-|Skqn>!4GjjK1{yu-{&8un^Jz)^)qN%WAwk*Xz*S7aoIHz-Y`hLzE&Rx2aY6PF_!ftqpZ&F!A;$LG=Z~^?Ez! zHt8QoMd`Cvich&7-{)XJsLT`XdqTQ~LW=|W?N|1zmu=J2hdoDz1N8%rFdqVQE_i*K z93|rc=`}tAhI(4vV6j9|jkPgq1+29!xcMQGh`lfIRrFF-jRz!{CXmMDeEucFOTgO) zF*>7qO8&1KI^STyec9w13w^Y)4~O_@7M3jpDl*I-o!^(gW>l|~lS@?Y%v5B>@|o9* znIu?cPE?H`+N_gAuPwP}8hav`pm#_0NcOTJ62w{SXKN(-Zx@ zkO6(^k}_qw_Po3a_8O*=8rO^rXZMC9=b{|doG`|vKlO0%46JoyVH@>Nh8)u2J^7t| zF8O&k{y=5-0DEMBaO`{nb%oaT*3T^xUiUD4Y7oA8M6N*XsC%01p8!sVk17KxR+amf zbmwQP>Ru}1QvPT#hJtifuByjpos%l-n^(<^$QKyy#)ebN3XLJv`{cQK5{ek;x>l2N z!yVgdhJ#NGd%_Up>(B}4L{V9?MmhLzPc)Lfif?abvG)A!8_lXC5ADAQ!#yw#PiH;G z>DhbF!gIO%VTX_F#vZ1i?$xkQi08)-3>1^nlJuE>qClQ_a8R5J#jLuZ60{6`v4-vI zO)`C(uQtN{1Q=9z(_dKIy6#oo1J|(pa||ryoTpz!tQ?Gr_M2Bo<47X=wu~`o|FD}@1di7|BUC&OWk?73yS~pI< zFy7B}tSS#q&HCAX4kZ%shNU<)}yZBFKFsWMy8TjQ^uDR zEZRQV0Ysb8L4=2>GFKD2SI;*-P-JOsRtHGtQAv`jH(K%*S(|gZYlZmKqx$O2-7X8x zKN=@DBGT?%9s#3(pz`Ubaojwi;fFkGk6)*3l}#vn&?>7IRSQfxvb?6rTn$_9>Mb?4-jQ;Lq}aHieqzkT|aX+OZCkU zmjecOOR|5`*FLI$EyUHIg8awg*M1sgR_i2M4%U{;_6(E>BC2<44#oV@X2W|!Gw;+T z)gH+-rT!k9k3-tSnn${KKX`|JWt~RypF^ZF9s^Zp2 z8V-<1Pr|_An+oL0dd8B|CFt%&XSTFaf9c1E#e;q}_hzCH%kh|Pwg$*m+Vh_cno2B%H8e&lR-%+zQ&v+}>);Gw8u%v*bGDLcnv{A6t*&}y zRcdvZGbULX8a4Up&8ND_L09&YyZu-jqP*dQEs-tHz&7*JeMj%KQc?Ic+&#K#96bw_g}wz7IlPzBze;W(yT(7&ud49f)#tfjhGMqqBzn&nSsitQz&mUT3V42)&@SFMQ9cTR zHRctJ!-ISj3C3{=5TUGn+j5+m6FMeEL%wLM;s#RMKh5^2A~=bMp7=dfs~mcx_TB1^ zSG(e}o!FsrV1QaPJ*}q_tTIU5s|^pdaH~N_GCt4tqS=nvCLNBBRvwXSPb*Cy(%64O z5hJ_LggY>+Tl~l;7wz%JX;qMPvoaE1D@md{!I5YDXtZBQd6+UVSGoq@DI5gH78A@! zYcxe!60wcXdX2a@WM0c&$bJ+4{z=g=L*ci0JCre*{n4+cQYn>OEf9t;xj;iG{>Tt{HF+j=UhCQm9?UyO$6q5KzcDgkeJ=tQ=dOYx8+&{J1_Y&#afBZ!n1l%x z6QR&xFCc{PLso&mpFI0sMtGplT?*y! z>tCSDCDQ3V$_+F4l8W|qNw{w5qbEDCxX{TfZe=eg*uOO3vNWs|2Ro3<2{uI8z()VM z!_JXv3M5hshG>!XG~v&i*rH;FN>eqfD_EhLjaJojVtw!K;kd6hJi`#w{J~yP!wDlg znt@eSg%SE%RDb0$%a$|iKXV}?W`-COMSCVq*%YMbz(F-TrPV(vsqx7Y!HWyCuYa+< z6G@3W?41LEs`U2E*Sb8c-K2c%S2nKruo3{KwyHSeIIwrlof#qSgpo2C<9XX_!=qh) zd>zeh8#>$|fB|YNg4i~R>yW5{Mb8nkjZzSwLXXDduS)VC%#D`kAHmyU)R zdJ?($8d8QW@6CGm^(pcgQ(?*-O_?;#QuI9G6{a6#kb?!|^q&t3&8EOe9qmbCE`Ksy zIZGYlmk^-5vR44AK8!gx<;`Z#7wJ;-!pf;DI1jo&0t_&Jm}|kDd^9p zT+0QUq%LjMY55vcV+9?36EXcl@Cm2@)3YVh61Yhefj}5CrpA|$u^d3(ywrFXrjjzf zQmfd;tD+azOLt0j9lbw`i5NUoniD>S;q|6Oz4Y{?yN*g=HAsNW9E#i9A8V?atpSh* zZD-Z`yZH|@O_s)6RMsoi5}q0OJ^C~4^FZ{q&Ked|n}44kLi zQ=)L98Y-U__i z?=kA**fNFAflE=7GYZY_9*for0kse!xSCvznNqeHq{g8NoZ-WR#bx%~-*!vpLA&!& z*kD>ay1JygV055#&~hwGNS?{@dh>-;M z4w_M_CGBRAhg51#Va@hEt(?4$ectS4(RE!%gQy}QtUn^xKH5iqitk!k%WUHLTK(6_p|&5Z~xDTVqsS zj-+of@j`EPiYG$Hi=N9e2LF^*P;h^_dq1cC+AXN@bK~~?h#M1kgFj#1V#$WwTtCHd zt^FAwE~(H3^R4aDj~th;M5nCD9W!XN4dQiO>jS)@*P)}eZv5DsS$7M1RY|=hE!SEu z-$&X1YlPTmn+GqUa3Si1j(c5)J>_q`|L9T25Tj#9FpE+v1R1A_94hFTP{A0e z_mmMJWsX`2Ht?p3RNg}y-7^pPm@u!EX-^ZMOI3sGi77suuqre2jYC(|RA5=E;{S_R zhE4`u<4NtTDDO zVid~BMkU5>Y4Jr6U(=@}y+wL8tyYu*+0}nj^!#z$w3m)Jn?F|TyruSH9{IVh;;B7n zi*dROE!TFq2m3H_yh+byZ*D#%ZNQ8~tE@SA;aMMBocli?)<4kW2jj=6st)B#p(|o9 zYRuM(N;>v7YCEjU5Am+!)mt>1x4aF%@|1RwyH^S>M~se-9~?<0B_6^%#&}J?*$fQ? z?e6BFf4jA!^h=r1Larzh`(bR|xV&sDE&l4_iM+;99{fcGB)o>LjPiA(pU zT$%S@J$#)}8h3+BZFitq-gybnk;azH6;vi&rWjH8g`;e+B;a6yg&1DU zsC`?AWekMs=?XmAj@NP4Kfg$cpRamefr(7Av1q0MttRZTr8$%~&lo}oI_kCiJ4NQ4 z)~!`Dk%*T$w6h8}51bF8yt<+qwYf~ES$T!Uyz(7IO6fu)YGg#uuB)4MCq|XyU1a7g zj&&rq(kUTxwl7`AsDCvfSlNlLWcp9J)c>m%YJvV5*3kcr*RcKz2lj8(`hVkR|G?Mi z;M)HJU~62iGX2tq9WD8Cxfs0CT?FjcYb;B+KLv_t3({u}Ex|Wm+QRt5S+!6Coyp00>es;5R$E zd!g$a_<;EOWBtE*4gR&`{J(N3{s@FyxCxoxG!~5G1;k{YC@`Fg)42(Ft;2BLCWhmz zEsq>H>_*xqEL+pZ6$%@&uK7?Lc{Kv}HZs*h;$Fmn-mY#}XR8m4Zzj{vu7}d20L*yp zpKxQ7^V0|Mrb2Q;;f2&M7zYsr+X{7fL$|q$K|{lHO|4zhO5TWWURps%@n%K;jevNf z#JsSW&2HsLw**I=ENNn&(K>XnWa2;~H}m^`>Hqgu<*!Yysy~H4s-}y-FCP={^WpFF I|2gzO046$<7XSbN literal 0 HcmV?d00001 diff --git a/Readme.md b/Readme.md index 22dcd6a..9a4acf1 100644 --- a/Readme.md +++ b/Readme.md @@ -4,23 +4,77 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) - -*Files to look at*: -* [MainWindow.xaml](./CS/AppBarExample/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/AppBarExample/MainWindow.xaml)) -* [MainWindow.xaml.cs](./CS/AppBarExample/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/AppBarExample/MainWindow.xaml.vb)) - -# WPF AppBar - Display a top or bottom window menu inspired by Windows 10 +# WPF AppBar - Display a Top or Bottom Window Menu Inspired by Windows 10 + +This example adds an [`AppBar`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar) to a WPF application and allows users to place primary commands at the top or bottom of the window. The bar contains standard and toggle buttons, groups related actions, includes a built-in **Exit** button and a button with a flyout (context) menu. + +![ Display a Top or Bottom Window Menu Inspired by Windows 10 - WPF AppBar, DevExpress](./Images/app-bar.jpg) + +## Implementation Details + +If you set the [`AppBar.HideMode`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.HideMode) property to `Sticky`, the `AppBar` remains visible until a user hides it manually through the **Exit** button. To display the predefined **Exit** button, enable the [IsExitButtonEnabled](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.IsExitButtonEnabled). The following XAML markup configures bar layout, visibility, and command structure: + +```xaml + + + + + + !-- Define "Zoom in" and "Zoom out" buttons --> + + + + + + + + + + + + + + + + -

This example shows how to create an app bar containing custom regular and toggle buttons, the predefined Exit button, and the button that displays a flyout when clicked.

-

In this example, the AppBar control is populated with the AppBarButton and AppBarToggleButton objects, which are divided into groups using the AppBarSeparator objects. To display the predefined Exit button, the IsExitButtonEnabled property is set to True.

-

The button captions are specified using the AppBarButton.Label property. The HorizontalAlignment property specifies the button alignment relative to the app bar.

-

The CommandButton.Glyph property is used to provide the buttons with icons from the DX Image Gallery. The glyph theming feature is enabled for all buttons and the glyph height is set using the Style declared in the app bar's Resources. You can also use the button's Content property to specify the button icons. See the Pin button — the icon for this button is specified using the Unicode symbol that corresponds to the glyph in the Segoe UI Symbol font. For more information about how to use Segoe UI Symbol icons, see Guidelines on MSDN.

-

The Rotate button displays the flyout when clicked. The button's Flyout property allows you associate the Flyout or MenuFlyout control with the button.

+ + +
+``` + +**Top** and **Bottom** buttons move the `AppBar` to the corresponding edge of the window. Each button is bound to the corresponding handler: + +```csharp +private void OnMoveAppBarTop(object sender, RoutedEventArgs e) { + appBar.Alignment = AppBarAlignment.Top; +} + +private void OnMoveAppBarBottom(object sender, RoutedEventArgs e) { + appBar.Alignment = AppBarAlignment.Bottom; +} +``` + +## Files to Review + +* [MainWindow.xaml](./CS/AppBarExample/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/AppBarExample/MainWindow.xaml)) +* [MainWindow.xaml.cs](./CS/AppBarExample/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/AppBarExample/MainWindow.xaml.vb)) -
+## Documentation +* [AppBar](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar) +* [AppBarButton](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBarButton) +* [AppBarToggleButton](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBarToggleButton) +* [AppBarSeparator](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBarSeparator) +* [IsExitButtonEnabled](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.IsExitButtonEnabled) +* [AppBarButton.Label](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBarButton.Label) +* [CommandButton.Glyph](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.CommandButton.Glyph) +* [MenuFlyout](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.MenuFlyout) ## Does this example address your development requirements/objectives? From 3a9b8130447fc45cb89b965dfbc60b22d6540108 Mon Sep 17 00:00:00 2001 From: Serge Pilipchuk <112853396+sergepilipchuk@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:39:50 +0400 Subject: [PATCH 2/2] Add changes after review (fresh eye) --- Readme.md | 63 ++++++++++++------------------------------------------- 1 file changed, 13 insertions(+), 50 deletions(-) diff --git a/Readme.md b/Readme.md index 9a4acf1..6ae0788 100644 --- a/Readme.md +++ b/Readme.md @@ -7,59 +7,14 @@ # WPF AppBar - Display a Top or Bottom Window Menu Inspired by Windows 10 -This example adds an [`AppBar`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar) to a WPF application and allows users to place primary commands at the top or bottom of the window. The bar contains standard and toggle buttons, groups related actions, includes a built-in **Exit** button and a button with a flyout (context) menu. +This example uses the WPF [`AppBar`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar) control to display a Windows 10–style menu at the top or bottom of a window. + +Commands appear as circular buttons, including the built-in **Exit** command, the **Pin** command that works as a toggle, and the **Rotate** button that opens a flyout (context) menu with related actions. **Top** and **Bottom** buttons align the `AppBar` to the corresponding edge of the window. + +The [`AppBar.HideMode`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.HideMode) property is set to `Sticky` so the command bar remains visible until the user hides it manually with the **Exit** button. ![ Display a Top or Bottom Window Menu Inspired by Windows 10 - WPF AppBar, DevExpress](./Images/app-bar.jpg) -## Implementation Details - -If you set the [`AppBar.HideMode`](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.HideMode) property to `Sticky`, the `AppBar` remains visible until a user hides it manually through the **Exit** button. To display the predefined **Exit** button, enable the [IsExitButtonEnabled](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.AppBar.IsExitButtonEnabled). The following XAML markup configures bar layout, visibility, and command structure: - -```xaml - - - - - - !-- Define "Zoom in" and "Zoom out" buttons --> - - - - - - - - - - - - - - - - - - - - - -``` - -**Top** and **Bottom** buttons move the `AppBar` to the corresponding edge of the window. Each button is bound to the corresponding handler: - -```csharp -private void OnMoveAppBarTop(object sender, RoutedEventArgs e) { - appBar.Alignment = AppBarAlignment.Top; -} - -private void OnMoveAppBarBottom(object sender, RoutedEventArgs e) { - appBar.Alignment = AppBarAlignment.Bottom; -} -``` - ## Files to Review * [MainWindow.xaml](./CS/AppBarExample/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/AppBarExample/MainWindow.xaml)) @@ -76,6 +31,14 @@ private void OnMoveAppBarBottom(object sender, RoutedEventArgs e) { * [CommandButton.Glyph](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.CommandButton.Glyph) * [MenuFlyout](https://docs.devexpress.com/WPF/DevExpress.Xpf.WindowsUI.MenuFlyout) +## More Examples + +* [WPF Data Grid – Specify Custom Content for Column Chooser Headers](https://github.com/DevExpress-Examples/wpf-data-grid-custom-content-for-column-chooser-headers) +* [WPF Data Grid – Handle Drag and Drop Operations](https://github.com/DevExpress-Examples/wpf-grid-handle-drag-and-drop) +* [WPF Data Grid – Bind to Dynamic Data](https://github.com/DevExpress-Examples/wpf-bind-gridcontrol-to-dynamic-data) +* [WPF Scheduler - Filter Time Regions](https://github.com/DevExpress-Examples/wpf-scheduler-filter-time-regions) +* [WPF Scheduler - Apply User Restrictions](https://github.com/DevExpress-Examples/wpf-scheduler-apply-end-user-restrictions) + ## Does this example address your development requirements/objectives?