www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - D language lexer written in D - dlexer.d

reply James Dunne <jdunne4 bradley.edu> writes:
Hello all,

I thought as a nice Christmas present for you all working so hard on D, I would
contribute something some of you might find useful.  I've been working hard on a
lexer (tokenizer) for the D language.  Attached to this post is the lexer module
written in D!!

I began work on it for code-completion support for my D IDE called Orion (over
on dsource.org).  Don't bother checking anything out there yet, as its all in
ruins right now. ;)

I tested this module somewhat, and it successfully lexes its own source code!
This module could be useful for a few things, like:

+ code-completion database for D modules
+ generating CTAGS for the D language
+ indent-like program for D

..and any other D source code tools you can think of.

Merry Christmas all, enjoy!

Regards,
James Dunne
begin 0644 dlexer.d
M;6]D=6QE"61L97AE<CL*"FEM<&]R=`ES=&0N<W1R96%M.PII;7!O<G0)<W1D
M+G-T<FEN9SL*:6UP;W)T"7-T9"YC='EP93L*"F5N=6T 5$]+('L*"51/2W)E
M<V5R=F5D+`H*"2\O($]T:&5R" E43TML<&%R96XL"51/2W)P87)E;BP*"51/
M2VQB<F%C:V5T+`E43TMR8G)A8VME="P*"51/2VQC=7)L>2P)5$]+<F-U<FQY
M+`H)5$]+8V]L;VXL"51/2VYE9RP*"51/2W-E;6EC;VQO;BP)5$]+9&]T9&]T
M9&]T+`H)5$]+96]F+`D)5$]+8V%S="P*"51/2VYU;&PL"51/2V%S<V5R="P*
M"51/2W1R=64L"51/2V9A;'-E+`H)5$]+87)R87DL"51/2V-A;&PL" E43TMA
M9&1R97-S+`E43TMT>7!E9&]T+`H)5$]+='EP92P)5$]+=&AR;W<L" E43TMN
M97<L"0E43TMD96QE=&4L" E43TMS=&%R+`E43TMS>6UO9F8L" E43TMV87(L
M"0E43TMD;W1V87(L" E43TMD;W1T:2P)5$]+9&]T97AP+`H)5$]+9&]T='EP
M92P)5$]+<VQI8V4L" E43TMA<G)A>6QE;F=T:"P)5$]+=F5R<VEO;BP*"51/
M2VUO9'5L92P)5$]+9&]L;&%R+`H)5$]+=&5M<&QA=&4L"51/2VEN<W1A;F-E
M+`H)5$]+9&5C;&%R871I;VXL"51/2W1Y<&5O9BP*"51/2W!R86=M82P)5$]+
M9'-Y;6)O;"P*"51/2W1Y<&5I9"P)5$]+=6%D9"P*" DO+R!/<&5R871O<G,*
M"51/2VQT+`D)5$]+9W0L" E43TML92P)"51/2V=E+`H)5$]+97%U86PL"51/
M2VYO=&5Q=6%L+`H)5$]+:61E;G1I='DL"51/2VYO=&ED96YT:71Y+`H)5$]+
M:6YD97 L" H)+R\ 3D-%1R!F;&]A=&EN9R!P;VEN="!C;VUP87)E<PH)+R\ 
M(3P^/2` ("` /#X ("` /#X]("` ("$^("` ("`A/CT ("`A/"` ("` (3P]
M("` (3P^" E43TMU;F]R9"Q43TML9RQ43TML96<L5$]+=6QE+%1/2W5L+%1/
M2W5G92Q43TMU9RQ43TMU92P*" E43TMS:&PL"0E43TMS:'(L" E43TMS:&QA
M<W,L"51/2W-H<F%S<RP*"51/2W5S:'(L"51/2W5S:')A<W,L" E43TMC870L
M"0E43TMC871A<W,L"2\O('X ?CT*"51/2V%D9"P)"51/2VUI;BP)"51/2V%D
M9&%S<RP)5$]+;6EN87-S+`H)5$]+;75L+`D)5$]+9&EV+`D)5$]+;6]D+`H)
M5$]+;75L87-S+`E43TMD:79A<W,L"51/2VUO9&%S<RP*"51/2V%N9"P)"51/
M2V]R+`D)5$]+>&]R+`H)5$]+86YD87-S+`E43TMO<F%S<RP)5$]+>&]R87-S
M+`H)5$]+87-S:6=N+`E43TMN;W0L"0E43TMT:6QD92P*"51/2W!L=7-P;'5S
M+`E43TMM:6YU<VUI;G5S+`H)5$]+9&]T+`D)5$]+87)R;W<L"51/2V-O;6UA
M+`H)5$]+<75E<W1I;VXL"51/2V%N9&%N9"P)5$]+;W)O<BP*" DO+R!.=6UE

M=BP 5$]+=6YS-C1V+`H)5$]+9FQO870S,G8L(%1/2V9L;V%T-C1V+"!43TMF

M3TMI;6%G:6YA<GDX,'8L" H)+R\ 0VAA<B!C;VYS=&%N=',*"51/2V-H87)V
M+"!43TMW8VAA<G8L(%1/2V1C:&%R=BP*" DO+R!,96%F(&]P97)A=&]R<PH)
M5$]+:61E;G1I9FEE<BP)5$]+<W1R:6YG+`H)5$]+=&AI<RP)5$]+<W5P97(L
M" H)+R\ 0F%S:6, ='EP97,*"51/2W9O:60L" E43TMI;G0X+"!43TMU;G,X
M+`H)5$]+:6YT,38L(%1/2W5N<S$V+`H)5$]+:6YT,S(L(%1/2W5N<S,R+`H)
M5$]+:6YT-C0L(%1/2W5N<S8T+`H)5$]+9FQO870S,BP 5$]+9FQO870V-"P 
M5$]+9FQO870X,"P*"51/2VEM86=I;F%R>3,R+"!43TMI;6%G:6YA<GDV-"P 


