From e6971155ab8caac2ff596457ccd5d151041cf39c Mon Sep 17 00:00:00 2001 From: Ernie Pasveer Date: Sun, 5 Sep 2021 11:58:58 -0500 Subject: [PATCH] Add test programs to github. --- tests/.gitignore | 5 ++ tests/README.md | 6 ++ tests/helloarray/.gitignore | 2 + tests/helloarray/Makefile | 21 +++++++ tests/helloarray/README | 1 + tests/helloarray/helloarray.cpp | 26 +++++++++ tests/hellodaitem/.gitignore | 1 + tests/hellodaitem/hellodaitem.cpp | 18 ++++++ tests/hellodaitem/makefile.lib | 3 + tests/helloebcdic/.gitignore | 2 + tests/helloebcdic/Makefile | 21 +++++++ tests/helloebcdic/README | 1 + tests/helloebcdic/helloebcdic.cpp | 13 +++++ tests/helloname/.gitignore | 2 + tests/helloname/Makefile | 21 +++++++ tests/helloname/README | 1 + tests/helloname/core.helloname.3960 | 0 tests/helloname/core.helloname.3961 | Bin 0 -> 507904 bytes tests/helloname/helloname.cpp | 16 ++++++ tests/helloonefile/.gitignore | 2 + tests/helloonefile/Makefile | 21 +++++++ tests/helloonefile/README | 2 + tests/helloonefile/helloonefile.cpp | 39 +++++++++++++ tests/hellosegv/.gitignore | 1 + tests/hellosegv/Makefile | 21 +++++++ tests/hellosegv/function1.cpp | 23 ++++++++ tests/hellosegv/function1.h | 6 ++ tests/hellosegv/hellosegv.cpp | 18 ++++++ tests/hellothreads/.gitignore | 1 + tests/hellothreads/Makefile | 21 +++++++ tests/hellothreads/README | 1 + tests/hellothreads/hellothreads.cpp | 41 +++++++++++++ tests/hellothreads2/.gitignore | 1 + tests/hellothreads2/Makefile | 21 +++++++ tests/hellothreads2/hellothreads2.cpp | 80 ++++++++++++++++++++++++++ tests/hellothreads3/.gitignore | 1 + tests/hellothreads3/Makefile | 21 +++++++ tests/hellothreads3/README | 1 + tests/hellothreads3/hellothreads3.cpp | 73 +++++++++++++++++++++++ tests/helloworld/.gitignore | 1 + tests/helloworld/Makefile | 21 +++++++ tests/helloworld/README | 1 + tests/helloworld/function1.cpp | 15 +++++ tests/helloworld/function1.h | 6 ++ tests/helloworld/helloworld.cpp | 22 +++++++ 45 files changed, 621 insertions(+) create mode 100644 tests/.gitignore create mode 100644 tests/README.md create mode 100644 tests/helloarray/.gitignore create mode 100644 tests/helloarray/Makefile create mode 100644 tests/helloarray/README create mode 100644 tests/helloarray/helloarray.cpp create mode 100644 tests/hellodaitem/.gitignore create mode 100644 tests/hellodaitem/hellodaitem.cpp create mode 100644 tests/hellodaitem/makefile.lib create mode 100644 tests/helloebcdic/.gitignore create mode 100644 tests/helloebcdic/Makefile create mode 100644 tests/helloebcdic/README create mode 100644 tests/helloebcdic/helloebcdic.cpp create mode 100644 tests/helloname/.gitignore create mode 100644 tests/helloname/Makefile create mode 100644 tests/helloname/README create mode 100644 tests/helloname/core.helloname.3960 create mode 100644 tests/helloname/core.helloname.3961 create mode 100644 tests/helloname/helloname.cpp create mode 100644 tests/helloonefile/.gitignore create mode 100644 tests/helloonefile/Makefile create mode 100644 tests/helloonefile/README create mode 100644 tests/helloonefile/helloonefile.cpp create mode 100644 tests/hellosegv/.gitignore create mode 100644 tests/hellosegv/Makefile create mode 100644 tests/hellosegv/function1.cpp create mode 100644 tests/hellosegv/function1.h create mode 100644 tests/hellosegv/hellosegv.cpp create mode 100644 tests/hellothreads/.gitignore create mode 100644 tests/hellothreads/Makefile create mode 100644 tests/hellothreads/README create mode 100644 tests/hellothreads/hellothreads.cpp create mode 100644 tests/hellothreads2/.gitignore create mode 100644 tests/hellothreads2/Makefile create mode 100644 tests/hellothreads2/hellothreads2.cpp create mode 100644 tests/hellothreads3/.gitignore create mode 100644 tests/hellothreads3/Makefile create mode 100644 tests/hellothreads3/README create mode 100644 tests/hellothreads3/hellothreads3.cpp create mode 100644 tests/helloworld/.gitignore create mode 100644 tests/helloworld/Makefile create mode 100644 tests/helloworld/README create mode 100644 tests/helloworld/function1.cpp create mode 100644 tests/helloworld/function1.h create mode 100644 tests/helloworld/helloworld.cpp diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..80069dc --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,5 @@ +moc_*.cpp +ui_*.h +.objs +.deps +*.ini diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..0597b61 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,6 @@ +Description +=========== + +Simple test programs to test various options in Seer. +Like threads, handling signals. etc. + diff --git a/tests/helloarray/.gitignore b/tests/helloarray/.gitignore new file mode 100644 index 0000000..3464191 --- /dev/null +++ b/tests/helloarray/.gitignore @@ -0,0 +1,2 @@ +helloarray + diff --git a/tests/helloarray/Makefile b/tests/helloarray/Makefile new file mode 100644 index 0000000..17ec0a8 --- /dev/null +++ b/tests/helloarray/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: helloarray + +# This rule tells make how to build helloarray from helloarray.cpp +helloarray: helloarray.cpp + g++ -g -o helloarray helloarray.cpp + +# This rule tells make to copy helloarray to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p helloarray binaries + +# This rule tells make to delete helloarray and helloarray.o +.PHONY: clean +clean: + rm -f helloarray helloarray.o + diff --git a/tests/helloarray/README b/tests/helloarray/README new file mode 100644 index 0000000..2321033 --- /dev/null +++ b/tests/helloarray/README @@ -0,0 +1 @@ +Simple program to test arrays. diff --git a/tests/helloarray/helloarray.cpp b/tests/helloarray/helloarray.cpp new file mode 100644 index 0000000..0d396f7 --- /dev/null +++ b/tests/helloarray/helloarray.cpp @@ -0,0 +1,26 @@ +#include +#include +#include + +int main (void) { + + char* array = (char*)malloc(256); + + for (int i=0; i<256; i++) { + array[i] = i; + } + + int* int_array = (int*)malloc(256); + + for (int i=0; i<64; i++) { + int_array[i] = i; + } + + printf("Hello array!\n"); + + free(array); + free(int_array); + + return 0; +} + diff --git a/tests/hellodaitem/.gitignore b/tests/hellodaitem/.gitignore new file mode 100644 index 0000000..1f43f3f --- /dev/null +++ b/tests/hellodaitem/.gitignore @@ -0,0 +1 @@ +hellodaitem diff --git a/tests/hellodaitem/hellodaitem.cpp b/tests/hellodaitem/hellodaitem.cpp new file mode 100644 index 0000000..488fc07 --- /dev/null +++ b/tests/hellodaitem/hellodaitem.cpp @@ -0,0 +1,18 @@ +#include "DaItem.h" +#include + +void function1 (DaItem& item) { + + std::cout << item.name() << std::endl; +} + + +int main (int argc, char** argv) { + + DaItem item("TEST", 100, DT::IntegerType, 1000, 2.0); + + function1(item); + + return argc; +} + diff --git a/tests/hellodaitem/makefile.lib b/tests/hellodaitem/makefile.lib new file mode 100644 index 0000000..2d5a73b --- /dev/null +++ b/tests/hellodaitem/makefile.lib @@ -0,0 +1,3 @@ + +APPS = hellodaitem + diff --git a/tests/helloebcdic/.gitignore b/tests/helloebcdic/.gitignore new file mode 100644 index 0000000..c9b538d --- /dev/null +++ b/tests/helloebcdic/.gitignore @@ -0,0 +1,2 @@ +helloebcdic + diff --git a/tests/helloebcdic/Makefile b/tests/helloebcdic/Makefile new file mode 100644 index 0000000..6d0a9df --- /dev/null +++ b/tests/helloebcdic/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: helloebcdic + +# This rule tells make how to build helloebcdic from helloebcdic.cpp +helloebcdic: helloebcdic.cpp + g++ -g -o helloebcdic helloebcdic.cpp + +# This rule tells make to copy helloebcdic to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p helloebcdic binaries + +# This rule tells make to delete helloebcdic and helloebcdic.o +.PHONY: clean +clean: + rm -f helloebcdic helloebcdic.o + diff --git a/tests/helloebcdic/README b/tests/helloebcdic/README new file mode 100644 index 0000000..4d9e999 --- /dev/null +++ b/tests/helloebcdic/README @@ -0,0 +1 @@ +Simple program to test ebcdic strings. diff --git a/tests/helloebcdic/helloebcdic.cpp b/tests/helloebcdic/helloebcdic.cpp new file mode 100644 index 0000000..7961b5a --- /dev/null +++ b/tests/helloebcdic/helloebcdic.cpp @@ -0,0 +1,13 @@ +#include +#include +#include + +int main (void) { + + // Should show up as "Hello there!" in Seer Memory Visualizer in ebcdic mode. + + static char str[] = "\xc8\x85\x93\x93\x96\x40\xa3\x88\x85\x99\x85\x5a"; + + return 0; +} + diff --git a/tests/helloname/.gitignore b/tests/helloname/.gitignore new file mode 100644 index 0000000..5fae4e0 --- /dev/null +++ b/tests/helloname/.gitignore @@ -0,0 +1,2 @@ +helloname +core* diff --git a/tests/helloname/Makefile b/tests/helloname/Makefile new file mode 100644 index 0000000..e7745dd --- /dev/null +++ b/tests/helloname/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: helloname + +# This rule tells make how to build helloname from helloname.cpp +helloname: helloname.cpp + g++ -g -o helloname helloname.cpp + +# This rule tells make to copy helloname to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p helloname binaries + +# This rule tells make to delete helloname and helloname.o +.PHONY: clean +clean: + rm -f helloname helloname.o + diff --git a/tests/helloname/README b/tests/helloname/README new file mode 100644 index 0000000..1d386cd --- /dev/null +++ b/tests/helloname/README @@ -0,0 +1 @@ +Simple program to ask your name. diff --git a/tests/helloname/core.helloname.3960 b/tests/helloname/core.helloname.3960 new file mode 100644 index 0000000..e69de29 diff --git a/tests/helloname/core.helloname.3961 b/tests/helloname/core.helloname.3961 new file mode 100644 index 0000000000000000000000000000000000000000..fd4cbe428c967c0ba26872a961dc07960eff51c2 GIT binary patch literal 507904 zcmeEv2YeLO+Wu^kh0sFiNYMo;K?MRLMo?UO5QG&FL6jtfK#&$m&>#v+H7IJ}Dx!$S z3KlR}u@V#&6*YD&NK{m?U~CAA@PFPp&l@%)5k>F)f8YJi`Em9+Z$0mMW_D(Fc9zWQ zJ)lpN&*x~1ak@DNCC3S>Ap(O=k`tgDLkw1qaEKV@RgDlLhBAj=tWMi40VXh;w-<;C!WjF|L?# zfdS>`3vxcii1}Pz;-ig2swa+qP8Mm7h;su1j4M8~{Cu3QY=?@7b9pI?n^Znd=ks9M zc2DGdC4WB7U0;xKr4__w)iD)E)afch%FFEXb?W*`kNI7kyFQHz-C91*vo785%GQ^v z^ZofacYRrm%c>x*pvmv*bQNL7#XnuX&cm%wY3GEBW(rE-(3vi{DnhPUd$)e7|_-E719VD<7B2Iu#@0OoThDV}onHpf!Mg33nDtYNaI?lH&qKBPL|T_M(3bHCZ=TJTuB-xxN8k1=}gn&CN_ zE=ArN)$c?aG=IV|)!l7&yawnzDjx=QGT}H6U5*^eu``&#eS+>_2aIDd@^YJ*F>&IQ z$!U`^=-#eEi zJu-J;cN>c-j&`lD0cC}wIGEnb?1PQeK;&7}`TBHY*SFq6`g`2nYq^WD=-vbR^-)gi ztCNyRZk+g_S`5ag8VnfJ{krTLG|}k!w#2!L*NWb2Kb4Ej`*^J;qU`Y6txT`ia=bQs zNd5Ji%X&qVxIGO&TOgc)pID% ziLIz_pE+exM*EDZlgDRdweOX2QO3k6S(7p*=d=%Hq)lj_JvF`kkc^C}2MUFs{I6nQmgoEbD1QI1 z_ho}zP3G={%aZT^tKeQ|E2pJ<-&pPitDoKj zsJG?>^zvwON z!JMxmUJh;_lTWvU-ZC50cH;QS({kJ9CUtJxxs%*D>*%h#F5G1s_Z@h)bAHF2pDgG- zr z?-u0y1HGp&yvSyi?-;~aY`Q;ShNxz~x<1iqj_jqCqniEpW0ktgs`t$8H{p>sz26=H z^C4RpiE1Ch(isIFN-ygV7JXI^uZ>&I{Q$c?D=I&7QwyvPgo)zek#tEQ%+fFEI zIgK3sF0!FGqOC!fd5fzA@p`a54!igl1yWsQJpCI3#Xptb3u(mn7>GXX(K{(A<0eg+ zoRXcBHZ>Hsuot8a5J!MLE z&eV*wN&SYV3{6bwJ>=w+!Tkpg$vHVCB|SH{Lx&C>jTfB8PafBANT-w`C#4MSkkY$1 z=BU`O!ijr!=zWn}U8ju6VEkDx*^|ak$xcCm8J+q~9-q_8Io=B8w2OwGm@pcBXEOi#HeQTh2jJ%^e-eJFT2DJ9fD{ZO-V zMMuB|>m8EQDSgVc9Ji*ae{P$N|J^pLc=~di?Ci-GkDojyWpGCJG<+8<+c+&HEhi&) zJf=^PFFd#hO-cjBkR!eb5OI?Gm4J*QzO;}qqwm|ZXUd7~5}m#S`t|6Ug0D{6o#gZ! zKD>L6ekmQ=ooLj+wPKa?I7%kjDWz&g*x* zVhcp*d5CaB5+d|0(bXqL=%ZbYc}a@U%Q-_^FhVaiX-kgKN1j(h5&Fn;((nkqoP)Hb zM(Fi?B(}^5y?z%i`m6}OY-?@FbH9#FzS7^je!xkdUz8Jdpg4K%#@J__11I%>>Ojk0 zc&&L%5F?Q@C2VJjJjT(oi^xLV&SF>YD6&wtv&fZ?6FFMsLRW4svQV_Mz?B<`EY$3D zpBHIaTV$bRXV|q@6@`l+l6QVIazh2%cJFXIY zvoiZAu`hgvF3Ahu-Epcow1IQech0m($BdC%W zZV~r%Nj-OC(#Z3lm10qA{KCujEu6Mz?q&OY(^}8IY>#}6IPK{5dz+)KdhmWcjFO)g zalM?Ccif6(`7gTBPmAw*+39xN4~ks!3?<#q={~IA!gsr$-F@hQt6KJ{6#zq5wH*i? z(tY7?{TA*X&_?EtP2TWZ^p46>-u!QJ0v$e3N(U_bWx&GSy%v7k{XpFhljlC`OFm`m zv@hkoF!KEF=XF27`>5_Ik(=O$XF-7EbKfm;-4}VZfK8qcY8MDi%)rSsfG_7WrUs@@ znKm^b&kO~+1e~FnX_F^p2b^YzZ5-V-h&9R1e(k;k2NnUxpv3clT|vlOz#YJSz*bmx z6A;h~cq;HA;5=Ym*rfR`8SMCS<9&^*SB}m1RgM>Z6EPs)@q%oJ_II2Xu)F@KqgZ_7 z;`_ukJfmi{i(|vi>5aM`cVdg?qIP|NzDq&_+!-rJ%cWJcnb+izTq&4$H85sVT+rzr z7r!8?XN^j|=SD}}jslrS*1H{k-GF62(+}G3gE|W9uNP?#8GA42Hj5ti48b08@z+H4 zh--Ltbnm#pRWUu{5*GQB;}RECN{&mKTlvhm;MBOJ?s19T;}Uwr1>gt&9&xem`L8Z` zOhBHUFsSOzQumI2FvWxz6E8L$le*D#QZ z`(n}t<2ISJM9TQ6>^8agD^2Aw9$D@!N806Hvb5?3oK?81Bu($lZs$DuI~)BzmA__o zKc|bo{_bWAzcn(~gvfhhLh&Hm`i!Nfl zawAci{uaf(7Xi71zs-ntt$4w`D`^aK0whN7x9Gjy2Cf%=e-;~bN2*Vttm{anpWNt_ zrt{-Ag}a_rm4mJxw}D()>nNohrrmY=H@>8PU%T9ITFSo1o^5{HQZTi|wZFsd{W-B{ zYF$@f2{(_VWrZJd>=v@p{b+d zb@V?QV_9Bovs8Cfvd{CoW7<=UFs{1-EDmfi^YFJ7Zv+JBCLTJrFdG({uX zSIdB9z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E z8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQu zmI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvik zU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy% z1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFT zGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrR zECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318 zz%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk z1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2Fv zWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFs zSOzQumVy5g25QBag(PQ8oH(UjAT%)}EjuHSF*zq=YGC@5X;TA}(UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrR zECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318 zz%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk z1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2Fv zWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFs zSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy%1C{~H zfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH07 z3|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318;J<)@S-l7JiSqfP zbt%zKH^&DdwO5p@3er$g`52BIC+H+ORq@*2Im4+0Z47#lRxc)+G>&2{{bWLk%P(x` zYP{Hlev0vwr8Ymuhl13~ja{{(;{;q;;-uD1b&Y*f-L9@)F)QSXPT>-R8YksToYTd` zIbBSgVyPrXQ`Ggz+N5W3{a)-PL1>ENE3GoRj4P^BdB_)MG@UQ>SE~yW62#KOKmcb#E6eH@h6q8ycdd}vG{FpYK-v{7}rPOdh8sp((wU!J_!3YSl}v* z+rr)yav1n8U}cc~0q{M<-;Qw{{6@f*!X4~u=$}0j2$fT)R0>BjmUUx@_Rf@R<*vdtmz# zJqGbt!*&{QCHidC=Y#$P%#jQEJotXioVP>w2y&c^92=oqiT)mXANVamty5%Tw3A?O ziJp#J3CPtOy&+=d4KN;lP2qDZ>|Z19cI0~ueFfwpu;oGbqMOBW&Vqh0!$Tb}CZzFFe#_`B841RATu0Qn688Zv|+t7z_j#|LS zVEY6)F2nd{_(lP*2TnokZ|L75-)79S1%6+`?`p{RLVp~5+Cz6V=3E5bF6h1hHiFL+ z=$l|a5qKhEXTfhhY>%Q3hddRwZ-FZjn*l6Emv$ojra<==ay3P42y46seI&-x2BY7C zUI%$bLpL9IFR&$QJ{?#O@%Kq?^jPRRK$i9#`d*CBg>E@cMccYG* zp|63M){rxy&qQu%lQEWd9PHC!8;Wr+^rh%=@Rx>grw#mf!neKXkiS0q+Za9!c`EeH zU_S?P2gq{nJRjo+P*(!{s$qN`@DktzbZKqT_aUYTK8q3G1@c80zlqp8F@6}fAlKCs zImf_fEOfs@HypKYMt=-BYeK#N{y$;720jVUkHYvl^j!3<&|L`KRP>9`bI~tBzZ88Y z`YiO>=wskJ6246_M=EMK1@Z;x(l$Uh5;au8T$vyv2>o5a4zSI`_;dLGfY`doa}j*! z00#l3<)goaxZdzP6@JoQf^Q+mB8SjNLvDne@52@bW+KNvjJp7PBfc+sBKn=kvl_K@ z!gx7wFt8SUZbknQIgUaff%tXsn~oZefqew>tbuPk*jB=?4eW)Gr()itp}PQn55jLX zakp*2%=G_M@ zMND7j%|hIH=-tt!y#;%B^ks;71NA;az1Y@5KOMS$u$=(B5w>G7z7cEq9Qkg={H=k< zL)Qwn<%qcrI%(<9?S$+Jj0k9BqQ_Q&y_8Ev@ z0pAM{*Aw_Ue0l@l1jfPk5^{ZmaRJ6(!sjf=br63F;sc1!N3RE6YuG!%UJv=-ga1rcoyu^vM~M`N15Qewh3k;M#II|+ za>>U2E>^U_q7ki)-*AJ0b10u{(4oC_7-c3ZpSv9-ma^t8BEJ*QFg$OfTuj_T zEFtb7mJ;_6on#aLPuH19KIAj4w2lVcdowcZMEN9QXX44kB;qN=ez;DM7H|w7MQ@Y; zBH}cI%FjmfVxlU34RSvzNn;*jfLN4j^r=LLSde1$L1M`$#uEd?;Q7>ZKk`;`B>TVQ zARW$w+%Fy@zVnRXM^X1z@4PA>>HPB9Tbj=ES8+Y-JyJZT)U5Nb#(V4htMPx=e_Ct9 z+xn+}ayOw@PSE$IaVvYRXgeP1_QPed+Y)$u^75kFR}1*3=hu7L8@L}lM|_d^3h{N~ z+r;;XTZ!9=UlD&G{zk0C_d^Y0ePScx(ZuG&R>b3o?T8(TorztD-H1JieTV~z=Mc{) zYW{S}nZ!xN9O6vk0^&8qWyIygn~4t+pCmp<^lsO~$-2GOFP7(rhQtJ75;2)LoR~?> zC0NJd zgIJyTB(a#dU1i4YAvPRf>Io7ZuCqEZllmg!4r2V7Chlwc9S&dT_U!UxqI-&alk(fd zcRjLhzxSvQaz5|-_(+c*_$ci*x%VsW4FhG@M--hS&99%$zhnKnp2OikwZ0l$K;CcV z&!>l*U)Oy&Kec=7)p*4tp{QXACql>v8IrUze68+fm*NMaLL> z0a5L^jpnu!pELHk``#wT{k|`x8@$7ZPU?mk}Q!ZYFLe{y>c0Z04&)Y)d?q zIEXl!*szk>{*x&$B;G{~(w<4oCl(S*h_RJ<{Xl$*@x{a}>bFteN6e?b#w(`o7R0W^ zvx$?4h4jCYatY#22amgczbemsmh7ChntOtyftWu>-LOF_m};aS`!O z;s)Y2;*UiCYbNhe#5TmP#DT=|#OcJViT4m6ChlR~fhuO*x_^1`W%|EC{E+xD@h4)n zVpCroVpC#g;%USo#IZzupI%BikN7X*EyVkXj}TuVzDE3%xQAHdbyH7EVmIPY;zZ&M zVjgiR(aVFC56!?`d8shWB2Z`&5PZ2i|pCi6Re2w@P@jYV0H_Z0@i1MezFNxn0 ze_9v;8&>OOAb(&(_da*wnFfmn7z`5&i1~x) zN7Lu7XHE`Z#8mJLbE@0AOAvLN9#JWcbWZJo)bD$%b;EE`ya}FI9=c) zQ(tO}Bdc%cH>SSRE0}18r@m__|5ic0*U_%&3MucW|5KFpy7(E7|GSj;(f>ordYwJI z%^#n~blyLUZGSZD??)U)oI*@)`^WQzpKk8%7a?Lkv49v}Z|oJ-6MWv-i=H!BNGv6m z5Q~Ww<%$2u#Or>Xy4A>_@elW_&<^7l_`+a5v4j{TCKA2#7yfAC;(st${GGup%0=HA zIkD7W!7d{8@r*D0-srvgOIsc5@*CgMU~vnBrNjXBVWKy_sH5=@bTC*{0cKI}jgRkS z;z~|5m`J|@$|1@X#TRwqyj=~(6H8Asaxv}Rc~wsAVf=!`f?h@r_cWMFz508x=q%$G z3K@(iCK6MLg+yhXuRkD@));n4Oh&ENUZ_9e6z^!M6* z?pH*&(e9jM?1`+?SIN}(4DE>-<>RBGjQtJGKe4<$CML=~#r;5g{HdP&J`*3q@5c*+ z-gx;H1)hDQz4+qtcAfte+7oA$x9j}D7s~4;=YO(=pX2q@O9q246W=iCyl61IiLw^= znvqk9CB%YaqYu2!IK^y!56$Nl^!Ww7fBEl5E&FhY(=nc6!LxtdFMfX4yg$6#-H9quzLqRrOP+s(#w&iR05JWK3sB7WGrJ(hnxV zD3|)|jHwrmPd`XdK=tL9>x8H;mjpuAc5~fSOpNDsT6~;2?(4qt)<_c>#{@emSEpPY zG*{$DQQpGePd28EM_Jt_+h5wc2jbo1`A_=~xL|FB9Bb%eCwG@C}S_=EzLS_<@}Y5y^#4sH96n=hOd$gBbR(((Bb+5 zPa9e5%)<^KEo|UG0WqJrjJS$eNZdp$CT<~yE1BcgG9JGY`5a`3_Tgt6`*7-$e=_eI zC(GAao|g9GI1N3FE!J|CAKj7 zRO<5?H=K2ah+!VjGAVDOUx4vjj%Oa)_fRgP-ww_n{>7{-OXs7Uz&v@JCpl#Dg^25z zCzInMZlM<2&-n_fsCXM-q7`V4j=km%pZgyI+MUXSO%kX3sfbI`mhm<`FH&24V<|25S+*et9O1&FCee%xw zuiTL{?&!08-R`*}G|;~&CapoG&`l)~)pVfs=1K zaOJ}>7k)gV-xZ5ro4e@bDi_}I!r;5RwYkdo?4V${k7=i+F=lS5d9!8<;O6&P4dg{sRgB}Uavn} z@Os$g0@uj;xl#SRsQwzSar$}E>#wr<5B1EapEK3Zi|ViOI-h?2^!lr;{&PI@>E}}Q z^P>7|yv|qldDR<0`2o)3jnmJu6@-<29?^K6Pe0#Q6!%F5^Xcc_isH0Bjo10~^KeCR z_4s*L<26n{Cs!1w{u-}w`uVw{IQ<-{&%ysr=5zO9e*Vno^YcXw&2hh^iNT8UC-QjT z!h`a@KL%aj{{^%MD|kMnqWo50o`HfIf4n`)dt1rNfS13#=Bs}dpYR;{rT-D&0uv{( zf2EnT$ieeSJg@h>`rzL3*KgiABF{yUwvyU*KZ)ey&yKzOM~K(8A$~qQR33N7Ih5gV z=)#`;Y7eiI6=Q!j`-Ngd%8Ch;6_Y3{CR0`%PFXRNvSKb}#XQQ2%P1?ZqO7=%vf?Jn zid!fv?x3u=hq7YqKCYkG(1Qt-6_Y3{CR0`%PFXRNvSKb}#XQQ2%P1?ZqO7=%vf?Jn zid!fv?x3u=hq7YqZ(KjIp$8KvD<)A^Os1?joU&pjWyM^|ig}b3mr+(+MOkqjWyMXD z6}M1U+(B7!4`s#J{ain>p$8KvD<)A^Os1?joU&pjWyM^|ig}b3mr+(+MOkqjWyMXD z6}M1U+(B7!4`s#J16)6`p$8KvD<)A^Os1?joU&pjWyM^|ig}b3mr+(+MOkqjWyMXD z6}M1U+(B7!4`szz$DH338&XzGpsbigSuvTi;&94}nUocCDJ$ktR$N9|aTR67b(9r1 zQC8eSS#bwt#XXc2V|`pdv7rYOC@UsWR!pX>IGnO#CS}E3%8GfE6_-&~Tt!)N9c9H$ zlohv7R@^~ZaSvt1*eI@_*wBLslogXGD<)G`98Os=ld@tiWyL(oipwY~uA;2CjN@~OBWU_M`{{O`g7zo|pFU)lEJgr&zCyH{Vr z`>=ntF8zEl?>Mu*teNI>&|gM=?mFE3se8 zU#+9?C-Z$+YS4UdUqmb=hPoSlVNZkkz3E4E`WQKtm^jGDS$z!_5{rn5$&7CuaPQ9t zDQ6Lb{fs?KEF=b*H%xTSFn-1APq~!#0<{yJ{>DF%m`aQvVDw(@3SKbJ$0puh&#kkh z$jGI{;#Z6u+Ccp?1_PT67H>3I@T|dn<_kV&kl1m?BQkx3tJgHT>VAOjo-h!{y>45r}!R&r7MXZ{sT8rPyUNOFyH$q|0S0jdvJll ztXGY_=zW8w#31AHiOPS7+adKYZjU3azj&dk^KkW-EH{2d*BLBW!nkkDx(ca3()vr= zF<%3NS;ra7=YCa8yLbO7ZO^z0_W!@S|NQOxS@-|8`gQ*)=wtXS?NOe8eg77pLB6jy z80tcq{Kw}RIoQu&!KY^bsA&Hwq|EFX<{*+xmTx;so{YS6g^!g#h^JOBB ze|r8cJAQhuAO2IvPpv=1^L<72hnJf5CEjSzTYn+15A^z{qWb^o==UFsSO)%(fy`#+Im8N` zvgEJ+*=8BA3|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPN zunbrRECZGS%YbFTGGH074Ez%ed^Y)mE=8ZTob}n{uAKyj^Z6b7kj~#@SAQ4y_p(TI z>fcXcGgt;J1C{~HfMvikU>UFsSOzQumI2FvW#Io41G9P$=o4lBl(btxwA0P}t+qr{ zP>^*c%sqG~BIqRH@2du#qw$yCM5}+(m9FI=W{QbZbew=|7p?rgxOJBq`?|}Txq8Jd z{KHoH`UheeC;$JpsEQd^%s55&570>_{zu*V*Z1WAy^+4jO!qr%Au(u*;wvrmSt>QGyU<4{&m2?oUbBYlDRHLF2`M){Owzzt?$6IotK9!eEp`c zuFCl0+QG+)?-T_@&H}n(S5&rHvQ9x@GE^k4!FS@oi7)+pW1Mnnt{X4<(A0ElyFkXRv26_m6A-euu;1L*~gMKFZ0(5Qqcbbo; zVihom-k$PO;5?2M(lHSJ+o=NB8D0M7p|;u_@Xr~$QXRbBOTGN9L}_yjxUUoOIt5++ zw(>RTgV9@{Pes28eHr?x=;xwK8;{Pniz{D+*V*W!(XV$kj&m$=7BB_9Bl>Xk+tH=f zGw_G6-C>=KF8lR)^t^y5a2oo_5pv`(2|{x!#sFJJ8Zlnvk&lUx|Ald%2)RDTX9Hu< z3;N}%AT}b-B_;y>=$D`$hdv)&T0iva=)=%+(62<-7I~jB z1Io7O_t4mccowh+#}z?Ok3s)V_@&ez54<+Q=f;Tfg&d~>$D&W7ETDh4`}7E%4DUu? zjvhwWc7+az$-qt=H}Kd*OrS2xV{7PG)H=~b4&qJ3s&_LO1D~uLX zl5HjXY&^PfU#CfQ!t zn@|*$?5h?i_C+PsIVmP};u}u0=&aP>8{ybgC+Ks+cvIJI;l$R8itShAYf+_ELLd;^ zv)WyAlB>kVM)#^-wMp$k&-*T~mNswcD>2VJSN*mR;x?@$oop$IT*-sVuUJyvW?E89C=(zfi9JLfzceNN9c4Y z#{g~eei?_JiGBf{p;)2zGzj)?bnZ67W>KcwEZ7Hc=p=ttkSy|Y})hFXOKTfe`aK}A2)Q! zXz<1@&3+vD=?|+WwEl6`C10d97?c(2w{ybm4a*L^ddinQpILwT;+0K)x%`>+zoPeg z?}q7lkS9&}q3HB;H!dD{v+2jrdUIvhXWv{o;l0>B1)Y=oUA-^VZ~HCt*Utas+a^_> zc&thOvC9^>?)u7z-*$YLQ~tb7%TdbI!W$ z(VKiHl-?bWT5F-tz4fssm)~1=-O_LCuG{+9g3{cFFa2($^W-b_ZvKAp{$|N5h<94TG zgE_S(#?AR5rDUb=p}hRp4%Dsv!8#Z?(djR&**s#? zBabzCc-#E7DX8n>qx^3ySux@LRma8Ed8csmi0ETaoB#gx*JjiiciQ|~i4EqQw&a4j zU!Qc*GY@{6wk?3VcC~4A$uq4-Z@a7a=~vaCwsFL_kaykQ{+?DBZyeD8+u|wk^y-At zyFb0N&BO7pa1c&M!G9vFDu{rR>m=_yvmi*Djiy%1byHT{)NyTDvumz59R-W z|Iq$Fpq@kdFR!4^M=Q{Gsi00@1@&B8L7p=!$a4<-nYWeCkdZ#rPVcn@25>`KwOt+@~eK+Z8iSH0UC+;Rzx`y);TM;`G`w)i_#}Y3hE+8%?-bH+b z_&o6);^)LLx6kkX-nMsx{YhE&JK47c59m(#Cu6OfW#C8|2=D|U$9LK7^th_W(M0HE zztrP(F;6Utdc22=+q}E3+y<6otH$THFn)@|8Nky(**xms8}4%KR#}hdiW?a(^~o>EQ??&ZVukm`kSCsWh^RC}$9VZAu1hcjMLqvX zyu^6pFNRK*sOMWf|10Ww5-x7jI#iyDL1cVm5Zs@2kIe{Yx0H%PivclHz@OVZ{UiO+=J0 z?qvNMKatOqDT*z!dF53wM#fk49Gd3v*8hkn-WkLhh%o_;G^o6*wg>~cmelJOy*||E z)VzFayy9lW){KbP>&H!ej!*sI;x?5Pw?HfVuFkL5E&3dw5-aaNX&R?>&4x}^Toym8 znYcN{vkVX1ja;3)XuRUb&_%{OVH58@ECO5Dq>)g!X`JGh&_>3GXPfx&Y!j$;GQ4bl zl}j;@Tv~qtH>3|Iy%1Am(VKL1~KXx8WdL)VzpLC#RRQtzxdjz0e% zz>|$~oYr$LUCTjUY8_Wrbew=IOPrj~^Cud6{zUU+Mj0~cva;kRPEKC5u~1QO}byuWTVP z%k%%&CpVqDcg3WFT1oo{q}4j}wwaw?pD8|aogp#eBTf7xFC8X8F$s##q3;2F4H!ni zN9doT-wIjUvFNuz{sjFOjPFFh6ysNc1A*G6M~qL$Sgu2xAaB12eNT)ZXFz&{UR0AQ zuK-q#uua9d4dt{5y~H$yEcZU1$5@`5(r2akk;Q3>`KQ3vL7dro0|U@cipb@|cmVYB zFjM3+u@dqr`kUx)p|3?RMAtSNgAWngk%|^-0Dc^izX0Q>XzPgadW>(Sy*6r*Cf8*_ zjO8-9G5VRV_TbB0=teRo3Vx4cEYG3-43taTH3wat^D+JmeLnOL15?lkBIYsR4s^cd zoivPlpuYgWUcfa#X-@+CnW6hS2(dq4bUgImpf5qM4BZHHZS^?b09$H=UhRrU!(Nqk zd6w)v^pj|er~V;z2FAiavYiWIIJ)fLBhb%3!-|NuFVmwHk(ByHp z3GN8L)nUwJ%JR(Huhfla{N0rA1D?-u1K|DWz2NgGbv^0NRL(jb0E_9p==|_&PFZ0W2HRm99+Be>$kKKIzXBdZ`5oeCz?u>M%c*yRJTKos?i1mw z=9-B4T7?L#&s--0^*fIzsH=lK(TB*T;qy3n3jPDoPf#gMExrf_Q>Ho z6#7QY*${CzL4OtS4Cp6C24I{I{T*UQ&qco)UE5mN7DEVA(HruiT6%@=ucz5sdbB zmCm94e9!zTkmV}oRCGW33fJ3lCIaijmW19Ky%Kr?`ghPjf;mn_KMwM3^p{68qoMl* z*b5lhE~G5iG2>x454aL|G4(G4c9YQY-C&DI8e`_JXGdu=8 z1pl_ci-0v@emU{qkjL=EW6&6$ek@0AL(F+E^b4Vn zp)HF64-l(B{|s#nFvqpjcffcf^;A^|O(OgnMR2JBBcW^K(RXId2NALAUk!s2kA9dM ziF&*BO8T`V)`R^%`V8TmH^Fukbe994qwO-Hz@z9dqAx^$6+Yd8+8%=Z285Zw&A=*qdI;@VI zxs0z2WfI3R7|-B%I>yIx+!xr4!Ea%lfSyNLpcHaHd0E(?Bdqf6Us zz{#S84MB4}5KKgHsuz!p37u1(T=*MCFZAAY57RaU&7^Cit&=?WY50%MRBgE`Cu|_qc`& zFi&7^Oy9T?U(~j$aRI2zgxw{~Hp_rzz%pPNunbrRECZGS%YbFz{~!Y;vnQM9kcsk< zLt0b0nTe)yYsz~6?o`V1SzKDa+?YhGVZg~e+1w$P`w-Ifd&b5_EW5v?_ez)Xd&MRm zyL@hz7XQ6@u3DdO&#hwW_8YTPGRnyEU8S^DEsU)9dhcVs`r$|KCq)}~r+Cz@E)V?p z=Y9tyCWe(g%cJ)lLNiQ$`N-wAON^}d&E)=_G{b^GSVew?6;ADBINY?|%MWzXvwe9DFUVThHY)^kSCTzjjS=v1qJ$ z4!*RGvB%GA=IWj6>Hkt4SI*knz{SvJ6PI6P@&t~Z>gp3eF#7m5MvlM0*t4<>mK4&z zwy_5}U-1h@@4QL-b~8_6qLEAaJ_zitZR+BZQu)BRt}r#z*EtzqcC{F7_M6yLgDR_^ zKKCE4WS)0-=%?FD{S*UNM9pY2XYT4T6YjgP+YjA?HLm$S``X>pin}ryqLU-#8eZ{%V`=J6uAbdfuv^L8r)H#2edU+qznQl$ zsY)=q^S5)a*|Ifj{I_3)o@>>uD5lq{pYy9;T=U(SbEBV6Jw5o#h#DoU!y8{HxZ?Bn z*RJbYH2aJBn>$Z@?}4dBp+{mzcMfiObY7*0uUj~;M&97NKi%EFXxLX(mM)J!d1jrX zuI&EWsDxmn@w48ka^cm#w0Jx`a>Dz^6y5gLvr%bWPEEYL*~VRoW4jdHb<2dt-=sc0bkXu@cPC%n zDL85Dt7(-^eJJ*v{&U{wc2C=)bMrqqq0{RAw_Gv(oyw!$Z5bT;X2$ZxH|^`VrsoA; zT&PmJ49+TrdC^uWtdhwYEBjG;L_|cP` z?1@t@PRmJ~+|fx2ww#)l8xR;{Al<;|EOS4Lb# zd5+#`&O#NhJ9~V&L}PN@^PxA-onIaIE`zdcNz-<1=Pok*7F*5%DN z=DWk>`(0TkA9h1GpLaj$(Z-xbE9MKtAK`v-$)Cwxovp`}fo;=Blv5d~*D*aI==*7rn>9d;U!Bzqo&Y*yc~vdj$Kp z@3=pcw?ZNgyMND|ewh4+*uUi*+O}i6j-A_OPjRvB#HYUQKQ@b%4 zqo<8?UihW8d>wwsCfDat_@+L~{nF;(vvTtJ$cJyu62353_@+Yhoxb?%bDxj#0{>Y0 zJM`DjAM(ABVtRr%>O}lcziN0gpae z{XKc)`4Y(=_UH#wU*ySiHuZTP{}I&Zd-U=>o#bEU(Wg*f;L(q!ew9Z*mimxKFW+@a z{$!7SJoN#OUY_3({{)ZzLh2Je`f1cBdGyn%4|?=7sZaIj<$HdaceqDChx#m!em3=) z9{mF9z5L*-MmK-1$A2O9g`VxWi272GelhjyJo;;?U**xu^DeTk5|94+3i8}oL7o-V zZ}H?=Lw&JFe;f6&p7pMz-dq1Y)O+h+P5mZM{s*ZKrkOhx>*S4y_9(incbUik3F-?x z`t{TovCgnuyrG?UoXL~r@qZRJ$)D@dzd(K1qkozDOppFm>hnB$d4@#t=X><;KrhF= zL_YkL1X(X9=tzx%s^it5a}%gm=J{7aL0<(w{`JLNY4 z^*$_4Tf1jW+YKA4A5-m}{cnE}w^>ec&aWV132rvtR2$F#V%N9<8(};){HL%j#6`ul zTH=N0!IAJI+;lw~y5Z=95ce_quXXS|CgeBqu+vxY%}0(T_}z-#HWz&yV&yrf1Gph7 z&#LW%?~RB%4ux%pUk7Z+#j@ei7Q#OkzNN@fj9fF2yA6E00xLoP7IIuy&v8=Yf%32- z+S91}BgB0r^JBrSkbe?kAmr~*$8zLek8v-=Zvwu8 zF4r!(;G{Zq#hCwN=x%~;A8Ou<*d36EqLy*UeIeGg8~6_F7o)a8u)T(H71ZAmy%l;q z>Us-t-@$$vY->=%UevM_`PQJ`PoUd@o&fy})Km|gY=!UZ(8=?nm5_5JYFPlh5&Cra zYzJpoBllg%dmL){4z>*V&Oq$9(EWm3@*9n1;OBA7RSUg7Z12Y*Cv@u&TL*nI@|=vd zeuSLKz3=?a?uYy`=D7iW zUxUBnku!j~#=+Jf^PGrve+B(CGo1y-r z(a%6V@1ZY2Oflx%in)u>lac#Q_`ig?M!>!hw$>P50$VX^T#MY9sQCbTXZUSHZPLC( zo;#qM3eI!Tdtlxt;QJuzy$tg4urC1KjXGXJ?HiEue5`u~^xY9J&xvlse0RcUHRg$j z{yo&W6Z0=a-Rq(M1hE%Ez8(JQkRQQ(zaal&%Pw%0|FMuDzcQNt|!?*_greKb*P>2pemCSzSoe0sCL{kM%+~|GI<`#=@^-@9 z>#_YlM!vT2ZwuQ(tU=lbm@^$Q)1c2lZw*}lF?rChMP1T<15Z#nyAdx<{%_+o$X6YG z8|J1yZGmh9)N(Y&o3WM;5I-3GQOvUoI%(CgmQl!mBI2H;ZU*$%fmeC9 z@pRZuK>fS1_8io@75il^toc6J*I=GKsBb%pDn(6g5Z@m5OOR_YY}JA9Vy=rYXARUS z?Na1u1E1sI+X^{fME;j$QE1OYA3!~$k+UOoPl1O=kRuklxrmE}|FP&@V4Hwm6}cN= zeH}3OB-C^?>Ua& z7xG+&@iNr40J(M`|5nt05$2UP1U}WUw$m`zOz=Ar{x3r(?N-c@j(!*PcYvRXumv$s zb=2|$=9-UnWy9VWIrVoVr=Y&s@EZbr0Wo91!9`f}Pnb{skLydA`%OSJ(WvuYgEr{nc3OBINFa`Fmr$1^MNg{(jW-8Mr(bzO|6&O4zrd z-XYj7Yf%3?uuIECz8uWg4)*s^%R1oY(7%Q{Qo%t}^zV@~5%bIQ`j^6X6mm?${L!d8 z7X4k!-wihTt<_fe-vIy1Vc(9JEy(#W@~1#I7V;O6KS7;U5%)aCbKx)F4M&L$wJbwj zy|MPoFm8@*(-3vcfo~CNej0xIcc)&5{#f|FhJGyUbC9b#;@TniD2%^Cog?6*?Q-P% z3jB3|?nKNfZ6^4rh1%|gd>v%@KjZqq=S<9dJ^C=L^EA{Y|A+a>h`$wlwg*0pwKT;% z^4qIK)YTd5zX@}nfY|GiZzV7bwPv8UeE7V9xOi}LBeug0=+7Z`8TtzJSI}Qa{|+&o zG5=eLD}me%b99HU8s;lTecz)$iCXr;))d?ZkS`AF9u0Xo&1st49v8UB+nXC>HLBllI9Zw~Aa!S*u7{gL-m z^u@3Z!n%f{KZ3kJLw6PCmsT6|wLlH&@Hq|G4r`L%*ldJP7vvucyWC5VHW>VD1aB9^ zuQ~MRBH!Jpu_yRihVixF_5f=CTDS$TCnLv2$n`dSu0dVWK8N2r%ry=`c_0k9BuPy-~ny%<%>0EWtXzLydzmS0m)S3p#1vqOXDe7udtl z)q?E~%<&X-F^H9RDR3k5Hpjek5dRJ48U!9T2p90b6uz_2XQO|Ly0@T?t1!L>y$Eq% zK)w;qUPCH@8{sAI&$2Hb!ht@K0jf7`kRUC;VUf;^<~5F2GrUTH4MaD zbz$>koug4#7;)1fuK`c}k@G^}8q{2Zm}K;0!HG0KYN~{O0p{O~xDe*5kGN&1>j~st z1)Pd~@+ZVBLfsET&cHU_g&4Vq^aN!2?c1}!=g@D(Je!g0e#AbG`Le)EQ{-!e`D(#$ zH0m9N@o(g_F|aTCNr<}=^W%XHU$a-Ep?Op&FN*Q6tnTcpbRCwrD;A2MWBtpki&IQB zWEVUYT42=;J`C>k8%Z?vk}w|Z-{W^~_m%j*^*eV|fbaZ+RWx%T@f> z)QNtnsvqMwtNOpH9eqWdjQ-nlSKKW{&v%=RQVx|Mj zkMh+z*N>lpT^XKW`Q#`P|mM^wB>N?f$liH*mSl-5W^lQG=*fe*=_*caG z9*prXj`dw#**`zlx4g1{Z{@Nn;oH<#tARho>EO?HCL_c zh74a-6XTE7{I}Kg?XUig5B`RL1It_b8aL{+BFa5F{OI#z^qbF*x9itYGA2#3Klz89 zdacjh$mU<({N*I-V%7BAD_>6 z_~dm}^wYi1u%kLTetf`P;`3kcbH0?F0WOWr z96$P;#XkSCC}*Y5zbFd7J(s_w7Ewy;)^P9dpC9F1>+^4j!VLlc!%@!DK0iKHz3FaN zyd^P>gmg8TWo+IB_SG_A8L$le-(?`a(S7dooTar4hHD!vAO`9fIkB$6V14=#od%SN z!G=b5jxtzG%pt{{=0E1nhf7Mgd1b20AdREq%T1hI@=No|Z_|#;U$>1WZlfNTqi*xc z+iAz8vfHwW-%&4@rqZ@tVdn2+M8_L9p8DTB`2ts(I9#i_t!kc;aT)ElDa3}dy$~O=-&rOtXA!?m>Q@)QV+f`y7qx>>aa!Y@b@_HgZdb#=+D8EG1d0(OY zVg%1(E2jQUqOR+0%3Fw<=L5 z`XSTq_EYbpUTT+IJ?}C5XOzd^PdSz-#{-$SF69Ou z|LsQh%Kd=e2?!0z@M%=cZ_ z2!DzBh1)f9UYYxD^3#p}qLUt^+>@yLLtn~g5GA+tGbx8W`j6i-yq!h8u6GFKVIKbx zl*f7e&!e0|)a{#2c`Q-+8BaMfkIa1~d6*dCFENiUFm+C$UVLSa3n}M#{4b__2~q2r zNqIIAw@O@omQcQqs64#5%FKH`^~&dslvfb-__MMC{XNvLCd&RSxo%%+@;^qs*7*qE zFHcdg$ED{ed-YW}n>^Q$KiS`;ZKD6nMBMgq_aE2zCtjj?{?+rbSAK(eai7I)?^2d} zrB`LV+P8W9cSh7D2_j`VCvB%)=Z}=dUP`;JH&Pb+ZrbI%BrQ^Q&v~p*uM2!0xgllQ zF47`p*+**9uGbGuC`)eHzK3h==&$@l$}(q5+O@t&Sz=C&m`~>N$|usU*I`~+V*Z_N zAm`WZ$927wx+KNLlv5Wwh)1y>bEV;w#N7-|ew`FxE z!}UKZ_q#PS%fZ)Cx0>VDIO0^|CB*r}#l#iFyNGLuj}f0IzD;a;kICPb7<;dgJ5%mM z970T_J(cn$M6LK5%C{5m^Vro-F_rlWh$Y0t`%E2K#3EwCYNJmjt|JE4P){r(#@^37 z#8t!+Vtk>oClND=tB5<)zSj7KiABWt2aG;Q%pw*Li;1BJjo&Jw^AO{Rxx{tEQeyJM z#%~#M3o-r?qaRKzB$g5r9yRuSV(dEl6CdJsDWF_Tc^5JEG2@>~)a|vYui0P2)$e!r z+rnA~!!ZU^8yQr8C)xN1YZ!fLO@r}%gMrHB{gdclT#foTgCY7SRyA^vvd$CgXXXj8 zt}y3GtYrKHM=>7*^5|c{x{BkCy@>uLp1O+YA7))8oX4SGK@}5U%6P3S_6$>3D%TMt zUs>cUL`)>c6HB8_zG9;03o>63^QE%xfX=J+lb<4D0Ws|1Ep?Eouk<`KU)Cstfq@27 z&oZdiy2o+|EzP2zJ#*Qvm<2cDmS-+d4?EN z|G-(sKSckc6k|^f8B82j-hVj#i&$48*Iz*Y@NnawPg&<#cLV3?xX#`GvlQDHIYcZ? zFtWxKGp>OCMZ_@u9b!Cj*$HNzaJG3L76*(ROU$QU{fa2(H!*&ycXD_fpkC|ArJU8; z+z-nq28rsY`BYX+9A@Ga3)&dDlo&qF$m(Cf`4VXlDRRCd;^FeFW1i9klRut$QvYNg z$Py)%K2t1A2dZD~V5mSHPl9~MJEC{vaYkYx}I1A-1)2y3UbO;afC z*d+u-dJzagL`TFB+!z#M(N`UPHE-NU#TZ_mRNmw_p$<)iClo~XZ;FH$~_e-Y-a z^2rM2qX$U8A~ESl40=%O@1(rWbFDu``4s*>Oj_l8E0oVtK8Jq+X07sh%G={oqFH|mw%$PrvP(M{ffG7VK2cv)OPs9x5uIVK$%C$bEKX$ zRQ;973j0UCLfkxYv&73=aWkYV#q~NxAG^JE2T6O2l=se+c56G8cHAb`g(I$)xaK{y zdF6Rh;%UCdd!BJsea1=ac*GAW*Y7Xn>v(9s#(Tz!_p}u+ zW5pY_;%UCd`>hr4S5~~D74LB?p5|-3$ENRZpFLNikGzFz151R`5NzfE8aRQUe=1Y z+KQ+78ZT|dTVcg3S@D)z@ibrKEwkcXWyOmhR<7TbRy@tuc$Zo6TC8{(E8h85Jk8g5 zZ?fW@ZN)2E@tUo8ny>Lrx8j{@#fu$Y-rtj~c$%;APPF1RTJd}<-Z54@&DVGftawLS z@d{SF!>xFlukjkl@8x_W&hb#s=kz#MByReRa{iKmdVZ(pg=y<}8hwrEm4B0zD?+U= zi@$x|l%!ngJkFQSpZdHhhF#wW74X;iMdE8b?N5&QnF}Ru4(j=s@_D7e}{wpEnRIkDvG9IzFN_@4Kuy1&`*tLII z+L7DslXCricSt%4V=xI*Fm2g2?f`LP#PeZfw@-!jWGLtDA?fTqh&{5Wq>I?KAG!BQ z|LpzKpD+DNy-wO+gh{C5o9dDB+Ri-XG8aj?EYy5u-L}6B+r4qFuvjC^lP-}ikZ!<# zlysDIk#rO3ando;CDNnB8zQ}t{8sE)(s9x`(n->zq}xdsNvBAUlkOy4BAq6^fpmhj z>QIUP0?|JXqp%ngyAM;)j-&moRG;do`l)WJm-bWpr~T6Y*!8_AO@DR##_4w+yXrbX z+Agp2K*z(*k5H}_>O3lt9)dc)cKOsM(Xss}!dB8L(oLjeumMJ)#?$>M)?2t=dtVltMQB2<3~&X)LyD!kK8NmSAXrFwmW{e?9X`^gX&k*`Kk8z ziNEbPuJf7vcm=-*?M{*JSMY1VFH3&Df}i%QNPenk>h`q~&nG`y!7q(pp8R43zi#}z zd!)W7R9$pjV(35m&hqg}U?1o#x3^+%y}8`pj(x*AvFrHM9xLhShol`oEL`&Wa2<}{ zEA}MJy)FGgnC3!>@F?q_e%0*Yy38Zr27t?T2OddU>v@vXWo=IQj(}U@x@m zi_-5L{f&ND+NJd<)h|Z7llY~qhN|9{*~`*?WhK8@qqILydq-g_cDueN+Ml64-hI-3 ztw*VT`K;u}@U!DpYL~`QR`N?*9j`P_8T3$A^0VXF^H!_Vegw}o4qui0v_54eztQ8_ zA7BCf$Dt25z%+gd*wiHDBhc73?L;uKFjmzfa5jN<+<0k)OjJ`Gfdrekb`!>^UnxLw*T+@{dwp`;mIT9G~p| z`IcSlYdC@N*E<bM2s7Kj^3Q~oW&G;!mUw{y~O#zo%^sC>vf_HgEulk<_LhhrSuW+W{?u`Ew_(Rm=UIZdX>`aD zH+i%8$MMhKK6PBbOYBK2ZbswMz6|u3uW9^a^w*vb$y+6^Z^f-6ZiMzGX>XMIki|b) zVLtfmZ#gS&intl#7Kj^vo3x{VfAp@Yb;uF7XvN(?+#LNcz}!s|$GcjX@0>brk+>23 z^!UGl^%4P3F6O{2!uR)4L>Jk26K=Mat=X*+4q?ptLvHCycyX?i-83 zBuv4=9&)}^z&}g*9BGZO^_9p^lb^dw;-}ur{cLxWhNbsNI)YykrePkx0*t&*{C%kP zkJG;x^=AG_^{ejrFUa|TUN6yhrB9dfi4KY0aTtMGKJ`T@uh&I%zWCVHFHbuDdWoy` zY^0v-BT`Qu`Y`f)u}A+~n0`{|!yMFjIpP&5?@=!PsFYK`A^hy)tLAGziVsWw)Sfv* z+8_TPiI;`i&(e3qU$3udxjf}Ezm{@2XkYh;@ckKkJUn!Z{zl5jVFYS>^WT^HwLL}B z+8(ugKcJn&ReRjBYx~>r^Pi&MFp2&;PASH#+Bo^dixVfMtPsz8TI#Jd?)JRWcI)_R z`!rpxeM#C^pgkq1cCRt z+Q~TReiWyi&V!T{CvwB|+MTt^bysP(%!c3@ZS1$vUFA4kg3$&48D0;L!E~dfv#E%TZAs>vR-7qv#pM zF9r)Am3mXulYw~{$1e#}P>;(c=CvM|)E@nb>~DJfYkH&Tp2S{vuB3IpN@F+8H}_cT zeGYVI0x`;^n?>IYOhG-KdI`y|c0AQ~yC9?_N{WA(=3;_%59uxIq#?C?Tjp(UOVGfxm=}k)^XXl z$_-7kT;3{|s8lX0GeF0|+gRSe-X+uQpH;4Xn&o_}+|V@3<*jnw(&@F+`=9duWh<4l z#vyK%8<=J}-zwKsshl+qd8=Hp()d~J^nO;}ze1(@D5v|s&-xYNduT z#|Yo6EHS?dFb6X*4gE%GhsGTuZiMe`W*DzL`evaIQ!oyru(VO)>iL1seyG>cw7%p; z^yA$!E;;yeud8XjS?aa#-zZ|&&%f0_`g2(?^mBH#r?Bhi)@sjUAGhugDPk{nO8?Y9 z`k2J`Z!Wi|uou^fUG*74pVG(C=aWLcKP2`&>^~4j9);W&68R5FXShEkLt5_-i4!-; z{UNdMh<{2O097Z;{G$6SD*0tDmVQNH0uDgCz9RjO_e*<<|0UG>Ae8DCAwM@DeyvtR zbv!Mzw?Xe)fR+4`tm~Ysm|8?R)4KeSt(xar7{ljON1r#uOpo$Jp?n@+hHr^W6q2e6QvI@Dll0>hnJ#_9**zO7HL5PL8kHR|z9K zk|saN{+zy2-q#gL$8~>a|IS<{`H^juc3<`;4@w$bM_r zr+)FzieE1G%Cz5}$CbuO=cTfe-;3f^*l$%A-7oCpmyUzhr>x{RdWDQb6c*5b9Qtqr zOyie;O}uZ7K)WAl#x43~8He~c%g00ep?>i%Nq+QUp|)SCeje*U%51X+1y4lGgi})Skz#@8{KCtl;kzrCz;mpzmkn*v+_@YrR^JUiVE{@B6h}>Lr%* ztCVZC>eGH@DW}&H)Lz7{*C*5-{gw1r`=fT>vTJ{e*emJKUZGv_UrRmu{!{D8V%O^m zCa!tuc*P%(b=U6`#vT-U9~0W||1#8{#6LgHays7W6XkQNA}s0qv1z_<%~O8_|J+BV zoimN2;}khe+Eaol+LMMa_kFC+ljz}6kM|m3g!o(QeXNden(@rT*xpiK0p_60g5dWs zxL%Rd{-W#FZeK6;6tv%r+t$`wuh*sNN0NGCBQj5-zhizQfL^D|;P2yK_`CS|&z1Y@ z{*}YOsPRchkCpeA$>W6a-G!-n!s1+^{r3s=r4A?4ytw^ zyS?5QExYOvA0d7P9V)H&S<2~kL#^NYoy61YmrQd{$18Qd%)cbpd6E}MI?weU`}&m6 zb>1lcnQ4~O@s6G>>rV#G^txJ(`eR%-E1W0oooO5$r&uHF@bN;Q>sJ~0a<8-LJc$wC zYm$1l_H{NL-wfkfgwcJazAUuY`!v^?3-mXFo?E+p-PBW}o;dYvZN2q#fs9_K)p{~A zPtxxZ>VBY~2juY2;-CJg_+=j~_t*WafWN2v59#DE<$emkBrJSISp1|=uRCfxYTIPJ zFA*oUmEuN;>#<))l@;cNt{ZXI4f}eekKMkGn8!Y_Li(X`yir+y>aG>L_P6zFNykc} zM-uAw!Xn=*^PiFY)L$U!DAyIT|BIel9!Bu<$uB~!KTZ8U{#mHkGt$H_5GPOlY0^3J zd*XD$`@hopwEV%Gi0B|et@J)2MROKiQWH)FtelBbDJcs z*GnVMOFBMR^7H!%wf-#iN2xarV{!3|5I=dcq|>Jg3)Jty(#~R!)(YcX&q=-@_2+8H zf2~mGh5w|?3wwU$vFr6b_4j@+{(9Y0?Q!gS9Zu~&_7}}l?0P*x{k^9ozFv1xdmOuc z9YE)K;f>O-{0iYKK7RV3Ck9e=(s7+2*D*a<$(KXg1TvsX*Im6iPBtEBw}+B**0vD@{H(*EeR(w@{xq1K~RzdU{( z{j}p%YL~`QR`i?Zc#gjyf+#DEr}=&L$uHe6Cfm&4+7G>sRMF3>x1wK~^&A$_zm{}{ z^Z@j+x5C7mrF<0H{qQ(`B-hG#71ou{C+&y&W!6Z3rUO5#AL?Z&7b8FOA@S3B zrR~)9RMSe`FO-%1qHCo6Ioi7sCa~M}C3K#=pLX9X)OwWaSHdrgpB=AKyEKlnqMx-t zRvIVWua%Yj?ES(%E~&oS58W>+`dRx$CBKbpWgH?fkN%@D4SQhs6B7lRnI2cU3@^|L?0At zep35~Jqh)F{jZ5@u5Fl2*KfU^t;dJi_I*K5%Xx{G(|Mugblz#XT5S;2xR%))XMa{! z@~g87YP&77H%dHZCBNG1WFGk)!VNG6Tb205pxq8V4#mH~IDAp4{nz=TetG<|_-Q+p z>gVH^wBl)hRc}ozRYzqdKf50~o*GA~?NV0qYwZ*r3+Obi`oaxL{CxPLb})ZS^gH*Z zsrA(LAx3`k%i^c)RH|PZKMz0M9~zj~roU#1)ctE40;pfy^3(lH{bJWk|68GTd)&l+ z=6{EI@?D|M52eo6JbrQfGQ=II5MRe7gMZ|EQ^!}o0)9#Sblu7RLH2X|I$;jGes4wn zhbs6NvFrC^)ZhE#)bZmL?0yA%*0Sq3<*}RbG;5RgL)WQFpVt*%V!81uOw|VJ2_KuhDOXN-v#!eK*PZHYS_b9Ue z`S_QnSx)zZ_|9@2v6#p1$=S<@?5T{6-9C6ayeJ;H2lY*JOBprFR zFcX6(3H>wSxU?hnEc!hs%;GPqdtRJ+y`v?+NWH17q@ytXAaNcNCjUcN_^il12tdwljO7VJ>=v+gc-gklZ7w$`#idz`o#C2lX|xH_jz=G z$!R~EM7P}U=-;R?22}@rPNb%l`hCcmQp>lqPNZo^26{Z-@ufaj(kE__@yRp(TU*aw z>haibO4PHp=ZAjpGD|&C_LKNB+24}wLe+JMcIEL;;-7mj`%Mq~4Fz<)j??}a`$_I? z<$mMDP2rcS;HT@guX^B@qCM%KOWf>Z!t^(VnQsY`Z9?r&;s!a6WQmu5nekG@i!$Hh z)7%d_DW~mH&UF6I)L)Npk4`$iZRz~9X!+Uarv>hx9*6q=MEj%fyK+~{yoz2U)b|le z^(*3+!Y_6U$A4(Y*Y_b={39!-j<0?N{F3c@{zY^cRUZ29Q=g;b&#jfpEdr|%M{WwCmqfg{u)?cWfH+kO?U5eip#vc(z_?##A zpOV)5(_^2Lw0_>=k+1isN4_WdojTA^b+XJ}H}9X7mHc8|GT!-Hg`=<)yIr48zms32 z{a+SpJxcW};urmj_@%9e>UdgaFGKs4mHbMy(}x>i-EGnzyS`r9pGR+RfPPr@sbBo_ zLMRd==0T_qv zFou6E9ESyH>yp!XmzVL#e!YA?X+P92_ch5+enY73SE^r$c-}X~PjwoizHChP?;=dG z|EBkn`^sbUgxNhI`6c#Wy+7S&zD<0dsrx_or)Tz&^7j6w>y)-jsr#9-l3(NrdwH{>=Kac%Cho8&tTawKFO?Pj?0D93Nwc*dCH8N z>gTZzM7||{dOv#fFLHjM=@e;gmY$cC*q>wUr+R$X`$Jcc4Skq_S(t;m{^UvP`cojS-;XJh*7KgonCPR|-P9h%uFqT1 z^V>Lf)BdTh*V)%^G+wGgJ!$OvJQ(%QR`4%Yut)zkbwA>kUHg&3Ua23It~>fKv0QJJ za+R(-=Bt#ebluS#7d-~JzNfmzuAGW)a{AmEZEx&Zsb8OmW8#{Z&f_A_8%b}F<8TRjpOCcue3R(Aq`h(ca?>oQ z&)t*SH~&A=_mwmC*P3*HitZ}cFY|Dw&xPrx|52X%lKP0~G}Aa);^c{wAx>&-e|Y^e z2@AJKI-kM*L814MF!MQhmC#=zOt%SB>W>fu)LW$9ytaQ2@z3v0`Mrhl{fToR=|hFZ zBZNMFs&j$(-u=ucjgP}9`H?=!PeU!Q`&({X8K+#WFwJvmeE4#opQHPGk@&^!q@Jzy z{2c9%?spmbS=9bMDd*Qdw69;hITR+;QUO8J{fU zzqR#@uwE9ar$9Yhdw%Hi%6xsk6Z1GaEb~70Q=#@>pHr5_KZbu{JMl~IQ0}kmew6k{ zcurIPkE|yIPSf8we(?%^y6&e`5B%b^$A7)lUuYKQ|HS_Jj4=CXdA)h+^@*2#nejFf z&ttwtp;uu)(DT#ib8`IB<5^16_sBd}dlvf!%kDid<<+j^mB%l#(|^hHNT9c~q~oNM zYNy~v%6ZshFkdg_vZQlR+n4vgDC_#`%iHbE61#m~631@0JJrkaH!t-Sq4!luYyUd& zOJYyMm%E>5h#MnbT;qR3>d$-)9kA;-=IM{>Q6!zZw_K0tY|+EErz+U973@XJuDWPk zO)GVsw5j=7+F3eIe)ql5C@dXIn%{#jTE7dQ)^ewbU+i_l{CUE7LYTA4byLo3rW`C> zM0wJA%BilYIijD=8@1;xyY_47{i1*RVu|a+RI8-3q$8xYT#<4q@-xaeOF0k!9CmF- zeD2iyfsftZ5AxWxKU#nL2c+Gl7o@(-CSl=u>c`Q?&%-YYU+#X;OWY#$m0)C!tT#pK zNkYAS@k5<+!j@_JV^;bzR(g>1PW0!;q<0{l{poh$Upta++NLi2YcJBB_ns8~wGZhO z+#7Bre_zu2xremU^BPv)AFf+}ePPooE#n0(FSfE>ip1X16PYq-8?@! zb%3Px_u2IOw&~?!*XtbVN94S=j^`)n_hX}P6FvOnDmq=RgC(!3@>T@FX z_qp0Bmm^-9>nTlbQoj8)!c3g_`0Mk%^*QMJ`=0u{Zs{KJ*XL^M@4%I~uTg&oF1c9z z^gO%xxTN*D;0eB`8|QcE^m%0s?-9QY-=nKNkT`sgx~Wytu_Z#EIGx1N=djjYCHeZh zf~EILdORvjA0xkKnW5k9gQ?AygJ$M5p#^TQkTK5f32uixL&-^WSbB<1vX&!YUE zTD%~3oj3ZsY+h09+5I8otIt18X}_S(Kiz*aoNqS~e~58ym@n}%cMJ7>s(zmD@!Yu1 zizUDFdZAuF9KB1@3F_7Rn)H0O3A^6UQ#e`tTe%Nkp9`z^`9#@IHZcG6`LqqbluI+- zh2tfy&qdGh`AaYT(dXR7x&KO^x2Mmoi!+{je}+CUu1LPP&uOkd>vf-o8^y1-U07s) z(C6+B@HxW(pDU)w*Wc6B=h|hsk4lfj-7UmhAnaxQ^m(%-t^-F|Cu;c~i#~rhMgMEj zv6tTo&A`-eB(9&7{YvL~T_g44r_b?AalWqi5e>0E4iLY<^}rH(>hB%Ke=YI!d427C z-k{Iz+kk!>h!bP~XlEU4zlip5|A}7r(CwTJW`WGi(pX=wd4&@e! z|3>CZWXhG|P^EqXd^Xn}6`W*0f%5`%b>E``y5&fdHqr`r{@m#4l zMY{{ks{zKb`%d!p`{dkTsOQ&N{8RYneBo_W7MpeJ((b{^y}jyY=@(#&w?Ydn>Vnq`nBh zbEnT`i64kPDc`%TW1Y_~6TAKn?kLB*Zgh!q9x}>)73aRsPMv4l%X!$u=Vuv-r_bZo z=Q`;3?(>YthAZ*Y=eux!X`cS+?*rE|Z}d9%M%tslBiwnd#2KYM9=g{u{(3)Xob#^q z>%_lR``Ik%jXJ-`A4rK^f4?_zq@*XV<1+6WSm(#}IK?=P#>GF%IO}!q9Ph8j_m%u^ ztrylYo_ZZkuagg4CI0&R$OX#Ru`b1_w~07W?(fs<=|1~!k@KAR84^!_m$*nfqa085 z_f+|lDy8g5O6{$ymS9zQ`dVlc{?ai}aCw2efxxnolzhcDE&kZ8Xiv;UJJ}T=( z^jD%oFXt6{{l5KJu}?fdg5#xL2his$>+_sajGx}mt@owtbMEzXm5la}b|)Cm2=lvJ z`@{G)F%R`Q1#zyc>GMFwiI-yh$M=(VH(evl(5{Wd)!!vfG9R;ll>NW+O7X8*x6mM@U+qL#)5+ z&`Lk*xL)aVK01nBpVy?%netR0ou!;HVzf8;c1agG&(Pn4&XV8DIO%gu zQXB^h>!qANe_NkR?a{7`>i?MNojyX2L;AZCMSd4spZ6T0-D!TuV&hE`e}Fjpyl;J8 zSvTi_MShP$?}JZh9FBYKmr9%@pTA9fK7n6`^?Ty;JHBTSJz2^{Sx@wLx{Dkyhg4^% z&n3^CDE;(V_v4InyUuTpUm30k6!^WbZpJ^!ylSA|`n&8|=3gi6Dkh|!*2|=w-HhKx z)~O=pb5Nh>9p}8X7^Q#uxiioI*5|qD?_qQ^U-kFYa*V(J9!RgwgS#Z2ey*8g{PN77 z6#KpYj;+5;+P@K9+K)I{R>bHF;dx@xYLhSQkJ#2){um!fk4%h{I zU?1#*CPBk5+?0^48*EPYo#=jkEc2m9e59EKxs48|8qef}A8 zepG+9w5Jg^!xq>EJ75>=fqk$a4#HtL0>@y@8|Xi*htU@KJhfTV?~>8|;8xum|?RemDq+VdS+^-x%qdq|{q{g85In5jMjX*akab7wmz3upbV> zVK@TEV9j~x59?tgY=$kc4R*jT*aQ1uKOBU^a0HIQn)9h2*26~F3|nAnOxBwY(p|6z z_Q8HQ2#4Va9D_9%P(Q4Pjj$QEz&6+cV>~Cchjbt8hl6k!j=(Wkb0PJ^de{h?VGC@7 z9k2`bz&_Xy2jMUrfn%`dBI<|run{)H*!;c1<5wH$4%h{IU?1#6V)fo-q@cEKLl2m9e59EKxs4Axvq{jeT3!e-b4y&a{$9i+Qp z5A1{ea1ai|5jX~GE~9=}4;x`B#rTtMgB`F7_P{>a4+r5e9D!r7=5nb&c|G%wbR%qr zEwBxCz%JMW`(QsDgu`$Ij=`EM=s&E7jWD;nv@6YVxD9&;?1DY85B9@BI1ESN7_7OH z`eCL=&a)axH^Ua#20LIE?16o-9}dD{I0DCD%|hyj^{^2(!xq>EJ75>=fqk$a4#HtL z0>@xYiuz$aY=njOy~F*vg>)P2fL*W$_Q8HQ2#4Va9D_BBs2|qDM%WBnU>od!T`+ox z?3aC{`{5uQh9htc)?7vXupTzTX4nGTpr4U>(nY!l_Q8HQ2#4Va9D_BBsUOzEM%WBn zU>od!(Zlx%$ESyMAMA&Na2Q4+qSF}Ze1jav@~kuUOQb!Guo2J#2){um!fk4%h{IU?1#HHU>D4uC-0N{NcY1*I1ESN7_7OL{=<6M2%BLGY=a%J z3--Xs4WdUs=|NcNm*+2ykRF3IE2$sW!$#N)qvy&x*+#kpcEKLl2m9e5Obv?8Bc#V* z%_{1L^{^2(!xq>EJ75>=fqk$a=3+9xhe?mXF<6tPepnA1VKZ!jZLkA&!5-KL`{5uQ zhOsMU9*vPM@x1qWZWB5P5jMjX*akab7wmyKo}1H8dJqo75g6e*Z_PUDhxIVaeP+$1TVNaPfL*W$_Q8HQ z2#4VaOnptpGsgSwc^%S@de{h?VGC@79k2`bz&_Xy2jMUrfn%`dI{FXmVI%Yoko~uX zbQ|n|U9boC!G1Uhhv5hugEgJh59?tgY=$kc4R*jT*aQ1uKOBU)PqO}!j`4d3HP=%= ztcQ)T8MeSS*a35IlJ%sAbRX=8gK!v*z%f|!7V3xfun{)H7T5+mU>EFxeXt)6!eKZ9 z$6(D{sUOzEMwom^bZa5q20LIE?16o-9}dD{I0DCD%?;EK>tQ2ohAprScEB#!1N&e< z9E8I#|0C(o80ng~Q9rDQjj$QEz&6+cyI{IO-Us!O?uUbL7>>X(SaT!w!+O{Vn_&xV zgB`F7_P{>a4+r5e9D!r7WEFxeXt)6!eKZ9$6$?5 z{jeT3!e-b4+h7Omf<3Sg_QOFq3`gJ?thtH$VLfbw&9DWw!4B93dte{zhl6k!j=(Wk z^LFZo^)OzNb)}hf3v7cOunYFUKG+Wj;V>M5W3c9C>WB5P5jMjX*akab7wmz3upbV> zVK@TEV9hPm59?tgY=))J%6{8Mx&wB>9@q!_;UFA_BXA7X+)Dkh9yY>e*aGwGWB5P5jMjXn7y(tTn{=(cR_B0@;vSj(EIgM+sDH!y-z^zcPMb*g5E#h+avdPeg$rX z6LI+?%KfA<7>5_aC2%dg1>OxGfS-d8!yiK}_XKIX{wHYHD0~_|1OE#D4xfj!h&LB* z2X}0a)~O2X-uo2g%tcF(k2 z>Z)a-BuZ~zRj53YTBpnM(lbv*eKet(*L!f%;@A+u@UzPg&g4)MrUDxrm+v{(X{8UL; z`jgNjZTnZ%CuW!U*G#KE4ZpPXDbjzMz18*66WD)ESteSg`Xtb!()@}4kLWes`J=zv zqZJMC{kH$>`&s%|Tb@V7Y3^tCbLs!D>(c#eOBWq@n0<`>?Qg=&m@o@1cdx2G|Hsy! z4ZkVZN59{w{hp~lTF%iaFcSrIxA8~h{h5~4bziCWSBkCgmHk1lR}OqYu8S*+q?P`? zlCQksLz3=>YQLLw4%U89{2E{qewX}C(xaruwcLlLTpetHO)vqol+VLf>}l8yd*Oe; zJRGH5gnDDJ6+VXF)9^XC!+rFh^uDBzfG5Fo;N@@yya84k-?|gZ$EW74Qr~3%`9b0c z46488S4$he+1q$?%x0dYW#;9AU^_b4jtRD7gYCFrYYevIgRLppP6#%AjW_*kx37B| z`kB5Q`+m_?pBI)Ota{5Fy(-ui2iuZhTN-R_!8YCUrv<*R z3%1jP?Tlc1eXunL+tzMRrFw#@rhN7CJ#}3_zJYGa?~qpN{8j##{GUR#|BUpn;3zD? zXW=%iPus)Y;GS?FcmO;Y9tvLrkAla;IBbUJz$Cl~UJ4h%Yv3Aq1H2X94)28Tfg1mP zr0<0vg7?D*;Y09~aLU06j2o-%pYvtqP~A07wY2e@ST|w|jy~qt;~I}|n!GYdq=Em> z^|w!R|NmZB`TqZH(i8jt5l6nJvvqSv7hSb@$C;|!`Wdfpp2|mZRM)0cWWChS zQ;K{qU(?-II%cIcjDm5*BK z9M37xc*RkPr{xn?zW-!-eiP4c)AHI5EkDll0w(gU^Z?J#(ERA{%i|}kd^^6@qx5+m zipEp_S>CMK+sv6;vu*8m+rMgu9e3I}vdgZ!?Y_snJ?r+`d!K#x+y8**fd?IY$gArQ zZ8+@k*Bo)={G&Ecl@nik(#fZs8kc!-X5y@~-*C>kZ+uhoyz?)(@S>KBTQ9lvvdgcy za$!nl*s}KJS6{Q@+Lf!)Z(hA-?YfTZI_GDz zQuC})^ZZfsjM4pqZU109AlRb8c3`j_6l@0v+abaB>R_u6wnKxhA=nNJw!?$X95c;I zV~$tmSb9{jP50P$V&MDQU^7obHBWmuCD=|4ws^3e7HqEzHv71EW?)MM+gZVOcCfu6 z*v<*IbA#=T!S<$LO9tC{!FGPIT@Y*+2HQo!))H(N2b(#*UlMGW2HR!9c6qQ}5o}im z+rnT=1>2%vyDHcg2ixT1`m!M19&F2l?do8=CfHU4+qJ>AGT6++NYlag=3rYLY-@sT zZLqBiwvJ%CF4)XD#`VGWmSB5pu-y=BZws~?gUyV;e#YY3d-HEA zuWu+-o{s*}s^7}D<7++2XocgG=KEJOZcE@Aq2@a}1tu$C&&SDm=5O6!?EOOhbpOLPLcqN#JIhch$H0O<5dd0aFD)N2Z=`~k+P!#~4E~!F{^1Az$HTwmKP|WYPY*V4mnP&e z@7K)BymvD%^FD4%FZ2G;ypVB%#-?-9{Ow*&0jI#fuLA9N%W+881bx4v@9zpd<@re~ z9ktS)6;IEnRN-FhdZm3{SmJjMv_1CunP=r|do{kz4Lqk*Yo6w{uOPhEY5p|VMa|1x12r#mJ=DC+wNdjj*GbJw zXVTJz^C)ozV@ zIQ8jytGVuLUgmnTd710W=4Gxwo0qv3ZC>WOv3Z$m#pY$M8=IH8hHPHuda`>t1)Ks- z0jGddz$x(WslfWzpVK^hmY!{x^Tt!cbDAtClyPKf9ndp)bG@V~IDd=>=Y0EwzIyI7 zm4cr;TgoXtFB-a;8qK+@f3f8I7atVbmE)W+X7mJya>m<~tGiOl)m!rHPPP9cIGj&?m2~mxkdp3% zeKY6c=Dh#RH(une8vg#i`QzR;|M)*VdD69~*6#fNCl-dMgyy{5T)UFq$h`@sou=Jp z98GvVM-ToC&)?0pHS>PKyoWIDG}pHDygB%D;vCqVgPQYFeJ^6#V%`_%Icf0c#LKi* z-y;~KzHia@3F>IxCzvU)BL-8(^x3r6v^6^CG_Nk|9eexi=)-fj_2>9raJR$kS#xea z?ct-mTN(~BzNW9HEjmw4Ic>kG*TgpcGOQ^`{6Gga&lzdh0BjW`}6O8H2sGQAA0b0f1Wq;*MpaQ z`J}TRZ|(f!=f866&%MjP@!DIT+V>j&q|bhFk2SCR(+}TqL-UE(cAfOe6Lx&;3qQT@ zn$sKZ+i>^prKe^!cL!Bgd>L(b4b+OhO-A1I#k@WjY{p)!7rVZ{`c#nI#d~H`=rrlS z_gAn#P{F<=u$%bF4+nn)um2|2+8}vQVE22)ek}G~vBynC!Rt2cCj?0oCw{ot7hu0E zNbVA-UQEmW+<^UpfV%|$YT3`Vzt;qI6UQgcb@(5MJ>Dqszlr_30ZlvOw6h8OZvvY5 z@m8r<o6yO^1l zl6pJ2VEnG2+*ITBAaRN}NZ^xArNQfjU^DUa3&h?XTIG7T>2Ks7u^%Gvo>u=u#ju(N z%?^@AhZH&t;GYTnjXi??y1wllVs0tgN{rRVBzXj-fC%L=pAM)S-x=1($!%NCe*cySFKwq{V(rJkhf;} zvXzTgEL^&J^{Swms~0X=8Z;w}6x6x6os72COP6{pmK?ca`O0;jM|L(f9@%*8{57lQ zAMKra&RMTJec{pbkDh>B%_Ag;C zS@s`dk6u<@@9(fTSoXhRZ?)_@j7fV^mVICB8Owe&_Fl`raW7d=3YOj5TkN%$m$$P4 zd)%_0PW-fGzXW@yWnYGUgJr)Fd(N`I8+*~Re**icW&Z~D=oRJde++xlvi}8pt7T8p z-;8Ci`J3oJWZCz}K5p3;U>{v5?J?(q=6p|IrAc-#E!W`8=^W$v*i!ded>wo_~DA8#|L=T2Jow9`+fAq^i{>`QSO3|hjR;Q` z!u0P=+Dw`!^I`heCT&g!pUj2npP95dtUZ~XNVl28UieDfd~(B8fixE+?%1!i=pZj~ z`+k29u=A~EKTX{E*7#RVRf(_vZqDdULGi%-gbM=q#GMzMnz()Lpeb=@I+FNyJnVGh z_Q=`;5_j&{^6ad@e%zyv8Jyhtr&-J_L&GZ%Y=G-aBeIJFzcz=3&s++ zmoEEeP@*X~SqR+|H$Pn))IR#G*8csE%<|gi?|i^5L0!T7j9`2dxBqUmJ2*){>-LB5 zn0wn<2YHt!?mXn-!@hBT;`ZUQZvSoK<|j&tJ5Fvq?;!82JJ0z^Mpr5aqAD) z?%8(pTWX$JyLT{xYxhXp;U%_tU2RZbBysb@k;}embXt&q>i35JDM3S?Syva#qD6_I z)pyheJv!iLLGx~XB(d`uLxKDaL5k6O^4h=G4c>2B^W%LU4DTaqefXmxz32-ek6Z9e zm&xCAKgn;nwLE{fKkVY0{O8Ee9rZw2`Jss?Y?gE=g_{^PkyAV|0ZusuV0*$9S!sMl=zwT<@I0DcldWr z{yn=;|HAV8^K*M1WAcBA{)r!y*Z-e>Y3Vtt7{Qa(Rh`v3QRCja|;N&7qJmACJlpN@o=81~v<@{`Y$mw(eeUpU^B zzXbgXdzII3^0xG9op^}p`%Jr*O{^jOh^vK7GCdTEg5AmAv`BUxuuG;zUfq(kz zh>3q3^Rw;)<^8L6{!ndw-1~~TzcukkXUY8A`1A7hsoMHoZGEbCet1drRpI!3o%+)s zD(_#lJ87&cI=n-$Npa4e$%%ty{fIxTPi!9ylUs))nZgT|E^a4@#6X6`NMJB zh(5i)D%ZDK`D*94)yh|Ue|ApOm)~t-9KrE#JT|lT-BrKtkEZ|lQNDgud;e?7zMR(w z@4a!pDgOxTSL$2k{i_zc+WW_9< z_|@LuS9^b1?fm+#Pd^y0-`{6`3_LV5eXE`SSJU?&?_3|gzx^2J7g6i_L(dL>DVP{L zGya)N%G-C|ic7-xH@h%DH?)?|&uaBw`j?@njL!!+|H|~1$FElYTaO$cw*OqpXEQUa zzgqli`FnllhJP5JQR?^4D6jv{OXAO%{L?=x_MCNoUhVqVG3UMSBc}Wwtj`VKo|!(T z?3P|Ptou%QetFw}O8X**mbZUPWldhS_cztbfBBK?!}IS!=HJG<%KKOC`bf3wGu7&U zx%qosIDZ!toJ-+jN`0>SIoS$UwD_?)AwXfRsr)uS^+ zJ0`{>v_JXb^8Q!5e(=75{&0Qy4CNyqF7JP}_y5(d|5WQ=%T8yT+lstvsXxAJdHbuC z|G{Hte9`zE&iId7*Oy-I^|xyEC!^j?C-Jc-@$&DWgo`=Ud#R~ z>~~xCr?J1!vi}Wxk7b|TBI9_EW#18duVt^p{&vfLF!q}*`+V%TSoRaJ-)h;u^7rF=%JXpS`Tl$C_PqWJc6&a)fZg1mI=TMSCMPEU z&HXpw%>%}6rL*(p{+!80+}}B z-=*69qSd}nQtkT))xHl>?S9#6_v=>szEL&(s(l}#+WpGa?nkWleU)n8r>gdShHCwD z`A&iVQwpT-4?oY(zjIb&B6uIz{=vt?bny^5j_10>uAe_@-#W?HbT8$)KP2TlVI6FO z2{-_U;6~UA+u;Clhu{XN^;TmqacsX0mVF~}$KfcfwfyWjcDnAv(*IgGPWjOaahmY6 zwBA?BzX84C%+FN!C&GDIJMrZ0@|x4ue2m;A^R{rD%;S>-_vf|^e)BIl zVKt9h>nzE<@ATw;-5>AAeY-*4e(~VH3aep4Zi zd7z7VwH_?(8#qWP*3Hl7{_QE@*W1-R!PGJ3{wBjd7oTvR;tzi#_xY2jdS&LsLrdp& zkB9xxqEY?`zl^QMfNHnv?!5P;(5t&ooXrDwCciSOA4V-7Jgsfb+9iu$^BVI2v&P_e zF4wJDeN*-)8 zJ2l`A!PdQ<#Or>Qu(Y?(bYx5G+dJ2YpRe`NzJ{x09(k#oX0*OFHAwq<4`qKd4G3Q0 zLq7uUer?nwU-ZgvVSO`e#pGv>y{K?tNW4+{q3eq7-)f(#%uH;V72#udyfh1&uICyf zt@>fmcGwHm=Cy6=^=tF`wrp|m3{11eEzmkbrsQ+BEcF$BA?uyqAEy1zTkUDG?jO@~ z`NySv4klq5`mhAOUy6SOX0T_~kM?+^i<&O$MCC+5>#C{$=Q>~tVR(?wLXMTDanWx)&(J7k{v*x3&Z^e^j-7wc3Zw@wd z?zVlf4Yf(U#4!W>%CuAObg>z@LzSSKm?dv>Z>h&#F;rz`z zw%k8x_KeQoIj_Ech_f`1Wvl6qs7U))M-{5bxawwWeBrEy^tYJFNRgI&`vmHt+W z^HS^I+T~K{A7_51{v!9&Z|@y2WmOStKI;1Bd9n_eQvVyAOKb{g&gC*AGVe2g6gIse zG{LvDzFo=v@^P(?_H|y&`j~&sjMlgD1=7A&XzDjFJ%8Jw!ueZl3+tO%E2^Ep`Paxg zrt6CC-)bLvnEf(rO`sRF-=F5Nvy71njvu?fHvGGZj+A{_Bgl!Vew5I51m|yM3)SZJ zt;{@8k6t&^^Dym)y?#v;u-=bW^RE5y+wIYMD%mIIxz#T_zUrazUTQfl zKV7cfHXgdJJ?yS<>g+*!DSY$zJ>k?*`x~+A_d!k~eJT9Wr>~i70;+#A_GJC_uQK-e zq|M(i_5Vuw(P&guJc=Ucn14w%ilXf z#$}CV-x>Q_%f3JMb(Z}|>>ZZMsQyP_ z*YDA({q5NGdy8sMV84L%RO837UufB{!>-?F)Hv5-*YD}6-EPlKwBOd@TI`F7qu(dh zIE~m-sYAo>`)NB{vFrCY)qi3@XZS}w*XwkAwD{53wSQ_q3A_D0(KE5DPU?R?cKiFC zS75il-`S4c{(k2g?DqFNZ&ZK27y0~Zxo&6oOYL^Q)NaSwmbluF>GDrE%XzZSUoH1H z>^kq%z6txHh4p3M>)ej(3_2gxe;4dmU0LqG5B4RN{ndKC;!>GM8s{jrGr!b+g4!3B z`=74%3(D>1s{Q^iU2uI+Mk3OEIv0!{&^fK$LJ;1rmi z0{Zz*^ijF)6JA^jif;U&r1eeQ0Qsd&n^u{~XLFtCuP;cto&4$5y4fqc{+wIS2$G$* zNlo_mA6pNU?~m#A(aj|{|F!EjbG_T^#ZTKC{^06n7q6G=#hSl_Jah4Ba_sfNRj+M= zO)pBtUcI?~^M?O{n!vj@;(g^ez22sOJoU9nRZRJ(sc&y9XF=Zl65-UZHEWh09p(f- zv$!z0DarE|b#xxL;OK=5yyeF=1ve}OujP&W(Y|QSbxT*Q2-I7;YURRo`|>cm?7#3= zq=Ns{_}J6MDL=o9a(|{*ka3^5FO!0iIw_Z$FU)*K?ng_$PSTMxg|TJA+{wc9146C; zMbvu9*cIw^_S7Ba_qo~q3EU?S-;2WEIrmp#e`k6z^FGSyJa|#yNe0t^FX8_~I4L{) zb7BA{Wteim!~btHtZ#=J>DRt+QrL=rn);5$f8$|Nemeat3wZcTE7$N6%biYpD-E*l z&)UXI@LvYCf0fFcawhLa{NHVr)3{U7l=}q!-um|^CYd~-n*Nm^`hmM z5l}DA>gRyk&JC+%J<)m5Da{CfliU0m+`=2a_JmFQN_@4K>Ljh}Q-Z*H5ku>Hj^ktk z$LC3FKlUfS#`y>NI{tc`-GTc4PX2+E+uG3Ix3}ZQ=I<4*pP3Vc`D2Bp1&4(8+%dwU zFS_QAk$jD#pR=ic)$Uu?{%d(<_IJ;R^{vNnKJ+(KIlgEBN2h>Oz$xGqa0)mDoC5zO z1uC7-RI=O6s^q8VQ|kZlx8*vDrn@<@oW%*}#QXb*oWC~Bj)$&wE6d+sSGv!tu)f?+ z>*=L@H*A0j*b0Z>MmP%FVJFnM%DM`6&9}Lsg8x7TyItN+*YSSAwpU8m;y+G(4OaPt zm97-0n!RZ&#i>@$KP$fpz2eMIt=FFCYOlo7Y`LG*ygxKQ++*IJnOz~z`^X}U^1d<1 z^7b?TRe0(9uZe8hr|)Z$6|SdE_`iaGR9YLRs2A{)%yB| zcB)4F8`?_yi|*b5!u)CSepRnu=yeEx8=1G7j`JWKy}vk)cKRGa9mnV+#IK<3BRm&e zv$dS^?$6s-r`2<6>T$!ba6HiKE>o9&>DHC=s zxxTH{?n-eo=pOgtp-X0aph$~dQxJ=6MPv@iM!x3f@9 z*R3VMKPgU;{=}J|TJ0Q9J~7|OdaUz0T46r=Jg>&A&6C&XPVV3EVfUo_IrK9tt#dN< zK9C6;?K}RLGH;c--nQR9^>qYYpKISC`IY=8>Y2tLs)cd2mc?n5eq~)Ix6Ra~>y6fG z=c|3i@|Ej4kL*|yJf|UiR6~(**83(jt>@u?Cf`o0-cOLPpT}xi-*=CZZ>P0AYgeo} zN^VtAOtJ({dfh2)-RGg@)&Av8<>$@mXC$rls{eFp$Ll1X>M-3no1YJ4zKL1(=%DF_ zaDGk!r+`zyDc}@v3OEIv0!{&^fK$LJ;1qBQI0c*nP64NYQ@|P`714K zS}N@P7j5C2-Scd=}| zcE4!Xvha40R4tri}JS`=Rqs{Y_iV>kl^x?fm-2Tu%Eotqq#`x8}qPMnR?cM02 zX+zt`*tR$S1uxY{=etJrF>A%f0!swo-G`{AwZLpcYE45Q~$Qb9~Rosv9++QeG&(r-rvJd%x-zD6y zzwt!*dXoQC`FgRDcm?>xgW{i|+%h`&;{zlf-S^CTV)o}BKP3L@7pGp$@7`P5a|_(* zW998p|GI-D{*K>yAdGuu&wInEaLF52hh5BeeI&G}=wA|Q{N7`wJ-Y7Xj(FfW)yB}r zU*ncYYk#9BO8G_#MK(pk`YQET{j~ks-%jGLg_HYh)=Bl({_eKj$HIEL&%EabQ}zB= z{5h<${SN7Ga$m+1YJ9uDCQZ{rB=(a2YuqB`)kphV%ec25EdBrGXJveJeyX49pyemh zQ7Kn3O#zK>_a_y!D=bSK)gxGb!}a&;+dLTR({QNF57jwxxXcrea>}Kj6}y(#_8L9H z;}8DY9@V9QKE)qAE`Gld>iVg1iU+2`KYw?CjLQYHWq+FJKaQH#cBkhsH zzarSo{s?#+Nt$a(d}>Z_X_(J4sH-^lPBXG!2G!>TntSm#M}D^dxrjdQn4Nj zRA2u<&l?T2Q2Xp|92MFwO%MGlW&T_@_dX5`<>~vsE$I^;%I~B_w#Z-3d&k|k-tjFR zui~zpU!lW8`MR+Eny+l%QKHs8RGx2_x98tMUl)Im_)49Rv!3}(Sf9?*oqzJ#Fm3lC z9c5jCTFMCY5dIg;%Dcp-$!31`K_F%d}W7tcs`P( zUFzorcJrzfFHQd0|10Oe?Znf#rmUGW%c#$!&Fi--|8dW{3xDQUiYs2mZ=dh~;n%NT z|J#)ZEH9jL_Kj+{srBml;^3>wkGHnJUGEpsD?$79d`Rc}&kvVz(>T8){XBd!Ci#Dd zyDgA(3|QQ}46 zS@0Y1H}D^DhvUWnpeEr-@N&2uUI*U``{38$kKk|M3viDUB<@-8Qn(7f9o`SW3Wwnn zaGMh)&aQB8co;kew!?S9|A9}z7hv6MCEls(NIz%%N{3|t;TVh)KMH;6)h)GokW(B)abW+ zySO7QwVgEmr*kKP-?zKpe!KhozWw$){IM7!bdpe!&;>$2Na*JXeVWjh2z`yv-rv>q zWeAlC{UD*AB=pOKeuvN&p*wz0>#q{}DMDW$lwqdEpDFf#$Ug zX}E!i=Ln_gz$i0{Yv{2zOxo%BcpWLD_YVB@YWW^X^Jy(Zm%TB&PjzrsVK@4GwBbc$CJTeIv$9}g-DoHD^-aJ#?!t? zFcOQi6@_(qb9vU~-rYaoEfg^`rIm%>mTGMWq+nY7; zr3$Whqk0+Cy1Yu2?ccR~!0lCL*?!mVfqrjR#EjdkE?~yvEdevId%)vWR4hE;mFjpz zkM~}ODpoM>M*Qqjn-?ot1AnN^tD-Jbm=oLeg{1)l4-14PBb|jMSr<|ZdS|t6;Fq+O z<4Nq&>zDH7wj#ZDx?PvkD-BaGRP<`YfCa-KhOw6b6*^hfSja4S+6@_9qq>pTWmH`z zCuQ1QD`mOOA2NWwVBjSKuNe4>ffo%+5wlWT=Tb?>E?ds)1p|%-K(eAfwS~MsHDy8P za|T{ga_ylGm1i+O2zEVGmh^&bY=MHIX*NI8?vs%Vey)>)iEQ&BQ2!casX4N)3 zQ!v!a1K)o62$lQw`m#PiX%@VI$X9gn1rg>(s!Pb@C||BZ_$CFV z43j2&T`9xLaDm|?@kC;OG{BNXGsPtnd@$nUf~Y0Tg#zqsMa<^mRDdJG7mUOMY(Y|# zY@wt`4rR`EmjeHp)MQ|Pe1FJ4#yYD?#hG%uV?)kDK7%-CYEoKM7G?h!6Xe1ZtW-=V ztgnBQ(QV0i6k^dF#OPf^H5E89;!%ox7%JSOT|OEdAw%h%Hn)L zKLXQ&pY@DnbGZ>Q;!k~mMCfD6VsNDlDo zqg;Y#osyb$iUmcq<2gC9rQ!?|;(WZpsq9Ksku)Hflz$>Ul?cb!T?m2xYa3GC9$vRcJ>{OIF`(o*V1efuoxIy>0Q=FBGs>9>iPp6k8UVkPsGp zkq~Ro+Db(xI)JbTP-=OZ*_%km_s0`~P}(mLuhR^elazV2RJP|tRb;^b(Z;|A#PcRe z67~=#83#K^m115hGg0ilXj?G;KzuS0iMA6e46&xXu7E(kR8*XrXAd%yk#IZ`45Y!N zIQ#OrTmvo-%ry!|1K2AwrAk)vx`&2_m~=V_-ja?5#sU9iI6;upjDYr>Hb?;+$f-He zOde+Bb!(m$^QFOHOSqP6w_-t()qRW%ILI7u3vzBC!B# zR|-sYpP${J!!OmOLa8i+b(~Rf9;Z^tI^&X5F{GZ@zVXQ@7l%2a`J-q77RFWz>cz+Np(2atzjJrm%j=_uN{{X>Izf48F+0*&H3?C>}SnN&C!-wYcHQ^kU! zsgDN|2`)B~_J#bccZ20Mr-pzu#({eV!c)fGkD`T!s%9Nc)mFF|wE&kCij~ zlF-jB@84HnnvU1!r&D7taeVKH)bCQJ<#82s3`SGxNN~cPBy?eaDpuN?aPJcGBkpX! zP|JGe=CX3KmYIM#`bN}@C+5yfOv%u<^drr}h+ro;vj3Tg&Vlna@H0X}O?Gr$YH4?_xDi(GMGa_o4mP4r^Jl zn2{4mdv<9P#U_RFUnT!67Z|<5P}xqT>~NCJjEsL1I&a zFTi@;4$trg*YE|=4ut?-A=Mo0G#vR$m09OZMUqI+bo%oO1h&PHScJG-f&DJ3E);5o z5P^fOL+nk#h7`sHh~_2eR#g{m_JqyF zqP-Rs+QIw3 z2;3y$f=D?q?CBpEboDc-_OTXE0}hK4iGnDV2!#FVF~|ldA<|Z4u>dh2B`o@sb+8oZsVofw;gurg_`TwDR&=~*&@<{zfPjwlms6` zrexy&pq7{!bJq=`^mra5?iJTfX7Dd`yly<7wQsJHQJgJ7Dxk%h_&y=w;~}=@Wo5xG zR|{$$_U2eDG6}{(IS}&9IP7Fzh$rGGi@?*wiA8jB;!P(y9+$3)zNu(9Ye}(p6lbRn zh@X)4=j%?-K)?Gw%n^aBv@^bFlD>0kISnKm`tj|=$%OVNpONZP7S}MosdzdT=UGUU zaONL@EsEdA(7TQHI;LSnzSYwbnYfM-9;8lH+CwtJ8hT`EY>L((pfpD%?LWBS>uVrOO=+9MXLaSyd zC1OnUWi^NRo5*B0Q$OiPDeZ@*hwjiu_j;qQbRNLsySLFg=x;%xySLG_>7CuEuTc+b zLm#B8F)-XcE-@dc^5`D#KS=)T1I&}RJ@zlXANpwQPh4~Fn_M~9^T&5Q^5^xBK6J|` ze8mskdvfQ_$1;+f`XleH81%b2NPcrY>W=kq(zAoeKSsu-zY~Uj7Xis{u74Mi-#pJbsK0^v_cyI?50O7Y z=6Nra(X$smNdM+~xJIs)Q%dPsNmcW*RGP_&i?j|^P#&&#%+6D(H&s^Pjv!r8wp?Yj zTMm(G2mFWIn}l#OmG(FgUL9Bchh~ZJ*ZzI{t3U3!3CakU6l#D6nW6*!UaEek6SbiS z;eZ}`KRcDB_swgqx_{Y-J%9d2tAyI-NSW@<=ZPQC`{|F8c496@`}HOUkklUS*S{F% zS1qEC>{Ix?HLRbgW9}gGw0x1Y?;-M}`TvZd_0T;QL^n`E`Nqy}yvOho;Sa4xlR&Zv zV>G>qaFXe|l>PMCJ8n7r&XbQl^w8S&Q?FVNY`5IjxqB4a(LR0^`ri+<01G?}^eO20 zJ)j=}VDE#rr+@~5ZioHwNuUn_{TfheN6S)-vDAAlw{3sR)+12g2Yr$4-w!F~Fb~ zR2-<5+=l=6kjr z)aHe{peNbfaphF2#jmojA<}rc@!aycH!gKEPqbPVHDa|~nK{BAd(p;UciQ?-J6=ID zzuo;bkj67YW9{|t2xrbWp5f1&U3r#o_IwrU1uMVS-0>A8`1*^y^>0qwn(r8SuKFl% zId$L!|M(jE!K(u&W~_G}#^VQ96Mb9x<(DpUt;*#jjL+?Z%UzRPBA7kL!39XGw?DZK zN*mweSC@OCE5H0|@A4a6yfyH=aO|b7@apgUmcQB0T{>y8t{^)!eO=3!E$a00kw_B|XcLtj~E(60i2T>WX zn`>UjjhwO`{xGNsG%bOZwd!{+eAWQTaen1lp*e9k-&D5NKg^Fj*POgr*~Z`V8gKpE zXL!r$=Hxqt=7O#HHvh*v46Z&*6*m$<}#D{j*-tK;uw=++EX!r7Q zi&nMp6W;Qi&Y_uLGc4!GW6H2S5a2+J`ZH zMZ?s3`0s%^dJz8bjqe8==d9i9t57hYbDCdSsi+`^4~-MX@XR(9qU{=L7z7~Sk%t-!#{P?^|!>&VmU zPOdq;(yD%c{Z5#{`R~C2u-*^cGMo535H$j*e-~Ln+Z4j~pP_`_lOz!Eh^U)|F3S zJ68d}usDQ0zJ-hz0Q7wFhb*J*YZ`)j$V->}(frdA|9!OUEr$H{XP@xA*Z)9%!&{YxDY%C#ye% z-TMnL=A*sV!!IMFuHJs-v*1#X0>8{!fNiPo`stAiUkWx}^f!JCd+Gc-Oa%GB=RpK| ze;J6d{PhlSs;7Sl5v1`7OsFfk+I2(IJqmHJ8Wx(vLUVMhzj>X1w3Jn0vy(Tnn>RV5s;hw#)4wLz7J$@{=tPA7IZ0a8n5UbrGpx|`l zFpBcW37ipoua}EOrkRE`xq7_D(2VgaQ`37YgT~ zfW>Zy!V6Ta7Yff&v3LEl)q0AG-2{cNQL(o`;mcI)@1TI9n=Sm*`uODupU-Q%I}Uea+i-Syk8PJ@5Uz@5;IckNt*By#allpRjyZHSvLm-x zglpk7s#dg?np8n|WN#>>b67@{^I67GEU6OXkmk}e6;YPbb2;cpON>L6>MG+9;m$|6 z#kEq+s_4FLy&_$a;ELL;gl?v0;I48RGXT#2_Cc@nkn+O&iuTa=4oV^9;)kaHur2V@ zMJRf|xCHMAv_E}Mp)^Y5Huoph40_K*I%t3T9z!Xe2O1B&zWu&V-)C-zI;5NSr|(6S z()S<`!4J}5eC~n*go5_`>3a^PbR0T=Iu4~C=#So^XnBqZQaVfqL-R*66hBhUaKNCT zLiK-)Fq9hCkNVL5y{G`s9{8a58an>w?@QI)6<{doM;JIIyBh`eh5DUu-vMJ?Of%5`%vy)j0nzlJ65Jy<^k(n~KaI zf+FMi&yyE)O4D>8LO1vS3)0`UNsfL$M*W92)BZ+EZBJzoji8MQ&qp=V{!9C{D@?{j zz(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(l}Az(nBx HEdu`uyHMpG literal 0 HcmV?d00001 diff --git a/tests/helloname/helloname.cpp b/tests/helloname/helloname.cpp new file mode 100644 index 0000000..be5c68b --- /dev/null +++ b/tests/helloname/helloname.cpp @@ -0,0 +1,16 @@ +#include +#include + +int main (int argc, char** argv) { + + std::string name; + + std::cout << "Hello. Please enter your name : "; + + std::cin >> name; + + std::cout << "Thanks " << name << "!" << std::endl; + + return 0; +} + diff --git a/tests/helloonefile/.gitignore b/tests/helloonefile/.gitignore new file mode 100644 index 0000000..517a631 --- /dev/null +++ b/tests/helloonefile/.gitignore @@ -0,0 +1,2 @@ +helloonefile + diff --git a/tests/helloonefile/Makefile b/tests/helloonefile/Makefile new file mode 100644 index 0000000..151a873 --- /dev/null +++ b/tests/helloonefile/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: helloonefile + +# This rule tells make how to build helloonefile from helloonefile.cpp +helloonefile: helloonefile.cpp + g++ -g -o helloonefile helloonefile.cpp + +# This rule tells make to copy helloonefile to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p helloonefile binaries + +# This rule tells make to delete helloonefile and helloonefile.o +.PHONY: clean +clean: + rm -f helloonefile helloonefile.o + diff --git a/tests/helloonefile/README b/tests/helloonefile/README new file mode 100644 index 0000000..f735ce1 --- /dev/null +++ b/tests/helloonefile/README @@ -0,0 +1,2 @@ +Simple program to test multiple functions in one source file. +ie: How does seer highlight the call stack. diff --git a/tests/helloonefile/helloonefile.cpp b/tests/helloonefile/helloonefile.cpp new file mode 100644 index 0000000..ad131ec --- /dev/null +++ b/tests/helloonefile/helloonefile.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +// Global variable: +int i = 2; + +int bar (int v) { + + printf("bar: %i\n", v); + + v += 10; + + sleep(10); + + v += 10; + + return v; +} + +int foo (int p) { + // Print value received as argument: + printf("foo: Value recevied as argument in starting routine: "); + printf("%i\n", p); + + return bar(p); +} + +int main (void) { + + int j; + + j = foo(1); + + printf("Value recevied by parent from function: "); + printf("%i\n", j); +} + diff --git a/tests/hellosegv/.gitignore b/tests/hellosegv/.gitignore new file mode 100644 index 0000000..10c609a --- /dev/null +++ b/tests/hellosegv/.gitignore @@ -0,0 +1 @@ +hellosegv diff --git a/tests/hellosegv/Makefile b/tests/hellosegv/Makefile new file mode 100644 index 0000000..423ad05 --- /dev/null +++ b/tests/hellosegv/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: hellosegv + +# This rule tells make how to build hellosegv from hellosegv.cpp +hellosegv: hellosegv.cpp + g++ -g -o hellosegv hellosegv.cpp function1.cpp + +# This rule tells make to copy hellosegv to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p hellosegv binaries + +# This rule tells make to delete hellosegv and hellosegv.o +.PHONY: clean +clean: + rm -f hellosegv hellosegv.o function1.o + diff --git a/tests/hellosegv/function1.cpp b/tests/hellosegv/function1.cpp new file mode 100644 index 0000000..7fa9efa --- /dev/null +++ b/tests/hellosegv/function1.cpp @@ -0,0 +1,23 @@ +#include "/peak/src/Seer/hellosegv/function1.h" +#include +#include +#include + + +void function1 (const std::string& text) { + + int i = 42; + + sleep(2); // Simulate doing work. + + std::cout << text << i << std::endl; + + //raise(SIGSEGV); + + int* x = 0; + + *x = 2112; + + sleep(3); // Simulate doing work. +} + diff --git a/tests/hellosegv/function1.h b/tests/hellosegv/function1.h new file mode 100644 index 0000000..8f24a9b --- /dev/null +++ b/tests/hellosegv/function1.h @@ -0,0 +1,6 @@ +#pragma once + +#include + +void function1 (const std::string& text); + diff --git a/tests/hellosegv/hellosegv.cpp b/tests/hellosegv/hellosegv.cpp new file mode 100644 index 0000000..f22107f --- /dev/null +++ b/tests/hellosegv/hellosegv.cpp @@ -0,0 +1,18 @@ +#include +#include + +void function1 (const std::string& message); + +int main (int argc, char** argv) { + + for (int i=0; i +#include +#include +#include + +// Global variable: +int i = 2; + +void bar (int v) { + printf("bar: %i\n", v); + sleep(20); + printf("bar: %i\n", v); +} + +void* foo (void* p) { + // Print value received as argument: + printf("foo: Value recevied as argument in starting routine: "); + printf("%i\n", *(int*)p); + + bar(*(int*)p); + + // Return reference to global variable: + pthread_exit(&i); +} + +int main (void) { + // Declare variable for thread's ID: + pthread_t id; + + int j = 1; + pthread_create(&id, NULL, foo, &j); + + int* ptr; + + // Wait for foo() and retrieve value in ptr; + pthread_join(id, (void**)&ptr); + + printf("Value recevied by parent from child: "); + printf("%i\n", *ptr); +} + diff --git a/tests/hellothreads2/.gitignore b/tests/hellothreads2/.gitignore new file mode 100644 index 0000000..7d2f7ea --- /dev/null +++ b/tests/hellothreads2/.gitignore @@ -0,0 +1 @@ +hellothreads diff --git a/tests/hellothreads2/Makefile b/tests/hellothreads2/Makefile new file mode 100644 index 0000000..8077b3a --- /dev/null +++ b/tests/hellothreads2/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: hellothreads2 + +# This rule tells make how to build hellothreads2 from hellothreads2.cpp +hellothreads2: hellothreads2.cpp + g++ -g -pthread -o hellothreads2 hellothreads2.cpp + +# This rule tells make to copy hellothreads2 to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p hellothreads2 binaries + +# This rule tells make to delete hellothreads2 and hellothreads2.o +.PHONY: clean +clean: + rm -f hellothreads2 hellothreads2.o + diff --git a/tests/hellothreads2/hellothreads2.cpp b/tests/hellothreads2/hellothreads2.cpp new file mode 100644 index 0000000..b7ab645 --- /dev/null +++ b/tests/hellothreads2/hellothreads2.cpp @@ -0,0 +1,80 @@ +// +// CPP program to demonstrate multithreading +// using three different callables. +// +#include +#include +#include + +// A dummy function +void foo(int Z) { + + for (int i = 0; i < Z; i++) { + std::cout << "Thread using function pointer as callable" << std::endl; + sleep(2); + } + sleep(5); +} + +// A callable object +class thread_obj { + public: + void operator()(int x) { + for (int i = 0; i < x; i++) { + std::cout << "Thread using function object as callable" << std::endl; + sleep(3); + } + sleep(1); + } +}; + +int main() { + + std::cout << "Threads 1 and 2 and 3 operating independently" << std::endl; + + // This thread is launched by using + // function pointer as callable + std::thread th1(foo, 3); + + // This thread is launched by using + // function object as callable + std::thread th2(thread_obj(), 3); + std::thread th4(thread_obj(), 3); + std::thread th5(thread_obj(), 3); + std::thread th6(thread_obj(), 3); + std::thread th7(thread_obj(), 3); + std::thread th8(thread_obj(), 3); + std::thread th9(thread_obj(), 3); + + // Define a Lambda Expression + auto f = [](int x) { + for (int i = 0; i < x; i++) { + std::cout << "Thread using lambda expression as callable" << std::endl; + sleep(1); + } + sleep(10); + }; + + // This thread is launched by using + // lamda expression as callable + std::thread th3(f, 3); + + // Wait for the threads to finish + // Wait for thread t1 to finish + th1.join(); + + // Wait for thread t2 to finish + th2.join(); + + // Wait for thread t3 to finish + th3.join(); + th4.join(); + th5.join(); + th6.join(); + th7.join(); + th8.join(); + th9.join(); + + return 0; +} + diff --git a/tests/hellothreads3/.gitignore b/tests/hellothreads3/.gitignore new file mode 100644 index 0000000..3fb265c --- /dev/null +++ b/tests/hellothreads3/.gitignore @@ -0,0 +1 @@ +hellothreads3 diff --git a/tests/hellothreads3/Makefile b/tests/hellothreads3/Makefile new file mode 100644 index 0000000..37af4e0 --- /dev/null +++ b/tests/hellothreads3/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: hellothreads3 + +# This rule tells make how to build hellothreads3 from hellothreads3.cpp +hellothreads3: hellothreads3.cpp + g++ -g -pthread -o hellothreads3 hellothreads3.cpp + +# This rule tells make to copy hellothreads3 to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p hellothreads3 binaries/ + +# This rule tells make to delete hellothreads3 and hellothreads3.o +.PHONY: clean +clean: + rm -f hellothreads3 hellothreads3.o + diff --git a/tests/hellothreads3/README b/tests/hellothreads3/README new file mode 100644 index 0000000..3fb57f2 --- /dev/null +++ b/tests/hellothreads3/README @@ -0,0 +1 @@ +Simple program to test pthreads. diff --git a/tests/hellothreads3/hellothreads3.cpp b/tests/hellothreads3/hellothreads3.cpp new file mode 100644 index 0000000..86caa05 --- /dev/null +++ b/tests/hellothreads3/hellothreads3.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include + +// Global variable: +int iA = 2; +int iB = 5; + +void barA (int v) { + printf("barA: %i\n", v); + sleep(20); + printf("barA: %i\n", v); +} + +void barB (int v) { + printf("barB: %i\n", v); + sleep(20); + printf("barB: %i\n", v); +} + + +void* fooA (void* p) { + // Print value received as argument: + printf("fooA: Value recevied as argument in starting routine: "); + printf("%i\n", *(int*)p); + + barA(*(int*)p); + + // Return reference to global variable: + pthread_exit(&iA); +} + +void* fooB (void* p) { + // Print value received as argument: + printf("fooB: Value recevied as argument in starting routine: "); + printf("%i\n", *(int*)p); + + barB(*(int*)p); + + // Return reference to global variable: + pthread_exit(&iB); +} + +int main (void) { + // Declare variable for thread's ID: + pthread_t idA; + pthread_t idB; + + int jA = 1; + int jB = 4; + + pthread_create(&idA, NULL, fooA, &jA); + pthread_create(&idB, NULL, fooB, &jB); + + int* ptrA; + int* ptrB; + + // Wait for fooA() and retrieve value in ptr; + pthread_join(idA, (void**)&ptrA); + + // Wait for fooB() and retrieve value in ptr; + pthread_join(idB, (void**)&ptrB); + + printf("Value recevied by parent from child: "); + printf("%i\n", *ptrA); + + printf("Value recevied by parent from child: "); + printf("%i\n", *ptrB); + + return 0; +} + diff --git a/tests/helloworld/.gitignore b/tests/helloworld/.gitignore new file mode 100644 index 0000000..31e0fce --- /dev/null +++ b/tests/helloworld/.gitignore @@ -0,0 +1 @@ +helloworld diff --git a/tests/helloworld/Makefile b/tests/helloworld/Makefile new file mode 100644 index 0000000..28f53af --- /dev/null +++ b/tests/helloworld/Makefile @@ -0,0 +1,21 @@ +# This is the default target, which will be built when +# you invoke make +.PHONY: all +all: helloworld + +# This rule tells make how to build helloworld from helloworld.cpp +helloworld: helloworld.cpp + g++ -g -o helloworld helloworld.cpp function1.cpp + +# This rule tells make to copy helloworld to the binaries subdirectory, +# creating it if necessary +.PHONY: install +install: + mkdir -p binaries + cp -p helloworld binaries + +# This rule tells make to delete helloworld and helloworld.o +.PHONY: clean +clean: + rm -f helloworld helloworld.o function1.o + diff --git a/tests/helloworld/README b/tests/helloworld/README new file mode 100644 index 0000000..809b58a --- /dev/null +++ b/tests/helloworld/README @@ -0,0 +1 @@ +Simple Hello,World program. diff --git a/tests/helloworld/function1.cpp b/tests/helloworld/function1.cpp new file mode 100644 index 0000000..2778cd9 --- /dev/null +++ b/tests/helloworld/function1.cpp @@ -0,0 +1,15 @@ +#include "/peak/src/Seer/helloworld/function1.h" +#include +#include + +void function1 (const std::string& text) { + + int i = 42; + + sleep(2); // Simulate doing work. + + std::cout << text << i << std::endl; + + sleep(3); // Simulate doing work. +} + diff --git a/tests/helloworld/function1.h b/tests/helloworld/function1.h new file mode 100644 index 0000000..8f24a9b --- /dev/null +++ b/tests/helloworld/function1.h @@ -0,0 +1,6 @@ +#pragma once + +#include + +void function1 (const std::string& text); + diff --git a/tests/helloworld/helloworld.cpp b/tests/helloworld/helloworld.cpp new file mode 100644 index 0000000..875358b --- /dev/null +++ b/tests/helloworld/helloworld.cpp @@ -0,0 +1,22 @@ +#include +#include + +void function1 (const std::string& message); + +int main (int argc, char** argv) { + + int j = 0; + + for (int i=0; i