RSA - the song

Bodo Moeller Bodo_Moeller at public.uni-hamburg.de
Tue Aug 12 12:21:21 PDT 1997

```
Kent Crispin <kent at songbird.com>:

> [...] the intermediate protocol is music.
> [...] another example of the absurdity of the export ban.

For encoding numerical data as music, I usually use the following
scheme:

The digits 0 ... 9 are mapped to the C major scale:

0 becomes B,   1 becomes c,  2 becomes d,  3 becomes e, ...,
8 becomes c',  9 becomes d'.

(Of course, this can be transposed to any other key.)

The next step is to find appropriate rhythms, harmonies etc. that make
at least some sense, musically, in order to construct a melody out of
that sequence of notes.  As an example, I scribbled down the first
digits of pi = 3.141592653589793238462643383279502884197169...
The score can be found in the uuencoded GIF below (and soon also at
<URL:http://agn-www.informatik.uni-hamburg.de/people/3moeller/pi.gif>).
That version (in D major) is for harpsichord or piano.  I did not mark
which notes I think should be played legato, legatissimo or portato;
that is left as an exercise.

It would be quite cumbersome, of course, to use this method for
exporting software.  However, it is very convenient for memorizing
numbers: Melodies are much easier to remember than boring numbers
(unless you happen to be a computer in which case you'd prefer the
raw numbers because they contain less data, technically).

This works good for decimal numbers (no large jumps, no difficult
harmonies: B d f g b d' can all be used as G 7 notes if all else
fails).  Hex numbers are not that easy to handle.  In addition to
0 ... 9 == B c ... c' d', then there are A ... F == e' ... c''
(i.e., the digits/notes are spread over slightly more than two
octaves).  Because of that, my PGP fingerprint is somewhat
avant-gardistic: C7AC7EAD  566A65 ECF  61666 83 7E 8668 28
(See what I mean? :-)

In addition to memorizing one's PGP fingerprint, there are other
possible cryptographic applications: Under certain circumstances, one
might need to implement crypto-software from scratch without having
networks.  For such situations, it would be good to have some kind of
"memorizable encryption standard".  Writing RSA routines is easy (at
least if you are lucky enough to have some bignum library or if the
programming language supports bignums), but often you will need more:
E.g., a key generator for RSA that will find your 1024 bits RSA key
(which is really 2048 bits long if you count both N and D) given a 128
bits secret as seed.  It might make sense to use some cryptographic
hash function as the core of the "memorizable encryption standard":
The hash function can be used by the key generator (similar to the DSA
"kosherizer"), and it can be used to build a symmetric cipher
(Luby-Rackoff style).

Musically, the "memorizable encryption standard" could be a suite
consisting of a Prelude that somehow defines the hash function and of
some other movements that give test data for the hash function, for
the derived encryption function, for the RSA (or DH/DSA) key generator
etc.

Bodo Moeller
<Bodo_Moeller at public.uni-hamburg.de>

The first four bars of pi:

begin 644 pi.gif
M1TE&.#=A(`-8`H```````/___RP`````LP((`@`"7XR/J<OM#Z.<M-J+L]Z\
M^P^&XDB6YHFFZLJV[@O'\DS7]HWG^L[W_@\,"H?\$HO&(3"J7S*;S"8U*I]2J
M]8K-:K?<KO<+#HO'Y++YC\$ZKU^RV^PV/R^?TNOV.S^OW_+[?VTP0'U.7VQ]&
M.6FU%V>]>?<?#,61+,T33=65;5T+>.69KNT;AX\$X[_T?&-KM at D7C\$9E,#7E*
MYQ.J8A*C5>L5>VENJ%GO%WP8&KIA\QF=*V/6:?=;W1S#Z74[A[BMM.]]OXAJ
M[F^04(F/(E!OXK"PL8,)!Y)M2G&RTC'B\$O-N*B-/\X%R<]2SLX\$1A!*5011/
M<FGUR)24,T9P[Q5WEI87 at N<P5P%TT398Y[%8ZM8W5KFUU\F8]7?X=)=8K!H:
M>CF;L9E9&QN/3)Q+>AI=#"6Q>]NE^MJ:VCQ!WA<!W/Z'(#ZF+K<_C')2"*Z[
M at .'*N[=H80.2T5AIZZ:LIV3"KCS;-VZD#YOI]:='\$DXZNQPRJ5PRFS\>,-4*
M3D5`5/4ZK#:YL6P-H[V-9Z],.<'R.I/I-;9X#\$E5Q#8^K]\CYVIV@!'@3YD?
M%AR.H=L@&D4:S..68N#9X1V?#:/.P6-DY4DD%>8H::DIIU:4V)OF))2KQ^?2
MJN8?+&6;;`[B'^X7:FW<7FAG\:U%\*GR,O-H*N#E!UKR\+\$9KR4RGBY9-*6U
M[],U."1Q<G\$X9/,Z>_LVM[@5/*%H^QIU+/9O8Q[Y5^L\;>6^]:-F#5TH=PH7
M,E2B#]BT,8K\\>@3<.!%:933"N+[]RHA`I!6"+X+!LZ8R%T/&[)LZ40BP%H2
MQV6T1RN?S)1V'![LB"I3S40Y39)\$IA/4/8HNES)-!\$78HJ1-O_D+>C2;Q9Y;
M!Q-NUI6JX,.DZ at Z2FHOGR;:*?[Y\ZR*0N\":C^1=_D8@/J8NMS^,<M)J*P#W
MY.[S`FXC64Z>F5I?(P8NIJFO/+<VSGP[W\-A+B@<\$HM&U2_B0^EJQR<TFN-=
MDB6K-*M8<GLK+3 at L'HN[V*V3K%X?6=6TZ<R>FNOP[SROW\_M]]8?G^`@D=P;
MX8.?HA='((4C8J3D)*#9!N3C8@<\$B*:G&Z44)J?,IMXGJBEIBF&HZRN;W]5,
M:JTM(^SDSMJMYDBKTFCN,/&0G8UP<.]R:K\$D4QES'6NR0[4S(31VW'30=:6T
M-,T2S<OV.4XXL,%ZXC<0>NYN?(SE%NU[2'X5/P;]_R5%WO8A(%@0H*M.ZQ1B
M.W8#B4\$.4=Y]BXC0&9=[(DHDS/N%Y"*E&@LUM./3S1V^CU`HQ@#ITAHH?1S!
M42%AT5S^+ at +Q,76Y_1T`1T(S0[6;]R;!,/0TCRG-!\$M-E%LWEYWIVKYQ2S[A
MZ!*!P%IO1LP=D4E<R7C*!)7(H,CYV+&NK>04E&I^OE'QF%S.JL(_[CJM&S[9
M\2E\4H>6\3946RW,>^.L(,Y(^-RDUKP*_Q@;'1=UB.0"#17L)C\$S-3\$?.R-@
MOA(](T4/?7((7[9*QRI'7V%O#"LV:VVIL%QC=U<IP+IH>7TG7[C04,/V;I>9
M_2[!A\$V?Z)JKK:^QLQ7U1G6C\$7TC+Q;L,J"9/K/5US7):7#[-+H0,.;IV?'S
M1[R_WZ\I=/\$[QLV3P'YZ5H":%DR?G'BU?@SB,TN:/T;\`AJ;E'60(Z!;'T@@
MW%BP8R-YML(!5-FF7@=6Y\$*-&(0LE<2+VU2]Z2BS\$\\_FV*\$)*BS9\E<]N``
M=,A#C:5'/E,.O.='\$\$*H./-@%/INY]6?7LD\$4CES:Y\$EW8QZ)#;'QTE>,9E2
MN_-)%KRTX[2X'*+1#-B^?L6XXMOJ+,F[=/V5(\4F+]<J,(E9&3S7[,W&02T>
MI&K2;M9B%3V/+%K^@T!\3%UN`^CD at 2!86?7F\$T7/P9:1XKIO`D,&9=LW;LJ0
M5NUWE7<2OS1>\`,4\GR]HJ*2O#";3B-46M,]8TO1Z10]YF8/[0:6Z7I<Q?+T
M)TLGVEDUBZB<Q[-U.TG>?N.CS+>\P#RC*JL<K)82\$(M!I(<@GS`Q.#(TRB1'
M0+:K3\$U`/S!#0K=04LB:5+-\$H4^]4Q%8-5:*'5-%2)K1+[!(D\DEOK3=/6);
M6>3>5M=E4]ID4>B46."U1IV1",Q6)^9N:<]1S>T;Y5]@]'2K=#QAE<TI[^1!
M8S/I,R4Z]OV.R2=^@`&U+=(GT.!!A`GW at 6OV"%\$].J+"K))X!(/"6T/4WC4+
M^,.@%'8>KZ%2M4P61G/?^!TB%*C/*H at E&4*1=^_9FH?&U&F\$B.X*"FPB,:*L
M):FBME<IAN([A%3H4JA0*PJ*.5-FAJN*:M:R2K,K&V+##O+B^1)G(8?Y-F(E
M>^]KG)I5:=[LEC'66WKV*'Y[FZDOE5V)M.CC]L\IHL))U;)E_)>D8[^7H-\$%
M17EMU[R7D6W%"YF,17(SY\$8L93DM)\6+[S9VS!ER7-=]0U/IO\$?OY\$NCX7J^
M(QHLLT43::--?4SSW]C(/?%V-7LXYLRL3P*W>TK^'H'XF+J,\*"])B>]!VJ-
M<^S,IX at +*74FJ*XCZ[YPDKI6;)\P%]=W/^.77P\C).J&.:22<AP52SS;9Q)%
M+1U,*_&J?'(A7)G/&PZ20^=*F::JEM;!;&1#KV_ at AC0>!0[1W%)S>GEE162'
M>TF)>4U?8XLK at U^2+W:6EYB9FIN<G(QT`7.AG7=LD(&`C)%]781_.T!O6[.G
M()0YC8XWJ;4.I+_`@L&=,L*`O*,UHK!:+*!(P\B]:+R#N;O)IHJR?K19TRTB
MR\N3?>)US(%[*<1 at 4QFA3'85XZJWE;;YO=)0K.#9_]KX<R)PX`Y+D:3\$VO8M
MC*9DT2(B-\$8*(J9XMN[.H;%XB9O`+AJOG!D)CM*U:2\$AG725T2`NA'Q\$2;PC
M\$]C"3S.?.4,%\$V=*CIF`Y at R&I8VV1P&+>FMXBE_29D_-5/OH\N4HH='B>'CH
MSF=\$C`%_QK3F%-XNL4NU)H2&UH>^M(G:AHUJ!%F:*66Q_BIT\^A&NF(6Y86X
M\VQ!AG#5(J6+"*I*P-@@4WMB<"@H=H(^LO2K%)>\P8\E;QV<TNE*Q8F9&@;<
M6/1FUT9A^[)+#"#;JV]!F_6(>+;NN+)+Q598MVIJWH[5L3;RMJGLPC'^",3'
MU&6#!\W)\ZJE&6'MXNR63PP9+H&@<F71]EW3,9S?TTSAFMJSWO[!A\$,2D18T
M)F-*)DHE05XN,F-4@;DIK;R>+-O4 at 9/4Y?"[(;>V%=9:<Q:/:7'1DWZ_XL=V
MDV_FA:,;"12*"OSRT at M3;.-C!('*6>QP8]M[E-NJ+)3\$%/14<RR*G\$K\$?"*<
MK\$-"[`1]>WU+_>02+:G<#,AMF(W%T50TY2T"+(Z0M!!N\SU*M1I\$=0V69 at I*
MN_JQ9<[;'O9]UIX3O]7:I>16,59?9V]W=]?-,=U-3GQ?[ZY]YO*PH]93I^57
M%\)T)]]QO-B/I4N:-6VZG("+TDU[QG)^;\$ARY<9K'549+>6#%!IH#U,>[/+!
M:4 at G_T`"/%:/IT:D06%MI>(38Y6I)4D:*MNLJYFU3&']JCJE&:"A8\%\$M>JA
M[=N]KX2RC3BN2BRN4"+]%=@W\-J\&SQB:SJP**=0>?&"4VPXLZRRB(]J%DPD
M;:/&W%9YWLQH=)S2D\$R[E3GSV)V_!\6 at SK>:V>1&IT(K3>R)+EF at J7</_R\$0
M'U.7P8&A-VFU-&:]W4X7\D0I',T3-<J4;;/*5=?8F]_3=G.:PWB8%Q0.:T3C
MI-?H/`+(YL[80%VBLNH5FXT`8YVM]FN"IL97;M<)5J\_;#)3LX.3EF6M74&M
M>MU]_^BLI8SO!Q!G".\HC<;GS_'HL68N+(]0!L+2+Y%N43'R,S)0,&ZS2*2T
M22 at 3K)%Q\$E02!\$3%#';K=4'NM?5OE;33TU8RUU?X at W?T!K\$VJ#C+F1@*^/`6
M2?;Z.I43VX+,N!):&QQ.]+LZ',W\?`97_0`YF;+94\$P5U7'ZTHJ;/]O]28\\
M<_DD*)'USQ2K>\=F(>+5S at TF0.@F]N/&@=F/A8P5^[6Y9)\$@PCL7_X6DM0Y>
M'Y`KR[U at 21(@23LO:=:LJ<,FGYP[4T[A>3%\$"9HBB9Y":!)=MV<6W['X":.G
MO:<2647YZ5\$@(WHNIV((1]\$AQ*)CFY84:X5C08`%;71\1)6LH*AQ at V7MLM4H
M,7%)CIJD^U<84FE=E0[T.X[L7,#VXA#9A&JCWKY@%QN+;/Z`0'Q,708'=MZD
MJ\$:<]>:<PB[X0K+<'C-55]9P,K"5M(F,VU?6FWSW?^#J%F358+WCD+CT7#HC
M9E`9I4JGEM_5Y?3HN%5P6#S6CGG(AJUL)D*?7W9<#D8KUJ7IIT[#P>=_P\$`L
MP04CC#N+/4(9MR;#1<C()Y at HO1?\$P1#+1\E.3Q_,.,Y"'CO%3[71I%/4UD!6
MD2P)RQE-QTT45]W=+D_5A*LZ6-X(/YIAXN3*M=#;1I'FV\$)<*&3E:\AHLMS#
MLT1M96X\;'(Q6/##Y\PF:&IU]/+X,/BJW]GI'G'Y?7[>\RQ[TE:Y"]C/8+9/
M!;54L';0X4-SS\$`U-\$50#T2,OB<2ZK-33%U&D"&9_`.ER2(MD2D)T:.B,!U'
MRC-=VS<NY:1[L3LP*!P2BT&'CP9;,HW.)S3*DU)ZU1\UJ]URN<CJBBGNDLOF
M8Q]'(J9EIZ<(9U1DPV>I*9\B`N=FZ*GKJT+KTVA"*NPM+I%M9NQF[B^PJAEM
M;;#QL<UNA6HBLO.MK", at VW.UM=UE\_7V9W31-#6WN+CRW?AYI?>H`D%\3%T\$
M!];BI-5>G/7FW7\P%#V'>IXQ55>V=5^8 at V*YK&8ZUW>^]V-;)/@C%HU'I`:7
M-*`L2V94.J4:AU5L5KM53IU/;E@\)@>@971:#8R>,N=U7#X'P>EW?-Z<=+_M
M>L#`M3_!0D,J0IZ^BZM#QT=\$2,G)HD2?+Q-+RDW.%<U.T%!&1\$R&1E'4U"Y5
MUE93K%*%4U=:U\]:W,?;R]FFW5Q at Q]]@XKOAW at 2"^)BZ"L[FP4FKO3CKS;O_
M8"AZP&B>:*JN;.L&Y=LYTE++>*[O?'_&OJ!PV*,!B:\$C\$F&\$*)?0J'0Z?%*O
MV*C1FIUPD4W&MTLNF\OCLWJ=#+-M6'?C3:_;<>F[_K[-FV]2<@E^>X6&AS"(
MBG9;AH!:-\$Z+DSN/E""\$EX&978)\G)618IJD*IZE&Y:H5*=LK72J8*)PJ[4?
MC;:IH+DZN+QDL42ON[^K?<48P<@\QYA]S]#1TM/-#\15<;-SRR,ETC#>,=<L
MS9/4Y^'3\$=PBZ1'H\-_>/DWQ]O?4B4RO%/X\$\3%U%1Q8@)%6>W'6[<GWP>\(
MR=(\T505I6V,(#%>S\3Q0".V;GPF?3_:D%A\$!3M&F5#'<CVA4>DTJJ)>;1W&
M!-N=RI#"HY=,#C6/RE6K]6N6,SWXG%['Y.QY_7[+=SD;_!;4",\$\$#^,`\$1>A
MY!@?(;,<(ZLHZ;@L\$11',"^-V+0R12LF84I'1T]1-T)7MSI=+V!CGV8M-]^^
M/FEY65M[@3F#\$U6'C0>/66-Q==``/VV%J:*3R\ZJ>8NK\;"[7[Q)EW\UDX8T
M9K7OJ,%UF=DCTXVOW[?I^UR9X\FY3>5N]\$FML_>'WT!X`H<5-`@,8;>&B-PU
MK\$'!R41?"[',PTOX".%#2`JS&?1X#"#\$<<UXI.C7P^*Y"24W2CH94Y`VD*EF
MTD0U4@\7CR7\$J;(Y[F88C;5>\N0XR1TQ@\$IURHIV=%7.90L[%M)J[@S^5`+Q
MA9*0"F(,^J"?4!2Z64PO*UB20M\$@G6\$G6)RCXKX'UVXM/;_AOV8Y_:;?\?DR
M>1^O\G-N_`9Q"'6L&J2PLD1`Q#A>])*T).?:4`([IA#]!%N8B)Z0`\$,OT2HU
MK5!7A0Q=:3Q?[61I:V,X"UM(VLR*&ME\$X5)9CY1(*X_W3%^1J1:]EFVE#6.G
M>:JM>["MZQR!>[/`9\2SKW"=9;;+UQ/#G]GAM>-]U.=_[-7.O6"[,8-MZD5Y
MIVC at GUOX\$.9BE+`=0Q0.QT&TD;!?/DD6=W%]H1=06[1R'+M(G`>2HL@()E'&
M*?AQ&<D+;GR%E,=,W[J5)U/:S(ES)Z2>#W_"1%C3I;<,2XH*I5:39;J at TY*.
M#!IUZ%-=%%M>\Y3&XSBJ+"K"NWG%JBU!7VNAA5H6!%NR6`=2;;GFV5A,Z>PZ
MRJN0D\$NU;DV<S?D7,+?"?&G^\$(B/J:O at P"";R<U'C\V\ZR=Y`2AJY=F at H\JV
M".G&:RK796CG'J[W)_\R0\$#\$(G%D3"J-*\L2Z&/!:*W-PDIQ0GW%'U:TE6&&
MSV<T>CSOKNHJ&5F.RYGDS?RNO<.7IAC>WH86Z(=Q%<;Q)?4VV*7X]VA6,7,S
M!BE4B`8I!R<T&9*(-#@3B2BJ=FBZMV<&A9HJ^.H%&JI8H^5"HKDY56KJ:E/W
M%JQ;QC44ZK3*6DF<9AL+'>TG+?I+S?MBW:"MW!P7X5R=RMU'#88-#3IKGD'.
M3O6>XQZ_1F\X.]]-?'F9CXC>QA^*>0)?`8REKF`Z>RH4,NST4%[\$;/C8X,\$U
M;%V"MH&8P.`:UW#B/8>\$#(F\<+(#288K([8T5G'2/WE\>LD*607DP)057N;<
MQA->4*%#;1:]D?*@1J#`Z.SPV>ZC+YQ!H?XDRM/JU*/UN'H\J=1:1T)VR\$E8
M*O\$J(Z^46\$;PJE4<VZAS528=^T\$E6DIEV\I,JO-'U;A4)7\$E'`AQW8D'/?X0
MB(^IJ^#`'\$-RVALJQ'1O#H:B\8UF=J+I.E;LVT3P+);TC>/0X\D=#PP*A\2B
M\8@\YFC`A6MBT^VB%\ESJ</Z3%1MZNH%@4EA;+=\&UN3;&&F_4#+#TWH?,5S
MGN7K<:2N at C+55#=\$][*7DVAW%^+AU]BQ%8FG2#<(!6<42-GI^?7)`2C92709
MI^GVM-.P:9IWZ=02)YAJ>\OVAKN[F:"V&"HKBUJD*_H(/!F\S(R1_`GK^YS6
M1F)%&BT,2G'*F_>*;%H#N4P.PQKNK3ZX[L;9K`TO/V]>3BNMI?2VSS4]'5/I
MSK]#3`8Z,^CEUSQG"VLT?,@,H<![I!`5R\1O7'PCB>_0&.3X`V0K>7Y\$1C()
M,:7*?"JSQ7(DKA]%,2C%L*AIDTO!>K-(=L')9Z70H<%XAG)I#4[&<TMI;D3T
M5.<YI\$SAE21*!JO6K6&,0IMIC6M3CS>!5CDA,L at 2LV65K60K-NY0KYZHTO5Y
M\$JI`M%/!SH#[Y:=6P'(+/[R[_H!`?\$Q=!@?EV*35WB3QYMU`+PPTL1P?T%Q2
MM?U8!';G2:9O/-=W?K-[T2/R`Q:-(>(,13J^A+ID\\",25U1JW6YY7:]7^Z1
M!1&B3MO7AZ)99I%4JEONQ@:[R-83VHQG;/TY"\"K&#80,HFR1#!&L[;`PK/&
MR;`JRPNR,\E'2`Z]DTX^E;JU'+#0O1+*5=96UR^G5];-R\4*4M1<W5U/-MX>
MW(8&6>)BXV/D4S2Q8+S>,K7!WVGJ:NO"3*GD[>--1\ZK9<F.Y at RC<CKT.?7K
M=O=W(';OX at C/V\5'Z:E1G,\I?T\$FY/EP-Q#>080)%0H\1(D6P\$`#)1:I1%#5
M.8,4.C,NY-C1X[LV(3^.X"=PQRE[%RFVTS?2Y4N8,1%.-#EJEC:,US;*Y-G3
MYT\:-*%P:[FB9KR=0)4N9;JZ at 4!\3%UN?QCEG(`N>S'@W7\P#+4D(P/SE#BU
M=5\XEF>ZMF\\UW<^3LE?1#0D%H.J8X7'ZC6=3VA4.J56K=.DDF'D=IFWK'!Y
M)9?-9W1:O8Z&(5[XAZW5N>=W?%Z_Y_<;=H0X0<"V%D*70S_%1<9&QT>ZC4\$C
MOB^-1,A,S4W.3L^#H\$DB1\L+S\$_45-555B>3R=52BM/66MM;W-Q`KUR1%5K=
M8.%AXKVB8EX%V6+F9N=GLQ%G6!1 at Z&ML=UR"^)BZW/XPRCF!I3CK3:W_8/AQ
M9&F>:*JN;.N^<"S/=&W?&'#H8G_AP*!P2"P:C\BD<LGTZ9C0J'1*K5JOV&PI
MI.UZO^"P>\$RF/LOHM'K-;KO?\+A\3J_;[_B\?L_O^_^`@8*#A(6&AXB)BHN,
MC8Z/D)&2DY1P8`3Q,76Y_6&4DU9[<=:;=__!4!S)TCS15%W9UGWA6)[IVK[Q
M7-_YWO^!0>&06#0>D4GEDMET/J%1Z91:M5ZQ6>V6V_5^P6'QF%PVG]%I]9K=
M=K_A<?F<7K??\7G]GM_WFV`)XF/J<OO#*">M]N*L-^_^@Z\$XDJ5YHJFZLJW[
MPK\$\T[5]X[F^\[W_`X/"(;%H/"*3RB6SZ7Q"H](IM6J]8K/:+;?K_8+#XC&Y
M;#ZCT^HUN^U^P^/R.;UNO^/S^CV_[S>6\$\3'U.7VAU%.6NW%66_>_0=#<21+
M\T13=65;]X5C>:8SX,9K?>=[_P<&A4/B"'<L)I5+9M/YA\$9#MP-5>L5FM5MN
MU]N@(C6`;]E\1J?5WJ/5EKN0UW-ZW7[')]J=O1OBSPL4'"0LY!'C(]N3"),S
M?(2,E)R<0.1H!'Q8I.3L]/RDV[RT9(0#/45-Y7(L)-UP_5.4RU0]_B"(CZG+
M[0^CG+3:B[/>O/NO`2(@C>#IF=](6BR+QO),U_:-Y_K.HV+W>BV\$%%7O>(!A
M at BVD\PF-2E/-J?6Z46:9U23)".%B:=H+>(Q.J]?4'_NM_KFWWJXW<':(X1SB
MTLX7*#@X-3=A2)BX`DC'\$'2(N,68=^1GQJB8J;DI><GYZ7D2B2"'.31ZF5<&
M10D)^@H;>_J')ZMG6K**@QJ">U?\$"]F*YRLX;(N<S';LV!+LQ%QA*3U]\$^U2
M3(S=]X7Y#!R5K3Q.#EU]JXVFFU'*_IMSO1WQG1#?X,9+GVM?WN^O_,B5/FH#
M%9RCM4Z8CH2]7(%KA(K?K3W_*EH\$V\$Y8&,%<Q,3-`A\$PU8Z00+(59"C0F\<P
M7)A<Y/Y\$(#ZF+K<_C'+2:B\$`)MOL^=6`H1>*I1F,Z?6MZ:NXT\=N]8+:A]O[
M\RXH'!*+QB,R&\$LZ>AV at 4-=:PC0V*3-'[6!PDFW%FQ#OK*H?VI==L]ON-YQ!
MCI^Q7S/1_ASJI_0_(`_>&-255AIB8>`B8Z/CE2)=W\,D2^5=U&67YF/GD5I9
M1.+HH*?I*2J<&5BJ8!*K:"E))`6M9%IKKHH)*:+N+W`P#6PK,:]L[-RQ<7`O
MVJZP&W*MH#-G-';V(K,VY#(W1G>3=:^<>(OA(>DY>_O;M7NM\G`\\$_E]R70]
M at O[7)NZ^@`*K#"PSKV"J?/A^\`L7K9\1@`@G4JP&KB*_BR6Z&`*"2&DAR'+;
M#&K<@/\$D0E`H48K\X]%AQI`R?;%Y.4XBI95M_ at C\$Q]3E]H=13 at BLI5E?K/T'
MPXDC2U-\$@52M3/>%8[E\$\$3:<2>:N>_\'!H5#8H<X<AV5RES3N-RE(BI>HQEP
M9K&]JB?+272A8W+9?\$8'M6GD%6;[TK#5)QLWQ[P_];;S)\Y at B>L`M#,\1,1+
M7)P:M!N\$C*,HA*+LFP&Q'(%+XI)2D&04':T\$(STUN/DJBFP-S7RL6?/R=*#R
MT:RXE"/+1?WE4 at 4F%<L9<D5^V?J+7;G:JWWPG?K<O2CC&];&M=EFG#ZX%M(2
M[X9=`*=F2X]*M64/C[;E%H''*R^U]]X/4]7G9[;AWSL=M-0`&5A/UB9H*]0M
M5,C/%\$"*D\*TJ\C\$1TM"C!\$1?LSHCN\$&69 at XTMM7,.1*=!=!48')4MZDDZ!F
MWO28\$9P]CGYP!@)X0J;,.L5 at XAO:4."QGN-`AMRI%(<QE.=2WJM)_HI`?\$Q=
M;G>00%33SI?UYMT'ZL,^+201\UQ2]6!;[R5EAGYL[M)W6.KQ7K!BN`B-1V2R
M)-J^/4&1K#1#,"VNPS.0149'R\$C)Q9,7KTG,D<2EH*JQ/D:5N\$S24E/(QKG!
MU4(?%\$#5EM-96AXN%+=0.*'8\$CD*IKK>M]3,XEI2OZMC9\$,Z0:;AE4M)/]9K
M5S?.IN9':Z+CXNRHX<!.Z7'L#>V)?PKWV=)'Y^9 at _=?US<ROZ0S/<GNPS
M4N[>%()ZV"5T9P=:07OO%/XY*(IAO2\QE>Y4NZC/H\$->'6M83.BIWXU.60JF
MA%%1Y2N7,T120481STQL'Y/\$Q(FKDBPYZS:18;ENI<2?\EB<G-B3DT9-MFID
M+.FTU4ZK6)-N#1EP*!NDS[(2?4AO%4]R)NQAH>&%(5JN9-!6A(MD(<FC4[^^
M;`EO+%F%2_?5M1NL)3<(C4H2QD<%9%'(0>,VSKMD;UF4?P'G88P7_ at F!^)BZ
M`:".21C-DZ[.S?NY7B at BX*B-6XDFZOIE[M2&LW?&)`:[M=GUMAL/QR+ZC\$A(
M<KG8D8"_"O0A9!ZMV!1TJ,M\$O."PV,D`8[>8&/I*J=J0Z'69S*-SLTV\4:[7
MUOA-;F]]*2ACAV\$-B(N*+XN/7HJ0&EMQDW:\$A7=+/8*9DF(-1768)J4LEZFJ
M,&8@@(":GZ1E1*<<GIE?EVQV5']*OA]*?J-PI*O(R<J0.+`BOLM.T8]IJ*#+
MM+G3VV8YLBNGSD^PT\$/<4M\4X.*Q>W"19VKB?X=9TWC.RM>A[NFXWV/2/1/\$
M9 at C?PSTEP<G;M+(ES%O'8,:\F*NF3X at HS]G<R21EDGDNC_[TV%`F)Z*FC/\$,
MDK(CFYY+\V3M,I7?":N!+/@T*M5F/*5;]4`U>'3CV7YI&1;U9Z_ at 6ED=[:[5
M1?;J3Z0.T<;-M at XCQ+L9R[(<S!AGK1)@Y39VJW66J8!TTP)^"[>QM\(TC_4=
MUMFSVLP<'95>_D(@/J8>-"QZ<#)'E\OZ\AX]&#9?R)2@=&(JVP;I.:JPN[D7
MW>;*?OM_[[>J:2RWH%!GG"`Y2]%#ED0UIPF;SFK2<I-5YA<2QCVY8YRSJ_9(
MUX8SIMAFP=V1>7SVPG=&]>F?3Q&;V)W<(6*BXJ+<7N,+&*,D(J31Y.4A9!^?
M5>"5IYT=:,GHFP0G:>@,:H72V:,J3ZQAV0YFZ9X0W&1G'*6I9NK*+?'L%IIQ
M+P_NYNJM8^9QLA,K,%WU)U:R!?%@MV(E4Q=S\#2*4I;Y]SI[N_L[?+SVIUB4
M#+ at Y15GA]9]?C+QR;@8=&9=/';J#"F/T6:B%'"\$O\$!UF^[)OF;QU>4"FS5ME
MD*(J3]A`.O/2D.3&61!'ID%I:N2IC.`R<.1(4]!'ESH%"MMY,R6RG4+O`)J(
M\J<^(C7RL2S:="A4E4M](BW8,JK0IV1T487I"FL>L/S\$DNVI1R=!H\$G+'BW*
M%>U%6?VJ0M7*]BY>4\$9UT4T8%.^0D&Z![`W^0"`^IAHTK'HP2>1:<'/S[A?V
MB2-I526:JBO+GN7;RHPV9S%HZ^JU0P\N%9(%?;`:IVBB7)I*H_`)=?5F&B<V
MJ]UFIM[<-PP:6C]2L17I51-M9S23/#GCD-5.\$X798@]R.\$]>\$I^6QY_)GM\-
M(6.C(YL9H"1%B]0CX61\$%HW0#V3F#RC>9X3AV`G;I6J>Q.J5HFB<:ZP;:90K
M;BZK+F]OG\NBK_`P<;\$@`^W<G><AK.:EJ5@,<>!L&=6;:'82G&TR]S?@,M1X
M9LAO.&*S']]B,&/Z&I`QF1.Y]^CZ-WYDO+_%OS#E?`Q,IR]608"J:*`Z&/"A
MK&TC[.E)F.P8#XAQ_B1JG,BQXD=Q\$"TB6\*.605^'1]BK\$5R0TN#+Z.MO%B3
M8+>5(:7Q>]+LCL.;+*?\$%%\$TW%\$2.X5>8^JTYM(O24LJ8V;R*=8=4P>I!+6U
M7U:185=\$'5MJ)#Z?0:H\$->M665NX&F?2--/U+=5!>#GM)3O^A4!\3\$5H6`:/
M6S18F?7F!G<P%\$>RK!PT55>V==FK,1,93&<\+Q\-U7-?*_8BUGY'I">9]&5X
MDB:C9ES^HE5LJ#@L=F6?[,[[(#N?&U78,V9[(V8PG-*FGR^Q.XT*K??][@DU
MG*L*M+0A/,\$1%\6>.42>OSVEQDHF+LE,3\$!+J4RBM\Z..-'233O3DTF:T1>K
M3PQ8MS\%U-1;7+Y6PES<PUZF52!@-&)5V]#=FU-8H&5CZ&AI*67D:<7G:Q/>
M&>YHZU[O-5GPVVQM]'1+X5IV]:SS=RU2\$?%O;?N\N:>M]'AY@`&'":Q\$CZ".
M?QP23BOGRR`E\$@^-23Q8T2*KB_!!*&9<]`L"C(`-S4D4^;\$D1Y0IH9U4J1!D
MRVUU*KIS2).E'I at Y=4[<&=%5SVZ@,M[LE(_H.*!)E0JBN;3=1J=1"V&Z(1`?
M4Q\$:ED%YVK079[UY]Q\,Q9&4JA)-0>=1W1>.9:6=5\>J\^2T_1\8%`XS/>*Q
MJ\$,NF<V%TLG`3:!/7C6:U6ZY(F,7B06/R1ZQD[7+]:9E]QN^_,;I=7OPW\$Q3
M+ZS]'3!04&-NT/`0T6KL#R(OP*\P47)RT9'R\$I/+,JRML8\Q,U3T*'+4]!2/
M#)0&M=65J?15=G:E,M9 at DU9WES"7]W?75VB5%=CX&.,6>=E5&*_3DUF:V7G:
M.K\$ZL(,@/J8>-&QZ<-)J+\YZ\^X_&(KCU9`GFJHKV[JM]'I.+-LWGNL[']4]
M,"@<\$CNFHH*&7#*;SB<#*IU2JY!C4UFR<KO>Y^\K'I-16*8C\$RZSVV[.^BV?
ML\_(M)JNW\_C_#_ at DMV\$7XI67F"B(E3AHN,CR^""I-FA1B-DIJ;A9J>G"*6/
M#`UFTN<I*DAI*FNGW9%\$:*2L::OM;2VNKF<-:8"O#M[6+G'J:C'R&Y8)++`!
MNBU!?\$P]Z%WPY*357ISUYMU_,!2M:#1/-%57MEV=`(;C1J[=NG1WOO=_8/"B
M\$Q:-1V32I,LQB;0GZZ:D5JU7[#"[Y7:]&^=S1OM-)]%O6KWVHMEO>+SE5,S&
MO!S%+>?W_:*]/\%!PC"[&S.\1`C"1L?'A\$#(2<HKHL6IQ1B5)KW*3U`UR5#2
MTCDP,TU`5811TU?8E]A9VB6.Q+N1O+/:7E_=WV!A"=>C7>+A9.5E9N9<2U:&
MYFGJ:FO(9_P3 at OB8BM"P#,I)J[TXZ\V[_V`H6L]HGFBJKFR[-F[HE!`<WWBN
M[WQ,]\"@<\$@TV8HUQ^2';#J?T"\$S2JU:CU8)-CI;9K_ at L%@Q'9O/HYD:O85V
MM>BX?'XKT^]X at _JQ-MN=;S5Y at X2%<(:(?H\$,;5F-@\$J')(N)2'M\`6LPEYR<
MF9&51J&C5:!)?UR.E`>=K:ZOL)<OL;2UM9^>G9D)93\V?+9[I*P9C\/',L:,
MQ^'Z^]>\\.D`Y>%3!D at 507>N`G(PI1"/+UL-(R;9P)`*O at W^!.)CZD'W,J@<
MK4_BK#?O'E:?.)*E>:()H%F!];:I/-.UW5U??L\K+X<DOHP#1,'L?DI4;.E\
M0DM#8=`#NV*S6IC+<(R"P^)G<DS\@EC3!5I5[)KCWJJ\;D^MV6_YM(S;`@8*
M#A)NN1AVY=W1^"W.[9\$T(D!.ODDZWM!A;G*R;5!VAHH2_0T>'EW6I=IIJIPI
M3L#NK<".GC39YK+JXO'ZUH04<@E?V;:6UC)(#CTD_R*O/DOW3%=;C](2%V*#
MZC at K?[Y<GZI%CY_C(*'#K8NVM9O''6=^%UN_ZWVW]V*KH^OO&S.O7"B`?/`9
MB5?)&:I_"\$W,TF9J43='R0P:"\A'"1>'@:IR/8SP2**R8//Z2\$RI,M`I+5Z`
MK7P\$,>0N(>LP:G0BS at K-C\8JBO3F<J6/HCA_<)R0LR1)ID?!7+QY+ZDJJD@\
M^E3^0B`^IAXT+(-2NHG<LWKSKG`VA1Y9FJ<%JBNK!@W:C5]<V\E\ZU2+[3&+
M!/H17\6B[XC++5;*"U,W?#(JU"MG*NL%45%#AIN\$A6!8RMGF;";3;.W6ZA;.
M3VVJ.;56RI%]--!=71H<DI\$8HMCA at UFBH^(@5J&(X-SD1F6DB*9'YL5-G@;9
M%Z at GIYWI*=&?)F/H"REIG>MC"VP3;-DHC==KG*P)ZX=O%K\$J[S&E<81:;,4N
MG^#R\$[!H:G(I]N:VMM=P+;BBL-!X\'4W=;5JZG2Q<N-M=-_Y:LTE.GXZ=[X,
M/CC8NU+T^.UHEXR=.DH!W10JQ\?>0((22\A**-\$BPVJ5X2(NX?AC(\A\$\$W/%
M`J6GY"J']CI!-\$@.XS>8(U/0G%FSFTN6(4?=^]@%6\Y3[\$P&\B.S'])>1WFH
M?+?4)C((3[5-/1*4HLL\(J\ZO5A5DD.NPXI"_924*IR=/80V9;FO+`ZXS2K^
M<1%3K=U\8@<-A0(0\$\2"&Z,"RN*ML-201ISJP at O)6MNSN.02IHRU*Y1Q4[_.
MXCS^@4!\3#UH6&;<I-5>F%IX_'[+8RHO!\$\T55=2FS)8>F.:BS>VK>LNZW=@
M4`CY#8U'Y)'BVA"3MF=T6)16F50\$=H&2Y4ZEA]9J%"O*MW'6 at 5Q*SU.OA(=.
MU^?V:A._G0G?]#V[O\"=/CZV01\=0JO\$1,81/3+)IT>>-A<P+RU+2#)/.,JH
M-2)#H\$X-4-0MT"33S\$G7C];14[8]T:FQ5472W4U,6C_A2U^WUZY57KDZTN!;
M8C]C,^7E%YQE84?H:.TTY%I\$8)(PZM2@[,EQ\$V<]#.PP<,!N/HQP^N)<F=C1
M^%U(?:R4X*.5SIP@@E!FK0,A0EV*>@&A:&)8T2*P&TN<)*)+F,\'OWX.CP'D
M.+`CR9,TSA at D^*9BJ(W2IC6J!"<9BXDF4Y8*&!/62)^V&#WBQ7+GQZ.EYB4M
M=%3>PZ"Z7'EZF84IM9Y\$C5*\ZD3HIV]7MVX]B+3KG9U13\U\$"R,;6;=:*3X]
MR79?(:,A\E`M"?8?T[&!-L(E1EBLSJ52A^8]JT9?4+6]%MTC)+>C-<\$T!:]L
MW+9SM\$%OJ3)F_D0@/J8F-&QH<-)Z'(ZVXNX_Z'`;\I#,>9I0V+JO)*;4.JOU
M at ML[/_8_,,B:Z(:_HE`A22*33D,G!YM2JU3-!=B*6#_<+OB:B>6>WY>MR51C
MS6X+^RT7-N/MGIV>W^SGJ8Q27]0 at SQ*=7Q9?(I2*6Y_2G"%#%:.?9!EBYITF
M)XJBD<^1ILQA9Q#@I"F1:NE?H:,HZ\S85-JC;"ON*\$G=9RSBI99N83#7L-SM
MSFWR9F[:<2-O6)<Q*33-=0FL[ZMP9C%>]E\QLS at F\+/R=O=;^7ED:.#T//U#
M_?R9^B22_=D2.*APW\RXTV7-F+E3!7FE:^C\$W<)5">.]F^BI1+"(@4?N38/2
MCZ,7'1I5C21)"J!%;I8<NB+X*Z6ID at E1B9/9K*(VE33`P+1ILA],=NAF"67R
MTF502-B2LJ"9S::=7G"<8;3""273K-X&\$M7W!&)6GTHE:KT09>:ZH@\$%*@/I
MX:;'LN.PRG/*2NS8:`[=HEG[]>&NG7(]'GR:ENPPO'.I^?\A\$!]3EPT>1CEI
MM2_`MC?@OYG`0_.N*AM'+SPMM8,Y5J[IL,YU1MS]^;>XX7B at H>X85,Z22Z=/
M0OJY+AGJU835:E.J)A3<Q1J=WZ?YF69JU\$IT[MT5DH/Q-M1^U^^]UI<<@Z5D
MT(7GSRLO(7\$E;(7*KXS/X6-1DC+"\$BY3X2NN<FYSZ3.4M)2Q[/`4D>VLT2UE
M"\W3C_#P;313Y`4W#8.D\'%TMLYTJO at 8&8F7DT).%6&L-YFHB#9V-PKZ>IN;
MJZ<CL%L<\$]#&.]CW9GEZ9YW]_<Y7-.G6H99+NAT^AMU]OS\?)6BPTHV+4 at 63
M/!K^D/QS.\$W>'G4&4T5ZV`HBPXMFIC0ZD^AF",4JQC:6W-21F361*-2@=.C2
M9\$R+,V4T._&*&AZ1'F7VI'EF);E2,/<1]7FT9D!PXW`*,0JC(E*I4%L&?4JG
M8<RK4[ER4OK+:M.47<F6U1CM*"^86\NV%27-JBZQBMA>_R00'U.7VQ]&"<%L
M`&>M;?<_V+!0W,@,=*HT6=D7CN69#NL2']4==EN_%A0.B<4/D)+C&)D_Y1.Z
M7(@.R)2UF=5N.]AK#N'UMF)6%!>=5G/'4>J:Z);/W;(Q')^WWSUOA?A!B at 5(
M4,_P\$'&*D\$XG\881,O))@L_1\K+1+@)0T:3'Q?-2='1K!9(4L4)5DG72!A76
M,K-L\\*II`PG=I=W)JH7^*2PJA6W,ACY\89,59CU]04W>9KZ3[<:6Z5XY#C;
MF[(;?/O:(/QB^#L=%5V]G8'1/=YB]G/<,W207GZ?O[]WU8\_@=!\V0L3,)JY
M at 0L9-FRBSV\$[B%\XH%B51(FOB!(;.79DHM#CKHD at 1A*\Y4I3R`2*!.)CZG+[
MPR at GK?;BK#=WH(.A.)(1\(EG<+*M^\)N.=.U?>.YOO.]_P.##54H9CR^A,HE
ML^E\0J/2Z10E06*S+2JWZ_V"P^(Q><A:?;1J=;GM?L/C\CEY;5?`Z/H]O^__
M`YK9'046&AXB)BI"K2TZ/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ)JGQ#\$
MQ]3E]H=13EKMQ5EOWOT'0W\$D2_-\$4W5E6_>%8WFF:_O&<WWG>_\'!H5#8M%X
M1":5RQ#`"6!&I5-JU7K%!I[;DS/[!8?%8[)O"]5VT12TM_R&Q^7S:[O-KCP3
M;H:;3P<,%!PDA#F;6\$/4.^#S6O-++)2<I*RT7."2^--<-/B#>KR['"4M-14[
MY+0X2^UC/(6-E9T-<MQLN(5 at S<2TF_,EB(^IR^T/HYRTVHNSWKS[#X;B.`%`
M8)Y(JIB6FYXN,\\'2^;ZSO?^#PP*A\2BD513&6(KW-)&4]Z44I0*:L4>M]RN
M]PL.B\?D'\MYGCJS#VW2EFRRU^6ZO6K/Z_?\/C<&53-EI88GUW*%`[<(P^3W
M:*0%.4E9:7GY5"4X1T78(-FX]'3HR89Y.B*)NLK:ZCH\$F(E&E^"6R&C(I/K*
MVV;X\$M4K/\$P,&0BCYKM`=?P;5PQ=^UNQ.<@W/88=O<W=[2VV2Q%*FA<>9OZ=
MOH.NWK[*#O%\TP??50^-S)H/>^_N;ZPM`B!:=>!<"UA,RCY4"X7T^P?^C4!\
M3%UN?P<`A-):FO5>\WBN`T--(AGS5-<D-<R113"9A.-ZHV4W]W]@4#@D4G"G
MV^]R](V8G%WQ"8T6@[U)KUFU?K+3;D"+'(?-9W1:C0*+;I at R^4*,J^;=MO&^
M9F'%^9"D-!BAO0C`AJ66.B_#0!PN/LE)RAG\$O[FE2#*O(<:6"L>^3[N7R\K&
MLQ32*[\$KQ0?6PS]+4DW9Q1U85-Y>5<1(33U1VL["/&&W8I[=6%Q37YU3T]-F
M(&)/#]MIMIF77,M4*D6:Y^]H]/3NC+C5\$F*_5M;DV9I50&P1]5`;>F?S=]9"
M50.Q+8<+0=2<+'P\$"Z&T&/GV332#J]V7+<;+E&Q2\`R@&X\$1WE\$\$N4)B+3IP
M"'HLV(:CM%HMSZT;B4DCL"@A2>Z4 at O.@OP_A-KZ,:9"9SEPXN4D"VO/C,*2'
ME)ZTR:PHM#H`\$2XD&LX)-)YA\4Q=6O3(O6ON`KHL*W0<NZ=,M2UEV953U1+>
MUFYKJU\$OIDUCFFZ]"K-C7[&)Z\&U.XHJ%;"M[\$7M,"SQ/;J4:<5U9N=Q(K8_
M*RN\>%@46I2FRZQ&K-CUHD"_(!UM?+!?;8BM?U'SW/7S[=Y/?>L6?-9X/[R`
MV;`^_/KM!('XF+K<_ at T`2*NE\B[)I_Y']DT>"'7BE2*<B9&K6\7RAKKT7#IY
M;72VX`@8(D:\$K)UOR6PZGX\$>U"F=4I567)714L167<TM2^:%RXEM%-LTKL]%
M\$SRCWGC9Z+Q^'\'S57Y_0X*\$)TIU-H%_BH5B<'>,,C2/:T]C@&F(C9N<G5.4
MGH:AHZ1,FJ5OH\$F-;*<OKB&9EZBTM;9OM[FZNP^PI&Y]D8M0JD.SO,C)G[[*
MS<Y9PL^RTM35UM?8V=K;R]S>W^#AXN/DY>;GZ.GJZ^SM[N_P\?+S]/7V]_CY
M9M\$Z=Y)S%IB96F6%D<!*B_A]_R`0'U.7VQ]&.6FU%V>]>???`@X1)!,S1-!I
M!966@=U'9N>HOO6=[_T?&!0.,;+<!79LD``BY>+IB49WU!@QH+1BN5WO%QP6
M;VK,9E;5/!O4ZQ'TU&:?UTZT&47/J]/\K'[.;L0O<&_%S*\$.T>WOR<G0A`\2
M\2^PLI#Q10[S9,SS\$S14=/3&*.^.K?-0!>Z-=2[53C`UC=;V%@TV5[85U]55
MZ[>N\$V+XY6WV-'?Y<I;Y&)CXEY2ZVOH:>^@H\$O7YL4U9NG'3&S7<]KS<EY=S
M^A491]A]TG at 9')X[^G;571R/O%\V at 0,)%C3HZQV[53F2O(,&+!,_9A+1'1-T
MSD@<1Y'R<&VD%8[=Q(KS'#[<1>- at 2I4K68:1R.VB*G^]U#VS27*?.'L63TYC
MHO,GRDL[2U[YF+";R%WIQC%\17%+2ZE3J59=HG'0G7^1R-UKU_2KI4%^)"EB
MY-5KI4>%)D[2-=0FH+);\$^GYIQ4ON#UJ`98\A!9 at 5*N#"1<V?!CQ-<&)&3=V
M_!ARY!]])5>V?!ES9LVD+ at C\$Q]3E]H=13EKMQ5EOWOT'0W\$D2_-\$4W5E6_>%
38WFF:_O&<WWG>_\'!H7#7@\$`.]3E
`
end

```