M3TMB:70L" H)+R\ 06=G<F5G871E<PH)5$]+<W1R=6-T+"!43TMC;&%S<RP 
M5$]+:6YT97)F86-E+"!43TMU;FEO;BP 5$]+96YU;2P 5$]+:6UP;W)T+`H)
M5$]+='EP961E9BP 5$]+86QI87,L(%1/2V]V97)R:61E+"!43TMD96QE9V%T
M92P 5$]+9G5N8W1I;VXL" E43TMM:7AI;BP*" E43TMA;&EG;BP 5$]+97AT
M97)N+"!43TMP<FEV871E+"!43TMP<F]T96-T960L(%1/2W!U8FQI8RP 5$]+
M97AP;W)T+`H)5$]+<W1A=&EC+"`O*E1/2W9I<G1U86PL*B\ 5$]+9FEN86PL
M(%1/2V-O;G-T+"!43TMA8G-T<F%C="P 5$]+=F]L871I;&4L" E43TMD96)U
M9RP 5$]+9&5P<F5C871E9"P 5$]+:6XL(%1/2V]U="P 5$]+:6YO=70L" E4
M3TMA=71O+"!43TMP86-K86=E+`H*"2\O(%-T871E;65N=',*"51/2VEF+"!4
M3TME;'-E+"!43TMW:&EL92P 5$]+9F]R+"!43TMD;RP 5$]+<W=I=&-H+`H)
M5$]+8V%S92P 5$]+9&5F875L="P 5$]+8G)E86LL(%1/2V-O;G1I;G5E+"!4
M3TMW:71H+`H)5$]+<WEN8VAR;VYI>F5D+"!43TMR971U<FXL(%1/2V=O=&\L
M(%1/2W1R>2P 5$]+8V%T8V L(%1/2V9I;F%L;'DL" E43TMA<VTL(%1/2V9O
M<F5A8V L" H)+R\ 0V]N=')A8W1S" E43TMB;V1Y+"!43TMI;G9A<FEA;G0L
M" H)+R\ 5&5S=&EN9PH)5$]+=6YI='1E<W0L"GT*"G-T<G5C="!4;VME;B![
M" EC:&%R6UT):61E;G0[" E43TL)"71O:V5N.PI]" IC:&%R6UT)=&]K=&]S
M=');5$]++FUA>"LQ72`](%L*"51/2RY43TMR97-E<G9E9"`Z(")R97-E<G9E
M9"(L" H)+R\ 3W1H97(*"51/2RY43TML<&%R96X .B`B*"(L" E43TLN5$]+
M<G!A<F5N(#H (BDB+`H)5$]++E1/2VQB<F%C:V5T(#H (ELB+`H)5$]++E1/
M2W)B<F%C:V5T(#H (ETB+`H)5$]++E1/2VQC=7)L>2`Z(")[(BP*"51/2RY4
M3TMR8W5R;'D .B`B?2(L" E43TLN5$]+8V]L;VX .B`B.B(L" E43TLN5$]+
M;F5G(#H (BTB+`H)5$]++E1/2W-E;6EC;VQO;B`Z("([(BP*"51/2RY43TMD
M;W1D;W1D;W0 .B`B+BXN(BP*"51/2RY43TME;V8 .B`B14]&(BP*"51/2RY4
M3TMC87-T(#H (F-A<W0B+`H)5$]++E1/2VYU;&P .B`B;G5L;"(L" E43TLN
M5$]+87-S97)T(#H (F%S<V5R="(L" E43TLN5$]+=')U92`Z(")T<G5E(BP*
M"51/2RY43TMF86QS92`Z(")F86QS92(L" E43TLN5$]+87)R87D .B`B6UTB
M+`H)5$]++E1/2V-A;&P .B`B8V%L;"(L" E43TLN5$]+861D<F5S<R`Z("(C
M(BP*"51/2RY43TMT>7!E9&]T(#H (G1Y<&5D;W0B+`H)5$]++E1/2W1Y<&4 
M.B`B='EP92(L" E43TLN5$]+=&AR;W< .B`B=&AR;W<B+`H)5$]++E1/2VYE
M=R`Z(")N97<B+`H)5$]++E1/2V1E;&5T92`Z(")D96QE=&4B+`H)5$]++E1/
M2W-T87( .B`B*B(L" E43TLN5$]+<WEM;V9F(#H (G-Y;6]F9B(L" E43TLN
M5$]+=F%R(#H (G9A<B(L" E43TLN5$]+9&]T=F%R(#H (F1O='9A<B(L" E4
M3TLN5$]+9&]T=&D .B`B9&]T=&DB+`H)5$]++E1/2V1O=&5X<"`Z(")D;W1E
M>'`B+`H)5$]++E1/2V1O='1Y<&4 .B`B9&]T='EP92(L" E43TLN5$]+<VQI
M8V4 .B`B+BXB+`H)5$]++E1/2V%R<F%Y;&5N9W1H(#H (F%R<F%Y;&5N9W1H
M(BP*"51/2RY43TMV97)S:6]N(#H (G9E<G-I;VXB+`H)5$]++E1/2VUO9'5L
M92`Z(")M;V1U;&4B+`H)5$]++E1/2V1O;&QA<B`Z("(D(BP*"51/2RY43TMT
M96UP;&%T92`Z(")T96UP;&%T92(L" E43TLN5$]+:6YS=&%N8V4 .B`B:6YS
M=&%N8V4B+`H)5$]++E1/2V1E8VQA<F%T:6]N(#H (F1E8VQA<F%T:6]N(BP*
M"51/2RY43TMT>7!E;V8 .B`B='EP96]F(BP*"51/2RY43TMP<F%G;6$ .B`B
M<')A9VUA(BP*"51/2RY43TMD<WEM8F]L(#H (F1S>6UB;VPB+`H)5$]++E1/
M2W1Y<&5I9"`Z(")T>7!E:60B+`H)5$]++E1/2W5A9&0 .B`B=6%D9"(L" H)
M+R\ 3W!E<F%T;W)S" E43TLN5$]+;'0 .B`B/"(L" E43TLN5$]+9W0 .B`B
M/B(L" E43TLN5$]+;&4 .B`B/#TB+`H)5$]++E1/2V=E(#H (CX](BP*"51/
M2RY43TME<75A;"`Z("(]/2(L" E43TLN5$]+;F]T97%U86P .B`B(3TB+`H)
M5$]++E1/2VED96YT:71Y(#H (CT]/2(L" E43TLN5$]+;F]T:61E;G1I='D 
M.B`B(3T](BP*"51/2RY43TMI;F1E>"`Z(");72(L" H)+R\ 3D-%1R!F;&]A
M=&EN9R!P;VEN="!C;VUP87)E<PH)+R\ (3P^/2` ("` /#X ("` /#X]("` 
M("$^("` ("`A/CT ("`A/"` ("` (3P]("` (3P^" E43TLN5$]+=6YO<F0 
M.B`B(3P^/2(L" E43TLN5$]+=64 .B`B(3P^(BP*"51/2RY43TML9R`Z("(\
M/B(L" E43TLN5$]+;&5G(#H (CP^/2(L" E43TLN5$]+=6QE(#H (B$^(BP*
M"51/2RY43TMU;"`Z("(A/CTB+`H)5$]++E1/2W5G92`Z("(A/"(L" E43TLN
M5$]+=6< .B`B(3P](BP*" E43TLN5$]+<VAL(#H (CP\(BP*"51/2RY43TMS
M:'( .B`B/CXB+`H)5$]++E1/2W-H;&%S<R`Z("(\/#TB+`H)5$]++E1/2W-H
M<F%S<R`Z("(^/CTB+`H)5$]++E1/2W5S:'( .B`B/CX^(BP*"51/2RY43TMU
M<VAR87-S(#H (CX^/CTB+`H)5$]++E1/2V-A="`Z(")^(BP*"51/2RY43TMC
M871A<W, .B`B?CTB+`DO+R!^('X]" E43TLN5$]+861D(#H (BLB+`H)5$]+
M+E1/2VUI;B`Z("(M(BP*"51/2RY43TMA9&1A<W, .B`B*STB+`H)5$]++E1/
M2VUI;F%S<R`Z("(M/2(L" E43TLN5$]+;75L(#H (BHB+`H)5$]++E1/2V1I
M=B`Z("(O(BP*"51/2RY43TMM;V0 .B`B)2(L" E43TLN5$]+;75L87-S(#H 
M(BH](BP*"51/2RY43TMD:79A<W, .B`B+STB+`H)5$]++E1/2VUO9&%S<R`Z
M("(E/2(L" E43TLN5$]+86YD(#H (B8B+`H)5$]++E1/2V]R(#H (GPB+`H)
M5$]++E1/2WAO<B`Z(")>(BP*"51/2RY43TMA;F1A<W, .B`B)CTB+`H)5$]+
M+E1/2V]R87-S(#H (GP](BP*"51/2RY43TMX;W)A<W, .B`B7CTB+`H)5$]+
M+E1/2V%S<VEG;B`Z("(](BP*"51/2RY43TMN;W0 .B`B(2(L" E43TLN5$]+
M=&EL9&4 .B`B?B(L" E43TLN5$]+<&QU<W!L=7, .B`B*RLB+`H)5$]++E1/
M2VUI;G5S;6EN=7, .B`B+2TB+`H)5$]++E1/2V1O="`Z("(N(BP*"51/2RY4
M3TMA<G)O=R`Z("(M/B(L" E43TLN5$]+8V]M;6$ .B`B+"(L" E43TLN5$]+
M<75E<W1I;VX .B`B/R(L" E43TLN5$]+86YD86YD(#H (B8F(BP*"51/2RY4
M3TMO<F]R(#H (GQ\(BP*" DO+R!.=6UE<FEC(&QI=&5R86QS" E43TLN5$]+
M:6YT,S)V(#H
M"51/2RY43TMI;G0V-'8 .B`B:6YT-C1V(BP 5$]++E1/2W5N<S8T=B`Z(")U
M;G,V-'8B+`H)5$]++E1/2V9L;V%T,S)V(#H (F9L;V%T,S)V(BP 5$]++E1/
M2V9L;V%T-C1V(#H

M(BP 5$]++E1/2VEM86=I;F%R>38T=B`Z(")I;6%G:6YA<GDV-'8B+"!43TLN

M;VYS=&%N=',*"51/2RY43TMC:&%R=B`Z(")C:&%R=B(L(%1/2RY43TMW8VAA
M<G8 .B`B=V-H87)V(BP 5$]++E1/2V1C:&%R=B`Z(")D8VAA<G8B+`H*"2\O
M($QE868 ;W!E<F%T;W)S" E43TLN5$]+:61E;G1I9FEE<B`Z(")I9&5N=&EF
M:65R(BP)5$]++E1/2W-T<FEN9R`Z(")S=')I;F<B+`H)5$]++E1/2W1H:7, 
M.B`B=&AI<R(L"51/2RY43TMS=7!E<B`Z(")S=7!E<B(L" H)+R\ 0F%S:6, 
M='EP97,*"51/2RY43TMV;VED(#H
M8GET92(L(%1/2RY43TMU;G,X(#H (G5B>71E(BP*"51/2RY43TMI;G0Q-B`Z
M(")S:&]R="(L(%1/2RY43TMU;G,Q-B`Z(")U<VAO<G0B+`H)5$]++E1/2VEN

M;G0V-"`Z(")L;VYG(BP 5$]++E1/2W5N<S8T(#H (G5L;VYG(BP*"51/2RY4


M,S( .B`B:69L;V%T(BP 5$]++E1/2VEM86=I;F%R>38T(#H (FED;W5B;&4B



M(F-H87(B+"!43TLN5$]+=V-H87( .B`B=V-H87(B+"!43TLN5$]+9&-H87( 
M.B`B9&-H87(B+"!43TLN5$]+8FET(#H (F)I="(L" H)+R\ 06=G<F5G871E
M<PH)5$]++E1/2W-T<G5C="`Z(")S=')U8W0B+"!43TLN5$]+8VQA<W, .B`B
M8VQA<W,B+"!43TLN5$]+:6YT97)F86-E(#H (FEN=&5R9F%C92(L(%1/2RY4
M3TMU;FEO;B`Z(")U;FEO;B(L(%1/2RY43TME;G5M(#H (F5N=6TB+"!43TLN
M5$]+:6UP;W)T(#H (FEM<&]R="(L" E43TLN5$]+='EP961E9B`Z(")T>7!E
M9&5F(BP 5$]++E1/2V%L:6%S(#H (F%L:6%S(BP 5$]++E1/2V]V97)R:61E
M(#H (F]V97)R:61E(BP 5$]++E1/2V1E;&5G871E(#H (F1E;&5G871E(BP 
M5$]++E1/2V9U;F-T:6]N(#H (F9U;F-T:6]N(BP*"51/2RY43TMM:7AI;B`Z
M(")M:7AI;B(L" H)5$]++E1/2V%L:6=N(#H (F%L:6=N(BP 5$]++E1/2V5X
M=&5R;B`Z(")E>'1E<FXB+"!43TLN5$]+<')I=F%T92`Z(")P<FEV871E(BP 
M5$]++E1/2W!R;W1E8W1E9"`Z(")P<F]T96-T960B+"!43TLN5$]+<'5B;&EC
M(#H (G!U8FQI8R(L(%1/2RY43TME>'!O<G0 .B`B97AP;W)T(BP*"51/2RY4
M3TMS=&%T:6, .B`B<W1A=&EC(BP +RI43TLN5$]+=FER='5A;"`Z(")V:7)T
M=6%L(BPJ+R!43TLN5$]+9FEN86P .B`B9FEN86PB+"!43TLN5$]+8V]N<W0 
M.B`B8V]N<W0B+"!43TLN5$]+86)S=')A8W0 .B`B86)S=')A8W0B+"!43TLN
M5$]+=F]L871I;&4 .B`B=F]L871I;&4B+`H)5$]++E1/2V1E8G5G(#H (F1E
M8G5G(BP 5$]++E1/2V1E<')E8V%T960 .B`B9&5P<F5C871E9"(L(%1/2RY4
M3TMI;B`Z(")I;B(L(%1/2RY43TMO=70 .B`B;W5T(BP 5$]++E1/2VEN;W5T
M(#H (FEN;W5T(BP*"51/2RY43TMA=71O(#H (F%U=&\B+"!43TLN5$]+<&%C
M:V%G92`Z(")P86-K86=E(BP*" DO+R!3=&%T96UE;G1S" E43TLN5$]+:68 
M.B`B:68B+"!43TLN5$]+96QS92`Z(")E;'-E(BP 5$]++E1/2W=H:6QE(#H 
M(G=H:6QE(BP 5$]++E1/2V9O<B`Z(")F;W(B+"!43TLN5$]+9&\ .B`B9&\B
M+"!43TLN5$]+<W=I=&-H(#H (G-W:71C:"(L" E43TLN5$]+8V%S92`Z(")C
M87-E(BP 5$]++E1/2V1E9F%U;'0 .B`B9&5F875L="(L(%1/2RY43TMB<F5A
M:R`Z(")B<F5A:R(L(%1/2RY43TMC;VYT:6YU92`Z(")C;VYT:6YU92(L(%1/
M2RY43TMW:71H(#H (G=I=& B+`H)5$]++E1/2W-Y;F-H<F]N:7IE9"`Z(")S
M>6YC:')O;FEZ960B+"!43TLN5$]+<F5T=7)N(#H (G)E='5R;B(L(%1/2RY4
M3TMG;W1O(#H (F=O=&\B+"!43TLN5$]+=')Y(#H (G1R>2(L(%1/2RY43TMC
M871C:"`Z(")C871C:"(L(%1/2RY43TMF:6YA;&QY(#H (F9I;F%L;'DB+`H)
M5$]++E1/2V%S;2`Z(")A<VTB+"!43TLN5$]+9F]R96%C:"`Z(")F;W)E86-H

M5$]+:6YV87)I86YT(#H (FEN=F%R:6%N="(L" H)+R\ 5&5S=&EN9PH)5$]+
M+E1/2W5N:71T97-T(#H (G5N:71T97-T(BP*73L*"B\O(%1H92!$(&QA;F=U
M86=E(&QE>&5R("AT;VME;FDZ"F-L87-S($1,97AE<B![" D)<W1A=&EC(%1/
M2UMC:&%R6UU="6ME>7=O<F1S.PH)"2\O($EN:71I86QI>F4 =&AE(&ME>7=O
M<F0M/G1O:V5N=F%L=64 04$Z" D)<W1A=&EC('1H:7,H*2![" D)"2\O($%D
M9"!A;&P =&AE(&ME>7=O<F1S)R!V86QU97, :6YT;R!T:&4 04$Z" D)"6ME
M>7=O<F1S6R)T:&ES(ET /2!43TLN5$]+=&AI<SL*"0D):V5Y=V]R9'-;(G-U
M<&5R(ET /2!43TLN5$]+<W5P97([" D)"6ME>7=O<F1S6R)A<W-E<G0B72`]
M(%1/2RY43TMA<W-E<G0[" D)"6ME>7=O<F1S6R)N=6QL(ET /2!43TLN5$]+
M;G5L;#L*"0D):V5Y=V]R9'-;(G1R=64B72`](%1/2RY43TMT<G5E.PH)"0EK
M97EW;W)D<ULB9F%L<V4B72`](%1/2RY43TMF86QS93L*"0D):V5Y=V]R9'-;
M(F-A<W0B72`](%1/2RY43TMC87-T.PH)"0EK97EW;W)D<ULB;F5W(ET /2!4
M3TLN5$]+;F5W.PH)"0EK97EW;W)D<ULB9&5L971E(ET /2!43TLN5$]+9&5L
M971E.PH)"0EK97EW;W)D<ULB=&AR;W<B72`](%1/2RY43TMT:')O=SL*"0D)
M:V5Y=V]R9'-;(FUO9'5L92)=(#T 5$]++E1/2VUO9'5L93L*"0D):V5Y=V]R
M9'-;(G!R86=M82)=(#T 5$]++E1/2W!R86=M83L*"0D):V5Y=V]R9'-;(G1Y
M<&5O9B)=(#T 5$]++E1/2W1Y<&5O9CL*"0D):V5Y=V]R9'-;(G1Y<&5I9")=
M(#T 5$]++E1/2W1Y<&5I9#L*"0D)" D)"6ME>7=O<F1S6R)T96UP;&%T92)=
M(#T 5$]++E1/2W1E;7!L871E.PH)"0EK97EW;W)D<ULB:6YS=&%N8V4B72`]
M(%1/2RY43TMI;G-T86YC93L*"0D)" D)"6ME>7=O<F1S6R)V;VED(ET /2!4
M3TLN5$]+=F]I9#L*"0D):V5Y=V]R9'-;(F)Y=&4B72`](%1/2RY43TMI;G0X
M.PH)"0EK97EW;W)D<ULB=6)Y=&4B72`](%1/2RY43TMU;G,X.PH)"0EK97EW
M;W)D<ULB<VAO<G0B72`](%1/2RY43TMI;G0Q-CL*"0D):V5Y=V]R9'-;(G5S
M:&]R=")=(#T 5$]++E1/2W5N<S$V.PH)"0EK97EW;W)D<ULB:6YT(ET /2!4
M3TLN5$]+:6YT,S([" D)"6ME>7=O<F1S6R)U:6YT(ET /2!43TLN5$]+=6YS
M,S([" D)"6ME>7=O<F1S6R)L;VYG(ET /2!43TLN5$]+:6YT-C0[" D)"6ME
M>7=O<F1S6R)U;&]N9R)=(#T 5$]++E1/2W5N<S8T.PH)"0EK97EW;W)D<ULB

M(ET /2!43TLN5$]+9FQO870V-#L*"0D):V5Y=V]R9'-;(G)E86PB72`](%1/

M2V)I=#L*"0D):V5Y=V]R9'-;(F-H87(B72`](%1/2RY43TMC:&%R.PH)"0EK
M97EW;W)D<ULB=V-H87(B72`](%1/2RY43TMW8VAA<CL*"0D):V5Y=V]R9'-;
M(F1C:&%R(ET /2!43TLN5$]+9&-H87([" D)"0H)"0EK97EW;W)D<ULB:69L
M;V%T(ET /2!43TLN5$]+:6UA9VEN87)Y,S([" D)"6ME>7=O<F1S6R)I9&]U
M8FQE(ET /2!43TLN5$]+:6UA9VEN87)Y-C0[" D)"6ME>7=O<F1S6R)I<F5A
M;")=(#T 5$]++E1/2VEM86=I;F%R>3 P.PH)"0D*"0D):V5Y=V]R9'-;(F-F
M;&]A=")=(#T 5$]++E1/2V-O;7!L97 S,CL*"0D):V5Y=V]R9'-;(F-D;W5B
M;&4B72`](%1/2RY43TMC;VUP;&5X-C0[" D)"6ME>7=O<F1S6R)C<F5A;")=
M(#T 5$]++E1/2V-O;7!L97 X,#L*"0D)" D)"6ME>7=O<F1S6R)D96QE9V%T
M92)=(#T 5$]++E1/2V1E;&5G871E.PH)"0EK97EW;W)D<ULB9G5N8W1I;VXB
M72`](%1/2RY43TMF=6YC=&EO;CL*"0D)" D)"6ME>7=O<F1S6R)I<R)=(#T 
M5$]++E1/2VED96YT:71Y.PH)"0EK97EW;W)D<ULB:68B72`](%1/2RY43TMI
M9CL*"0D):V5Y=V]R9'-;(F5L<V4B72`](%1/2RY43TME;'-E.PH)"0EK97EW
M;W)D<ULB=VAI;&4B72`](%1/2RY43TMW:&EL93L*"0D):V5Y=V]R9'-;(F9O
M<B)=(#T 5$]++E1/2V9O<CL*"0D):V5Y=V]R9'-;(F1O(ET /2!43TLN5$]+
M9&\[" D)"6ME>7=O<F1S6R)S=VET8V B72`](%1/2RY43TMS=VET8V [" D)
M"6ME>7=O<F1S6R)C87-E(ET /2!43TLN5$]+8V%S93L*"0D):V5Y=V]R9'-;
M(F1E9F%U;'0B72`](%1/2RY43TMD969A=6QT.PH)"0EK97EW;W)D<ULB8G)E
M86LB72`](%1/2RY43TMB<F5A:SL*"0D):V5Y=V]R9'-;(F-O;G1I;G5E(ET 
M/2!43TLN5$]+8V]N=&EN=64[" D)"6ME>7=O<F1S6R)S>6YC:')O;FEZ960B
M72`](%1/2RY43TMS>6YC:')O;FEZ960[" D)"6ME>7=O<F1S6R)R971U<FXB
M72`](%1/2RY43TMR971U<FX[" D)"6ME>7=O<F1S6R)G;W1O(ET /2!43TLN
M5$]+9V]T;SL*"0D):V5Y=V]R9'-;(G1R>2)=(#T 5$]++E1/2W1R>3L*"0D)
M:V5Y=V]R9'-;(F-A=&-H(ET /2!43TLN5$]+8V%T8V [" D)"6ME>7=O<F1S
M6R)F:6YA;&QY(ET /2!43TLN5$]+9FEN86QL>3L*"0D):V5Y=V]R9'-;(G=I
M=& B72`](%1/2RY43TMW:71H.PH)"0EK97EW;W)D<ULB87-M(ET /2!43TLN
M5$]+87-M.PH)"0EK97EW;W)D<ULB9F]R96%C:")=(#T 5$]++E1/2V9O<F5A
M8V [" D)"0H)"0EK97EW;W)D<ULB<W1R=6-T(ET /2!43TLN5$]+<W1R=6-T
M.PH)"0EK97EW;W)D<ULB8VQA<W,B72`](%1/2RY43TMC;&%S<SL*"0D):V5Y
M=V]R9'-;(FEN=&5R9F%C92)=(#T 5$]++E1/2VEN=&5R9F%C93L*"0D):V5Y
M=V]R9'-;(G5N:6]N(ET /2!43TLN5$]+=6YI;VX[" D)"6ME>7=O<F1S6R)E
M;G5M(ET /2!43TLN5$]+96YU;3L*"0D):V5Y=V]R9'-;(FEM<&]R=")=(#T 
M5$]++E1/2VEM<&]R=#L*"0D):V5Y=V]R9'-;(FUI>&EN(ET /2!43TLN5$]+
M;6EX:6X[" D)"6ME>7=O<F1S6R)S=&%T:6,B72`](%1/2RY43TMS=&%T:6,[
M" D)"2\J:V5Y=V]R9'-;(G9I<G1U86PB72`](%1/2RY43TMV:7)T=6%L.RHO
M" D)"6ME>7=O<F1S6R)F:6YA;")=(#T 5$]++E1/2V9I;F%L.PH)"0EK97EW
M;W)D<ULB8V]N<W0B72`](%1/2RY43TMC;VYS=#L*"0D):V5Y=V]R9'-;(G1Y
M<&5D968B72`](%1/2RY43TMT>7!E9&5F.PH)"0EK97EW;W)D<ULB86QI87,B
M72`](%1/2RY43TMA;&EA<SL*"0D):V5Y=V]R9'-;(F]V97)R:61E(ET /2!4
M3TLN5$]+;W9E<G)I9&4[" D)"6ME>7=O<F1S6R)A8G-T<F%C=")=(#T 5$]+
M+E1/2V%B<W1R86-T.PH)"0EK97EW;W)D<ULB=F]L871I;&4B72`](%1/2RY4
M3TMV;VQA=&EL93L*"0D):V5Y=V]R9'-;(F1E8G5G(ET /2!43TLN5$]+9&5B
M=6<[" D)"6ME>7=O<F1S6R)D97!R96-A=&5D(ET /2!43TLN5$]+9&5P<F5C
M871E9#L*"0D):V5Y=V]R9'-;(FEN(ET /2!43TLN5$]+:6X[" D)"6ME>7=O
M<F1S6R)O=70B72`](%1/2RY43TMO=70[" D)"6ME>7=O<F1S6R)I;F]U=")=
M(#T 5$]++E1/2VEN;W5T.PH)"0EK97EW;W)D<ULB875T;R)=(#T 5$]++E1/
M2V%U=&\[" D)"0H)"0EK97EW;W)D<ULB86QI9VXB72`](%1/2RY43TMA;&EG
M;CL*"0D):V5Y=V]R9'-;(F5X=&5R;B)=(#T 5$]++E1/2V5X=&5R;CL*"0D)
M:V5Y=V]R9'-;(G!R:79A=&4B72`](%1/2RY43TMP<FEV871E.PH)"0EK97EW
M;W)D<ULB<&%C:V%G92)=(#T 5$]++E1/2W!A8VMA9V4[" D)"6ME>7=O<F1S
M6R)P<F]T96-T960B72`](%1/2RY43TMP<F]T96-T960[" D)"6ME>7=O<F1S
M6R)P=6)L:6,B72`](%1/2RY43TMP=6)L:6,[" D)"6ME>7=O<F1S6R)E>'!O
M<G0B72`](%1/2RY43TME>'!O<G0[" D)"0H)"0EK97EW;W)D<ULB8F]D>2)=
M(#T 5$]++E1/2V)O9'D[" D)"6ME>7=O<F1S6R)I;G9A<FEA;G0B72`](%1/
M2RY43TMI;G9A<FEA;G0[" D)"6ME>7=O<F1S6R)U;FET=&5S=")=(#T 5$]+
M+E1/2W5N:71T97-T.PH)"0EK97EW;W)D<ULB=F5R<VEO;B)=(#T 5$]++E1/
M2W9E<G-I;VX[" D)?0H)" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\ 
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
M(&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM=6P[" D)"0D)
M"7)E='5R;B!R971T;VL[" D)"0D)8V%S92`G)2<Z" D)"0D)"2LK<#L*"0D)
M"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+;6]D87-S.PH)"0D)"0E](&5L<V4*"0D)
M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM;V0[" D)"0D)"7)E='5R;B!R
M971T;VL[" D)"0D)8V%S92`G7B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I
M;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K
M96X /2!43TLN5$]+>&]R87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O
M:RYT;VME;B`](%1/2RY43TMX;W([" D)"0D)"7)E='5R;B!R971T;VL[" D)
M"0D)8V%S92`G?B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T 
M)STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+8V%T87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`]
M(%1/2RY43TMT:6QD93L*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S
M92`G*"<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2VQP87)E;CL <F5T
M=7)N(')E='1O:SL*"0D)"0EC87-E("<I)SH *RMP.R!R971T;VLN=&]K96X 
M/2!43TLN5$]+<G!A<F5N.R!R971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )ULG
M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("==)RD >PH)"0D)
M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%R<F%Y.PH)
M"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML8G)A
M8VME=#L*"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0EC87-E("==)SH *RMP
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
M<&4L(&IU<W0 86X :61E;G1I9FEE<CH*"0D)"0D)"7-T87)T(#T
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
M"6QE>#L*"49I;&4)9&9I;&4[" H):68 *&%R9W,N;&5N9W1H(#P
M"0EP<FEN=&8H(B4N*G, /&9I;&4N9#Y<;B(L(&%R9W-;,%TI.PH)"7)E='5R
M;B`M,3L*"7T*" DO+R!/<&5N('1H92!F:6QE. H)9&9I;&4 /2!N97< 1FEL
M92AA<F=S6S%=*3L*"2\O(%-E;F0 :6X =&AE(&)U9F9E<B!T;R!T:&4 ;&5X
M97(Z" EC:&%R6UT)<W1R(#T 9&9I;&4N<F5A9%-T<FEN9RAD9FEL92YS:7IE

M9FEL92!N;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( 

`
end
Dec 18 2004
next sibling parent "Matthew" <admin.hat stlsoft.dot.org> writes:
Excellent! I shall be checking this out in the new year.

