Mail Archives: djgpp/1994/06/08/06:20:40
> My desire to use familier i386 syntax to write assembler for my programs
> has pushed me into decideing to write a converter between intel 386 and
> the form used by gas.
>
> Has anyone got any advice for me before I start on this, eg how do you think
> I should do it and can you forsee any pitfalls.
>
> At the moment I am thinking about producing a hybrid assember format with
> standerd 386 instructions and gas style comments and structure (.data .text
> etc...) and write a source to source file converter that can be included in
> a make file as a pre-processor kind of stage.
>
> any ideas anyone?
You may want to look at a different approach, included in the XFree86
sources; they use an assembly metasyntax and the standard C preprocessor
to generate different assembly sources. Here is a short example:
Source:
#include "assyntax.h"
GLOBL GLNAME(ET4000SetReadWrite)
GLNAME(ET4000SetReadWrite):
MOV_B (AL,AH)
SHL_B (CONST(4),AH)
OR_B (AH,AL)
MOV_B (AL,CONTENT(Segment))
MOV_L (CONST(0x3CD),EDX)
OUT_B
RET
Output for GAS:
.globl _ET4000SetReadWrite
_ET4000SetReadWrite:
movb %al, %ah
shlb $4, %ah
orb %ah, %al
movb %al, Segment
movl $0x3CD, %edx
outb %al, %dx
ret
Output for the ACK assembler, with a more "traditional" syntax:
.extern _ET4000SetReadWrite
_ET4000SetReadWrite:
movb ah, al
shlb ah, 4
orb al, ah
movb (Segment), al
mov dx, 0x3CD
outb dx
ret
As you can see, quite different source formats can be generated.
By modifying the include file assyntax.h, other formats can be set up.
The file assyntax.h follows, gzipped & uuencoded.
Hope that helps...
Elio
begin 644 assyntax.h.gz
M'XL(".\DJ2T``V%S<WEN=&%X+F@`K%QK<^,VEOVL_A7H292U/(K=?L33Z:GY
MH`=M:T:6'%&VG.QNJ?B2S#1%*@35LKM2^]OW7H"/>T'*TU6[71E``,\]N!>/
M`Q!TS7?A*O:#E5 AT N>[;]ZV3>>UK>+I?OOH.Z,`Y:1O6[T^-WXE@,DNUK&JZ?
M,W'V\\_GXC$-?P_$0QQ^"5(99D&8=<7\.1"3('L.TLB)?0E6:'@?I)M0RC")
M19:(G0RZP AT DOT NKM@D?KB"'+#"#V66ANXN"T3V'$HADU6V=])`/0PSY!)^XNTV
M09PY&7*MDA0>OHKM+MTF4@/W8?:<[#*Q"@(!).!(X+Z*=>K$6>!WQ39-OH1^
MX"-9]NQDD("=FWP)E$<ZNCC)0@^JM]O`2448"R>*\'$82-6&,G23[%G]0JJZ
MK8*!`]LJ]!JMW&VW29J%\;H66[=J"#V,G4T AT DI7Z7>]V9!9N@!T+/14CF>/#
MTRR4P"V AT E[8[-PJ],'M%?S(GC+$>AJ+L<_0OYR_[/>]*I)/;P`M7H=<5^S3,
MLB"&C AT R1MXSN1*BQ;W!NXWR&?HL3Y$F#;1K((DB)/;_3$<I=F#EN&*&/RA$Z
M`XR!/D&J48;C6XRG^(LCH?R7<OR#%VQ)8O#A9AN%``$JG`:O)_FL/.#O<&0/
MQKW1G2UZX[%8]&:SWF0^LFRQ&,UOQ<RZZ<V&8CX5\]N1+>SI]1P AT 5E>Y-!F,
M'X:CR8VR'-W=CT?6D#),K\6=-1O<0K'7'XU'\U]%;S(4UZ/YQ++M+A"(R129
MK$=K,A?V+?(<<+-OB?&HUQ];XGHZ`YI?A7UO#4:],=(,1S-K,!?3F5JVTXEM
M_?(`C/!4#'MWO1OT11L5Q<5M;VY/H=T9A&@_C.<8QO5L>B?&4UMY_F#K*(>]
M>0^M[V=3<!R\7MQ:\UNP`^][\-]@/II.T`#:G<^@V!43ZV8\NK$F`PL-IXA6
M`S"=`?;!SFVZHC<;V=CN]&&.!%/%"3032Y.J$0!K]"4/[MZ:0?QW/<5]S0<%
M!_H4Q4M\_W2=!L''JT]B$V:G,DBA'T]]_^7TY>+CU6DB?\R7XJDCY2O,SI>3
MY^X7<7YR AT 4IW>?KAXO3#E?AP]>GRIT]G%\)W]C"CK9>M^#YO0"VYTC2?7W80
M!5X^N]437/II`BO'08U+U!-H'RV#C1L%*2QB7)BXCE7_)+"._4(FU"K8)"B(
M!5ZJYZK.2Z+=!E943CNXG8X&%I)L'"]-8'5.$B6L("AIL(9E#ZVAJDBQV<D,
M%$XFXMD!&83&@M1SI!8=I;K`Z7Q)0E]S@;VW2_6:#T[6)UV1[QK">19M^)]^
M'LCW>3],^N(,'+"32L,4D501>5J0:%"X8%\K\?,27VEYAA+2$B+=Q:B>T)49
M]&^`'>`'[]\+,0#_P2;8;+,D/:E:/X?6+Z&?"Q4#:Y"]G9=K$/0>"F AT 8>]$.
MI$0I62AUBZB07K)+G76@&P>'0A`CSP/5 AT 3&-<+#0&^6D<AE-8;.)496``+T%
M<57C#)(.?F AT B^0ICL)&%F[8>9+"I.N)3_NS(Z8C>_`<0A%?YF%X"XNBL\ZD%
MO>[L(J7/1VY'W$P>1*^<26M'*@2."ZR6Y4W/1BT$$&[MUAT(AUH_1QYP;W`Z
M^,X&=OC--D3SSV%6FO<&_V(VA7:NDBA*]CAA8:9 AT YB7Q%^@4U:MJ+KD![!1J
M5X*.4!T&N[T:TR\.[!\[O:<[F2 DOT RUVV AT XFVUEO9,_$/(8(V;8359E?(EN+FU
M1M"]ZR#-X;\`^H^=X^^3U&_]0UQ="E>?%N#9&)Y%2;R&^HMS4K_`%IZAO^'!
MV15YT(<'[FL60+WX6-9?1XF#V_2/VP2&-F_W":";CQ_2P(D`_?$#81G"(S^!
M/3<P';*Q86!23RJ7L!]Z.]BYTD_B!D).TE?QSQ-A/SOIM AT M"LM5'+H05_YI.
M7^5`-AW$0*B^"U="#ZI_E$^*COCA!_&^J&33HU,<!XU9\QW,[7"EV8X*R^72
MG@\'RR7G>YB,G@;W]YV.^///$BN.[.GXZ>.5 AT I9UC018#8UC=4>4IU/8$0:]
M^=%+5[QV6B_BN^_$*S AT 5R>``XO3X^/25NHTG7SZK<9.`Q0,',+$/U"$GUQV4
MJ(OS'V&<3,$I]I99D/>2H:MHB:ON![UVB;Z!8>%H;]QRHJITVW*>J])3RWDI
M2Q8O]L<MMS+LW[;<RK#_U'*)(2\.QBVO,AS<MKS*</#4\H AT A+P['+;\R'-ZV
M_,IP^-3RB2$O]N];[I:XPXKVJ"7#ZB$O#D<MGSSD1?N^)0DM+P[LEB<KJ-V2
M56EHMWQ)#%M!5;JV6ZNJ=&.WUA+'>)#$69I$,-9ZB-D8#F8?6E[Z AT 93/H'Q&
MRN=0/B?E"RA?(.\P<'?K9M8AL/J$=0BL/F$=`JM/6(?`Z AT -K5;Z$\B4I_P3E
MGTCY"LI7I/PW*/\-O>)R)^S,\3Y3U^QY2V;OJGEJ+_O6S6C2.I%XWCG)@I?L
M[R(OI,FF_(U*7Q9<*<O?:/&N(EPNYM.;5BLYNVJ!-ZCKL'^L03/5F@+Q9OLW
M<6PY5H9HA:K/K,8'K7K#X6P)AC=CJ^6<53TRO;=_*^H34 AT _*"9ZU3F!CX[47
MY[KVXKR*11_$CIRNV_4Z+>^=%BJ!<H.JD&O$_Y.4M+F6M+F8M`TU:0=<3]I<
M4-I<4=J&I+0#+BIMKBIM+BMM0U?:`5>6-I>6-M>6MB$N[8#+2]O0%_"-*4S;
MD)AVP$6F;:@,\#.=:1M"`_9,:MI<:]I<;-I<;=I<;MI<;]K?*#AM4W':IN2T
M3<UI?YOHM'V7JPY4<-F!"JX[4,&%!RJX\D`%EQZHX-H#%=\J/NTF]>'+DR_+
M<M/G!YEF!4"]:=0`]>#`PG;SA9V_"ZIE6C8D]%4:/CAN^O>.#2[C=0XXZ<-6
MT*Q4*++P*#_NH-"PH%53Y2-V"%(JQ$]U]J_VHSJ[E16/L\L./^,Q#G)F'$]Z
M=Q:^NNA_#C^BU9[G1[9EU^F41[5WH.3?^.\4L2W\E_\D;]_YRX;PGI/0"V2K
M!O[F-KA*5^_M?@@OO1D<Q=5J^O>$IZ0;IB"]Q:B?K*/$C;JBS&%C#-*X4TV"
M\>AF,K>>YI>EB1.%ZUA<`EC_ZLUNSH_.NQ]>?O[0*2LO&RC.#8IS3G%F4)QW
MU"&Y="!<3:;WZBT9+SCP AT M*1Y'%7N+L,WGSA33[,+Q:WCH<O\K AT DOT UCM'7<GJ
M5T,7]N AT PB@)]?2N`5\);^!3?7O8AOE]G\#JE+A&S9Y"&DW=\WV,>?6._G!Y[
M3OP?R`OLQZ=&]^`=US?T\!L=C`S?T,&\?\MM832VCF2GFA;0.]!_`#5^=(@L
MSD:3&S0J;/!F%\Y`"':D%WZEORJ[X7(\G=Q4+>&Y"7!YAF)R2<&+Z6Q8@;\X
MT2X`F'J5SN'G%-[_=6Y5<'RQ!E2>*:$B`=SW!@3K)9L-,N.<*?(*/)C>W=6P
M)".TULT2QZ($8[-YZUUZ,.4F.)]*$SR>=D6154=6;M*'G;\*56)OZ[0\[W8.
M[$-5?ZE..(H[K1/Q#W$B_BIBX\660O1ZBDNUQ-4)^T(@U:W_';RCYFHD1IL-
MG&CPUA%KS;,O:'#I>*["WX,*=P4K.+3W)_8<K;[%2+4?:X&L-8]7Q-:$<L&@
MP']0T6GA!I4YG_%%'._3,HFWAZCE#F AT N99GA_C\D)$?8=I%HHN*X(QQX#\B]
MT9U3/G&K)]L(M AT L_E-L(NEC=0SE&@]/K:_35K1P_<C'@,NWDW!5I'R]5_XJ=
M$;Q`/J3TXD?]R0/^VS AT ABB:>^<^NU,4#7C>@:.Z?0^]9/#LHA$)Z(!OJRQ'S
MJS\:'KG=L.N7COE8!J=(WCD*#_MWI!T\%C:T$'1,3\WF;-V>A!8%;;$KBS:+
M7]#JL=3M%HR^;L37G?*)D..'EN'(/O*5?15+25?^"/'[E*95+,"&D9AD_9&*
MOYPBNC/*K.R2RK4FEF$?/')IW^:QZ50Q/!93M.A91O+8FQ7?9XY@,I>==@R%
MKM"I>J"X'B1Y&2S7`<R`WW>;[:F''R8S)UT'O(W!=&C=SV='8%FZ>@P%X%<I
MUJN%>0V3+/]2IMZ*T^"/7:BV#3>%<W=0?)L,UB?B:#";?UC>WXD_!?Q:6G>=
M_%*Q>+5YNF=2\I_.?^>+$'Y5XF%-IG,*^_`>EM'_J/\1T-W#&(_`U>KZKV,7
MUE6>$.!P]&@`3Q&3)YWBX\PBT#?2ZK"1?U?8IG#&"C:H*KAG0*?BZ0,_1:1K
M]256?0#0A\:3HA=T$>+R?8%G=/4%Q AT 6Q`V,8#!B)TEQL0KEQ,N\9SC+CG?<Y
MA%7=F]@C];$H]D6"YQOQ.4[VL?"V6WW&#O7U1(!;*PIVY8L;K/!#C]RY,@LS
M]<E6?9K5'WRJRWAX3?DLC2,2'C>T6H'/M/JB?-'`[-#Q5G5/[//KAEZO'$/'
M0=G.$W(0Z AT T)Q,>G.J&0.P+9X%.=4(A-(!*?ZH1`AH/EV)!CWXM$'K>29*.L
MKHJP5E?B"'*^18UO;_"QLKJS>HNO7^-S#;X#99-J6`_5-T+U&T/U#_'50O6-
M4/W&4`_RU4+UC=`.E0VJ23W4V`@U;@PU;G9M4@\U-D*-&T,]S&>&&ANA'2P;
M5+-[0^_2+0_T8)D3]:</]5YSDYW13[3&52<UW7.J_C#OHH%W7^/=,][%V[SV
M=<U;N>*^&N7<4[DZQ&=Z*5=[@Z]AC`_RS>K^I89_::-_Z2&^FG^IX5_:Z%\S
MW[SF7L:]RYJ<RPYPF:YEW+.LR;$#7#5%=C//\*Q)D:'V$%_-.<_PKDF1#_+5
MQS4SQC5K'-?LP#C4QS4SQC5K'-=#?';=/VGX)QO]DX?X:OY)PS_9Z%\CWZ`W
M'M-3G#J)`CW/.?[Z2':K=[1(012U5$I1J\#R2LA/E*:_J)J$Z0@@5R<$LQA6
M]PC>/H,CA[?W`YT2V'A0H2(/'N<)A0P)!'GRA$)&!!+B4YU0R-PFF$SB\R(E
ML#OBSP9=R1,*N3<GA;?A^X)9UI,":AL'$?@6-;Z]P=<P*=[@Z]?X7(/O0+E&
M!0N`=,A61 AT J-61F4-`P6S&"O#?;$:].@SPQ<;5!D;$K1&16IN:02 AT AG^0D<9
M'_M_J(1<B)$SLX_'Y2*A$)M`)#[5"8%82ENKE]#`4VNNR'7W0(DN0#1:<*-]
M;J1RW44-1GUNY.9&)"?XT2/W+/RB/:MR$[[@\'T.VQ^`]SG<S6$DIV^:<VO&
M3E7P'A6D=/J]5<$GY.UX7H[+<Y1U19%4D)$9?EC$7?[00Q,:@8W,C AT B+'BA_
MZ.%I-.P;AFYA2'^HRX2[1/\M[0;O[)U8WSBMU%_([J+W[^G;W0A>P$VM0103
MEUI%'AY4-W6AXES4.?<F9X/BO,G)>@"`.G#C![&9$&4)XT@<#9^PY3AO8?C4
MM7I/53BQ@.?4>D&L]Z7UOK36QHMFXSXQ=DMCMS(>YQ7*KOJ#K?*OILI;GM'D
M3$TW]?6,1./08!PS%H<3+$R"?4%0C@(/Q[#OF_9N85_J?!F1^K)';[.+".A@
M.-_F?*MPG AT Z%\TU^MPJ_Z4`X;[BLKM<KXX'ALY<[3=472KS%@>&LEWM+U;?!
MB+OIY7[2G.)M-K%QJ]1IX9/D8#J/<9O4:>&+`:;S%K?(*J4X=K6'W^^5GU7&
ML!<,J;\J7*B DOT SRXTOJAC9E-JEBA AT GA+8S*KT.DP#T.HJY;#A01S9W?_9HX']
M[F!`54IQ%@<&&E-E!-MG4#6F54IQG-/59"0CV`&#>@I2I AT 3'*355F1+<#<.M
M%:),*8X3KC47R0B6O3G\KE9-E5(<YXPT&<D(=L('*-9C0S*&M0QPD,-(3O%\
MH+1:T(QA#>Y\F%A.\7S`8CU6)*-8 AT SIGK#**Y0,7ZS$C&<,:Q/FPL9SB^0!J
MT:89PQK<^?"QG.*G')YH5)51[#W';C6HRBC6YEBI055&L;]Q[%<-JC*"Y>YJ
M-\N4X+BKVL4RI3C>75O=2R2C6-[X5K=+,H+EX>NPRY3@>.@ZY#(EN#L>T$;'
M0C*&-5[]?R_>'_,W?Z,,1>.]?]R[O2X;BYSG%1B5J3XFE7^/M)Q9O?'R;CJT
M^-\I+1\_7NEJ0COCQ]'(*=\&!!X^#Y;QPT^G=C886SWST!P%#CLBFV6]-4-M
MT^D6^18UOKW!UW!</LSW6-V-`.A+H!C*C$!OAFPOC]:^VL5Y3O`C`Q_F.)83
M_-`V`O/Y=1:4&XMF1"9-8-`$LK%HT%R;-"N#9B4;BP;-C4FS-FC6LK%HT- AT F
MC31HI&PL&C1C8TBB?"A83O!W]H+A-U(=3GE>'?_'T\&_*G#B?09(F1+:Z9">
M2Z/$QR-IGN73'PJ&P8(9[+5!>3IM,.@S`U<;%!G%3IER14FB-(OG'&^10S@^
M#PH AT _<%-?C-,OA9(^H.;3,QFXI*>_S+,S*;BL AT G^Z_\@D[8I:N9T;"[FT]'0
MR#G[*X$H2Y63)*L:OIL^+FU#HC?)%R9X4&XL\K6`3.,:4618-BCS&WR+?^M8
M AT S*_P=>O\;D&WX%RC8JN-X#A0LNS,BAI&"R8P5X;[(G7ID&?&;C:H,@X]FG9
MK_>]=,W>;ZAY DOT 10 AT 4-:[7[KF`#34O$&Y:/!R7_.I7G.(\K?&P+_6PFRH>8NR
M'OC76I AT --6]0- AT 3^M19F0TTSI;XYK,AV^I-0D>=3<,?>$_*K06JTSXW(!4F#
M49\;N;D1R2O\Q+IAGL7!6GE4Y-HS*)E&"VZTSXV(9PU&?6[DYD8D)_CI?;F<
MXF0+@#RAD#EW/LFT\WF>.Y]DG'?.G4^R?6Y$G:\;];F1FQN1O,)/]:?4:OHD
M_,-ITO0=-6F\99_JKZB4:L^I&B3U(%7?H'(Y57/18'F8$RU-=EEQ6ZQ^*@.K
M]]0=5K>4^'\^0:]\D6%!&?850QY,2;`X1-"G!&Y%D/O<&W>K&L.6W[#J")Q:
M``[SWS$8%IQA7S)4`3C,?Y DOT AT SPG<DJ`*H*S AT MC;O?MS#\JQT5QH&K+=Q#\NS
MTCW3@/4N[F$TJ[#WTWMU&BDCV>HC(\TX>LS!40XCZ[7!:,&-]KD16:]UHQ[I
M)7CJ1,K$B4 AT SIL&"&>RUP9XTP0VN>0LKW<**MK`R#%@+*]W"BK9`#1[L6Z-S
M=_)9A<YRPV)L&$0%DG9QD^'",-P7AK2;FPS[!UQT#_G(A@:>J[')\\K!FM&"
M&^USHSUUSC"Z-EI:Y2VM6$LKTXBWM,I;6K&6B-%L4/LPF'K\,Z!9UHU#;9/"
M(M^BQK<W^!ID_PV^?HW/-?@.E$VJVA\)I5YJA-JTN4'M(;Y:J*D1:M,.]P9?
M+=34".U0V:":UD<U,48U:1S5I'D4IO5138Q131I']3"?&6IBC.+!LDE5'U7C
MB&*6BU";1V%:'U7CG&*6BU`/\M5"-4;Q8-F AT LJIC91ILQ=_Q3_^++&`XBP*_
M%I!&Z(1AXP(<!^4/#O^MI:UHI:ZC57-"FB&/3BJJ_VWL6I;;QH'@?;\BUZWR
MQ;KN22_'JE)L151,;RXI40_+5;3-$%*DW:]?@L1CNH=0]L)IT-T#8`"!`/AP
M)O>`3;O[&X^2IGJR66//Y737O&;=V_.LOUSY.Y._GN:]XF^D_!7D+Y%F5ZHG
MFW5-5>WKR6;=V_.L/U75FJK:UY.O^%-5K:EJJ32Y&HU450M<-G/:5;5(^N.J
M%KAFYK2K:MH?5[4H"O*72).K\5!.>LUF;6>[SKA*;>3S8*T@!\&Y$X1K>(]@
M!(*B$W AT CN-,5W%DUNV-[3Q4M\N5&IOW[SA,E`,F(LB@<45CD4Q:%]PP`)&/*
M8O.;+*;$]XZ%!?YGXK\XGK#(IRJ\>,<`0#*G+$I'%!;YE$7I/0,`27<;/4K>
M?2,#(,F4-;O`!82R$:E\0P`@"><4FIL0RL:DVOP^)\XH>)<`)9])XAL>`$DX
MF]#VA%`V)Y5O?P`DX9Q"%R"$LD=2?7BJ!"A9D*3R3`E0DI'$>*9)]KGO)/G7
M,R4`R2/]>'P-A`7^@OB^^,(BGR)<^;`"0`F%M_)E`0"2C$KE(^0M!^H[\7UX
MA!5\NN=KW+U>M()/]WR-N]>+5O#O]=3L0%.S0^_4[-`_E;K74[,#3<T.O5.S
MM#^^B!]H*I9,*U?=:UCMRY716??2E7_KLM7SJ5#E;7=^<Z-=#VC'-;@1Y?)^
MQ_,;BJ5SW+B]&<^YT'E/H<^ZT'0JQ/5JH7-5:&XL[S<6.O]MH?4D^$"3X$/O
M)/C0/VF]UY/@`TV"#[V3X+0_U:EHTIM,*U=]G:K6G4J="E5.ML^RIU/5W*GJ
M9*>JK[1/7Z>J=:=2IT)<KQ::.U7-G:I.=JITH>G1">,>F4`K^/3HA'&/3*`5
M_%5\V<<<-PW!'21E(BA;^]?N("DS07FU?^T.DO((BXGC1[N8Z(QKNR9!@AP$
MYTX0%Q-:,`)!T0F\D5RX]V^ZF_[2".XWO>([T8KOU+OB._7_>+[I%=^)5GRG
MWA5?VA__KD^TPDNFT=5JFJG7.(\[@V]NJA-=;>WII,]<^SRSSYX:7_4YTCX+
M]IDZ@>Z>IDOH#K]V==L1T`(_)_[9\82-_'PXBYM*Y[7]0&X\1MKS^/XS1_^R
M.;Q`L-6)+OKV=%_56I^Y]GEFGSW1O^ISI'T6[#-U AT MS-AS$ZEW+=Q"4>!4WO
MEEYH=Y33+C3]NYO/>K?T0KNCG'9A2?OCH-#N:#K=N?I#?G;PTZ+][.`L\:W0
MN\'SE]L0MOW@\G9[\TF:6+*[X2B^RK=?%Z9AA*.D328_Y,>+]NWW&]:6)\!6
M]NQ6DY'&>*H$J!E AT H/;A&PY=8-)IC+EUM="N*M:F3I"WF?NF173V&FJN$.MR
MU AT 6RD4C(1O.)'$7V1=EIP$I^MI)KVGUANC4@`R$9WXN6WQQLFX>CI,VGSX)7
M[B[=V/37I_T[I&Q"Z!Y0Z+C!$GO\^`7JN_EX:TL-%OG8'QM"Z9D!;)4F(XWQ
M5`E0LR!)Y9D2D$25K0IE$D AT 5;Z'*5X5R(2+=`B)758X8+-!ELW^T#>Z/@C:9
MCILN%9G;W:;I0`V-@)3,GK#>_H52`%AIJ\E(8SQ5`M3P&&%?.94_XV2:?M6-
M*QXC&FK%VM0)'B/XW=I]>*=6(];EK`MD(Q$6?JD"7H=`"Z1BOE1!KT.P$9&N
M)_`U!R=U0L=^V1/\6 AT 4[?:8G_DO=`'6,.T&E58U01[X!**1WRZG<5MOOZUV[
MF\9`YF;'(BQH&+<48EW.ND`V$I%LH?.K8C8$E5;E646^`2BE\\F/KR`LMZ7+
MJ-S^%(!$<Q9YJ AT 2DR4GCF48`*7G`\>WUW0UK!$`BINK-*3]+MU="2-F$O!*B
MT'&#)?8L6U']S=%5&P%I<M)XIA$`)0MJG*:V9<B@^BD1"[F`5=0!8AT7L AT ID
M(Y&0-2W[+$5N;T/82\.W'\_L_KE)_$\M\*D`ZV>"?DJG]W;+^6;(-XXG+/#%
MC+O<WK84=P3:?+"2Q')P[$H1+=&G2-\Y6K!`7\PDNWIM2<&@Y\\#\/PRZ#Q&
MB_0'I+\[6K1`_R[)_[84=P3:.,<@=V^:,P#)].$)-;OW7XY+2,CL4]C0GF^G
MLFM(`J29D*;TU`"VK.%+9/@HA+M^)=-T-6M<\>6QH5:L39W@:R,_\;Y_#;50
MB'4YZP+92"3'//&L^+Y]3CP>!6TQ7`T?(K%J?KOO#0FLI"^G7P2[WKU94C1$
MO47NK6,%*^E8#I=]-(*Z?)C,'L1ON'[?-HOQAD=`2K+5HWQL=%^;XT<WM5!(
MR++A$TPLC/TXZ#I>="C=)64CL(.@$$BILO%P+L8<^PE?.]:`E?29")QYM0$+
M1Z3!RJ/Y:[?L("`E7Y<BS.:G_7JW-)*ZPE^JOU)&BS_3AI\AWSB>L,!?X&6H
MN4X='3."B])0H2I?F AT BX7`LN6.5+!``T.(B:8S=VAEZ"Z2X)O80<!(5`2I6M
M:!PV1S?ZQGS]<.P0YDER0;^JS%89U=90;0W6UJC:9EQ;$VIK?&U)9??1L5U.
MA6L.!*29D*;TU`"VK.'+1]C9=R-\,DT#?N.*+Q\-M6)MZ AT 1?/MR=#CE[\[50
MB'4YZP+92(2%7ZJ`UR'0B%C'0:]#L`52<5=+6\OBX*1.Z-BKI:TEJV"GS_3$
MGY>VL4(]4&E5(]21;P`*Z2H3(_#1V)$W'`7MF]N^\\R37Y02(,F"-57@`F*9
MF%J<_#87`2'YGW=8[I[%5Y[W%_N%YWB4M/$][%1>-NWK%6 AT EO_WWLH)_K-<;
M&T("0O+W?"!V3O\I!W;#5!BB+FZ17-TZG@!_RO^U AT _\XVRZ3_ AT DOT M*HDT:GL`
!`$("
`
end
- Raw text -