From fda21f3cb6d41e948e6824d2c3edc798bde67823 Mon Sep 17 00:00:00 2001 From: cdez Date: Mon, 15 Apr 2024 21:00:29 -0700 Subject: [PATCH] Attempting working on Sim04 without the LL stuff trying to fix in 03. --- Sim03/logfile_1.lgf | 2 +- Sim03/sim03 | Bin 73896 -> 73880 bytes Sim04/logfile_1.lgf | 7 ++ Sim04/sim03 | Bin 68832 -> 0 bytes Sim04/sim04 | Bin 0 -> 68984 bytes Sim04/{sim03_mf => sim04_mf} | 4 +- Sim04/simulator.c | 123 +++++++++++++++++++++++------------ Sim04/simulator.h | 12 ---- 8 files changed, 91 insertions(+), 57 deletions(-) delete mode 100755 Sim04/sim03 create mode 100755 Sim04/sim04 rename Sim04/{sim03_mf => sim04_mf} (90%) diff --git a/Sim03/logfile_1.lgf b/Sim03/logfile_1.lgf index fea283a..c3d5bca 100644 --- a/Sim03/logfile_1.lgf +++ b/Sim03/logfile_1.lgf @@ -1 +1 @@ -0.000001, OS: Simulator start +0.000988, OS: Simulator start diff --git a/Sim03/sim03 b/Sim03/sim03 index 9e0361fd5bba974d25da940b6bc90bd959a3dbc8..5bbd9049a29bc5e4854e9ad888443375342d6469 100755 GIT binary patch delta 6726 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 diff --git a/Sim04/logfile_1.lgf b/Sim04/logfile_1.lgf index e69de29..52b0e91 100644 --- a/Sim04/logfile_1.lgf +++ b/Sim04/logfile_1.lgf @@ -0,0 +1,7 @@ +0.000000, OS: Simulator start + READY state from NEW state +ate + +ate + + diff --git a/Sim04/sim03 b/Sim04/sim03 deleted file mode 100755 index 8d57268ffd620d83d43bbb2b19f7340172bd0c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68832 zcmeFa3wTu3)jxdBnb~v6Z4#1@aG!8TAb?loX1ELv3K)@S6c8dwAQ}iJ6F^HyBt)5p z)I?FxqM}t_+M;4xEk(enND!??YZaB&*gtAwXp2hQsI>WhYwdl`nF&GL_x+ytdA{%O z@Z{{X_PXq~*Is+=>kO5F*)t7Y*UXPYo1zhvm?U$u6k>`9yNf($4osE)Er2OFP&bxN&Cud%}mYGDJ8zMef(aDF;gv3!o(-&Rl!};&*w-w zGd1y6c}pZ->yo~mD)Y@Wl8Z8&h0#!-eOMDb62VT(q)$?dY}RFC2a0`I%)Undh^Cj zE-EWodhx}J3(J<~tt7Rh)OXB}CnBHXk@-oC$melWA<`rAWjvAy ze?&f&VSa{3>e*gNt1-`ey_ZIlx0^eKU|6djeR-f<$YsJfznii~S3>lrx!Rmvam#j*5 zUT_4c&LOYi=^K!RH-eWFzOAJbpCK<2OjC-sW`_3?OjDk=MuvYuFimyZb~F4lf@!MJ zwu9kE2&O4UTRp?~6HHT!wkn42BABKWZL1jmA;C12Xj{VY27+k{(U#5dtpwB5p)HHy zQi5qp)i##l8wsW&IERvpJ3^^2=SmQgIlY}Nz5!K4`;tmQuQUAxUlYxU ze+9!QgD?E$lHdy+j-Y-h_~yStDG)GO3Gj5b6#53tu=&6A_5ZqR^2AI;nQY=1?h3t$qImk~-0%z<37lNhHSFI^wUbk-}aFaT$bfZ1ipHg)~@q z&k~}l3!Dtr)iFc$3(jEpP%!*P>z)gUFx1cYY)uk~@QT`i5HdbJk9E-7`v>c4SOQq; zL`W*Ihg59+uYY!SR#kLrzKwMNA*2TjDUZc#vXr-m<<$i}wjQmj@E;H1!Y{J;xNu;b zT7NQ##VHx*1#5F!rC#q4HiSiD7q#Le)k=g~W;KSNOZG#RY6C3U1Id6}+hb%E+~_f= z*4MKsyQ%e=)194+c;zK-sBlFGI6DpjOG%clQbVN_r3$~V^-W;rjZmFwT zH?H}ROEj&fu{?>yLKz(*^|rKc<(_17e>x?S+mPJvp}4b`ZP?sDjpBAl?jJMv326R8 ziz8T4Bb->9GnikpQ)+Yk@(q}rbb1Yjvpuyr2wNb`c7EYY z42-4sFMLT^{@R@3GC#dG5ai}D$PX`I`7bK&;Ze9=QMj?SIYB95JX1GiWkEr9cV#Mg zdN5qk8ZJK`&S?qHIo1?7O%&}{f*##9Yj|zW>EP10f-n5Z2}50G&l@MTnURHQJ@G67H`V6);9`!27cf^uvAZF> zzfJZlN#>~yJgNuYZg^+t_%<`f6SydrB29x3Pa6Pj&UxJPB-V;O#IE=e2?6a1G5?YIEMk zyAEhML4m{Jz^10aVP!T9n$%J?az5aV$ELdI9s)Z&gKe;Jjx#`CjN>8Z3G)MW#l{U6X zVHY!2Sz}R$462yagv(no7>5I=p~l3(=?e6QR)$Vn!x)TQ0hcLn2{&&F93y>et9HPW z)gA8gn+ObwN6D~tsei!aTJ`P5FQE<1(Rl11fi^k`QW%5h1ve13Hg$R#=Bu`CRUC3?QATz9zUFC}~!z<(Rnp%JN1y|ixWWKG)MN*LtD1tDIE{m{g7x^AI zsmKtI$P|0GBB#A4lzY51O1Y~6`#Sq#-ePv&%$X) z(BxZAqQZ5eN`W;1F|$GFshxAIHm3#i)~Vr>Jd3$SlE_(1g=Fig*yaLkdk5nnct@fU z8ug0<`zpz=cGd>R*XHc2EpOyXpv3yWcXn6!|CM(ThD}`UD zmU-|L+ezA{3ItKM*{;~%{tMeCM=9|#!2iTHe~@CNZFVwqx3*aqNmnJy?4?w=5@6eh zI@?C5yvdT}cM8m8$^U+n&5SHAiJ7}q>tn33U@NJ9+n?DK8)RPVUVv>uQj1(88$)Ga zr;NaFL|S$PD9Ey*o8WOX74Lcy#U913KP*z64Zu+s3Bvu3A)0pawt0~%T`g7mD;9Iq zq{B!hQWiyhpz@NVi#is`p7!lU(fZe_eftTn{YE8rAHeo(a-Pr}l(s@;KPIW}RrS1A zg7+)%4hd!{;UV^SaVtw%@UA}~#&0&DLf*}=N~Cy~qwp9IOuM%4SyT$Mw-kZB#y)vF^COpd5P zx}^Y}xxdA9P&P)$x|$ZE2)~I~yau~Q2P9Eb>(O>*B&?Npit@VX=>E@iyg5?GEiCVB zIu>FfWDdmt?-*RpfWO7y6JUY=z~Jj9lR=fin?57soUJnVVIVle;4bWMS;k#P{I%R1 zR$evBjCP89!So;Ks72~H=v#IC+utmM)2j2Rbn)@*AJ2^C8trI4WY6YTWxHAg}t22t7?)StWyhf)$^Yos~UL*)_lR*a+nbdjJo|awuy(&}Om1Pw#gYm!Y928~QfXX;UE5(A9)F zo3GSl{Mb{7wW@kx!f@{Iw9KLYeyfc+ zHH=YeBkCu|VS%&ur9D^`v=^MUn3hpzE5_HQn96T0=1N+Nd}o)%vWGqCA~YK2Fy=M@ zMfJ7R8^ZfHQ6LFFQ-!1{a2(`Vv6`EP?1yzVyP4$B^Mq{mL;s+iMO zg?V!Y#bKKM4B>0%9LDA+L^Z0AOZB0Uy9TyVI|*%%Q^TRO+AL>vhts$5ViVRb4jl8< zoTI>|EGGwSqNHKPY(;Ld>!7}zJJi)tbJ))QCJqxLo&Bqis3J_%O`E;S^LXq7)Ya5m zwi%CjYt3BlBYxSA$^zI~;;H8Yau2*4?e;-H_u7?p(Qd)FYByT0GFo8@?g+K4q@`LW ztM={9X8Q>Hhp%P>Rr8G2oC2#_tqJ>)OSNE2q=iltUWVbwbF6}&X(1WpXJ>7Acn3E; zugSVJ-UA4f$~;ls?Ox2lx#?7Qn?l8$wdoRhT@dXS)6XLL$}W|a zJiV#)SsG7NUuTlK_`WQRU0^dPyM!fPyN354W^a0?5edQ)Jd~txrt0p278HnBrMA_M z64Wk_54c~1u*u#cr=zNq%MSjBXgPqWjM}PA;HU0%$KBL18zXk9KEPVQ+@*R0@4QQ; zIv|d5SI{dwjB96hwq{me&Eft$)M_u@2)8?13Wt_cB3*%!|D#hw{c4(jF7QW!3c}l2#ZPg>>+)-Reo$2<-t-%)OIEA;KO+y9x33o zHvQq-Dsdmhb}EVXNa@9l!LomCOooi=isPNWjT2F?Hi}`YCjXYLZyRzpTkjkfZEOFx zs`&-Yna|L!=1f}?ks4hP_vLQ6S*3Q&Hc(UYM7rwBmIv5b>T05V+&fs=oeuQt*v(B(F=qpdv6NBH&VKUH2jAu=H)F<+ zi6ERrZopvk$)3Mp<&(%Kt>JPyZ|J}b?+9G)`5owlt!X4z9v7diO+;OB0FNgw&SYaP zNSonwyve5$ll!xG0adTML`P8Yo5c6C@p458ZZ)@M{(tt9{I&HPQ8E{0zMZVCr{%58 zQ*S3>lB#-@3rkw>!6u$dqYBK>j?)u529OhM+W(g7=-kuklz787CB-_QkoMpsk71GA z@T>Qk4Fd6g>w7Q`?ygW#JlX0ZpiXF52odEfqO22c1?B;4yOc_;6EQMRPS%za9i2O9 z2xN8QA6SHdUE*ddoHRM1KZ-<;jzrg`zRox{tkIX(0)x0Fszr$XsYv#}9K}pK1-TDL z<{m|^WaB1dr8Y$p{8|yH%?J`(9*N&-;dy_8@Jk}`Ys>;_x&2J{zEsh`L|W@rL{leJ zUh80+g&WR1lEG;%LTSCZxn-WZ<U3J~~$90FGcb)rxZ$-?Q2# z9K0OEEJKkXw;6Yw0OMS5-OEVTiQa7|njx&)ivxvCfpI9Uw!&rdWG5)K+4gOCTFhAc>tX3C~a?2 zn6JA>4t#-@0~1)^rq(y%2fW8n-Y;0k*8x!WI9tN|y?A9fh7AO#ef1rbY85raCcMfj zst`rVK=BtM=19s{yjqmzmx2HXq7aElR!>euoslDSe=niXGb2!^BStZ13yl3;)(>-j_FwUwW2DzX7K2qszw7`-!d=Ryh_IaASJF5vn+(l0D zMIRaiqO=c#@+{gfVHLa8-e+qc+KM`Od^I1T4ygFVz$sr%71t-K_;OXex_A@Wc<2bI zK~rl=AG7f?f>z_v-kqvJzjSImIXi(E8Wildd(WoZ3cB`ESc~o1`Zifh+Ec@_9+UAd z_PiGqkmrh$_p~kVQpjVowlA{FYqashfJYy|G~~1vqM?J^Zi{7asmBtj2e;s0ewRIk zdS^Hhn`2+f&^q;+saH?UnL3}=+}qeP(f4;ysh64p2L(_~fkq!Ev_B2wAH>OMb*l~^ z-NV4F@S&-^3RlpgcL_Yx}jkI#cQH6{i}9He^~)r~Mcj;Jv; zHwEuxU{?6Wsm~F;f*Pm(#)AHR!8_E>!J)vbu-_58Lvvg>fGtTB-_-g~m=||cFQ=8R zoGHM>yVcr(ygD4f5?C5j4%t9rdiieak9tA^(>ArPb}Q!!WwfUTo0yz*-a~P-Z3CWr zobNkgJ+o4I1X~kT z%N?qg%}^?`mgejOc&_MUU`9oEK;$&6g_X!Zr*NO%9shPujJe#|o6==9ILIoFvty-f5GJkt8vD z5Nfoxk6>MsSV~)NlR72oVw1p>Hp?dYD4ESWDWaZrf$hq?_d+<#TN~J3(|8Nc+F#Xc zbG9pCVV#488H&gwuA*cL+a$8k)Mx%6*Ati4s2S+l13<_B({%d4}*w zw&q8Auvu1iYnICI6y7acunXIfC~HzTsj7HYD|b~@9H9%jRNR>R__rr8=CxJzB9?czSWxTn0cc@Z?|7WSE$h~ zu&TtxHr%^a^CZwd*j1SCKqFkA8UX<+r7L!0WBFFZ z^-k3-NLrJIP=a;JF*S{jn!!Pg_McWHs!YCMd&YcE-Bp#-LVM00R`nMvEP0E<9=EYm6_)n=6!vu+J4j)7*w{TbRw(QS z8~ccj{WO8B5n8UK-f3fgD=~8wrjL#JrNo@CFw1SseG)?lC{(|BHl~s> zdUT*=mY@`9s&|)-$&?sVy$v=dMPf|#ifzo-@myI`ymwLP&PT|U-V^l(e86FcQERHZwMBcplGe>80-d^OrNO?1-&%8?I9Yo%1 z$ZHC`K5yRWY+6!T6c9yA4CJ*?-kg$^MWK>X%KH=YK4Y#EGmDA~0G(p!@6$>`%K`lh zP~99%)^<_P4mabw8MuLu8+VP^o1|d3Lk%cvVF_~uS$!fK&9Vne&-*gKk2?SK71X&- zJgC6?38Wj#wX}uIw?(!})E@K!t<}O;H+pC?QYTC_uv+U66nic2mtxh|2qjR;GqitL zM_azcQl%s^OVDE344CojBJsnef*T|AQWTH6T8Uts1hKbDlGb+)(+wSD6swGvkwKMG zcP~kWoJesto+jX|!j+Nu$1HxDcr$)ZB)-PN?*QJe_49PImzeolJqOvcmFW z6kGEIWz^lnr#Q7WRIGBZUa?TCwubeQV>Ar#7ILJbJlQ?iMC9gT|0*c53Id?WS}q2P z2U>p;>xpB7BdRf&I7u zxjdX2RoGAL!d`(^vR=2dWVx$>KGcSpQ&6pw0Vbi=;lSI~6>mFy8!t0Z)rz;B<%6LL zoeQAImSA1{T9!*^DJ-(}=P#pcRDe>1((#NB^}y2=io-LG_J`m0luwSR3?xkGBB2Np zObT<4m#tZi`nC@Qims`t;CJB9*`I(NAQ!p(D+^Qa)Y9gH1RKCmH^V+U1h`zt(z0PODK+lk7UyojRh zj<#k(oAqdF^}~)~ng<>Y*KZ=<+Kor8StVp{rpzBlFyV_NvL$!;F%#Ls5;oP> zgRcGNNcJt1vp6z`B2N39$Q+6>?Gq!Ex)*+6Dz$@<^vw}esQys^pyORJL=dciH$#DX zy6xS*nrUFpoiC~8!24_bE_+d3>Pp(3mWs~@pLDt;iZUb~8qn)gXKAB0XLL~ii*clskLu_dyuq%Vv%Xm|T&t9~(Pl!?>-DaX6onh_U zuO>cwROm^d`P~H98Q%sBVry*E25KcUfYDwVp9Zv$vJaqe9`=H_9i-?RwMOw{AZ^7q z61pK747bWsf8UoX$-N;DPK?Q~+uZ(=1bc0QESmt5O$j?}f&n%GoYEw?-6r@KN>)X{ zL16ia>2<{1>sp)RHOUbpcRnV|mZoXlbem?UNrU3GHvVq0ocfKhX*QZPw1w98H>n-T z>1ER_F=^l)THBj8O{`5b$)rI~)Y_h~X*#hps0^8I(!g=Fwy;g}xlMBl^(Ra0p<%Gy zoLZi+34Ui1V64*GFGX{awjbF9zc2|9#I*LIilE6RXfO#dnWE(@K+T%!nyx@5Q?78o z&3d(Bg)5LP6v29%-~yX~3>w*xESWjrj*me;w)?Pq+m5y8>8J%>^$PxGrJcvi;m}d* z>_C2F8DH)}RHP9o=P0d-(Oo&ddVF`Bf;&XT*MDG3+>Ed7c<1;^+gyddF@csfDG0Rz ze1Cq7_&bnmMB6VRfEMd*Ka-Ay2$lK(@yQ->1-zJ6X}8$e$FP5`u;UbVfsL)Rv2^H5 zyvk)s@@gCVH}DX4fX%zu#=fht^fQdCUI%PUU!7VTgJ-_)N9}+a@h90jB>l2Q-Va;>@LJc2XtVE-a1<3(Z!T%WcdT5R0%$U&|q$3>$M)V$xY=kNWn+t~b|d$HMaD zu?QT9faP?e#6!S1C?t;yu*PU=9mwD*wMN4CV6ah)?1TFerE#eR0hKt-BM2-}wDw`t z+4zVGYZDw%!Eb5H;;4N@bsFDI;%{(Ac`tTTa73lN9Mp7lC1p3YzP-tk@W;s=ayF|2k_H(rJe;NxrcCe<_OJoL4VLC(URTalIn!uhOu>QlU z3S3E`cYo-2ge{-M+O!vT^~6os>x*zaYTbweKita&vizagC|F^X0G4DOl(c)uKvW`xT~dhAm>!Db`H8&pkr3}m8s$8-=Jx=z4SOh59)_?m`htmPb7Z1HHRAl%=YF~ z9wNKpyeg72%j{2KeA9Z4>@$!)1dYVba~j2An0gIIoz)euX}(Pq)c{Wn9Ijl4?-1fl zup$JH!M2}_50Cz)+xYNDw0rwSQFgF8K{xRsIu?Kp<*k3gbce=0-NyvrIdm;U4H2SL zh=31S+PS25=rbI>TGWt~McPfV;(_WJ*aEK2K{${xtgdeo3^N_o-{d$Wdcc>uawD3+ zeNI%a-wCx)P*bay)V70#x$l~_-iLkH>ngo)Gi;yw+nw}c`Nk5o5Q*3+qi#T5m%?5H zZ76CaSc70tG|Dd+AI8NYb$s7`bFeP3+oC)AYo^;Rqx>E$X%YHIqH9v)c4)W6-WKS{ znw41-;^=&j$)xgjz5!e{>Qn=gFjx-WcqL^GD6aNd!DmZC-)#Biq-*2MA+Upc3r z20;`#zV43bsE{45*a!dIt&Yy9ynVQgHVWR%Z+E^X-?UIHU_Dga_8c;xe2b-gA1HrF zq~jhj?Rd3>MGv}CjK&R%IJ{Yso5VkH^_xCT;ved*HvV(G)rwE?MAPr)#b+i0cpGgM z`<@jq0znH=8oW_zvsLP2&$7vy!{X=6i`AldjAcE9CklNFccGeVMOZ?7%eYolN(kSa zKc}%)6iMhfpcbrs*OT|{#uBd3H~fA4y@|iWyaU(zE{Z3LMznPYe^Jh=R@={jgQn>a zMw&KAO>HOm<{7e2#|4y6z90-x;_Yx)oJMA?_&c7q!bc^f6n;lSN@4mHAyEDq3b&Fv zh(u>mcxa@;?OsdUdYUnIa8D3Nzs&n=rtFzd2a+mgJXR%}`wp zw}&xqW8zY|jg|sxXeQP}+E|G@CDwluh1p9>a2oN5^Mu!T=SzTV=OC2*540p{QKcNx z{FG--#9)U1Sph15c5j9gsxmM`7bP&}szD0BFoYFT2ew$uxugo@n*v{2BM)U+BM$(1 zc`6e9BEs*Nbe{?%_zIdc;P+@c*8RL5Q!kiN{+LDNFS{Z0`_KRN7NB2HrccaOMJvjS z^Ki1`&n_)lR+_g$o80w7dlxZs)83y$+w%GT0PTfO@DC{){JtZ2pJvE%#;z_*B=E9hBTw#YweDIYl$;56y3+EMW&Y6e0@6>~T9TC(++1E% zT9B{GGqvLiO{E|0_Rqo(XT!?*F8f&#f8m>c z@_R+W3awyezE*ZinYISk!lK%DO;K^NAHN8WAM*BxO8j{^cY!&$G))`*AAhu|h0xBA zB1=kd@fYEAu!w#*oNcBJ$@eetUx8mJALY*;G{L`i6e=+qnTxnGQJhM7v;nEYj5%cm z`I2!6(n!weLTy%mVO~*jd1-;d^O;SVIyx$g&NL}y#ic4siwp8f$&<;XDA44LQLJa+ zl@JrJjKE~t+!E6$rXLmLYsax9d<%OKTd_Ydw6U{u($Gk5N+xtIDu7%K1= zmX@sW&kIbQajncyVTkR~J^%c`yg9SxPMsf^5hWs0Duh^y-GU#nU*W$hRI(}}Q}$;% z!$iE|s+;txP1%=}zP55w+qr>jl&-2B&d{^CU@0Q1e@#(nxqnFJ*h2q`GJk0S{dj-T z%4IRy(APUVfAWU?xA(QqPAlxv$-IAtjA-5W?ilTgRZC0q3nuurF{_I5$^Eo3OIOfK z8Aq8hMJ4>s>D;MWjCV|4=`#N~nMtqbN+xxL!qJ&m5inL^yf|4J^~4J4S@k((+Xy^f)!#peN%$9q{9S?nAerLd$N!4pk+w$e0P&!w_pG*5m(+0xRYRWyW3 zg{i=tl{e%S=dD}{JbSXAhApxTY*kJjq6{I^(%P&BsI7{WaN|&@r~k!)B0AV3#sLca z6z^4!w8nq}j5MVy3qsoRyizDvTC}=AyQ$!o8%h9b_+J|4h5ywC{k8Xis-GC zkpVDFEyH-Im6zS1tuD$hC^0jrUTPZfUEZZ#T~Jy^{UZ7UmpCu;+`o32CgHxYjY_*;X&F#djwzdiUXyRmTeO0BFkR5*GS{;QJ0G9;y? zcqj)Plf66-|9c6yLv~(hd8BtCi26B*M0wTlrQ`!;BTRoW{b~3WE62c%tbE&#hF^}W z&dP%j1f;L9hYnv+R85$Dxs5?=zSa$PheAN5;D>s z?d%+nWkCnhB}hGwb#{7?evWi4()<6bvvV8L*O2Z(TKm(^&Z9_AAnib^|E#k!9Xo8# zA{~!3`{$jVxk%R_U5oT>q}z}hyTFfh3DToTAKTs8NnaW|jI=KfRgXR0*+~bmr?7># z5NQE+LDwOD2ixA;k?z9$sS)Y)mpeO;BQ1Ufdg26f9WKcYN4lRb%ORbH@sNID{C=dH zkft|xcJ4$v0^eGB8>tiDZ#jkZNu((*=!f)tq%rsc(0rs>NJB{fe6+K33)0Q_($^lO zdyyVRy77I~8|j2&s5cH!e+z${gtQ1>s$Yoo=>LJN6e_q&KwUSCIy(m{ z8cMpS*YH2UN&2G?qb@|4kT^3T{W4$d8c&sWN$-j0oHv-o5dRGP)k7{+wmwwWLj2wQ zlg`ec!vD0X35mBG)8k!^M|G&gx~xO?*YHJrOV`G)AgnBVJJLA#CjZiu#lP3$-v|89 zAMfnULu$!47P5f8$U26<6TqiN;{2 zZP$h3>l~~NK8Pyo9jh#gyB@^DpGDyxv+y0j-v#{8NPHfnxn1e<%QoP#X>aR#vyC4Q z{FC2;&jtP<@J~e9YA4&u50Ptuzw)il&W9r98~4iskVp2SvEVh(oUMQC1O9#Bk3`9M z*{b6);5YuRv-8;~9iFyyI1PMnj1_lB+WT^{x1*Z8k96<@7sfcSJ*teYRvC1eN_^1S zSrS#ojh0U=0e(KlkL#lNb1eQU;C}@C>?r)DjQ1mN2k?7=9}M5MeP)2c1jr&C=^J`` z|JZ#T^8DLn7W!a%#h=3p&xZoYF*mE|`a6BnWuoz#T)k7G*tAwv zA({fwXS}MYxle&95`WTE+Nv_l{6zI)>U~tvsqGP~{BJO2S12aM6+MQVRYh>&kYUr# zClyTdQ2KnOU{i0I`@jD*|Nr=|C10rgV5Um1R%xM1SF7}PmENn;$5r~QN)M^@9hH8f z(!Z2vnj1 z#xH@7q0nNC*^FoWSUh&i@B7rJ*jZ-EqE0Ze*mOjh(h&Okg2(5 z02Y@CYR7vCMY#&~DPBbpqjs4n%{35|VhratnYoH#9$?3X@xKS(9|%P+n(G)|jY&yg zBB4K>9-8w!;Jj<`a5X1DG0v3?-gFQ+rVpT8dT7prMCQkg1VJJvDC$L>lu;DTj-93CdW?((W?pbbgc4h$`()JoI+g-3To7$&-nu zZ%=;%ulg2de;dD_LLc6*MyhY0f$r>1gF0J!kse0FLihhcx@80*jD~DC{bKHxsk0ag zir=7=?Fm#bqoG9TNFPwpN-+_*hvKD_Zisc)5c)8k*OON@T|*k$R4Xs`X+ju(8sc8!+OQ zAW%~Pr2k8-F9*OoKtKVoYv`vy5%a7IWxSI{yFy+W481ZK_VXkKDO1KouZ)Ra856w* z$He|JCVFK|jJW}E#Idax_1l<92)mB^`p~=UUKYc#GMU~}j$m$c)H%*G0#(r8fd!oB zxhXVh`e95yoELiOF0@Dg2OQ9O5d(>O6ZCYBXCPglkMQoim;t|@fnuE#7#OZ^A!!pC z7^`0aC7hEO7_Vm#W-Mxv)Okgb1+k+d1!?rdcH8v1gjv{Y6@VT3VXDs}R%fUF zA=T%4FE!Y1eH4|mIEG^U9{nM*=n~egQJ+cb+~6sPfP-4h>kud0y&eJG0QzqloFfxb z_k-Lu8F&|E$5C^UR`I-RsJSk{d+G`3m0^x(P^M{jbvb(P6MrL6a(9J>OZd04D8Tppmk+(Igd(nkSw-a zB|4Ek(7MJrsJ>}(q;)6vLk%)$q;;pVC{3r4*4>juIdvLo-DwPLOpqfj)y1hN$dQ)n zvQbZvBdx4hf*fh7{`Go-9BHW(jI^%*0xyrW?tTt>ANU&>+3lPPDX{}wSAoj;Byun$ z!_>O-8hEy$xgJ1H5+M;HXgrQN23Aj>KI9dH=AkQ$_l$Q_*Go@8+f4BA>t66qjH3u3 z?eQq^Y>$hy7~=6v>AwnD$&}BY;EjuK!MpSK>}Owv;kFg5JJ~ja&xAdiyKe ze}>U^L zG6W3QccD=4c?^uzQwehcOB=6`BheQPI|8ySObS5fx(Ri04MIlD?WDwb2fZi1fkz6> z^gZ4QiQfRw|3=u!z3CkcgpYZJ)S2RF!Fy~6WW{{IGt^Jh(_=L~en5}Qh{#2vk_heEO>Z~TTNNIINyeQ-$HIC%hML9| z>MU&+Wm9k$v1zlGjxtAUr{z4 zlkr1~9SDN>F)Skm?Zaj8LmSc;aKd;aei-FTy=Zz9hv^L!d5KBhOY6~r$|sC45{T+* z%ICwg-cymiz`?>V9|sgZd{T;3-|qCl(E=b|;26d44SOma15v;N$1E@58g^G0*FwS~ z2R9W4bz?uYzuv(fU^L7(eu?TXad1C(G&HU^Dj+S-f-4NN!3`#Pw&6u1=bPYcV;Zbb zV1hyHC4k!XV>pVBriJasuST)P8Xo|&%Cn#ytJrSzlPY$sbF6@h?Z)}!@R*dWGp;}> zUl@I5m3CJezk`xr8deo90s0??(s_r}xx<2`&R-c;6$gR)YZJ^iwt)K^2|60~RT`fH zK5fE#Dvk3%?l9{#+n53{R)UU(?G;7^luUMTcXBlBtTfi6$~_%Ea!W@;eT9(+xVK5a z8Oi|BN75S&S$(!~vuYasmkRVT9)rQhIr>QcstTCyJea7~_~TGXz~}3D)wlN`#S-wS zHHK2hL-Fg_l(oiGY04ez9Avs$W2rRVwsqW|cbc}@z23MH_>NhJbsUuL)m4vPZd?rgw(3@oy%MEvGr@d=2B`Z?Fx&V5Ep@*M&NiM0_+t}X zVyr;JZP!&hW*Gw^`2iEV(0Cu!c+ga1f#&;REDWbNt4-4s)hYGuGqH`tb-GUXQ=QN^ z9DQNc>-2HdsOTGxD^bvO`V_LM(J*`HDJ7$jYKqTbNHCT_^ToQ4#t2N5-iuWVPl|>K3(U4|AZ2$d=5>u4MK;PtSlgsB(gmgrjFl3ujzVk3FaDypl-md zaj};8IMC0gQ^PJ#m&Nk6BfRR{A4|ZPP6NiX<7Lb3S?~ELO!Vv(G8XS%@1f!4*)r)D zJJ-7lLA=)t7w(^+e$Vxy;hzQ%cMjZgpK8=>_alJzE7G8Q5Y%{HweSr0PoT~V3d(Z7 z3FsxByEq!QRl2DwzsyJq(C(+8L6ZXaRJtipyuuL*!&{}B;=~aJ?gTHeuPSgyrTZ?Z z`)_rROSP!z^Ld5ay1Bo{M;#WNm}s&*H)l^pu46TlDQ_;aS7X!l_SZU8oB8P>;@< zCZTLrENixeX1o6a!P6|o632mb09(JEd!Hdz?Oni16ei$KjcWr_-|xIl}WOurAMByt_Sp zknhoAJ1HwE@gWH6Cs**UKQ`_xrBG6F<>s?B|RndZUAK_4aA#gjG!Xu2MwJ} zNe``uxpz!BS|%~huVv6W%!_r{B+3f{sSTv9bk9V&^*~B6sa%G6)iUfxqRu4hxL&Bh z>jqcgZ!;(dd%7|~%-Rk*BZ#>3x-me`4wh?iThMS%N{--kNy=9$@v3isoj6*VVi;*o z(L1g;By2UfUOg1Yg;p6pilqzT1zU~YR6C=g*mwZ~wi=_QfF)YoS5UG-3OF`Ra@qp2 zO#u}~dZd5~W27k{`M)4wxzzbtC19wf!3GjA8AUEPcsmsuXvt#%&yYpNDUP3693K$} z)pCZBF71+Q96=Rk7^7s7*~Xt3J3%Tm+oi(`U}9mW@*bc2a(176dD!iiPUBN zlVp*6t(S`&0Y5UznPL!mwxeOsdZPnn7U<&%hZ)IwS2^G!-M0c9G<9})K!2kN@2+(H z4)|i7E9q$1TS4opJ11LItY`X9+mq3tv$*0L^{S7_&LLtZMK z+WeYb|B>;a#E0)eBh|N`kBI>`eL&Eknw0F}%|+>Z#t??g;hl-<>Tw`Vw$^fY2N(|wlTg0?=n?K8oTI&Niqlr zCD^q`!8C>X%!Pil91L;SA)-T`*7ZRB4rF@II)zIA)+tmkIfY6h3#loT zH)0CqjhI65sg0UKC6R~r{(cIz;eY$ohT5si6v`Vhh3ccGP`>C>8xJ)XO`+TrP%tl` zDU{DTweeY}HcUtzk_pwRO%KZGb{>^X-tTsxXBe$mTxiB4c9TGVp+d3p7jCDvvfOSYjfOSYjfOSYjw;*@IqFGGWDsFDFa`@+7+7KvdfM3q7tEQYyEY z@IORF9pmtpswL7EHx6HUi@TbTnV{0*Xv*l7Q^xx!mmEQh8;FNn&hmamxwam0G@Ep< zaZw%KHW_&7#oB0zv{~;}(@5GWFgNZ+{SUF$3XFU+ZcVTNv|aW*9={VG}843S-Zw z_Qxht%t(OW=u@b2Mnf>+6o@-vfid{w^r{7#eb)evT|ZH(?&YMm?1~010>*>Q(6} z)c0?c5GI-UuXOjRLmaFu!QowR8z8OVcDU1C59LcfWDzbq%k|6U+eRO1zId+j5 z0+!KlVgpZOlVhI|b)}EK{b4jnEKN6V@)N(K;pn>9OZWp59-#H43p1B&o+%~sSE=x- zZ|{jApN)3OaFR`j7|vIrh)f`A6^Ysb-gEj< zb#XpY8Cy-HBN`a2uXJt%c61C8Ixv@&l5aO9yIH>k;bMP+jmIPT(xz96;-{m$>`Yyq{yi^i-r({9eEab~8B@269h4&qNqht~5ATN|e-Y1E?PO^mck@J!pJh|XK zsCgo$C249};-zVc+Yh|^5hxl@twY)*$Z3h2Cgfh4mbhoo8%;~xbMeN6%T2;$%}uS> z?TjS-&(xM8b_Eizqm?!!@$tP*qrPsi%RB|%7!s!SqEW<+QRGF+3Nj^)gl;twzDL>Y z?TJsrU!T@_3Y@9dAA^Y=A9MqXMYR5YT2G@YQG`#TfjF#}UBfgQe@BjqLqtqnF|7BY zzKFrau@ut7`niO{Nu+B8w5>A-i(J?J0Poa!=Nto*i-wYV6T47zQ}9W;0yMe$?yF^K zFUbU|(Kd|ZQbzVNOM9EaOjVlWUjVPw2goq7uhMZYl(|+PBjG)jtj!{`ynNRcKrc4I zV%Lwroo9l}S=XheuDM!|{h*$qUkNQ%E8S#Mli4WOF_8%dPD~gEs-WsJ$0T${Ub*Ty2O(A z50Y060X_8$X`@`%O4PEKS<7PAg$(u~6Vci*HVM@4yQn_868CpYTo?{zP%YnA+T|MC z2pUV|bk6@r2>ZYjkoCv_RX?Mcpz|e^?K}y|k1NSboO=N6w945G%AYD|x$_a= ze%e#oAz$lFQ#HN9rK=)~tRjOh6iH5Bk)|5KAfK;LPMFQ=SDA&#iyPOm`irlULLRYX zJwmdEg8Mq9e$dE+8rO|i4((hBXpxeY%aRxI5dlu*v_1!c)Q7pu@yI?MVfBWoZG<4J zH*B;ilAL~|sh*Si=V%4xJ7)klM)l5IC-sN13WpK!YBVy9hz92H@jN1i)QH&i+IqMr zswEFQ40+gL$TJW_o`@Lo=);gl9|>{{G~}s=YX-i{v7mvi`)#q_znxZ*3 z;Q?+s`bebrq+*aHIy|1e06Y%?NZ`Pzd47m@U((H#tr>F1+>krwD2TSv4Y?f*mG}}i zMZzBPz8G!DIS07hAQF6EOz?d%A@7TMV{nd?aVKcJ@1u-?^cF+3{k@KpDoDp90UqFW ze6HZ+yFe+X^KIj+fr_R7O(1qXI5p=MJlvF-k_jUHW!G_aZmYxZ>7#G|6R?hdqHSJI zCpGCf)(6^`he#;bF^8ZFsu`D^T3oV5)0_BaI>NWU7sw{Qnu`vuQ|D?*k&OAeAGpIY zY}JOPTHH~T@$(lT#;Q%GKg-#{{g1DATUR10Szt zm)p=s9Z!O}h;KJL8gNB`3Mv{U3))esH$&J>NpBFFV`Dw@YdTeVFPFP53x&CEq$U!i33|E~k-dWbUnO3E!Jr9kG&lr6wx2-MRF z8X%!8J)fZA1kn_kO;KW+N$W`$+Vl+W31*jj8Km^lw>$m<-i$QrCUm~7KM!ya7sH}n zA&|?VDKeX2uyT=XovJxFne@aZ1Dz}}m@Pr>L$w_|RN{i%R6`Wsa{WzE4pDqFxKW4n zlayKdM8YY)d_4!y(3n4P3Ay@5faF&~Fls<~q0K@mM!e=om=HTL_Tt!C$>R}a9D}vk z*eS6NxUAEs#b$VjN}Nwr8M-7h(h(;z^-Fr0oWpv}N}kk92ccVZCG>Cs84gtf#tv@; zYldrBFUc9x(^MqGK}E(62izA5#SLXe?#3X%4 zLUOEQK%W6gdJlIZj@FY@bv%eP(8Lp2)nunWB{mlImYF0fg-eOGGg2*O#l^99J$u3g zT3V)N+kgtpN?(UB^`%=ZFe=G*Y5&W!v?RM%jEQO7GfChS?%eYgRI~h{H6! zmE$x`i0fHoQkT`9Zj+mvow%`M(xrvHwjTV>6tQ&7F3JQ>9Cl zJyK<~7d5omGOYC(P1+|`r&?e`@J#pX2b04w``cbP!18nC`?(!d@4Ey&0nwzZmkxBo z@w@uzpfu_Y5q>&2RVP;?7aJ07A=x-XrILgn7L7OkOgiCk_yKhi%ZWx<)KP6Bsn3Z- znu6A`H;;@&*}dRaRIwXxHoea()?xXoQ#!A(-O*)wuSMOBKbyYqHAP#l9%K4xtlbpk z)^SSX?pwL5Q@bLZTKZn1>1s(`t1g@1Y@U0TVx@&sxG%v8%|IlBux(Ij?Ve}4UYc~h zbldfMbq#L4Z3Eyc>zUE8FB=hSr+yLrB$j-re^)OZAbY2ux=V&tf9|5P_5-a<_9K}& zC_2;hAX)Xn$`!4KvmKj7M23!`-3y{{+>N)HzJZWQ4evDl$to$**(^tNn_Jn8=C*wX(ttbrt%ae@2=j~$F>$?Wmk{t zXSEw=tbecASA`@IH$xMtD$$Q+0U+ZsUxG z?PmBjTdiBSGLe>=Zp+a;wxOu?yk=X&zX&#m-|i!UIbAY+G{N**bLj2jDW(H;^*q@J z%}~bJu5MrkGz%GRTFiU8&c;%tm!#TW(zC0Vq}i3nREn)+jgK@@u_sWloaqkc0IhnJ zbO%|3K9;9M1r3S|W)oQLW7uPi)tnYGVm55X4;Sm2VMxEg>{oWTE>m8(i&qv!4wR8R zD_M^8G3RTSCd)~6MjTZQ(Sq973=!PE8J@18KK@LzCfN4$Ned^+{-4yw-tQJYtBBn-&xgQHpn{ay$i@4iG ztmg~SXO8fNMABT5v0ucmK-Ozw7f|=2Up#Pf^P1O)9SORKJ4%L5$P~%9 zi@`@l-$`QdGI|aw7kws)A?2dqWny@>@XMTBF|c>ub8+gQr<*`Lx)S4%}ng08^nbQkx?TC-X+evOAOv1 zhAbC-mWi}A;=y`h!sYS`oh*mr>(93q|}6p*wo-6+Im{Ldb){yFd*4 z#HIqxxgvhK&|ehZQMhn^og;CQi19opyhmRtFJB{K%0(O;>?zS}obZN3&#__zqReqI za)Fq#LG(H<`jUQA#2iW-w_GO9#S5I_97;menz^EfqiiqqPYQ{&r_e%kL~oWwl<>0v zB^y`{{EQ(ACzP9sZzm!dDY&UG6N#HdvSZC&Ash&By^PVRtdbN%BoISQ1~EM;Stdrv z%!_1ZHYJw3Dh*?=7x52&{IM}SS$IDY84Jb8LJ>Pj3|xS?^n~!=A>t5!cZej=h?@&V z(gtHpG7~#ukBcP7t+|T#Q_+7RjJZrCc1s*b#J7MrS_rrnfUBIjiaz!{VT^(vmS_ck zD&oe8_#%pP-cQCk9;lq;7(B_*dy*qGfCi8b6mlQtR!$zq7-h)6NUCG%ia zgB)W}Du$F?VWU$Coq|D)&=>%@--yI_MKU_E9v8#;>Sg6uC^e9p|D~6d9K$d)n|2!t*L_erF~-5<+N+cu)Q6av@fGrWliw zq4aAAm!2<$_bD>okg;O)J7P$^=n3C^Nc4P8^q48)ZWS?42(epa7z5#;^+ebMfz?w3 zmmQf(5jJhHNDPVDC||D^(UQlqW=* z<3{vluo#Z?T_TZQJk_fA73?xYqj2=w0F6f`Lut<|^f-d?!t*NE$%9B)F1+udUa=TB z#){aG=#7zmHagcW)KRIQzb6ES5J#LbQm1wqIY*>ENjjy&I=vmCy%<;$cZnYFiarad zVW|6~E;A@WGu>@0N)`j4e)`>Fprc$4B>o{`dj#gUVXCR!sKBSwtHzRaRY|; z|8Oc1Gn?iF{OE2f!Lve|26mk>nD=BIiMnwAO$^#C{O^mjLXnBN!Uh^W$2=kW?h@Vy zMW*>O_zBVHK{5CtdJcU^^xG@?J|_}C5$D__dhZhH$L+!0y|{y|Szoa4!&qKA5lWCFSe#Td_Z zkO|-J@d;ca_c#Wdk-HoTmr*dqw50zy5qDVhKP*x(Z5%7&W{Z@=6bQ-IF&NG!J9=bd zPWh=wTP}u$h$Cq>dbtqqA^g^08hn@Vt_8tH;eAASJR#wp#8VOda*;*8=DAIHuh`E7 z8IOpR_r%3ezsD|d-j@RI={`klefEo9nDRa>$myeq ztt3jKNKv9bwQ0*q?8aPvBr6UoIa)54(vnLqyStJc~0wDBixowPCBplB1o@Fz%{f^E?vNKwZDQp5$E*iDNdQ9ei!r0zL)X5PMiB-1v1 zwm9$IcW36#ojZ5#+<80qd+HFF6l!0G7B~RC|CBoMqB@4AA6!S7utQ+mvYI)SFty$A zLB87;ewx-bxV`Twb?kYyZygHj18Vm}p!!j@YhDfCuhb7;P($D}EI;J!oeT9xdT$<3 z2PznQYiKF9w4sIZXHR=hVN%=`eq7zKfZ9I;hH?f7KgZVg=brr|%s%Sq->RXngek9s z>M-W^aQJ3qxkufA=`{RjYWK^k@0+4o)r&Jg$ zLI-mSM-J|L_H3ApH>&=H{}JVeloX692sYT!d36(-vF{lu$Pu=Lb^bqJ-S7jH@@%IR z42oe=SyKHK)wiyC-XGfk8qAe(wQr7A5#;B_;h&T&x7?SI1&!RdssSYRA zjV1MtS@kYVNw;G?5>W@1)uB1)r1h5CdtKe~xEf@JIi2sjDje#=6ai&1PxBJ;N^@02 zd;5ysI-w41sJCv=z=zPI_yb9GVgu^+D(wCsWqqN&v!>t^zr(t>U+?rs6ov|W{V>SE z5IzT?QoCP=F!(^Q>-%0(kq~F-zEJxSH4(mB^*yRi=_JzibVt|Iq<-=zNu52Z-obZC zHO>TN_9kVr=?&j4G|%F1sD(dDFVED@ySTsrA!8V8eHW2Pc7LKvVL$zpQV@u|r-ui& z{H(f|KOMkNqVZ=dT`bGG&caQ!vaH_h7k{FQU!WE`WYs3x1(kVQ?}vL1V_JV4YfoBA z>Lr+GXTsl5>XC3c+zvm1+kx;owF?S683yJz!{3nq+Um~m6G|apcsXge~>?f0ppkA!dH96J7{I{KuV0N{J-fdxP4CxiH~AT{P>q)euaLs=Q*q2_mjLi6=kCJ zyKd$!>uTZ|y}p=J6MXw|{0Z&62Y;<+;27?A?u6OO^eOBeBKfMw>rNOzcnV=rx}k<% zP~mkMNQ3h#eD$Z@VOgq2efUK|gP9b5^8azS=H=bujw(&u1lthE_u}?A_`KTvoZ5pq zdV(|RfxFcHxH^0tv+wTN(7{=##EMc$bmqhnSwZ%|_(JP@zNLmQ(N6DwuNdI8AA8!VWE zsSYu7S~^*MQcbZ)SReDDmwqJ@+H*G4cb0$k{}^(8C*imd1@SNV#)Ast9t`vUqp=p| zce;-J*-Al(M(8+o?8j4~xAmwY%tkPsURTG~p$9OLhbPpn6KY^X-3prrv&*;|nhQNR zt4?0WDrL{CI<}$IyHw8$AzDM>Lu${uIz9pY8d3Z4Z|{BTP(>YpWfE%7s<&U)&I;U- z@7JNq`*HuWy6t80*1!w!yxO%+w;bxkTFd1r| zT2}i}@uWIBr%pgduB+jBOc!f#Fllj+70GqImiVq33LTimvZI29RR~rnE z@R~Ya)QicI8YwIKV|q){{9c&zcnZy_ERzIi7{ml4o~7N7s^idipkRXDmbb^Xqo&kh z7&w680{2K?IEgjgZG$o;eIK{C4$|-(rmg!;jKeG1tax0s3!E-vA5h1^;IE)x;P8+k zcH0KMb4Q@f;8aVhkqy`kn9g^HU?umwh<$pLhUMPt>g+mAb_LHB@{UcY6X=Vx>cq?H z80^V$rQ1C~6Zmb{gq?F{WLQ7*9L-1V3>ac+c(^HD3{{YJoNw-a!<_&ZKb9*QUq z>7D%K4nK;=ANn(U_#s@ccr5=McOkU{ZfN^yQ0S%}wdX~(`~6Bi250dh1uOp8IfdTe zkN$;s4s8b%QV1w?%)mLd_c3)C_7hf-uqU}%EvbQzKw|38sJ)@VN7RmcLvIE5|BWT~ z^}dD6`aw0ariS3%Epyd8xcm`y=n2*LBo?v5?^b9(l+OriIU*Rt@LEI1_2!SMBbQYl zSYvU9bwOQdq20at9(Ck)Af8k^p16u`$CP{u-V;nkyIxTP&thV|7ekfai&ucbmF^*Q z)Vhj{t5dx{KcKKOrG!S*z!>`e@6=FS?V+!{f1J_^K5&5#7xe}ivMZ@ZpH!1w`Sy=f zacNvEW%kgUIXWIdIyf$c!#B%8h2l}(ZcNcw06j(#+rL5f^yBY_8paY}OdW-f28@QA zfq8cPdhZUXIfQex5j%A}KgPMtURy0XYdV~w!`PL%MlsWBAb1_(cQSk(5ddiCTX@YV zemX{Trk!UrTc^2WU0<$Sa3Tv)g?5_{)6&7sR9qbsd;t$40ntRV_y9*?<3 ze)-(hJI{=sIXyC39vN-63g_~`A1&pY*J}CYM!i;VH%HsG^-8TU+F~%prW0E!Ff21k zHq;_P`WzO^lI5E|B9xHRuZ(-$%h;x{8CCSxBWrlymx+I-b|Ia`+qg1Q7D zqf@t+jYM?%$|)CHx&xENS{dQ~bg$V$@wU_X4jQ%Q6m%F@#xNz8>C&#^ftNu1-K&Tl zSSw`OOS%HkionJ;U$W9{No+y9MAf!fUu_TQ@S4IUk(~9I4vk8_=y==CO2N-`cdA~m zI=NP|m}|CDwPFUrYV*s65#SCxk?}n>CBCXC9G%_(htS27h<3{K6r);82vA{erIun@K{6ntE0JJLAX#U<-nas7AQCP`Bhd3~eTgM5 zv{#(x5 zn=K&hYNqla6o77McD?SnrAD#XC^p?HCC)8j5I1e8Su!kHEVWn$dRh2qd2@dq8Upnu zQqD4XC0uY^sG}=Te;x<(;3Ed`VmcLzXEJUkix|$Xgno9KCTy(XCPLU2NuTfl^)asI z-E0dhw?Z(Fe&utk-pWqB{GLAt*yii1|hU7r1zzB4AGqHVKD^iMZV(7e6E%&7aLaDv(%+r{z`il3F4kw&gNRJ2BgeLlI;T%I~W{72zTiX zkx}#*7*(qWS*$~2lZ#cuV9_W|^ghaN6cJ&zwup0LNQB6`kdUh(q$wI;>eiH-2Umi3 z2kMzhrebsPX$OH}uN0w?n<6U|scyuKk71eF8FxYV5G7|3f`s7oPNj(<>O-4}&15Vd zn1@zVbfb+%?wZpAo55j>q-)N6d_I-F*Nr9P(KJ||HEdboB*Gri&nO|vj+2X{Qdj0E$xRA0qB=&p$g<08~9N2?B~O>77d#0bL+ zdS8NeV}f&<5<9!(wGAa39)eP@Eta222s8APRS41u-LEr=q|w3Nc%fQv*D4RRiyTHx zh+?%!O+y1l+YfdWdG%O*1bn{&6A@fT@NTz2gQ1kK)}akF4;-yP{X&Ph-;I3Hk;!PQ zDIp-lm~LSop;;KD^>P_>QZ>2tYQgf5O=1I`)%+3}-E1$-v}+Q`+o~#XOJ;W&uRx(b zCb5D}n^jL^x>;ttbcA`8y$4fg9y3M_!%}iV?5dO`(;ui?6jUagvXbGFz>Xs97XAbV zS|XZE+!trFI-LqNVHEl1@p`dXU4@*uZmtRw(Q#oRf+EA)?%CW-gp(XjM)SbDvyyED zW;!0VBICMEj&T=VjG3a^Ua1+4FqO())aoEtC|K#2mYq3`wz=&Z=erF0D%rBW~kDdyB%!{`-Cjj2RWLI|!710j~0UxaNKcTTVDuF{Hl0`ZVE|WpmL8pxr06?e?{coEJYe->n8+!udXdv8z?$_ll}6Jn zT38n5Qmv0 zlO~Js#+Gdn>**TJ6%qf26faBSE((*wv($?z2(fWWq@ly^o ztbt@?5_}n}#{||!(n7P=)|57#LU&VO|9PC3t^{5O!giZ6)K!e>8ey88{r zD5DuS9bLE(*HlT55s7?jVtT1G>+rz1rDi@?D>-_;M%`S-8xw$IKbNOs;VebE&=Va` zK%r7Xz9OoJc91dJlmsQv2hnWRSEKNfz?y+z0-+Kj4018G77Lj6JzYf2VM#$j z#oP+Y6iO+<mRG}yYcdTCu=j%0$3xI_RSR1e!C>~8_UUT_G5h7x}RNx9}%_R)~ zq$c3fS0RIZxl*PKf$}WSS&5{qTW~XrQCJLE8dR$lz*vhAcDY`WSq2#Z)+O*J9i2|x z<1VHW3t13PY6v;bd%k`DwSiVqva4eQNedqWnETH@0G;EFmYy6Zm)^0Y& zDz$vIjlqhV;1I2^HY3ZPfvKOmN?mqz*IjB=szhyCOOp4kLZ#jX0}ZUBT3H$^=ksH5 zl)7h5k3xa9ua1^$?XihTuYNx{& zr}L-@X5Td=M*-C0#v0k=LEgumd=~@I5tS94*R<8}b2EL-Ya~qQVFpMPYT+G{pLTHr zV~6wIH-k9%tv9~J-{CxjUv~2vk-zxW5Ynyi5t+~F#Yuwa4;n<1j2QT80Dj8AZJbPl z?j&&2;~aAywm;G~FD?mu$gy!RE&fBeVZGl8l>Z^YKjhdrnil_)xY>&S&u#<%!Zz?P zZ3F+>Ht=t41OEZwY_Io|cs%oBhY)Um6_4*U{e()%$;|3lK&T$g(kq+CvyGg*wPkR83m6N*& z?>*|+_`5a(Pt_#8^F9s1qg?mlhV~4vj!fF_)s?R;7Q=A*RLVd}{ z41O>I#U}yphrW6;pl7~e_}Opf-henl9y~glC)u*S!MG<+8@T-nGh&+fS%GhE zFN5(=Zi9S&8Ss(K=+1Xc`N6}~e`4Ul!|?}jk`Cz%#$>%o;F~LWC*W4b{BN_w@5Ona z{eCFEPc`KS&&;bBc<|KHYX%-X_TS0m8?A{5_Eg>6QpIiIa|i&MEjVLgz!$K~TE+%h z5u1A}E}Z-|aTXNnZn;`t%2nM0yx~nZ*S^YK>(y$pRV+ltQPvh1*z~JaTyaQatG9&> z!4h_{v4PNDS-FNRz9$!$tuEBA)s!qBv?m@k{tQbF<8zIi@fL)UJM=A=s*%%XEgLyy zSFe#tE;;#b!Y;6-nKNnn@aUm-9e4U(xb6}$GzH(kxbcgwetU5`?YI|`DY&)agqg|2 zvu;-WPF(zQqezy^+i{AxB%Pp zTYORBCbIKxrz^AbF?M8DoG@Socj5I8vR5hz0CgRIyXSnMU)A`YVxAL;E3{3{$$(GE zEBhV(JvCIHB8g4f^7|ukS#{;uyyL_AI&QVjMv=z@ z@E!ctzAEj1=yHAnuj2&9NCacF;5Z%EnOBx^jd{=h{R6xG<+|mSdd&!*+vPez@y)us zoU0Y!&!hj8&WsveJ8+JRbA4X#{RcK6{C+L{aY7eUHg6!x$06Mt&!E{Sf!OmhpDJ|i zue$D1vuT}+am|#3l(vQdJbpn^$&gwLVk5RPPTr%VknBi?;19L zJGEID%=Vw4`dVxDh`Wk+T?}lii#Xz~>h2ovXiR5kWy`%6Bg5t+C+q%k`R$BXAGqSW z`KvjO7Hpb5*sZ!meN!i3w0iDyc9(yzVv8*|C(^vO0^cywRzs)D_D&qbt4;(TdlVyZ zf<-_kHbz_5e4wRvrCJ!pPPN90P9^Z|VA&D$>wi4?BYP=!w6vXnOI?{zr-&*&@ql$m{=9@g6TrRE$dD-+<{pi5# zk}F7m4p5wx;CeHACaqqzszFm{}k*{UN#LnK7;&!0Jv}Z=>L=< z)TTlDZ9O*S(W3w5%l{>l-=^pBo>!254aJeoxFJt%dHqDhWz$#m<0k&u_Va{Z=ASZn zZR_Wc**>> z|D5+3Y?FquWbt2?ZVUTs-1zfb|ENv>gD-tou>LROoj?DNc!)VJn|{s6gNAnc-#*iy zjZ;5m3=wAi>4=dlSCC%&Y|}S@#UD_ZVe9$tU-@6=|330k_H2IZH-6RRf7P_#HpA9y z`|;DrOB9>`^S^}$T%YI9k8s_p6YsChZ_}UPjX%HjL%(72KkVhyH#VP5cOtVtzx7is zn~auDTa3+TpZk!RFiXE(hhH`MZ?%Xf4d&-LJFI^^fM@gH7=RO(mrakE{2JQ%`@0Y8 z`w@$1UIiWzes-X)`o}QqyEkzCuiP+cf#wWGz|C*M@7uG!O7@ z{F!t;(<26u_?W3rf|?5{@#WAyhrylKE!pV|=<(*`-aTCLe*s*RJ^56`z$VL$s^Zv?tkw z{w6DX_DqAo(I?1HP3y^5r1*NKvlYFWQW^AF@KL1Xe^Xw8;yZP-l+!akuIgo`W_eeE zkL>cVe#~aRT9tRUc9@{-Z>FkvZTzb88z-GVepSi1Rpo1{*N<`P60e3pJxoYoR=opWZX^M`k5_%dI&J`mOQydoVO~>FObOzkk)9*B>=y5D(GN zhv-e0Aei3M@kcbW{&xUK zdVU5YqqlOWAwNy)r>$?29ARYgiFsw3L!;#I3EmTOCw!n2nzt%?*^MwYHF2KmyZ zx-9`m9HsYRen3z*H)IViIiz&%U4xYm1<>ct0Pq!$)L_K zNxN+BoJ(dcJvZ+{>+QVrt=Dt&F3^_FSvYTLNoi&2it?&RY30IsvsP8CDP356r@Jt-bg-!VTvM?S?P^ONex=W$aZavb?G9!W&d zkxylqpHYr{({_ZL;K)})HnU82PN5P z=tq&HaO|Q-0CbE-wK_`hctbo4SYLv&t@4S#^Hv}W!4tmYI86qlFC`%(9DPBfq&0Mc z6h_)X=^LSLs@>6fR7z{dfPaFdQM4;CnZd28#29NN{#b()_BM#CAbfL6U~^xj;l{1Y zh^jGkBHY->4E3+L!_haw(Vum^eE|_h1_oYiNCOdGQ5z6K#y`$u9rUh2;l>7*0G37( zkqYb~6+8apAKl$`HQicZb0a_qNoOI|iFnPB@@{2$jbWdyM~5o>x#3*+g%%$d4s2`3 zkB722CF8tstgu7s^&Vj>u}JKpRbCVY$Bn?ZZo+Hlb$CF0cw4wJ^L4T;*xJK-TQ~;YvevO~ zT=QucYg$7~bsC9BO1#|$U8A-R8r;?7>SVROG6$L*5b4>9*~X#PsO zE8JK>)-p9mwTI4xmxoTqLcLQoW_|ApvOCx9Ce#fLRbO*Li%g4!PS$t0r-V*aPdFQM z4A!kbC_VZ8j#r@_jH`E%1GCAeql?tT)TrFF(DA_C4*@1;jU?CA{8Ni~_rPpgm*Cc} zZ`W0WH;NoqskP&&FSy4IRp3JsoUOpSC0MG!8VPPx;2H^jTY*afn*ITgidLVD7M|ep zEvHF+ISh3=wi07BbShSuih7)irp5|~@k>EwtS~6wfGNzO*KoAJ7b`^A0%3vsvp{NS z0=<70NXrk#3P;KOoLDH#&0~-sUcmAXD(+EnxV~|?39-VklrWj8Tl4dwAiKNOH#(x# z$D)Pp(RoK(L#GMbMYQOu`J-Zmr^CyC9)9KbMp!=>3muCZ3In-unD(eqA3Ck~hHZ;! z^{2WczF6q=w9wHFPxQ1H4MrWy|0XR40jI*Pq{Nvzn%YfOrNn91)=J@%0tP7_r=CKQ zeyqc>4F`JY5LN+#dMeCII|8f--Y-8DA4=+vr!sYY%_%J+Z3;UPR}hrUh2jZLwc&h% zUt;wN(cYKjo6?W}HBR~h3@L}G@aRinqK>|h&&k%wNLoYhl37|qZIqM+{<{S(6581s zdP`;#Bh+q?EMx}r^$1=`0#^?mn`~6yf<6~&;deo&6M*(eh=ylCyE|{dyaQQauiM5H z4Mi*^)Df%OjErdL37}gL-0p|ls{nArR0>a#NxmosOXD@p3p<@c6nr~l{z>wl6 zFS8VXQeraV3Su#c;9QrV*u?84@gOB;uZ_7uV%+tiL)0C}20LtQK4Sw7Z;?Hv3Pm<{ zh{8StY%KI{lt=7Xs4dz+6OvfryLi_Dtt2RPC>q+*8akxRhH;Tvs(~CQR<|9wfoCBC zK|*D1lUWcTediqMKNN6w!jl@-g0VjImVOpLbNEn0OQ3;vu6g!be>@zHwqyE24H=F- z%q|l3g`-72Wb%|F_An_Nj)u{7igJ)kMS*m^%nc%UR5&)TE*x931ytxgMU%s^!X`w< z{Eo*dp4Gor5RP##2vZ1hdUNL;|F<;Bu{0@cSDhI3&d-P8ky3|K-GpBMwJsK}uj$Yt z)0LmB4_VHbb0N8NprHmc8RaK8*w`;7N$gU_Dr+n`B_lfKEz#-@jJMIyX{a$Rbh-w; zp@X5*)<^{-*T7|}+oNq;LPts8Sltd-vi_8}`ep*d;t4WrW7embKdZj|o6o5kF%9G4 zeKgwW1V~{F9{Otu8_QZ&1$sNT9JzHhM=`s+kL0O&=}_c$Zju>R$)4&Zn8ej_d958M zKI5v}iWJ+5ER>3zf+7gR=&}f_c9DMpClwjtL6>6h^T_Gy1La<=j8pC{SZm z*yK>O`n70bOLX4;xd?%Cqw{t`@b18ib+pFW68e;&Sl#^qqM>80p_6z)NN$(OQJEa4 z~|KNj)_$0xLzMRK{8Lp@+V_bwc$lY zosTw=rl@`pS!R*ul#8bf23a#2YU{ev)Z^UV%aTepCT*okz_4v${cud9;r#@L&l8x0 zZFu9%a-XWNdCeWT>-%mBT(4mQ+`#OOVk#Of<~C?joRvonsJC^un<~&q4*SwP!(j?* zBqvn7l_W};VW%>~-nyDk;a(F^Hr%KD5+rEy=T4x)jiOP3j|0R62B9Z5?`W*B9aGbp z(G$EFx>J(KmBfRRZKz_q8DQso7ze>S29407PYLa>CBNDk3r~&}?vGWsa3xUU(|_si z-V*AHh4!Ply4-L8O=|WX@YmIJLB|Kkrj6qDnNr8(_`?4A-=yPy(y_3G#I!YrsrT=U zX~>uv{nO0oq3Ao&g9nstJx;}c$IQJ}@JU&mtl*D92Nf<+Dtr@Q=P85L%2RpkBuT3R zSDan)6;8=ZC0j?ntlR{W{0JnImFBUPqHj~n>^sSJlD4S>L7Z*Auh{?eU##biN{QbC z{GZt7Qz=H)`E_RQ)izNl-NUlX5lV$M06Ra_**57aZ;>QvSKt*a`Co6c1|J&Ilb ze5X2(0!LjW4EH;VXxhWumO53cA~}uXG}dd>q_asSQWkj~DsMu3QJqfq^S`{PlTw7N zy-ya^ti=B6I6`>=IZtFBO1oWUA4E35@2YzKNP_>Nz$YX)PZ4h=8G)v*(& zm%FJ;Z-QOgs4~|A8+b9)rN)Ijj$^+7wS4Ia?bbwJXhRa+`W6F?El6fZ8xA39Z8(l6 zYyczhD@Wy61Cd~6fc(I-4a63e*hZdlVHf3Ph}SxPdp;)h;lRcg9$;fHQ8Ab*QK7M| zBtIOh#@5(kc+J?%h;=kKgP{tTB&S~S?$a}_p3 z=56GquoVy9o?tg|n_11&*|B-Y=8~M)JQ%mSjkw7EIERSUv|npRg|WCGL&FD0g$p}~ z;I&lrHm1eC09c%np@V1cFUgkV=8es3j}@Yg8mN)yME^D?dg1`8Ktem-=27NDgvbx; zPw2Em{fA!kPx*KB-_9+q^uP6!uhM@MttM_DC8UWPZAbapXt`A47~aFgH;?}}O#CJ{ zqf+tRkH1RA2AY4zzRJYZUS#5%QK2m%r-|zb(?kCs`IY*={wLC(7B1!@ zmsVU@b?`pYzueKmL%ps93s}|b@uybkk@RcrwRS~;X4jRxNQP)yuiN3UrVn_6aCM4Ec zRxM(WurD_9EP{d(#AqE;5Rg&37G_fum*L1W$07tOEEpSk<1aC+I2yU z-?7*A=4XL(Ac3~jQ}ctL1&UtzEHJhu%4o{QDl?x3ulmqQoi`M!Uqd!HU?E@|B_VH? z7PbJ~&9$e=Q|UR5v3vLLNkOX=Dq$B>??tWbyV3{ z&z8L$4Pdn_JCe15a&p7#aAfi#tKcWvSugn9S)Bl$!cI`Y%b|EvJ&s7}Fx44da5d)Z z(&JIJPG>uKmwaezr0le;hz zSB^0sly=mbKwcfU5JS|0!;*j_+zddYb>$g+Ylt`E)Jc37oja)R62b1g+(|S0zU=qE ziI)SY4N_xuTVQ+YWp_1Ge?<(iwzr;zs^<3AcS&v9-ckkOh_^~Po2-~xcB#1e#}Rg; zNfzpZ)P0sY`rz;R09U z*9ujE`cp>aO6%PnndRhaqn-Ts&{2XY6B5+njT8mZ;b2)H@0HsF^sM%?6j-o>Ug9hm z@sRZ*cgMRpHuClAsa+EtrT2}KaW>^;hdIOt0hQq%&XPXNVRB1hzW!l5xWiK}z*<2W zpFO4FgD>-xsaOwSvIsYk`!?9hwYKn6`EWLhof0}32s9jq%m#sYFZmUWgBvYW6wkhT2xt_)##)0Y7ZGKn_?-f;0N8mMmD(td$vioG zyPD{rF1j;aIC{s4o1}2kYmL}xqEjafSx$A&cq@VtL0*F?1lu}7WkM~+|)o{8LV zICBpoSF&-Fu~IiW2_91fYJ-BrUg^Z&Vc~htg78zF_+qnw7`Gn%16_?3TBoK6FcmCX34tV`9~Tqnf~r z+7_JE9K~6UB0+8&Zax9VQQ(Hxk*Y($JC3(OSg&^t%34G3RniqF5Fj~8$s3{1b@N&q zf=E8OPb(qdobm{=F>5YXI?5|g^&_V!d=JPlkxE~E=zV&H+VwT`CwvEfz*`U11H)>q)tHrNOZatP@{`DTHW27vcn_soMRn66 zMyj*GDyj@c$v|<0i1{p?FMhQv(#t@AGgOE?g1A6VM4gc%^B_N=D6-h7lM?k)AE8dx z*PQkSHb2j{qVv+$jv=fP;xyh1csptHKM<%X@sJAj=qRfB;!)Odl-_k$i{Xh5*r?ngG=1EA}wgtge7KYy33CGDwU z*-u-3>~@wt>p%f{o;Z0iTi#`m$7bzXVwd-zjUNd-`T!;&r?m(T9o%;JTlSWETrTzC z7EIxH*;A-@MpLn8_PGqLGq0U_&CJ4?3+c+wHnvRsl^;~<)z;8!f{oBZ-?eECZO0SF ze+`GJ^&L8VbPoe_qHoOP<+*}hoB5JOxHlEA;rdT?1c4vZ`(8qY|N5u!%`K_n(XY|f zjrtat9;e#45Mv77$-tcG!I}GrUO_E0e{4bjy5Jq^hSD3MpTK^H?GDXx;Q)3jQ9N#{ z!o0Y-dIfF`O5`6iIoJ(T7-3_6Au$Pi z$cs7~(35&C_PU{|}&apa9CspBElY!;e9HD+xYWvO;GD^QKgR?;$Z zlGK=0Zj+3cBnf*EYP8PZ!MY}~ly-?t>XxKSO#)NeP@Cj;8EoF^j(RqRwkz{~8^U4U zSZI4g%WXKG|A`(e+^&R0d4kqC=Zx~-vfFO+mkFQp)xv2tYU(a4_fsrQR4b1BGU2o( z_Z6DobB6Ffw&sV^*(_^%HB0SR3h$LI+=K0KoHePN)Ybe%tM=5@9Hwi!m@a# zN5hS!N3Nf_c;=FsH_Tkx%bldcqkM55F}4*96#Gs=pw@+TyJKcUlON1?rUy56ShF27 zZ*1hQM}VSxiJaD8e7 z1gOlO*v&1~4{BS4r2bt6^Sd8uil<9-&5CH<+RYA^V!ox zveejK)qf1)Wg|pSZ3&&Ot2sS>Bd%AUo>J@O{UZB%wbfLq(VEk^J$3@M#WE>t+c3+K zZ@?&n6}b;rZE;(s%Z1clOvH2DWOI%BGA>@z(QK&yUKBTZYHt)wawnkyUKs%!Pq}4BM>{5j#Z&BC-Hg=}M(#D^{ z?zFK(6?TV>z1PMHh23OhH`v%uQpg&Sl}c*4jrpm>%vYE{53#K9BZ)a*VJ@+Gz9TVo zC`0udYh!8|Q{B@s>?U?J)<(OiuoP&jx5~!kNsOu9VjGhwF{XN#+L$krxw58ucLuF0 zwKL|c)Z_JVCRYv}d&OZ)7kgd&E{oRef|u_I?^$s9rQ_z4;W1Id;t2CZ}VUlv4Ok!xTM#DT}cXdJJf)(9+ogykoCt4 z&@6kf^sLGSKk9tno2YZ6Sg*j%1kz>Y80{nT!u1x3;sDTL;pT7`#DCGs(L2Sgll35lhiOh1Y#d0@b#$V&ar%MHIaOVB)fVsxqEc(+yVft$O#rLb zsZN&ZibY+nWtoXig8m>-twt*ZEDmV%3TyP0yczq#GETM@A;G>j4OZ}ppVLyEW*6F= z1G6gDl$EcjuAK97aiqLrO|Yzdt~}qHt4{m&tSSvwuU%D99Nt?Jtg2qVytFDDRVOxE zcar!$$f_!DU~2bud|xwR*|V!Nb}d*!G59Mq}1Nn{bj<)aNd24va!WbnGKy^xVz_Wc611B(wC$ zG;}Cl270*wxjY;bS6Gc**qhKw*6U7|tWJ;{5KXBIwfN>`-eW96o;*v~S(uoUpP~~|QOpYB? zt@FQ8Fx$Ve0N+_OkK<{zNZTEqZG<-Kfvt7eF-r5mBhjWUKy~iMBW6|!nRip>Lk_0K ztW&hfD?RFF%xWgKQNWrK}h5Jpll8yhKI>L7nb~0!?&5ylWlPz?}EKN;a2H_aeW`UeuTswiRCpKIwF66lIjZ zUh81}MjY!no3*dSict*>c6?f>BXIYpw3FrNlX;{nvrCc!eB;GZa26#)l<-@9Sj^uof9X-_*mYFng53TbZo8}{%X1Ym(o~U&`ZPWb9rpYmB;5b@m z)Ta4~O>+|UCrj+1VX(`bTE1Zu{K6!_SfzDchUOw|_t^wLGzk#Iw5}0~;4zzk&U?8C zOr~i03Q)7Ax~40T$&@QZY}RWOD_ntWp$Lj>f(vW{GN`j5Su%6L9iN1JZ1-XJwhL>| z({T&D`qliMMmvv}!;vG_*@65XGrkW*-xX}9?=sVx7~PfQt1ocZNw`B?e0>L7;%0n( z9q$}pX`8DoFh10NYbHW%2;Zt7FWP{-RdoIc0%)<``IK}lM5wG=iBHDHE8)eoO1sU* z)?)u!VJ9l=^)_~ejm=P4<+3EXz{dU=JS2Ir%{#@$zOS(Kh-siyxMuWK77Ifd1RabX84WX-U&Etu0w!&D4h7Rf?U6ZM zL#_JJW|d_c$LXD;Qxl0S`%Q~Y?e3W0MXx_D;{^&cEp-cA2H(?DWp^zDD^8(Q`*r2g zO}9AX+oixHr@Jmf6Hg1Bs2xU4&5cM!23}0%MkQ;4fvh?CVB|;E_o`29*tQ2vZwE+n ztB&ZQ+0j;fkFG8Hr!Di2Z7FQW*9~c#=?IjgT{6q59PZ+1^Qrr2=l?VocI;rS9iwFi zPGPzuIdwJ1G@8Jk9=!3xx|(+R9*q2gu+`I9o365+p11{jeGbQ?)^!y4=3Xw4<&VHd z!N%Gkf0vL;sl{(%gpSIcK7Zgq=*X1N>FP&$vYgZg13Ce~J8 zP9=W1HHRAl%=XSq9wK|;T;Sx)2Pb-ebz2l)&Ymax45SZ7BeCCTx>lfu2vI6Tz=tgDPJokFr*vhNXUe=h%qQ(;Sn)vh3~T|%3K0%u3~L;a z2E)uk^|!drh#v5zp4^BgaG&F~8+XcrT01`fPpEAN3v=H!e`5gqu8V5@a5HS52D{w! zV)@20v=E8dDWh%(8{7C6Y8ZPBw4unp@F@g?qJ^)U(pSWBX#hJ&h{(5qZns5uP}1#| zQGO4WvZh)h4qv9`kvn02QPXN-VRs2r9 z#gae3TTHxzCkCY5y!gyR0Pm!&;=qey7Z9`%rNJAewppd#^CFwJEh@G$FIJ1<9+nlw z6NUa97meFuqDn%1?KmdNC4?{ApVJZ(3nX+5P&?MX8xgS!cVh`x78vzw{Jn!ezCYK} z@ji+tiWao>DgJJqRjtmafPi-~qT zZG{g?NGaSRA*Jx+68a+)?jUs#iO!<%2&ckbeoNaXnlaM%)i$=^v8Kg}R0T9ArRDm( zHarRs;jsj@t=U5i$Xd)uzCRa&Hj6_<5jsIwdL*w%)wIt7H{dpR>O5Ssqifx1p$;mS zrm82_jU@z8ii?<15->l=Q^#vGLa2Km2AP{8!IX!r6mbO4f=Vdk>Zl#Nb$eG(Tftn(3+AwZCuH6{H@l;RaR+v z%kdM{vnp1vE?!d-oLj!8G&PNqW!)udi53#|_1+mIO=6tJbb6zO5=KsjDmHK?K#pq+i`D{c2TLs1l?P z%5>6IRhj9c5>=k59apG$?OObRH-4*ID=A&4(T{sqR?z8& zwtQ{1#=q!IKk>b~bhTExrbMf{txCHU7rx@!^VafJtAh9iaQtw0Fj5gL#)%55&(bw* z-2eEa%`C&ucn48rMdfY5a-92>(+`ESjkMt99}XGnM;r+ z#B(a;VRKT284IgQOC;lPq)yJWu?EYE%U4xbmMT1-##E_8p{n>ylTub(R$}?8(&9?; zTrw#NG&xOG&%i4oCSDnV$+Y@s{4EC0SN-Q9y;mf!9gUWSUw za?yRLwkW?Uh#zxT-o}ldpnWABnw@&uS?I{MN~d0w_v*s= z^XJUJEC|9#X|SxaVs-H9(9GG_$qW^C*dD#}FAQBhZ_fOg3q!NxL^!2Fh^5$V_|f{+ z!3B|uwT?{Lf9Z4*@rkQ$(yKOQUsC$o%1LeKhptt+s&+U-&sC+%5kZ5umPb|whv!Ww z3$CsTR+iF_^_Q<%k)SPnySw|RKePXizt!Dsg;_dt56+emtoPoXpk29kc|}R-)Sxzg zZFvc~pEiE^YI>>SC^Npig5NovKT}Kak1wuV5u7M9>GfR6M6c(`*NU~|2SNIO36L>4 zZ&I1YcCqxLpd*iMtzJeawDEY=f8|-~0t$QPXcQ#EakFV4nFZZ30#sI3uZ^I`so@1Z z8UM*Z5dT|8sXB{gkF?~MuUTHPdhM!G@|p5VbO~sT93Do>Dyk7Y(UfN^O|$h}E(=EU zl$2I2uPk3nL#9-i3M^c6WAUouHOql#PY%*BMV5iBs;NU%A!J%wo7DidRgnsA918XH zzcx@r2fJpE0~Giv-m4yIjRBkPuDVfMS6)(DVP;Uh)Uf|m-lbhrT3JQ?BK`xHI4|$q zvIGs?gXR`NmNUP2bt%&UU6r8CDkuytSiZ8fq#B;Gpp-fRBuU&=)x~Qf)vJRG;a|3B z;L!W#$&pC;yorT(U%5uRvaHO+&s>KHNB`@Dq>#L3cb#<`VtDXsiYWL<+??@O2IKQ> z+}w&4G?rRgS~5`&!o}B5@l_$NNT;^LowTbt#UM7aHrZSHw>gx^IC`d&$Mf?<%Sp7n zcx?p3qjJ#UtI9O=arAdN=yEyowuO{mPO%Pd7py1?Ru->WVf8aOXuKwC5qH-{H10HC zT^rMX%z9FX;GP<*Cb_CNGdDwP!2f0U}bStsmAS4P#jt5^ezO^AP12+uNt+Se4uKy=`W@~jkl${9GAy zet53gYhjoCkGi|l@wKs)NWC9-cL(uTioebH`!@c5fIpC_&#-*+EiY)k;X3Q)yqOX@ zak1XtHSIXIi>4!E)Dzv^ld%l&J=xv83~3HhA5#5$-QDYvKJ_2n-P@2JMY;#+L*MW2 zK7#Z#(o;y&p6c$-!QR;$NGBtm^@Hy2BBVDVU5~UC={BT)M!E;-f?eQ8x@~uNH+>yw zAJPFhF8$ea-Q9Gw`Uy7279(AW-Pa9BJF%g?9qC@opY|hN`+9fxQKa|ch86t>OpoLG zTM+3Vkkaw=N{olgkhUPLLpr0ayL$)HEAf4lw~(HLZ>}6i`YzHWkEVTrbS%;d@5ASi zmLXk*Gy`Abx*O>ak?uy?j@-QJ-_enrV9!G{6lwl z1Zfd|{NR41Pau6B=^?by5u`O}$5TiLcc9)lLf(ROI?}5A3z2R|dOy z7>gnP+4$S>IDCod)Q8GijK4cj-uK~u+RT*HJB?Y%9@i5(RAOB=AUgp*h;QH8_|=4! zWpAexc>dWbi+``hzaRL0@ZDmhmV9F|3mAZ`qxd@we3lbmV9P&^{67Kzf)j7-w)h7? z?>o^KYU1$gE&O!g{{Z|*C;moT{$k)i1%8PWZxmVl8-O3Vv%8zuXlDJ&ZT{`RUjY0K zas1aYK@fTSfv*BSgg#=`KV0u}O?F#lw1ejUUESS7oic8)%b;z62Y}B6oh8E+uxuOz zKK3;FJ^F!-&+w20vT;7}^*`$Fz9Wu*gT=oL_+!tX9bX502;0@~pr6|E-x8+$9l-wu zYpWNXb#y()6%2x<1^BxWFNVb72TB6~PdXk0%{N~|ACA*8(bCb4*mOH$%}mf*I&83Q zGz|EMfNzN7ue11P1Fy9r7CQNj1uTHdF9Cis@EeKFY-iVPE+QC(tj);(_TldCG^Y&; z?s0v~-6-z%)O%g0?e^Ra+HYV@@IhQz?^$KhH*+Q-4n7r!f6~IA0KNtI5l(zDquExe zu;UxRW5eFo^%fgXzg>CsOYjB2e+K;1akkpYwhBVzTHtGc-rfDEQ@-(_EC6|Aulqss z1!&IJFP;b9_lxfC!*McRx9a#V@IM6p#W)?FvvfEKd>CWIeNKB{LH2glljD&NIl%oV z;{W!zG9IwXm<;@RA9QzD#FcTApc^R}Pa zcdBiC3-F%;|EiPUIKTu!!s&CG7o(bntGWC!{~z4` z3O3j9{S<8ef4DqXM4pNN^FO;Qh-3%W6ZFAUlRrDv3#MKCIi&D>NPrx3^NKFI(rfSmI4>a&vf3^a|GqCJTL{{u@^q3KMVx)K>l zL=?bZZ1Mwn;Y5~oiG+;O$L1%!Z?R9_Z!EFYzzb2jAeuw%fNPHHv!`q*kQa)WO-c9 z6Iu#sO0oj9QBaEt7(W6&fkKNh{%$;zC*ZL|cV#>es&t%zYOXAnq#56XlCC~1$!%m4 zkj=nm-y;BWBtrLn0fBv)WwY)xfa%A;7Txy@fc{+lCf#=}%+_s9h#X^9%u{7|*$_X0Bqm8nA0p@-M;n z8$!{G<~fR2V|v=>Na#fQVtjI5tOlHH?85moj* zc<5c8`w&>@Q!Eor-=6a`yz2Ke`@8t16#DS~HBx>1Y;@4FZTWc>HVV# zVKf(bzel*4a~KMXAET7*DO4|`xkBhjA6C#BF%7s!lckiEq6E-m3M%1me?6v3Sf;s2 zZ#Ol4-xyVBo#%0-7;n6@V&5ResPJ_oWZ^5de!nG*o14=NHoTM13|{hVcM6s7YCc`# z&474!f2xM7`9zKQE3n=yGL_N1OsoRrOQU8mnv29z@c6ldxtiNHidtkRq>*~A=DLky zCa{Upo0~D>K94|60g(Qqv4I=_?*ah@z@DL>0!6}$9+dH3HtiPqWia&1U^vK^8m3Gc z6a6wK`ejV?8yph{%b4hwF)?8^;)rWoU+T9Bmm%!BzSE!HJ>ODIH)_$wUHeIWy>Ml1AmPi7#;ScvfMp29%T7>i=v zQyCa#&`zj(8UquIMNq;$oq@?lE@3WWAm3O{0`eIM8<&vinG6&dA7Z3*U&26 z<_Bm#xykq#j^)16Hy6_CjTrG<6<7>li}6zeu1ltIqRIGg(%|}R`U$&j#(cso?zF4T% z`xDg6;~tAzc->1;f1i6fo_;M`4z!-3H0ts|>lvQ(1fCE>dd^{t9B4gb7?1<4XDkD9p!JMnKn}E?JTB)6X%3RbcB@4vvIknv zco)?-TaL8ejDe`Z5E^N{Su9G9wB9}}N{+PNYz8)`$dQ)n;?`5-NK19utf$D4mMf;G z$dQ)n-=wF=k(NrqNbC6z@bXCO9q6L>p+AO^y>4oV#KE2gpmINh91O`YweG$Vo^5EJ zhmn&?NQ4L)j}wl9)z`m2dBw1+(G@29CVQ#t<@80{O!e{W>)@T1L=iyR;|bu|9v5l} z#N(SWh|V@LD4#vSpOoB=clR&Z6UMP8G=b1?pTg7Sev;f@OUMP1 zFmebpERCpq#!JLMg2_^iPe=#pJDElh1^cDD;= zsO*dS(K{FjpYSea&2Y8jJ@FJ|C49g$)RCx}C;=?!O{4!eQ%lUiYvKqmy;Bqv^r9sW zA~A=VYX#-fk-u0+k8jZ9aw77Os8m9GcGKG}^j3$*aFTHk(Xp_!CsEU+GM%OEqHGH8 zf}E+ZmUt(SiKBevs;z{hYBPbBM$?ZZOg|{=L&7PR>tK(hA9D7eDVw5;mUatK8#>3D zG&GJVqMFh}OB{kn@_3d#mQW;!AKHikfKw(L$rn?;)b|uBpEBA=A?O;)=0ml9Gm(9} zi-oM52oyeif{Ik%p5cR|g+P3}Yb?JvAF6Q;fl9Z#=Hw8rxur(0gW?-p>=~H2=+{AD zjf-2(XkMwmgt}~Wu|pWmCHesn*SWac)0nTUNT%-R6CK%Sw1MvV8T&&LkI81`B=3O;<4KyC>;;!au-d(G2ME%FR0_3u;<{dS9G2rt| z`t48!i1Q^qnx_B5+~hbGhOy|QKMCv4b@iA0O*OFNd9c@3<98z@0iVSa;r8j!#Fc`_ zR$~NpN>}rq4Q$t~#!P9~-5XqF$F0V4X~&%#*ia7`$}^;)9yC}Dz@nR5 zHt5g6qaHRmERpBX!t4ABFJ<23%;c!4UcH^vO}ylE>mWxab+|8H4?u^c97dmGc03&`G#qR_Ko_BF!=@xuF;o4&l*`3SM$*t zeKGJG4Q_NY%eT>H^@eKmwi+$ah~lm>J{;P!F2~HeTw`R!)#VyvNL*d6F($;-9-B|`*aUYF^^;z*;ifk>xcL0`7~0xnxC(Az0L4EsqpSvSAQ_wr(Y-GUA649 z_vsa~f;(#2r|;J*q)%_7B?uO|y7HVw9L*lkt!Op{`fbxKue%DRe#Zn$bQ z12o)2COB7r8Q^vkT&Ax^J3g$dX3f`!K=LCdcCr2us`03)#`RiYYa&jD^&hFt*G#hm zZ~qpyqqt6s^dQv<%PQ9ZSap#;k=hu&-gOlUTBOe)n;Ok?N4~FQlu=FbSp^CDGHAY3 z573x{zNYoRN*VupNh1j=O@fse_NPK2eU{DxN0Sn%To6q~ziBtRVofQLq>=5hz;*o+ zdd<@NNw7$N1L}s%8n4pQzX$Y-In=OM+q2Qm5A<#^_5-d5|Sj{Z6$UCsMzz0X2}Rt4^<^->sllfxIqYA;2R z!wTF9USNNsz#X;Td!g=Iiue9nEqxa%_fQ}5%0H?NZNB@(#u$i2ukR8fm`wx-3R?P~ zQ1)GHyq6WdiuEwwJfcq_f=kFeL_gqCyi|}&+^EQxNRxwn8l46X(XnqK1Gx6o-?Ywla< z&V38rxo@F6_bqhizJ>1Gx6qyY7P@oaLU-<4=+1o$-MMd}t9=X7daeFxB6OSMB_N_Z z_bqg_Z*dhcb-LQOpq;Btx^v$`ckWy0&V38rxo@G*M}wLB7P@oaLU-<4=+1o$UF}b0yURo-@--v7OAvv;i7$uRNA+2(Y^%}I`%DG zv~K~wpuGwq_bPq>IO!@+n9L{1u(1*7r++tUNjX=H+n{@y@X{nDw&_KBj;K@i`jgCHu_5nOuekuu<%#q{ilRyZ! zPI1ta&49TNAQ5UGfLN@300Op{`vBWejI|F?12NbK;Cj=$+Msa#1w@Io1MeBg?}1G~ zrqNo<`@_kF-_xz;)c^?kQ`-b4=laju&z?xvv>U4}P1(rHQNRZFttME582p}8Ig z-C)X08-h3ActJ(b?;pCEk{%f7NB~xVgd1(*f?6&u+Wc6wO{cstklGO1kM~WJ`xm4H zi_y|)E$3HjxtoYOkEoM|p#pCkT!F+8)poNeStyA&C}L=|QmV`Y&A2F*TZ8&jo1b3I8g!DR+J zGl@?+1nO)l{<4`;E?>&UtG@k855#YS%GpLXzc)+q*=CKT_-tc}DZVd=`xy!3g4pc$ z{0-m$v$U0(i^!6mheoA(Ds|aO(`Au-XPAo|4L>sKm|`e-Hr8qz4Hv|e>XQkF>BvS; z9h5HD1FOM7^JY&5=x;LN-L;4VA99)tu3Uj7L%8T2sRQTF+jncf)J9y78tSRcU`~Aa8a|i8#HqQ8*uNf%r(P(bW!U;h!8CdITokI1MQ>ZkukeWjI9aAX3V+zGbKWYknYTx{})W5{EjJ9 ze>H^)#2@|msJUng<#inW1gxWv%UFpC{6Cr#$UFpC{6ZMfTI$i0&NfQBgqeB81o#4Wx zp-HDJ9XM$s%>6oD>A*=70o!!C(t(pE0=DaPQj3!&0(R(hr2{8TRL&C`Tc2dH^=r+^ zmmf2G4JS=Ef+&gZ9(c<+9*za2iyj)E>7>(Z<`h`*u`3AE41`1v9EVE#f2b!7LrUeY zBK$W|v}+>Xvb0p1Tj2zk_sQ!CnFlH@iKdKxIc59~<&q<4Nkj1P%30p?lxypeM6*fn ztsbhwyCwrKy;vI@EKrP8(@5GT{bhpy^X`7ufgfY2?p;xl*z&vLp=hKv}xlxL-dz1YnDv#T|eIv_ZW(J(K$0 zUGpU;e;Eg_`t|}6K*MsKK0yjtsU?4aBCnD~cFmI<+pQv-iDLj{UZsz77FlQ)nJZu! z{bn|B5t|&FjHoMp^zDzKK@w@YadVLPUCl=}B>p#aUUeQ}aO|-mk)|7~)O6#}2KNG# zwwC8&Fp!%jAC;*;0Ikt{iMs)~NY?il3cG2Zu+E$(xT#*Za*v_uhWj82xpgRYAUc?F zSAupucP?yC)wmx4c73{R;@NI5K|u*Eb{_+D8~1n2hHBi0Q09h&eXMO=&5&_(WYreP zL}UDxl%FuZeFHijspm;RWqmYhAx7@Ey6ne9$nY=;e_+CcwLWy~=HkaMm6G{;T6opB z_rZ|QM!R?v$;PCt*8Luoyd;4zw4o+NjR3@=FV_0BL+f*ngrum$GJ&YIBZ5GLL8$g$#0 z8u-+lg|9XAG3P8vR4>~0IghtYaGg!`KYTZyyc^As_>4Fx~Re%KI)zd z@As%{D!kpJZmIBYkGiD7n?34|3h(u(D=NIzGrP}lsJ4uEdM?d82k$F+qbJOI%6%T^ zHjlcUqSG$Vy!5M3U%AOMKVa|iT$h9(6H=H+Zhko`d{tyuY)! z?*hE<;O(6ytiw*;-BFiPcymYHN#VVnWvrXr+PTqJ1m4#)pJQ5*t)?Y@nwEHjzRP0w9|HAk z{VHg2x6(~EHJOcaU6(S!U}_I6vs@(%j+d$~GiN~QG_N?H#mrS=@~tZVhbiWKJ=YXN z{{`In`UKe+B`o!PeWsLJq@~g%s*lc-sAMJYVoTm%N#3_0ppTv_ZB*pB4YllR)^e3+ zCWHOSM6@4>uzs@W~-tt()>Q^t2LLRqdJx;PFf_srtKWwam8jB_? zhjy<3v_#1&V#!PRhycfNTK}H`sgLxSrBssmD%#*FDf656w zZg;q^1a7?Qokecy4--uL;EWoLOe3NjbNFN)5hH3u?0NV7=Y3EudDvmd!wy59ff({c z#E?fHhCKR6kz=4CPdz+W;tL@=`q9-=&s}(Zd@#KRd|pgbH1`%fz)eRVsq~(9D@amZ zKHpvdzNY}BaA4GYTk#%9yM?kfL++Rxa>pD6(Kfmvw}YV)-{hu9m@Y4!(T1FRu*VA` z!I#biUpf==(wRRC=SaEtfX4q3${0d#2}C={?`l^;I)VOglfi!1?-ZQzFet?=zOsA` zP>J-P47#G|J+Lkxu&?KknsgT1kD%caDsmMO zbU{7i3bIyJ+^XrVe7zk_tiKLqE8p)$2iK`{wPs4j5`7GChZ5MT&C9i-uj3FOVRP@kzs7vq?jm z3hK`Rd?rb7#FV{SCai+0;$wa9ckNa3~kUqTVHt%b_VUn_!r7kpi8n zIV^+p#0>+TEHR8NLGDAf9X3MZ!rWBD72itzD1;7Ie6zVxhYysL`TC`VQ+y@*GC(5| ze#0dc>Bj-d@0DQGfbv3{gHnuS&6P4Waa!V(#5oz05oKJ%w8X?2i7vRTJD?@z`iM%L zPgJ?OBr|dlC-U@*`oXD)QE!<^qB6OZL^~tPQdUe!wCmXiCeX6;G}{JLV1CX9d^0e| zVu4YK#Y9m7edCc5bvxUxUp&g@Ls7cf0MKGi1~tH$4QHC(B5|80#LX=-smE$huPKh3 zoy1|sq(=+;ZAY-%28E+(dMYYgFv)C>WV1a|WZQe~wht&)xRRJcjqkKg>V>Rknk7EY z9wT&Yoa;YNBmza_l6faqsQi)2%%Yx0c?Q zYC4pl}#6B`;kRtcE(wXm2Q*Cy$Nn;h9Vh;ZG&#$=+Wm)@4~(pc~_3@U446o zw|=$(@P)iHV zDQ~kHZg@Pk)7xyfRwg%*y?UGJ8!qWuZquKvlAO+FIilALY(CS0a7)S@1j&ICOjon~ z64$tT#8uPD*!gWINLE$r-S<*V1uek=)7Mfho3O1-r%ID9nJ!y}hB`C)<&xv(rcfhh znuSt`w#VWuYQsJzjz;~Sp*s6aZ_AP1*4Os7em%Xdzill<%bp%J&{>f+DYj__IT7Z3 zVQ_q=+1gaApmH0_R<=9#@C~9KVutUtxFQYdDqiKfRhLJvvI3UnGVmqY)KEepKT~|E5F&+@GpYR0l4=_U{07!A5Ag6)*O6$gdfv^dU~D=KV~RnY)>~Z1Db_2 z`>%{inECXak7Y_P$+EqqPfst&wkwa|#a6P0K$@!9Qz&+L8Ar?^TJ{P3`@xrX!$%ztHf>oMttyZB{MXXkjYl>~pfV6O`?Eh&!t()H4e8C)ndc-6%JoIAJ zEY!!EOq1$nxUfVx?7T~-T@0T_hg`a@{~hx}B*@h8hnK+yPF=L|_%rAob9M7W+X7mc z9=y+1N^e#4sKuWybSzBGZ`bw_S-y25tzINF2r>U7;p-G$-yxB7r%3dDCi>44frv<( zFLGZJ$*Ym|mKcdW3jI+Lq@+sBzCuijh|%*!>LwBJ6^X&~MMgwq%@>1TQZM*^itlpK z*ViVp_s$ntdxhWSFB9T%k@ShsuX6?R#Nf?hNVOPLFZ$Pu0rf)P?CLXJ_JwT ze2Sko*-sK|KHF+-)dCKr~(Ze0V!&3y~A@N+~ zO3o8v-beHi`p5Y0psqKe1*pBgK}PPaz3Bg_*Y3mLe*AriKdbEmcLCD);iJYKfrmjm zGp-zZ*zHND-3B*h9^TxO@!&>va~snSC%CzJ&5OjY6kQ}8Aw#F+iHtkNup?r?bTMoN zJ%?6{{?o%&$%jP0>qKUVGV_nYTsq8_O=3DF5J<@iFd2RRYgSL>1RapuSCke_eH`{an2$! zc$XMZEs_t5B)E2-EN=`Y00+(!Lz=~idqvV?=odvII9H^;$$enZyt_ooP0YjocDW$M zi3c?O-!ySEq`YYghpv_~mzmf*H;G9Kk=r1K+$+wzR}9-EhOZR;SBUIe#iTpMm_wqt zOk8tFgf18T^F;2OBKxrDhZ3r*?-PMX#Hf442xE1+=>Mn~;X79hk@Lw-Rer!{L=3J4yQs@VTe=IJW zFLI?#7YV+7!hht=>groXLbXV`LL@vZ`c4%7i0Csxj7EGpCdOPZW^59DkBI@K-wZL2 z64z~)i*xY;XE=wF2(@OBNOx83h5l&~k^L-MXrAcDvWOCX7NTSm%YmOUM1h2I^YArB zBx3|O_2nXUi^y=@x>pDnLR(*BTo$V&#SjU^P?JGSA4*n;(K7QwnOQ)I<*rJ@#2ZBN zV;_BFjLH!Hk45fcF{Vr;P8UP2M?`vB1n&|_h`c*Q8fe7w6(a2pV|*qPyAqFyG}rA# ziuV&SXfcerLZtReoJ_>)K^!jxT-SrEnz_n9@;z;gg&vk@1%D!vCW_>8ig5mqC%PW2 zo$eYw-8EpkD|@;Nx{48wKwymPD-s?RxlfBeheR@Z^9mt+`;2KBzMmLFGDN!XA_b$d z54(~P-;Hs7h$Hy4$ii^r=Q}vi@=*A@vul6eP6+eO0DLhKf~#t?XN6A`8(0{a@^+hejQ z6lX6LsSz=k)N2y6C@B*o?-PTbW*d#m^l=Lf^4+UoG1B*@NP8Nln;`}^iQuCm^J$Uo zDns|DI=Key5~=j!t5+Sic$XPXg)4UxxYCU=8D=HYAxzfCcNhbW?B?QJESCTPCr{)`j5RFkCwi%Zxa$voFuFAb4)0MtU zq`xovUr%jE5d^iIO$l0(`rkfdYNi+rEpqM?Ll8s=<$=?9T!^auU8zOHcZTf#mTdfJ zL*FKmxlUy46aCM%3Mn!RnQ^@s+9Zbg&^k>byGe|FN#xuwhPu|uk|HA0x1Rmx(+~IyTW@ zJpO3`kMKVt^30cEPmBJKh+&V?bHt-!;9fCcpGf^!oO842w@c(4v*!xlm&DNZ!oRCQ zr0*9=4QgT|4tyjMJ{JDPu#3w6zLg?r6FPrTjGQl$AMr)SIlg= zj1tg2BF6g`K_*-*{bRUC(J_o&V|KYxE~nUx`OTn-BI%GAbVy`k{y9M;%@vu45La&_ zTPI+2yvUWFhso(DB73D686l3ex&NoMYk`gHxUP>}jkJ^~iQ-41KDBAf-^N^$k}TV( zWNS$-r6reKmb;QIC&9~de_U(1OYeuI+@Nt3B}j^|NsyvR-E;2D?7n>@lQwy_IPcweXXehGJ9qBfc{^A2!Jd8v z()3~2(~qf+RUlkc9Z#uXu%@;g6UzoV-~@#$_(9bXzaj`XJf(VHQTKo>2wg;b9|zX%%j&MTRWFzns9%Hb*okT6k~;8$+J~m^T0xmGYhWa^ znkf}EwO#iSzS|yrnr1qiaT`#y$AA8>T`qcq6hvuVQu%{({7_lsYT~->-U6cCZ~+f^(e{FHSDwoRIX5BxIg-gx2E6;c=~ z?DgFs2SfNcgi3Y10b%ffuuSNDQH27W+&csH3u+{Izv{fG4(lY;@^oj*(;@xjO=3EG zOx?wIF*VEtWVXj-B5DubFEmf$Z=i-hO0V59={;a2qWqsIO0g6_ZWuX0dP;~JXYN1}MHqkDq%-h?4p=~#&+sCnp zrIDpxgtd1x_%)?21oOdq@Cn?~c-sPn9SZ{U_2Ad!zq-0R_=Hl(7hIt6zO((NKGn6X z28wFys#5KzdoVX$RDG|Yryo;0ptEVswCX^Z_#MFuGg_q`d`fM7S#5t01|Ed?nA$#b z<%-rvzoq)$P`h7K+wN68PpQ6#RDb(TyVZT*IEK)PygG&jeO~pQgFO@c9o5x-<8DxM zbGO>{G4-zYkv_HeZFR?kYVU>M4V*`Z-%)#?R3iYqtq#6h#ex@9=zfBRhY1>yzeD!# zV6a>5eL~%V=gY{yD{ycikj;Uzel%|T(?a4!jEVpLS*&paA8&ik>UU$~g-NB>@4A^c zt*DX9dbu*CM)>wO@h7nP0sOTthJCo-ycrfR(@WTfMDmKr>t+~4cnV;RdsX#aQNa}% zNIlakxcY!Lb=VTvT&O!_~<3_IVW_7gd$`Y)|5Ko;xB(!iB9@h_?VzxCxU$n&8_S)Y`$4mXLJ z($dN5V``K|!upsFy!e4oVC%6!=P~}(|6|B?9)ur66vV&ca}g?t2QbY4pT=5{pZq%V zXFUZW8lmYOvfp6^Zp9ZAn2lgMy`lE4Ko4Ld500qYMpXAzbsKCR%r3*KZz}M}q&j#F z3!1HyYTs3*?o(}70DZ`qPefgR4Qu!gsj%%tpzE00`)!%ER@I&n)wiH_ zpyESn@02AJ2vOlb$Pw0%&9GloUgkBSlwb8+$XbQcZ}@lxmP6v55K1N zXZ1QXrv~zh?w$6WG`}4tJ)QznD#-*3!9Wit7;#i}TvYp^??Ax_oj31_XunUc$uMvL z!v)@!&R`7dzuS9cO8ORVZ|kAq*-snxb&SJv+N^k7vReWn*q~#M*voG+Y4N1^#`#id_x^up~M?kodljtsea97ge+T*( z&OWpqP)H%5&@tV|)wajfZrD#)Rl=U+N;apuKLLp;Usl@!Jr~rbvw>T{{eNSLo$WW% z6VRgumQ^3z#Cfi*dlo*SdY@38Phx@F|89l$L-`D#mOX;e5BE28Tzh(-+H*#Af;ASW zUl-JZ7U*bCx2ZjM0P&#O^u#K<9aHjQIAbssZFyOBKZ}X=EQTsQI4=W(E8kvp)QSoX ztHbR-*{!fbrG$o5_YnI2Z&Y7IZKcz_YnajsKF|#SU-wlqWJ^p9KB*41=-{vqY1gn6-b>wp<#&$dbzq9d0_ZV{*p91YPZ$1PRsC2345__v^nlTDMljE& zpKIR)HHUDMHlnDGH^?}g$@5EDXIY1PbQoJRRmmo56$IBqd{KtiBLV>RbPcZ=Wl+bA zPSn$B1~9HJAWk%bVb&apo;h93J11vO4~*S&k2wT-U~sWkFJ+JCvn52SOye`IiD;`ghO3|kkPEW zk&Q$&`^w2@Yq|qt*-{?i2z9U7Lh-iQ`3@Sj>|}J9S;kl;mg&-#;(-@MeBf2YHY{Zl z^?6+ZXhq;+h+0Ef`UhY*dG>0w6QmJp@F+(Ic{Czy=0 zZE<4ZghiDv7Rmm;MM15R3=g6*+#nlWD)dv&f}5;o{2IZL&L3PR_)HOG|^IbY8?ZZz%| z%jt6fn(&rjP_0rfjuIM+nTpLgie@AOGP)9})&#nBR?3xg&;}ymQZxclPnPFd;!J(f zSvi-V9UG;X&%|fk*||t$dNvt76LH7lHWV%y7R%;pECanP{Ik4ys0ByWT zf8DXjmO7tGpQ|q+L0neL*;K7ofs`3ZvVCA;8-qg#F)zI# zGKwApqe^8zi*@L3aUi4a*A5>h3ETtx#+-I{Xq;7V|D zUp=F-_}Elr+(F>lb6IHQs>ljOsueNeVOU~v!ky7QM9G^DoC(Jg9yx2!uDj8w9x7!k znV6;#K7Fyicm^S^$x{w?jonZS)P06ZjN~YKDn*N+IpUJ>V~C9kBj(xmZ1 zzEG<=GB2$+JNV=oGcQafv=HO9oX>+~YALr|%vg4^b!@A%l%6NgtM&PbdP!oATdf7g z$wV(h7bsNCq+8HwzUmoGx6llord%(vBVqMSWAZ3rgi0<*V39&)x(0QNu1X~1R!CeD z*wl%w;~2cjEhr5g3#-vfKFP4mQ7>y@SY0Z$zWb8nYmK{BUwz>5Zr@%uZ z4m2F}sF%s3lwG08KyH~^XFB|VJ2pKIi)!X%@|1%+5mK!b+{oM<%~AC4Xg!xhOHa>? zhGXHGF;0=m@LbZ3%!~^b>@-*&^D=HQgrHw26fomWMo!jld?t3*orr}`I-_`ko$a0p z$AB#su9o&`tR67CRWVNMC77L%Os<3qx${sig^aOHF}p znn2up#DEv050%)W$0Lccx#%oaILmGr|H<-rwpdt%H3EUJ7i)#3Vga}HCA1-nX-n%& zb_vPCQpt9USib&-G>V0)ayVYbxKx2c5e9J4XX(*7Ns7Mn^e(4;$^#ZchKZcril;cE z0<2j-QK(eS`h|6&Vs@4`iSb}>%S-5U@CjC@>#3sJkRFU!ELZT%QluW%0g83Q1)`Zu zvcj^MC5C1Ynq~W3>+88}6-=an9`<&Guma~ZVR(pvT$Uv>WsI$&eiwNgn>gtX!ugH0&$?UETymrCY#2*YZ^Sq8mmW8 z!PycPGn>FFe)@EHCh3lyg$0t(;~PH@%vQ!=(@|4`wKR|99=tPe07Zo?NiSk}$2IJD zI2m?h(U}M=CYe83L}P5(7QxhzcGt3tOTv?~3|n@gup)wjqKVm97KMiFx;m(C;PDV6U(qlv--!L(|g=!hj7&li$oO_0SG7Myryb1iB-twenIJ4igww5KKCEOeK0WQa)HD-eoJL zRM9BHlGZqja06s38V1AIl%GTW=_aXqbq$w6#tslsSwL=(fYEKMYqmhBgb0INOs&}r zru~L4qUNxqprCAO5oHRclwk6~5@i)rp=7A5!bg%`(EI_WRm!LZS)=e-$$OKX4i!Ur z3yW$V`6IU_GlUX!LYdpS!`g4OE=lp}L>7FZE|a_5lDt6Q=#(!+KI*^|P%)(kC)?%_ zI?m3lp}5A7;)6h4m$xtjn1CQ>5%^T0Cd&gM6WorwoDeB+yxjq^w(T6SHAh3|J);iv_?~ix76ET##7? z835KL@MbPN9(}-_jYnsaP8`eq!s2+PfT<{yc7_(pi`k)cCi}?HSmMat!-KGZ9)ka{ zIs~lYBhFC0S{W*o(#1LkD{6vow7gUeEi?>F{nS$Gf}^|cbgfV%YSmhjysu>n(K6{7^of9)i!*J$hsi3aq|5m@n0bMh-RV_Y$)fah^u^4@ViQ!PyJXTrHEy=7b`; zrerq4lUeNxPV-R{%)YBgjtr>9jWx2#gS3Y`=@tf{BMOT;uW75{=h`Mz&yz5rhZ!JI zsD*b(HoUlzvB`Ps9X|qoK8{cOHzCA@eluVY@Y{xU@ewi5X~*G&Cw3V`lMER6k`I2^ zz-|0agYHCe)8_1R9<{&wHZM*Kyw9=mI4%DBal?AQ=_~)Eg5T@d_?{O38QiSb-p_0R z|MLytU)TWtFB`zWz5)E(fU~`gU)kfC7dwP-`$KztuOZh~ZaM*Oe^zhdyA9m_h~C2a zkv{S5@8~W3b_2J+*|+dR25x_$Z{ZvD`!T`qasH%k2=pZD@p)44cRR0s+=GbQ1mO6A zxAWa|t#EE5w;@WYje~06z8~;z^t=Dq(~k<=Vl~rWGx+{vBA(s=|1S)_|0I)tFmQk5 zyVn38Xja#}!!{%7^arZg0{AZU%c_xc{9Z$@eFpzzSU>->f!}K2{*!#ait#ys*gFfR z9E0v0G5G#7#wHBhe`+1$&*9*bHP>;JzaG41%K7RoI*W~&@&N<4d!T=1O8lsS`$O;j zx`F!-tAE?!l=KMdS|)a-u& zz6<}^vq{k1`V#)^bo@uib`jp*)rdE2(RUksf6ShrFmQixme1m&+4cB;Q1ET3&Ggs? z@EKFS|A>+Y0cX4HL0NXZmo_NpQB#gT-ohsh{PXfFFP!RYNP5!1{V_a#&%pi1CB10i z{sZm4XyE>{62AgC``s`9Jn@)vVm~kWV?)n(4BUU}(`GcB`2N$S_8YiA*vCP@2byee z+#Ld({IqACIKWpIrAQE{4_a834 zY~cPg%Pt7q6zWNS#o+s6T08@I7xdMWK0Wg_!_O`=|K4cIx@^kv2ikbf!2Rb(GL8V- z>yLl)B?I>#WAhcjNsoWLf5YJ0-xU6?=>VQJ%JSEo-Y(;7r{h0U9Y+oTf9-Y9;QNo< zJZ#|hi*tL(^G_MLKg!sYf%^~VVjQvc>OE)h{Xt@W#=!ljQS)$Iw$~p=D!rrQznlHFDd=>#fwFXZt ztoICdTl3f`%VLvn(S@_WB%Xpy+07Tr^Qoenfh)Y~rs}KQybwtQ>Y7|dZe8ygAr#l`c;;(2m`S!+RUSxU*;LA&8Wzy(Z*^pbf>=M zIyH2}EM!B6?b0=Li0e(h8?mcvY39Tn9e8w4yN)}47Jj?v7@C6bVBE+lSHC?qKIgb6 zV{!Pj;enY*M3Qb&oK9T%a>Gd0%G`!LaWWPi9dj8>{m#~dv}7fKD( z!$-jR#zzL&reEjF3OAaZcAH(9oE~FGCdC5-R&Y07?<6-$B>|wW>1=O!9_Umxj;FDP z2Z_tGHJ(YIL#a{rUEaMlRG;Jma=q^&JUb7K>YI)aECZXKQ8$}`BgPA&bBLJL#YZY0V_BCQ+H zpxGmV*zhu+EVS&iy6$|nYML+KiLLSS+npBsMT4%pK@P?jD&i1rc$=-u-~Ukv`PJ+= z*#d49Ls9g9->~)@su$Ul88#m~ zS>KP#Z)h6zfh(??UQKbdV8`r{R@Eiyn>qobwc$HwcX>A|*4b}!Le=w&a10}@Rdl*w z@5C#-YfxSO{cdSG0EC1DdZFikU&|SZl2CXcXTN<{d#_NL3e{Q09CIRp=D{ zN_hi9s)cf?<-x_fO179{26MNB9h4B~B`1X2P`-?t8urhf5a%@@l|==GvI}M=Tgadg z`=qn#DNX0F_oyMYSV*J#a*ZW}II6M`fdJQ!g;K6;?^E;h zmF%*8;!cOX2M6sf!59n`JNN$>>3-y;35w;TT>Y?@dD--Uer)`;>jeuqh?_0=XY=1} z^4oO4BAV3t5iIy9ZoK&)F!^nIlSMQs%;c7f{y1-b>kqW)Knpf~YpoYgKmN`;@9?~H zxwszWWz*aAqXV-`E`F9C0^2GK}!@f3lHV$ZPx%~bA8+hx@KVb6N z^wpN!P4nHF@z413bEzzsNiDqw+MwUUKaCgO`t3T^rr+R+HlEAYYeDo2d-H$qz50z! z=_mJI{`NnQm&|Yb&v~E0HtBaM+@8zQZ9#vD8*hH=AGPVf^QGtV*Z)Pl^X7kZQ6t;* zAB{ZNBK-B!pN)e=WegF=`qL4DS1v!keYWYFz~T=n%&=|v?_d5u=KmJ*Qub_q>od()EdszRl56|Ym-UlZxFPrW& z`8Blp_g5d)_X8Huyz)IddY_@0&)$9ZgZl0OH-bEuKmVNo_+do<(jVzeMJ)Nfmmilu zH1orVf8U?!T(4V2X$tY<#!Y@d|8D*#o#6)SnDgbgZ{BlqBJ|J!C!KUvw)IrQHX-_z;OHx#>m_K_p%cD?+6*RC-i@@4Qn GI{ypvq7hC2 literal 0 HcmV?d00001 diff --git a/Sim04/sim03_mf b/Sim04/sim04_mf similarity index 90% rename from Sim04/sim03_mf rename to Sim04/sim04_mf index d6d51fb..ce4d173 100644 --- a/Sim04/sim03_mf +++ b/Sim04/sim04_mf @@ -5,7 +5,7 @@ OBJECTS = OS_SimDriver.o simulator.o metadataops.o configops.o StringUtils.o sim all: Simulator Simulator: $(OBJECTS) - $(CC) $(OBJECTS) -o sim03 + $(CC) $(OBJECTS) -lpthread -o sim04 StringUtils.o: StringUtils.c $(CC) -c StringUtils.c -o StringUtils.o @@ -26,7 +26,7 @@ simtimer.o: simtimer.c $(CC) -c simtimer.c -o simtimer.o clean: - rm -f $(OBJECTS) sim03 sim03.out + rm -f $(OBJECTS) sim04 sim04.out clean_objects: rm -f $(OBJECTS) diff --git a/Sim04/simulator.c b/Sim04/simulator.c index db2ba8f..ba5a2d8 100644 --- a/Sim04/simulator.c +++ b/Sim04/simulator.c @@ -71,7 +71,7 @@ bool allocMemory(ProcessControlBlock *singlePCB, int offset, int size, int array singlePCB->allocatedMemOffsets[allocateIterator] = offset; singlePCB->allocatedMemSizes[allocateIterator] = size; allocateIterator = allocateIterator + 1; - printf("Alloc Iter: %d\n", allocateIterator); + // printf("Alloc Iter: %d\n", allocateIterator); } // return true (temp) return true; @@ -331,6 +331,21 @@ int findMin(int one, int another) return minimumVal; } +/* +Name: interruptManager +Process: does the managing of interrupts for the program +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: ??? +Device Input/Device: none +Device Output/Device: none +Dependencies: none +*/ +void interruptManager() +{ + // +} + /* Name: logOutput Process: Takes in a string, and then outputs it to monitor AND/OR file @@ -400,7 +415,8 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, ProcessControlBlock *singlePCB) +bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, + ProcessControlBlock *singlePCB) { bool memDisplay = configPtr->memDisplay; ProcessControlBlock *wkgPtr; @@ -497,7 +513,8 @@ bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs // printf("--------------------------------------------------\n"); printf("After memory allocation\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, + offset + size - 1, size - 1); printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); printf("--------------------------------------------------\n"); } @@ -522,7 +539,8 @@ bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs // printf("--------------------------------------------------\n"); printf("After access success\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, + offset + size - 1, size - 1); printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); printf("--------------------------------------------------\n"); } @@ -531,7 +549,8 @@ bool memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs // printf("--------------------------------------------------\n"); printf("After access failure\n"); - printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, + offset + size - 1, size - 1); printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); printf("--------------------------------------------------\n"); } @@ -593,6 +612,7 @@ Dependencies: pthreads, sprintf, logOutput, ??? */ void runCPU(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) { + double timeDigits; char timeStringy[MAX_STR_LEN]; // char *command = workingMeta->command; // char *argument = workingMeta->strArg1; @@ -601,13 +621,15 @@ void runCPU(char *command, char *argument, int intArg, ConfigDataType *configPtr int cpuTime = 0; int *cpuTimePtr = &cpuTime; cpuTime = intArg * configPtr->procCycleRate; - sprintf(cpuOutput, "%f, Process: %d, %s %s operation start\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(cpuOutput, "%f, Process: %d, %s %s operation start\n", timeDigits, processId, command, argument); logOutput(configPtr, cpuOutput, false); // run timer for intArg * procCycleRate pthread_t cpuThread; pthread_create(&cpuThread, NULL, runTimer, (void *)cpuTimePtr); pthread_join(cpuThread, NULL); - sprintf(cpuOutput, "%f, Process: %d, %s %s operation end\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(cpuOutput, "%f, Process: %d, %s %s operation end\n", timeDigits, processId, command, argument); logOutput(configPtr, cpuOutput, false); // pthread_exit(NULL); } @@ -624,17 +646,20 @@ Dependencies: pthreads, sprintf, logOutput, ??? */ void runIO(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) { + double timeDigits; char timeStringy[MAX_STR_LEN]; char ioOutput[MAX_STR_LEN]; int ioTime = 0; int *ioTimePtr = &ioTime; ioTime = intArg * configPtr->ioCycleRate; - sprintf(ioOutput, "%f, Process: %d, %s %s operation start\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(ioOutput, "%f, Process: %d, %s %s operation start\n", timeDigits, processId, command, argument); logOutput(configPtr, ioOutput, false); pthread_t ioThread; pthread_create(&ioThread, NULL, runTimer, (void *)ioTimePtr); pthread_join(ioThread, NULL); - sprintf(ioOutput, "%f, Process: %d, %s %s operation end\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(ioOutput, "%f, Process: %d, %s %s operation end\n", timeDigits, processId, command, argument); logOutput(configPtr, ioOutput, false); } @@ -650,6 +675,7 @@ Dependencies: accessTimer, compareString, runCPU, runIO, ??? */ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, ProcessControlBlockLL *pcbList) { + double timeDigits; // run over the entire process, running the CPU when a CPU cycle comes up // or a run IO when an IO cycle comes up char timeStringy[MAX_STR_LEN]; @@ -667,7 +693,9 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce intArg = workingMeta->intArg2; intArgTwo = workingMeta->intArg3; // inOutArg = workingMeta->inOutArg; - while (!(compareString(command, "app") == EQUIV && compareString(argument, "end") == EQUIV) && !(compareString(command, "sys") == EQUIV && compareString(argument, "end") == EQUIV) && memManagerSuccess) + while (!(compareString(command, "app") == EQUIV && compareString(argument, "end") == EQUIV) && + !(compareString(command, "sys") == EQUIV && compareString(argument, "end") == EQUIV) && + memManagerSuccess) { // check to see what operation will be performed if (compareString(command, "cpu") == EQUIV && compareString(argument, "process") == EQUIV) @@ -685,27 +713,35 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce // run memory operations with the memory manager if(compareString(argument, "allocate") == EQUIV) { - sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", timeDigits, + singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false); // run the memory manager in allocate mode memManagerSuccess = memManager(pcbList, MEMORY_ALLOCATE, intArg, intArgTwo, configPtr, singlePCB); if(!memManagerSuccess) { // - sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, + singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false); } } else if(compareString(argument, "access") == EQUIV) { - sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", timeDigits, + singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false); // run the memory manager in access mode memManagerSuccess = memManager(pcbList, MEMORY_ACCESS, intArg, intArgTwo, configPtr, singlePCB); if (!memManagerSuccess) { // - sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "%f, Process: %d, failed %s %s request (%d, %d)\n", timeDigits, + singlePCB->uniquePid, command, argument, intArg, intArgTwo); logOutput(configPtr, processOutput, false); } } @@ -720,13 +756,15 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce if(memManagerSuccess) { // - sprintf(processOutput, "\n%f, OS: Process %d ended\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "\n%f, OS: Process %d ended\n", timeDigits, singlePCB->uniquePid); logOutput(configPtr, processOutput, false); } else { // - sprintf(processOutput, "\n%f, OS: Segmentation Fault, Process %d ended\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(processOutput, "\n%f, OS: Segmentation Fault, Process %d ended\n", timeDigits, singlePCB->uniquePid); logOutput(configPtr, processOutput, false); } // deallocate the memory for the process @@ -757,6 +795,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // char *nextCode; // string variable for the timer stuff char simulatorOutput[MAX_STR_LEN]; + double timeDigits; char timeStringy[MAX_STR_LEN]; int processCount = 0; int processIterator; @@ -765,7 +804,8 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) accessTimer(ZERO_TIMER, timeStringy); // Operating System start timer goes here, log it. - sprintf(simulatorOutput, "%f, OS: Simulator start\n", accessTimer(LAP_TIMER, timeStringy)); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(simulatorOutput, "%f, OS: Simulator start\n", timeDigits); logOutput(configPtr, simulatorOutput, false); // int variable for process to run int currentPid; @@ -812,13 +852,17 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) { // needs to set from READY to RUNNING pcbPtr->process_state = PROCESS_STATE_RUNNING; - sprintf(simulatorOutput, "%f, OS: Process %d set to RUNNING state from READY state\n\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(simulatorOutput, "%f, OS: Process %d set to RUNNING state from READY state\n\n", timeDigits, + pcbPtr->uniquePid); logOutput(configPtr, simulatorOutput, false); pthread_t runThread; pthread_create(&runThread, NULL, runTimer, (void *)processTimeLeftPtr); runProcess(pcbPtr, configPtr, pcbList); // when finished, set to terminated - sprintf(simulatorOutput, "%f, OS: Process %d set to TERMINATED state from RUNNING state\n\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(simulatorOutput, "%f, OS: Process %d set to TERMINATED state from RUNNING state\n\n", timeDigits, + pcbPtr->uniquePid); logOutput(configPtr, simulatorOutput, false); pcbPtr->process_state = PROCESS_STATE_TERMINATED; pthread_join(runThread, NULL); @@ -833,9 +877,11 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) pthread_join(cpuThread, NULL); // deallocate all the memory for each process. memManager(pcbList, MEMORY_CLEAR, memoryOffset, memorySize, configPtr, pcbList->headPtr); - sprintf(simulatorOutput, "%f, OS: System Stop\n", accessTimer(LAP_TIMER, timeStringy)); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(simulatorOutput, "%f, OS: System Stop\n", timeDigits); logOutput(configPtr, simulatorOutput, false); - sprintf(simulatorOutput, "%f, OS: Simulation End\n", accessTimer(LAP_TIMER, timeStringy)); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(simulatorOutput, "%f, OS: Simulation End\n", timeDigits); logOutput(configPtr, simulatorOutput, true); // deallocate the process list with destroyProcessList destroyProcessList(pcbList); @@ -858,6 +904,7 @@ Dependencies: sprintf, logOutput, ??? */ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr) { + double timeDigits; ProcessControlBlock *wkgPtr; int returnPid = -1; wkgPtr = headPointer->headPtr; @@ -897,7 +944,9 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // set the process within the PCB to the ready state, report in ready state. wkgPtr->process_state = PROCESS_STATE_READY; // printf("Process %d set to READY from NEW\n", wkgPtr->uniquePid); - sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", timeDigits, + wkgPtr->uniquePid); logOutput(configPtr, loggingStr, false); } // move to the next pointer @@ -912,7 +961,9 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt if (wkgPtr->process_state != PROCESS_STATE_RUNNING && wkgPtr->process_state != PROCESS_STATE_TERMINATED) { //printf("Process %d Selected with %.0f ms remaining\n", wkgPtr->uniquePid, wkgPtr->timeLeft); - sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid, wkgPtr->timeLeft); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", timeDigits, + wkgPtr->uniquePid, wkgPtr->timeLeft); logOutput(configPtr, loggingStr, false); returnPid = wkgPtr->uniquePid; } @@ -940,7 +991,9 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // set the process within the PCB to the ready state, report in ready state. wkgPtr->process_state = PROCESS_STATE_READY; // printf("Process %d set to READY from NEW\n", wkgPtr->uniquePid); - sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", timeDigits, + wkgPtr->uniquePid); logOutput(configPtr, loggingStr, false); } // move to the next pointer @@ -991,7 +1044,9 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt if(processCount != 0) { // printf("Process %d Selected with %.0f ms remaining\n", wkgPtr->uniquePid, wkgPtr->timeLeft); - sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", accessTimer(LAP_TIMER, timeStringy), shortestJobProcNum, (double)shortestJob); + timeDigits = accessTimer(LAP_TIMER, timeStringy); + sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", timeDigits, + shortestJobProcNum, (double)shortestJob); logOutput(configPtr, loggingStr, false); } returnPid = shortestJobProcNum; @@ -1002,20 +1057,4 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt } // return returnPid return returnPid; -} - -/* -Name: simThread -Process: wrapper functions for threading in the simulator -Function Input/Parameters: milliseconds (int) -Function Output/Parameters: none -Function Output/Returned: none -Device Input/Device: none -Device Output/Device: none -Dependencies: pthreads, runTimer -*/ -// void *simThread(int milSec) -// { -// runTimer(milSec); -// pthread_exit(NULL); -// } \ No newline at end of file +} \ No newline at end of file diff --git a/Sim04/simulator.h b/Sim04/simulator.h index 9e9e59f..f55b9de 100644 --- a/Sim04/simulator.h +++ b/Sim04/simulator.h @@ -219,16 +219,4 @@ Dependencies: ??? */ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr); -/* -Name: simThread -Process: wrapper functions for threading in the simulator -Function Input/Parameters: milliseconds (int) -Function Output/Parameters: none -Function Output/Returned: none -Device Input/Device: none -Device Output/Device: none -Dependencies: ??? -*/ -// void *simThread(int milSec); - #endif // SIMULATORX \ No newline at end of file