:-)

Matthew

"James Dunne" <jdunne4 bradley.edu> wrote in message
news:cq0t39$18b8$1 digitaldaemon.com...
 Hello all,

 I thought as a nice Christmas present for you all working so hard on D, I would
 contribute something some of you might find useful.  I've been working hard on
a
 lexer (tokenizer) for the D language.  Attached to this post is the lexer
module
 written in D!!

 I began work on it for code-completion support for my D IDE called Orion (over
 on dsource.org).  Don't bother checking anything out there yet, as its all in
 ruins right now. ;)

 I tested this module somewhat, and it successfully lexes its own source code!
 This module could be useful for a few things, like:

 + code-completion database for D modules
 + generating CTAGS for the D language
 + indent-like program for D

 ..and any other D source code tools you can think of.

 Merry Christmas all, enjoy!

 Regards,
 James Dunne
 
Dec 18 2004
prev sibling next sibling parent "Ivan Senji" <ivan.senji public.srce.hr> writes:
"James Dunne" <jdunne4 bradley.edu> wrote in message
news:cq0t39$18b8$1 digitaldaemon.com...
 Hello all,

 I thought as a nice Christmas present for you all working so hard on D, I
would
 contribute something some of you might find useful.  I've been working
hard on a
 lexer (tokenizer) for the D language.  Attached to this post is the lexer
module
 written in D!!
Thanks! This is just what of my projects needs. It looks great and looks like it isn't going to be hard to use. You scared me for a moment when i saw TOKdotvar ,TOKdotti, TOKdotexp, and TOKdottype but you don't seem to use them :)
 I began work on it for code-completion support for my D IDE called Orion
(over
 on dsource.org).  Don't bother checking anything out there yet, as its all
in
 ruins right now. ;)

 I tested this module somewhat, and it successfully lexes its own source
code!
 This module could be useful for a few things, like:

 + code-completion database for D modules
 + generating CTAGS for the D language
 + indent-like program for D

 ..and any other D source code tools you can think of.
hooray!
 Merry Christmas all, enjoy!
To you too!
 Regards,
 James Dunne
Dec 18 2004
prev sibling next sibling parent reply James Dunne <jdunne4 bradley.edu> writes:
I have updated the dlexer.d module, so please use this version.

New features:
- line number tracking (line property of DLexer class)
- DLexerException class: constructs error message containing filename and
current line number
- independent module now
- more comments! :)

TODO:
- correct wysiwyg string parsing
- correct hex string parsing
- correct numeric literal parsing (ints, floats, etc.)

I'm glad I could help you all in your project endeavours!  If anyone has some
extra webspace that they wouldn't mind hosting D code snippets on, please let me
know!  I've got a bunch of useful ones :)

Regards,
James Dunne
begin 0644 dlexer.d
M+R\ 9&QE>&5R("T 1"!L86YG=6%G92!L97AE< T*+R\ *$,I($-O<'ER:6=H

M92!T;R!D:7-T<FEB=71E('1H:7, ;6]D=6QE(&EN(&%N>2!F;W)M('EO=2!L
M:6ME+B` 22!O;FQY(&%S:R!T:&%T('EO=0T*+R\ 9VEV92!C<F5D:70 =VAE
M<F4 8W)E9&ET(&ES(&1U92X (%EO=2!M87D ;6%K92!M;V1I9FEC871I;VYS

M<F]V:61E('EO=7( ;6]D:69I8V%T:6]N<R!P=6)L:6-L>2P 8G5T('EO=2!A

M"7-T9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T
M>7!E.PH-"B\O(%-E="!T:&ES('9E<G-I;VX :61E;G1I9FEE<B!T;R!E;F%B
M;&4 :6YT97)P<F5T871I;VX ;V8 97-C87!E9"!C:&%R86-T97)S('=I=&AI
M;B!P87)S960 <W1R:6YG<PT*+R\ 268 =&AI<R!I<R!D:7-A8FQE9"P =&AE
M('-T<FEN9W, 87)E(&-O<&EE9"!D:7)E8W1L>2P 97-C87!E('-E<75E;F-E


M(&9R;VT 1$U$)W, ;&5X97(N:`IE;G5M(%1/2R![" E43TMR97-E<G9E9"P*
M" DO+R!/=&AE< H)5$]+;'!A<F5N+`E43TMR<&%R96XL" E43TML8G)A8VME
M="P)5$]+<F)R86-K970L" E43TML8W5R;'DL"51/2W)C=7)L>2P*"51/2V-O
M;&]N+`E43TMN96<L" E43TMS96UI8V]L;VXL"51/2V1O=&1O=&1O="P*"51/
M2V5O9BP)"51/2V-A<W0L" E43TMN=6QL+`E43TMA<W-E<G0L" E43TMT<G5E
M+`E43TMF86QS92P*"51/2V%R<F%Y+`E43TMC86QL+`H)5$]+861D<F5S<RP)
M5$]+='EP961O="P*"51/2W1Y<&4L"51/2W1H<F]W+`H)5$]+;F5W+`D)5$]+
M9&5L971E+`H)5$]+<W1A<BP)5$]+<WEM;V9F+`H)5$]+=F%R+`D)5$]+9&]T
M=F%R+`H)5$]+9&]T=&DL"51/2V1O=&5X<"P*"51/2V1O='1Y<&4L"51/2W-L
M:6-E+`H)5$]+87)R87EL96YG=& L"51/2W9E<G-I;VXL" E43TMM;V1U;&4L
M"51/2V1O;&QA<BP*"51/2W1E;7!L871E+`E43TMI;G-T86YC92P*"51/2V1E
M8VQA<F%T:6]N+`E43TMT>7!E;V8L" E43TMP<F%G;6$L"51/2V1S>6UB;VPL
M" E43TMT>7!E:60L"51/2W5A9&0L" H)+R\ 3W!E<F%T;W)S" E43TML="P)
M"51/2V=T+`H)5$]+;&4L"0E43TMG92P*"51/2V5Q=6%L+`E43TMN;W1E<75A
M;"P*"51/2VED96YT:71Y+`E43TMN;W1I9&5N=&ET>2P*"51/2VEN9&5X+`H*

