From 7b7ef4f8dc6df12df3b2b19f8b2dc5b1369c79d2 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Tue, 18 Sep 2012 16:21:32 +0200 Subject: [PATCH] update doc --- doc/Illustrations/migIo.PNG | Bin 0 -> 19180 bytes doc/Illustrations/migscope_structure.png | Bin 0 -> 36633 bytes doc/Illustrations/migscope_structure.svg | 968 +++++++++++++++++++++++ doc/migScope.rst | 31 +- migScope/recorder.py | 1 - 5 files changed, 984 insertions(+), 16 deletions(-) create mode 100644 doc/Illustrations/migIo.PNG create mode 100644 doc/Illustrations/migscope_structure.png create mode 100644 doc/Illustrations/migscope_structure.svg diff --git a/doc/Illustrations/migIo.PNG b/doc/Illustrations/migIo.PNG new file mode 100644 index 0000000000000000000000000000000000000000..270e331e773245496558eb560c1c91fc8766d60b GIT binary patch literal 19180 zcmeIaWmuKp);@{|$O7pUq*D+iB&54jS#(Gv-JwW#BS<%hxadYoq@`;~cO%^*aprQr zzrD}(?*I35opYTp`mBfbJadjQ#~AY-_ZV}9tEtFhVUS@UAt7PO%SpXNLb@-Dgmh05 z9U0v5`ML57{CCggrK|)}+0f%{@BzhATv;3msWKMx+87mlrZ$y(sf>j5mJtcbF9-?g z3f%JBLPB!mKtkGijf5nSf`mlkn9-;%goLDEEiWam;c2*+>2atD^|^z?2UR}&Q2LNb zpCHQhn=WB3nJd+7Te>ZPI^d;-MhSDoODT1AarMf*GV{vv#@Ekm%BL#w@*){DpK6cP zz7`j&EZMlYdRxWkaqzy?DC_FIz1O@`#v_7jM%xph;6_`sW#D;d@Yn?Iu5@f8Rg>H~#-`{6D6T5fS7?pFew;&zc=) z?dlDje=tnyyA0;Xid;=wW<#G_?#J*IozV-UJpLz4eW=2A9hv=WPUmg?c zvMpyn^`MO{{p?KznBQUdvH6$2e9nSZ;a1B7`|YIwX0)HC6vz+GVSo~23J-1 z?P-dD+YXVIzSGUwq>o-VvQ-Lz0>PIvB4z4Eq`NpEh7RN0oLxM-@ONV&X_vKZG@jAy!Lbc(E3h`;;-w zKB<8cmJ$jopH*KC@|!3<)TEK06=Rc7)$DpmU*2f}jG9a_Bte+#~H zBQf&k41P$?YYWyqmmBKQ_vEu$Z)Z5cYOqH6PN8b{(4OFa1D%Z&sj|iNK`@D7uh@w+ ziGfBm^snYdtbyh<3F^ENf^@{tygVC~rGl=KCmb>=rQq66gC*G<&c18AkK&ypR#{s=gvB(>v@aTMW_nPX#B>4+Nt%DTqvlqEE#A-7@=SOwjk2Y*TkZrA zSgizr!p7rub5Jl;{C=B>=T)-gDQJy4Dt(N^(Z_EDJ~xkR0FfuuFsMOuUugDvT4A1; zAXPK-Ion59Ihx3WHy1_5Kl}apv=ju|z2iuOf@w1^R8AH+NC!f4&Jz?3H|6hEH2BPT z_h{{EVU1#;SesKnQM`KkrsbCRS}qp0GnH4ao?Qgb6_+QvP4hIn znrbSNJ<(<6&1Y#ZiISMi!}ev|EhdWztVdiyo!mqG`3i}dgT?RGKWa@yrsS=>!_#_H zoNvA2Eg6c9#an%wEF3-Uc95Vd@@0(WukTv%02LKO^jc9OWT*!?B&RjL>gHkIfe^IC zQIe|W7M`hW_;&kKPWRMY8ChE97lD1@%ca04p$75!&H}I8N_-eBy|JFwFa0U4Ul0Jk zPyPJsMle=Whk-;W`eQ<$mTc$i(O9)y>lH)>Wp^s_C??WfL~nTbBn_)Mdk zo6U2c4Z@ln!|0gRr0+k#-WAX!2{2ps44-xQ_C7EOy!PF0<%8hIK9|etG}p>~z_^l` zlhzvziW=imKT$sH`cPWU&_ezk{tyv0(?Hamlu99H@UOz9e%V#RHKD}A6e4`wOSh|$ zZ1}6feNXq?CqE9v3fDkb%tK?nrO|v@2M&ELb-0rjZam}-seAjZO?k^oSBP@#DlEp} zO0!h=qtz0Q$fci{X}MvGzL0uSS$Q^oFE3Dh-K^{{`Zy@E)MxEhvTju!;y&6}G1^O{ z;Rz}N;dt_6J+V|&wm3{7cyCOJ=hu^shHhKJgpx#p*tXCoTCR4A;Y9-NZh>f6Fh+e6 z4T|(NCwtq5DKUQSuC7I=dl$EV4lWKBvrhxD1<*SxlFT2Y^VE^V6bmFN#DyVs$!gx? z{(QJoT)rWva~vmHTv}j&A1C$|y=bQozVMdSpAnz>y88)c#vs|mOV`S(Ww5ox4*8px zc0@hm4sce`|FhrZutGmQv;jx0?!XAa3i-vduhoNrGp3%sZFfF(LvK%cPIrLM6jJHo zP)%7S{o?Dp z#P#ZIA62hRVFfu(zQ35ScV6#vC9GFdF z&V}OtfI4dbr?_fx^IW1D@qeK_@YUxEz`&Tr50b&x>D#99v+`%CB^|&gdZc^M%y~rA z;`Ya*lc{*`L=e67I1FraW#Op0iC`Z7`rvKrd8yA|B1Fy-xto ztA+c)hJ0v12u~GrfzCs<3~EPZ$Zz0AH}K7D-vx`F5<@Txu?rxG+cO6n@W@M)w4xm~ z=dBkS^M&d50+vIMjS*94CIY7UB~8zgAx;`uS;MW`VsOT`dQiZ>0~qpY<_biLcP85DyBHcn@dI)5K zRWZPV*cV-ZIPXHiuohq}UOqoKuqkO8FdGHMolq2KMWDgi!f{97WqM%TX=|L)crgeN zOkrxP@hPz003aBV2HPuOR{r1;P21ulu=PT1xF-K_n%e+)#Gnv0H;~_ z>oj1jL9EwjKwNboZp7G!D;obfAntnI_H%uJa*4sXbu*GS^lB1d0DRs?b|6?OHE?-U zXn&#~iZ!?_zL%tfSTR>%UX};IU}luSup4LF6#$^u>!$##o=6F1Tt`G?Psou zaKTJqYtw?j{&>Mf?bmyVK*5XwW}~kAQj|VU4-7EJn;8Pcou&n9)_i9bjiLZNL91P6 z(i{jz1ja4Ru}%deV1Y}XHm+iXH4gzPcPYTl|1X%W#1eoYP3Jh}cUR?iX`H4qv`4?n zzm?7A0LPMm+>ibnAwYaj9uFC}g{*ySQ+(D^vkgM)#5#}tT!YNqD>#qD@H?RW zYlL0Z@73rddogghYzz$Y&X#Z+T;x;TSgrScjJ_;{*#u=>fYtwvuxp3eH(ybX6&pYB2z|`~)nn3b{%(L!86k6x8>+$CsXQ3a_OJ1bA`}CFmr-q#`i5 z|0I!w{%s!^6juT(25NrI);qj<3}pFNr20>`6(RY0cdBx<3PQN>N>vz6xcEN+IZkXJ zSex^t8QD|+6>wJA$ZU{{uI1zkoL_BU{9^!ZO3rKPZj5xA032mw*qgq@R1`AT27wbUJqYnKd%hG z#ikP3T}x20GVv#dK19B*OI+d8U{VCmsI}5PT=0vk^y=_5o6=<`T=ut-7y53~Fgp{a zhbO^}u=_d9$p&wA8{>?Hx*dI+1Lil5)a&(eX2|nU;72bWvwhM*(QIzbpt^abBDhJG6BH z)s0M?rv$+_%MuaK0AjlZuewceth=~Yz$=REJNk3JA)S`k1wtwUGKac4C@0WRH zwe~EEzMT-c|2tN+Z?!h74n(H1UDagg%W@d2tl(ykBGjNM%gb$2aIbw?^!JV1mN^|u zQZ;<5m8QS91x@Brj8U_s+*+)Fb++Rv@tmOdOou?3YFsu0MmsJ%4lbH4x6Hl8xI2gcBW`_^R1_SpWP9 zS5c!+;M;TZiQ?h5ESCdiw1w{B$4VhIvuE<1J7lL5+Q7W~-JAYv*85qt;&7~~s!0`Y zfr;6*-?N*Y~Rx2CJgoQVT_F|ijC+3<2DKhqS;S?SR*s=@! z&gZ51&ONUJ^`!n!8jYlUQ_9Nw(v7=(m-Gz<=Q0jsqw)&}(r{B8vYJ1fdWD;C=wpB3 z(__5Z-HC6qu`$N8SuJm)=H4xh)e=Qd~WtJbjo0J`F2tU9%s6LzWp;vj~t33&`-$CsF@;AKi4HGf_{BXu+aZvJ2Z|CWV zlXZwpiq~KCGh%C)aR$IKx#RYuiLwDP5!2SMo~+dkW?uXNyV2 zI*1O!kWbcqU0qRdakJZ8jo3*Zd7)@J$N+fP_V#>VJmcwH>qRqmeEpvc?0BtcSh}-M z4`Iuopk~+YcWifV_USq@C<)9|N5_Y6YCn=ExcL-%8uhDs+N|9+iZO zNl-XX*Il>3v2Ri+Jx&KH6p3N#ZcUFx3QX}A62;%3mz2%FE@9UgtcvQ~3%YrG@ryLn zoSNUmlcz!FzcrI~_V8DoGd_$RrMp|1q7#OCJ9T~$$pqdwkQZt44)UjduGN%kwQLg} zER^6Q@_g^zl$QA&_wDQV_VqMXd59!oee*@mr++Y?9>R5lH;t5e={4q^F7`$o9Lrnp zzpJ9-l-Tj(zSEL}mha@f@p9sB-zGFD7Lf7z;j;ANu0D^J#rRhxMg74=HAX-=qvc?R z5r{&X*Cu)vKY2a}Nnqjm1yAp4pP109-wQg=m_W>_0Hdmz$)Z?&RAgS+sf0nLfIP4ZvHiUoMYKSRJrtc1-3-&x0Asc+&Gf8Z2HzwXjWJ*MCks9ZZ~Mag3g$>ZJpB~f?$ zDCfQ8nJSiX&NTo(f1655?%})*qGeO7@`uFgMHG7Gf~I{NX#Z9jBNV{$bhr| z)GgROFWT98XF{}5HeGKgy3sbsw^+zWo)|=g^VDj7uZV49A-~|&C@%=Q|9g@gS4y(< zaZiAF*Fq0!YJ9-O)wGu-VvpoHqn;pz5F%33|E&X}4H_67elH;yeL9 zn+$7I5=Q5dK@J8v%71NCWgIx_6!Bt({}qC>a&{t47oVKO%(+jE=x~1~{PE;{yqF5) z5cAbJmCntx=U|xJbiUA`_h<0rWFu#B6)IAqK@sx>^`<>8`=R&;B;bK3-2QJK>?ORq z_-(gL!WjB3GVQ6qHLx`pgSiM$*b<<`-vOfYXStEl;@$#-zY?D3@eiiEHPu@)ka?z7 zDVPG74YCa7!Hsc7oGpY z#OvQDi*J9GCQX{5;#)EJ4~zWS?E#3CG2J$xVAge9`R<77E}q|&m9@qeqy>olFD>3H z5XGAI5G<}z3db_2FO+Vxb1PEYpu_-*k$Stm_Nbd2L9yy^zkElp<_sSB;DI!c;6o~m zk)Ot1F5~!;$~Wfh-0lwF?t;?D%;De$0H%!yaMC2Fr>XFt$6)CU@Ra<4&s z$M=NKw;Iq7&+d+&m7ERb-JhZN{{WKsk0syT>SrMwer}z3vQLfnQ&;9=7BI*e50^u! z7GBM-KMo8r)&q1USo}$pFk%{icJ!Pb6``X}Aen&zJ~Pt2pE6NoJk}taKs}Tup;r?E z(_5+iLTMg@lzuEI^6{(YXig(~GblY|d;~U?J>gc*2YA&|1ck+Bq?qhi%&>bOF;Dst zVW5inj%nRK#kNf4zS(o>(`&wOzXw%)juSvCk{>p-oq*yDKxXnE#tHu@0x>w7e#7Cs z$Kqf^W*U>fHF||lfI;nKiOwr!3j`-Tk4T9J+e*t^QBu@>e;XC)cwneAO%!n3lR`<@hp;)B@3?RC6HV(3X@46mEDS7ehLP-OpVHdSFv!(CNq-u6@*K|@J` z*At0VV0MykGQ~+~%uem$7T0?GDk+fz*z>@nVMdT_5XM3>w3RUu8`n z8rGBaoJoSCs6?}T&kq(wD|K8smKs)LevRh$fRbCdz@qQnjbho3r>OWn0^G_Ts7%lgWxU{KNh;DqKl{|A z5w^prl%eL9wM=dqOlDC=!)okuojKtOAxsAD(qLC?IZZ8w8}^wxjgfrAwVueTAy+aq zWO=lc$P!WokKQDbnwCP5X_J{Erl| z484!KAOwtYx1hu!i-rOvp}KiU#h^j4EL;^$%1LYYqW|?cEM~pt;hD_IW&^8SeT1wU z_3fn<@JN-;9SshrnJ9Da{CGQa-FdI4Mu4^q1X5vJEzkmz?eJQ%vw%;rI5%w0!rT(q zbqo+A9}lUc+J5HlkY29J{QS|a^*X4%ykR9GNZ(XOw4)ZVBSy{Vpm>#O`}D1{B$j^* zpq9VvG;TR%ktWTS=Z7RC2vWkqk_0CimkbFrvOXbq?>ma%(f&zJF2Z z(Tu5w)f4DAY50!qNwSfTSMyni1*@&ehXtJ96&={Cbnfl1;BH6nbAOWx+yN9YbD3FX z4P1~LFb;o0P;?dj47f>M)|khBY9_RdO|$YB@mZL3l?tv#akry137EJgc4)fK^;0?@ zaeYC~O;U5S^-${T`^dWb;!RA2ft#R!M#L#{=y4RuKp(^h>~s662az64z1W(&@3_Kd0U~|?&aph7}NIi=G9U( z{uYArw)e9o`ot*a7&g5QdMKXJpt_gLTcq1bn6c}3c94<^FZtcy(R6$5y_Fjpun@t{ zTd7#$Z|;Pao#it0f~c~ZgEnfd`b42JLkl!_r!eB~maQ**K- zVN-dV==ShoN?z*JOGIUWzUuy*@WtH8Q4f_YTi=ZK%LP!zk|L)IlUL0iQHYA}!jh$M zBOI+IcWB1@QfUomah74_zC`azYUO0fc6r7THSPJBr(eJEa>GkKt1FV^72|T7{(19H z(!C+Z(q-!}_*U3p0xtZz5hwz5ZR!|AsxishztC}==?1zn=C%$if5M@4ALfG_Y}v}b z{YEgiTJPSJ{smS_A5HU{dMMx7cIXTO@>?!P3q z#k@vozNKvjbiCCgFkJtLZUss!Q(LpZh6QJ&A|(Q9VB49>h^G$ou#3^{Nce*t4P&mM zF$n_nuJk-m25kBG%=f^f5HcN-S%sW|Kk!`<(=;t}^1`O@3vTh^%9LFy9H4dTEFe)k?|$0SNx@5epVGg~s~8WjC-; zap?j@h;yJ7)ZPG@ZT{7*rW75e&)Y;BZ$_2sHV!HDcNNJ}8jlSMsNtIdYMebVI!`{B zcF8(ig2!?@^Ec=b(cy^a=cqr`K%w?80jat9Cx)8*B9t)r5urZV@zp6N%3tC+qSR>& zmRA46eL4=IR~XF$c&zgxg}aGI3;82DX>qlY9Cbg?tByT|9V@awKolW2Em;8T((>oy zd}3N^ZXENtchBq};SgYpOS%njN{J`5TaFrV0G7!JSdUvw&SO1MW!|r=7yU^wM-RQ? z)i7w&>240N|1zim5`Y=7HCV5j+e0Q4{5Gis#XZU1md*`iDb=VDVj-(RG(hrV+5>Bf3~2+P`H#uwl6X zJ4ovvAEO@;2QU~l-L^_z+Ms^gBE6DcQwcE8{_Fk8s#!wQk5FIOi43v}fw?WGYd@G3 z^UDlHOvnWka+NWgL~mC`&%>ue7%Tf2@s^}k=|E3TAdZODOD|%ug3l8`EKGgQrihH^ zFH7}4G5%)|OmZ{Rb0z%c2Vf$g67!#O5(P?kEY+~54gD@@!cEh+KTRMsy%fOjedZ5v z*4y4Vnyil>7Kta0O@MqvP4CajGEt`PugHpCsTb^^&l`BmyX`&iZDbhX@V{7i=dj!! z{1jr{K#vJlEe(L*N$me@PJ9K`pYAl=eJ8WDHmk zLO-O>3IMGMBO0Ubd5@w(2xEcho^~+VY1%e+COx}aqU!i6^CVF9Vn=?A+~m4F_N?_X zudJy>9(XRIL}>F{w-JT9!sq7g3%MLp0H)bw1b3v>!FUlfRab~!#GKzKQ)!`H^Pn3_ z`6RMV3fwUUP8@=#`!8K0Jh>N?sSVJ`#0mbVE)G_@0|DUZYW(W(F99Sny1u>IbMQ_7 zvTXwzzVLg@eXfss?7B?X|0WY^wBUvKJnqE$nZobRRa?LLT#aWJ?tR^X6<=EIOniZ- zTrCCSfU5maZjIyF?zBs?f&1^@!@ff@U*L%&V?rIFI6d?h)U`Fln1~z^EU*+9-95yf z0ryLz$os2i(3TM1Sghp+_C32;O5r%=e3@v0tF3%hkQ+VXw%Dy1R}o(TIl0#S4)jwW zsCzmD>~p>b(V9kA->DkMy=FNd^lIcNn1b{){{f}vQXgx1GeBksjlaqeNEWl4nN*cJ z<6s7)nK0K*MA=#o_}@%GOY=uGXlTLeUC(0|rT4J?4jj?l+4^S;86FE>pv%v$IS!F@ zg5m!FkT@Ho4V^q^+@idX=y+OSK;#Fm(VsJ%F{nnF_^bwIYHeN^l>zW_bjaaUC`t92e}{rGK$%w`-SB#=eo^dET(RJi{9M9 z)ag@8^%j`0CVxxPz|Xe%i*D{K%yI)4i@u_zbf7xEEzgTlB4c0G&#FEk)eukqC0GKV zr7q8FuK%gzv4@>^uZ&}n4ryg{4x!eUx|T2vip}dX-CCCK%?i*5jR5wZsO0)OJtKY4E_9LBTVEdrrM#gC()m!&_BOUn5Z-}`& zD3!fD0~7wUl^@IXjAQM3{h9Bh2#L#=>S4;xSfJPMvyTa0H}Ef6$b-j@NU?@!`F}1B zsJOTd&jBj@9L)qMk%Pr1kApZn0G!Rz=qmF(hmh7l-+{thtM_l`vG4e*J37>3B%R6 zRL9Y!U@^7Da*wmj0JUPP@%Ce7Bj}?GB*zl~!Bu85iH7P&_(KItL{3D-rc*`l-T9{U z`UJo^ask&Z-dS6h%jHm0Yc&h2s?IOT1Kt>1Hm6&oghO2zI3_Hhi$kGEfbs-g1lu3W zt6jehln6QOaokYp;y*~4UvAQbJ`QkZ7zQQF=T;-sA{2t|Pw%NbXWl^liq=*XXPM;{ zB1O0i%=A8#CGWW_Q8;s{mZ2Ae;XG(2dlbcV*X(uT$jywe;p~m)gw#HkfFfWf+rXzF z%Wv|6r0TM|%{BX=Cft6Yfij_f>W-70>cz~jXDTTTz7f_1AidXbrp(i~s^2A)x3dlgTmyv7^ zALBjh?e2$m-M?B9TR~cN>l*)Z13FvVdjQ-zDWwU^TDC8GgMSHlbb%&`dVJsjwfHeB z^2D)M8eeuUy|5&L)E?zN@#z#yj~j>tGlo1799Boe* z-)0yTZpnhoF4ViK&PSQ8DthB80ng3$d@CIex?IWmXq#8Ao)ihNBby!}dlk}d$T6jm zd|H)@!z;m)FKVQ&%L^5#r+T}U8=isUGg3mI<<$LXw2ieMg>QBI8%)a$kyT#c&qiL* zKV*bWmcB1m{usRR+Wfvjyy(`lTaf_$yRCNyg5oE5CF}D!dH5@tK@wICYH}5!?q5Ml z+}y|?97ZnnFaVM;B@mCsfb{tEXN7Uc3ak5eQZ9kBAX>f} zB6<<~;tpH1i|NDFy9(qJwq}8oF)ludf{Z;-C#vV2kWj(seAp`W)E1-c=mC`z$s*l~ zHP}Pmo4wQzLWR}?T$Xp|d9+&G*SG{){KBNnO!BHxRdahLqq)AYU-OR)OBQkI!;1xc z`F^9?UB(O#idB=4-K=)>%9(U!s$k*=nWem<39qzI+%$Q0R=0<^zKGN(4PiT(m~7 zq$xwY>43@F`K9$VwMj36HIuC$XTW7GAjpZpA9XCi9aaq0$~W%8Eyi5@*bH9w~Tz5Ewu@AV&Iq-&mnTMB_$RfLeIu;x1YZDJeW_eCBqjYh3A zH4^l$gM*d?@5|P!EEF2ytI^F**}nK4kxjT#1AuJJIAj%$ep&)~ZKytp5&%<-O+-cB z8V!QcS;aGRNIfD*IF!iZ*m}e!iw=wFv70HtRS54+WKzlK6&-hTq8nej4Ey|sx!^6d zXSbV!dPti7gC%!bZ658H@?o>JBPYN*?q(s6bD-2 z$njPM+2%3Rj)>#NYtLwu_2 zed6$x({K_9w1@j?iRaW(D^2E})?_M7ahMom3=1pGo<@Spn-J?=aHvU_^mho9 zrco)t&YN&h0A>hRC(QRD?Wh)NTc-6)@Vxf05&hNO2SSPUBi7FM6D}ONZ=tdlrw?wT z@e7qw@ge34rojECayR7)T4C= z7d$sD+6fZ6+XK+JIw$2(Kx6B44vfyybFOeRoyqTc*$y%*BgZH813(9R6GB>dp!0wN z?Tt3}w_CxW>mMEGlv}=3)9THp9F0l7Z%zCV%^&@6NYm!$q*s-fmIR!JvHglY4 zOtzq_mHRp3@UGB5asPJAxU%+M|XYxg_9&*e3% zF4YR|R(R*u7>Yl-3_%RqdwRAOV3Y?%Mb?cF#W)jju6CDXr1}qW^ zXE5w&?IYu_7K3RVRRjF5nYl}f<)U6C#3)b;i>Pw$iA2y_WnQk8@}Ab&f8omADdH}v zfb<&y^5?s|!W1|Vz#MHzaf9mIBp3X|%~p{gp`eZ8O?7bpY z@5;^^FNWy0jGLk(353wc4gKL0 z9TY;=;Yc~mdkZC@jM$w^XQwx`0IlUeW{jyCI@=d23_l#_yOjW+qx6}JM3x&s!6C>3 zsV>!5vBN+@M&2$GMXtRkN-v{|8zWxz>Uc=hc?Nxnw@+AqHx9#|rg+Phzk>x6c#IP% z12ONS;Ruh8@wd(`L&YT4(Aa^(1c-@)oK8ALs398$yAt|f7v$XN3^-L&pZZ1r@-@7; zaY*yoC|jV>Xj#%g+Isf(cHr{alh$hac8|in5Gr;<60f@-&JGj2AkEypKd+FJ2kSuQ z{r&J+C+Jm!zc?Rxc>*Q$J?wv-n%X%afu@wI z+$CdfY;NM+#cm(6M}s^4kZ+Z7c1nWZ)`LXL?O|x;JlQ~pzGReH@B>uZoMKUUtKK`~ zSFDP~0uh$aqDCa!WnAGI_h(bp#UsT;;{Dkok%iqOYwXg7; z4l_Z_1*DE?9iuN{^dqUT)pL$2ooJY8@l_7n7>P?+J~RW8(7yCkt4p#51QEji>t?H8 zOAS~@?-|nacBbT0EM00)XeOi!*f@1yj8NH!bVA)LBy(f=pKLjZDMX052slkHqeNF= zWhQzR$}-PoVSTOf5&05^7*}vf}N*R zphXx!+Ez`R*(Z$~@Y&fLlk@gR^wDy^nlm-7kqoYiB+Rp0y&?Dk-l01|s9YVN!q} z;_%y(1P=Ewk#;tb$+!jbh1#k6=m-4Hfk#dY@$K!0a&UjLZF!-rY?2`A=UcybwdE;q zjgBVs^?W5um5>bp7?~FDlc2sn)zZJ!Ax62HMn(qbbzm6PLdEKCa$@dBVc3%qYt;9r zpK5R0QVS}fOD1bfi~x^OS`S7sf227eMRFHa$7`!l5)*-&&)nsR@8tTO4^ggDoq^{FOQhEo7xvV zM~7U(AJ$S@4DSu#GAt=~Mjo=MFEnUNMK8;B%?l&@U%G$aPOP!h2x93{);ugQ{c%_@ zP!l217H`N|fmQ5SL!vm}M9Q>I;->?W;_{W4X$OcAczq%9f%H7%x&>9u3`^aI`4-`~n@!Bj6lF=1u+*igx&qgjhPi z6snDklmI^WH*@(+)gvh}nG2ntpFecf02LoZ4@Ui8QkopO%Nd)-C@u-R}Xy`=nY~W>$ zpvk*B^nX48o|hK9geaHj>_3M|5Ha;Htp<27xg2z`u}E7}{7-FP4nq_li%ob(3OH-t)f@$MV##X21tve4^;1VIi0()(6hNZWv)hYB|Ah(*mOHZ zC0|UCLod=7uNloem;4{3JedO26K?EQ4X2l*H7e21^=#K#XwIhMewO^6q%3N5N#a>F|4JYaZ#y!L}86N))rs7&|C z=$nshXIXjcRfH;{=RrgO)WYJ-m6|1y5w-t(*;vN-#LLcxP%57ksYIhZfq=*Yms3kQ z*%oz(TfAJ0dN3&2E5y0>@;_e`e?Z|1P9~~T9OJE%=%lCfj*qZIK;Q(&V>Z@}LAT4C z!i8R=>ozEgb)+jze9EVl9N>TW5r6Rg)%NEfzegl-KG97#XT))HzVUCmWQiXl>U)Sf z*0G&5K`ycqq54O!+5)Tc@K5Wv-V-3kbT6>VYQzRAJ?88z=7*$Bi=E7y=4ps-&t}vr z)d#e$!TLiVcTX-oN@<9Z;d@8Pf*OL zrVhW^wG_=i3ug~SciQsQe;CCW6T@(S8_3U}_DrtQ(P$s?#Eu#4R};k7wW3U}lFq z2FYT_R%#XroOee~-h!kM*C)S`h*dM_w6Lg=)3jTy(8d&V@oSTsTc$i~)nB$=@}E_g7(;o_GO5?Z{+^TJ$j;RAw>d_QxJE#B%X~c-$Ub6FZxG)zrT9v@U=_&@C6}1NOF<^qfN~*z$HA4UbDqI628z{(+ zIYYl3G1N00h(2=th6&{ZWvig?16ZF#EAHGS;CN$-N-3uLJP-F}e?$APMFoI1zlg<-`PuM&OwnZ z4V?IzB#a{dfP=hy+-B=U$%L}Uq8sH*#_ve|h#fSgFiTG11Urp&vVl{CJ`z5t%hE*K z?Hy#=QqZX_dY@)er8Go7w758oL> zi!)w)f5C79NX^V@-toC12sn+{MK`VvMU?4V7%*tKzsLAiEifDRgWp{Ms3>w##Wvk| zrJ~ZL25s&qXrdtl9i)hJI~yOwQVe>kgEooZ@gW+%Y?VC#%NW`~5?|L@Xs;d=o9Xl8 z#}?bmsQ0vWpdcCqyDvK>8bB00U~Dp%z*<5J&bSLx#F-;nH}Y_oN$r@D_>XBycBX*i zc_nha?rV$&KZp>rgAa>Ic@UmK^S!-W&4BcE7v=^Bo)N@!5C!j%Y`6JPn>5cx)%5d5 zeE-5Cfdxqbnsf0Zu#6rQriKu{6}dCBwrGz4G&g9uW;%}7ULRpOkT$b;MWhFsvaG;C zlrpD~q&QLJE!gFLi7|axq^EX`qR$+wnZE0(X75+fJ5aC*cfwr#9R8uB>`ELym?fMZ zuAuI=jDz+S-_ij0(`s9|C+|vtZBMqQ+tYCB5&YpFVr=kWr?t*t<573E-!|NA_NlP^ z?16N?XNK3{v?|eaeZuUGdB$DJ$J;{3Cl>gIrucLf%eC|rL>7?;K?J=$YREey#0WhD z6l0T-%dqwV>0KqhifP?ryaqr!37rNS~TCn>q?f?&7sWx=*O7f(f z4Vpl#8?O}5pn&4~Oa4$NRF~9v-K7v-bhD%N4WrHg#MbMCO;%K{W#Jor`j~bOCn3$A zRbqySSK9s7QRAwj6gpqQPd4cDew6W0$$3&Kz^IRZUt}Z2bW1uTutxx*Nk}t+pUH+2 z;${4r?6IXB2Y>(d3qyx7m_4X}(}x7cre^naO+H{s(NfS)jTt1z^EYdi6~9wgxr*XS z2dA?B(>Ig`k*aJ=J2*vy)M&#iCn3n}K5-5Vi8Tq>REhe0J*x4ao z==u{w&JHoytGLymIMqQB{>$3M;e*&`1p2~;xIO^&VGp&s7&1sFXy~XAv0vpKL8)^|7~zW<== z2+&xe73DsG`Ol5Mzisf8Id}gcX+lK*7U^CQ$v-y|Gr^5rVX?b^4u3PF0f9JY)SvxR z1ZNfmH>ThD-GY9>zfY+>1mc*~dO2p2?D?Gf*a-s z_pZR{-oHnTxuNI70O#`62KJlC_wU7y?3FEc&DA3*c``b6IsI1OzWS1O)$J1cZB_$^QTW z!IcdG;fDzV0)H9;0+CZzyP6;ZLQJZhq?o3M(Q!6%D`};_l3Q!r?M_`I8N_c8utDET;>XWLVZR>i4^RQgM%neX@w#R`ELzJxDD5(eBz=g zDF5mw%TN{^_|*GfP4F;(2Ia?lO%}X=H_^goi2sic;r@kS$dOi)+`q;UouQ$GYFtT( zBK*gg;WUW(|NnQ1V~5>sg}rt=zL$SZwfXAVpyD_B?;zW0Y%K7FwWLIi)lO26q+ zd0q7OB~tg@UglZs3c~`MIke$VGnuvG>zY`cvzXrOmJJZB&9vqcYMJWgSflvAvr~iV#jz{33~Dixy{mH-!DhxC z30~;@SSWlI?AZHLr)B;w757h#z$wp#y3zn$YD{YYbzg|503x*RmKOtYviYvwaTuEMFDg= zM@dQu!F;Ah4*X=vQd2_ln_*mozi?p@kp009n}0nu2uTw1IY2EP zMDa{5OI0H)?A^z@tv)LimXEs>B-q9Yw>I0IdndU$hO-&D6lsfnk6eWszXqEW7N%@d zX3lKqYVlMY^k&<~OQhYZ#76Ze?bNMC*=RjXj4rk2NLeZL{YF|}5=z=IU4Mr*`+Lq0 zNDKCbS#>vdD$QQ88qD19xn!nUFqd$(`&i9YRVQT5`IJM|K35v>Y?9QWGoMHl36TP5obYpl^dO;90~QxbaE!frQ>Wyr-YKX=6=ygv5>JW9; z#L&4{L|h%tW)c$Cxm}${Hi*x=&$9+~6lDeLKM7v7dotOMomj#OB{_6&F|Bz+!#gzA zMOxajnJ-buGNT4nq$8vt9DxcE{Xu~3DP^3zXdt~n3!VT=kMBuURr0=J&fZ>}oM5_S zW;JyA`zYp$>{@vuWo9}>Zv{e@BTh?VcDHRI)cWF2gjvCx=U$beg@09~F4u-h#2;ch z#pH3QSvr*+dU)bU7w2O{WV!ov0l^c&7eVC<$ZVy7SIJOsj zlUe<2!-|u;YH{2{r-|zM3w*eL(ua=rV$CzB(zcJcGnjd#l18N$t|5C$CCHNw%{P98 z-O>E~T3A&=T;#JtC!M`*_GOY-b10`RvobYi1nLsH=>4mFM_u|$;YI#Eg%wp8>;CHh)bXdQVBU$$F~!pmM~jz(l*Sp~$Tf z6Hm$s4FaQuWCZQA4|y>A6W9-~f7WjCJuZj5#*NV*yu7&JL6=^1Tse?|UJe(rjHPy; z9)OTT3k}%I;(gXhp%Q!7Nk_xDJ5GMGC8X;*{A%RL+MLMq&m<10&7>kf#N4sIk)k?y zrO*5(l6&R3N04h+_VXe(flaQ?m3PDj?!7kim~tUi-EPSmg`;@J1@eLTm#H#w==H^y zl*y9AL%;d@eOIBqaZw*ql4QwA%u{2k{jN!x9vaK!#RVqvIYQy0-IzKje(#&4|0b(m z2t}q8`_Te&jL688|9-05r^7=*IbICI#O3w0_;J|egWPFCQg1uM-xBo~X6Zn8U8dDj ztZ}qfE>?uukhmgPyUH#wu5Q&+uFa%^d#yu^{Il{xMnL-uu_NjMrxg0!H(tRIKzU1vS;i+_6CJ%F7u#NnUTw}^B zW;M=UkGn^MVU54N)U?Ei6=XBN94!~&5a+GAOrXVv>fGUGTc9+e{(efht(8ClL*JtC zw;Z3aYr*6=2?e{S`u!Tw8+O6^i{O=Wekzh8@0pr(@jx0qGqn@ z_OCB;Oj?x8yap8DnxHWEsRbajLLAB_w>fZ}ty@RSt@EqDz?tnL(R+@fFxZFg6)B z@@?gk{ob+NmppLirz6JYpVTC9;nQM{4iymn5opLECP;IT)FL!!1x98lU&hr;r@bM- zfYpD{qkd8@+vnLPzBN)}6pcqKx}XsXzp^(Zz!ENVbTHb9;yDQSe#Q+d(P&^oS=ZAa ziOc@fFq=M|0b45$hn?Xo5Bm5@-C}!&WoW*&l!{4SQze%#ksL-VY8c{9>FHEB>d#0G zTNe6Oqb5!Vibnayg>$E!&e}OPr8sP|^hVc{I*;25p8~UV`74=Q;G$OgB?|#etWF%O zcAUed7B3vWRM!`^SXpa?z_s!+6s>k8oxP&ApM2CIGLgwoTG*2syB3eKk6k~Ad*92M z$0Ab!UWkV4o+rnMH4+s#Pa|*>m@KE!2tszV8$>`O9j?C9t$yhyMbIZsBQ;pXF|h|F zh;W#9)xbA9EUYAj&`1$)LoNo`6O*hi?>;edTL-`eb}|ER51Z4K)+p$;r^JbBb^R5m z(K^DAP(7flp>Ea6KXp?p7m8ZmbDq+CQoQ~el#a!_9NCU3QDu>`Bv2q^st%RNv7(<6 zs2FE|`=rC>>DwkAmhFi;j9qp|&&S;@eD>&Xonh*xgV{Vp5M&(&-%GaGdY0(SYa}V@`{1bIQv6eE(Vs_UVmP(M?pBLCS_vq;2D!PzgtCa2GMTVEL z5E-W>qBQD8B^0a3L((44I4Rt{PYTm}^TBRTUAn*!zp zZZV93TFeXlVXZ|;UmHyee%40i@h!{_fZchc1+0HT?yuo!ESmA9nujmaLQs+ z#X`Q z4nnRVolUYy{J?-Ejx|KgkzBXJK?dEfUD{=IV_J38e2~G!(&*bcG?g(2@5 zSz`(leXX-gah{b?G7 zgC>(6I?>q-W!|e`Nh=N?vB`T93Q_P9qIZf_F4Q3_bIRh}rCMF!i;4X(FHAms-FRVv zENe#b^+WymOd1qUoRs#$au3J?oiJPsZai2;` zEM5dA3^MghbW<38z;6RBg5?EVeuq5S| z9~&RIqo;E?KzdhCT!u!+OI=niiYyNm21;(*1n@HMXT>fOmvcQm>F;OWKsiBSFtQXA zE$qW4-0P)93!Z>g)3?h~GjBUPNn0ILxr;e?mHFA&%p^pmu+AKrzgBVLJ=ngBjZZf@ z9yAC*UkD-2F?44_jxPiuGj`i>5P~eROw_VaRLKW2Kb5e5urwcaKj@in3auiutkT;% zx}0dYaYql1(C6tSUNs#L(T@xAB!+IMFcUY(3*51RhPEy(%dIP|qsnm57`qEloUrA^ zUtZ!T82zM|fE@kcxlF9{sD0dljPPi@nTOHQ9g?&CL@^ks613uUa8`KpoWVssZ)Y!i zpx*MLj#VoZ2)4|I`or!oE8_XQ8#$ZgiC}Wyaf#)hzut#ET#MSRGh#V#*$RA9zZQBvh_GrA?xi`bjyW!; z^o{+e*#ULExXtESi<5^Y)wR`ok_W!>tv9#b49Z9hF)aMb3foimMCrsDtlFX==D|;? zCKT7n%r>9QX@6MsmDZ25=#?Gk(3HX9h52B)Xa~$)URDhA6g%D{*Q4i0gUx$QTOYzR z;lwMvAMhs)$fJKmq470UBex|qq;uk_M2!AvnjAnJ5D zo~&vhdLiv$Zq&J<3YhGS8kyc9Caf-VN1&B^Mc##82o}IYf=;nu*YbXjA?dgS_cYs1 zodZPmRhoM|tx>-O@I<_a9OJ~BjfeBC>k*14AQEb2w{%!$^E)rO3LfgGdD)==|t$P!ULZ0FYz zWo_#V_S+~btY@3A@O#Hdv<8)z-}R0s!CNuCC#G9cJd7@-&31U+vJvuJr%_WBfx|tc z2Pd}AL1~t?3#!pqVWFf-JbWEW@o(+B(q7^}LO(N1e%}BzoNJ(SFmA;2GqxOb8<(M> zXs^E06chFpqc1y1t?E5hm4+HQIJ%Ar#xjQca(WaW-$UagDaUags_yH=Si}9~BzUjA zVxekmMbFTz933=K?LY(>W=duwjW{V^wlk5UpqUXqk|Lw!1r3@(v^>v{)gruMA&4b{ zn!`gcrJYXs%21i}sGN@Kx?)QU88OG|6z&th!&Pzk4QREDth5CgCiA5tIpD8J-Wb)I zJgY@kghcUS!J)G>iCMHS4@fHkupZaC4khFI8(KZ}RV?KpIGW#;tSR@3 z4ZJ_OT-pXCtXL9Eqey6=oW+%a!mg~K)c9_^P=bwj8n7yatLfcjk`g4oM93PVIxkhh zg$G<$fuhe^bNHjsi(l;2&%B8Tfovl*tq3#aP%VxIx(yNH4o-eClTefnIq(5;AyTWR-Vh|^8i%x2=nBP>Ad4IsKYCbl+ z?2ii|WD!i}mBa%%A{u2d7*Xy#Nonx%})aD*k$pI1dyq83flYNKtlG z*w>ZA>|rnA2Zxpg!P)3mOW0}V2flB7WK99INT&mp)7c$Sr|{cuxLzBdkb5SY513ztrZ*lCQWENp$HW&M=w0QtI-=B9NM+)iQ7%ZQ+1d z;dn5m((>%1c1A4EjIX`T>q<#$WO^tqrhIQ#88R?YrO{-CCVa-iC&o2OImh_zLoE)p zNNlW3Bxa5@1PEZy@M+F1|Fp|#0okA?Dl{GbWrNG3y`SHs1WdQdw9R=a=6wwt0E3{{>`ictIyxxH&|E!(PQYWooCl8 zjxK*Q9lMtsZRV7C*BT+)gB)ejvq*!4^najCULbdReDf8StI&+J+=Q1quCM!TIx{8$ z0*`$3Hr5{0@_pz>opI?jFuf~@vMSol;jao_TDh_FI?2iY$|-Ihcj@zJXr)P496dQ6 za{8WXC|Q$~tSKNW99(8O2xRILJ0?2g49w!5v#e!Dmtth|tWB_IVLgNNeZT2M)nMYH zF8)bLoyLh2dZP_ClY;e3hcG=+(9k;iC*B0S4!cm8d>#kZd|@8=s<>{d>7BtP`K$*o z3?gXemvvfNy=wkkg8hdTE&Db4J?vrp{ZCX-#OunHcLcF!NWn2`siAN->*yQ*HG57w zXLAZ5K7F=Q$YJ>L`>}0w7V)KN-@#W1i)oZQ^m(YD0$r``TW6ft;$FJ%mL$&;nj^zM z13=NUZPTzQawdc+t1WRs#oY+g@WxqEY}w!VKOXR|Uvfts$3W=0ATSI&IkfogO`bp8 z59(ZfOF`7Jrre>UIKgvKT0e=EUHqR%y>^sAT37Y-5ZNS#2;`CLUVh=Y{dBZ+o~&b3*O2(@=c0?>w^B8>Jg;APTYEoE7AM{+PiaT8sh&9_{wk%X~LzzqX zyaNbGo-rx(nD*McB~q{qga)%92Qnn&dF*5e0v7RIAe!Yli%cc)$p>WlF zzAj`}F;cOZSdjJMY!OJOOueYhWq;ju(a>(8@^Gbv)&0k}vId_Ax5%%=(7A3O?_nI& z>hAj=^A$R*di9bZ8PHIf*=6e=LTio<#>tiq--p}nSWeeABi}pAo8ZU$pEVnv``Oqc zk8!!aw_C`;b!0sDtq&(14VmqGWu6Ts7x!GhXTX5GdGILZpP_jWvrIk1dzH?(^6%#(%%!wo7P(^q3FU?XO+MBnMB|t#)01w_BwT zT`$S?we{stCl40t9;n5I#qSiz;-1CBS3S0)ty1cbO?=m#$5@2CuXmJx{g`iYSg}&F z0bmv0xV&bEm3PM7pJ7k}m%VYI7Ir1jtFYTp3=U~D1WIPJ$*`0`Rw$>(nTfW@V1svC zg|UdKVeoErHr&GD^Y*YYPMwz(_AKh+*J2%R;<8?@;}0PP1LQ?Pxk0suk=qD8+4i$F9KdcEQ;;=(wYeGDC=lJo-bXgs3$G`VRMmD#WW9daD}InvM`D#oWphiZ7Nyim(h>}VpMeNcet){kOXMr@&r z{q26dP%vJQlYpElZ+Ab8aLoez%cs;F*<8cEDW850QZbw8YN>N`o+>$iN2 zehtGFyAc*r8hr~Kt^-k@C6vNQ>p|lG{E$V%suh?=`U_{nLtzn|>aMvQ(Mfl$Q?T z_R)13>E8HNUG9)4F4Gnx?u@4}w`;7)Fvg@48-G53VQou2^OfKFa&O{eRn>1|<(@rt zN+^>AL~^l*ueQC*L0SxZG9A!)1SGym`!C@4=!QA^hv4ktOi%gSL7eIWyuz z8bKl{i%12PWTCnopDZ5l@!nu8tG!-JyBZ>iq7sb&FnNoAC1 z<|Kg%_bLUM`CQJ*ceCavT%~#!M+w14^zQ+-M&$!@8E9ySE-(i)Z@{4Zm2hKPot)Cr zlxwAy-rkqstpG|Ul_;&p-6)UUlnP1}@1#Oy7HhJ6cOt*3z25A7XakusZ&RJz2t5JJ z6QY+1a3lh!v9`?aM*2v4vpI41Xyx$WoH1_PF&z zTzf&syl6OL4`f&;8WdLH(lC0my!!>bqTT4ACqk9X=VCXg7B4aYdnY8_Fb zt;J)_oSrUh)F3bBcQ4m@=cuF1ejMhm1+0suOoK+dd#L1ZBw zZgVh}@qCM$inMRMb%$m(u6M03=b2JTzh!wb{a~4;2N19>vs|lYzr7zb`ZQmL-#W}E&Y~Wmec|Xr2 z`iUI0e^*pBk%D)}uRjMfC(9D}5~G)R?)q!#2OB*;3>P+%1K%tgR^)umLp_ek84|uH zbAW5NN(R*^Qok$Y{3-@XYoP^d>v%1f+L*q@rDm)N9%}P%A=UzU?koZ@QvvlNGqc1- zQ#a1$w=vj!XLJ3jlH*spAo`ynT1Y|~2a*s$YAXiijb<&D^Xt2yAJ-p}Q3#Ryd;R*9 zAh#ndzaSdq*J1YiOA_CCp$s`DeA1fcYUEigQ30HzZ!5qHq74%+s^nY`#eLU4j0sfc z4IU3KCIoo|8%HD|l92imFjg)|nh$?u+?qBQ3p!Wt`-T-Xq&r^Q10Zc0-xAE=ViB)A6(`NGTdKryo`Cz@9)I9LNMXz20;ap;Cf>@Xpg5O5D33bSA z7lW;T$=R4iMiEPdqIe%pNNFNuzZfR!T!Pf^wi6zhNB{i)f#sr`|wItA>(~>vq-4>cY z;eqkgH2ZD}kc1yWt03eVFkkE1Bt*j%sK*GM)ara%Y?Dq7wg*C1D^#hf(-a4M|Dark zZ|40HnTk(Qzcn;SEi>IY?F8`Ndl)K56ffOm@fI46r-aH+GO`&^gi^iTNDeEcAaP$w zBRi4zWfaMht+sGrBVJkrVpAZ1=MfuT#Lg?NF@8?Rupkm!|AR8r@ z9|XrS$Pu`%eYHR{C_9r6CQ60c&KeLOc-VVz!3lC7nsr>18fm`<7afnNq*HI@ysb}GAMq|iFCS2EC!gqu7c=vh^K zvtreMShtm@L#pG`ieAGwqscIRIYUhBt0X9}$`V99 zb@JGLR!rF89NkvfOoi+G5pa%2XJEk*HGBiTSHNvrs%7Ix+8TT@uM9ysnv{=Rvv9Kx z@fx6AviR3(IZcm<^8UsR3Ab-r2iO7_x*{r^KQ1|$lf5z}$}a8-0hx|IR6sh+(v8;R z-Iw*fj{eOU)Y#Q|;??Dv46V_XevFp_R9&g>7-QTk$r&-90w=653^6j53F_nn^hd>% z_y%b`7BUbFG1D+B_b8KCYaU;NlsT|W3~yyJPVh?AXVt5gKc`!K*VBH3VcS=3^Q*|o z+n@ggGw-CykoP4%DLXwG)O@n-)8{mAx#tIbFu|v&yGrz&dw60)-{%GSg&k z(Y;eUx{7ncS4_t7lU{MnWD&&Hmo#r1u9;@7%;S57s9`C{QyWW%XAf~6};${x1 zqP!LQ@%T0g6q~*A+$l?;o4f}n%hVa7gIIqtP9%mgRO*e9jvzx9=iw3_|9CgaOu%l| zPwCqGkMq6FTF1+=Nr}w}hwnU}@4dvJ7bAk5gW1OUQe$G@7`j=Q0Xh7+Mus_oP_fmLZfL+KN zA!W`18aR@(fe_yCPn5+KGFBr8X_hyfpnuF(D-MUK74w|tJj{cfUy zc3?$`$;G#1Ex!Cr3$0x8A7X3wW>5y(7NZV`UeE{k0TAjycjWeW(f@Zh$Bkp@dwM8-`H8A!C&0$Wr-r(~j!fNIkE#HYaUep0 zaAaM=e9spU?& z`SLqnHzH7}&rnHj242#2|JrMg!(L<1W;KW6!=%e6#VKWwy8r&^Fzo1_rGG@3*5JEt zq96kJ>O3gG#*3NfasEwV-=qiNI4;uv&1VM~>H)-06ySbkt;Byf0o>r|e{tELIPalP zW7KNQ)Bbx5QIL%JfAZbKsQ@lA`;jL1f6&(fs{DW9x0{6nBvcFmEv5e?zynKo`S1Du zuS-zm9-UOH%iUH7%sed|g>!3XDizuYN>w-g>gM42|x;ec2n)Th+2|yTf~J zx7O||F8@U4$58;JZMIxxn}p*;efDe7__g;@UE1c-9p+zWmz$HdK81gJJwc@K#S+_i z9NEC$O1*~bRTq^OP*^6AtKnNby+;smO9h-#kFZu`us?pl&ARt#?{n-=mt-fR5G=l( zxLA=tx~2cTr(hNe$atqC@~4{gzu{L_s{PaS^s*A0oZe;#60=a zp3|*!mVuNuZXwMHZ1CCrQ2{XlRp6hk0i9tH8jj^GPy5cApFZ7R6p?2gny?&8K^6XQ zJ$msG`xRJKZN-Lg3Wwh2OYy|N z!~xA9Jcr~rK(i|F87ZW5lmIc{NmRsFOuB&B5CP@Z5Utfp!a+d>v~=qLd0rf7egv8m zjXx)M;GjGyFVzu9>q&Vxo@RfgZpnbu7XyfK$y@dpKB9OpHn5pTQ8iDL0NJOZ%TClS zL;P`u@qo>|4VW_*r)&r2mTWoIbOD6&WGuE{F&BXl*`I6`-K#PyKo8;oDUf60Pyrfk zAqH_fS-k_!4>)Km0EPr$1aAQ8)5rrb%$hadhhtj(4!7eVY~kCzOviSO?pt^y>r%D* zy667ol*m*m8PI_4jrG}YJDT_D9f&9nH8Wsdcr>u$&Ig?;eBj`R!{MFxKPn_bF&K@z zAIn5~_&*&WY~THPIITil_xf37)aAvOaPAoN60^GJkC(R)lV<6rtn{C30rybi-)H^U zM)&q}#Y!iEtpMOx;CZ>{bGMsn#Gyv|U+3Xd%kn;HD{sG8n&MO= zi7>2?4B}C^YS0SZU@?|8%#&~40N6Ttsm8u-<3{YD678z@F-bRT?#6O*s3KIROq}>{p6uU$+LpK?5ON4^ zIYVn-Z@}~8?+o5m3x^{7ynI7=fx-or<@eT z11CLBf;2c9Yfo5P>o~m!0QDbtrekK_z4fN>I>_rdX^#v{$iPq5llW&!CqUy6PZ705 zQ9z{6Sk<#8GI`00uxCkGe@P@tnJGqf(JISBJZb@BW)aA)l%5V$o`BD9@IP5-(}fqb z&NbQTxHp%!-yT-fbl3Z~|NZlj$z@~q{i9*k`=)yUt{<&T#(T0(Ou#(i^RLRIa2Svf zjTk21q#BrkR4AB(U1RcaZ;g`gWYwWTM}=<3-z}UcxEGVsC77T=rNzqG{1%8BBY|)e z{pcKYPMS|HrR@tf#yy|!E`YL~R)sdE*8B7(bwog2#6tkJENz!a#zhPf?L~)CVM>}_ z?2J$_e*(a2GwFVs+5mR*K?CRoTx z0Tq`tCiCom9~7wJ&5j||<*+D~pH{S(&e-pFlZ;Lchg~%iU}Hc}ULsJeDlk}77w1eI z67_H+MP#_sHJe63#vbKLrJBy~TCP72Fk*Jqq(}!uRs(3a!gh-WG?lkeOsuAIl)jOB z)2%a3h7cLaayyY1QJnnF~YB7mfnr*ecii@?&~142j6@ZCx!nSpV zXvq5Tmd!1b6alN`^yG;rebuUhMJaHfmTrt^@#d%3=Zg_~-i^;LKvg7K`mi8YxW1kP zWW76@3{J#z%dh4& zasczlXxs^;fU#`|HHY>>Q5=X)3{xo4BF$NwMsb;i-XR71_W znJ7q<;dY|o%BCC^*?J*`R<7@T89QP3Zi+qt)MCQ!jvA&gV0CcJClLSf=QY;DP0wEk z_3zn($5M$vVWUDdEdHgM#{Wf)z6O-~JY08vmx(4#E>|uTBh#{qR!U1BW9?a$PiK0E zMe)5*Qb@Bn%#9R!`AtKG1diCi{-$sCmgvvU8Px0Xd}vOC{1QwjOgkoJtwSd%PYHMs zVZgDBAeWD7pacV#4ixrM@b}eRXrvQj(gOmrNB z!)@n-WOI$IS_b696Sb!OMqY<+h8kq^K7@36W%IlCQ7l9JpCgjFT$KLqV>|*Z(Ilb0 z5IrD#6F`BGUUs1oB8pMP;lkLHC7%T=+XCgdw6U|0{@z6C2iR_AD|lEIXVAcPUJD2J z=Ii#36;_X=RuU-Sm4MqBv)|n2b8G78ZR(XPdO64$;ja>cVGj&Gm)HFflE@l%t7|rh zez-eHHpC!Jk#YmzBFqAwx&W6N35pc}R1RiL3ts}h1;+<4iTN90wgEW9IDjR=c&6bD z^remf%ouHlQZgZ88zm4spnG{~12?u5_>7;Nqb?NU@Az~BUKVixF)ro6ld))Z(d4Fz zdkqYC5mez!05lssHCKpel2NH50L^F!_0T8(@?VU-T9!CX^#u?bqaXsaQ>yBui&Lrs zoe@KfL!Mk8<~t*7up&?hhBDZF?JATPqIoCy)Bp57rWd{tlzgoB&RKycID zS2i9j3IcR2LY%cM2GF-1D6pAolpmf{IDEi!)QgtowLloA_q4GWAG{<{B*}oeKiuTn z0`ZnVFVLlPt58#%QW{wQKq==u2oQ)mV5*+0NG*%A^`y3(%$sdAqUa0h&5l-Y?*ah%EdKQiS zx`qSPFM;SPoCFw*{iiCo3<|B7$!HRz_i>XBQ$oLrMu{?k6R-)CfHWW&(+J1<4TMK% zYEh#&h>SS5KnN1U|D&|6u#qf{R`$Wz(-j= z7E<6Kc2he6j;$~OUTM%ayO^Jpj)Q`ZIF`!lxKz8fP^I6mPBmXp3+#Ib{S*kYJ$n70 zd7pOio)V~Kea@@=%qjK-h<+Z98e+2#&K#4Ov^Yj2Y(hknaQxwHnip2s&1GPURjJv2Bi85@gvl{YKr&(gM`Ck ze=<9-qLFFmH6Rr}(}?AXEIt=3p{wb_J~F#^a?nKlQLiN(q^Rd@ z5uQ7br?KOfmX@g2l1}w{KpR1W8mB9I0EOP>s%!q!zHxrWg zm$`pG+g{c5JnpipwjZ<*i8Th z`qN!oz8MGHt;f$WZKy`IK^qXSi?pyztEd3%j~)N#SO*(DJ;o%VOt0S$37E~~OZm=2 zO}xM#4Lo;~eJx8r2aD$5gx_r5Fu?fE2k=i@w`2ajyq#~HOYk!zK|s`Vjv&N3SO9z# zNL2Z_r>>oVG}4CVtFM_&_RXZgsVKzA=a*K`W`?j2zZ2#w{%s0p%!{ngnnrPIZYzeg_;Fs z>gO^mN3R#~cSctPxFp?qgfUT%hPx{*j#EEIWDy!|=gUJ1BFaN>WMf1-k^Pwd;TJfF zKuw>r+$AsvT>=e?zdn6y#-Qq&S=tsF3oqE4xHZ zP{njtUThD=x+`>I%xw9du6Ln}ywuFcVfg3lo)819Ez6hyVtT+aIPCAqLQZ=A{^2MH zbiVx{xH;yN?Dw;(W%{b1ufHY-T{-9(zTZR-o0RYOdP@btO?75?u>VWHEH4cQ$de0P zp^B%0nciG}pJENHHwOIkwYOvEx%5Bd$Pl4!HB?s{c2GbDa6MvI9N!tXb5S^z5kSO6 zgG7|O%9?>>Zj5+19^PtNu30t&j~d>f)%tkqjh6a(zxY=M66zw?=9iR zf#{pJ#Xv*ei?+!(G0EzK7|$^Oq`8)6&_Fdn=70h6=C%8uFaF<%gz^VyAHc{MbwzBF zS&6?fG1#MgI18(i(R}?Hcd37ck}D*-4P_$oUQAsKRxIPt0YJ zzjspr3bW#Pvf9S^6V31JD{@JW*AE~>Y?u_oMhg%GbUByaB-sH4cZnw0RXw?0)C92j zJ-0B{Cs@ztulI2q5I3E6wcN$B0vPa6QL0gf)Z_vU@PZqg2!fm+CWRo_t`&%BLY1-i z$N-b}nWpmbpMT%raZkONp_n7+nd@^ccmI7)SRD$mm4s6{;F6G~VG4jLTHCAnc0W!6 zYq`!`X2B@};5lSdjPn9l?@n6xE({rP6K7Xa)!cVLbo}QmOoVb6($nmjDsnX~!AFQg z4}A{OF?0p!5YIy+iC8CJyi?0En4W96lLpN51`6}vxF-vr5OY>Sx@h1M{m>MRSOMgH zZA3Vn&`W?Gmz0#$x@)w`cej)1lH?Hq-w|Fee7(eq9)#0dcpVPVu9#C+k3)H8iIiIV8%;xB?T|i623VvCcl6J zw!mmhYme&5_tL)F(&x?r+}(p6Sv#lAEUmF~>}%Mw6adYm*{vt0+5lpUTmb{%{R;C^ z@{4HT(QaJrKLJk#91o&f<7aleeZ@Nf&>+Oa-<^c300qdp*FjkP0Lkp(w5Nv^k5!G_ zI5dl6gc%T?XNXRE*fT(QY*&F(u9PW6HMT}8s#yT~eV6S0mJw?c=iM-P-aLcNauj5| zi3dA>A#Iu9h{Sb!8C`pU{RDfPoKNW-0^CKO(<2RKzBe)rdfva`@(=({bG@38DOeM@ z7^dj~0t@4I$$!9bxo+I)%_-i#Q4w9hTn57aisT;MdYpvJSt-6gJ>Ab@G{+LSihEY# ze#yS_p4$%N_3Ts)hGUzjW%{(=^>T@$y>}Brt`s^^FUtO8+jLDmkH{b5nds9l?;vB6 zy@V+MMAD%9CXZud;LpPRR;^KQ`Y;+)Ur$m!+Z@U7>+M;}LbBZ(g)3CBm+B{CHI z`&U`Z^=|=C9JMvp==(i+q3Qj+&tz9~YEN#w%m3=`t>Uuo+O1KVo9^!J5`mj;knR+v zBt#@dLb@9iQ5p#a0cj9Wx`(z*P=gj8^{ATI=y#G-8q@n{b%g7jC?nU3feQ_)^Ja@2Oyt?T( zlm8uqd7WQD3M*jpeV$@lz$e^E;~c@nj4xduCjXN4;{}k$uas`10Zl7A<>(pwUGe#} z74?4@KPAd&3H_uEH3r_53G8D{M^WXn7l|(n_nV=z@8ezKd1mj3${vHuUh0;EzS3n{u*_WkU8*ON*^ODR0> z*pu(o@wk4iw0`ckjw|Ap6?3xvSoV4jVcEj>DBlOO`2$k&pLWOggSkC|1Zyrz(6TlA z=L6p5NVv>ZFTC;pEg=pS`;7FJes4VErDX+yW)+F=R~ zU?;$Hw!$6YQ;m|zJ+54s$kC!9+s(zI(jJ+kxVmc-lZz?x4h%s&bPGDFLSl-LQPr*0 z)=@Yc;ujlDT4!nvp=G&PuVRT`ljj{xl)R`59*&H;m+OsA*GwzQo8%G_#>r2)nddu> zz6V&}C;s-}HK`sq5}dN-YOZHRB2ztFNs*l4fJ z#=46$T}v+dCM<8`q;V|r*{__NX@uAFjpUPD7SaG@xyz_gr-1s7)}JWLY+6kO%tRFZ zqI|hlh)>R@^}O5i%ovnYRU22m#S+>3>1ucQ8*cJ!EzOEA?AWh;{-Q5&EkDRD<7PY1 zPMLW0*m`4cw4IGx)DMYT|KnVr<)%-T8HkW4ivK#$_%!rWwEoG1)U@jhJDr$+r<~<0 zQ2cG(a=q3R8MC97ic$km#&xzD%1I}|E1j`2$vgkS-;ndGaHgwH*DLNf(Py4eziZw; zR{q60-u%<$MnyjB{C?kBn)G9nSiQXs^8~Y^|B%6`i97Ql4B5$s1^)0c&+i+mvF)*y?H_hZSh9j2*63h{AO?)pnAbaFz+(>)DK88V^Y``0%DG=T z5^`7>wUXD=Ed55R%8ij=uJM62QESx)I$s9Dn^Ud_=g}eWOJ%Lo$#a>Je&3sEky#=xf>y`kyY<_3ZbbA?YAoyiwBQvZozkY{%1HaQ zFuj1-?v{`L>fFM`oy7W7eBr8iV^9?NuLUN}831GsTg;EqQNh^@_m-ZwMvc351-77sKPAw*S4(t z(L3ppbjCCtBd2$J4ko6`-myY=$0mAq20ALmq^|#Z`N_{%<;kj{>GW-*g!hewUsmiU zdcVF5){>sOZsum8bS7~&{^V}l6epKJcxE6!-*|RqZqtrMyTkN>bCF$y!$W%)E_Ji6 znnHHoo0L3D`r|Px_X=}Z*(b>EJl|5_s&n=$G#}*Xr}MpGg4A2VUVQG>Id^2xS*|cj z&H3_XZnV8~Hn=Egn9CbW?pVeQzR#LOyUubcWYLj#J<8d39ADSl(8$bl7UAae;)kID z$LHwFVnKGFr|L5v!_wUojI5d77XmWmy(qD%q^47SFb{GAH`CZP@o;aIiO1l%xxDiY*ICSuG^0v`6#a9*Xp8B6T*bU5qEkq6bu|`( za4UozYxA)Cx34;V-jdy||AO@AZ6b>Nert0$^D%A03Z-~|-G<}O!*AJhalf!JnK;EJ z2w*mF%g>ryQtnjCN<3&j&+_*9t1&Bies_HPgsMy^JkGSH`x^w^Bp7&F zbb?^uQfc^de(gw6d^bDDUx(T-RGVXnPp+TN@5{N*`smEX%HaR*Mzz_$+6*G(z9uo9v#?UFCWEgzjvcPrr~ZVZ|^;R#FZTqSq`)^U@MBW0y#o zB_(7&FDbwc&fgmZVA2UY^ehv$AnkGCVY1ZmrJEll+?Ic)kxf}PIEUAd-{W?&x-(0j zMqx|D^DKrC%CFY zz{F#avJZ>mBN_M*OnPfHg>$aLxb2y; zlu9|M)~zfM&HLP;>EKiK5JA5f1K$%lDNV8O)t0L0it&9;IE9l3#a-mnem?ym}I zTwqRq^ZHckvH5;S;$%hPsj#~ZfB!bpDTg=pr+9-aAF(&Pb_M5-=h#vA9a zwiL5MD zUuk4kc!c{UmHE3f^8f|EiF)R;Zdr=r=tKKM@$;mWwcGmC06QMjO^a8XMfb9O%k)p2 zynk(_ds2hbNQQ#BST`|h)hyEV&&=#x2XR(c)St~VLQ%HFjIsnn)44EAu8^Fx+wa-Wx)B6HFFX?9*}l4dd8~_D$ByCPlRQB8d}M>;~>^ zvFi4$P~R*?$_wX>njFd8yC?cc?EBAwL}`%7G~6~Rp!ZoIN+rA_;fcDQwAC2p;F!7a zo8P50u*b6T{%RLLm%Y!|ayMwd+)bXf?u&Qf3#qfzC#RtYCKViwoc+U-g1pV{>fRW; z-nP7{*Hc$wR`wpx6_a(2;@=`v7OOPQ2EwBRJ$E^wOy~n_#5bpMlFQtM$LGE6MON6dTh=9q$28X`GhZ`T?vOKqe6)gf;ghHiWiq>8=wYJ*Y| zRGrJAc9dmPrvv-@?ET9R$6a`cy*Y8jn!8l1+tH;CHvZr~JFKu4v2XhE0y%WM&DN{v zw9$xqJ>h8bg~I#KKd^^akq&j4?5^`w|Q424GontKG>9xW$-q8d84e< zr{`CT^3&?O8Y#<3C^t~1h^qJH+KNQ-#*A1(vn#cJb+K2wG4U)uJPUD{sJF3v&Y9wo ztes@mFPDTI6qMMBwA0_N1hV7*BwnD2tG(Na``Ab9yu4)baW>}TysjVNX4fb!()&|t6*iRc);{h!DlDW?Y9xxgEihfPX?vHI`BnDzp2W;U z!ukV~dc8Dnp5@l|ZLz@y#Eqb_4nzX6@YV(rVbjl4P)WfrW4jX{LPdNo35$~)dllRFRM7wxk7FAdoX$pmF_PNfRFe_j36;1^n1qdnmhvg z$e`>~yR%cu*p;rxqjr$@b@~WfDr9SWABedy1=fF2u8uJL`=9PB!h|t7X1}?%r+oE> zQ|Sn!ZRY3!C60P#C)Uas(Fxrfy6;g$_0pb2(-X^=Pu3khJ`^LL@UH>I;P{R+idAv{ zIfUF7hxAE~gB~s)?+PVLwX6oW>H0n?9;s2T4mSRmPi7H$E2b|q(N?9wjjFu3@wS+^pRVnj29~7dS0&fa`O+PMe|Tjc7L?wJ(&H2o(#zWWnO%!)?L`K=1Xh%M#AT7bUsZbiE;=oq=SW;9Vi4OH zfAfcn>vDsd3RbHeq5pojaUR~C9I0*VX+}OL;bWD%xHDbNA}7yTQJwoTbLNNge7MRV zN@V}=clJ#FLtbOXUO8^}U|JVmT`!e!cfkTq_)CN*C8u_vlk0bXFkxvQnc?Z|C`1nf z+vI$Q_o`5clfh*C1tzs%o_Ooj9j(GD6eJQ5``aj(mREoIMCJefNshz}iIDw+|5scg zmFC4GKcEHse z>65mCNzbj_-!2#HOcZ1n)c5w}HyOp{JU=}94+wK0K=ZC+Yo1`UfMxvsj`XJg?q{|< zzXmsnJD(bHS>BfEmS?h#0U#0G>Tmj5^k3)oGx*o?@tinMx6i?Twu0ZzGxYZH>?;F< zV-HTYmUKL3UfCFP|5^-r{a~iLM&-9v+r436pSA-jaN^U1=}sI=C@+N@7eXAvf5AIR zB%|6cJ5N5)v~q*US0ptyuGQA`^&aXn!7L$%@1z2QGy6WX8e2vn5CKT4`QvjF=F4z=A!e+OuT9^#d00jlT|PwW$bi2< z+S$pE$vd5Yj^C^{U-ucyh@~+QseFD0BWWI%@>s6-Fdcmjgg(Gv4=YvtzJFSO9tu1v z&HQI;#6z=nj%3T>I5R|2^XU&_N0bp*F#z5eyJ4>e*8EL4hL_1_84gCoNm-5b^YA`twL;-9N0 z?i@L)Nz_7P3ez@SS3-j3K24I{t*T&pfQ2#=0I1~r;}~G23pq5ke^FC?(32l?xj3<7 z)uW!AV1oS+flE4`E9D8w;ntZfiBK;t&Du_fd3Q#wCKxWOmjH z-zlEG*9YULksey0DF@NGI$+TWud#X$C-)(KmH|m6k34-bbw`j9+`AW!oQ|q}uqJ+Owfy>_j$uEab>i zg04Pda+U`F^3QZl=+XWl%Vt5V&wsN{9tL8Cs@mjP*oH_9()(|J?C%g4*P#{hbIKqq+3uMED`7vh|f+RVIuoRGbl~?ETWf^IBkF8@2oa zPE7Br^tFYs{!tr9D0_1>cbkzKA{ox>G8H)(F{olYPl1bRf*(*PS62CRp*r@*C{5Nn4wY$fFb>;tEcDUr6V z;;O^6iKv>+%X81L-(PG$3+pDMZ$68H`kk$u$2FaCh-2zi1wUe~x?IKO#)gVF%w+NJ zvKiXJ7r`eCc$~-)E|R+9RBaQ-9K`E($}2He)|R8BjPe06IOAhrBh|t}(MwlTWmC5d zKRHQa9?OQEPZrWkxN%B&aLOV_GO7C$e12w{oiLU#IF1}9ycX~;dsUx9KCr0n-7_mt zVX}cZWmrHS9vnrJ4$%OfbfzLnc*Y)U)gB~4Egfox^V6I2<9oToWLr878PL66^DpH0 zWK(*p5T?pp1+sVG*{E0|uuyF3r5ovk_`yfh7QpqK*(?m(wV;#r-?eFWpF92mp+NNG z8IY*kew&_MuyqMvBl~-RTjO&KzX(#L;-?>LT9D?WDKs*gC7L8ja#J9CBzeX^iblG3 zBe9o!xnvKCre=D}2KB0S45&+)0;tGzynsEA%_p=I1L3Yc&Q#G8aq5xe3m4CP{5U|s z<|T?{35-9EmI#+0t73UCgj_o;iT?ii8HW3{QPdQ66Jh%^nP}38*T9$trW&z*zv*)@ z_@m?*mmjxZVk|^i)t^rfiF96&uQI=_y7-?*2qcJ@UtK|Vak4)p7XN@ofC(?oek&$; zI%2lZweRe^1-h~6+(Qtd-m&2;v?CjmZ>uZ0G&aTlQpCTYg1SIdx4*ArZ#Jmh-ylmi zTJIJk3yO?;3^|s-`|FsRygKrkO_4_fzXc{W}56F*Lz)s`ymXZvzh-1G1F? zgx(xB(Y%XIHIn22Shw4Mb_y`UH;b@yZNzHBH=4vlVPWy zX07%Hv4It7iP3`Gj4>t8do+RH7;H;#ior)h54NR%;SaN9(rYNjdY&e3GFCe|uFl!? zwLTS;I-~h+?*F=tLPabTFQGdMcT*&69VB1Zg? z7fTpu8jtyP5!Vt;@*L4@`Kd)#j?Sio^RIen8iQ8d`+0Drde@0~#l4RKwM-Qsg|Ikb zW7_S>3+p2d=m#_ZtOFAqsG)_mH^5fl=;0SGCN4O1p+L^Y>A0=0h8bpi*uj zsEQJkIj+P}W?Bk2`T$950>UdtDiTBgQ1S1fB2cyzPv(8u=m69gWoJC8vqI#NuDQ>* zJjC66U$_Xo?1S}Dm>6D86rmVRF!5@KIM&TWb4$(JN7>*#PD~eA(Tq}FYY-Dv6tb%4 z{7(N3Ev~9)GU^ibv?2w|Bk%kZO_nkS!cLdtzIeQOWmKYpn%RME%N*pNT#vSGlrn+d zDOw37H|dEXFp&MxxOjQ|x|S;d82EV^`DrM*CQ}h^l)4?zm~Zor!_NUjO4`}>Q|6S` zs+DRP?jIm74%*5&7F_Svr(bNkGvoC1MrlWNa9kGr zD?+BtEW|p4<>Ut*ggiDzSfch%py;WGhYhVd)zmW3y3~36K3Tc61KkOGi_P=~&<)l9 z9wpgc6#H(Dr^y|}KUGope*28F;VQ4v&(=-marJB*%4b>;b_z1&-sz;{hj#M z*}en{8X@aw&V#ef!p&PFhRXXe2mS$6Dvw0WpW84vKCfUewE~VL@YU{2m3vPaX<8k7 z$vv>#J}OiEvu*qLoF@BlvheSP3sxOuU1nnR4o_1R?3er$DiHluX8AhIhW*R-gA1=- z4lsCUs?5PP(n( z^K`N;E7iNY&%z))@zt04R^Mf@Pcde)74OM7G(dP!a(nUxPyRjfn&4i}fVtPVC!K+Z zIUCnqff=@F68O4Fp+V%OU`ELoU;IJhvX0Y9 z`>etE+~C>oqna?H!`?;y14k92cmxDRvhDJ!ieZ&rjI|OHqf34IxSM+w$h|Ji>y57H zABHPhJLIFc;+q&8^H#Clb3cGOL)1sJ*&ph^DB9}aa!1jbca7Auqa{uDSJ(xy zyvoVvS0+?R?oK@GUK`H9(^+kP`o1w<@S}+U&e_ceKb(erPRDn93aD<^%4!f|BA|-9 z%4*~LPGWA@JRxPgf$_Z-9}w0bY!$`Tmp3qzVbDQil|g1hrnB=Koj6eDcHR-wD4OIO zsjmT!0j#mC<5^;uA#@^~SrHH3Gx;PQLMe2p&!iYC7nA|x^t_o_sLu9gIxnf#F)q8_ zR?Zsq-X7~e0m)9c-yWj^FatpuWOw)(XbYinEg0I-DU!k`F*L8RC735P_HSw)VsQ7p z|J6>PEKJLDk3yeh=o&JdsW{;(f=!d({Ko@{>XsG!q{XhbRM}nRMY|qfW1B&t0xB@r zOKz1;eBE#ecdwC_xl*cZr}M=Y=-Z17&k19~LB^4aquPb=D&K^Gez*g#?CTf7Gt9Wc zRl=c1m9}P8mfnzVk5_uMycGZ`5^MtNs`$2)7UeDN7kas|*u2R+996E!NJg94rNFo8 z@hVt9mz&fGGsVY|j-c$ghQvSS9xvZ$<yuoxf zRngG0Ra#F{K~6Wu&28-oHG#_>i!{R`b`21xJYDZN@r9j96kOndtdLjA6Od8*lLfept!G7#cBt)wK+m zs=krij=WC}ln{HG-I?Yu$t;OVUocuDfP}e5h1h;+)xhnv?>6>WbJy0N$~oYQvyH{;~OGsY*}w#B~Vm5?%e z=Kz?FvhA&aKj`Wan8eNNM7&<`9%Q0zRV5<3VFLtftE|s!H&aZdS(O8Uw~Xh~C5g6+ zJ!D9lceyc^9rbmhhC|zM;Nc-~GJ8qci=Bmw%Id>0?AbQH#N#>r&cqH1;*^I??aj*Lfp|7y!R4B1%FH;R;t^%XE5n(@+bQ+mzWopjTh*`<7WX~MHbTx<6$%A4fLDD6$G z7=v@4YXVB6q+Z*d77sa0(MYjn@eOAl>N$;SMF^Y?$9bxb*mOs zan%nD7t11;!x0}Z8!zdGnPw{Qb7^YF@ijMWaM^* z6|Vo0Eq)|*a@BwL%V^Id|LXVyj0mFd997sXj9=;A9*rg+M#v?o(`g~^SV8$UshN*Q zmO5O~qcV0US88M|Tb#hkOn-r$k)Za_yf?lj9W*i2#*Bh;NJ_#qHcRYc**0bZk1;*` zm!uJX%5Un-Fl0D&lfQc9ymrB@55yN^)@HGpAS=_$xq2HKP1nWSWsdWkIp2@8a0^21^DuBpcUT2P+n`0n$lA6Xk1Z zw%MA(EP`ycYUqi}y>Xkl)ofjZ7Z^{v80eX-H1>~rF$Gm0`t#fGFST67Iz!i>6_w11 z&1n8f-7zGM*z3(@R^=Mv{jeFZuSwaqchBMGoyZV|hg5SS>rIqSH|74tf|@`V()aH~ z$gZBTP7J(_MGBDSBQc+9eUZHTIa&rM#;9N?7>|jdtnWNdRfx4JX5V)hD_n50N3j;8 z+mJr(-j3)P+n)OhS)*N1%%g?a9%w8Tm=?~0grBH~A4;)SdsXo9ky74dsTPH~%gtd3=tC-g*k%}aZ_$Qb ztg?_Pl2T(k8nYZF7exy>J&!jGmzBbxMT_WW&FtpO_jbKOsDmJl<#s>k(arJ#{V0V< zOO{00hi{8lo4C-V%s_@EpF}1!b zQh)V(UqaN|AhAA;C+YkS44&R!M@}ECE=Q)3U@)w#uR5mXa2Ifx381 zd#&Hy#g6>FzZXr5je{DivSngRT~$#JFt$ag_~8MKv5<37Q4`pyq(fxzc#PXi0*lIzKfkH8woiDRud3xfWlcbafo19Uzs8g^i-37kwp55lP+7U+xi(fjspMNn>n zQkloioc~FbiW|UPrnH-U(NaY8SBGSdy#uUYp@dPS;#kOEub{vYyYo25Bmh1kep+Ct z4(Bn54H^J^6T0~}Yeial+oJQFYA`kou6p(=#Rr@dln}R4(KOS@!ml1~{)#3&Mahx8 z8A$uMh57iF?fBwY<764R;XI|hzda`?nTLmv#RGUT@dOx}jNW}90$KS;-^3vb7sQBC z2*U=&&z#WEGBFR%Se`URXcV9ArMAWRzt3nx8UP&sxgwN>W$UeCml!lufbyk%7QGUz zsgvG&0<|p>-4&F6q-Fa>?#i5V6IcsGShCiF^oS!(&X^}yqwaqqF<@{rEinwCb_eLli9g1zo9prTye9!;@ay zX0@_BAAH=j!R98nELb*mN@&YO->D+=EE_da5VY{Q!ev>*`hR|I`o2|?Hh_hj7=_Rr zUp|YnmIh_o5)Fod!WpLy^#|=gBZg;`;;0w48#4bQeZ};ZwHeQyf!5qFka%i}NiGHo1x1@6FyyRz|93wvEEuvgHm{C4 zECp8Z9I(4M-3K$)6D|QjOi@1?+q(oH3r9yGF-e;JOof&TYX>42B;bsBukUStJe4#O z61WNv5~CrvxNaYa()3IkD9SHl^M(D}FKGy``^W|pUGNU zx?(_P1H8I3rSRGB00?eL%-Ce4jb*xsp}utG*TIPZDC6qf9?^5a)#k}8!Bf5LT`;V9 zZ_o127OtqxkrHq@(o2EvbPSJ~-^uW1kMn*u5^) zY!s-yr&qOv{&QbLP~!}=7rEJ@)-e`ZP(dO%?(67FuRoS^s&@bPanF>VfgBpt zYD1diAh(6(?n0PMFHr%|#QyCxYxaM)w}j+ZsZ%_jbwu4A4Ix~$d#NDJ7_Rr~*}xf^ zd7upGDHPjZ`P!qCA(})0L}c;GT4GT5R|_dbe_s9I0S&NL0B~~bw6QGy`T=x{if(Ua zS3CB42q4Z3;Iagh;+XD*NjLpM)nz?~EYobo2-coC&(1%$U3JO`~H{u zouh2z-qwUY*uP3U6~*;NDA6Z6J}l7AkN@9W#&4ka%l96j%a$u@WK-`#aWeTWkA8!2=(Xo!D#mv(9-u{fv5GMh&9JS5 z&<1}#84zW9I^%GMQjFIY{b#9Y{QCNncP3w?{FD|@WwS&1Z78gw3z=nb>#a-{uzMur z0$Lfck?le+<>78g9QT`2%+xK2lZ>^e-#(5B=T6$KA7_Rw;?k#jh|7aySKJE|=v6q!`(#rkn1jy?(p*s)o80u`h05O)gEMsz*AS zs&_02%kDVi*RGJb?kn`dr6F2=y5DDN02%A}(nVLolI*#2R#w-){3Ax9kt5?niKg#3 z`$z6w*?SaIeVjKtf~EKGGQBsxuK#5EgZfuZ{Zo@r2oW$-QrE$LLlkz`thXGs!;Y9Q zUS6V%Ha8xiq@uw&rd2}w*Sxp(6R8AxNRT(b?)NBV#MC6(lfY;x>Q*w7Y%>5cpO|n* ztzLWN*Zl;m4!P$P8sw8l@D1seKY;4&tzjPgsagJFh=gAB_;=^(pV!e{2^OI0&zAMC z4y1MxP>W+VFcdI>&Zvy~yHdRU8@fbICO^|_JuH2swi4T$sLkc3cJbZz?}`~&B{!9m zqnt5gE!#o+GCBa)_1ILVC9t~Y*M0)@;Jy%tQ}p0Ul`DwaK83g|61BU2X@0f3&|APz z_!Kq!0{aHRjF)4NxO48Vjn1r|g~5!09yf4Mjxn^1)v4^~lNnthgzxG)k7d~>UgPTbzS_OEH}CsCyR26H z&{*s_o;U^~3-FO80^t_cu}sqi2b3R9mCP?xl(*g*&zE(au2{JPX6oX1J_)K~)Ru}N z$@p+pad(l8I@F1$g$&BXI71uU{)DpKtOEqIU{ngIu!q|LDE?Z-0|8S5f|D^*pX*hp z``H;!>G}0$NtJwqhS=hGFM?*zxsFlisG8A~n4kXe3`?SNtFkr=PTAM@o~2-L@CFo* zKCd9;*vfaX=tg~sE2YwX;;9NVf!(eYJL#>~kE#WaS7=RgAybqFeWH8_&iC68% z4ao4zPc@W-t$`r@37|m(P|`n2@D7%dU>AbRUDFJ#-T<^D9x9nu@>nwTpOh{iOSNJr zmUix1N4m7MMm;b+q9(#5WFOY&`e2gTOOoGJVHe5pvEW6Z@d(SxkGE( zkJ&}Fkd_d233 zzapZ=^?4EUl>PbV+V zsCc?$02+1iXbPhKYkAjh$S|~&%gDQ@Q1#{IGFz+;w{VToq4-5*uzf~6%Mb?!viHqY%9XIWArMXn=-bO2!idJY95oyp zuy@;A>TXr-M<xilx{nOfcfNnH*^x4m%xN?=e43$pn{k0k2$;%x#+ z@LMfd@R;zn@w+~0x6!u~MM>oAWK}Ma%guQ2ngGftgqr&${nfQ2izCp{qYknDHArpG z;0-|P_uxX_`?YLXmX|pk{O{B+98{S-NNt z+doN_-k@ER%9Xr(aQgTWUPLgedGUsW%>arT5-BG(8< zN=zd(mIOXYucgpSM0V?nv_Dg0jC8%ym{(idD&}v;w$tfN(+L&8vXVJ*A9u49*R)uk zDb5$;%4W!4t;91sa}CmY@ggu(dF|q)7%R?aUEe=^pOk7>+VvL-#b*C)|6F)kZ`sR2 ziy765pc&uF@M0em3EfYEYDlqOi1%Y+SrJmLZP{IC{sn4c{A=qiOnviS-0q>46>cH0 z!6J9}QOZ-bl#F}R5?BgV0Gz21^Kj78A}3=&YnYFecHWZ92f^zSd?08a&@z0M1DzQ0 z9l|#0986yy84L-ou493A($;+6acM?UjVaAikF(THt^WL8{Hvdn8xh%glb&Jq>OCyTb=6oH%>KVg*|Judw6(Q4)Aqmq&8rw4i^*^FSfDqu`4o)N zO7P)PI-0j3<*xovDDu~@;w0fV7{DWLx5L2@aoR~CWP>jhAhD&FO8aiGvZ&Bwy;4T@ zDLbmY*&zG*%21n)^gp18ZAlF^9=Tg5za)C5?1A(lZhojoJzUUjjBg+{9?c`nQiWYddM+ruHEQ2{2Zp>? zPs0BGUUbY$)py%p>A&9W?wxh(%uE1?E(fSRepyRoF%Ej(UP(Iv5}%Wg@mDYx_2I5U zp}=48KVtG76NA2Yb4R1F!TdhJ4i}6OKyrGjhh4^tpoQ)e9A|j-3&K;}ni<*DNKxau z_kDNL+!#zf*+{XmkXP|VDtM<%{U|YvQ1&tv@=rU1D9A}!1XQXV5ZRr^&?oXbW9^YB zLh|-(S&ntUQNBxq0SZz|o<)SF#9s&>%Uf)ddF982-wS(F3J2EdS7g{exLlbb$@04AVw(yiVi-}B{BgIXzqCO zyf6ke!ER38!OX%hM#+-w6uLY-LDVj(H8(sW|34;t*`3a{Fcz7o#k{qpf2nOWuJSB^ zG)v0!E6hK5gv|DTwOG@m8e3&HmghcJNw`Gx(SB>^z;iV9oHj#5lc4LDvS01JI6LgM zkeI%P=p%yQ&~oH@`B@zNAfXrb0?&&x0TpS2h*^#W$du?p)ggy~CTCpa^Qt@3dN2i6LT3@P_pBJ5QgG(h&!4bJaIY{^Ef z5Peh;DGX9TKk4vnKQgyrD8G*vVTdAbR_w-WI00=-b?K~OTtr!vdS7@P@QXCqa_@_?xsCNXje#`vkWlT++$r2jQ@ zA}gPURv>uRJ`S!cjNxZS6$8k`(lx)81Rio>xvj+VU^YWFXe%g)|utI1VbsrZYl;7wTP=eR<>6&q9$_;0XGbu14 z*wGrKzm=EVDrIryDc^GdbFwnp2MddmD0Q+LcAn(joX$CZDK=6DtXM+2gEYt)Kz~co zOPV5OBgF&Ag8hS@ea#xwJW0UTIIXoX1iiu@t#1wY157vVz%Gal`{@V~~`PCly9N?ikvl{`GvP_qMX7t}=cwfh|TyKj}B zR9Fw-g{gHA^nMD@7I&$ya?Gb_PJF3=a8d7kAgB2N zs%%5Lm0APjs;*?5xANmRMkAwv&&oRKiSB3!`h+=I1c%q3qZ!9|jatuPPmG@gU{Dwi zDLGa-l#F#{4$|>&aPL6zEYF0rT504lz+#6?gy>~@axR}r(j|z0}0b;oFC2k1Bog+DLZ_3 zl_@&!S0l1N-x0}=WL&@G_3 z*3Uzd$!`PCH2Lrt4sVK!cLE3p_#Iq-z~l|Q04xDVN*!3^E62NvFu(WZ?rYSLkFE(j z;vI^)3hWF#{3C!soqtu41M-<}0k?C2UvuRz8M;a#v}h@qvVnsLO15+YjCi+al;F=N z4dg*P9>NO1g;VJz5_3h`f1x1DjN2RFink3^mR`DS00m^h-e><8+@NGn7K+RhVh-Mh zNA*slOB$ynV7f@9tp7qCYClqpKvWp6+2cPfB(-Zu5|{p&#w;Hc3~ri{8i)YR@a|qM z1Ax{40E-|dZ^OUyH`5i`TjHm}C_LrsA)h!`Ytc8E?^O+?GQhn38Xu^U#@rrs^bKSW zD<~2ayeyPC6h!Ge$2)US68;6|#-BLF3v??opOGuR<|t=Je3T-4Sxn>`IoQt(|K)3E z2GVXZjtZP)hGzZ^vWwJtNlB^&O5i`Bew#zz?(dI9hjB&8(eR()XNGpogL?-hL&TB%k z1E5eLq!!>0AC?<=X;)eF5#YtW|8NE$e>A{C4t^5}J0oBgc8~cpHdFT2t1b|hFPVh> zyP$q53qhL}(%xy{1*LToPzzeN-Q#Pn1R@liB~NoRU>OMezh2Hdyx)L@hy?Q@Ix11S zivlz&9N~Ti?x|3=bQGyiI=oENR~5}!6wH7qNg)RaWF52J&NPxTL|4PMd{s=;O&s+s zWOg>R%@dcLv zZaxvTGA_|bfdxWQj=l$$u)M{`l`kQGuc1sGE|w~6_0kJIe>A@YW7VggVVM-P1! zIQxPq2eSb>X7(9kn|KW58RlMsDoyVUWutm1LPgN$Me{Y%8|-^=^eeM~z7)$b!Mbvi z!S;2OlpCY_l}#)8Su}}6ss(k{=cUq=Wzl`MZu~nADpP%x32rH{`jk;qOwM!uFDhtt zxVZs68Na^IcmmTpP#uSelAkA9xHjD}P5ueFH1RoH`}p+)%CH#tCaf(s;QVEPT*g|X z2v~%J{%~CKpw}-S(v#VXj+`K+AQz+kfVF3IFe5gySZ(S752{894;p{pMy~P?lm^cl zRkYynK?orooyU8pF<$9mX9w$e;n%MX<5Pb7blr1(Ya2jWV8O`aKF_`4gs(Tw{#Zxt z4NJ@vu*u9@eVh<1AI?N?8=r>9-+vAxH+EG0#o6|hzpf#Oo86%J9a!TwixZ z{D%--8i4DTo(l|BidD`*Lf>Gz?vT;Da!;)8 zW6$0@tckAJCnMQXT4EYqN(lllafV0yZjS)C0cU)wg|qwZJ6m+s10tqZ8 zJCW*#rEzbJQXN!DChqdp#~QTgQ+KyE(o!Ju1t(k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + MigIo + MigLa + + MigIo + [...] + + + + + + + + + Design + + + + + + CSR Bus + + Wishbone2CSR Bridge + + Spi2CSR Bridge + + Ethernet2CSR Bridge + or + or + or + [...] + + MigIo + + + + + CSR Bus + N Synchronous Inputs + and/or + N Synchronous Outputs + + + diff --git a/doc/migScope.rst b/doc/migScope.rst index a8f4d718..bd46e83f 100644 --- a/doc/migScope.rst +++ b/doc/migScope.rst @@ -3,7 +3,7 @@ Introduction MigScope is a small logic analyzer to be embedded in an FPGA. -While free vendor's toolchains are generally used by beginners or for prototyping (situations where having a logic analyser in the design is generally very helpfull) free toolchains are always provided without the proprietary logic analyzer solution...:( +While free vendor toolchains are generally used by beginners or for prototyping ( situations where having a logic analyser in the design is generally very helpfull) free toolchains are always provided without the proprietary logic analyzer solution. . . :( Based on Migen, MigScope aims to provide a free and more portable / flexible alternative to vendor's solutions. @@ -17,8 +17,7 @@ Migen makes it possible to apply modern software concepts such as object-oriente Installing MigScope ******************* -Either run the setup.py installation script or simply set PYTHONPATH to the -root of the source directory. +Either run the setup.py installation script or simply set PYTHONPATH to the root of the source directory. Feedback ******** @@ -33,17 +32,17 @@ Migscope provides two kinds of cores: - MigIo : the virtual Input / Output core - MigLa : the virtual Logic Analyser core -A CSR bus controls the MigIo and MigLa cores.The CSR bus is a very simple bus originally used to control peripheral's registers in milkymist Soc.[*]_ +A CSR bus controls the MigIo and MigLa cores. The CSR bus is a very simple bus originally used to control peripheral registers in milkymist Soc.[*]_ .. [*] More information on Milkymist on : http://github.com/milkymist/milkymist-ng -Because it's simplicity, it can be adapted very easily to a wide range of interfaces: Wishbone, Uart, Spi, I2C, Ethernet... +Because of its simplicity, it can be adapted very easily to a wide range of interfaces: Wishbone, Uart, Spi, I2C, Ethernet... -MigScope uses CSR library from Migen to inter-connect cores. MigScope provides a Spi2Csr Bridge and is tested with an external Spi Interface. Support of others external interface will be added in future versions. +MigScope uses CSR library from Migen to inter-connect the cores. MigScope provides a Spi2Csr Bridge and is tested with an external Spi Interface. Support for others externals interfaces will be added in future versions. -Because Migen is a Python-based tool, using Python to control MigScope gives us lot's of advantages : Python Class can provides the HDL description **AND** the driver functions! +Because Migen is a Python-based tool, using Python to control MigScope gives lot's of advantages : Python classes can provide the HDL description **AND** driver functions! -*MigScope Structure Schematic* +.. image:: Illustrations/migscope_structure.png MigIo ##### @@ -51,14 +50,14 @@ MigIo Description ----------- -The MigIo is simply an internal GPIO equivalent. It provides N (configurable) inputs and/or outputs and can be used for lot's of purposes: +The MigIo is simply an internal GPIO equivalent. It provides N (configurable) inputs and/or outputs and can be used for lots of purposes: - stimulation of a core's parameters in a design where external control interface is not yet developped or still under developpement. - - update of a Look-Up-Table or a Ram in the design. - - read an internal / external bus values + - update of a Look-Up-Table or a Ram. + - read an internal / external bus. - ... -*MigIo Structure Schematic* +.. image:: Illustrations/migIo.png Instanciation @@ -76,12 +75,12 @@ MigIo parameters are: Driver ------ -To use drivers functions, an interface must be defined:: +To use drivers functions, an interface is defined:: csr = Uart2Spi(1,115200) migIo0 = migIo.MigIo(MIGIO_ADDR, 8, "IO", csr) -MigIo drivers functions will now use our csr interface. Note that it is only useful to define the migIo interface in the Python code that will be executed on the Host, the code that will be translated in HDL don't need it. +MigIo drivers functions will now use our csr interface. Note that it's only useful to define the migIo interface in the Python code that will be executed on the Host, the code that will be translated in HDL don't need it. Write Method:: @@ -109,4 +108,6 @@ The HDL Code is in examples/deX/top.py The Host Code is in examples/deX/client/test_MigIo.py MigLa -##### \ No newline at end of file +##### + +[To Be Done] \ No newline at end of file diff --git a/migScope/recorder.py b/migScope/recorder.py index a8570c3b..0c2aec1a 100644 --- a/migScope/recorder.py +++ b/migScope/recorder.py @@ -218,7 +218,6 @@ class Recorder: return self.interface.read(self.address + 0x02) == 1 def size(self, dat): - self.size = dat self.interface.write_n(self.address + 0x03, dat, 16) def offset(self, dat): -- 2.30.2