From 72a248314d6b48a744b6d4ec590db289d581fce8 Mon Sep 17 00:00:00 2001 From: MikeTheWatchGuy Date: Fri, 12 Oct 2018 20:02:14 -0400 Subject: [PATCH] Floating toolbar demo --- Demo_Toolbar/Demo_Floating_Toolbar.py | 38 +++++++++ .../Demo_Floating_Toolbar_Includes_Buttons.py | 79 ++++++++++++++++++ Demo_Toolbar/Mike_Toolbar.py | 27 ++++++ Demo_Toolbar/camera.png | Bin 0 -> 1716 bytes Demo_Toolbar/checkmark.png | Bin 0 -> 1074 bytes Demo_Toolbar/close.png | Bin 0 -> 1148 bytes Demo_Toolbar/cookbook.png | Bin 0 -> 979 bytes Demo_Toolbar/cpu.png | Bin 0 -> 1562 bytes Demo_Toolbar/download.png | Bin 0 -> 1442 bytes Demo_Toolbar/github.png | Bin 0 -> 535 bytes Demo_Toolbar/house.png | Bin 0 -> 1932 bytes Demo_Toolbar/pysimplegui.png | Bin 0 -> 1539 bytes Demo_Toolbar/run.png | Bin 0 -> 772 bytes Demo_Toolbar/storage.png | Bin 0 -> 879 bytes Demo_Toolbar/timer.png | Bin 0 -> 2395 bytes 15 files changed, 144 insertions(+) create mode 100644 Demo_Toolbar/Demo_Floating_Toolbar.py create mode 100644 Demo_Toolbar/Demo_Floating_Toolbar_Includes_Buttons.py create mode 100644 Demo_Toolbar/Mike_Toolbar.py create mode 100644 Demo_Toolbar/camera.png create mode 100644 Demo_Toolbar/checkmark.png create mode 100644 Demo_Toolbar/close.png create mode 100644 Demo_Toolbar/cookbook.png create mode 100644 Demo_Toolbar/cpu.png create mode 100644 Demo_Toolbar/download.png create mode 100644 Demo_Toolbar/github.png create mode 100644 Demo_Toolbar/house.png create mode 100644 Demo_Toolbar/pysimplegui.png create mode 100644 Demo_Toolbar/run.png create mode 100644 Demo_Toolbar/storage.png create mode 100644 Demo_Toolbar/timer.png diff --git a/Demo_Toolbar/Demo_Floating_Toolbar.py b/Demo_Toolbar/Demo_Floating_Toolbar.py new file mode 100644 index 00000000..de69a7cc --- /dev/null +++ b/Demo_Toolbar/Demo_Floating_Toolbar.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +import sys +if sys.version_info[0] >= 3: + import PySimpleGUI as sg +else: + import PySimpleGUI27 as sg + +import os + +BUTTON_PATH = '.' +button_names = ('close', 'cookbook', 'cpu', 'github', 'pysimplegui', 'run', 'storage', 'timer', 'checkmark', 'camera', 'house', 'download') + + +def ShowMeTheButtons(): + button_files = [os.path.join(BUTTON_PATH, b+'.png') for b in button_names] + + sg.SetOptions(auto_size_buttons=True, margins=(0,0), button_color=sg.COLOR_SYSTEM_DEFAULT) + + toolbar_buttons = [[sg.RButton('{}'.format(button_names[i]), image_size=(32,32), image_filename=f, pad=(0,0), tooltip=button_names[i]) for i, f in enumerate(button_files)],] + + layout = [[sg.Frame('', toolbar_buttons,)]] + + form = sg.FlexForm('Toolbar', + no_titlebar=True, + grab_anywhere=True, + background_color='grey76', + keep_on_top=True, + ).Layout(layout) + + # ---===--- Loop taking in user input --- # + while True: + button, value = form.Read() + print(button) + if button == 'close' or button is None: + break # exit button clicked + +if __name__ == '__main__': + ShowMeTheButtons() \ No newline at end of file diff --git a/Demo_Toolbar/Demo_Floating_Toolbar_Includes_Buttons.py b/Demo_Toolbar/Demo_Floating_Toolbar_Includes_Buttons.py new file mode 100644 index 00000000..05019d69 --- /dev/null +++ b/Demo_Toolbar/Demo_Floating_Toolbar_Includes_Buttons.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +import sys +if sys.version_info[0] >= 3: + import PySimpleGUI as sg +else: + import PySimpleGUI27 as sg + +import io +from PIL import Image +import base64 +import subprocess + +button_names = ('close', 'cookbook', 'cpu', 'github', 'pysimplegui', 'run', 'storage', 'timer') + + +house64='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' + + +timer64='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' + +close64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEQ0lEQVR42r2XW2wbRRSG/1177TgkdkyoS4shaaWogVIKRAXUVn4BgRBEIRBSkSK1lAakPhTxABJSK6BEtAoXCUHEWwWi4oEXUAVvRUASSBuJliAh5QJp6hrspoGQi69r73LO7Npu6kvsBGek0ezOrvf79szsmbG0D2iwAN8DaMQaFA0YHQFaLwCX6TQuHQAuNtjR2PawD05LZeFzKeC7b/txPoLxU8Aj1BVkAf1wqw/uejeU9RsASaqYQGp+Dv8EAvjgdD9OAg9S14gQOPKED1XNWyv7+lT0VArxiVH0fCUEOqjr3JoKcImN/pYW2EOnQyUJTESBJkdpgGkV8Cj/owDDdx59A8Mf92FT+GpR+KSlBrt6ehE6+hL0pLp6AYbvfusE5FontFgUZ989UVAiDU+X0OsvQ0/EVy4g4MeOQ3a6Mn38wKHet3MkrofzZJMsFlzpeRVaeLF8ASPsb8Javy7nDXRVxdA7x7FpIZQXnrlP0yDJMoKvHVpZBKq23Qv3M8/nzQt6PIah93qhRxaLwvPNhbLmgGP7Drg694mHlVqKwcsWEBItD8DVvleM6WrhRQXUwBSsnpthvclDY++BZLdnflS9YxecrZ2QFGVZePDIYcq5yWuGK47k39NIzlCdDkHxNuYXiJzrz/xIrr4BFpdbfAFyTS1CSi1uf7IDrqeeheyoLihxubsD2sI8UuEFaItUKfen5mahRcLZl7nft7xAvjIQs+GFP2cLCmjRCL5p3oDN6nzR56xIYDl4ORJlCwyqDnT7Z5aFL5G4w4vN8dnVCwymatA9daVkeCkSJQv8qDtxcDKYF86AwKEuSDYbvB+doq/DlnMPJ6uvmzfmSJQk0E9D+OLVcEG4f38bwgNnxLmz9Wl4+z6HZLXm3JuYHMfE7i0ri8Ck3Y3Hx4L0lvYl8Et7H0Xk7NJ7Xe1d8H74GX2/2YyZmv8XY3euo4SUXJkAFyvtEbdc+CsDn2r3Ifrrz3nHvW7Pftzy/kmxdhSCly2Qlmj66Xf88dB2qP6LRme+jauuo67rIDyvHMN4i1esmvlK6QIUTrEISbKxDnDlPkk2BK6VIDhXXaddP6Vk0H6A9wSUn0WKFn2lCgiYbDEmFVXJYjWOuU1LcHudgAASSLS0FnD4dV4TksYxNEOqsMDwgAAxELToSFZFfGaiVWzGNV6MWM4Uyc5OE8wQCr2AqwmxIuoJowX3k5CjZSd6vvxhqcBj921Fc2g8C2Mwzf5sax7zNZZjSdkcCg6/EEgacAYzlLZvRk1kW7rm39iELwZHsgLPATN311rqb7trG+65dT2FXTEg4o1NoDinZKOYQ8ICFo4ADwMJpEwBDrnKIU+YMqZQ0pAbC4QwODwCf0Rd/BQ4IATagM46oI+CeiNPPVS40EDF6M/pJ78Ap+n0PL8Cp7sGs9asgQSFDLxBmKJ6STKBVSbcZsa10gKcJHi/Hv0PWqbBbaFH/AEAAAAASUVORK5CYII=' + + +def ExecuteCommandSubprocess(command, *args, wait=False): + # try: + if sys.platform == 'linux': + arg_string = '' + for arg in args: + arg_string += ' ' + str(arg) + sp = subprocess.Popen(['python3' + arg_string, ], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + else: + expanded_args = [] + for a in args: + expanded_args += a + sp = subprocess.Popen([command, expanded_args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if wait: + out, err = sp.communicate() + if out: + print(out.decode("utf-8")) + if err: + print(err.decode("utf-8")) + # except: pass + + +def get_image_bytes(image64): + image_file = io.BytesIO(base64.b64decode(image64)) + img = Image.open(image_file) + bio = io.BytesIO() + img.save(bio, format='PNG') + imgbytes = bio.getvalue() + return imgbytes + +def ShowMeTheButtons(): + + sg.SetOptions(auto_size_buttons=True, margins=(0,0), button_color=sg.COLOR_SYSTEM_DEFAULT) + + toolbar_buttons = [[sg.RButton('', image_data=get_image_bytes(close64),button_color=('white', 'black'), pad=(0,0), key='_close_'), + sg.RButton('', image_data=get_image_bytes(timer64), button_color=('white', 'black'), pad=(0, 0), key='_timer_'), + sg.RButton('', image_data=get_image_bytes(house64), button_color=('white', 'black'), pad=(0, 0), key='_house_'), + ]] + + # layout = toolbar_buttons + layout = [[sg.Frame('Launcher', toolbar_buttons,title_color='white', background_color='black')]] + + window = sg.Window('Toolbar', no_titlebar=True, grab_anywhere=True, background_color='black').Layout(layout) + + # ---===--- Loop taking in user input --- # + while True: + button, value = window.Read() + print(button) + if button == '_close_' or button is None: + break # exit button clicked + elif button == '_timer_': + pass # add your call to launch a timer program + elif button == '_cpu_': + pass # add your call to launch a CPU measuring utility +if __name__ == '__main__': + ShowMeTheButtons() + diff --git a/Demo_Toolbar/Mike_Toolbar.py b/Demo_Toolbar/Mike_Toolbar.py new file mode 100644 index 00000000..67af4517 --- /dev/null +++ b/Demo_Toolbar/Mike_Toolbar.py @@ -0,0 +1,27 @@ +import PySimpleGUI as sg +import os + +BUTTON_PATH = 'C:/Python/PycharmProjects/GooeyGUI/ButtonGraphics/Good ones/For toolbar' +button_names = ('close', 'cookbook', 'cpu', 'github', 'pysimplegui', 'run', 'storage', 'timer') + + +def ShowMeTheButtons(): + button_files = [os.path.join(BUTTON_PATH, b+'.png') for b in button_names] + + sg.SetOptions(auto_size_buttons=True, margins=(0,0), button_color=sg.COLOR_SYSTEM_DEFAULT) + + toolbar_buttons = [[sg.RButton('{}'.format(button_names[i]), image_size=(32,32), image_filename=f, pad=(0,0), tooltip=button_names[i]) for i, f in enumerate(button_files)],] + + layout = [[sg.Frame('', toolbar_buttons)]] + + form = sg.FlexForm('Toolbar', no_titlebar=True).Layout(layout) + + # ---===--- Loop taking in user input --- # + while True: + button, value = form.Read() + print(button) + if button == 'close' or button is None: + break # exit button clicked + +if __name__ == '__main__': + ShowMeTheButtons() \ No newline at end of file diff --git a/Demo_Toolbar/camera.png b/Demo_Toolbar/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7cbc09f60b7ba0aa7f8a3a9d079395b174074c GIT binary patch literal 1716 zcmV;l221&gP)O z{%+6vyqD)S!&iMhKeCNJpQF)5qx1Sa$5}Akiyv*6`Lbi|D+B!WTvn6C!1uO-YUk>p6 zNCGbZ$EG%|GZB^!|WEJZaDHJ5`i29d7(*HjTNePm&(>|iqQpjdGm zCuV8!31W4)0Wjb0^+cb$ErK1ZhF@|H+tOQKmG;cjPdK=8>=Ec{i=w5VzmGK zB1Y#+yw2Dl0etNKcw0=kIcA_#t2g(5dO2@i!ahSFCe2@*HQv`I|GSwJv&N8!)Li(9qZu)oHmfpJ8VY?^H5KJb71^{!TZ-tUBAX401s~N zfGc?L*U?1`Ocybovr%> zlLV3|s>@WqigQ$0C3438T|Knli&uv%{OpZUTpeB@fII)hg*8zqVG{=Bzu8Dp0?_Rx z?7pKD_jmj7;_+$hKA1!#8m5eqKqb)Bp@s&P2_;AMP|D|V;E7wXZH*7F4O@8OtqZt( zV)6pR?fbZ}wiQam3%vng>NHdYB?pge4B_FP2#!&3fB0q+RmBfU(ZB?DU58wkD!Nue zn3wSToj0R1YT~t_S-kr01iyUZ%IgfbzRbn$Fhr_O4-+UoDWk{*v7mwb)KjRLJ{GBi~|tKWm(xQ_c0 zesq&O%vc2^rx!7wub|c_G>=G)$Ut{IhyWQhoV9W2^bC&v?Yuqy;rLzd$hZ3#*8OUp zEsuniwQYjY5^UB&qmosfo~j3NQ^JO@h^;XNn_6Uqg)cNa8q*cvG^OfEQqcF0Chhb6 zmv&Z8KlS>xD0RKCmFj+c#4F3aq(4-_@t-xOZ0000< KMNUMnLSTXzi9oFY literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/checkmark.png b/Demo_Toolbar/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f4d178b0b2f8aed16a945acc4832e780882e2f GIT binary patch literal 1074 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 BxRL+> literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/cpu.png b/Demo_Toolbar/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..6337c8a3fe89403be773d924629e9ac456b2cf09 GIT binary patch literal 1562 zcmV+#2IcvQP)0i=GnAWz zXdl4ngCZ(>F+pGSK@{VYCV-gufbzhD0mW!yOiYZMA%+nm5&09{$-3d{vcayjqh0TM zY-S^+;bNPMm_xm1j4{#i}M-YT)wJj2fTn_{SJ(cHRFt{rc ziCnLa5d zEq1$oJpiig1Ix1ABuTm&8X9WL;%cE( zD$SC=j$4Bxkaa5((NiWMvNVeySRKQ=b@*3i(q;tcD z4Zq~``H9id(RcItd>R1kc6;l}l`9V}Kt$>6*|QH83I&B>m}e&^C%;lv^>+XuTU%S- z1OTVgxw@&TX@{n1=dD(22LQw1;NT01MB+367z_r(`t|ESTL3u#7~F367ERNB<~VM@ z)9GBTD9R-OAeSv$_96g~B{y@xRQHj~EGH zLKAar|bHls;Z*^Kt>{wL^;L^zyZKiNxGxsbD2!0 z&tx)rY&Kh$uIuBPrj1)H78^~|56#WZO#lEv5YD-|xpA}Eyyh-COaNG(=fC86UIPG9 z6ve#&;PH6Y`h31uYQ4eW;9!rcs?l67H`&(Kb|9P0j;GVQI_Rlnx;42nUqSUeptJ9?WZJ3 zHqXz`=d;=DIKwa-Xqs-lcI{dpP1CDu5mq3}@~|k1J(*1Aq^4;Tz{mQVFQq zyyEfrcbQCPARG>VP`1yPufJTE^!xq0fZIzjFfh=4w?L1_(-n1P=`AYASsICE=iJ3096~2BuOVEN%8^!$8nF=dxM1{9*>`i$K&2= z+pT8tdcA@m2*WJPcK#FO0Kl?rXPIMj#YPH(Fbv#0jEqJjOAy4OcfDF52*OHH)T%XW z)_fighZO)ICnhF70d611z|BeK?ZWriyZ)N4kU`AT)J`N#;B%gQyj;Y zaF3Dge)!Yr^!LSLQ5hK-*;_r3{C`HWyW!s$O37Ld0LbNX)3PjI1{OY+=W@B}dK`5H z`2GH8IF36A0J^RZ_4oI;b#``s4WJPKL{aPk0G{WMmQzx_y}eBx9UaFgiV6cjEEd}{ zGBWahEe@iV0{{wzLW-iOr6!Z9F&d4&G(9~%rt5l?W!Y_sMB-yfl8(>L&W>3u7K_bh z3yGq*Q&rWNuIs-wHa2dVnwt9N%9Sfea=Bcl7DwF%Q&lylD2iAp6y!uAaS{L|N$LZj zXS3P!Gcz++XJ%%uX0zD~0Q9mC$z<|mp-_+&Mfp`#)mS}_|NQUx583v43|&G?g#Z8m M07*qoM6N<$f&+Ts82|tP literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/download.png b/Demo_Toolbar/download.png new file mode 100644 index 0000000000000000000000000000000000000000..53de7e071bfd2baf2f92cefd81428f08e1719a32 GIT binary patch literal 1442 zcmV;T1zq}yP)EjLWZ4dypwA)B=GADo|-xf~w zdhoT!gZY`)y88I`1-1ISw0nsnl_S75+TBSJ$O+(NePM9o^i>o5cRfe`B>_7@5eJNZ z1UtS%<8N&Z>$W7{pj*2$A+8C)sfI#cw%|(=wFrQo&vkG+24)VDTnHTpzd$6$d%PYN z)ihZ02~7Mk%xuzUWCA?X;R!!I-!m|?T+^%8B%W~Gi;oWQ$onL00v3rT`$?E09weRt zFe46IOq@~J6lMw+9+CA0nHh16034q9h*ep$Nf< z1QCl3z~BZFmId9iNieJ6aqod7*1otFov}__&@bTB?o(KI#)FkL8Y=J9pc_cdeo0?O zxBf{H8yTRU0IHV42z4S7>P5<1g7LFng|BD|iR$q9{N#@9{8IeWR4@(N>kBby#iaDJ zdVlUkowf+;pS=(FSLWl;o~;G}Y^F=QDLO|4==i>n=OG{CCNDrqpDAoA@(z{JcC-$HxnOja5)0WwEf@zms#k?EVZfBviJjKM1aj_oMmWs5$BulOE1 zvehglfa!>f!lTxt;y>HfgOz*hF|B3>nj%dYYgh>j1qV#{_xKLC9q;{yPBl=R%>t-= zs$tk-2Y|x>vt0-RFfXA$+>Q1VQLJulggJ+N%hyH~$NmK79rf^^_Vxcwr>M{IBSknH zV8t%EFBq6`K?0bRZqb$l)E#}4kv`aF6c@vB9Pi4EStZHv32<3zjXZwYCF(!|X;IZmFc;j(%;cH2;H18U*3najjcbpcZOV$txi&^(O z>98GVY`TL4oDMN86G2MHv9q^fODjz%tQzY(J;&Xk}h78>&hRg?F9;FQhK*i$C zQkz?}P#L{oR^+lf+@e&q!JJfxNITJ8f)9>{P>wt7% zVXc}Wi9?8s7Y)?{cPdjl0g(bbT_0|%T2vDk!zmp8S4Y>m7|KdD%qk~wKZmB72sB5> z2B>)S1)6o3o_9&U;fCkVo&4LEIY9d)%mk2VQ>em>45koI81NU_6!bf$Km*P38~|#T zll8&$TF>CtBzGL(GXJt5Z3o76L2PYHLaD{eg2t$W#H*bk0?m33DR_9E`Uc=k%5&!4 z)DSF3)QAa+?-Y>w_#tZe2NZxNC<1z}Nt|jw6v81AxXfiY3nWdJJL535vbA w$`{cs6n8k=>oJ7GLlhTqwQs^3J#IR{e<7`RR!iO<9{>OV07*qoM6N<$f?p@2<^TWy literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/github.png b/Demo_Toolbar/github.png new file mode 100644 index 0000000000000000000000000000000000000000..3245ab502a8abc8b22b519597a5d59fccd524337 GIT binary patch literal 535 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 literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/run.png b/Demo_Toolbar/run.png new file mode 100644 index 0000000000000000000000000000000000000000..93d2892ee34f693d2ef30879a6fbad5cbeb908a8 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^kh={g8AI%&+V01C2~c>21sKjIW)VK@DFutAxDf$@^3i(`n#@ugF2J)#3ej@KI+ zvI=Kv*IjT7xw7iP1C>_4R}1`(p4`~XS1Q`l)U6;Sa$7I$W3$-8Za%#rtw)O-t)ecw zFe`~{@%0w(UZn8y<%HR%d*9n7&wI}MeNOec_x0~<-`{z@+(LWdY`vC}iE}o!zft0F zx-#1#y`%%By`N6bLj8R+WCr-AVR=N0be`}bu`L@}$(<%>$ zOy|gCt30Byer3^NWxf~zyFj-IY&BOVxCmU!+0bvPt;exDgyE`6$e+8Nzbn_DPXF;> z!Vfp`LfKwRR=T)E= z@R8*9@Ar>uIZyfglueH9P*l>dZ*m+P@(wZ{a_KOPSURK=p%zD?? zA7LNSlvTZxUt{UyAkpnYrg<+|72m4Ac(&bl(foM5+)WP3>TWXIPXx(Bc zzL7I0`r~<)(0z05tG-S3UC{2#F1Ps13W=+q&(Eo7(7ly$DE|!S@fhjCxl;cH_1DQ4 zZCiNF|K_CfpDVYmDm*{iq2tzXPMf3U_Kj(8Yrm=$EIk%nC$eU1lqx%iWYyk>k)6|R z%Dw-wEAVQqs}0p|2S&JRiEBhjN@7W>RdP`(kYX@0FtpG$u+%j&3NbLTGBCF?HP$vT zvNAB(-}pxxMMG|WN@iLmZVl(|xJ(CXkObKfoS#-wo>-L1P+nfHmzkGcoSayYs+V7s UKKq@G6i^X^r>mdKI;Vst031dv(*OVf literal 0 HcmV?d00001 diff --git a/Demo_Toolbar/storage.png b/Demo_Toolbar/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9f038accb93d0baf9fc0606bd86789af5de6d4 GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^kh={g8AI%&+V01C2~c>21sKjIW);TI^9xt9afWb5hT7~*k!>Q!IwDS;BlKHi^U zVX^b0Zh)uMZS&;TT@$#N6pu`05u8}dV$OV#Jwtfy-7c3Dfo%p%;flFFCs(#UICi99 zN{#EL8O!E~S^etyb>&QL82|I1@z3p^?|NUXDKxbJ>Db?AEu`$sp^suZtd##L7`Y=mA+DvR42uKIBO6>I&q+8PtKCpj!N z(+pntV#*Y=scdUbyyt#1-PuV>r}EKG-?dhLFI)MiUD>I<^y`8mdr_8EIi0d8o1bqk zSF7Ea7AqFWD|Ixs{P5DlTz?i`Tff+MiPNNe8->B(w4Hrz?ZUw3UCB*LwzAs` zhn>z^7TW2QRS@WRs3j=b$;mJJLTj$MD^Jvq_qVv&T<>hDy>o1iVqr_MdL3w?f&-d09FTe5QY~h#Af$EB|Qp1PUh)lNt8ZM8K!`UeJ&42`%y@QjUj)YjGxI-Sm9m4aTw zaYF>_phC9o4?fm7Rw)}jvYN7WpzVQ5m>(@Q{*tPkaHUl(8H(5+Z?$V^M zr>(8cR9myOee>qc^6?WV+yGE)vqcD5eqdA_xFBq$!Ih_nT{%x2S%O(qk9!D*cQ z?8IXau37z%)ncKnX4A~Io#^kP)ZE-m*=#n3AP6ZK45nNzm&7p4U}Z(c)^wVGkf!O< zbee~Ico^TWzoX~1H{RT5FDqT*1GB9qA=pU*=O1n@i$l}Z&DxY$>kN+yV`D5AWg zBB;}9-xwJgDeLPWc*Qd|ew_t31ZZh#!S?Oj@2;t-X%|JYCK`<@+-^5UMutHWB#cHA zKmh4<8URpKR0Nu)k;w>PqfxZpefO&$ee}`A?w+1e0E7O(G{2C}f)+G4HxmaB9(-~G{E$Yiu90QQIylgeu`$nF zQ*(=V-@XseE(p-x-u_Y|k@(TclP3v<*@hqfbPH@oEn<-fhR3}Kv9riz1TY386bc2B zkr3FK0BD*n8D*7VbXjmVX;_-mN%?;>aY7g{F}$)5wBYV zd-v|GnV6W^!Llq7R1z$E0+d1-+p+VhmM5Rw>3`+*H`7;YUbPd3!{LXs*(`Css|$_ytwBjq z0eGGVE6SJ{x(J%4U@fu%l7ti+L6QxFkR<4JI+Ru13JNkvSwb?#L8oU>Q@;#)y&jSz zS@!SWU((Za;VSW~0M@NrXJ~9}yg!%AAr_CraYr+(CIiMUc`?*|4t7U1zBu$}oc;J9 z*uW$x5@3u5%tk{{&=eFT;Byb6&vhDEfk#PcDatCHxOK@A7>!08J9cdSLJR(~1)?Zg zGMS8JW@ZMKA{z`Q6G#BMl1fyWi@+GoD7&Qse|hyKxVz6{%d;;*qgF#nkuaIfph*Jd zOB~2%N}<(gKmyQc)UXy5LZwn6kw_FR1VCN^U=&5sI6FHFW1$UHUc_{88Umk$UT=U- ztA(|&2-|l57G`T9UiW1Dd9xP$(AC z|1W?fNmMqQr9@E#tyChLPGM}I4>J>E5cwo10w4*%Qc!?jJiQw>dpW-N`=QHunj}CG z1cY=7L7x|)sY!5=nMK8~vVfwfq$Ej6nx>IS^I$B6Sa$Dfq_grhBJ&WtU;o2=jv_DT zNdmCj?WnxP4vGLMl0abGgG?p^K@b)PP$(1$Q4|wuwHjP71TmX~NE`RmJJJn&`l5oQpp53zZV2#ut6W#X&;1C0u%`- zNn-wgCvn;P`8E(|BM1e2NN`a=%7ahDF*@o2%d%)~ZT-ih04|qH4u`{^BoYbe^?FBLyJQ9S0m><>rNWW^6^KD2HhWdIiK0Jgt$6{o#A6zs7mSy4d`SPn) zt@>skzST>!Y|EO5D8Fqup|!!QrR83#~?riP2$%13p--1<>ntkn>s41OYjpLwDy{grHkT@9U9i>ZlA&}lUo?C;0XqepQ1^y#_v>(}o*bLPx(zu&)*{`COU)6@B2 zFnD3*%9XeI{r;sK8zqu#7!HRMg(aoXs8mqW6f$#ZFnS&Ab~{J{P%CKYG#Y$)`U{*r z`z21DIwh`JwW|H_;lsc0?Cg{mRL3G$vikaZX5+?