M(#P^("` (#P^/2` ("`A/B` ("` (3X]("` (3P ("` ("$\/2` ("$\/ H)
M5$]+=6YO<F0L5$]+;&<L5$]+;&5G+%1/2W5L92Q43TMU;"Q43TMU9V4L5$]+
M=6<L5$]+=64L" H)5$]+<VAL+`D)5$]+<VAR+`H)5$]+<VAL87-S+`E43TMS
M:')A<W,L" E43TMU<VAR+`E43TMU<VAR87-S+`H)5$]+8V%T+`D)5$]+8V%T
M87-S+`DO+R!^('X]" E43TMA9&0L"0E43TMM:6XL"0E43TMA9&1A<W,L"51/
M2VUI;F%S<RP*"51/2VUU;"P)"51/2V1I=BP)"51/2VUO9"P*"51/2VUU;&%S
M<RP)5$]+9&EV87-S+`E43TMM;V1A<W,L" E43TMA;F0L"0E43TMO<BP)"51/
M2WAO<BP*"51/2V%N9&%S<RP)5$]+;W)A<W,L"51/2WAO<F%S<RP*"51/2V%S
M<VEG;BP)5$]+;F]T+`D)5$]+=&EL9&4L" E43TMP;'5S<&QU<RP)5$]+;6EN
M=7-M:6YU<RP*"51/2V1O="P)"51/2V%R<F]W+`E43TMC;VUM82P*"51/2W%U
M97-T:6]N+`E43TMA;F1A;F0L"51/2V]R;W(L" H)+R\ 3G5M97)I8R!L:71E
M<F%L<PH)5$]+:6YT,S)V+"!43TMU;G,S,G8L" E43TMI;G0V-'8L(%1/2W5N

M" E43TMI;6%G:6YA<GDS,G8L(%1/2VEM86=I;F%R>38T=BP 5$]+:6UA9VEN

M87)V+"!43TMD8VAA<G8L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2VED96YT
M:69I97(L"51/2W-T<FEN9RP*"51/2W1H:7,L"51/2W-U<&5R+`H*"2\O($)A
M<VEC('1Y<&5S" E43TMV;VED+`H)5$]+:6YT."P 5$]+=6YS."P*"51/2VEN

M+"!43TMU;G,V-"P*"51/2V9L;V%T,S(L(%1/2V9L;V%T-C0L(%1/2V9L;V%T


M97 X,"P*"51/2V-H87(L(%1/2W=C:&%R+"!43TMD8VAA<BP 5$]+8FET+`H*
M"2\O($%G9W)E9V%T97,*"51/2W-T<G5C="P 5$]+8VQA<W,L(%1/2VEN=&5R
M9F%C92P 5$]+=6YI;VXL(%1/2V5N=6TL(%1/2VEM<&]R="P*"51/2W1Y<&5D
M968L(%1/2V%L:6%S+"!43TMO=F5R<FED92P 5$]+9&5L96=A=&4L(%1/2V9U
M;F-T:6]N+`H)5$]+;6EX:6XL" H)5$]+86QI9VXL(%1/2V5X=&5R;BP 5$]+
M<')I=F%T92P 5$]+<')O=&5C=&5D+"!43TMP=6)L:6,L(%1/2V5X<&]R="P*
M"51/2W-T871I8RP +RI43TMV:7)T=6%L+"HO(%1/2V9I;F%L+"!43TMC;VYS
M="P 5$]+86)S=')A8W0L(%1/2W9O;&%T:6QE+`H)5$]+9&5B=6<L(%1/2V1E
M<')E8V%T960L(%1/2VEN+"!43TMO=70L(%1/2VEN;W5T+`H)5$]+875T;RP 
M5$]+<&%C:V%G92P*" DO+R!3=&%T96UE;G1S" E43TMI9BP 5$]+96QS92P 
M5$]+=VAI;&4L(%1/2V9O<BP 5$]+9&\L(%1/2W-W:71C:"P*"51/2V-A<V4L
M(%1/2V1E9F%U;'0L(%1/2V)R96%K+"!43TMC;VYT:6YU92P 5$]+=VET:"P*
M"51/2W-Y;F-H<F]N:7IE9"P 5$]+<F5T=7)N+"!43TMG;W1O+"!43TMT<GDL
M(%1/2V-A=&-H+"!43TMF:6YA;&QY+`H)5$]+87-M+"!43TMF;W)E86-H+`H*
M"2\O($-O;G1R86-T<PH)5$]+8F]D>2P 5$]+:6YV87)I86YT+`H*"2\O(%1E
M<W1I;F<*"51/2W5N:71T97-T+`I]" T*+R\ 02!T86)L92!C;VYV97)T:6YG
M('1O:V5N('9A;'5E<R!I;G1O('-T<FEN9R!R97!R97-E;G1A=&EO;G,Z"F-H
M87);70ET;VMT;W-T<EM43TLN;6%X*S%=(#T 6PH)5$]++E1/2W)E<V5R=F5D
M(#H (G)E<V5R=F5D(BP*" DO+R!/=&AE< H)5$]++E1/2VQP87)E;B`Z("(H
M(BP*"51/2RY43TMR<&%R96X .B`B*2(L" E43TLN5$]+;&)R86-K970 .B`B
M6R(L" E43TLN5$]+<F)R86-K970 .B`B72(L" E43TLN5$]+;&-U<FQY(#H 
M(GLB+`H)5$]++E1/2W)C=7)L>2`Z(")](BP*"51/2RY43TMC;VQO;B`Z("(Z
M(BP*"51/2RY43TMN96< .B`B+2(L" E43TLN5$]+<V5M:6-O;&]N(#H (CLB
M+`H)5$]++E1/2V1O=&1O=&1O="`Z("(N+BXB+`H)5$]++E1/2V5O9B`Z(")%
M3T8B+`H)5$]++E1/2V-A<W0 .B`B8V%S="(L" E43TLN5$]+;G5L;"`Z(")N
M=6QL(BP*"51/2RY43TMA<W-E<G0 .B`B87-S97)T(BP*"51/2RY43TMT<G5E
M(#H (G1R=64B+`H)5$]++E1/2V9A;'-E(#H (F9A;'-E(BP*"51/2RY43TMA
M<G)A>2`Z(");72(L" E43TLN5$]+8V%L;"`Z(")C86QL(BP*"51/2RY43TMA
M9&1R97-S(#H (B,B+`H)5$]++E1/2W1Y<&5D;W0 .B`B='EP961O="(L" E4
M3TLN5$]+='EP92`Z(")T>7!E(BP*"51/2RY43TMT:')O=R`Z(")T:')O=R(L
M" E43TLN5$]+;F5W(#H (FYE=R(L" E43TLN5$]+9&5L971E(#H (F1E;&5T
M92(L" E43TLN5$]+<W1A<B`Z("(J(BP*"51/2RY43TMS>6UO9F8 .B`B<WEM
M;V9F(BP*"51/2RY43TMV87( .B`B=F%R(BP*"51/2RY43TMD;W1V87( .B`B
M9&]T=F%R(BP*"51/2RY43TMD;W1T:2`Z(")D;W1T:2(L" E43TLN5$]+9&]T
M97AP(#H (F1O=&5X<"(L" E43TLN5$]+9&]T='EP92`Z(")D;W1T>7!E(BP*
M"51/2RY43TMS;&EC92`Z("(N+B(L" E43TLN5$]+87)R87EL96YG=&  .B`B
M87)R87EL96YG=& B+`H)5$]++E1/2W9E<G-I;VX .B`B=F5R<VEO;B(L" E4
M3TLN5$]+;6]D=6QE(#H (FUO9'5L92(L" E43TLN5$]+9&]L;&%R(#H (B0B
M+`H)5$]++E1/2W1E;7!L871E(#H (G1E;7!L871E(BP*"51/2RY43TMI;G-T
M86YC92`Z(")I;G-T86YC92(L" E43TLN5$]+9&5C;&%R871I;VX .B`B9&5C
M;&%R871I;VXB+`H)5$]++E1/2W1Y<&5O9B`Z(")T>7!E;V8B+`H)5$]++E1/
M2W!R86=M82`Z(")P<F%G;6$B+`H)5$]++E1/2V1S>6UB;VP .B`B9'-Y;6)O
M;"(L" E43TLN5$]+='EP96ED(#H (G1Y<&5I9"(L" E43TLN5$]+=6%D9"`Z
M(")U861D(BP*" DO+R!/<&5R871O<G,*"51/2RY43TML="`Z("(\(BP*"51/
M2RY43TMG="`Z("(^(BP*"51/2RY43TML92`Z("(\/2(L" E43TLN5$]+9V4 
M.B`B/CTB+`H)5$]++E1/2V5Q=6%L(#H (CT](BP*"51/2RY43TMN;W1E<75A
M;"`Z("(A/2(L" E43TLN5$]+:61E;G1I='D .B`B/3T](BP*"51/2RY43TMN
M;W1I9&5N=&ET>2`Z("(A/3TB+`H)5$]++E1/2VEN9&5X(#H (EM=(BP*" DO
M+R!.0T5'(&9L;V%T:6YG('!O:6YT(&-O;7!A<F5S" DO+R`A/#X]("` ("`\
M/B` ("`\/CT ("` (3X ("` ("$^/2` ("$\("` ("`A/#T ("`A/#X-" D-
M" DO+R!.3U1%.B` 5&AE<V4 8V]U;&0 8F4 :&]R<FEB;'D =W)O;F<*"51/
M2RY43TMU;F]R9"`Z("(A/#X](BP*"51/2RY43TMU92`Z("(A/#XB+`H)5$]+
M+E1/2VQG(#H (CP^(BP*"51/2RY43TML96< .B`B/#X](BP*"51/2RY43TMU
M;&4 .B`B(3XB+`H)5$]++E1/2W5L(#H (B$^/2(L" E43TLN5$]+=6=E(#H 
M(B$\(BP*"51/2RY43TMU9R`Z("(A/#TB+`H*"51/2RY43TMS:&P .B`B/#PB
M+`H)5$]++E1/2W-H<B`Z("(^/B(L" E43TLN5$]+<VAL87-S(#H (CP\/2(L
M" E43TLN5$]+<VAR87-S(#H (CX^/2(L" E43TLN5$]+=7-H<B`Z("(^/CXB
M+`H)5$]++E1/2W5S:')A<W, .B`B/CX^/2(L" E43TLN5$]+8V%T(#H (GXB
M+`H)5$]++E1/2V-A=&%S<R`Z(")^/2(L"2\O('X ?CT*"51/2RY43TMA9&0 
M.B`B*R(L" E43TLN5$]+;6EN(#H (BTB+`H)5$]++E1/2V%D9&%S<R`Z("(K
M/2(L" E43TLN5$]+;6EN87-S(#H (BT](BP*"51/2RY43TMM=6P .B`B*B(L
M" E43TLN5$]+9&EV(#H (B\B+`H)5$]++E1/2VUO9"`Z("(E(BP*"51/2RY4
M3TMM=6QA<W, .B`B*CTB+`H)5$]++E1/2V1I=F%S<R`Z("(O/2(L" E43TLN
M5$]+;6]D87-S(#H (B4](BP*"51/2RY43TMA;F0 .B`B)B(L" E43TLN5$]+
M;W( .B`B?"(L" E43TLN5$]+>&]R(#H (EXB+`H)5$]++E1/2V%N9&%S<R`Z
M("(F/2(L" E43TLN5$]+;W)A<W, .B`B?#TB+`H)5$]++E1/2WAO<F%S<R`Z
M(")>/2(L" E43TLN5$]+87-S:6=N(#H (CTB+`H)5$]++E1/2VYO="`Z("(A
M(BP*"51/2RY43TMT:6QD92`Z(")^(BP*"51/2RY43TMP;'5S<&QU<R`Z("(K
M*R(L" E43TLN5$]+;6EN=7-M:6YU<R`Z("(M+2(L" E43TLN5$]+9&]T(#H 
M(BXB+`H)5$]++E1/2V%R<F]W(#H (BT^(BP*"51/2RY43TMC;VUM82`Z("(L
M(BP*"51/2RY43TMQ=65S=&EO;B`Z("(_(BP*"51/2RY43TMA;F1A;F0 .B`B
M)B8B+`H)5$]++E1/2V]R;W( .B`B?'PB+`H*"2\O($YU;65R:6, ;&ET97)A
M;',*"51/2RY43TMI;G0S,G8 .B`B:6YT,S)V(BP 5$]++E1/2W5N<S,R=B`Z

M=6YS-C1V(#H (G5N<S8T=B(L" E43TLN5$]+9FQO870S,G8 .B`B9FQO870S
M,G8B+"!43TLN5$]+9FQO870V-'8 .B`B9FQO870V-'8B+"!43TLN5$]+9FQO
M870X,'8 .B`B9FQO870X,'8B+`H)5$]++E1/2VEM86=I;F%R>3,R=B`Z(")I
M;6%G:6YA<GDS,G8B+"!43TLN5$]+:6UA9VEN87)Y-C1V(#H (FEM86=I;F%R


M5$]++E1/2W=C:&%R=B`Z(")W8VAA<G8B+"!43TLN5$]+9&-H87)V(#H (F1C
M:&%R=B(L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2RY43TMI9&5N=&EF:65R
M(#H (FED96YT:69I97(B+`E43TLN5$]+<W1R:6YG(#H (G-T<FEN9R(L" E4
M3TLN5$]+=&AI<R`Z(")T:&ES(BP)5$]++E1/2W-U<&5R(#H (G-U<&5R(BP*
M" DO+R!"87-I8R!T>7!E<PH)5$]++E1/2W9O:60 .B`B=F]I9"(L" E43TLN
M5$]+:6YT."`Z(")B>71E(BP 5$]++E1/2W5N<S  .B`B=6)Y=&4B+`H)5$]+

M" E43TLN5$]+:6YT,S( .B`B:6YT(BP 5$]++E1/2W5N<S,R(#H (G5I;G0B

M;F<B+`H)5$]++E1/2V9L;V%T,S( .B`B9FQO870B+"!43TLN5$]+9FQO870V
M-"`Z(")D;W5B;&4B+"!43TLN5$]+9FQO870X,"`Z(")R96%L(BP*"51/2RY4
M3TMI;6%G:6YA<GDS,B`Z(")I9FQO870B+"!43TLN5$]+:6UA9VEN87)Y-C0 
M.B`B:61O=6)L92(L(%1/2RY43TMI;6%G:6YA<GDX,"`Z(")I<F5A;"(L" E4


M+E1/2V-H87( .B`B8VAA<B(L(%1/2RY43TMW8VAA<B`Z(")W8VAA<B(L(%1/
M2RY43TMD8VAA<B`Z(")D8VAA<B(L(%1/2RY43TMB:70 .B`B8FET(BP*" DO
M+R!!9V=R96=A=&5S" E43TLN5$]+<W1R=6-T(#H (G-T<G5C="(L(%1/2RY4
M3TMC;&%S<R`Z(")C;&%S<R(L(%1/2RY43TMI;G1E<F9A8V4 .B`B:6YT97)F
M86-E(BP 5$]++E1/2W5N:6]N(#H (G5N:6]N(BP 5$]++E1/2V5N=6T .B`B
M96YU;2(L(%1/2RY43TMI;7!O<G0 .B`B:6UP;W)T(BP*"51/2RY43TMT>7!E
M9&5F(#H (G1Y<&5D968B+"!43TLN5$]+86QI87, .B`B86QI87,B+"!43TLN
M5$]+;W9E<G)I9&4 .B`B;W9E<G)I9&4B+"!43TLN5$]+9&5L96=A=&4 .B`B
M9&5L96=A=&4B+"!43TLN5$]+9G5N8W1I;VX .B`B9G5N8W1I;VXB+`H)5$]+
M+E1/2VUI>&EN(#H (FUI>&EN(BP*" E43TLN5$]+86QI9VX .B`B86QI9VXB
M+"!43TLN5$]+97AT97)N(#H (F5X=&5R;B(L(%1/2RY43TMP<FEV871E(#H 
M(G!R:79A=&4B+"!43TLN5$]+<')O=&5C=&5D(#H (G!R;W1E8W1E9"(L(%1/
M2RY43TMP=6)L:6, .B`B<'5B;&EC(BP 5$]++E1/2V5X<&]R="`Z(")E>'!O
M<G0B+`H)5$]++E1/2W-T871I8R`Z(")S=&%T:6,B+"`O*E1/2RY43TMV:7)T
M=6%L(#H (G9I<G1U86PB+"HO(%1/2RY43TMF:6YA;"`Z(")F:6YA;"(L(%1/
M2RY43TMC;VYS="`Z(")C;VYS="(L(%1/2RY43TMA8G-T<F%C="`Z(")A8G-T
M<F%C="(L(%1/2RY43TMV;VQA=&EL92`Z(")V;VQA=&EL92(L" E43TLN5$]+
M9&5B=6< .B`B9&5B=6<B+"!43TLN5$]+9&5P<F5C871E9"`Z(")D97!R96-A
M=&5D(BP 5$]++E1/2VEN(#H (FEN(BP 5$]++E1/2V]U="`Z(")O=70B+"!4
M3TLN5$]+:6YO=70 .B`B:6YO=70B+`H)5$]++E1/2V%U=&\ .B`B875T;R(L
M(%1/2RY43TMP86-K86=E(#H (G!A8VMA9V4B+`H*"2\O(%-T871E;65N=',*
M"51/2RY43TMI9B`Z(")I9B(L(%1/2RY43TME;'-E(#H (F5L<V4B+"!43TLN
M5$]+=VAI;&4 .B`B=VAI;&4B+"!43TLN5$]+9F]R(#H (F9O<B(L(%1/2RY4
M3TMD;R`Z(")D;R(L(%1/2RY43TMS=VET8V  .B`B<W=I=&-H(BP*"51/2RY4
M3TMC87-E(#H (F-A<V4B+"!43TLN5$]+9&5F875L="`Z(")D969A=6QT(BP 
M5$]++E1/2V)R96%K(#H (F)R96%K(BP 5$]++E1/2V-O;G1I;G5E(#H (F-O
M;G1I;G5E(BP 5$]++E1/2W=I=&  .B`B=VET:"(L" E43TLN5$]+<WEN8VAR
M;VYI>F5D(#H (G-Y;F-H<F]N:7IE9"(L(%1/2RY43TMR971U<FX .B`B<F5T
M=7)N(BP 5$]++E1/2V=O=&\ .B`B9V]T;R(L(%1/2RY43TMT<GD .B`B=')Y
M(BP 5$]++E1/2V-A=&-H(#H (F-A=&-H(BP 5$]++E1/2V9I;F%L;'D .B`B
M9FEN86QL>2(L" E43TLN5$]+87-M(#H (F%S;2(L(%1/2RY43TMF;W)E86-H
M(#H (F9O<F5A8V B+`H*"2\O($-O;G1R86-T<PH)5$]++E1/2V)O9'D .B`B
M8F]D>2(L(%1/2RY43TMI;G9A<FEA;G0 .B`B:6YV87)I86YT(BP*" DO+R!4
M97-T:6YG" E43TLN5$]+=6YI='1E<W0 .B`B=6YI='1E<W0B+`I=.PH*+R\ 
M02!L86YG=6%G92!T;VME;CH*<W1R=6-T(%1O:V5N('L-" DO+R!4:&4 :61E
M;G1I9FEE<B!O<B!V86QU92!O9B!T:&4 =&]K96XZ" EC:&%R6UT):61E;G0[

M17AC97!T:6]N('1H<F]W;B!D=7)I;F< <&%R<VEN9R!O9B!$(&QA;F=U86=E
M. IC;&%S<R!$3&5X97)%>&-E<'1I;VX .B!%<G)O<B![" EP=6)L:6,Z" D)

M8W0 86X 97)R;W( ;65S<V%G92!W:71H('1H92!F:6QE;F%M92!A;F0 ;&EN
M92!N=6UB97(Z" D)"7-U<&5R*&1L>"YF:6QE;F%M92!^("(H(B!^(&9O<FUA
M=" B)60B+"!D;' N;&EN92D ?B`B*2( ?B`B.B`B('X ;7-G*3L*"0E]"GT*
M"B\O(%1H92!$(&QA;F=U86=E(&QE>&5R("AT;VME;FEZ97(I. IC;&%S<R!$
M3&5X97( >PH)"7-T871I8R!43TM;8VAA<EM=70EK97EW;W)D<SL*"0DO+R!)
M;FET:6%L:7IE('1H92!K97EW;W)D+3YT;VME;G9A;'5E($%!. H)"7-T871I
M8R!T:&ES*"D >PH)"0DO+R!!9&0 86QL('1H92!K97EW;W)D<R< =F%L=65S
M(&EN=&\ =&AE($%!. H)"0EK97EW;W)D<ULB=&AI<R)=(#T 5$]++E1/2W1H
M:7,[" D)"6ME>7=O<F1S6R)S=7!E<B)=(#T 5$]++E1/2W-U<&5R.PH)"0EK
M97EW;W)D<ULB87-S97)T(ET /2!43TLN5$]+87-S97)T.PH)"0EK97EW;W)D
M<ULB;G5L;")=(#T 5$]++E1/2VYU;&P[" D)"6ME>7=O<F1S6R)T<G5E(ET 
M/2!43TLN5$]+=')U93L*"0D):V5Y=V]R9'-;(F9A;'-E(ET /2!43TLN5$]+
M9F%L<V4[" D)"6ME>7=O<F1S6R)C87-T(ET /2!43TLN5$]+8V%S=#L*"0D)
M:V5Y=V]R9'-;(FYE=R)=(#T 5$]++E1/2VYE=SL*"0D):V5Y=V]R9'-;(F1E
M;&5T92)=(#T 5$]++E1/2V1E;&5T93L*"0D):V5Y=V]R9'-;(G1H<F]W(ET 
M/2!43TLN5$]+=&AR;W<[" D)"6ME>7=O<F1S6R)M;V1U;&4B72`](%1/2RY4
M3TMM;V1U;&4[" D)"6ME>7=O<F1S6R)P<F%G;6$B72`](%1/2RY43TMP<F%G
M;6$[" D)"6ME>7=O<F1S6R)T>7!E;V8B72`](%1/2RY43TMT>7!E;V8[" D)
M"6ME>7=O<F1S6R)T>7!E:60B72`](%1/2RY43TMT>7!E:60[" H)"0EK97EW
M;W)D<ULB=&5M<&QA=&4B72`](%1/2RY43TMT96UP;&%T93L*"0D):V5Y=V]R
M9'-;(FEN<W1A;F-E(ET /2!43TLN5$]+:6YS=&%N8V4[" H)"0EK97EW;W)D
M<ULB=F]I9")=(#T 5$]++E1/2W9O:60[" D)"6ME>7=O<F1S6R)B>71E(ET 
M/2!43TLN5$]+:6YT.#L*"0D):V5Y=V]R9'-;(G5B>71E(ET /2!43TLN5$]+
M=6YS.#L*"0D):V5Y=V]R9'-;(G-H;W)T(ET /2!43TLN5$]+:6YT,38[" D)
M"6ME>7=O<F1S6R)U<VAO<G0B72`](%1/2RY43TMU;G,Q-CL*"0D):V5Y=V]R
M9'-;(FEN=")=(#T
M(#T 5$]++E1/2W5N<S,R.PH)"0EK97EW;W)D<ULB;&]N9R)=(#T 5$]++E1/

M"0D):V5Y=V]R9'-;(F9L;V%T(ET /2!43TLN5$]+9FQO870S,CL*"0D):V5Y
M=V]R9'-;(F1O=6)L92)=(#T 5$]++E1/2V9L;V%T-C0[" D)"6ME>7=O<F1S
M6R)R96%L(ET /2!43TLN5$]+9FQO870X,#L*" D)"6ME>7=O<F1S6R)B:70B
M72`](%1/2RY43TMB:70[" D)"6ME>7=O<F1S6R)C:&%R(ET /2!43TLN5$]+
M8VAA<CL*"0D):V5Y=V]R9'-;(G=C:&%R(ET /2!43TLN5$]+=V-H87([" D)
M"6ME>7=O<F1S6R)D8VAA<B)=(#T 5$]++E1/2V1C:&%R.PH*"0D):V5Y=V]R
M9'-;(FEF;&]A=")=(#T 5$]++E1/2VEM86=I;F%R>3,R.PH)"0EK97EW;W)D
M<ULB:61O=6)L92)=(#T 5$]++E1/2VEM86=I;F%R>38T.PH)"0EK97EW;W)D
M<ULB:7)E86PB72`](%1/2RY43TMI;6%G:6YA<GDX,#L*" D)"6ME>7=O<F1S
M6R)C9FQO870B72`](%1/2RY43TMC;VUP;&5X,S([" D)"6ME>7=O<F1S6R)C


M=&4B72`](%1/2RY43TMD96QE9V%T93L*"0D):V5Y=V]R9'-;(F9U;F-T:6]N
M(ET /2!43TLN5$]+9G5N8W1I;VX[" H)"0EK97EW;W)D<ULB:7,B72`](%1/
M2RY43TMI9&5N=&ET>3L*"0D):V5Y=V]R9'-;(FEF(ET /2!43TLN5$]+:68[
M" D)"6ME>7=O<F1S6R)E;'-E(ET /2!43TLN5$]+96QS93L*"0D):V5Y=V]R
M9'-;(G=H:6QE(ET /2!43TLN5$]+=VAI;&4[" D)"6ME>7=O<F1S6R)F;W(B
M72`](%1/2RY43TMF;W([" D)"6ME>7=O<F1S6R)D;R)=(#T 5$]++E1/2V1O
M.PH)"0EK97EW;W)D<ULB<W=I=&-H(ET /2!43TLN5$]+<W=I=&-H.PH)"0EK
M97EW;W)D<ULB8V%S92)=(#T 5$]++E1/2V-A<V4[" D)"6ME>7=O<F1S6R)D
M969A=6QT(ET /2!43TLN5$]+9&5F875L=#L*"0D):V5Y=V]R9'-;(F)R96%K
M(ET /2!43TLN5$]+8G)E86L[" D)"6ME>7=O<F1S6R)C;VYT:6YU92)=(#T 
M5$]++E1/2V-O;G1I;G5E.PH)"0EK97EW;W)D<ULB<WEN8VAR;VYI>F5D(ET 
M/2!43TLN5$]+<WEN8VAR;VYI>F5D.PH)"0EK97EW;W)D<ULB<F5T=7)N(ET 
M/2!43TLN5$]+<F5T=7)N.PH)"0EK97EW;W)D<ULB9V]T;R)=(#T 5$]++E1/
M2V=O=&\[" D)"6ME>7=O<F1S6R)T<GDB72`](%1/2RY43TMT<GD[" D)"6ME
M>7=O<F1S6R)C871C:")=(#T 5$]++E1/2V-A=&-H.PH)"0EK97EW;W)D<ULB
M9FEN86QL>2)=(#T 5$]++E1/2V9I;F%L;'D[" D)"6ME>7=O<F1S6R)W:71H
M(ET /2!43TLN5$]+=VET:#L*"0D):V5Y=V]R9'-;(F%S;2)=(#T 5$]++E1/
M2V%S;3L*"0D):V5Y=V]R9'-;(F9O<F5A8V B72`](%1/2RY43TMF;W)E86-H
M.PH*"0D):V5Y=V]R9'-;(G-T<G5C=")=(#T 5$]++E1/2W-T<G5C=#L*"0D)
M:V5Y=V]R9'-;(F-L87-S(ET /2!43TLN5$]+8VQA<W,[" D)"6ME>7=O<F1S
M6R)I;G1E<F9A8V4B72`](%1/2RY43TMI;G1E<F9A8V4[" D)"6ME>7=O<F1S
M6R)U;FEO;B)=(#T 5$]++E1/2W5N:6]N.PH)"0EK97EW;W)D<ULB96YU;2)=
M(#T 5$]++E1/2V5N=6T[" D)"6ME>7=O<F1S6R)I;7!O<G0B72`](%1/2RY4
M3TMI;7!O<G0[" D)"6ME>7=O<F1S6R)M:7AI;B)=(#T 5$]++E1/2VUI>&EN
M.PH)"0EK97EW;W)D<ULB<W1A=&EC(ET /2!43TLN5$]+<W1A=&EC.PH)"0DO
M*FME>7=O<F1S6R)V:7)T=6%L(ET /2!43TLN5$]+=FER='5A;#LJ+PH)"0EK
M97EW;W)D<ULB9FEN86PB72`](%1/2RY43TMF:6YA;#L*"0D):V5Y=V]R9'-;
M(F-O;G-T(ET /2!43TLN5$]+8V]N<W0[" D)"6ME>7=O<F1S6R)T>7!E9&5F
M(ET /2!43TLN5$]+='EP961E9CL*"0D):V5Y=V]R9'-;(F%L:6%S(ET /2!4
M3TLN5$]+86QI87,[" D)"6ME>7=O<F1S6R)O=F5R<FED92)=(#T 5$]++E1/
M2V]V97)R:61E.PH)"0EK97EW;W)D<ULB86)S=')A8W0B72`](%1/2RY43TMA
M8G-T<F%C=#L*"0D):V5Y=V]R9'-;(G9O;&%T:6QE(ET /2!43TLN5$]+=F]L
M871I;&4[" D)"6ME>7=O<F1S6R)D96)U9R)=(#T 5$]++E1/2V1E8G5G.PH)
M"0EK97EW;W)D<ULB9&5P<F5C871E9")=(#T 5$]++E1/2V1E<')E8V%T960[
M" D)"6ME>7=O<F1S6R)I;B)=(#T 5$]++E1/2VEN.PH)"0EK97EW;W)D<ULB
M;W5T(ET /2!43TLN5$]+;W5T.PH)"0EK97EW;W)D<ULB:6YO=70B72`](%1/
M2RY43TMI;F]U=#L*"0D):V5Y=V]R9'-;(F%U=&\B72`](%1/2RY43TMA=71O
M.PH*"0D):V5Y=V]R9'-;(F%L:6=N(ET /2!43TLN5$]+86QI9VX[" D)"6ME
M>7=O<F1S6R)E>'1E<FXB72`](%1/2RY43TME>'1E<FX[" D)"6ME>7=O<F1S
M6R)P<FEV871E(ET /2!43TLN5$]+<')I=F%T93L*"0D):V5Y=V]R9'-;(G!A
M8VMA9V4B72`](%1/2RY43TMP86-K86=E.PH)"0EK97EW;W)D<ULB<')O=&5C
M=&5D(ET /2!43TLN5$]+<')O=&5C=&5D.PH)"0EK97EW;W)D<ULB<'5B;&EC
M(ET /2!43TLN5$]+<'5B;&EC.PH)"0EK97EW;W)D<ULB97AP;W)T(ET /2!4
M3TLN5$]+97AP;W)T.PH*"0D):V5Y=V]R9'-;(F)O9'DB72`](%1/2RY43TMB
M;V1Y.PH)"0EK97EW;W)D<ULB:6YV87)I86YT(ET /2!43TLN5$]+:6YV87)I
M86YT.PH)"0EK97EW;W)D<ULB=6YI='1E<W0B72`](%1/2RY43TMU;FET=&5S
M=#L*"0D):V5Y=V]R9'-;(G9E<G-I;VXB72`](%1/2RY43TMV97)S:6]N.PH)
M"7T*" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\ 5&AE(&EN<'5T(&9I
M;&4*"0EU:6YT"7`["0D)+R\ 0W5R<F5N="!C:&%R86-T97(*" D)+R\ 5$]$
M3SH*"0EC:&%R6UT)=WES:7=Y9U-T<FEN9R I('L*"0D)<F5T=7)N(&YU;&P[
M" D)?0H*"0DO+R!43T1/. H)"6-H87);70EH97A3=')I;F<H*2![" D)"7)E
M='5R;B!N=6QL.PH)"7T*" EP=6)L:6,Z" D)8VAA<EM="69I;&5N86UE.PDO
M+R!&:6QE;F%M90H)"75I;G0);&EN93L)"2\O($-U<G)E;G0 ;&EN90H*"0DO
M+R!);FET:6%L:7IE('1H92!L97AE<B!W:71H('1H92!F=6QL('-O=7)C92!C
M;V1E(&%S(&$ <W1R:6YG. H)"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R
M6UT <W)C*2![" D)"69I;&4 /2!S<F,[" D)"71H:7,N9FEL96YA;64 /2!F

M<R!F=6YC=&EO;B!C;VYS=6UE<R!A(&9U;&P 1"!L86YG=6%G92!T;VME;B!A
M;F0 <F5T=7)N<R!I="!I;B!T:&4 <W1R=6-T=7)E(%1O:V5N. H)"2\O(&YU
M;&P :7, <F5T=7)N960 :68 =&AE(&5N9"!O9B!T:&4 9FEL92!I<R!R96%C
M:&5D+ H)"51O:V5N* EN97AT5&]K96XH*2![" D)"51O:V5N* ER971T;VL 
M/2!N97< 5&]K96X[" D)"75I;G0)<W1A<G0[" H)"0ER971T;VLN:61E;G0 
M/2!N=6QL.PH)"0ER971T;VLN=&]K96X /2!43TLN5$]+:61E;G1I9FEE<CL*
M" D)"2\O(%!A<W0 =&AE(&5N9"!O9B!F:6QE/R!2971U<FX 82!N=6QL('1O
M:V5N. H)"0EI9B`H<"`^/2!F:6QE+FQE;F=T:"D <F5T=7)N(&YU;&P[" H)
M"0DO+R!296%D('5P('1O('1H92!N97AT('=H:71E+7-P86-E(&-H87(Z" D)
M"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"7-W:71C:"`H9FEL95MP
M72D >PH)"0D)"6-A<V4 )R`G+"`G7&XG+"`G7'(G+"`G7'8G+"`G7'0G+"`G
M7&8G. H)"0D)"0EI9B`H9FEL95MP72`]/2`G7&XG*2`K*VQI;F4[" D)"0D)
M"2LK<#L*"0D)"0D)8G)E86L[" H)"0D)"6-A<V4 )RXG. H)"0D)"0DK*W`[
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
M9W1H*2!T;VLN;&5N9W1H(#T
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

+/2`Q.PH)"7T*?0IO
`
end
Dec 18 2004
next sibling parent J C Calvarese <jcc7 cox.net> writes:
James Dunne wrote:
 I'm glad I could help you all in your project endeavours!  If anyone has some
 extra webspace that they wouldn't mind hosting D code snippets on, please let
me
 know!  I've got a bunch of useful ones :)
 
 Regards,
 James Dunne
It sounds like you want to check out dsource.org. To start a new project, just post a request in the "Potential Projects" forum (http://www.dsource.org/forums/viewforum.php?f=13). If you just want to make some examples available to the community, you can post an example in the Tutorials section (http://www.dsource.org/tutorials/). -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
Dec 18 2004
prev sibling next sibling parent reply "Matthew" <admin.hat stlsoft.dot.org> writes:
James

I've not yet had chance to look at the code, but I was wondering whether you
could give a quick 2-para precise of the 
interface for your module? A bit of sample program might be useful? (I've just
had a sneak, and seen nextToken(), so I 
reckon I could work it out, but it'd be nicer and quicker if you can just give
us a bit of usage info.)

Cheers

Matthew

P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to
great effect on a very poorly programmed 
Java project I was brought in on. I was able to write filters to effect changes
to hundreds of thousands of lines of 
code automatically, which was of great benefit when clearing up after a band of
careless programmers. Now I'm sure that 
such programs will not be needed with D, being as how we're all so cool and
all, but it'd be jolly nice to be able to 
write a server plug-in for D, and use it in the same tool (it uses COM). I
shall investigate this in a couple of weeks' 
time. :-)

"James Dunne" <jdunne4 bradley.edu> wrote in message
news:cq2dot$2lgq$1 digitaldaemon.com...
 I have updated the dlexer.d module, so please use this version.

 New features:
 - line number tracking (line property of DLexer class)
 - DLexerException class: constructs error message containing filename and
 current line number
 - independent module now
 - more comments! :)

 TODO:
 - correct wysiwyg string parsing
 - correct hex string parsing
 - correct numeric literal parsing (ints, floats, etc.)

 I'm glad I could help you all in your project endeavours!  If anyone has some
 extra webspace that they wouldn't mind hosting D code snippets on, please let
me
 know!  I've got a bunch of useful ones :)

 Regards,
 James Dunne
 
Dec 18 2004
parent James Dunne <jdunne4 bradley.edu> writes:
Sure thing Matthew,

As you have guessed already, nextToken() is your main guy to call.  This returns
a Token *, representing the current language token.  A Token is a structure
defined to have only 2 members: 'ident', and 'token'.  'token' is any value from
the TOK enumeration which enumerates all the D language tokens available.  This
lexer works just like the D compiler's lexer, making the longest possible token
at all times (greedy).  The 'ident' member is used only if the token being
parsed has a special meaning, like an identifier, string literal, or a numeric
literal.

As of right now, the lexer is somewhat limited.  It successfully lexes most D
language tokens, but does not have support for wysiwyg or hex strings, or for
proper numeric literal parsing.  All numeric literals are assumed to be int32v
tokens.  There is no official hexadecimal, octal, or floating-point parsing.
However, a cheap hack is in effect to successfully half-assedly parse these,
since it ensures the characters in the literal are either alpha or numeric.
This means that 0x000 will be parsed as one numeric literal, since it starts
with a numeric ('0') and follows with alphas ('x') and numerics ('0').

There are two ways to parse double-quoted strings ("string"), preserving
escape-sequences, or interpreting the escape-sequences.  Code is in place to
perform both methods for convenience.  Setting the version identifier
'interpret_slashes' will return the escaped characters in the string as they
should be.  If this version identifier is disabled, then the string is simply
copied and not escaped (this is the default).

In order to fully utilize the parser, you would ideally create a child class
based on the DLexer class and use its methods.  If you encounter errors during
your parsing, you may throw a DLexerException(), which will provide you with a
fully detailed error message including the filename being parsed, and the
current line number being parsed.  You must supply the actual error message
yourself.  Here's an example:






















You'll find this type of activity common when parsing source code.  Writing a
convenience wrapper function to 'expect' tokens is a good idea.  Here's an
example of what that would look like:

(within "class DParser : DLexer {" scope)








Calling nextToken() will always consume a token and will place the cursor at the
next token to be consumed.  If you wish to peek ahead of the current token to
see what the next token will be without consuming it, call peekToken().  It
works exactly like nextToken() but resets the cursor back to its original
position.

The DLexer class provides the following public methods and variables:

this(char[] filename, char[] src) -- give the lexer the name of the file parsing
(filename), and the contents of the entire file as a single string (src)
Token* nextToken();    --   consumes next token
Token* peekToken();    --   peeks at next token without consuming it
void restart();        --   restart parsing from the beginning of the module
char[] filename        --   name of the file being parsed
int line               --   current line number

Hope that helps a bit!  The code is pretty self-explanatory and somewhat
well-documented.  Take a good long gander at it before you try to really use it.

In article <cq2o54$2seg$1 digitaldaemon.com>, Matthew says...
James

I've not yet had chance to look at the code, but I was wondering whether you
could give a quick 2-para precise of the 
interface for your module? A bit of sample program might be useful? (I've just
had a sneak, and seen nextToken(), so I 
reckon I could work it out, but it'd be nicer and quicker if you can just give
us a bit of usage info.)

Cheers

Matthew

P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to
great effect on a very poorly programmed 
Java project I was brought in on. I was able to write filters to effect changes
to hundreds of thousands of lines of 
code automatically, which was of great benefit when clearing up after a band of
careless programmers. Now I'm sure that 
such programs will not be needed with D, being as how we're all so cool and
all, but it'd be jolly nice to be able to 
write a server plug-in for D, and use it in the same tool (it uses COM). I
shall investigate this in a couple of weeks' 
time. :-)
Regards, James Dunne
Dec 18 2004
prev sibling parent reply James Dunne <jdunne4 bradley.edu> writes:
Hey all again,

I thought I'd release my D parser now.  This puppy is still very much a work in
progress, but will successfully parse relatively simple D programs.  Writing a
parser isn't very difficult, it's just a lot of work ;).  This module uses my
dlexer module I released in this thread.  And so, it is a good(?) example of how
to use the dlexer module.

The point of this module is to parse D programs for code-completion purposes.  A
few simple structures are used to represent the module's information.  An
example program is supplied which dumps out the parsed module's structs, enums,
classes, functions, and variables.

I should mention that functionality is somewhat limited: version blocks aren't
parsed correctly, and the type parsing on identifiers and functions is somewhat
lacking.  I do intend to fix these issues in the next couple of days.  Test it
out on some D programs you have lying around (or the phobos library for a good
kick).

Regards,
James Dunne
begin 0644 dtags.d


M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK
M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E
M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T
M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O
M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E
M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R
M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE
M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\ 
M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP
M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H
M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF
M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T
M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E
M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A
M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D
M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H)
M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D
M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T




M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE
M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC
M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T
M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H)
M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R
M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X 

M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO
M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87);
M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R
M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A
M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R
M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N
M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D)
M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT)
M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF
M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97()
M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F
M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH)
M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R
M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC
M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D)
M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM
M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S
M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT
M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T
M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J
M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO
M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H)
M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R
M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM=
M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH*
M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H

M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A
M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO
M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H)
M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO
M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE
M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T
M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE
M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E
M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA
M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0 

M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I
M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87);
M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68 

M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X
M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X
M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O
M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L
M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D*
M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D
M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES
M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E

M9#H
M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/

M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/

M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R




M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4 
M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H
M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2
M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S
M4FEG:'1S+F%R56YD969I;F5D*2![" D)"0EA<B`](&%R0W5R<F5N=#L*"0D)
M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D)

M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C
M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E

M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I
M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E
M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D)
M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L-
M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E]
M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV
M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P
M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH
M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN
M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD 


M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I
M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A
M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D)
M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT


M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT
M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4
M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E



M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N
M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)
M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4 


M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L
M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X

M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L
M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT*




M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4



M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT
M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT

M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A
M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L-
M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D)


M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R
M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T
M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H)
M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO
M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL 
M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D)
M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X 
M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM
M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N
M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D)
M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E

M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K
M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T
M<G5C='5R93H*"0D)8VQS(#T
M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/
M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[

M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X
M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD 
M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED
M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I
M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI
M:6YT97)F86-E<RYL96YG=&  *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML
M96YG=&  +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K
M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN
M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA
M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP 
M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L*
M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC
M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML
M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E
M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L

M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4


M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N
M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H-
M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T]
M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U
M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I
M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I

M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I


M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)
M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D)

M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP 

M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V  *&YT
M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S
M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S
M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC

M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S






M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A
M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)
M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P 




M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4
M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E
M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC

M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4




M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI
M('L-" D)"0D)"0D)=&]K(#T
M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D)
M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D)
M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)

M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP
M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E


M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L-
M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E


M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME
M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD 

M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N
M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T
M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E
M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA


M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D)

M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K
M(#T



M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE
M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T
M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C


M96YG=&  *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V


M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M
M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T
M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B

M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D)


M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-
M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T 


M"0EC;',N8W1O<G,N;&5N9W1H(#T








M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+
M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF
M=6YC(#T
M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL
M96YG=&  /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O

M(#T
M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS
M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H
M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)
M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L-
M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY
M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D)


M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R

M(#T

M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT
M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`]

M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P 
M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R
M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT*
M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T 


M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E


M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E
M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/

M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T


M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R
M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L-
M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D)
M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T
M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=&  /2`Q
M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`]
M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=&  *R`Q.PT*"0D)"0D)

M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O
M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B
M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`]
M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D)
M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64 
M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D)



M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG

M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L-

M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O
M:V5N(#T
M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D)

M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L

M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT
M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N
M86-C97-S(#T
M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG


M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/


M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED

M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI




M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T 

M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U
M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL


M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S
M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O
M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[

M"0D)=&]K(#T
M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME
M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I


M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL 
M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![

M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A
M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T
M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N





M*#L
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

M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![

M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D)
M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO
M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)
M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+


M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4

M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I
M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC

M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET



M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K
M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A
M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`]
M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=&  +2`Q72`]

M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I
M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT
M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I
M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D)

M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D)
M"0D)9G5N8RYT>7!E(#T
M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A

M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG

M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-

M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)
M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14


M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI
M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E






M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)
M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K
M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U
M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+


M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D)
M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B
M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN
M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H-
M" D)"0D)"0D)"0EF;W( *#L
M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F< 
M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN
M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X 
M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN

M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L
M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4
M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D)
M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN
M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!.
M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D)
M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T
M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L

M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[


M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL
M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D)



M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L
M87-S* D)8VQS(#T
M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL
M96YG=&  /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M
M;V1U;&4N8VQA<W-E<UML96YG=&  +2`Q72`](&-L<SL-" D)"0D)"0D-" D)

M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H 
M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D)
M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO
M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=&  

M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO
M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE
M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N
M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D)
M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D)
M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D)
M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R
M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A


M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T


M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H
M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N

M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D)
M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R

M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US





M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D)


M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M


M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE
M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT 
M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO
M9&EF:65R+F%M26Y/=70I(#T
M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E

M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I

M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B


M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP





M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-<
M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT*
M"7T-" T*"69O<F5A8V  *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP

M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H


M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN

M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N

M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC

M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H*
M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED
M9FEL93L*" EI9B`H87)G<RYL96YG=&  /#T ,2D >PH)"7!R:6YT9B B)2XJ
M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O
M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH)
M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES
M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T 

M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z
M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F
M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN
M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1)
M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C
M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH)
M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP
M;W)T<R`B*3L*"69O<F5A8V  *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M
M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG

M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([
M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N
M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP 
M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV
M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT
M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F
M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D)
M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E
M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED

M;W)E86-H("A$4W1R=6-T*B!S=#L

M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP
M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL
M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X 
M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA
M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH*
M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI
M:6YT97)F86-E<RYL96YG=&  /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E
M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[
M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R

M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S

M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A
M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C

M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R
M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T
M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R

M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D)
M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT*
M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI

M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S
M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E

M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N
M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$
M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S

M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F
M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R
M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E
M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 
M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H 
M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B



M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH 
M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG
M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)
M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T
M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C
M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R
M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT

M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF
M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D)

M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN
M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D)
M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E
M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[
M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI

'<FX ,#L*?2YP
`
end
Dec 18 2004
next sibling parent Vincent Risi <Vincent_member pathlink.com> writes:
In article <cq30e7$31fq$1 digitaldaemon.com>, James Dunne says...
Hey all again,

I thought I'd release my D parser now.  This puppy is still very much a work in
progress, but will successfully parse relatively simple D programs.  Writing a
parser isn't very difficult, it's just a lot of work ;).  This module uses my
dlexer module I released in this thread.  And so, it is a good(?) example of how
to use the dlexer module.

The point of this module is to parse D programs for code-completion purposes.  A
few simple structures are used to represent the module's information.  An
example program is supplied which dumps out the parsed module's structs, enums,
classes, functions, and variables.

I should mention that functionality is somewhat limited: version blocks aren't
parsed correctly, and the type parsing on identifiers and functions is somewhat
lacking.  I do intend to fix these issues in the next couple of days.  Test it
out on some D programs you have lying around (or the phobos library for a good
kick).

Regards,
James Dunne
begin 0644 dtags.d


M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK
M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E
M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T
M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O
M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E
M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R
M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE
M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\ 
M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP
M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H
M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF
M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T
M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E
M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A
M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D
M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H)
M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D
M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T




M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE
M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC
M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T
M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H)
M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R
M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X 

M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO
M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87);
M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R
M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A
M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R
M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N
M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D)
M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT)
M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF
M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97()
M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F
M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH)
M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R
M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC
M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D)
M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM
M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S
M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT
M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T
M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J
M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO
M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H)
M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R
M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM=
M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH*
M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H

M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A
M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO
M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H)
M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO
M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE
M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T
M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE
M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E
M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA
M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0 

M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I
M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87);
M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68 

M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X
M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X
M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O
M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L
M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D*
M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D
M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES
M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E

M9#H
M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/

M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/

M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R




M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4 
M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H
M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2
M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S
M4FEG:'1S+F%R56YD969I;F5D*2![" D)"0EA<B`](&%R0W5R<F5N=#L*"0D)
M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D)

M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C
M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E

M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I
M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E
M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D)
M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L-
M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E]
M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV
M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P
M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH
M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN
M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD 


M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I
M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A
M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D)
M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT


M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT
M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4
M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E



M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N
M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)
M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4 


M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L
M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X

M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L
M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT*




M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4



M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT
M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT

M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A
M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L-
M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D)


M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R
M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T
M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H)
M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO
M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL 
M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D)
M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X 
M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM
M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N
M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D)
M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E

M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K
M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T
M<G5C='5R93H*"0D)8VQS(#T
M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/
M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[

M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X
M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD 
M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED
M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I
M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI
M:6YT97)F86-E<RYL96YG=&  *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML
M96YG=&  +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K
M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN
M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA
M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP 
M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L*
M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC
M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML
M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E
M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L

M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4


M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N
M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H-
M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T]
M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U
M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I
M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I

M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I


M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)
M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D)

M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP 

M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V  *&YT
M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S
M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S
M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC

M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S






M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A
M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)
M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P 




M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4
M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E
M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC

M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4




M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI
M('L-" D)"0D)"0D)=&]K(#T
M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D)
M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D)
M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)

M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP
M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E


M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L-
M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E


M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME
M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD 

M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N
M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T
M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E
M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA


M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D)

M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K
M(#T



M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE
M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T
M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C


M96YG=&  *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V


M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M
M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T
M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B

M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D)


M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-
M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T 


M"0EC;',N8W1O<G,N;&5N9W1H(#T








M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+
M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF
M=6YC(#T
M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL
M96YG=&  /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O

M(#T
M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS
M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H
M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)
M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L-
M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY
M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D)


M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R

M(#T

M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT
M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`]

M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P 
M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R
M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT*
M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T 


M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E


M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E
M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/

M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T


M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R
M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L-
M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D)
M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T
M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=&  /2`Q
M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`]
M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=&  *R`Q.PT*"0D)"0D)

M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O
M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B
M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`]
M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D)
M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64 
M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D)



M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG

M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L-

M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O
M:V5N(#T
M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D)

M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L

M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT
M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N
M86-C97-S(#T
M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG


M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/


M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED

M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI




M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T 

M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U
M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL


M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S
M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O
M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[

M"0D)=&]K(#T
M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME
M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I


M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL 
M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![

M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A
M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T
M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N





M*#L
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

M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![

M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D)
M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO
M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)
M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+


M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4

M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I
M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC

M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET



M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K
M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A
M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`]
M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=&  +2`Q72`]

M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I
M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT
M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I
M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D)

M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D)
M"0D)9G5N8RYT>7!E(#T
M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A

M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG

M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-

M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)
M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14


M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI
M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E






M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)
M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K
M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U
M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+


M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D)
M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B
M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN
M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H-
M" D)"0D)"0D)"0EF;W( *#L
M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F< 
M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN
M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X 
M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN

M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L
M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4
M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D)
M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN
M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!.
M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D)
M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T
M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L

M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+

M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[


M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL
M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D)



M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L
M87-S* D)8VQS(#T
M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL
M96YG=&  /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M
M;V1U;&4N8VQA<W-E<UML96YG=&  +2`Q72`](&-L<SL-" D)"0D)"0D-" D)

M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H 
M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D)
M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO
M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=&  

M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO
M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE
M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N
M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D)
M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D)
M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D)
M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R
M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A


M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T


M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H
M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N

M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D)
M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R

M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US





M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D)


M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M


M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE
M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT 
M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO
M9&EF:65R+F%M26Y/=70I(#T
M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E

M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I

M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B


M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP





M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-<
M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT*
M"7T-" T*"69O<F5A8V  *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP

M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H


M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN

M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N

M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC

M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H*
M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED
M9FEL93L*" EI9B`H87)G<RYL96YG=&  /#T ,2D >PH)"7!R:6YT9B B)2XJ
M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O
M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH)
M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES
M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T 

M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z
M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F
M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN
M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1)
M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C
M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH)
M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP
M;W)T<R`B*3L*"69O<F5A8V  *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M
M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG

M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([
M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N
M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP 
M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV
M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT
M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F
M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D)
M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E
M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED

M;W)E86-H("A$4W1R=6-T*B!S=#L

M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP
M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL
M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X 
M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA
M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH*
M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI
M:6YT97)F86-E<RYL96YG=&  /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E
M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[
M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R

M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S

M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A
M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C

M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R
M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T
M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R

M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D)
M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT*
M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI

M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S
M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E

M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N
M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$
M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S

M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F
M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R
M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E
M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 
M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H 
M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B



M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH 
M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG
M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)
M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T
M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C
M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R
M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT

M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF
M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D)

M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN
M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D)
M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E
M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[
M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI

'<FX ,#L*?2YP
`
end
Why not produce a Coco/R for D instead?
Dec 24 2004
prev sibling parent reply ahiru <asuka h5.dion.ne.jp> writes:
The parser couldn't parse below code.

==
import std.stream, std.string;
~
==

parseImport() have a bug.


--- ../dtags.d	2004-12-25 06:00:53.834500000 +0900
+++ dtags.d	2005-01-01 18:34:57.953125000 +0900
   -296,14 +296,28   

// Parse an import line:
// Starts after import token.
+		private int parse_import_continue = true;
DImport* parseImport() {
DImport*	imp;
char[]		ident;
Token*		ntok;

+			if (!parse_import_continue) {
+				parse_import_continue = true;
+				return null;
+			}
// Get the import identifier:
-			while ((ntok = nextToken()).token != TOK.TOKsemicolon) {
-				if (ntok.token == TOK.TOKidentifier)
+			while (true) {
+				ntok = nextToken();
+				if (ntok.token == TOK.TOKsemicolon) {
+					parse_import_continue = false;
+					break;
+				}
+				else if (ntok.token == TOK.TOKcomma) {
+					parse_import_continue = true;
+					break;
+				}
+				else if (ntok.token == TOK.TOKidentifier)
ident ~= ntok.ident;
else if (ntok.token == TOK.TOKdot)
ident ~= ".";
   -925,11 +939,13   
break;
}
case TOK.TOKimport: {
-							DImport*	imp = parseImport();
+							DImport*	imp;

-							// Add the import to the module:
-							dmodule.imports.length = dmodule.imports.length + 1;
-							dmodule.imports[length - 1] = imp;
+							while ((imp = parseImport()) !== null) {
+								// Add the import to the module:
+								dmodule.imports.length = dmodule.imports.length + 1;
+								dmodule.imports[length - 1] = imp;
+							}
break;
}
case TOK.TOKmodule: {
Jan 01 2005
parent James Dunne <jdunne4 bradley.edu> writes:
I never said it was complete ;)  Thanks for the bugfix, but I dropped that
module a while back.  I'm working off the DMD front end C++ parsing code now.
It will be pretty much guaranteed to work like the compiler does.  I'll let
everyone know when I've hammered out all the fine details.

In article <cr5sh1$2ida$1 digitaldaemon.com>, ahiru says...
The parser couldn't parse below code.

==
import std.stream, std.string;
~
==

parseImport() have a bug.


--- ../dtags.d	2004-12-25 06:00:53.834500000 +0900
+++ dtags.d	2005-01-01 18:34:57.953125000 +0900
   -296,14 +296,28   

// Parse an import line:
// Starts after import token.
+		private int parse_import_continue = true;
DImport* parseImport() {
DImport*	imp;
char[]		ident;
Token*		ntok;

+			if (!parse_import_continue) {
+				parse_import_continue = true;
+				return null;
+			}
// Get the import identifier:
-			while ((ntok = nextToken()).token != TOK.TOKsemicolon) {
-				if (ntok.token == TOK.TOKidentifier)
+			while (true) {
+				ntok = nextToken();
+				if (ntok.token == TOK.TOKsemicolon) {
+					parse_import_continue = false;
+					break;
+				}
+				else if (ntok.token == TOK.TOKcomma) {
+					parse_import_continue = true;
+					break;
+				}
+				else if (ntok.token == TOK.TOKidentifier)
ident ~= ntok.ident;
else if (ntok.token == TOK.TOKdot)
ident ~= ".";
   -925,11 +939,13   
break;
}
case TOK.TOKimport: {
-							DImport*	imp = parseImport();
+							DImport*	imp;

-							// Add the import to the module:
-							dmodule.imports.length = dmodule.imports.length + 1;
-							dmodule.imports[length - 1] = imp;
+							while ((imp = parseImport()) !== null) {
+								// Add the import to the module:
+								dmodule.imports.length = dmodule.imports.length + 1;
+								dmodule.imports[length - 1] = imp;
+							}
break;
}
case TOK.TOKmodule: {
Jan 02 2005
prev sibling parent reply "Simon Buchan" <currently no.where> writes:
On Sat, 18 Dec 2004 09:26:01 +0000 (UTC), James Dunne  
<jdunne4 bradley.edu> wrote:

 Hello all,

 I thought as a nice Christmas present for you all working so hard on D,  
 I would
 contribute something some of you might find useful.  I've been working  
 hard on a
 lexer (tokenizer) for the D language.  Attached to this post is the  
 lexer module
 written in D!!

 I began work on it for code-completion support for my D IDE called Orion  
 (over
 on dsource.org).  Don't bother checking anything out there yet, as its  
 all in
 ruins right now. ;)

 I tested this module somewhat, and it successfully lexes its own source  
 code!
 This module could be useful for a few things, like:

 + code-completion database for D modules
 + generating CTAGS for the D language
 + indent-like program for D

 ..and any other D source code tools you can think of.

 Merry Christmas all, enjoy!

 Regards,
 James Dunne
Any particular reason you kept the whole TOK.TOK... naming system? Just seemed confusing to me... Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'? Just a small hint, those debug format strings would make a little more sense with wysiwyg strings (ie `"%s"` instead of "\"%s\"") Looks like a good start, though, and works as a beutifier, to boot! :D -- "Unhappy Microsoft customers have a funny way of becoming Linux, Salesforce.com and Oracle customers." - www.microsoft-watch.com: "The Year in Review: Microsoft Opens Up" -- "I plan on at least one critical patch every month, and I haven't been disappointed." - Adam Hansen, manager of security at Sonnenschein Nath & Rosenthal LLP (Quote from http://www.eweek.com/article2/0,1759,1736104,00.asp) -- "It's been a challenge to "reteach or retrain" Web users to pay for content, said Pizey" -Wired website: "The Incredible Shrinking Comic"
Dec 18 2004
parent reply James Dunne <jdunne4 bradley.edu> writes:
Any particular reason you kept the whole TOK.TOK... naming system? Just  
seemed
confusing to me...
I kept the TOK.TOK naming scheme out of pure dumb ignorance on my part ;) I didn't realize we had anonymous enumerations. Also, D doesn't allow you to use reserved keywords to declare enumeration values, so the TOK prefix was kept. Tonight I'll run thru and remove the redundant TOK.TOK to be just TOK.
Plus, it seems you still have the === identity token in there, wasn't that  
replaced
with 'in'?
The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` (this is used to convert identifier tokens to reserved keyword tokens). And reversibly, if you use toktostr[TOK.TOKidentity], you get "===" back. Strange, but that's exactly the behavior of the D front-end, and I mindlessly copied it over to my code. I'll fix it if it bugs you ;)
Just a small hint, those debug format strings would make a little more  
sense with
wysiwyg strings (ie `"%s"` instead of "\"%s\"")
About the wysiwyg strings as a formatting suggestion for the code itself, I'd like to claim ignorance on my part as well. :-D. I often forget about the nice new features of D, since I'm so used to doing things "the old way." I'm sure you can relate ;). Besides, I'm growing accustomed to seeing all the horrible backslashes in strings.
Looks like a good start, though, and works as a beutifier, to boot! :D
And yes, it does work quite famously as a beautifier doesn't it? Except the small side-effect of REMOVING ALL COMMENTS :-D. Of course, that's a small change if this module is to be used as the basis for a beautifier/indenter project. Someone should really take that up, as I've got my hands full right now trying to come up with some preliminary code-completion support for my D IDE. That, and Christmas shopping still... I'll make my changes tonight and ship them out ASAP. I don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect! I think Brad (admin of dsource) is in the process of evaluating replacement PHP systems right now, so he's got enough to do at the moment. Regards, James Dunne
Dec 19 2004
next sibling parent James Dunne <jdunne4 bradley.edu> writes:
Plus, it seems you still have the === identity token in there, wasn't that  
replaced
with 'in'?
The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` ...
Lousy kharmic retribution... that's what I get for correcting someone else. The line is actually keywords["is"], not keywords["in"].
Dec 19 2004
prev sibling parent reply Brad Anderson <brad dsource.dot.org> writes:
James Dunne wrote:
 I don't want to host these projects on dsource.org due to the overhead of the
 SVN repository (since they're only single modules) and that dsource is (I'm
 sure) intended for medium-sized to large-scale projects.  If there was a
 code-snippets section, that would be perfect!  
This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Dec 20 2004
parent reply James Dunne <jdunne4 bradley.edu> writes:
As a temporary solution, that sounds great.  But I have a few issues with
that... Seeing how its read/write to everyone, what's to stop someone from
simply removing the files there?  In SVN, can I be the only one to modify my
modules?  For now, your solution works ;)  I'll throw my stuff in the Bindings
project.  Keep me informed on anything you'll be doing in this area.

Thanks a lot, Brad!

In article <cq62nv$2lpp$1 digitaldaemon.com>, Brad Anderson says...
James Dunne wrote:
 I don't want to host these projects on dsource.org due to the overhead of the
 SVN repository (since they're only single modules) and that dsource is (I'm
 sure) intended for medium-sized to large-scale projects.  If there was a
 code-snippets section, that would be perfect!  
This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Regards, James Dunne
Dec 20 2004
parent reply James Dunne <jdunne4 bradley.edu> writes:
Anyone interested in my dlexer and dparser modules will take a look in the
bindings project over at dsource.org!  I've taken to completely rewriting the
parser code.  I slightly modified the lexer code to work more closely like DMD's
front end lexer.  I'm gonna do a straight conversion of the C++ code to D for
the parser.  It's working well so far, just gotta define all those darn classes!
I'll throw my work into the bindings project as I go along.

Regards,
James Dunne
Dec 21 2004
parent reply "Ivan Senji" <ivan.senji public.srce.hr> writes:
"James Dunne" <jdunne4 bradley.edu> wrote in message
news:cqb842$1uud$1 digitaldaemon.com...
 Anyone interested in my dlexer and dparser modules will take a look in the
 bindings project over at dsource.org!  I've taken to completely rewriting
the
 parser code.  I slightly modified the lexer code to work more closely like
DMD's
 front end lexer.  I'm gonna do a straight conversion of the C++ code to D
for
 the parser.  It's working well so far, just gotta define all those darn
classes!
 I'll throw my work into the bindings project as I go along.
Great work James! I am not only interested in this but also succesfully using your lexer. It is used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers); All i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project. Thanks again for dlexer :)
 Regards,
 James Dunne
Dec 22 2004
parent reply James Dunne <jdunne4 bradley.edu> writes:
Great work James!
I am not only interested in this but also succesfully using your lexer. It
is used
in a translator D+some_new_features->D.
I have this working:

int[]  numbers;
numbers.length=100;

(each[int index] numbers) = index+1;

int sum=0;

sum += (each numbers);
Glad to see someone besides me benefiting from my work! And since dlexer is working just like the one in DMD's front end code, it might not be much work at all to convert that parsing routine back to C++ to throw in the compiler itself ;)
All i have to do is fix a bug that stops
writef("%s\n",(each numbers));
from working and it will be updated to dsource as part of the
lr-lalr parser project.
Is that a bug in my code? I was pretty sure I tested all the string parsing routines fairly well.
Thanks again for dlexer :)
You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns the token value (TOK...) of the token parsed. The actual token structure is a protected member called 'token' in the DLexer class. Then just check the 'token' member. This eliminates a lot of extra memory allocation and garbage lying around, since we just reuse one Token structure. peekToken() also works similarly, as it should. I've also changed the layout of the Token structure itself. We're now using a new structure Identifier (token.ident) to reference identifiers, and the ustring property to reference string literal tokens (token.ustring). Identifiers are kept in an AA to eliminate duplicates, just as they are (essentially) in DMD's front end. Actually, they're stored in the stringtable, but an AA works similarly for our purposes. Also, numeric parsing works (but still not real number parsing) and returns values in the fields token.(int32value, uns32value, int64value, uns64value, float80value). All integers smaller than an int32 are stored in int32value. But it doesn't matter which member you choose to read from, since they're all in a union ;). I'll throw this new version up to the bindings project now. Sorry to everyone using the old module, but it shouldn't be too hard to convert over to this new Regards, James Dunne
Dec 22 2004
parent "Ivan Senji" <ivan.senji public.srce.hr> writes:
"James Dunne" <jdunne4 bradley.edu> wrote in message
news:cqcs5s$118n$1 digitaldaemon.com...
Great work James!
I am not only interested in this but also succesfully using your lexer.
It
is used
in a translator D+some_new_features->D.
I have this working:

int[]  numbers;
numbers.length=100;

(each[int index] numbers) = index+1;

int sum=0;

sum += (each numbers);
Glad to see someone besides me benefiting from my work! And since dlexer
is
 working just like the one in DMD's front end code, it might not be much
work at
 all to convert that parsing routine back to C++ to throw in the compiler
itself
 ;)

All i have to do is fix a bug that stops
writef("%s\n",(each numbers));
from working and it will be updated to dsource as part of the
lr-lalr parser project.
Is that a bug in my code? I was pretty sure I tested all the string
parsing
 routines fairly well.
No! The bug is in my code ;)
Thanks again for dlexer :)
You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns the
token
 value (TOK...) of the token parsed.  The actual token structure is a
protected
 member called 'token' in the DLexer class.  Then just check the 'token'
member.
 This eliminates a lot of extra memory allocation and garbage lying around,
since
 we just reuse one Token structure.  peekToken() also works similarly, as
it
 should.

 I've also changed the layout of the Token structure itself.  We're now
using a
 new structure Identifier (token.ident) to reference identifiers, and the
ustring
 property to reference string literal tokens (token.ustring).  Identifiers
are
 kept in an AA to eliminate duplicates, just as they are (essentially) in
DMD's
 front end.  Actually, they're stored in the stringtable, but an AA works
 similarly for our purposes.

 Also, numeric parsing works (but still not real number parsing) and
returns
 values in the fields token.(int32value, uns32value, int64value,
uns64value,
 float80value).  All integers smaller than an int32 are stored in
int32value.
 But it doesn't matter which member you choose to read from, since they're
all in
 a union ;).

 I'll throw this new version up to the bindings project now.  Sorry to
everyone
 using the old module, but it shouldn't be too hard to convert over to this
new
 format.  For history purposes, the old dlexer module is in bindings

I'll check it out and make the changes.
 Regards,
 James Dunne
Dec 23 2004